From 6bdacb146280c8ac5cc81a98886ec0c8ad24bbb4 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Sat, 27 Apr 2024 12:11:32 -0400 Subject: [PATCH] The last of the single-system generators. --- sc2/src/uqm/gendef.c | 8 +- sc2/src/uqm/plandata.c | 2 + sc2/src/uqm/planets/generate/Makeinfo | 6 +- .../generate/{genilw.c => genilw-modern.cpp} | 71 ++++++++------- .../generate/{gensam.c => gensam-modern.cpp} | 90 +++++++++---------- 5 files changed, 82 insertions(+), 95 deletions(-) rename sc2/src/uqm/planets/generate/{genilw.c => genilw-modern.cpp} (63%) rename sc2/src/uqm/planets/generate/{gensam.c => gensam-modern.cpp} (79%) diff --git a/sc2/src/uqm/gendef.c b/sc2/src/uqm/gendef.c index b7ce94f76..9217eee6d 100644 --- a/sc2/src/uqm/gendef.c +++ b/sc2/src/uqm/gendef.c @@ -24,12 +24,10 @@ extern GenerateFunctions generateDefaultFunctions; -extern GenerateFunctions generateIlwrathFunctions; extern GenerateFunctions generateMelnormeFunctions; extern GenerateFunctions generateMyconFunctions; extern GenerateFunctions generateOrzFunctions; extern GenerateFunctions generateRainbowWorldFunctions; -extern GenerateFunctions generateSaMatraFunctions; extern GenerateFunctions generateSolFunctions; extern GenerateFunctions generateThraddashFunctions; extern GenerateFunctions generateUtwigFunctions; @@ -42,6 +40,8 @@ getGenerateFunctions (STAR_DESC *const star) switch (star->Index) { // Legacy ones are disabled... + case SAMATRA_DEFINED: + case ILWRATH_DEFINED: case SPATHI_DEFINED: case TALKING_PET_DEFINED: case ZOQFOT_DEFINED: @@ -95,12 +95,8 @@ getGenerateFunctions (STAR_DESC *const star) case VUX_BEAST_DEFINED: case VUX_DEFINED: return &generateVuxFunctions; - case SAMATRA_DEFINED: - return &generateSaMatraFunctions; case RAINBOW_DEFINED: return &generateRainbowWorldFunctions; - case ILWRATH_DEFINED: - return &generateIlwrathFunctions; } } diff --git a/sc2/src/uqm/plandata.c b/sc2/src/uqm/plandata.c index 1d5658bdc..5b2c3d6d3 100644 --- a/sc2/src/uqm/plandata.c +++ b/sc2/src/uqm/plandata.c @@ -563,11 +563,13 @@ STAR_DESC starmap_array[] = {{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"}, + {{ 229, 3666}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 76, "Ilwrath"}, {{2416, 3687}, MAKE_STAR (GIANT_STAR, ORANGE_BODY, -1), 0, 5, 109, "Spathiwa"}, {{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"}, {{4000, 5437}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 18, "Zoq-Fot-Pik"}, {{9645, 5791}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 0, 130, "Burvixese"}, + {{6200, 5935}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 4, 21, "Sa-Matra"}, {{1978, 5968}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 54, "Umgah and Talking Pet"}, {{7414, 9124}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 2, 47, "Supox"}, diff --git a/sc2/src/uqm/planets/generate/Makeinfo b/sc2/src/uqm/planets/generate/Makeinfo index 45dba09a8..810dc0430 100644 --- a/sc2/src/uqm/planets/generate/Makeinfo +++ b/sc2/src/uqm/planets/generate/Makeinfo @@ -1,6 +1,6 @@ uqm_CFILES="gendefault.c - genilw.c genmel.c genmyc.c genorz.c genrain.c - gensam.c gensol.c + genmel.c genmyc.c genorz.c genrain.c + gensol.c genthrad.c genutw.c genvux.c" uqm_HFILES="genall.h gendefault.h" uqm_CXXFILES="cxx-generator.cpp gensly-modern.cpp genshof-modern.cpp @@ -9,4 +9,4 @@ uqm_CXXFILES="cxx-generator.cpp gensly-modern.cpp genshof-modern.cpp genvault-modern.cpp genchmmr-modern.cpp gendru-modern.cpp gentrap-modern.cpp gensup-modern.cpp genspa-modern.cpp genpet-modern.cpp genzoq-modern.cpp genyeh-modern.cpp - genpku-modern.cpp" + genilw-modern.cpp genpku-modern.cpp gensam-modern.cpp" diff --git a/sc2/src/uqm/planets/generate/genilw.c b/sc2/src/uqm/planets/generate/genilw-modern.cpp similarity index 63% rename from sc2/src/uqm/planets/generate/genilw.c rename to sc2/src/uqm/planets/generate/genilw-modern.cpp index 31a8fc4fe..bd2d84591 100644 --- a/sc2/src/uqm/planets/generate/genilw.c +++ b/sc2/src/uqm/planets/generate/genilw-modern.cpp @@ -27,38 +27,37 @@ #include "libs/mathlib.h" -static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); -static COUNT GenerateIlwrath_generateEnergy (const SOLARSYS_STATE *, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); -static bool GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +namespace +{ + using namespace Planets::exports; + + class GenerateIlwrath + : public DefaultGenerator + { + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + COUNT generateEnergy( const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO * ) override; + bool pickupEnergy( SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode ) override; + }; + + auto init= [] + { + Generator::add( "Ilwrath", std::make_unique< GenerateIlwrath >() ); + + return 0xDEADBEEF; + }(); +} -const GenerateFunctions generateIlwrathFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateIlwrath_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateIlwrath_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateIlwrath_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateIlwrath_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateIlwrath::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; - GenerateDefault_generatePlanets (solarSys); + DefaultGenerator::generatePlanets (solarSys); solarSys->PlanetDesc[0].data_index = PRIMORDIAL_WORLD; solarSys->PlanetDesc[0].radius = EARTH_RADIUS * 204L / 100; @@ -73,8 +72,8 @@ GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateIlwrath::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -111,7 +110,7 @@ GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) } } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital( solarSys, world ); if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -122,9 +121,9 @@ GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) return true; } -static COUNT -GenerateIlwrath_generateEnergy (const SOLARSYS_STATE *solarSys, - const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) +COUNT +GenerateIlwrath::generateEnergy( const SolarSystem *const solarSys, + const PLANET_DESC *const world, const COUNT whichNode, NODE_INFO *const info ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -134,9 +133,9 @@ GenerateIlwrath_generateEnergy (const SOLARSYS_STATE *solarSys, return 0; } -static bool -GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +bool +GenerateIlwrath::pickupEnergy( SOLARSYS_STATE *const solarSys, PLANET_DESC *const world, + const COUNT whichNode ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { diff --git a/sc2/src/uqm/planets/generate/gensam.c b/sc2/src/uqm/planets/generate/gensam-modern.cpp similarity index 79% rename from sc2/src/uqm/planets/generate/gensam.c rename to sc2/src/uqm/planets/generate/gensam-modern.cpp index b2398b354..4efbf3ecf 100644 --- a/sc2/src/uqm/planets/generate/gensam.c +++ b/sc2/src/uqm/planets/generate/gensam-modern.cpp @@ -26,56 +26,51 @@ #include "../../state.h" #include "libs/mathlib.h" +namespace +{ + using namespace Planets::exports; -static bool GenerateSaMatra_initNpcs (SOLARSYS_STATE *solarSys); -static bool GenerateSaMatra_reinitNpcs (SOLARSYS_STATE *solarSys); -static bool GenerateSaMatra_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateSaMatra_generateMoons (SOLARSYS_STATE *solarSys, - PLANET_DESC *planet); -static bool GenerateSaMatra_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); + class GenerateSaMatra + : public DefaultGenerator + { + void initNpcs( SolarSystem *solarSys ) override; + void reinitNpcs( SolarSystem *solarSys ) override; + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateMoons( SolarSystem *solarSys, + PLANET_DESC *planet ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; -static void BuildUrquanGuard (SOLARSYS_STATE *solarSys); + static void BuildUrquanGuard(); + }; + + auto init= [] + { + Generator::add( "Sa-Matra", std::make_unique< GenerateSaMatra >() ); + + return 0xDEADBEEF; + }(); +} -const GenerateFunctions generateSaMatraFunctions = { - /* .initNpcs = */ GenerateSaMatra_initNpcs, - /* .reinitNpcs = */ GenerateSaMatra_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateSaMatra_generatePlanets, - /* .generateMoons = */ GenerateSaMatra_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateSaMatra_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDefault_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDefault_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateSaMatra_initNpcs (SOLARSYS_STATE *solarSys) +void +GenerateSaMatra::initNpcs( SolarSystem * ) { if (!GET_GAME_STATE (URQUAN_MESSED_UP)) { - BuildUrquanGuard (solarSys); + BuildUrquanGuard(); } else { // Exorcise Ur-Quan ghosts upon system reentry PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); // wipe out the group } - - (void) solarSys; - return true; } -static bool -GenerateSaMatra_reinitNpcs (SOLARSYS_STATE *solarSys) +void +GenerateSaMatra::reinitNpcs( SolarSystem * ) { - BOOLEAN GuardEngaged; + bool GuardEngaged; HIPGROUP hGroup; HIPGROUP hNextGroup; @@ -84,7 +79,7 @@ GenerateSaMatra_reinitNpcs (SOLARSYS_STATE *solarSys) EncounterRace = -1; // Do not want guards to chase the player - GuardEngaged = FALSE; + GuardEngaged = false; for (hGroup = GetHeadLink (&GLOBAL (ip_group_q)); hGroup; hGroup = hNextGroup) { @@ -106,7 +101,7 @@ GenerateSaMatra_reinitNpcs (SOLARSYS_STATE *solarSys) GroupPtr->task &= ~REFORM_GROUP; GroupPtr->group_counter = 0; - GuardEngaged = TRUE; + GuardEngaged = true; } UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); @@ -125,21 +120,18 @@ GenerateSaMatra_reinitNpcs (SOLARSYS_STATE *solarSys) XFormIPLoc (&GLOBAL (ip_location), &GLOBAL (ShipStamp.origin), TRUE); } - - (void) solarSys; - return true; } -static bool -GenerateSaMatra_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateSaMatra::generatePlanets( SolarSystem *const solarSys ) { GenerateDefault_generatePlanets (solarSys); solarSys->PlanetDesc[4].NumPlanets = 1; return true; } -static bool -GenerateSaMatra_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet) +bool +GenerateSaMatra::generateMoons( SolarSystem *const solarSys, PLANET_DESC *const planet ) { GenerateDefault_generateMoons (solarSys, planet); @@ -161,8 +153,8 @@ GenerateSaMatra_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet) return true; } -static bool -GenerateSaMatra_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateSaMatra::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { /* Samatra */ if (matchWorld (solarSys, world, 4, 0)) @@ -198,7 +190,7 @@ GenerateSaMatra_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { - BOOLEAN UrquanSurvivors; + bool UrquanSurvivors; UrquanSurvivors = GetHeadLink (&GLOBAL (npc_built_ship_q)) != 0; @@ -227,8 +219,8 @@ GenerateSaMatra_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) return true; } -static void -BuildUrquanGuard (SOLARSYS_STATE *solarSys) +void +GenerateSaMatra::BuildUrquanGuard() { BYTE ship1, ship2; BYTE b0, b1; @@ -318,7 +310,5 @@ BuildUrquanGuard (SOLARSYS_STATE *solarSys) UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); hGroup = hNextGroup; } - - (void) solarSys; }