From 4f1b12d4c519fa2bb04d9257b349b6f38fa4a96f Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Fri, 26 Apr 2024 21:45:17 -0400 Subject: [PATCH] Dynamic Chmmr, Druuge, Supox, and Mycon Gambit. Now there's still more to do... But I think I can retire the old funcptr based stuff soon. --- sc2/src/uqm/gendef.c | 17 ++--- sc2/src/uqm/plandata.c | 7 ++ sc2/src/uqm/planets/generate/Makeinfo | 9 +-- .../{genchmmr.c => genchmmr-modern.cpp} | 64 ++++++++--------- .../generate/{gendru.c => gendru-modern.cpp} | 70 +++++++++---------- .../generate/{gensup.c => gensup-modern.cpp} | 67 +++++++++--------- .../{gentrap.c => gentrap-modern.cpp} | 50 +++++++------ 7 files changed, 138 insertions(+), 146 deletions(-) rename sc2/src/uqm/planets/generate/{genchmmr.c => genchmmr-modern.cpp} (70%) rename sc2/src/uqm/planets/generate/{gendru.c => gendru-modern.cpp} (68%) rename sc2/src/uqm/planets/generate/{gensup.c => gensup-modern.cpp} (66%) rename sc2/src/uqm/planets/generate/{gentrap.c => gentrap-modern.cpp} (56%) diff --git a/sc2/src/uqm/gendef.c b/sc2/src/uqm/gendef.c index ccba82305..22a9e8d3c 100644 --- a/sc2/src/uqm/gendef.c +++ b/sc2/src/uqm/gendef.c @@ -24,8 +24,6 @@ extern GenerateFunctions generateDefaultFunctions; -extern GenerateFunctions generateChmmrFunctions; -extern GenerateFunctions generateDruugeFunctions; extern GenerateFunctions generateIlwrathFunctions; extern GenerateFunctions generateMelnormeFunctions; extern GenerateFunctions generateMyconFunctions; @@ -35,10 +33,8 @@ extern GenerateFunctions generateRainbowWorldFunctions; extern GenerateFunctions generateSaMatraFunctions; extern GenerateFunctions generateSolFunctions; extern GenerateFunctions generateSpathiFunctions; -extern GenerateFunctions generateSupoxFunctions; extern GenerateFunctions generateTalkingPetFunctions; extern GenerateFunctions generateThraddashFunctions; -extern GenerateFunctions generateTrapFunctions; extern GenerateFunctions generateUtwigFunctions; extern GenerateFunctions generateVuxFunctions; extern GenerateFunctions generateYehatFunctions; @@ -51,6 +47,11 @@ getGenerateFunctions (STAR_DESC *const star) switch (star->Index) { // Legacy ones are disabled... + case CHMMR_DEFINED: + case DRUUGE_DEFINED: + case MYCON_TRAP_DEFINED: + case SUPOX_DEFINED: + case SHIP_VAULT_DEFINED: case ANDROSYNTH_DEFINED: case BURVIXESE_DEFINED: @@ -80,12 +81,6 @@ getGenerateFunctions (STAR_DESC *const star) return &generateMelnormeFunctions; case TALKING_PET_DEFINED: return &generateTalkingPetFunctions; - case CHMMR_DEFINED: - return &generateChmmrFunctions; - case MYCON_TRAP_DEFINED: - return &generateTrapFunctions; - case DRUUGE_DEFINED: - return &generateDruugeFunctions; case BOMB_DEFINED: case UTWIG_DEFINED: return &generateUtwigFunctions; @@ -113,8 +108,6 @@ getGenerateFunctions (STAR_DESC *const star) return &generateYehatFunctions; case PKUNK_DEFINED: return &generatePkunkFunctions; - case SUPOX_DEFINED: - return &generateSupoxFunctions; case RAINBOW_DEFINED: return &generateRainbowWorldFunctions; case ILWRATH_DEFINED: diff --git a/sc2/src/uqm/plandata.c b/sc2/src/uqm/plandata.c index 1f66192cf..9f354ebaa 100644 --- a/sc2/src/uqm/plandata.c +++ b/sc2/src/uqm/plandata.c @@ -538,6 +538,7 @@ STAR_DESC starmap_array[] = #endif //{{2908, 269}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), SHOFIXTI_DEFINED, 4, 82}, + {{6858, 577}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 0, 123, "Mycon Trap"}, {{1004, 1083}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 27, "Slylandro"}, {{1776, 1395}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 0, 98, "Colony"}, @@ -555,11 +556,17 @@ STAR_DESC starmap_array[] = {{1707, 1501}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 0, 52}, {{2104, 2083}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 118, "Zoq-Fot-Pik Scout"}, + + {{ 742, 2268}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 117, "Chmmr"}, + {{3587, 2566}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 7, 86, "Androsynth"}, + {{9469, 2806}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 61, "Druuge"}, {{4125, 3770}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 0, 114, "Syreen Gaia"}, {{5937, 3937}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 5, 10, "Syreen Vault"}, {{9645, 5791}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 130, "Burvixese"}, + {{7414, 9124}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 47, "Supox"}, + {{MAX_X_UNIVERSE << 1, MAX_Y_UNIVERSE << 1}, 0, 0, 0, 0}, diff --git a/sc2/src/uqm/planets/generate/Makeinfo b/sc2/src/uqm/planets/generate/Makeinfo index ba1044138..2f9bdcc96 100644 --- a/sc2/src/uqm/planets/generate/Makeinfo +++ b/sc2/src/uqm/planets/generate/Makeinfo @@ -1,10 +1,11 @@ -uqm_CFILES="gendefault.c genchmmr.c gendru.c +uqm_CFILES="gendefault.c genilw.c genmel.c genmyc.c genorz.c genpet.c genpku.c genrain.c - gensam.c gensol.c genspa.c gensup.c - genthrad.c gentrap.c genutw.c genvux.c + gensam.c gensol.c genspa.c + genthrad.c genutw.c genvux.c genyeh.c genzoq.c" uqm_HFILES="genall.h gendefault.h" uqm_CXXFILES="cxx-generator.cpp gensly-modern.cpp genshof-modern.cpp gencol-modern.cpp genwreck-modern.cpp genzfpscout-modern.cpp genand-modern.cpp genburv-modern.cpp gensyr-modern.cpp - genvault-modern.cpp" + genvault-modern.cpp genchmmr-modern.cpp gendru-modern.cpp + gentrap-modern.cpp gensup-modern.cpp" diff --git a/sc2/src/uqm/planets/generate/genchmmr.c b/sc2/src/uqm/planets/generate/genchmmr-modern.cpp similarity index 70% rename from sc2/src/uqm/planets/generate/genchmmr.c rename to sc2/src/uqm/planets/generate/genchmmr-modern.cpp index 1a1436bbb..f0586869b 100644 --- a/sc2/src/uqm/planets/generate/genchmmr.c +++ b/sc2/src/uqm/planets/generate/genchmmr-modern.cpp @@ -30,34 +30,32 @@ #include "../../starbase.h" -static bool GenerateChmmr_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateChmmr_generateMoons (SOLARSYS_STATE *solarSys, - PLANET_DESC *planet); -static bool GenerateChmmr_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); - - -const GenerateFunctions generateChmmrFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateChmmr_generatePlanets, - /* .generateMoons = */ GenerateChmmr_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateChmmr_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDefault_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDefault_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateChmmr_generatePlanets (SOLARSYS_STATE *solarSys) +namespace { - GenerateDefault_generatePlanets (solarSys); + using namespace Planets::exports; + + class GenerateChmmr + : public DefaultGenerator + { + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateMoons( SolarSystem *solarSys, + PLANET_DESC *planet ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + }; + + auto init= [] + { + Generator::add( "Chmmr", std::make_unique< GenerateChmmr >() ); + + return 0xDEADBEEF; + }(); +} + +bool +GenerateChmmr::generatePlanets( SolarSystem *const solarSys ) +{ + DefaultGenerator::generatePlanets (solarSys); solarSys->PlanetDesc[1].data_index = SAPPHIRE_WORLD; if( false ){ if (!GET_GAME_STATE (CHMMR_UNLEASHED)) @@ -67,10 +65,10 @@ GenerateChmmr_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateChmmr_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet) +bool +GenerateChmmr::generateMoons( SolarSystem *const solarSys, PLANET_DESC *const planet ) { - GenerateDefault_generateMoons (solarSys, planet); + DefaultGenerator::generateMoons (solarSys, planet); if (matchWorld (solarSys, planet, 1, MATCH_PLANET)) { @@ -90,8 +88,8 @@ GenerateChmmr_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet) return true; } -static bool -GenerateChmmr_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateChmmr::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { @@ -150,7 +148,7 @@ GenerateChmmr_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) return PrepareToVisitStarBase(); } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); return true; } diff --git a/sc2/src/uqm/planets/generate/gendru.c b/sc2/src/uqm/planets/generate/gendru-modern.cpp similarity index 68% rename from sc2/src/uqm/planets/generate/gendru.c rename to sc2/src/uqm/planets/generate/gendru-modern.cpp index 72020100a..09b0185b6 100644 --- a/sc2/src/uqm/planets/generate/gendru.c +++ b/sc2/src/uqm/planets/generate/gendru-modern.cpp @@ -29,39 +29,37 @@ #include +namespace +{ + using namespace Planets::exports; -static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); -static COUNT GenerateDruuge_generateEnergy (const SOLARSYS_STATE *, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); -static bool GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); + class GenerateDruuge + : public DefaultGenerator + { + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + COUNT generateEnergy( const SolarSystem *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO * ) override; + bool pickupEnergy( SolarSystem *solarSys, + PLANET_DESC *world, COUNT whichNode ) override; + }; + + auto init= [] + { + Generator::add( "Druuge", std::make_unique< GenerateDruuge >() ); + + return 0xDEADBEEF; + }(); +} -const GenerateFunctions generateDruugeFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateDruuge_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateDruuge_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDruuge_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDruuge_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateDruuge::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; - GenerateDefault_generatePlanets (solarSys); + DefaultGenerator::generatePlanets (solarSys); memmove (&solarSys->PlanetDesc[1], &solarSys->PlanetDesc[0], sizeof (solarSys->PlanetDesc[0]) @@ -83,8 +81,8 @@ GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateDruuge::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -126,14 +124,14 @@ GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) } } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); return true; } -static bool -GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +bool +GenerateDruuge::pickupEnergy( SolarSystem *const solarSys, PLANET_DESC *const world, + const COUNT whichNode ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -155,9 +153,9 @@ GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, return false; } -static COUNT -GenerateDruuge_generateEnergy (const SOLARSYS_STATE *solarSys, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) +COUNT +GenerateDruuge::generateEnergy( const SolarSystem *const solarSys, + const PLANET_DESC *const world, const COUNT whichNode, NODE_INFO *const info ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { diff --git a/sc2/src/uqm/planets/generate/gensup.c b/sc2/src/uqm/planets/generate/gensup-modern.cpp similarity index 66% rename from sc2/src/uqm/planets/generate/gensup.c rename to sc2/src/uqm/planets/generate/gensup-modern.cpp index a618c89e7..ab94a121f 100644 --- a/sc2/src/uqm/planets/generate/gensup.c +++ b/sc2/src/uqm/planets/generate/gensup-modern.cpp @@ -27,39 +27,36 @@ #include "../../state.h" #include "libs/mathlib.h" +namespace +{ + using namespace Planets::exports; -static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); -static COUNT GenerateSupox_generateEnergy (const SOLARSYS_STATE *, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); -static bool GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); + class GenerateSupox + : public DefaultGenerator + { + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + COUNT generateEnergy( const SolarSystem *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO * ) override; + bool pickupEnergy( SolarSystem *solarSys, + PLANET_DESC *world, COUNT whichNode ) override; + }; + auto init= [] + { + Generator::add( "Supox", std::make_unique< GenerateSupox >() ); -const GenerateFunctions generateSupoxFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateSupox_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateSupox_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateSupox_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateSupox_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; + return 0xDEADBEEF; + }(); +} - -static bool -GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateSupox::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; - GenerateDefault_generatePlanets (solarSys); + DefaultGenerator::generatePlanets (solarSys); solarSys->PlanetDesc[0].data_index = WATER_WORLD; solarSys->PlanetDesc[0].NumPlanets = 2; @@ -74,8 +71,8 @@ GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateSupox::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -117,14 +114,14 @@ GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) } } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); return true; } -static bool -GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +bool +GenerateSupox::pickupEnergy( SolarSystem *const solarSys, PLANET_DESC *const world, + const COUNT whichNode ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -145,9 +142,9 @@ GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, return false; } -static COUNT -GenerateSupox_generateEnergy (const SOLARSYS_STATE *solarSys, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) +COUNT +GenerateSupox::generateEnergy( const SolarSystem *const solarSys, + const PLANET_DESC *const world, const COUNT whichNode, NODE_INFO *const info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { diff --git a/sc2/src/uqm/planets/generate/gentrap.c b/sc2/src/uqm/planets/generate/gentrap-modern.cpp similarity index 56% rename from sc2/src/uqm/planets/generate/gentrap.c rename to sc2/src/uqm/planets/generate/gentrap-modern.cpp index e8451cdf2..279b30cf9 100644 --- a/sc2/src/uqm/planets/generate/gentrap.c +++ b/sc2/src/uqm/planets/generate/gentrap-modern.cpp @@ -19,35 +19,33 @@ #include "genall.h" #include "../planets.h" +namespace +{ + using namespace Planets::exports; -static bool GenerateTrap_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateTrap_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); + class GenerateTrap + : public DefaultGenerator + { + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + }; + + auto init= [] + { + Generator::add( "Mycon Trap", std::make_unique< GenerateTrap >() ); + + return 0xDEADBEEF; + }(); +} -const GenerateFunctions generateTrapFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateTrap_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateTrap_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDefault_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDefault_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateTrap_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateTrap::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; - GenerateDefault_generatePlanets (solarSys); + DefaultGenerator::generatePlanets (solarSys); solarSys->PlanetDesc[0].data_index = TELLURIC_WORLD; solarSys->PlanetDesc[0].NumPlanets = 1; @@ -62,10 +60,10 @@ GenerateTrap_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateTrap_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateTrap::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); if (matchWorld (solarSys, world, 0, MATCH_PLANET)) {