From e4af14c9005fabdb6b02c702cfc9aefeccd4375d Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Sun, 17 Mar 2024 13:55:20 +0200
Subject: [PATCH 29/29] Generate effect_type enum with generate_enums.py

See RM #309

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 common/effects.h                    | 327 +---------------------------
 gen_headers/enums/Makefile.am       |   2 +
 gen_headers/enums/effects_enums.def | 168 ++++++++++++++
 meson.build                         |   1 +
 4 files changed, 172 insertions(+), 326 deletions(-)
 create mode 100644 gen_headers/enums/effects_enums.def

diff --git a/common/effects.h b/common/effects.h
index ff0f4a0290..beae367755 100644
--- a/common/effects.h
+++ b/common/effects.h
@@ -28,332 +28,7 @@ extern "C" {
 struct conn_list;
 struct multiplier;
 
-/* Type of effects. Add new values via SPECENUM_VALUE%d and
- * SPECENUM_VALUE%dNAME at the end of the list.
- * Used in the network protocol.
- *
- */
-#define SPECENUM_NAME effect_type
-#define SPECENUM_VALUE0 EFT_TECH_PARASITE
-#define SPECENUM_VALUE0NAME "Tech_Parasite"
-#define SPECENUM_VALUE1 EFT_AIRLIFT
-#define SPECENUM_VALUE1NAME "Airlift"
-#define SPECENUM_VALUE2 EFT_ANY_GOVERNMENT
-#define SPECENUM_VALUE2NAME "Any_Government"
-#define SPECENUM_VALUE3 EFT_CAPITAL_CITY
-#define SPECENUM_VALUE3NAME "Capital_City"
-#define SPECENUM_VALUE4 EFT_ENABLE_NUKE
-#define SPECENUM_VALUE4NAME "Enable_Nuke"
-#define SPECENUM_VALUE5 EFT_ENABLE_SPACE
-#define SPECENUM_VALUE5NAME "Enable_Space"
-#define SPECENUM_VALUE6 EFT_SPECIALIST_OUTPUT
-#define SPECENUM_VALUE6NAME "Specialist_Output"
-#define SPECENUM_VALUE7 EFT_OUTPUT_BONUS
-#define SPECENUM_VALUE7NAME "Output_Bonus"
-#define SPECENUM_VALUE8 EFT_OUTPUT_BONUS_2
-#define SPECENUM_VALUE8NAME "Output_Bonus_2"
-/* add to each worked tile */
-#define SPECENUM_VALUE9 EFT_OUTPUT_ADD_TILE
-#define SPECENUM_VALUE9NAME "Output_Add_Tile"
-/* add to each worked tile that already has output */
-#define SPECENUM_VALUE10 EFT_OUTPUT_INC_TILE
-#define SPECENUM_VALUE10NAME "Output_Inc_Tile"
-/* increase tile output by given % */
-#define SPECENUM_VALUE11 EFT_OUTPUT_PER_TILE
-#define SPECENUM_VALUE11NAME "Output_Per_Tile"
-#define SPECENUM_VALUE12 EFT_OUTPUT_WASTE_PCT
-#define SPECENUM_VALUE12NAME "Output_Waste_Pct"
-#define SPECENUM_VALUE13 EFT_FORCE_CONTENT
-#define SPECENUM_VALUE13NAME "Force_Content"
-/* TODO: EFT_FORCE_CONTENT_PCT */
-#define SPECENUM_VALUE14 EFT_GIVE_IMM_TECH
-#define SPECENUM_VALUE14NAME "Give_Imm_Tech"
-#define SPECENUM_VALUE15 EFT_GROWTH_FOOD
-#define SPECENUM_VALUE15NAME "Growth_Food"
-#define SPECENUM_VALUE16 EFT_SHRINK_FOOD
-#define SPECENUM_VALUE16NAME "Shrink_Food"
-#define SPECENUM_VALUE17 EFT_HAVE_EMBASSIES
-#define SPECENUM_VALUE17NAME "Have_Embassies"
-#define SPECENUM_VALUE18 EFT_MAKE_CONTENT
-#define SPECENUM_VALUE18NAME "Make_Content"
-#define SPECENUM_VALUE19 EFT_MAKE_CONTENT_MIL
-#define SPECENUM_VALUE19NAME "Make_Content_Mil"
-#define SPECENUM_VALUE20 EFT_MAKE_CONTENT_MIL_PER
-#define SPECENUM_VALUE20NAME "Make_Content_Mil_Per"
-/* TODO: EFT_MAKE_CONTENT_PCT */
-#define SPECENUM_VALUE21 EFT_MAKE_HAPPY
-#define SPECENUM_VALUE21NAME "Make_Happy"
-#define SPECENUM_VALUE22 EFT_NO_ANARCHY
-#define SPECENUM_VALUE22NAME "No_Anarchy"
-#define SPECENUM_VALUE23 EFT_NUKE_PROOF
-#define SPECENUM_VALUE23NAME "Nuke_Proof"
-/* TODO: EFT_POLLU_ADJ */
-/* TODO: EFT_POLLU_PCT */
-/* TODO: EFT_POLLU_POP_ADJ */
-#define SPECENUM_VALUE24 EFT_POLLU_POP_PCT
-#define SPECENUM_VALUE24NAME "Pollu_Pop_Pct"
-#define SPECENUM_VALUE25 EFT_POLLU_POP_PCT_2
-#define SPECENUM_VALUE25NAME "Pollu_Pop_Pct_2"
-/* TODO: EFT_POLLU_PROD_ADJ */
-#define SPECENUM_VALUE26 EFT_POLLU_PROD_PCT
-#define SPECENUM_VALUE26NAME "Pollu_Prod_Pct"
-/* TODO: EFT_PROD_PCT */
-#define SPECENUM_VALUE27 EFT_REVEAL_CITIES
-#define SPECENUM_VALUE27NAME "Reveal_Cities"
-#define SPECENUM_VALUE28 EFT_REVEAL_MAP
-#define SPECENUM_VALUE28NAME "Reveal_Map"
-/* TODO: EFT_INCITE_DIST_ADJ */
-#define SPECENUM_VALUE29 EFT_INCITE_COST_PCT
-#define SPECENUM_VALUE29NAME "Incite_Cost_Pct"
-#define SPECENUM_VALUE30 EFT_SIZE_ADJ
-#define SPECENUM_VALUE30NAME "Size_Adj"
-#define SPECENUM_VALUE31 EFT_SIZE_UNLIMIT
-#define SPECENUM_VALUE31NAME "Size_Unlimit"
-#define SPECENUM_VALUE32 EFT_SS_STRUCTURAL
-#define SPECENUM_VALUE32NAME "SS_Structural"
-#define SPECENUM_VALUE33 EFT_SS_COMPONENT
-#define SPECENUM_VALUE33NAME "SS_Component"
-#define SPECENUM_VALUE34 EFT_SS_MODULE
-#define SPECENUM_VALUE34NAME "SS_Module"
-#define SPECENUM_VALUE35 EFT_SPY_RESISTANT
-#define SPECENUM_VALUE35NAME "Spy_Resistant"
-#define SPECENUM_VALUE36 EFT_MOVE_BONUS
-#define SPECENUM_VALUE36NAME "Move_Bonus"
-#define SPECENUM_VALUE37 EFT_UNIT_NO_LOSE_POP
-#define SPECENUM_VALUE37NAME "Unit_No_Lose_Pop"
-#define SPECENUM_VALUE38 EFT_UNIT_RECOVER
-#define SPECENUM_VALUE38NAME "Unit_Recover"
-#define SPECENUM_VALUE39 EFT_UPGRADE_UNIT
-#define SPECENUM_VALUE39NAME "Upgrade_Unit"
-#define SPECENUM_VALUE40 EFT_UPKEEP_FREE
-#define SPECENUM_VALUE40NAME "Upkeep_Free"
-#define SPECENUM_VALUE41 EFT_TECH_UPKEEP_FREE
-#define SPECENUM_VALUE41NAME "Tech_Upkeep_Free"
-#define SPECENUM_VALUE42 EFT_NO_UNHAPPY
-#define SPECENUM_VALUE42NAME "No_Unhappy"
-#define SPECENUM_VALUE43 EFT_VETERAN_BUILD
-#define SPECENUM_VALUE43NAME "Veteran_Build"
-#define SPECENUM_VALUE44 EFT_VETERAN_COMBAT
-#define SPECENUM_VALUE44NAME "Veteran_Combat"
-#define SPECENUM_VALUE45 EFT_HP_REGEN
-#define SPECENUM_VALUE45NAME "HP_Regen"
-#define SPECENUM_VALUE46 EFT_CITY_VISION_RADIUS_SQ
-#define SPECENUM_VALUE46NAME "City_Vision_Radius_Sq"
-#define SPECENUM_VALUE47 EFT_UNIT_VISION_RADIUS_SQ
-#define SPECENUM_VALUE47NAME "Unit_Vision_Radius_Sq"
-/* Interacts with UTYF_BADWALLATTACKER */
-#define SPECENUM_VALUE48 EFT_DEFEND_BONUS
-#define SPECENUM_VALUE48NAME "Defend_Bonus"
-#define SPECENUM_VALUE49 EFT_TRADE_ROUTE_PCT
-/* FIXME: -> "Trade_Route_Pct" */
-#define SPECENUM_VALUE49NAME "Traderoute_Pct"
-#define SPECENUM_VALUE50 EFT_GAIN_AI_LOVE
-#define SPECENUM_VALUE50NAME "Gain_AI_Love"
-#define SPECENUM_VALUE51 EFT_TURN_YEARS
-#define SPECENUM_VALUE51NAME "Turn_Years"
-#define SPECENUM_VALUE52 EFT_SLOW_DOWN_TIMELINE
-#define SPECENUM_VALUE52NAME "Slow_Down_Timeline"
-#define SPECENUM_VALUE53 EFT_CIVIL_WAR_CHANCE
-#define SPECENUM_VALUE53NAME "Civil_War_Chance"
-/* change of the migration score */
-#define SPECENUM_VALUE54 EFT_MIGRATION_PCT
-#define SPECENUM_VALUE54NAME "Migration_Pct"
-/* +1 unhappy when more than this cities */
-#define SPECENUM_VALUE55 EFT_EMPIRE_SIZE_BASE
-#define SPECENUM_VALUE55NAME "Empire_Size_Base"
-/* adds additional +1 unhappy steps to above */
-#define SPECENUM_VALUE56 EFT_EMPIRE_SIZE_STEP
-#define SPECENUM_VALUE56NAME "Empire_Size_Step"
-#define SPECENUM_VALUE57 EFT_MAX_RATES
-#define SPECENUM_VALUE57NAME "Max_Rates"
-#define SPECENUM_VALUE58 EFT_MARTIAL_LAW_EACH
-#define SPECENUM_VALUE58NAME "Martial_Law_Each"
-#define SPECENUM_VALUE59 EFT_MARTIAL_LAW_MAX
-#define SPECENUM_VALUE59NAME "Martial_Law_Max"
-#define SPECENUM_VALUE60 EFT_RAPTURE_GROW
-#define SPECENUM_VALUE60NAME "Rapture_Grow"
-#define SPECENUM_VALUE61 EFT_REVOLUTION_UNHAPPINESS
-#define SPECENUM_VALUE61NAME "Revolution_Unhappiness"
-#define SPECENUM_VALUE62 EFT_HAS_SENATE
-#define SPECENUM_VALUE62NAME "Has_Senate"
-#define SPECENUM_VALUE63 EFT_INSPIRE_PARTISANS
-#define SPECENUM_VALUE63NAME "Inspire_Partisans"
-#define SPECENUM_VALUE64 EFT_HAPPINESS_TO_GOLD
-#define SPECENUM_VALUE64NAME "Happiness_To_Gold"
-/* stupid special case; we hate it */
-#define SPECENUM_VALUE65 EFT_FANATICS
-#define SPECENUM_VALUE65NAME "Fanatics"
-#define SPECENUM_VALUE66 EFT_NO_DIPLOMACY
-#define SPECENUM_VALUE66NAME "No_Diplomacy"
-#define SPECENUM_VALUE67 EFT_TRADE_REVENUE_BONUS
-#define SPECENUM_VALUE67NAME "Trade_Revenue_Bonus"
-/* multiply unhappy upkeep by this effect */
-#define SPECENUM_VALUE68 EFT_UNHAPPY_FACTOR
-#define SPECENUM_VALUE68NAME "Unhappy_Factor"
-/* multiply upkeep by this effect */
-#define SPECENUM_VALUE69 EFT_UPKEEP_FACTOR
-#define SPECENUM_VALUE69NAME "Upkeep_Factor"
-/* this many units are free from upkeep */
-#define SPECENUM_VALUE70 EFT_UNIT_UPKEEP_FREE_PER_CITY
-#define SPECENUM_VALUE70NAME "Unit_Upkeep_Free_Per_City"
-#define SPECENUM_VALUE71 EFT_OUTPUT_WASTE
-#define SPECENUM_VALUE71NAME "Output_Waste"
-#define SPECENUM_VALUE72 EFT_OUTPUT_WASTE_BY_DISTANCE
-#define SPECENUM_VALUE72NAME "Output_Waste_By_Distance"
-/* -1 penalty to tiles producing more than this */
-#define SPECENUM_VALUE73 EFT_OUTPUT_PENALTY_TILE
-#define SPECENUM_VALUE73NAME "Output_Penalty_Tile"
-#define SPECENUM_VALUE74 EFT_OUTPUT_INC_TILE_CELEBRATE
-#define SPECENUM_VALUE74NAME "Output_Inc_Tile_Celebrate"
-/* all citizens after this are unhappy */
-#define SPECENUM_VALUE75 EFT_CITY_UNHAPPY_SIZE
-#define SPECENUM_VALUE75NAME "City_Unhappy_Size"
-/* add to default squared city radius */
-#define SPECENUM_VALUE76 EFT_CITY_RADIUS_SQ
-#define SPECENUM_VALUE76NAME "City_Radius_Sq"
-/* number of build slots for units */
-#define SPECENUM_VALUE77 EFT_CITY_BUILD_SLOTS
-#define SPECENUM_VALUE77NAME "City_Build_Slots"
-#define SPECENUM_VALUE78 EFT_UPGRADE_PRICE_PCT
-#define SPECENUM_VALUE78NAME "Upgrade_Price_Pct"
-/* City should use walls gfx */
-#define SPECENUM_VALUE79 EFT_VISIBLE_WALLS
-#define SPECENUM_VALUE79NAME "Visible_Walls"
-#define SPECENUM_VALUE80 EFT_TECH_COST_FACTOR
-#define SPECENUM_VALUE80NAME "Tech_Cost_Factor"
-/* [x%] gold upkeep instead of [1] shield upkeep for units */
-#define SPECENUM_VALUE81 EFT_SHIELD2GOLD_FACTOR
-#define SPECENUM_VALUE81NAME "Shield2Gold_Factor"
-#define SPECENUM_VALUE82 EFT_TILE_WORKABLE
-#define SPECENUM_VALUE82NAME "Tile_Workable"
-/* The index for the city image of the given city style. */
-#define SPECENUM_VALUE83 EFT_CITY_IMAGE
-#define SPECENUM_VALUE83NAME "City_Image"
-#define SPECENUM_VALUE84 EFT_IMPR_BUILD_COST_PCT
-#define SPECENUM_VALUE84NAME "Building_Build_Cost_Pct"
-#define SPECENUM_VALUE85 EFT_MAX_TRADE_ROUTES
-#define SPECENUM_VALUE85NAME "Max_Trade_Routes"
-#define SPECENUM_VALUE86 EFT_GOV_CENTER
-#define SPECENUM_VALUE86NAME "Gov_Center"
-#define SPECENUM_VALUE87 EFT_COMBAT_ROUNDS
-#define SPECENUM_VALUE87NAME "Combat_Rounds"
-#define SPECENUM_VALUE88 EFT_IMPR_BUY_COST_PCT
-#define SPECENUM_VALUE88NAME "Building_Buy_Cost_Pct"
-#define SPECENUM_VALUE89 EFT_UNIT_BUILD_COST_PCT
-#define SPECENUM_VALUE89NAME "Unit_Build_Cost_Pct"
-#define SPECENUM_VALUE90 EFT_UNIT_BUY_COST_PCT
-#define SPECENUM_VALUE90NAME "Unit_Buy_Cost_Pct"
-#define SPECENUM_VALUE91 EFT_NOT_TECH_SOURCE
-#define SPECENUM_VALUE91NAME "Not_Tech_Source"
-#define SPECENUM_VALUE92 EFT_ENEMY_CITIZEN_UNHAPPY_PCT
-#define SPECENUM_VALUE92NAME "Enemy_Citizen_Unhappy_Pct"
-#define SPECENUM_VALUE93 EFT_IRRIGATION_PCT
-#define SPECENUM_VALUE93NAME "Irrigation_Pct"
-#define SPECENUM_VALUE94 EFT_MINING_PCT
-#define SPECENUM_VALUE94NAME "Mining_Pct"
-#define SPECENUM_VALUE95 EFT_OUTPUT_TILE_PUNISH_PCT
-#define SPECENUM_VALUE95NAME "Output_Tile_Punish_Pct"
-#define SPECENUM_VALUE96 EFT_UNIT_BRIBE_COST_PCT
-#define SPECENUM_VALUE96NAME "Unit_Bribe_Cost_Pct"
-#define SPECENUM_VALUE97 EFT_VICTORY
-#define SPECENUM_VALUE97NAME "Victory"
-#define SPECENUM_VALUE98 EFT_PERFORMANCE
-#define SPECENUM_VALUE98NAME "Performance"
-#define SPECENUM_VALUE99 EFT_HISTORY
-#define SPECENUM_VALUE99NAME "History"
-#define SPECENUM_VALUE100 EFT_NATION_PERFORMANCE
-#define SPECENUM_VALUE100NAME "National_Performance"
-#define SPECENUM_VALUE101 EFT_NATION_HISTORY
-#define SPECENUM_VALUE101NAME "National_History"
-#define SPECENUM_VALUE102 EFT_TURN_FRAGMENTS
-#define SPECENUM_VALUE102NAME "Turn_Fragments"
-#define SPECENUM_VALUE103 EFT_MAX_STOLEN_GOLD_PM
-#define SPECENUM_VALUE103NAME "Max_Stolen_Gold_Pm"
-#define SPECENUM_VALUE104 EFT_THIEFS_SHARE_PM
-#define SPECENUM_VALUE104NAME "Thiefs_Share_Pm"
-#define SPECENUM_VALUE105 EFT_RETIRE_PCT
-#define SPECENUM_VALUE105NAME "Retire_Pct"
-#define SPECENUM_VALUE106 EFT_ILLEGAL_ACTION_MOVE_COST
-#define SPECENUM_VALUE106NAME "Illegal_Action_Move_Cost"
-#define SPECENUM_VALUE107 EFT_HAVE_CONTACTS
-#define SPECENUM_VALUE107NAME "Have_Contacts"
-#define SPECENUM_VALUE108 EFT_CASUS_BELLI_CAUGHT
-#define SPECENUM_VALUE108NAME "Casus_Belli_Caught"
-#define SPECENUM_VALUE109 EFT_CASUS_BELLI_SUCCESS
-#define SPECENUM_VALUE109NAME "Casus_Belli_Success"
-#define SPECENUM_VALUE110 EFT_ACTION_ODDS_PCT
-#define SPECENUM_VALUE110NAME "Action_Odds_Pct"
-#define SPECENUM_VALUE111 EFT_BORDER_VISION
-#define SPECENUM_VALUE111NAME "Border_Vision"
-#define SPECENUM_VALUE112 EFT_STEALINGS_IGNORE
-#define SPECENUM_VALUE112NAME "Stealings_Ignore"
-#define SPECENUM_VALUE113 EFT_OUTPUT_WASTE_BY_REL_DISTANCE
-#define SPECENUM_VALUE113NAME "Output_Waste_By_Rel_Distance"
-#define SPECENUM_VALUE114 EFT_SABOTEUR_RESISTANT
-#define SPECENUM_VALUE114NAME "Building_Saboteur_Resistant"
-#define SPECENUM_VALUE115 EFT_UNIT_SLOTS
-#define SPECENUM_VALUE115NAME "Unit_Slots"
-#define SPECENUM_VALUE116 EFT_ATTACK_BONUS
-#define SPECENUM_VALUE116NAME "Attack_Bonus"
-#define SPECENUM_VALUE117 EFT_CONQUEST_TECH_PCT
-#define SPECENUM_VALUE117NAME "Conquest_Tech_Pct"
-#define SPECENUM_VALUE118 EFT_ACTION_SUCCESS_MOVE_COST
-#define SPECENUM_VALUE118NAME "Action_Success_Actor_Move_Cost"
-#define SPECENUM_VALUE119 EFT_ACTION_SUCCESS_TARGET_MOVE_COST
-#define SPECENUM_VALUE119NAME "Action_Success_Target_Move_Cost"
-#define SPECENUM_VALUE120 EFT_INFRA_POINTS
-#define SPECENUM_VALUE120NAME "Infra_Points"
-#define SPECENUM_VALUE121 EFT_FORTIFY_DEFENSE_BONUS
-#define SPECENUM_VALUE121NAME "Fortify_Defense_Bonus"
-#define SPECENUM_VALUE122 EFT_MAPS_STOLEN_PCT
-#define SPECENUM_VALUE122NAME "Maps_Stolen_Pct"
-#define SPECENUM_VALUE123 EFT_UNIT_SHIELD_VALUE_PCT
-#define SPECENUM_VALUE123NAME "Unit_Shield_Value_Pct"
-#define SPECENUM_VALUE124 EFT_CASUS_BELLI_COMPLETE
-#define SPECENUM_VALUE124NAME "Casus_Belli_Complete"
-#define SPECENUM_VALUE125 EFT_ILLEGAL_ACTION_HP_COST
-#define SPECENUM_VALUE125NAME "Illegal_Action_HP_Cost"
-#define SPECENUM_VALUE126 EFT_POPCOST_FREE
-#define SPECENUM_VALUE126NAME "Popcost_Free"
-#define SPECENUM_VALUE127 EFT_HEAL_UNIT_PCT
-#define SPECENUM_VALUE127NAME "Heal_Unit_Pct"
-#define SPECENUM_VALUE128 EFT_NUKE_BLAST_RADIUS_1_SQ
-#define SPECENUM_VALUE128NAME "Nuke_Blast_Radius_1_Sq"
-#define SPECENUM_VALUE129 EFT_BORDER_STRENGTH_PCT
-#define SPECENUM_VALUE129NAME "Border_Strength_Pct"
-#define SPECENUM_VALUE130 EFT_ACTION_RESIST_PCT
-#define SPECENUM_VALUE130NAME "Action_Resist_Pct"
-#define SPECENUM_VALUE131 EFT_OUTPUT_BONUS_ABSOLUTE
-#define SPECENUM_VALUE131NAME "Output_Bonus_Absolute"
-#define SPECENUM_VALUE132 EFT_MIN_HP_PCT
-#define SPECENUM_VALUE132NAME "Min_HP_Pct"
-#define SPECENUM_VALUE133 EFT_HP_REGEN_2
-#define SPECENUM_VALUE133NAME "HP_Regen_2"
-#define SPECENUM_VALUE134 EFT_TECH_PARASITE_PCT_MAX
-#define SPECENUM_VALUE134NAME "Tech_Parasite_Pct_Max"
-/* Reduced illness due to buildings ... */
-#define SPECENUM_VALUE135 EFT_HEALTH_PCT
-#define SPECENUM_VALUE135NAME "Health_Pct"
-#define SPECENUM_VALUE136 EFT_ACTIVITY_TIME
-#define SPECENUM_VALUE136NAME "Activity_Time"
-#define SPECENUM_VALUE137 EFT_SURPLUS_WASTE_PCT
-#define SPECENUM_VALUE137NAME "Surplus_Waste_Pct"
-#define SPECENUM_VALUE138 EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE
-#define SPECENUM_VALUE138NAME "Surplus_Waste_Pct_By_Rel_Distance"
-#define SPECENUM_VALUE139 EFT_TECH_LEAKAGE
-#define SPECENUM_VALUE139NAME "Tech_Leakage"
-/* Ruleset specific effects for use from Lua scripts */
-#define SPECENUM_VALUE140 EFT_USER_EFFECT_1
-#define SPECENUM_VALUE140NAME "User_Effect_1"
-#define SPECENUM_VALUE141 EFT_USER_EFFECT_2
-#define SPECENUM_VALUE141NAME "User_Effect_2"
-#define SPECENUM_VALUE142 EFT_USER_EFFECT_3
-#define SPECENUM_VALUE142NAME "User_Effect_3"
-#define SPECENUM_VALUE143 EFT_USER_EFFECT_4
-#define SPECENUM_VALUE143NAME "User_Effect_4"
-/* Keep this last */
-#define SPECENUM_COUNT EFT_COUNT
-#include "specenum_gen.h"
+#include "effects_enums_gen.h"
 
 #define EFT_USER_EFFECT_LAST EFT_USER_EFFECT_4
 
diff --git a/gen_headers/enums/Makefile.am b/gen_headers/enums/Makefile.am
index 1e9d6a66ad..8de50edff9 100644
--- a/gen_headers/enums/Makefile.am
+++ b/gen_headers/enums/Makefile.am
@@ -2,11 +2,13 @@
 
 ENUMS_GEN = \
 		actions_enums_gen.h	\
+		effects_enums_gen.h	\
 		manual_enums_gen.h	\
 		terrain_enums_gen.h
 
 EXTRA_DIST = \
 		actions_enums.def	\
+		effects_enums.def	\
 		manual_enums.def	\
 		terrain_enums.def	\
 		$(ENUMS_GEN)
diff --git a/gen_headers/enums/effects_enums.def b/gen_headers/enums/effects_enums.def
new file mode 100644
index 0000000000..d958859875
--- /dev/null
+++ b/gen_headers/enums/effects_enums.def
@@ -0,0 +1,168 @@
+# Specenum definitions for common/effects.h
+# See gen_headers/generate_enums.py for syntax
+
+/* Used in the network protocol. */
+enum effect_type
+  prefix EFT_
+  count
+values
+  TECH_PARASITE                     "Tech_Parasite"
+  AIRLIFT                           "Airlift"
+  ANY_GOVERNMENT                    "Any_Government"
+  CAPITAL_CITY                      "Capital_City"
+  ENABLE_NUKE                       "Enable_Nuke"
+  ENABLE_SPACE                      "Enable_Space"
+  SPECIALIST_OUTPUT                 "Specialist_Output"
+  OUTPUT_BONUS                      "Output_Bonus"
+  OUTPUT_BONUS_2                    "Output_Bonus_2"
+  /* Add to each worked tile */
+  OUTPUT_ADD_TILE                   "Output_Add_Tile"
+  /* Add to each worked tile that already has output */
+  OUTPUT_INC_TILE                   "Output_Inc_Tile"
+  /* Increase tile output by given % */
+  OUTPUT_PER_TILE                   "Output_Per_Tile"
+  OUTPUT_WASTE_PCT                  "Output_Waste_Pct"
+  FORCE_CONTENT                     "Force_Content"
+  GIVE_IMM_TECH                     "Give_Imm_Tech"
+  GROWTH_FOOD                       "Growth_Food"
+  SHRINK_FOOD                       "Shrink_Food"
+  HAVE_EMBASSIES                    "Have_Embassies"
+  MAKE_CONTENT                      "Make_Content"
+  MAKE_CONTENT_MIL                  "Make_Content_Mil"
+  MAKE_CONTENT_MIL_PER              "Make_Content_Mil_Per"
+  MAKE_HAPPY                        "Make_Happy"
+  NO_ANARCHY                        "No_Anarchy"
+  NUKE_PROOF                        "Nuke_Proof"
+  POLLU_POP_PCT                     "Pollu_Pop_Pct"
+  POLLU_POP_PCT_2                   "Pollu_Pop_Pct_2"
+  POLLU_PROD_PCT                    "Pollu_Prod_Pct"
+  REVEAL_CITIES                     "Reveal_Cities"
+  REVEAL_MAP                        "Reveal_Map"
+  INCITE_COST_PCT                   "Incite_Cost_Pct"
+  SIZE_ADJ                          "Size_Adj"
+  SIZE_UNLIMIT                      "Size_Unlimit"
+  SS_STRUCTURAL                     "SS_Structural"
+  SS_COMPONENT                      "SS_Component"
+  SS_MODULE                         "SS_Module"
+  SPY_RESISTANT                     "Spy_Resistant"
+  MOVE_BONUS                        "Move_Bonus"
+  UNIT_NO_LOSE_POP                  "Unit_No_Lose_Pop"
+  UNIT_RECOVER                      "Unit_Recover"
+  UPGRADE_UNIT                      "Upgrade_Unit"
+  UPKEEP_FREE                       "Upkeep_Free"
+  TECH_UPKEEP_FREE                  "Tech_Upkeep_Free"
+  NO_UNHAPPY                        "No_Unhappy"
+  VETERAN_BUILD                     "Veteran_Build"
+  VETERAN_COMBAT                    "Veteran_Combat"
+  HP_REGEN                          "HP_Regen"
+  CITY_VISION_RADIUS_SQ             "City_Vision_Radius_Sq"
+  UNIT_VISION_RADIUS_SQ             "Unit_Vision_Radius_Sq"
+  DEFEND_BONUS                      "Defend_Bonus"
+  TRADE_ROUTE_PCT                   "Traderoute_Pct"
+  GAIN_AI_LOVE                      "Gain_AI_Love"
+  TURN_YEARS                        "Turn_Years"
+  SLOW_DOWN_TIMELINE                "Slow_Down_Timeline"
+  CIVIL_WAR_CHANCE                  "Civil_War_Chance"
+  MIGRATION_PCT                     "Migration_Pct"
+  EMPIRE_SIZE_BASE                  "Empire_Size_Base"
+  EMPIRE_SIZE_STEP                  "Empire_Size_Step"
+  MAX_RATES                         "Max_Rates"
+  MARTIAL_LAW_EACH                  "Martial_Law_Each"
+  MARTIAL_LAW_MAX                   "Martial_Law_Max"
+  RAPTURE_GROW                      "Rapture_Grow"
+  REVOLUTION_UNHAPPINESS            "Revolution_Unhappiness"
+  HAS_SENATE                        "Has_Senate"
+  INSPIRE_PARTISANS                 "Inspire_Partisans"
+  HAPPINESS_TO_GOLD                 "Happiness_To_Gold"
+  /* Stupid special case; we hate it */
+  FANATICS                          "Fanatics"
+  NO_DIPLOMACY                      "No_Diplomacy"
+  TRADE_REVENUE_BONUS               "Trade_Revenue_Bonus"
+  /* Multiply unhappy upkeep by this effect */
+  UNHAPPY_FACTOR                    "Unhappy_Factor"
+  /* Multiply upkeep by this effect */
+  UPKEEP_FACTOR                     "Upkeep_Factor"
+  /* This many units are free from upkeep */
+  UNIT_UPKEEP_FREE_PER_CITY         "Unit_Upkeep_Free_Per_City"
+  OUTPUT_WASTE                      "Output_Waste"
+  OUTPUT_WASTE_BY_DISTANCE          "Output_Waste_By_Distance"
+  /* -1 penalty to tiles producing more than this */
+  OUTPUT_PENALTY_TILE               "Output_Penalty_Tile"
+  OUTPUT_INC_TILE_CELEBRATE         "Output_Inc_Tile_Celebrate"
+  /* All citizens after this are unhappy */
+  CITY_UNHAPPY_SIZE                 "City_Unhappy_Size"
+  /* Add to default squared city radius */
+  CITY_RADIUS_SQ                    "City_Radius_Sq"
+  /* Number of build slots for units */
+  CITY_BUILD_SLOTS                  "City_Build_Slots"
+  UPGRADE_PRICE_PCT                 "Upgrade_Price_Pct"
+  /* City should use walls gfx */
+  VISIBLE_WALLS                     "Visible_Walls"
+  TECH_COST_FACTOR                  "Tech_Cost_Factor"
+  /* [x%] gold upkeep instead of [1] shield upkeep for units */
+  SHIELD2GOLD_FACTOR                "Shield2Gold_Factor"
+  TILE_WORKABLE                     "Tile_Workable"
+  /* The index for the city image of the given city style. */
+  CITY_IMAGE                        "City_Image"
+  IMPR_BUILD_COST_PCT               "Building_Build_Cost_Pct"
+  MAX_TRADE_ROUTES                  "Max_Trade_Routes"
+  GOV_CENTER                        "Gov_Center"
+  COMBAT_ROUNDS                     "Combat_Rounds"
+  IMPR_BUY_COST_PCT                 "Building_Buy_Cost_Pct"
+  UNIT_BUILD_COST_PCT               "Unit_Build_Cost_Pct"
+  UNIT_BUY_COST_PCT                 "Unit_Buy_Cost_Pct"
+  NOT_TECH_SOURCE                   "Not_Tech_Source"
+  ENEMY_CITIZEN_UNHAPPY_PCT         "Enemy_Citizen_Unhappy_Pct"
+  IRRIGATION_PCT                    "Irrigation_Pct"
+  MINING_PCT                        "Mining_Pct"
+  OUTPUT_TILE_PUNISH_PCT            "Output_Tile_Punish_Pct"
+  UNIT_BRIBE_COST_PCT               "Unit_Bribe_Cost_Pct"
+  VICTORY                           "Victory"
+  PERFORMANCE                       "Performance"
+  HISTORY                           "History"
+  NATION_PERFORMANCE                "National_Performance"
+  NATION_HISTORY                    "National_History"
+  TURN_FRAGMENTS                    "Turn_Fragments"
+  MAX_STOLEN_GOLD_PM                "Max_Stolen_Gold_Pm"
+  THIEFS_SHARE_PM                   "Thiefs_Share_Pm"
+  RETIRE_PCT                        "Retire_Pct"
+  ILLEGAL_ACTION_MOVE_COST          "Illegal_Action_Move_Cost"
+  HAVE_CONTACTS                     "Have_Contacts"
+  CASUS_BELLI_CAUGHT                "Casus_Belli_Caught"
+  CASUS_BELLI_SUCCESS               "Casus_Belli_Success"
+  ACTION_ODDS_PCT                   "Action_Odds_Pct"
+  BORDER_VISION                     "Border_Vision"
+  STEALINGS_IGNORE                  "Stealings_Ignore"
+  OUTPUT_WASTE_BY_REL_DISTANCE      "Output_Waste_By_Rel_Distance"
+  SABOTEUR_RESISTANT                "Building_Saboteur_Resistant"
+  UNIT_SLOTS                        "Unit_Slots"
+  ATTACK_BONUS                      "Attack_Bonus"
+  CONQUEST_TECH_PCT                 "Conquest_Tech_Pct"
+  ACTION_SUCCESS_MOVE_COST          "Action_Success_Actor_Move_Cost"
+  ACTION_SUCCESS_TARGET_MOVE_COST   "Action_Success_Target_Move_Cost"
+  INFRA_POINTS                      "Infra_Points"
+  FORTIFY_DEFENSE_BONUS             "Fortify_Defense_Bonus"
+  MAPS_STOLEN_PCT                   "Maps_Stolen_Pct"
+  UNIT_SHIELD_VALUE_PCT             "Unit_Shield_Value_Pct"
+  CASUS_BELLI_COMPLETE              "Casus_Belli_Complete"
+  ILLEGAL_ACTION_HP_COST            "Illegal_Action_HP_Cost"
+  POPCOST_FREE                      "Popcost_Free"
+  HEAL_UNIT_PCT                     "Heal_UNit_Pct"
+  NUKE_BLAST_RADIUS_1_SQ            "Nuke_Blast_Radius_1_Sq"
+  BORDER_STRENGTH_PCT               "Border_Strength_Pct"
+  ACTION_RESIST_PCT                 "Action_Resist_Pct"
+  OUTPUT_BONUS_ABSOLUTE             "Output_Bonus_Absolute"
+  MIN_HP_PCT                        "Min_HP_Pct"
+  HP_REGEN_2                        "HP_Regen_2"
+  TECH_PARASITE_PCT_MAX             "Tech_Parasite_Pct_Max"
+  /* Reduced illness due to buildings ... */
+  HEALTH_PCT                        "Health_Pct"
+  ACTIVITY_TIME                     "Activity_Time"
+  SURPLUS_WASTE_PCT                 "Surplus_Waste_Pct"
+  SURPLUS_WASTE_PCT_BY_REL_DISTANCE "Surplus_Waste_Pct_By_Rel_Distance"
+  TECH_LEAKAGE                      "Tech_Leakage"
+  USER_EFFECT_1                     "User_Effect_1"
+  USER_EFFECT_2                     "User_Effect_2"
+  USER_EFFECT_3                     "User_Effect_3"
+  USER_EFFECT_4                     "User_Effect_4"
+end
diff --git a/meson.build b/meson.build
index 308adf6315..048abef25b 100644
--- a/meson.build
+++ b/meson.build
@@ -1085,6 +1085,7 @@ specenum = custom_target('specenum_gen.h', output: 'specenum_gen.h',
 enum_defs = {
   'common': {
     'actions_enums': ['actions_enums.def', 'actions_enums_gen.h'],
+    'effects_enums': ['effects_enums.def', 'effects_enums_gen.h'],
     'terrain_enums': ['terrain_enums.def', 'terrain_enums_gen.h'],
   },
   'manual': {
-- 
2.43.0

