diff --git a/sc2/src/uqm/gendef.c b/sc2/src/uqm/gendef.c index 9217eee6d..f2518e47f 100644 --- a/sc2/src/uqm/gendef.c +++ b/sc2/src/uqm/gendef.c @@ -22,12 +22,9 @@ #include -extern GenerateFunctions generateDefaultFunctions; - extern GenerateFunctions generateMelnormeFunctions; extern GenerateFunctions generateMyconFunctions; extern GenerateFunctions generateOrzFunctions; -extern GenerateFunctions generateRainbowWorldFunctions; extern GenerateFunctions generateSolFunctions; extern GenerateFunctions generateThraddashFunctions; extern GenerateFunctions generateUtwigFunctions; @@ -40,6 +37,8 @@ getGenerateFunctions (STAR_DESC *const star) switch (star->Index) { // Legacy ones are disabled... + case RAINBOW_DEFINED: + case SAMATRA_DEFINED: case ILWRATH_DEFINED: case SPATHI_DEFINED: @@ -95,8 +94,6 @@ getGenerateFunctions (STAR_DESC *const star) case VUX_BEAST_DEFINED: case VUX_DEFINED: return &generateVuxFunctions; - case RAINBOW_DEFINED: - return &generateRainbowWorldFunctions; } } diff --git a/sc2/src/uqm/plandata.c b/sc2/src/uqm/plandata.c index 5b2c3d6d3..4c44bab90 100644 --- a/sc2/src/uqm/plandata.c +++ b/sc2/src/uqm/plandata.c @@ -541,6 +541,7 @@ STAR_DESC starmap_array[] = {{4923, 294}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 74, "Yehat"}, {{ 522, 525}, MAKE_STAR (DWARF_STAR, YELLOW_BODY, -1), 0, 3, 92, "Pkunk"}, {{6858, 577}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 0, 123, "Mycon Trap"}, + {{4681, 916}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 6, 75, "Rainbow"}, {{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"}, @@ -563,15 +564,28 @@ 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"}, + {{6020, 2979}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 13, "Rainbow"}, + {{ 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"}, + + {{7416, 5083}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 3, 68, "Rainbow"}, {{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"}, + {{8625, 7000}, MAKE_STAR (DWARF_STAR, GREEN_BODY, -1), 0, 1, 41, "Rainbow"}, + {{ 395, 7458}, MAKE_STAR (DWARF_STAR, BLUE_BODY, -1), 0, 2, 60, "Rainbow"}, + {{2836, 7857}, MAKE_STAR (DWARF_STAR, WHITE_BODY, -1), 0, 5, 53, "Rainbow"}, + + {{5437, 8270}, MAKE_STAR (DWARF_STAR, RED_BODY, -1), 0, 5, 48, "Rainbow"}, + {{7666, 8666}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 2, 46, "Rainbow"}, + {{8534, 8797}, MAKE_STAR (DWARF_STAR, ORANGE_BODY, -1), 0, 3, 3, "Rainbow"}, + + {{9960, 9042}, MAKE_STAR (GIANT_STAR, WHITE_BODY, -1), 0, 0, 42, "Rainbow"}, {{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 810dc0430..929efda9c 100644 --- a/sc2/src/uqm/planets/generate/Makeinfo +++ b/sc2/src/uqm/planets/generate/Makeinfo @@ -1,5 +1,5 @@ uqm_CFILES="gendefault.c - genmel.c genmyc.c genorz.c genrain.c + genmel.c genmyc.c genorz.c gensol.c genthrad.c genutw.c genvux.c" uqm_HFILES="genall.h gendefault.h" @@ -9,4 +9,5 @@ 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 - genilw-modern.cpp genpku-modern.cpp gensam-modern.cpp" + genilw-modern.cpp genpku-modern.cpp gensam-modern.cpp + genrain-modern.cpp" diff --git a/sc2/src/uqm/planets/generate/genrain.c b/sc2/src/uqm/planets/generate/genrain-modern.cpp similarity index 62% rename from sc2/src/uqm/planets/generate/genrain.c rename to sc2/src/uqm/planets/generate/genrain-modern.cpp index c149b2978..1102833ee 100644 --- a/sc2/src/uqm/planets/generate/genrain.c +++ b/sc2/src/uqm/planets/generate/genrain-modern.cpp @@ -23,31 +23,47 @@ #include "../../globdata.h" #include "libs/mathlib.h" +#include +#include -static bool GenerateRainbowWorld_generatePlanets (SOLARSYS_STATE *solarSys); -static bool GenerateRainbowWorld_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); +namespace +{ + using namespace std::literals::string_literals; + using namespace Planets::exports; + + template< typename T > + T + lexical_cast( const std::string &s ) + { + std::istringstream iss{ s }; + iss.exceptions( std::istream::failbit | std::istream::badbit ); + + T rv; + iss >> rv; + + return rv; + } + + class GenerateRainbowWorld + : public DefaultGenerator + { + private: + bool generatePlanets( SolarSystem *solarSys ) override; + bool generateOrbital( SolarSystem *solarSys, + PLANET_DESC *world ) override; + }; + + auto init= [] + { + Generator::add( "Rainbow", std::make_unique< GenerateRainbowWorld >() ); + + return 0xDEABEEF; + }(); +} -const GenerateFunctions generateRainbowWorldFunctions = { - /* .initNpcs = */ GenerateDefault_initNpcs, - /* .reinitNpcs = */ GenerateDefault_reinitNpcs, - /* .uninitNpcs = */ GenerateDefault_uninitNpcs, - /* .generatePlanets = */ GenerateRainbowWorld_generatePlanets, - /* .generateMoons = */ GenerateDefault_generateMoons, - /* .generateName = */ GenerateDefault_generateName, - /* .generateOrbital = */ GenerateRainbowWorld_generateOrbital, - /* .generateMinerals = */ GenerateDefault_generateMinerals, - /* .generateEnergy = */ GenerateDefault_generateEnergy, - /* .generateLife = */ GenerateDefault_generateLife, - /* .pickupMinerals = */ GenerateDefault_pickupMinerals, - /* .pickupEnergy = */ GenerateDefault_pickupEnergy, - /* .pickupLife = */ GenerateDefault_pickupLife, -}; - - -static bool -GenerateRainbowWorld_generatePlanets (SOLARSYS_STATE *solarSys) +bool +GenerateRainbowWorld::generatePlanets( SolarSystem *const solarSys ) { COUNT angle; @@ -70,8 +86,8 @@ GenerateRainbowWorld_generatePlanets (SOLARSYS_STATE *solarSys) return true; } -static bool -GenerateRainbowWorld_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +bool +GenerateRainbowWorld::generateOrbital( SolarSystem *const solarSys, PLANET_DESC *const world ) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { @@ -87,16 +103,17 @@ GenerateRainbowWorld_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *wor SDPtr = &star_array[0]; while (SDPtr != CurStarDescPtr) { - if (SDPtr->Index == RAINBOW_DEFINED) + if (SDPtr->supplement and SDPtr->supplement == "Rainbow"s) ++which_rainbow; ++SDPtr; } + std::cerr << "I think I'm at Rainbow world " << which_rainbow << std::endl; rainbow_mask |= 1 << which_rainbow; SET_GAME_STATE (RAINBOW_WORLD0, LOBYTE (rainbow_mask)); SET_GAME_STATE (RAINBOW_WORLD1, HIBYTE (rainbow_mask)); } - GenerateDefault_generateOrbital (solarSys, world); + DefaultGenerator::generateOrbital (solarSys, world); return true; }