Generation code refactoring: split off pickupXxx() from generateXxx(), make generateXxx() return the count and take non-pointer

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3587 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2011-04-26 02:21:34 +00:00
parent 3178ac72a2
commit 7d4dfaf48c
35 changed files with 962 additions and 601 deletions
+19 -6
View File
@@ -57,12 +57,22 @@ typedef bool (*GenerateOrbitalFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
typedef bool (*GenerateNameFunction)(SOLARSYS_STATE *solarSys, typedef bool (*GenerateNameFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
typedef bool (*GenerateMineralsFunction)(SOLARSYS_STATE *solarSys, // The following functions return the number of objects being generated
PLANET_DESC *world, COUNT *whichNode); // (or the index of the current object in some cases)
typedef bool (*GenerateEnergyFunction)(SOLARSYS_STATE *solarSys, typedef COUNT (*GenerateMineralsFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
typedef bool (*GenerateLifeFunction)(SOLARSYS_STATE *solarSys, typedef COUNT (*GenerateEnergyFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
typedef COUNT (*GenerateLifeFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
// The following functions return true if the node should be removed
// from the surface, i.e. picked up.
typedef bool (*PickupMineralsFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
typedef bool (*PickupEnergyFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
typedef bool (*PickupLifeFunction)(SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
struct GenerateFunctions { struct GenerateFunctions {
@@ -86,6 +96,9 @@ struct GenerateFunctions {
// Energy sources on the planet surface. // Energy sources on the planet surface.
GenerateLifeFunction generateLife; GenerateLifeFunction generateLife;
// Bio on the planet surface. // Bio on the planet surface.
PickupMineralsFunction pickupMinerals;
PickupEnergyFunction pickupEnergy;
PickupLifeFunction pickupLife;
}; };
+23 -13
View File
@@ -30,8 +30,10 @@
static bool GenerateAndrosynth_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateAndrosynth_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateAndrosynthFunctions = { const GenerateFunctions generateAndrosynthFunctions = {
@@ -45,6 +47,9 @@ const GenerateFunctions generateAndrosynthFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateAndrosynth_generateEnergy, /* .generateEnergy = */ GenerateAndrosynth_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateAndrosynth_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -121,34 +126,39 @@ GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world
} }
static bool static bool
onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 1, MATCH_PLANET))
{
PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo;
// Ruins previously visited are marked in the upper 16 bits // Ruins previously visited are marked in the upper 16 bits
if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16)) if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16))
return false; // already visited this ruin before, no report return false; // already visited this ruin, do not remove
setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16); setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16);
// We set the retrieved bit manually here and need to indicate // We set the retrieved bit manually here and need to indicate
// the change to the solar system state functions // the change to the solar system state functions
SET_GAME_STATE (PLANETARY_CHANGE, 1); 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, GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 1, MATCH_PLANET)) if (matchWorld (solarSys, world, 1, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, onRuinPickedUp);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
+38 -20
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../globdata.h" #include "../../globdata.h"
#include "../../nameref.h" #include "../../nameref.h"
#include "../../resinst.h" #include "../../resinst.h"
@@ -31,8 +30,10 @@ static bool GenerateBurvixese_generateMoons (SOLARSYS_STATE *solarSys,
PLANET_DESC *planet); PLANET_DESC *planet);
static bool GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateBurvixeseFunctions = { const GenerateFunctions generateBurvixeseFunctions = {
@@ -46,6 +47,9 @@ const GenerateFunctions generateBurvixeseFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateBurvixese_generateEnergy, /* .generateEnergy = */ GenerateBurvixese_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateBurvixese_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -136,40 +140,54 @@ GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
if (matchWorld (solarSys, world, 0, 0)) 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)) if (GET_GAME_STATE (BURVIXESE_BROADCASTERS))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
GenerateDefault_generateArtifact (solarSys, whichNode); return GenerateDefault_generateArtifact (solarSys, whichNode);
}
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) return 0;
}
static bool
GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); // Standard ruins report
SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); GenerateDefault_landerReportCycle (solarSys);
return false;
}
if (matchWorld (solarSys, world, 0, 0))
{
assert (!GET_GAME_STATE (BURVIXESE_BROADCASTERS) && whichNode == 0);
GenerateDefault_landerReport (solarSys); GenerateDefault_landerReport (solarSys);
SetLanderTakeoff (); SetLanderTakeoff ();
SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1);
SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1);
return true; // picked up
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
+3
View File
@@ -46,6 +46,9 @@ const GenerateFunctions generateChmmrFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+3
View File
@@ -42,6 +42,9 @@ const GenerateFunctions generateColonyFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+57 -51
View File
@@ -16,7 +16,6 @@
#include "genall.h" #include "genall.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../lander.h" #include "../lander.h"
#include "../../encount.h" #include "../../encount.h"
#include "../../gamestr.h" #include "../../gamestr.h"
@@ -38,12 +37,6 @@ bool GenerateDefault_generateName (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); 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 GeneratePlanets (SOLARSYS_STATE *system);
static void check_yehat_rebellion (void); static void check_yehat_rebellion (void);
@@ -60,6 +53,9 @@ const GenerateFunctions generateDefaultFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -166,74 +162,84 @@ GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
bool COUNT
GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, 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; (void) world;
return true; return whichNode;
} }
bool bool
GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateDefault_pickupMinerals (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
*whichNode = 0; // Minerals do not need any extra handling as of now
(void) solarSys; (void) solarSys;
(void) world; (void) world;
(void) whichNode;
return true; return true;
} }
bool COUNT
GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
GenerateLifeForms (&solarSys->SysInfo, whichNode); (void) whichNode;
(void) solarSys;
(void) world; (void) world;
return true; return 0;
} }
bool bool
GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT *whichNode) 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)
{
GenerateLifeForms (&solarSys->SysInfo, &whichNode);
(void) world;
return whichNode;
}
bool
GenerateDefault_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
// Bio does not need any extra handling as of now
(void) solarSys;
(void) world;
(void) whichNode;
return true;
}
COUNT
GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT whichNode)
{ {
// Generate an energy node at a random location // Generate an energy node at a random location
GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, whichNode); GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, &whichNode);
return true; return whichNode;
} }
bool COUNT
GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT *whichNode) GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT whichNode)
{ {
// Generate a standard spread of city ruins of a destroyed civilization // Generate a standard spread of city ruins of a destroyed civilization
GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS,
0, whichNode); 0, &whichNode);
return true; return whichNode;
}
bool
GenerateDefault_pickupRuins (SOLARSYS_STATE *solarSys,
PickupRuinCallback callback)
{
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;
} }
static inline void static inline void
+13 -12
View File
@@ -31,20 +31,21 @@ bool GenerateDefault_generateName (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
bool GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
bool GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, COUNT GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
bool GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
bool GenerateDefault_pickupMinerals (SOLARSYS_STATE *, PLANET_DESC *world,
// Ruin callback returns 'true' if a lander report should be given COUNT whichNode);
typedef bool (*PickupRuinCallback)(SOLARSYS_STATE *solarSys, bool GenerateDefault_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world,
COUNT whichNode);
bool GenerateDefault_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world,
COUNT whichNode); COUNT whichNode);
bool GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT *whichNode); COUNT GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT whichNode);
bool GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT *whichNode); COUNT GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT whichNode);
bool GenerateDefault_pickupRuins (SOLARSYS_STATE *, PickupRuinCallback);
bool GenerateDefault_landerReport (SOLARSYS_STATE *); bool GenerateDefault_landerReport (SOLARSYS_STATE *);
bool GenerateDefault_landerReportCycle (SOLARSYS_STATE *); bool GenerateDefault_landerReportCycle (SOLARSYS_STATE *);
+22 -13
View File
@@ -33,8 +33,10 @@
static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateDruugeFunctions = { const GenerateFunctions generateDruugeFunctions = {
@@ -48,6 +50,9 @@ const GenerateFunctions generateDruugeFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDruuge_generateEnergy, /* .generateEnergy = */ GenerateDruuge_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDruuge_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -127,8 +132,14 @@ GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
} }
static bool static bool
onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{
GenerateDefault_landerReportCycle (solarSys);
// The artifact can be picked up from any ruin
if (!GET_GAME_STATE (ROSY_SPHERE)) if (!GET_GAME_STATE (ROSY_SPHERE))
{ // Just picked up the Rosy Sphere from a ruin { // Just picked up the Rosy Sphere from a ruin
SetLanderTakeoff (); SetLanderTakeoff ();
@@ -137,24 +148,22 @@ onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode)
SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1);
} }
(void) solarSys; return false; // do not remove the node
(void) whichNode; }
return true; // give whatever report is next (void) whichNode;
return false;
} }
static bool static COUNT
GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, onRuinPickedUp);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
+25 -10
View File
@@ -30,8 +30,10 @@
static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateIlwrathFunctions = { const GenerateFunctions generateIlwrathFunctions = {
@@ -45,6 +47,9 @@ const GenerateFunctions generateIlwrathFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateIlwrath_generateEnergy, /* .generateEnergy = */ GenerateIlwrath_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateIlwrath_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -117,19 +122,29 @@ GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*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;
}
+3
View File
@@ -42,6 +42,9 @@ const GenerateFunctions generateMelnormeFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+59 -38
View File
@@ -34,10 +34,12 @@
static bool GenerateMycon_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateMycon_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateMyconFunctions = { const GenerateFunctions generateMyconFunctions = {
@@ -51,6 +53,9 @@ const GenerateFunctions generateMyconFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateMycon_generateEnergy, /* .generateEnergy = */ GenerateMycon_generateEnergy,
/* .generateLife = */ GenerateMycon_generateLife, /* .generateLife = */ GenerateMycon_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateMycon_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -182,32 +187,21 @@ GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && 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)) if (GET_GAME_STATE (SUN_DEVICE))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
GenerateDefault_generateArtifact (solarSys, whichNode); return 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;
} }
if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED
@@ -215,19 +209,50 @@ GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
|| CurStarDescPtr->Index == EGG_CASE2_DEFINED) || CurStarDescPtr->Index == EGG_CASE2_DEFINED)
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && 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 // XXX: DiscoveryString is set by generateOrbital() only when the
// node has not been picked up yet // node has not been picked up yet
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0) if (!solarSys->SysInfo.PlanetInfo.DiscoveryString)
&& !solarSys->SysInfo.PlanetInfo.DiscoveryString)
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
GenerateDefault_generateArtifact (solarSys, whichNode); return GenerateDefault_generateArtifact (solarSys, whichNode);
}
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) 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: case EGG_CASE0_DEFINED:
@@ -241,24 +266,20 @@ GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
break; break;
} }
GenerateDefault_landerReport (solarSys); return true; // picked up
SetLanderTakeoff ();
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
static bool static COUNT
GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
*whichNode = 0; (void) whichNode;
(void) solarSys; (void) solarSys;
(void) world; (void) world;
return true; return 0;
} }
+44 -24
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../build.h" #include "../../build.h"
#include "../../comm.h" #include "../../comm.h"
#include "../../encount.h" #include "../../encount.h"
@@ -34,8 +33,10 @@
static bool GenerateOrz_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateOrz_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateOrzFunctions = { const GenerateFunctions generateOrzFunctions = {
@@ -49,6 +50,9 @@ const GenerateFunctions generateOrzFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateOrz_generateEnergy, /* .generateEnergy = */ GenerateOrz_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateOrz_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -162,42 +166,58 @@ GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED
&& matchWorld (solarSys, world, 1, 2)) && 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)) if (GET_GAME_STATE (TAALO_PROTECTOR))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
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);
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
}
return true;
} }
if (CurStarDescPtr->Index == ORZ_DEFINED if (CurStarDescPtr->Index == ORZ_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*whichNode = 0; 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))
{
// Standard ruins report
GenerateDefault_landerReportCycle (solarSys);
return false;
}
(void) whichNode;
return false;
}
+26 -9
View File
@@ -32,8 +32,10 @@
static bool GenerateTalkingPet_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateTalkingPet_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
static void ZapToUrquanEncounter (void); static void ZapToUrquanEncounter (void);
@@ -49,6 +51,9 @@ const GenerateFunctions generateTalkingPetFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateTalkingPet_generateEnergy, /* .generateEnergy = */ GenerateTalkingPet_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateTalkingPet_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -154,19 +159,31 @@ GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world
return true; return true;
} }
static bool static COUNT
GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*whichNode = 0; return 0;
return true; }
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 static void
+22 -13
View File
@@ -31,8 +31,10 @@
static bool GeneratePkunk_generatePlanets (SOLARSYS_STATE *solarSys); static bool GeneratePkunk_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys, static bool GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generatePkunkFunctions = { const GenerateFunctions generatePkunkFunctions = {
@@ -46,6 +48,9 @@ const GenerateFunctions generatePkunkFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GeneratePkunk_generateEnergy, /* .generateEnergy = */ GeneratePkunk_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GeneratePkunk_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -117,8 +122,14 @@ GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
} }
static bool static bool
onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{
GenerateDefault_landerReportCycle (solarSys);
// The artifact can be picked up from any ruin
if (!GET_GAME_STATE (CLEAR_SPINDLE)) if (!GET_GAME_STATE (CLEAR_SPINDLE))
{ // Just picked up the Clear Spindle from a ruin { // Just picked up the Clear Spindle from a ruin
SetLanderTakeoff (); SetLanderTakeoff ();
@@ -127,24 +138,22 @@ onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode)
SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1);
} }
(void) solarSys; return false; // do not remove the node
(void) whichNode; }
return true; // give whatever report is next (void) whichNode;
return false;
} }
static bool static COUNT
GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, onRuinPickedUp);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
+3
View File
@@ -39,6 +39,9 @@ const GenerateFunctions generateRainbowWorldFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+3
View File
@@ -49,6 +49,9 @@ const GenerateFunctions generateSaMatraFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+3
View File
@@ -43,6 +43,9 @@ const GenerateFunctions generateShofixtiFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+3
View File
@@ -37,6 +37,9 @@ const GenerateFunctions generateSlylandroFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+66 -50
View File
@@ -20,7 +20,6 @@
#include "../lander.h" #include "../lander.h"
#include "../lifeform.h" #include "../lifeform.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../build.h" #include "../../build.h"
#include "../../encount.h" #include "../../encount.h"
#include "../../globdata.h" #include "../../globdata.h"
@@ -40,10 +39,12 @@ static bool GenerateSol_generateName (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateSol_generateLife (SOLARSYS_STATE *solarSys, static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
static int init_probe (void); static int init_probe (void);
static void check_probe (void); static void check_probe (void);
@@ -60,6 +61,9 @@ const GenerateFunctions generateSolFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateSol_generateEnergy, /* .generateEnergy = */ GenerateSol_generateEnergy,
/* .generateLife = */ GenerateSol_generateLife, /* .generateLife = */ GenerateSol_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateSol_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -509,88 +513,100 @@ GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 8, MATCH_PLANET)) if (matchWorld (solarSys, world, 8, MATCH_PLANET))
{ {
/* Pluto */ /* 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)) if (GET_GAME_STATE (FOUND_PLUTO_SPATHI))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
solarSys->SysInfo.PlanetInfo.CurPt.x = 20; solarSys->SysInfo.PlanetInfo.CurPt.x = 20;
solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT - 8; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT - 8;
*whichNode = 1; // only matters when count is requested return 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;
} }
if (matchWorld (solarSys, world, 2, 1)) if (matchWorld (solarSys, world, 2, 1))
{ {
/* Earth Moon */ /* Earth Moon */
// This check is redundant since the retrieval bit will keep the
// node from showing up again
if (GET_GAME_STATE (MOONBASE_DESTROYED)) if (GET_GAME_STATE (MOONBASE_DESTROYED))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH * 3 / 4; solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH * 3 / 4;
solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 1 / 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);
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
} }
return true; (void) whichNode;
} return 0;
*whichNode = 0;
return true;
} }
static bool 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
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);
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 COUNT
GenerateSol_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateSol_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 2, 1)) if (matchWorld (solarSys, world, 2, 1))
{ {
/* Earth Moon */ /* Earth Moon */
GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 10, GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 10,
NUM_CREATURE_TYPES + 1, whichNode); NUM_CREATURE_TYPES + 1, &whichNode);
return true; return whichNode;
} }
*whichNode = 0; return 0;
return true;
} }
+59 -37
View File
@@ -35,10 +35,14 @@ static bool GenerateSpathi_generateMoons (SOLARSYS_STATE *solarSys,
PLANET_DESC *planet); PLANET_DESC *planet);
static bool GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); 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 = { const GenerateFunctions generateSpathiFunctions = {
@@ -52,6 +56,9 @@ const GenerateFunctions generateSpathiFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateSpathi_generateEnergy, /* .generateEnergy = */ GenerateSpathi_generateEnergy,
/* .generateLife = */ GenerateSpathi_generateLife, /* .generateLife = */ GenerateSpathi_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateSpathi_pickupEnergy,
/* .pickupLife = */ GenerateSpathi_pickupLife,
}; };
@@ -191,64 +198,79 @@ GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, 0)) 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)) if (GET_GAME_STATE (UMGAH_BROADCASTERS))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
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);
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
} }
return true; return 0;
}
*whichNode = 0;
return true;
} }
static bool 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);
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
SET_GAME_STATE (UMGAH_BROADCASTERS, 1);
SET_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1);
return true; // picked up
}
(void) whichNode;
return false;
}
static COUNT
GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
if (GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED) #define NUM_EVIL_ONES 32
|| GET_GAME_STATE (SPATHI_SHIELDED_SELVES)) GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, NUM_EVIL_ONES,
{ // no creatures left NUM_CREATURE_TYPES, &whichNode);
*whichNode = 0; return whichNode;
return true;
} }
GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 32, return 0;
NUM_CREATURE_TYPES, whichNode); }
if (solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN]) 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); SET_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1);
if (solarSys->SysInfo. if (countNodesRetrieved (&solarSys->SysInfo.PlanetInfo, BIOLOGICAL_SCAN)
PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] == 0xFFFFFFFF) + 1 == NUM_EVIL_ONES)
{ // last creature picked up
SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1); SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1);
} }
return true; return true; // picked up
} }
*whichNode = 0; return GenerateDefault_pickupLife (solarSys, world, whichNode);
return true;
} }
+22 -13
View File
@@ -31,8 +31,10 @@
static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateSupoxFunctions = { const GenerateFunctions generateSupoxFunctions = {
@@ -46,6 +48,9 @@ const GenerateFunctions generateSupoxFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateSupox_generateEnergy, /* .generateEnergy = */ GenerateSupox_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateSupox_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -118,8 +123,14 @@ GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
} }
static bool static bool
onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{
GenerateDefault_landerReportCycle (solarSys);
// The artifact can be picked up from any ruin
if (!GET_GAME_STATE (ULTRON_CONDITION)) if (!GET_GAME_STATE (ULTRON_CONDITION))
{ // Just picked up the Ultron from a ruin { // Just picked up the Ultron from a ruin
SetLanderTakeoff (); SetLanderTakeoff ();
@@ -127,24 +138,22 @@ onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode)
SET_GAME_STATE (ULTRON_CONDITION, 1); SET_GAME_STATE (ULTRON_CONDITION, 1);
} }
(void) solarSys; return false; // do not remove the node
(void) whichNode; }
return true; // give whatever report is next (void) whichNode;
return false;
} }
static bool static COUNT
GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, onRuinPickedUp);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
+3
View File
@@ -38,6 +38,9 @@ const GenerateFunctions generateSyreenFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+40 -20
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../build.h" #include "../../build.h"
#include "../../comm.h" #include "../../comm.h"
#include "../../encount.h" #include "../../encount.h"
@@ -34,8 +33,10 @@
static bool GenerateThraddash_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateThraddash_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateThraddashFunctions = { const GenerateFunctions generateThraddashFunctions = {
@@ -49,6 +50,9 @@ const GenerateFunctions generateThraddashFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateThraddash_generateEnergy, /* .generateEnergy = */ GenerateThraddash_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateThraddash_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -155,44 +159,60 @@ GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys,
return true; return true;
} }
static bool static COUNT
GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode) PLANET_DESC *world, COUNT whichNode)
{ {
if (CurStarDescPtr->Index == THRADD_DEFINED if (CurStarDescPtr->Index == THRADD_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && 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)) if (GET_GAME_STATE (AQUA_HELIX))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
GenerateDefault_generateArtifact (solarSys, whichNode); return GenerateDefault_generateArtifact (solarSys, whichNode);
}
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) return 0;
}
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;
}
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 (HELIX_VISITS, 0);
SET_GAME_STATE (AQUA_HELIX, 1); SET_GAME_STATE (AQUA_HELIX, 1);
SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1); SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1);
SET_GAME_STATE (HELIX_UNPROTECTED, 1); SET_GAME_STATE (HELIX_UNPROTECTED, 1);
GenerateDefault_landerReport (solarSys); return true; // picked up
SetLanderTakeoff ();
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
+3
View File
@@ -36,6 +36,9 @@ const GenerateFunctions generateTrapFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+40 -20
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../build.h" #include "../../build.h"
#include "../../comm.h" #include "../../comm.h"
#include "../../encount.h" #include "../../encount.h"
@@ -35,8 +34,10 @@ static bool GenerateUtwig_initNpcs (SOLARSYS_STATE *solarSys);
static bool GenerateUtwig_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateUtwig_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateUtwigFunctions = { const GenerateFunctions generateUtwigFunctions = {
@@ -50,6 +51,9 @@ const GenerateFunctions generateUtwigFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateUtwig_generateEnergy, /* .generateEnergy = */ GenerateUtwig_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateUtwig_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -206,45 +210,61 @@ GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (CurStarDescPtr->Index == UTWIG_DEFINED if (CurStarDescPtr->Index == UTWIG_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
if (CurStarDescPtr->Index == BOMB_DEFINED if (CurStarDescPtr->Index == BOMB_DEFINED
&& matchWorld (solarSys, world, 5, 1)) && 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)) if (GET_GAME_STATE (UTWIG_BOMB))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
GenerateDefault_generateArtifact (solarSys, whichNode); return GenerateDefault_generateArtifact (solarSys, whichNode);
}
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) return 0;
}
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;
}
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, 1);
SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1); SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1);
SET_GAME_STATE (DRUUGE_MANNER, 1); SET_GAME_STATE (DRUUGE_MANNER, 1);
SET_GAME_STATE (DRUUGE_VISITS, 0); SET_GAME_STATE (DRUUGE_VISITS, 0);
SET_GAME_STATE (DRUUGE_HOME_VISITS, 0); SET_GAME_STATE (DRUUGE_HOME_VISITS, 0);
GenerateDefault_landerReport (solarSys); return true; // picked up
SetLanderTakeoff ();
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
+24 -16
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../globdata.h" #include "../../globdata.h"
#include "../../nameref.h" #include "../../nameref.h"
#include "../../resinst.h" #include "../../resinst.h"
@@ -28,8 +27,10 @@
static bool GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateVaultFunctions = { const GenerateFunctions generateVaultFunctions = {
@@ -43,6 +44,9 @@ const GenerateFunctions generateVaultFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateVault_generateEnergy, /* .generateEnergy = */ GenerateVault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateVault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -74,20 +78,25 @@ GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, 0)) if (matchWorld (solarSys, world, 0, 0))
{ {
PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; return GenerateDefault_generateArtifact (solarSys, whichNode);
}
GenerateDefault_generateArtifact (solarSys, whichNode); return 0;
}
if (isNodeRetrieved (planetInfo, ENERGY_SCAN, 0)) static bool
GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
if (matchWorld (solarSys, world, 0, 0))
{ {
// Retrieval status is cleared to keep the node on the map assert (whichNode == 0);
setNodeNotRetrieved (planetInfo, ENERGY_SCAN, 0);
if (GET_GAME_STATE (SHIP_VAULT_UNLOCKED)) if (GET_GAME_STATE (SHIP_VAULT_UNLOCKED))
{ // Give the final report, "omg empty" and whatnot { // Give the final report, "omg empty" and whatnot
@@ -112,12 +121,11 @@ GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
SET_GAME_STATE (SYREEN_HOME_VISITS, 0); SET_GAME_STATE (SYREEN_HOME_VISITS, 0);
} }
} }
// The Vault cannot be "picked up". It is always on the surface.
return false;
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
+73 -40
View File
@@ -20,7 +20,6 @@
#include "../lander.h" #include "../lander.h"
#include "../lifeform.h" #include "../lifeform.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../build.h" #include "../../build.h"
#include "../../comm.h" #include "../../comm.h"
#include "../../encount.h" #include "../../encount.h"
@@ -36,10 +35,14 @@
static bool GenerateVux_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateVux_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateVux_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateVux_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateVux_generateLife (SOLARSYS_STATE *solarSys, static COUNT GenerateVux_generateLife (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateVux_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world,
COUNT whichNode);
static bool GenerateVux_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world,
COUNT whichNode);
const GenerateFunctions generateVuxFunctions = { const GenerateFunctions generateVuxFunctions = {
@@ -53,6 +56,9 @@ const GenerateFunctions generateVuxFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateVux_generateEnergy, /* .generateEnergy = */ GenerateVux_generateEnergy,
/* .generateLife = */ GenerateVux_generateLife, /* .generateLife = */ GenerateVux_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateVux_pickupEnergy,
/* .pickupLife = */ GenerateVux_pickupLife,
}; };
@@ -203,51 +209,68 @@ GenerateVux_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (CurStarDescPtr->Index == MAIDENS_DEFINED if (CurStarDescPtr->Index == MAIDENS_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && 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 (SHOFIXTI_MAIDENS)) if (GET_GAME_STATE (SHOFIXTI_MAIDENS))
{ // already picked up { // already picked up
*whichNode = 0; return 0;
return true;
} }
solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH / 3; solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH / 3;
solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 5 / 8; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 5 / 8;
*whichNode = 1; // only matters when count is requested return 1; // only matters when count is requested
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0))
{
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
SET_GAME_STATE (SHOFIXTI_MAIDENS, 1);
SET_GAME_STATE (MAIDENS_ON_SHIP, 1);
}
return true;
} }
if (CurStarDescPtr->Index == VUX_DEFINED if (CurStarDescPtr->Index == VUX_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
static bool static bool
GenerateVux_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
if (CurStarDescPtr->Index == MAIDENS_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET))
{
assert (!GET_GAME_STATE (SHOFIXTI_MAIDENS) && whichNode == 0);
GenerateDefault_landerReport (solarSys);
SetLanderTakeoff ();
SET_GAME_STATE (SHOFIXTI_MAIDENS, 1);
SET_GAME_STATE (MAIDENS_ON_SHIP, 1);
return true; // picked up
}
if (CurStarDescPtr->Index == VUX_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET))
{
// Standard ruins report
GenerateDefault_landerReportCycle (solarSys);
return false;
}
(void) whichNode;
return false;
}
static COUNT
GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (CurStarDescPtr->Index == MAIDENS_DEFINED if (CurStarDescPtr->Index == MAIDENS_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET)) && matchWorld (solarSys, world, 0, MATCH_PLANET))
@@ -258,7 +281,7 @@ GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
old_rand = TFB_SeedRandom ( old_rand = TFB_SeedRandom (
solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]);
for (i = 0; i <= *whichNode && i < 12; ++i) for (i = 0; i <= whichNode && i < 12; ++i)
{ {
GenerateRandomLocation (&solarSys->SysInfo); GenerateRandomLocation (&solarSys->SysInfo);
if (i < 4) if (i < 4)
@@ -269,10 +292,9 @@ GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
solarSys->SysInfo.PlanetInfo.CurType = 18; solarSys->SysInfo.PlanetInfo.CurType = 18;
} }
*whichNode = 12; // only matters when count is requested
TFB_SeedRandom (old_rand); TFB_SeedRandom (old_rand);
return true;
return 12; // only matters when count is requested
} }
if (CurStarDescPtr->Index == VUX_BEAST_DEFINED if (CurStarDescPtr->Index == VUX_BEAST_DEFINED
@@ -284,7 +306,7 @@ GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
old_rand = TFB_SeedRandom ( old_rand = TFB_SeedRandom (
solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]);
for (i = 0; i <= *whichNode && i < 11; ++i) for (i = 0; i <= whichNode && i < 11; ++i)
{ {
GenerateRandomLocation (&solarSys->SysInfo); GenerateRandomLocation (&solarSys->SysInfo);
if (i == 0) /* VUX Beast */ if (i == 0) /* VUX Beast */
@@ -297,11 +319,25 @@ GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
solarSys->SysInfo.PlanetInfo.CurType = 8; solarSys->SysInfo.PlanetInfo.CurType = 8;
} }
*whichNode = 11; // only matters when count is requested TFB_SeedRandom (old_rand);
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, BIOLOGICAL_SCAN, 0) return 11; // only matters when count is requested
&& !GET_GAME_STATE (VUX_BEAST)) }
return GenerateDefault_generateLife (solarSys, world, whichNode);
}
static bool
GenerateVux_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
if (CurStarDescPtr->Index == VUX_BEAST_DEFINED
&& matchWorld (solarSys, world, 0, MATCH_PLANET))
{
if (whichNode == 0)
{ // Picked up Zex' Beauty { // Picked up Zex' Beauty
assert (!GET_GAME_STATE (VUX_BEAST));
GenerateDefault_landerReport (solarSys); GenerateDefault_landerReport (solarSys);
SetLanderTakeoff (); SetLanderTakeoff ();
@@ -309,11 +345,8 @@ GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
SET_GAME_STATE (VUX_BEAST_ON_SHIP, 1); SET_GAME_STATE (VUX_BEAST_ON_SHIP, 1);
} }
TFB_SeedRandom (old_rand); return true; // picked up
return true;
} }
GenerateDefault_generateLife (solarSys, world, whichNode); return GenerateDefault_pickupLife (solarSys, world, whichNode);
return true;
} }
+25 -15
View File
@@ -19,7 +19,6 @@
#include "genall.h" #include "genall.h"
#include "../lander.h" #include "../lander.h"
#include "../planets.h" #include "../planets.h"
#include "../scan.h"
#include "../../globdata.h" #include "../../globdata.h"
#include "../../nameref.h" #include "../../nameref.h"
#include "../../resinst.h" #include "../../resinst.h"
@@ -28,8 +27,10 @@
static bool GenerateWreck_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateWreck_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateWreck_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateWreckFunctions = { const GenerateFunctions generateWreckFunctions = {
@@ -43,6 +44,9 @@ const GenerateFunctions generateWreckFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateWreck_generateEnergy, /* .generateEnergy = */ GenerateWreck_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateWreck_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -68,18 +72,25 @@ GenerateWreck_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 6, MATCH_PLANET)) if (matchWorld (solarSys, world, 6, MATCH_PLANET))
{ {
GenerateDefault_generateArtifact (solarSys, whichNode); return GenerateDefault_generateArtifact (solarSys, whichNode);
}
if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) return 0;
}
static bool
GenerateWreck_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT whichNode)
{
if (matchWorld (solarSys, world, 6, MATCH_PLANET))
{ {
// Retrieval status is cleared to keep the node on the map assert (whichNode == 0);
setNodeNotRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0);
GenerateDefault_landerReportCycle (solarSys); GenerateDefault_landerReportCycle (solarSys);
@@ -90,12 +101,11 @@ GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
SET_GAME_STATE (PORTAL_KEY, 1); SET_GAME_STATE (PORTAL_KEY, 1);
SET_GAME_STATE (PORTAL_KEY_ON_SHIP, 1); SET_GAME_STATE (PORTAL_KEY_ON_SHIP, 1);
} }
// The Wreck cannot be "picked up". It is always on the surface.
return false;
} }
return true; (void) whichNode;
} return false;
*whichNode = 0;
return true;
} }
+25 -9
View File
@@ -30,8 +30,10 @@
static bool GenerateYehat_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateYehat_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateYehat_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateYehat_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateYehat_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateYehatFunctions = { const GenerateFunctions generateYehatFunctions = {
@@ -45,6 +47,9 @@ const GenerateFunctions generateYehatFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateYehat_generateEnergy, /* .generateEnergy = */ GenerateYehat_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateYehat_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -107,18 +112,29 @@ GenerateYehat_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
static bool
GenerateYehat_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;
}
@@ -38,6 +38,9 @@ const GenerateFunctions generateZoqFotPikScoutFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateEnergy = */ GenerateDefault_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateDefault_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
+25 -9
View File
@@ -30,8 +30,10 @@ static bool GenerateZoqFotPik_initNpcs (SOLARSYS_STATE *solarSys);
static bool GenerateZoqFotPik_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateZoqFotPik_generatePlanets (SOLARSYS_STATE *solarSys);
static bool GenerateZoqFotPik_generateOrbital (SOLARSYS_STATE *solarSys, static bool GenerateZoqFotPik_generateOrbital (SOLARSYS_STATE *solarSys,
PLANET_DESC *world); PLANET_DESC *world);
static bool GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys, static COUNT GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *whichNode); PLANET_DESC *world, COUNT whichNode);
static bool GenerateZoqFotPik_pickupEnergy (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT whichNode);
const GenerateFunctions generateZoqFotPikFunctions = { const GenerateFunctions generateZoqFotPikFunctions = {
@@ -45,6 +47,9 @@ const GenerateFunctions generateZoqFotPikFunctions = {
/* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateMinerals = */ GenerateDefault_generateMinerals,
/* .generateEnergy = */ GenerateZoqFotPik_generateEnergy, /* .generateEnergy = */ GenerateZoqFotPik_generateEnergy,
/* .generateLife = */ GenerateDefault_generateLife, /* .generateLife = */ GenerateDefault_generateLife,
/* .pickupMinerals = */ GenerateDefault_pickupMinerals,
/* .pickupEnergy = */ GenerateZoqFotPik_pickupEnergy,
/* .pickupLife = */ GenerateDefault_pickupLife,
}; };
@@ -137,18 +142,29 @@ GenerateZoqFotPik_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world)
return true; return true;
} }
static bool static COUNT
GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *whichNode) COUNT whichNode)
{ {
if (matchWorld (solarSys, world, 0, MATCH_PLANET)) if (matchWorld (solarSys, world, 0, MATCH_PLANET))
{ {
GenerateDefault_generateRuins (solarSys, whichNode); return GenerateDefault_generateRuins (solarSys, whichNode);
GenerateDefault_pickupRuins (solarSys, NULL);
return true;
} }
*whichNode = 0; return 0;
return true;
} }
static bool
GenerateZoqFotPik_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;
}
+5 -13
View File
@@ -718,7 +718,6 @@ CheckObjectCollision (COUNT index)
{ {
COUNT scan, NumRetrieved; COUNT scan, NumRetrieved;
SIZE which_node; SIZE which_node;
COUNT allNodes;
scan = LOBYTE (ElementPtr->scan_node); scan = LOBYTE (ElementPtr->scan_node);
if (pLanderPrim == 0) if (pLanderPrim == 0)
@@ -826,18 +825,11 @@ CheckObjectCollision (COUNT index)
} }
which_node = HIBYTE (ElementPtr->scan_node) - 1; which_node = HIBYTE (ElementPtr->scan_node) - 1;
setNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo, scan, if (callPickupForScanType (pSolarSysState,
which_node); pSolarSysState->pOrbitalDesc, which_node, scan))
allNodes = (COUNT)~0; { // Node retrieved, remove from the surface
callGenerateForScanType (pSolarSysState, setNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo,
pSolarSysState->pOrbitalDesc, scan, which_node);
&allNodes, scan);
// Generation func above may reset the retrieved status bit
// to keep the node on the map
if (isNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo, scan,
which_node))
{
SET_GAME_STATE (PLANETARY_CHANGE, 1); SET_GAME_STATE (PLANETARY_CHANGE, 1);
ElementPtr->state_flags |= DISAPPEARING; ElementPtr->state_flags |= DISAPPEARING;
} }
+42 -8
View File
@@ -934,9 +934,9 @@ DrawScannedStuff (COUNT y, COUNT scan)
SetContextForeGroundColor (OldColor); SetContextForeGroundColor (OldColor);
} }
bool COUNT
callGenerateForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world, callGenerateForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT *node, BYTE scanType) COUNT node, BYTE scanType)
{ {
switch (scanType) switch (scanType)
{ {
@@ -951,6 +951,27 @@ callGenerateForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
solarSys, world, node); solarSys, world, node);
} }
assert (false);
return 0;
}
bool
callPickupForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world,
COUNT node, BYTE scanType)
{
switch (scanType)
{
case MINERAL_SCAN:
return (*solarSys->genFuncs->pickupMinerals) (
solarSys, world, node);
case ENERGY_SCAN:
return (*solarSys->genFuncs->pickupEnergy) (
solarSys, world, node);
case BIOLOGICAL_SCAN:
return (*solarSys->genFuncs->pickupLife) (
solarSys, world, node);
}
assert (false); assert (false);
return false; return false;
} }
@@ -1337,15 +1358,13 @@ GeneratePlanetSide (void)
f = SetAbsFrameIndex (MiscDataFrame, f = SetAbsFrameIndex (MiscDataFrame,
NUM_SCANDOT_TRANSITIONS * (scan - ENERGY_SCAN)); NUM_SCANDOT_TRANSITIONS * (scan - ENERGY_SCAN));
num_nodes = (COUNT)~0; num_nodes = callGenerateForScanType (pSolarSysState,
callGenerateForScanType (pSolarSysState, pSolarSysState->pOrbitalDesc, ~0, scan);
pSolarSysState->pOrbitalDesc, &num_nodes, scan);
while (num_nodes--) while (num_nodes--)
{ {
HELEMENT hNodeElement; HELEMENT hNodeElement;
ELEMENT *NodeElementPtr; ELEMENT *NodeElementPtr;
COUNT whichNode;
if (isNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo, if (isNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo,
scan, num_nodes)) scan, num_nodes))
@@ -1357,9 +1376,8 @@ GeneratePlanetSide (void)
LockElement (hNodeElement, &NodeElementPtr); LockElement (hNodeElement, &NodeElementPtr);
whichNode = num_nodes;
callGenerateForScanType (pSolarSysState, callGenerateForScanType (pSolarSysState,
pSolarSysState->pOrbitalDesc, &whichNode, pSolarSysState->pOrbitalDesc, num_nodes,
scan); scan);
NodeElementPtr->scan_node = MAKE_WORD (scan, num_nodes + 1); NodeElementPtr->scan_node = MAKE_WORD (scan, num_nodes + 1);
@@ -1425,6 +1443,22 @@ isNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr)
!= 0; != 0;
} }
COUNT
countNodesRetrieved (PLANET_INFO *planetInfo, BYTE scanType)
{
COUNT count;
DWORD mask = planetInfo->ScanRetrieveMask[scanType];
// count the number of bits set
// Caution: 'mask' must be unsigned
for (count = 0; mask != 0; mask >>= 1)
{
if (mask & 1)
++count;
}
return count;
}
void void
setNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr) setNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr)
{ {
+6 -2
View File
@@ -47,14 +47,18 @@ extern void ScanSystem (void);
extern void RepairBackRect (RECT *pRect); extern void RepairBackRect (RECT *pRect);
extern void GeneratePlanetSide (void); extern void GeneratePlanetSide (void);
extern bool callGenerateForScanType (SOLARSYS_STATE *solarSys, extern COUNT callGenerateForScanType (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT *node, BYTE scanType); PLANET_DESC *world, COUNT node, BYTE scanType);
// Returns true if the node should be removed from the surface
extern bool callPickupForScanType (SOLARSYS_STATE *solarSys,
PLANET_DESC *world, COUNT node, BYTE scanType);
extern void RedrawSurfaceScan (const POINT *newLoc); extern void RedrawSurfaceScan (const POINT *newLoc);
extern CONTEXT GetScanContext (BOOLEAN *owner); extern CONTEXT GetScanContext (BOOLEAN *owner);
extern void DestroyScanContext (void); extern void DestroyScanContext (void);
bool isNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr); bool isNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr);
COUNT countNodesRetrieved (PLANET_INFO *planetInfo, BYTE scanType);
void setNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr); void setNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr);
void setNodeNotRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr); void setNodeNotRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr);
+12 -20
View File
@@ -1059,16 +1059,14 @@ calculateBioValue (const SOLARSYS_STATE *system, const PLANET_DESC *world)
assert (system->pOrbitalDesc == world); assert (system->pOrbitalDesc == world);
numBio = (COUNT)~0; numBio = callGenerateForScanType ((SOLARSYS_STATE *) system,
callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, (PLANET_DESC *) world, ~0, BIOLOGICAL_SCAN);
&numBio, BIOLOGICAL_SCAN);
result = 0; result = 0;
for (i = 0; i < numBio; i++) for (i = 0; i < numBio; i++)
{ {
COUNT whichNode = i;
callGenerateForScanType ((SOLARSYS_STATE *) system, callGenerateForScanType ((SOLARSYS_STATE *) system,
(PLANET_DESC *) world, &whichNode, BIOLOGICAL_SCAN); (PLANET_DESC *) world, i, BIOLOGICAL_SCAN);
result += BIO_CREDIT_VALUE * LONIBBLE (CreatureData[ result += BIO_CREDIT_VALUE * LONIBBLE (CreatureData[
system->SysInfo.PlanetInfo.CurType].ValueAndHitPoints); system->SysInfo.PlanetInfo.CurType].ValueAndHitPoints);
} }
@@ -1084,18 +1082,16 @@ generateBioIndex(const SOLARSYS_STATE *system, const PLANET_DESC *world,
assert (system->pOrbitalDesc == world); assert (system->pOrbitalDesc == world);
numBio = (COUNT)~0; numBio = callGenerateForScanType ((SOLARSYS_STATE *) system,
callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, (PLANET_DESC *) world, ~0, BIOLOGICAL_SCAN);
&numBio, BIOLOGICAL_SCAN);
for (i = 0; i < NUM_CREATURE_TYPES + NUM_SPECIAL_CREATURE_TYPES; i++) for (i = 0; i < NUM_CREATURE_TYPES + NUM_SPECIAL_CREATURE_TYPES; i++)
bio[i] = 0; bio[i] = 0;
for (i = 0; i < numBio; i++) for (i = 0; i < numBio; i++)
{ {
COUNT whichNode = i;
callGenerateForScanType ((SOLARSYS_STATE *) system, callGenerateForScanType ((SOLARSYS_STATE *) system,
(PLANET_DESC *) world, &whichNode, BIOLOGICAL_SCAN); (PLANET_DESC *) world, i, BIOLOGICAL_SCAN);
bio[system->SysInfo.PlanetInfo.CurType]++; bio[system->SysInfo.PlanetInfo.CurType]++;
} }
} }
@@ -1109,16 +1105,14 @@ calculateMineralValue (const SOLARSYS_STATE *system, const PLANET_DESC *world)
assert (system->pOrbitalDesc == world); assert (system->pOrbitalDesc == world);
numDeposits = (COUNT)~0; numDeposits = callGenerateForScanType ((SOLARSYS_STATE *) system,
callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, (PLANET_DESC *) world, ~0, MINERAL_SCAN);
&numDeposits, MINERAL_SCAN);
result = 0; result = 0;
for (i = 0; i < numDeposits; i++) for (i = 0; i < numDeposits; i++)
{ {
COUNT whichNode = i;
callGenerateForScanType ((SOLARSYS_STATE *) system, callGenerateForScanType ((SOLARSYS_STATE *) system,
(PLANET_DESC *) world, &whichNode, MINERAL_SCAN); (PLANET_DESC *) world, i, MINERAL_SCAN);
result += HIBYTE (system->SysInfo.PlanetInfo.CurDensity) * result += HIBYTE (system->SysInfo.PlanetInfo.CurDensity) *
GLOBAL (ElementWorth[ElementCategory ( GLOBAL (ElementWorth[ElementCategory (
system->SysInfo.PlanetInfo.CurType)]); system->SysInfo.PlanetInfo.CurType)]);
@@ -1135,18 +1129,16 @@ generateMineralIndex(const SOLARSYS_STATE *system, const PLANET_DESC *world,
assert (system->pOrbitalDesc == world); assert (system->pOrbitalDesc == world);
numDeposits = (COUNT)~0; numDeposits = callGenerateForScanType ((SOLARSYS_STATE *) system,
callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, (PLANET_DESC *) world, ~0, MINERAL_SCAN);
&numDeposits, MINERAL_SCAN);
for (i = 0; i < NUM_ELEMENT_CATEGORIES; i++) for (i = 0; i < NUM_ELEMENT_CATEGORIES; i++)
minerals[i] = 0; minerals[i] = 0;
for (i = 0; i < numDeposits; i++) for (i = 0; i < numDeposits; i++)
{ {
COUNT whichNode = i;
callGenerateForScanType ((SOLARSYS_STATE *) system, callGenerateForScanType ((SOLARSYS_STATE *) system,
(PLANET_DESC *) world, &whichNode, MINERAL_SCAN); (PLANET_DESC *) world, i, MINERAL_SCAN);
minerals[ElementCategory(system->SysInfo.PlanetInfo.CurType)] += minerals[ElementCategory(system->SysInfo.PlanetInfo.CurType)] +=
HIBYTE (system->SysInfo.PlanetInfo.CurDensity); HIBYTE (system->SysInfo.PlanetInfo.CurDensity);
} }