From: <av...@us...> - 2011-04-26 02:21:42
|
Revision: 3587 http://sc2.svn.sourceforge.net/sc2/?rev=3587&view=rev Author: avolkov Date: 2011-04-26 02:21:34 +0000 (Tue, 26 Apr 2011) Log Message: ----------- Generation code refactoring: split off pickupXxx() from generateXxx(), make generateXxx() return the count and take non-pointer Modified Paths: -------------- trunk/sc2/src/uqm/planets/generate/genand.c trunk/sc2/src/uqm/planets/generate/genburv.c trunk/sc2/src/uqm/planets/generate/genchmmr.c trunk/sc2/src/uqm/planets/generate/gencol.c trunk/sc2/src/uqm/planets/generate/gendefault.c trunk/sc2/src/uqm/planets/generate/gendefault.h trunk/sc2/src/uqm/planets/generate/gendru.c trunk/sc2/src/uqm/planets/generate/genilw.c trunk/sc2/src/uqm/planets/generate/genmel.c trunk/sc2/src/uqm/planets/generate/genmyc.c trunk/sc2/src/uqm/planets/generate/genorz.c trunk/sc2/src/uqm/planets/generate/genpet.c trunk/sc2/src/uqm/planets/generate/genpku.c trunk/sc2/src/uqm/planets/generate/genrain.c trunk/sc2/src/uqm/planets/generate/gensam.c trunk/sc2/src/uqm/planets/generate/genshof.c trunk/sc2/src/uqm/planets/generate/gensly.c trunk/sc2/src/uqm/planets/generate/gensol.c trunk/sc2/src/uqm/planets/generate/genspa.c trunk/sc2/src/uqm/planets/generate/gensup.c trunk/sc2/src/uqm/planets/generate/gensyr.c trunk/sc2/src/uqm/planets/generate/genthrad.c trunk/sc2/src/uqm/planets/generate/gentrap.c trunk/sc2/src/uqm/planets/generate/genutw.c trunk/sc2/src/uqm/planets/generate/genvault.c trunk/sc2/src/uqm/planets/generate/genvux.c trunk/sc2/src/uqm/planets/generate/genwreck.c trunk/sc2/src/uqm/planets/generate/genyeh.c trunk/sc2/src/uqm/planets/generate/genzfpscout.c trunk/sc2/src/uqm/planets/generate/genzoq.c trunk/sc2/src/uqm/planets/generate.h trunk/sc2/src/uqm/planets/lander.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/planets/scan.h trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/planets/generate/genand.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genand.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genand.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -30,8 +30,10 @@ static bool GenerateAndrosynth_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateAndrosynthFunctions = { @@ -45,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateAndrosynth_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateAndrosynth_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -121,34 +126,39 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; + if (matchWorld (solarSys, world, 1, MATCH_PLANET)) + { + PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - // Ruins previously visited are marked in the upper 16 bits - if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16)) - return false; // already visited this ruin before, no report + // Ruins previously visited are marked in the upper 16 bits + if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16)) + return false; // already visited this ruin, do not remove - setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16); - // We set the retrieved bit manually here and need to indicate - // the change to the solar system state functions - SET_GAME_STATE (PLANETARY_CHANGE, 1); + setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16); + // We set the retrieved bit manually here and need to indicate + // the change to the solar system state functions + SET_GAME_STATE (PLANETARY_CHANGE, 1); - return true; // give whatever report is next + // Androsynth ruins have several lander reports which form a story + GenerateDefault_landerReportCycle (solarSys); + + return false; // do not remove the node from the surface + } + + return false; } -static bool +static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } - Modified: trunk/sc2/src/uqm/planets/generate/genburv.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genburv.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genburv.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../globdata.h" #include "../../nameref.h" #include "../../resinst.h" @@ -31,8 +30,10 @@ PLANET_DESC *planet); static bool GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateBurvixeseFunctions = { @@ -46,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateBurvixese_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateBurvixese_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -136,40 +140,54 @@ return true; } -static bool +static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (matchWorld (solarSys, world, 0, 0)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (BURVIXESE_BROADCASTERS)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); - SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (matchWorld (solarSys, world, 0, 0)) + { + assert (!GET_GAME_STATE (BURVIXESE_BROADCASTERS) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); + SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genchmmr.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genchmmr.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genchmmr.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -46,6 +46,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gencol.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gencol.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gencol.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -42,6 +42,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gendefault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -16,7 +16,6 @@ #include "genall.h" #include "../planets.h" -#include "../scan.h" #include "../lander.h" #include "../../encount.h" #include "../../gamestr.h" @@ -38,12 +37,6 @@ PLANET_DESC *world); bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -bool GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); static void GeneratePlanets (SOLARSYS_STATE *system); static void check_yehat_rebellion (void); @@ -60,6 +53,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -166,74 +162,84 @@ return true; } -bool +COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode) + PLANET_DESC *world, COUNT whichNode) { - GenerateMineralDeposits (&solarSys->SysInfo, whichNode); + GenerateMineralDeposits (&solarSys->SysInfo, &whichNode); (void) world; - return true; + return whichNode; } bool -GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) +GenerateDefault_pickupMinerals (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - *whichNode = 0; + // Minerals do not need any extra handling as of now (void) solarSys; (void) world; + (void) whichNode; return true; } +COUNT +GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + (void) whichNode; + (void) solarSys; + (void) world; + return 0; +} + bool +GenerateDefault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + // This should never be called since every energy node needs + // special handling and the function should be overridden + assert (false); + (void) solarSys; + (void) world; + (void) whichNode; + return false; +} + +COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { - GenerateLifeForms (&solarSys->SysInfo, whichNode); + GenerateLifeForms (&solarSys->SysInfo, &whichNode); (void) world; - return true; + return whichNode; } bool -GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT *whichNode) +GenerateDefault_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - // Generate an energy node at a random location - GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, whichNode); + // Bio does not need any extra handling as of now + (void) solarSys; + (void) world; + (void) whichNode; return true; } -bool -GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT *whichNode) +COUNT +GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT whichNode) { - // Generate a standard spread of city ruins of a destroyed civilization - GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, - 0, whichNode); - return true; + // Generate an energy node at a random location + GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, &whichNode); + return whichNode; } -bool -GenerateDefault_pickupRuins (SOLARSYS_STATE *solarSys, - PickupRuinCallback callback) +COUNT +GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT whichNode) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - COUNT i; - - for (i = 0; i < NUM_RACE_RUINS; ++i) - { - if (!isNodeRetrieved (planetInfo, ENERGY_SCAN, i)) - continue; - - // Retrieval status is cleared to keep the node on the map - setNodeNotRetrieved (planetInfo, ENERGY_SCAN, i); - - if (callback && !callback (solarSys, i)) - continue; // no lander report wanted - - // Some ruins have more than one lander report, like when - // you fish artifacts out of the ruins. - GenerateDefault_landerReportCycle (solarSys); - } - return true; + // Generate a standard spread of city ruins of a destroyed civilization + GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, + 0, &whichNode); + return whichNode; } static inline void Modified: trunk/sc2/src/uqm/planets/generate/gendefault.h =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,20 +31,21 @@ PLANET_DESC *world); bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -bool GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); - -// Ruin callback returns 'true' if a lander report should be given -typedef bool (*PickupRuinCallback)(SOLARSYS_STATE *solarSys, +COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +COUNT GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +bool GenerateDefault_pickupMinerals (SOLARSYS_STATE *, PLANET_DESC *world, COUNT whichNode); +bool GenerateDefault_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world, + COUNT whichNode); +bool GenerateDefault_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world, + COUNT whichNode); -bool GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT *whichNode); -bool GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT *whichNode); -bool GenerateDefault_pickupRuins (SOLARSYS_STATE *, PickupRuinCallback); +COUNT GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT whichNode); +COUNT GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT whichNode); bool GenerateDefault_landerReport (SOLARSYS_STATE *); bool GenerateDefault_landerReportCycle (SOLARSYS_STATE *); Modified: trunk/sc2/src/uqm/planets/generate/gendru.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendru.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendru.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -33,8 +33,10 @@ static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateDruugeFunctions = { @@ -48,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDruuge_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDruuge_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -127,34 +132,38 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (ROSY_SPHERE)) - { // Just picked up the Rosy Sphere from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (ROSY_SPHERE, 1); - SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (ROSY_SPHERE)) + { // Just picked up the Rosy Sphere from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (ROSY_SPHERE, 1); + SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genilw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genilw.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genilw.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -30,8 +30,10 @@ static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateIlwrathFunctions = { @@ -45,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateIlwrath_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateIlwrath_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -117,19 +122,29 @@ return true; } -static bool +static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; + return 0; +} - return true; +static bool +GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } + + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genmel.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genmel.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genmel.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -42,6 +42,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genmyc.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -34,10 +34,12 @@ static bool GenerateMycon_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateMyconFunctions = { @@ -51,6 +53,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateMycon_generateEnergy, /* .generateLife = */ GenerateMycon_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateMycon_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -182,32 +187,21 @@ return true; } -static bool +static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (SUN_DEVICE)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (SUN_DEVICE, 1); - SET_GAME_STATE (SUN_DEVICE_ON_SHIP, 1); - SET_GAME_STATE (MYCON_VISITS, 0); - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } - - return true; + return GenerateDefault_generateArtifact (solarSys, whichNode); } if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED @@ -215,50 +209,77 @@ || CurStarDescPtr->Index == EGG_CASE2_DEFINED) && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again // XXX: DiscoveryString is set by generateOrbital() only when the // node has not been picked up yet - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0) - && !solarSys->SysInfo.PlanetInfo.DiscoveryString) + if (!solarSys->SysInfo.PlanetInfo.DiscoveryString) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) + return GenerateDefault_generateArtifact (solarSys, whichNode); + } + + return 0; +} + +static bool +GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (SUN_DEVICE) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (SUN_DEVICE, 1); + SET_GAME_STATE (SUN_DEVICE_ON_SHIP, 1); + SET_GAME_STATE (MYCON_VISITS, 0); + + return true; // picked up + } + + if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED + || CurStarDescPtr->Index == EGG_CASE1_DEFINED + || CurStarDescPtr->Index == EGG_CASE2_DEFINED) + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + switch (CurStarDescPtr->Index) { - switch (CurStarDescPtr->Index) - { - case EGG_CASE0_DEFINED: - SET_GAME_STATE (EGG_CASE0_ON_SHIP, 1); - break; - case EGG_CASE1_DEFINED: - SET_GAME_STATE (EGG_CASE1_ON_SHIP, 1); - break; - case EGG_CASE2_DEFINED: - SET_GAME_STATE (EGG_CASE2_ON_SHIP, 1); - break; - } - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); + case EGG_CASE0_DEFINED: + SET_GAME_STATE (EGG_CASE0_ON_SHIP, 1); + break; + case EGG_CASE1_DEFINED: + SET_GAME_STATE (EGG_CASE1_ON_SHIP, 1); + break; + case EGG_CASE2_DEFINED: + SET_GAME_STATE (EGG_CASE2_ON_SHIP, 1); + break; } - return true; + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } -static bool +static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { - *whichNode = 0; + (void) whichNode; (void) solarSys; (void) world; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genorz.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genorz.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genorz.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -34,8 +33,10 @@ static bool GenerateOrz_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateOrzFunctions = { @@ -49,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateOrz_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateOrz_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -162,42 +166,58 @@ return true; } -static bool +static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED && matchWorld (solarSys, world, 1, 2)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (TAALO_PROTECTOR)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (TAALO_PROTECTOR, 1); - SET_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1); + if (CurStarDescPtr->Index == ORZ_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + return GenerateDefault_generateRuins (solarSys, whichNode); + } - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } + return 0; +} - return true; +static bool +GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED + && matchWorld (solarSys, world, 1, 2)) + { + assert (!GET_GAME_STATE (TAALO_PROTECTOR) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (TAALO_PROTECTOR, 1); + SET_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1); + + return true; // picked up } if (CurStarDescPtr->Index == ORZ_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpet.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genpet.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -32,8 +32,10 @@ static bool GenerateTalkingPet_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); static void ZapToUrquanEncounter (void); @@ -49,6 +51,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateTalkingPet_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateTalkingPet_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -154,21 +159,33 @@ return true; } -static bool +static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } +static bool +GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } + + (void) whichNode; + return false; +} + static void ZapToUrquanEncounter (void) { Modified: trunk/sc2/src/uqm/planets/generate/genpku.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpku.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genpku.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,8 +31,10 @@ static bool GeneratePkunk_generatePlanets (SOLARSYS_STATE *solarSys); static bool GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generatePkunkFunctions = { @@ -46,6 +48,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GeneratePkunk_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GeneratePkunk_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -117,34 +122,38 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (CLEAR_SPINDLE)) - { // Just picked up the Clear Spindle from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (CLEAR_SPINDLE, 1); - SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (CLEAR_SPINDLE)) + { // Just picked up the Clear Spindle from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (CLEAR_SPINDLE, 1); + SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genrain.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genrain.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genrain.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -39,6 +39,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensam.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensam.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensam.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -49,6 +49,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genshof.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genshof.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genshof.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -43,6 +43,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensly.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensly.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensly.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -37,6 +37,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensol.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensol.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensol.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -20,7 +20,6 @@ #include "../lander.h" #include "../lifeform.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../encount.h" #include "../../globdata.h" @@ -40,10 +39,12 @@ PLANET_DESC *world); static bool GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateSol_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); static int init_probe (void); static void check_probe (void); @@ -60,6 +61,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSol_generateEnergy, /* .generateLife = */ GenerateSol_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSol_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -509,88 +513,100 @@ return true; } -static bool +static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 8, MATCH_PLANET)) { /* Pluto */ + // This check is needed because the retrieval bit is not set for + // this node to keep it on the surface while the lander is taking off if (GET_GAME_STATE (FOUND_PLUTO_SPATHI)) { // already picked up - *whichNode = 0; - return true; + return 0; } solarSys->SysInfo.PlanetInfo.CurPt.x = 20; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT - 8; - *whichNode = 1; // only matters when count is requested - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { // Ran into Fwiffo on Pluto - // Retrieval status is cleared to keep the node on the map - // while the lander is taking off. FOUND_PLUTO_SPATHI bit - // will keep the node from showing up on subsequent visits. - setNodeNotRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0); - - #define FWIFFO_FRAGS 8 - if (!KillLanderCrewSeq (FWIFFO_FRAGS, ONE_SECOND / 20)) - return true; // lander probably died - - SET_GAME_STATE (FOUND_PLUTO_SPATHI, 1); - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } - - return true; + return 1; // only matters when count is requested } if (matchWorld (solarSys, world, 2, 1)) { /* Earth Moon */ + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (MOONBASE_DESTROYED)) { // already picked up - *whichNode = 0; - return true; + return 0; } solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH * 3 / 4; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 1 / 4; - *whichNode = 1; // only matters when count is requested + return 1; // only matters when count is requested + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (MOONBASE_DESTROYED, 1); - SET_GAME_STATE (MOONBASE_ON_SHIP, 1); + (void) whichNode; + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 8, MATCH_PLANET)) + { // Pluto + assert (!GET_GAME_STATE (FOUND_PLUTO_SPATHI) && whichNode == 0); + + // Ran into Fwiffo on Pluto + #define FWIFFO_FRAGS 8 + if (!KillLanderCrewSeq (FWIFFO_FRAGS, ONE_SECOND / 20)) + return false; // lander probably died - return true; + SET_GAME_STATE (FOUND_PLUTO_SPATHI, 1); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + // Do not remove the node from the surface while the lander is + // taking off. FOUND_PLUTO_SPATHI bit will keep the node from + // showing up on subsequent visits. + return false; } + + if (matchWorld (solarSys, world, 2, 1)) + { // Earth Moon + assert (!GET_GAME_STATE (MOONBASE_DESTROYED) && whichNode == 0); - *whichNode = 0; - return true; + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (MOONBASE_DESTROYED, 1); + SET_GAME_STATE (MOONBASE_ON_SHIP, 1); + + return true; // picked up + } + + (void) whichNode; + return false; } -static bool +static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 2, 1)) { /* Earth Moon */ GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 10, - NUM_CREATURE_TYPES + 1, whichNode); - return true; + NUM_CREATURE_TYPES + 1, &whichNode); + return whichNode; } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genspa.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genspa.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genspa.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -35,10 +35,14 @@ PLANET_DESC *planet); static bool GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSpathi_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSpathi_pickupLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateSpathiFunctions = { @@ -52,6 +56,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSpathi_generateEnergy, /* .generateLife = */ GenerateSpathi_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSpathi_pickupEnergy, + /* .pickupLife = */ GenerateSpathi_pickupLife, }; @@ -191,64 +198,79 @@ return true; } -static bool +static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, 0)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (UMGAH_BROADCASTERS)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (UMGAH_BROADCASTERS, 1); - SET_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateSpathi_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, 0)) + { + assert (!GET_GAME_STATE (UMGAH_BROADCASTERS) && whichNode == 0); - return true; + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (UMGAH_BROADCASTERS, 1); + SET_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } -static bool +static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - if (GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED) - || GET_GAME_STATE (SPATHI_SHIELDED_SELVES)) - { // no creatures left - *whichNode = 0; - return true; - } + #define NUM_EVIL_ONES 32 + GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, NUM_EVIL_ONES, + NUM_CREATURE_TYPES, &whichNode); + return whichNode; + } - GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 32, - NUM_CREATURE_TYPES, whichNode); + return 0; +} - if (solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN]) - { - SET_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1); - if (solarSys->SysInfo. - PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] == 0xFFFFFFFF) - SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1); +static bool +GenerateSpathi_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED) && + !GET_GAME_STATE (SPATHI_SHIELDED_SELVES)); + + SET_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1); + if (countNodesRetrieved (&solarSys->SysInfo.PlanetInfo, BIOLOGICAL_SCAN) + + 1 == NUM_EVIL_ONES) + { // last creature picked up + SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1); } - return true; + return true; // picked up } - *whichNode = 0; - return true; + return GenerateDefault_pickupLife (solarSys, world, whichNode); } - Modified: trunk/sc2/src/uqm/planets/generate/gensup.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensup.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensup.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,8 +31,10 @@ static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateSupoxFunctions = { @@ -46,6 +48,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSupox_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSupox_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -118,33 +123,37 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (ULTRON_CONDITION)) - { // Just picked up the Ultron from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (ULTRON_CONDITION, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (ULTRON_CONDITION)) + { // Just picked up the Ultron from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (ULTRON_CONDITION, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/gensyr.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensyr.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensyr.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -38,6 +38,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genthrad.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -34,8 +33,10 @@ static bool GenerateThraddash_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateThraddashFunctions = { @@ -49,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateThraddash_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateThraddash_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -155,44 +159,60 @@ return true; } -static bool +static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode) + PLANET_DESC *world, COUNT whichNode) { if (CurStarDescPtr->Index == THRADD_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (AQUA_HELIX)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (HELIX_VISITS, 0); - SET_GAME_STATE (AQUA_HELIX, 1); - SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1); - SET_GAME_STATE (HELIX_UNPROTECTED, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == THRADD_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (AQUA_HELIX) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (HELIX_VISITS, 0); + SET_GAME_STATE (AQUA_HELIX, 1); + SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1); + SET_GAME_STATE (HELIX_UNPROTECTED, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/gentrap.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gentrap.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gentrap.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -36,6 +36,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genutw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genutw.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genutw.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -35,8 +34,10 @@ static bool GenerateUtwig_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateUtwigFunctions = { @@ -50,6 +51,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateUtwig_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateUtwig_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -206,45 +210,61 @@ return true; } -static bool +static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == UTWIG_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (CurStarDescPtr->Index == BOMB_DEFINED && matchWorld (solarSys, world, 5, 1)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (UTWIG_BOMB)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (UTWIG_BOMB, 1); - SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1); - SET_GAME_STATE (DRUUGE_MANNER, 1); - SET_GAME_STATE (DRUUGE_VISITS, 0); - SET_GAME_STATE (DRUUGE_HOME_VISITS, 0); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == UTWIG_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (CurStarDescPtr->Index == BOMB_DEFINED + && matchWorld (solarSys, world, 5, 1)) + { + assert (!GET_GAME_STATE (UTWIG_BOMB) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (UTWIG_BOMB, 1); + SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1); + SET_GAME_STATE (DRUUGE_MANNER, 1); + SET_GAME_STATE (DRUUGE_VISITS, 0); + SET_GAME_STATE (DRUUGE_HOME_VISITS, 0); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genvault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genvault.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genvault.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../globdata.h" #include "../../nameref.h" #include "../../resinst.h" @@ -28,8 +27,10 @@ static bool GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateVaultFunctions = { @@ -43,6 +44,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateVault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateVault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -74,50 +78,54 @@ return true; } -static bool +static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, 0)) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (planetInfo, ENERGY_SCAN, 0)) + return 0; +} + +static bool +GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{... [truncated message content] |