SIS crew is handled in battle as other ships. It is no longer continuously
synchronised during melee, but only at the beginning and end of the battle. This requires a change to the size of various crew_level fields, which meant some hacks been necessary to keep the savegame format the same. These hacks should go away when we move to a new savegame format. Various other small cleanups. Various documentation added. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2269 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
Changes towards version 0.6:
|
||||
- Flagship crew numbers are no longer continuously synchronised during
|
||||
melee, but only at the beginning and end of the battle. - SvdB
|
||||
- Various small cleanups. - SvdB
|
||||
- Debugging function to add crew during battle. - SvdB
|
||||
- More documentation - SvdB.
|
||||
- RMPLIFIED PRECURSOR BOMB is now AMPLIFIED, from Vorn (bug #812)
|
||||
|
||||
@@ -66,19 +66,6 @@ ProcessInput (void)
|
||||
JournalInput (InputState);
|
||||
#endif /* CREATE_JOURNAL */
|
||||
|
||||
#ifdef TESTING
|
||||
if ((InputState & DEVICE_BUTTON3)
|
||||
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
||||
{
|
||||
COUNT i;
|
||||
|
||||
for (i = ARILOU_SHIP; i <= BLACK_URQUAN_SHIP; ++i)
|
||||
ActivateStarShip (i, SPHERE_TRACKING);
|
||||
while (GLOBAL (GameClock.tick_count) > 1)
|
||||
ClockTick ();
|
||||
}
|
||||
#endif /* TESTING */
|
||||
|
||||
CyborgDescPtr->ship_input_state = 0;
|
||||
if (CyborgDescPtr->RaceDescPtr->ship_info.crew_level)
|
||||
{
|
||||
@@ -94,12 +81,14 @@ if ((InputState & DEVICE_BUTTON3)
|
||||
if (InputState & BATTLE_SPECIAL)
|
||||
CyborgDescPtr->ship_input_state |= SPECIAL;
|
||||
|
||||
if (CanRunAway && cur_player == 0 && (InputState & BATTLE_ESCAPE))
|
||||
if (CanRunAway && cur_player == 0 &&
|
||||
(InputState & BATTLE_ESCAPE))
|
||||
{
|
||||
ELEMENTPTR ElementPtr;
|
||||
|
||||
LockElement (StarShipPtr->hShip, &ElementPtr);
|
||||
if (GetPrimType (&DisplayArray[ElementPtr->PrimIndex]) == STAMP_PRIM
|
||||
if (GetPrimType (&DisplayArray[
|
||||
ElementPtr->PrimIndex]) == STAMP_PRIM
|
||||
&& ElementPtr->life_span == NORMAL_LIFE
|
||||
&& !(ElementPtr->state_flags & FINITE_LIFE)
|
||||
&& ElementPtr->mass_points != MAX_SHIP_MASS * 10
|
||||
@@ -118,8 +107,10 @@ if ((InputState & DEVICE_BUTTON3)
|
||||
~(SHIP_AT_MAX_SPEED | SHIP_BEYOND_MAX_SPEED);
|
||||
|
||||
SetPrimColor (&DisplayArray[ElementPtr->PrimIndex],
|
||||
BUILD_COLOR (MAKE_RGB15 (0xB, 0x00, 0x00), 0x2E));
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMPFILL_PRIM);
|
||||
BUILD_COLOR (
|
||||
MAKE_RGB15 (0xB, 0x00, 0x00), 0x2E));
|
||||
SetPrimType (&DisplayArray[
|
||||
ElementPtr->PrimIndex], STAMPFILL_PRIM);
|
||||
|
||||
CyborgDescPtr->ship_input_state = 0;
|
||||
}
|
||||
|
||||
@@ -383,14 +383,16 @@ NameCaptain (PQUEUE pQueue, STARSHIPPTR StarShipPtr)
|
||||
return name_index;
|
||||
}
|
||||
|
||||
// crew_level can be set to INFINITE_FLEET for a ship which is to
|
||||
// represent an infinite number of ships.
|
||||
HSTARSHIP
|
||||
CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, BYTE crew_level)
|
||||
CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, COUNT crew_level)
|
||||
{
|
||||
HSTARSHIP hStarShip, hBuiltShip;
|
||||
SHIP_FRAGMENTPTR TemplatePtr;
|
||||
|
||||
if ((hStarShip = GetStarShipFromIndex (&GLOBAL (avail_race_q),
|
||||
shipIndex)) == 0)
|
||||
hStarShip = GetStarShipFromIndex (&GLOBAL (avail_race_q), shipIndex);
|
||||
if (hStarShip == 0)
|
||||
return 0;
|
||||
|
||||
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
extern HSTARSHIP Build (PQUEUE pQueue, DWORD RaceResIndex, COUNT
|
||||
which_player, BYTE captains_name_index);
|
||||
extern HSTARSHIP CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, BYTE
|
||||
crew_level);
|
||||
extern HSTARSHIP CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue,
|
||||
COUNT crew_level);
|
||||
extern HSTARSHIP GetStarShipFromIndex (PQUEUE pShipQ, COUNT Index);
|
||||
extern BYTE NameCaptain (PQUEUE pQueue, STARSHIPPTR StarShipPtr);
|
||||
|
||||
@@ -75,8 +75,7 @@ extern void OutlineShipStatus (COORD y);
|
||||
extern void InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect);
|
||||
extern void DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta,
|
||||
SIZE energy_delta);
|
||||
extern void DrawBattleCrewAmount (STARSHIPPTR StarShipPtr,
|
||||
BOOLEAN CountPlayer);
|
||||
extern void DrawBattleCrewAmount (STARSHIPPTR StarShipPtr);
|
||||
|
||||
#endif /* _BUILD_H */
|
||||
|
||||
|
||||
@@ -105,7 +105,8 @@ typedef struct element
|
||||
|
||||
ELEMENT_FLAGS state_flags;
|
||||
COUNT life_span;
|
||||
BYTE crew_level, mass_points;
|
||||
COUNT crew_level;
|
||||
BYTE mass_points;
|
||||
BYTE turn_wait, thrust_wait;
|
||||
VELOCITY_DESC velocity;
|
||||
INTERSECT_CONTROL IntersectControl;
|
||||
|
||||
+25
-45
@@ -130,57 +130,37 @@ BuildBattle (COUNT which_player)
|
||||
hBuiltShip = Build (&race_q[which_player],
|
||||
GET_RACE_ID (FragPtr) == SAMATRA_SHIP ?
|
||||
SAMATRA_RES_INDEX : FragPtr->RaceResIndex,
|
||||
1 << which_player,
|
||||
StarShipCaptain (FragPtr));
|
||||
1 << which_player, StarShipCaptain (FragPtr));
|
||||
if (hBuiltShip)
|
||||
{
|
||||
BuiltShipPtr = LockStarShip (
|
||||
&race_q[which_player],
|
||||
hBuiltShip
|
||||
);
|
||||
BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip);
|
||||
BuiltShipPtr->captains_name_index =
|
||||
StarShipCaptain (BuiltShipPtr);
|
||||
BuiltShipPtr->cur_status_flags =
|
||||
StarShipPlayer (BuiltShipPtr);
|
||||
if (FragPtr->ShipInfo.crew_level != (BYTE)~0)
|
||||
if (FragPtr->ShipInfo.crew_level != INFINITE_FLEET)
|
||||
BuiltShipPtr->special_counter = FragPtr->ShipInfo.crew_level;
|
||||
else /* if infinite ships */
|
||||
BuiltShipPtr->special_counter = FragPtr->ShipInfo.max_crew;
|
||||
BuiltShipPtr->RaceDescPtr =
|
||||
(RACE_DESCPTR)&FragPtr->ShipInfo;
|
||||
BuiltShipPtr->RaceDescPtr = (RACE_DESCPTR)&FragPtr->ShipInfo;
|
||||
|
||||
UnlockStarShip (
|
||||
&race_q[which_player],
|
||||
hBuiltShip
|
||||
);
|
||||
UnlockStarShip (&race_q[which_player], hBuiltShip);
|
||||
}
|
||||
|
||||
UnlockStarShip (pQueue, hStarShip);
|
||||
}
|
||||
|
||||
if (which_player == 0
|
||||
&& (hBuiltShip = Build (&race_q[0],
|
||||
SIS_RES_INDEX, GOOD_GUY, 0)))
|
||||
&& (hBuiltShip = Build (&race_q[0], SIS_RES_INDEX, GOOD_GUY, 0)))
|
||||
{
|
||||
BuiltShipPtr = LockStarShip (
|
||||
&race_q[0],
|
||||
hBuiltShip
|
||||
);
|
||||
BuiltShipPtr->captains_name_index =
|
||||
StarShipCaptain (BuiltShipPtr);
|
||||
BuiltShipPtr->cur_status_flags =
|
||||
StarShipPlayer (BuiltShipPtr);
|
||||
if (GLOBAL_SIS (CrewEnlisted) >= MAX_CREW_SIZE - 1)
|
||||
BuiltShipPtr->special_counter = MAX_CREW_SIZE;
|
||||
else
|
||||
BuiltShipPtr->special_counter = (BYTE)(
|
||||
GLOBAL_SIS (CrewEnlisted) + 1
|
||||
);
|
||||
BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip);
|
||||
BuiltShipPtr->captains_name_index = StarShipCaptain (BuiltShipPtr);
|
||||
BuiltShipPtr->cur_status_flags = StarShipPlayer (BuiltShipPtr);
|
||||
BuiltShipPtr->special_counter = 0;
|
||||
// Crew will be copied directly from
|
||||
// GLOBAL_SIS (CrewEnlisted) later.
|
||||
BuiltShipPtr->energy_counter = MAX_ENERGY_SIZE;
|
||||
UnlockStarShip (
|
||||
&race_q[0],
|
||||
hBuiltShip
|
||||
);
|
||||
UnlockStarShip (&race_q[0], hBuiltShip);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,15 +253,15 @@ InitEncounter (void)
|
||||
HSTARSHIP hStarShip, hNextShip;
|
||||
POINT display_pt[] =
|
||||
{
|
||||
{10, 51},
|
||||
{-10, 51},
|
||||
{33, 40},
|
||||
{-33, 40},
|
||||
{49, 18},
|
||||
{-49, 18},
|
||||
{52, -6},
|
||||
{-52, -6},
|
||||
{44, -27},
|
||||
{ 10, 51},
|
||||
{-10, 51},
|
||||
{ 33, 40},
|
||||
{-33, 40},
|
||||
{ 49, 18},
|
||||
{-49, 18},
|
||||
{ 52, -6},
|
||||
{-52, -6},
|
||||
{ 44, -27},
|
||||
{-44, -27},
|
||||
};
|
||||
|
||||
@@ -292,7 +272,8 @@ InitEncounter (void)
|
||||
STARSHIPPTR StarShipPtr;
|
||||
|
||||
StarShipPtr = LockStarShip (&race_q[1], hStarShip);
|
||||
if (StarShipPtr->RaceDescPtr->ship_info.crew_level != (BYTE)~0)
|
||||
if (StarShipPtr->RaceDescPtr->ship_info.crew_level !=
|
||||
INFINITE_FLEET)
|
||||
hNextShip = _GetSuccLink (StarShipPtr);
|
||||
else /* if infinite ships */
|
||||
hNextShip = hStarShip;
|
||||
@@ -311,8 +292,7 @@ InitEncounter (void)
|
||||
s.origin.y = SINE (angle, radius);
|
||||
}
|
||||
s.frame = SetAbsFrameIndex (
|
||||
StarShipPtr->RaceDescPtr->ship_info.icons, 0
|
||||
);
|
||||
StarShipPtr->RaceDescPtr->ship_info.icons, 0);
|
||||
GetFrameRect (s.frame, &r);
|
||||
s.origin.x += (SIS_SCREEN_WIDTH >> 1) - (r.extent.width >> 1);
|
||||
s.origin.y += (SIS_SCREEN_HEIGHT >> 1) - (r.extent.height >> 1);
|
||||
|
||||
@@ -167,7 +167,7 @@ InitSIS (void)
|
||||
ship_ref = MAKE_RESOURCE (rp++, rt, ri++);
|
||||
else if (i == num_ships - 2)
|
||||
ship_ref = YEHAT_SHIP_INDEX;
|
||||
else
|
||||
else /* (i == num_ships - 1) */
|
||||
ship_ref = PROBE_RES_INDEX;
|
||||
hStarShip = Build (&GLOBAL (avail_race_q), ship_ref, 0, 0);
|
||||
if (hStarShip)
|
||||
@@ -190,6 +190,7 @@ InitSIS (void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ur-Quan probe.
|
||||
load_ship ((STARSHIPPTR)FragPtr, FALSE);
|
||||
FragPtr->ShipInfo = FragPtr->RaceDescPtr->ship_info;
|
||||
FragPtr->RaceDescPtr->ship_info.melee_icon = 0;
|
||||
|
||||
@@ -210,6 +210,11 @@ START_GAME_STATE
|
||||
*/
|
||||
ADD_GAME_STATE (PLANETARY_LANDING, 1)
|
||||
ADD_GAME_STATE (PLANETARY_CHANGE, 1)
|
||||
/* Flag set to 1 when the planet information for the current
|
||||
* world is changed since it was last saved to the starinfo.dat
|
||||
* file. Set when picking up bio, mineral, or energy nodes.
|
||||
* When there's no current world, it should be 0.
|
||||
*/
|
||||
|
||||
/* Spathi states */
|
||||
ADD_GAME_STATE (SPATHI_VISITS, 3)
|
||||
@@ -741,6 +746,14 @@ START_GAME_STATE
|
||||
ADD_GAME_STATE (UMGAH_MENTIONED_TRICKS, 2)
|
||||
|
||||
ADD_GAME_STATE (BOMB_CARRIER, 1)
|
||||
/* 0 when the flagship is not in battle, or it doesn't have the
|
||||
* enhanced precursor bomb installed.
|
||||
* 1 when the flagship is in battle and the bomb is installed.
|
||||
* This determines whether you can flee (if the warp escape unit
|
||||
* is installed at all), and whether taking the ship into the
|
||||
* Sa-Matra defense structure will trigger the end of the game.
|
||||
*/
|
||||
|
||||
ADD_GAME_STATE (THRADD_MANNER, 1)
|
||||
ADD_GAME_STATE (THRADD_INTRO, 2)
|
||||
ADD_GAME_STATE (THRADD_DEMEANOR, 3)
|
||||
|
||||
@@ -227,8 +227,8 @@ FoundHome:
|
||||
{
|
||||
if (Index <= LONIBBLE (EncounterMakeup[BestIndex])
|
||||
|| (COUNT)TFB_Random () % 100 < 50)
|
||||
CloneShipFragment (BestIndex, &GLOBAL (npc_built_ship_q),
|
||||
0);
|
||||
CloneShipFragment (BestIndex,
|
||||
&GLOBAL (npc_built_ship_q), 0);
|
||||
}
|
||||
|
||||
PutGroupInfo (0L, ++which_group);
|
||||
@@ -261,16 +261,14 @@ FlushGroupInfo (GROUP_HEADER *pGH, DWORD offset, BYTE which_group, PVOID fp)
|
||||
for (hStarShip = GetHeadLink (&temp_q);
|
||||
hStarShip; hStarShip = hNextShip)
|
||||
{
|
||||
BYTE crew_level;
|
||||
COUNT crew_level;
|
||||
|
||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
&temp_q, hStarShip);
|
||||
hNextShip = _GetSuccLink (FragPtr);
|
||||
crew_level = FragPtr->ShipInfo.crew_level;
|
||||
which_group = GET_GROUP_ID (FragPtr);
|
||||
UnlockStarShip (
|
||||
&temp_q, hStarShip
|
||||
);
|
||||
UnlockStarShip (&temp_q, hStarShip);
|
||||
|
||||
if (crew_level == 0)
|
||||
{
|
||||
@@ -590,9 +588,7 @@ GetGroupInfo (DWORD offset, BYTE which_group)
|
||||
NAME_OFFSET + NUM_CAPTAINS_NAMES + 1;
|
||||
OwnStarShip (FragPtr, BAD_GUY, captains_name_index);
|
||||
}
|
||||
UnlockStarShip (
|
||||
&GLOBAL (npc_built_ship_q), hStarShip
|
||||
);
|
||||
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -631,6 +627,8 @@ PutGroupInfo (DWORD offset, BYTE which_group)
|
||||
GH.GroupOffset[0] = 0;
|
||||
SeekStateFile (fp, offset, SEEK_SET);
|
||||
WriteStateFile (&GH, sizeof (GH), 1, fp);
|
||||
// XXX: It seems that GH is not completely initialised.
|
||||
// Some garbage is saved. -- SvdB
|
||||
}
|
||||
|
||||
if (which_group)
|
||||
|
||||
@@ -251,10 +251,7 @@ check_hyperspace_encounter (void)
|
||||
}
|
||||
}
|
||||
|
||||
UnlockStarShip (
|
||||
&GLOBAL (avail_race_q),
|
||||
hStarShip
|
||||
);
|
||||
UnlockStarShip (&GLOBAL (avail_race_q), hStarShip);
|
||||
}
|
||||
|
||||
SET_GAME_STATE (USED_BROADCASTER, 0);
|
||||
@@ -952,8 +949,7 @@ AddEncounterElement (ENCOUNTERPTR EncounterPtr,
|
||||
|
||||
|
||||
EncounterPtr->SD.Index = MAKE_BYTE (
|
||||
NumShips, HINIBBLE (EncounterPtr->SD.Index)
|
||||
);
|
||||
NumShips, HINIBBLE (EncounterPtr->SD.Index));
|
||||
for (i = 0; i < NumShips; ++i)
|
||||
{
|
||||
HSTARSHIP hStarShip;
|
||||
|
||||
+22
-8
@@ -205,7 +205,19 @@ UninitShips (void)
|
||||
for (i = 0; i < NUM_PLAYERS; ++i)
|
||||
SPtr[i] = 0;
|
||||
|
||||
// Count the crew floating in space.
|
||||
crew_retrieved = 0;
|
||||
for (hElement = GetHeadElement ();
|
||||
hElement != 0; hElement = hNextElement)
|
||||
{
|
||||
ELEMENTPTR ElementPtr;
|
||||
LockElement (hElement, &ElementPtr);
|
||||
hNextElement = GetSuccElement (ElementPtr);
|
||||
if (ElementPtr->state_flags & CREW_OBJECT)
|
||||
++crew_retrieved;
|
||||
UnlockElement (hElement);
|
||||
}
|
||||
|
||||
for (hElement = GetHeadElement ();
|
||||
hElement != 0; hElement = hNextElement)
|
||||
{
|
||||
@@ -214,14 +226,20 @@ UninitShips (void)
|
||||
|
||||
LockElement (hElement, &ElementPtr);
|
||||
hNextElement = GetSuccElement (ElementPtr);
|
||||
if (ElementPtr->state_flags & CREW_OBJECT)
|
||||
++crew_retrieved;
|
||||
else if ((ElementPtr->state_flags & PLAYER_SHIP)
|
||||
if ((ElementPtr->state_flags & PLAYER_SHIP)
|
||||
|| ElementPtr->death_func == new_ship)
|
||||
{
|
||||
STARSHIPPTR StarShipPtr;
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
// There should only be one ship left in battle.
|
||||
// He gets the crew still floating in space.
|
||||
if (StarShipPtr->RaceDescPtr->ship_info.crew_level)
|
||||
StarShipPtr->RaceDescPtr->ship_info.crew_level +=
|
||||
crew_retrieved;
|
||||
if (StarShipPtr->RaceDescPtr->uninit_func != NULL)
|
||||
(*StarShipPtr->RaceDescPtr->uninit_func) (
|
||||
StarShipPtr->RaceDescPtr);
|
||||
StarShipPtr->ShipFacing =
|
||||
StarShipPtr->RaceDescPtr->ship_info.var2;
|
||||
StarShipPtr->special_counter =
|
||||
@@ -243,12 +261,7 @@ UninitShips (void)
|
||||
for (i = NUM_PLAYERS - 1; i >= 0; --i)
|
||||
{
|
||||
if (SPtr[i])
|
||||
{
|
||||
if (SPtr[i]->special_counter)
|
||||
SPtr[i]->special_counter += crew_retrieved;
|
||||
|
||||
GetEncounterStarShip (SPtr[i], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,3 +275,4 @@ UninitShips (void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ static VControl_NameBinding control_names[] = {
|
||||
{ "Exit", (int *)&ImmediateInputState.key[KEY_EXIT] },
|
||||
{ "Abort", (int *)&ImmediateInputState.key[KEY_ABORT] },
|
||||
{ "Debug", (int *)&ImmediateInputState.key[KEY_DEBUG] },
|
||||
{ "Illegal", NULL}};
|
||||
{ "Illegal", NULL}};
|
||||
|
||||
|
||||
static void
|
||||
|
||||
+40
-3
@@ -74,6 +74,13 @@ LoadShipQueue (DECODE_REF fh, PQUEUE pQueue, BOOLEAN MakeQ)
|
||||
Ptr = ((PBYTE)&FragPtr->ShipInfo) - Offset;
|
||||
cread ((PBYTE)Ptr,
|
||||
((PBYTE)&FragPtr->ShipInfo.race_strings) - Ptr, 1, fh);
|
||||
|
||||
// Hack to retain savegame backwards compatibility, after
|
||||
// increasing crew_level and max_crew from BYTE to COUNT.
|
||||
// For the queues that are saved here, a BYTE is large enough.
|
||||
FragPtr->ShipInfo.max_crew = FragPtr->ShipInfo.dummy_max_crew;
|
||||
FragPtr->ShipInfo.crew_level = FragPtr->ShipInfo.dummy_crew_level;
|
||||
|
||||
if (Offset == 0)
|
||||
{
|
||||
EXTENDED_SHIP_FRAGMENTPTR ExtFragPtr;
|
||||
@@ -87,6 +94,36 @@ LoadShipQueue (DECODE_REF fh, PQUEUE pQueue, BOOLEAN MakeQ)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
LoadEncounter (ENCOUNTERPTR EncounterPtr, DECODE_REF fh)
|
||||
{
|
||||
COUNT i;
|
||||
#define LOAD_BLOCK(file, start, end) \
|
||||
cread((PBYTE) (start), (PBYTE) (end) - (PBYTE) start, \
|
||||
1, (file))
|
||||
// An ENCOUNTER structure (indirectly) contains an array of
|
||||
// SHIP_INFO structure, which is bigger now because of the
|
||||
// larger type for crew.
|
||||
// This hack makes sure the savegames format is unchanged.
|
||||
// The original code consisted of just one line:
|
||||
// cread ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
|
||||
// Load the stuff before the SHIP_INFO array:
|
||||
LOAD_BLOCK(fh, EncounterPtr, EncounterPtr->SD.ShipList);
|
||||
|
||||
// Load each entry in the SHIP_INFO array:
|
||||
for (i = 0; i < MAX_HYPER_SHIPS; i++)
|
||||
{
|
||||
SHIP_INFO *ShipInfo = &EncounterPtr->SD.ShipList[i];
|
||||
LOAD_BLOCK(fh, ShipInfo, &ShipInfo->crew_level);
|
||||
ShipInfo->crew_level = ShipInfo->dummy_crew_level;
|
||||
ShipInfo->max_crew = ShipInfo->dummy_max_crew;
|
||||
}
|
||||
|
||||
// Load the stuff after the SHIP_INFO array:
|
||||
LOAD_BLOCK(fh, &EncounterPtr->log_x, &EncounterPtr[1]);
|
||||
}
|
||||
|
||||
static BOOLEAN
|
||||
LoadSummary (uio_Stream *in_fp)
|
||||
{
|
||||
@@ -211,7 +248,8 @@ LoadGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
||||
hEncounter = AllocEncounter ();
|
||||
LockEncounter (hEncounter, &EncounterPtr);
|
||||
|
||||
cread ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
//cread ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
LoadEncounter(EncounterPtr, fh);
|
||||
EncounterPtr->hElement = 0;
|
||||
NumShips = LONIBBLE (EncounterPtr->SD.Index);
|
||||
for (i = 0; i < NumShips; ++i)
|
||||
@@ -223,8 +261,7 @@ LoadGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
||||
&GLOBAL (avail_race_q),
|
||||
EncounterPtr->SD.ShipList[i].var1);
|
||||
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
&GLOBAL (avail_race_q), hStarShip
|
||||
);
|
||||
&GLOBAL (avail_race_q), hStarShip);
|
||||
EncounterPtr->SD.ShipList[i].race_strings =
|
||||
TemplatePtr->ShipInfo.race_strings;
|
||||
EncounterPtr->SD.ShipList[i].icons =
|
||||
|
||||
+18
-13
@@ -110,7 +110,8 @@ DoGetMelee (GETMELEE_STATE *gms)
|
||||
|
||||
if (select)
|
||||
{
|
||||
if (gms->hBattleShip || (gms->col == NUM_MELEE_COLS_ORIG && ConfirmExit ()))
|
||||
if (gms->hBattleShip ||
|
||||
(gms->col == NUM_MELEE_COLS_ORIG && ConfirmExit ()))
|
||||
{
|
||||
GLOBAL (CurrentActivity) &= ~CHECK_ABORT;
|
||||
return FALSE;
|
||||
@@ -171,14 +172,17 @@ ChangeSelection:
|
||||
for (gms->hBattleShip = GetHeadLink (&race_q[which_player]);
|
||||
gms->hBattleShip != 0; gms->hBattleShip = hNextShip)
|
||||
{
|
||||
STARSHIPPTR StarShipPtr = LockStarShip (&race_q[which_player], gms->hBattleShip);
|
||||
STARSHIPPTR StarShipPtr = LockStarShip (
|
||||
&race_q[which_player], gms->hBattleShip);
|
||||
if (StarShipPtr->RaceResIndex && ship_index-- == 0)
|
||||
{
|
||||
UnlockStarShip (&race_q[which_player], gms->hBattleShip);
|
||||
UnlockStarShip (&race_q[which_player],
|
||||
gms->hBattleShip);
|
||||
break;
|
||||
}
|
||||
hNextShip = _GetSuccLink (StarShipPtr);
|
||||
UnlockStarShip (&race_q[which_player], gms->hBattleShip);
|
||||
UnlockStarShip (&race_q[which_player],
|
||||
gms->hBattleShip);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -188,7 +192,8 @@ ChangeSelection:
|
||||
for (gms->hBattleShip = GetHeadLink (&race_q[which_player]);
|
||||
gms->hBattleShip != 0; gms->hBattleShip = hNextShip)
|
||||
{
|
||||
STARSHIPPTR StarShipPtr = LockStarShip (&race_q[which_player], gms->hBattleShip);
|
||||
STARSHIPPTR StarShipPtr = LockStarShip (
|
||||
&race_q[which_player], gms->hBattleShip);
|
||||
if (StarShipPtr->ShipFacing == ship_index)
|
||||
{
|
||||
hNextShip = gms->hBattleShip;
|
||||
@@ -272,16 +277,15 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
t.pStr = buf;
|
||||
t.CharCount = (COUNT)~0;
|
||||
SetContextFont (TinyFont);
|
||||
SetContextForeGroundColor (BUILD_COLOR (
|
||||
MAKE_RGB15 (0x13, 0x00, 0x00), 0x2C));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x13, 0x00, 0x00), 0x2C));
|
||||
font_DrawText (&t);
|
||||
}
|
||||
|
||||
SetContext (SpaceContext);
|
||||
|
||||
s.origin.x = PICK_X_OFFS - 3;
|
||||
s.origin.y = PICK_Y_OFFS - 9
|
||||
+ ((1 - which_player) * PICK_SIDE_OFFS);
|
||||
s.origin.y = PICK_Y_OFFS - 9 + ((1 - which_player) * PICK_SIDE_OFFS);
|
||||
|
||||
DrawStamp (&s);
|
||||
|
||||
@@ -299,11 +303,13 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
SetContext (OldContext);
|
||||
UnlockMutex (GraphicsLock);
|
||||
|
||||
PressState = PulsedInputState.key[KEY_MENU_SELECT] || PulsedInputState.key[KEY_MENU_CANCEL];
|
||||
PressState = PulsedInputState.key[KEY_MENU_SELECT] ||
|
||||
PulsedInputState.key[KEY_MENU_CANCEL];
|
||||
do
|
||||
{
|
||||
UpdateInputState ();
|
||||
ButtonState = PulsedInputState.key[KEY_MENU_SELECT] || PulsedInputState.key[KEY_MENU_CANCEL];
|
||||
ButtonState = PulsedInputState.key[KEY_MENU_SELECT] ||
|
||||
PulsedInputState.key[KEY_MENU_CANCEL];
|
||||
if (PressState)
|
||||
{
|
||||
PressState = ButtonState;
|
||||
@@ -323,8 +329,7 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
BYTE fade_buf[] = {FadeAllToColor};
|
||||
|
||||
SleepThreadUntil (XFormColorMap
|
||||
((COLORMAPPTR) fade_buf, ONE_SECOND / 2)
|
||||
+ ONE_SECOND / 60);
|
||||
((COLORMAPPTR) fade_buf, ONE_SECOND / 2) + ONE_SECOND / 60);
|
||||
FlushColorXForms ();
|
||||
}
|
||||
|
||||
|
||||
+19
-18
@@ -197,8 +197,7 @@ ChangeSelection:
|
||||
|
||||
locString = SetAbsStringTableIndex (
|
||||
StarShipPtr->RaceDescPtr->ship_info.race_strings,
|
||||
StarShipPtr->captains_name_index
|
||||
);
|
||||
StarShipPtr->captains_name_index);
|
||||
t.pStr = (UNICODE *)GetStringAddress (locString);
|
||||
t.CharCount = GetStringLength (locString);
|
||||
crew_level = StarShipPtr->RaceDescPtr->ship_info.crew_level;
|
||||
@@ -206,7 +205,8 @@ ChangeSelection:
|
||||
}
|
||||
UnlockStarShip (&race_q[0], hBattleShip);
|
||||
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x14, 0x0A, 0x00), 0x0C));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x14, 0x0A, 0x00), 0x0C));
|
||||
font_DrawText (&t);
|
||||
SetContextForeGroundColor (BLACK_COLOR);
|
||||
}
|
||||
@@ -227,7 +227,8 @@ ChangeSelection:
|
||||
sprintf (buf, "%u", crew_level);
|
||||
else
|
||||
sprintf (buf, "%u/%u", crew_level, max_crew);
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
||||
font_DrawText (&t);
|
||||
}
|
||||
|
||||
@@ -324,10 +325,12 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
{
|
||||
hStarShip = GetHeadLink (&GLOBAL (npc_built_ship_q));
|
||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
&GLOBAL (npc_built_ship_q), hStarShip
|
||||
);
|
||||
if (FragPtr->ShipInfo.crew_level == (BYTE)~0)
|
||||
&GLOBAL (npc_built_ship_q), hStarShip);
|
||||
if (FragPtr->ShipInfo.crew_level == INFINITE_FLEET)
|
||||
{
|
||||
// Infinite number of ships.
|
||||
battle_counter += MAKE_WORD (0, 1);
|
||||
}
|
||||
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||
}
|
||||
}
|
||||
@@ -354,7 +357,7 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (pQueue, hStarShip);
|
||||
if (SPtr == LastStarShipPtr)
|
||||
{
|
||||
if (FragPtr->ShipInfo.crew_level != (BYTE)~0)
|
||||
if (FragPtr->ShipInfo.crew_level != INFINITE_FLEET)
|
||||
{
|
||||
FragPtr->ShipInfo.crew_level = SPtr->special_counter;
|
||||
SPtr->RaceDescPtr = (RACE_DESCPTR)&FragPtr->ShipInfo;
|
||||
@@ -391,8 +394,7 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
||||
#ifndef TESTING
|
||||
else if (GLOBAL_SIS (FuelOnBoard) >
|
||||
RUN_AWAY_FUEL_COST)
|
||||
GLOBAL_SIS (FuelOnBoard) -=
|
||||
RUN_AWAY_FUEL_COST;
|
||||
GLOBAL_SIS (FuelOnBoard) -= RUN_AWAY_FUEL_COST;
|
||||
else
|
||||
GLOBAL_SIS (FuelOnBoard) = 0;
|
||||
#endif /* TESTING */
|
||||
@@ -430,9 +432,7 @@ DrawArmadaPickShip (BOOLEAN draw_salvage_frame, PRECT pPickRect)
|
||||
hLastIndex = SetResourceIndex (hResIndex);
|
||||
OldContext = SetContext (SpaceContext);
|
||||
|
||||
PickFrame = CaptureDrawable (
|
||||
LoadGraphic (SC2_PICK_PMAP_ANIM)
|
||||
);
|
||||
PickFrame = CaptureDrawable (LoadGraphic (SC2_PICK_PMAP_ANIM));
|
||||
|
||||
BatchGraphics ();
|
||||
|
||||
@@ -469,7 +469,8 @@ DrawArmadaPickShip (BOOLEAN draw_salvage_frame, PRECT pPickRect)
|
||||
t.align = ALIGN_CENTER;
|
||||
t.pStr = GLOBAL_SIS (ShipName);
|
||||
t.CharCount = (COUNT)~0;
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
||||
SetContextFont (StarConFont);
|
||||
font_DrawText (&t);
|
||||
|
||||
@@ -485,8 +486,7 @@ SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
||||
COUNT ship_index;
|
||||
|
||||
ship_index = (COUNT)LONIBBLE (
|
||||
StarShipPtr->RaceDescPtr->ship_info.var2
|
||||
);
|
||||
StarShipPtr->RaceDescPtr->ship_info.var2);
|
||||
|
||||
s.origin.x = pick_r.corner.x
|
||||
+ (5 + ((ICON_WIDTH + 4)
|
||||
@@ -515,8 +515,9 @@ SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Ship ran away */
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01));
|
||||
/* Ship ran away */
|
||||
SetContextForeGroundColor (BUILD_COLOR (
|
||||
MAKE_RGB15 (0x00, 0x00, 0x14), 0x01));
|
||||
DrawFilledStamp (&s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ GenerateChmmr (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (ILWRATH_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6);
|
||||
|
||||
@@ -118,7 +118,7 @@ GenerateDruuge (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (DRUUGE_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -91,7 +91,7 @@ GenerateIlwrath (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (ILWRATH_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -140,7 +140,8 @@ GenerateMycon (BYTE control)
|
||||
if (CurStarDescPtr->Index == MYCON_DEFINED
|
||||
|| !GET_GAME_STATE (MYCON_FELL_FOR_AMBUSH))
|
||||
CloneShipFragment (MYCON_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q),
|
||||
INFINITE_FLEET);
|
||||
else
|
||||
{
|
||||
COUNT i;
|
||||
|
||||
@@ -308,7 +308,7 @@ GenerateOrz (BYTE control)
|
||||
if (CurStarDescPtr->Index == ORZ_DEFINED)
|
||||
{
|
||||
CloneShipFragment (ORZ_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -183,7 +183,7 @@ GenerateTalkingPet (BYTE control)
|
||||
if (!GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES))
|
||||
{
|
||||
CloneShipFragment (UMGAH_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
InitCommunication (UMGAH_CONVERSATION);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -110,7 +110,7 @@ GeneratePkunk (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (PKUNK_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -252,7 +252,7 @@ GenerateSamatra (BYTE control)
|
||||
if (!GET_GAME_STATE (URQUAN_MESSED_UP))
|
||||
CloneShipFragment (!GET_GAME_STATE (KOHR_AH_FRENZY) ?
|
||||
URQUAN_SHIP : BLACK_URQUAN_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
else
|
||||
{
|
||||
#define URQUAN_REMNANTS 3
|
||||
|
||||
@@ -42,9 +42,7 @@ check_old_shofixti (void)
|
||||
FLEE | IGNORE_FLAGSHIP | (task & REFORM_GROUP));
|
||||
SET_GROUP_DEST (FragPtr, 0);
|
||||
|
||||
UnlockStarShip (
|
||||
&GLOBAL (npc_built_ship_q), hStarShip
|
||||
);
|
||||
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,9 +67,7 @@ GenerateShofixti (BYTE control)
|
||||
MAKE_WORD (b0, b1), MAKE_WORD (b2, b3)
|
||||
);
|
||||
if (GLOBAL (BattleGroupRef) == 0
|
||||
|| !GetGroupInfo (
|
||||
GLOBAL (BattleGroupRef), (BYTE)~0
|
||||
))
|
||||
|| !GetGroupInfo (GLOBAL (BattleGroupRef), (BYTE)~0))
|
||||
{
|
||||
if (GLOBAL (BattleGroupRef) == 0)
|
||||
GLOBAL (BattleGroupRef) = ~0L;
|
||||
@@ -80,8 +76,7 @@ GenerateShofixti (BYTE control)
|
||||
&GLOBAL (npc_built_ship_q), 1);
|
||||
|
||||
GLOBAL (BattleGroupRef) = PutGroupInfo (
|
||||
GLOBAL (BattleGroupRef), 1
|
||||
);
|
||||
GLOBAL (BattleGroupRef), 1);
|
||||
b0 = LOBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
||||
b1 = HIBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
||||
b2 = LOBYTE (HIWORD (GLOBAL (BattleGroupRef)));
|
||||
|
||||
@@ -163,7 +163,7 @@ GenerateSpathi (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (SPATHI_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||
|
||||
@@ -108,7 +108,7 @@ GenerateSupox (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (SUPOX_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -149,7 +149,7 @@ GenerateThradd (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (THRADDASH_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -150,7 +150,7 @@ GenerateUtwig (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (UTWIG_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -163,7 +163,7 @@ GenerateVUX (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (VUX_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
if (CurStarDescPtr->Index == VUX_DEFINED)
|
||||
{
|
||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||
|
||||
@@ -92,7 +92,7 @@ GenerateYehat (BYTE control)
|
||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||
|
||||
CloneShipFragment (YEHAT_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
@@ -51,9 +51,7 @@ check_scout (void)
|
||||
SET_GROUP_DEST (FragPtr, 0);
|
||||
}
|
||||
|
||||
UnlockStarShip (
|
||||
&GLOBAL (npc_built_ship_q), hStarShip
|
||||
);
|
||||
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,7 +199,7 @@ GenerateZoqFotPik (BYTE control)
|
||||
}
|
||||
|
||||
CloneShipFragment (ZOQFOTPIK_SHIP,
|
||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
||||
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||
|
||||
pSolarSysState->MenuState.Initialized += 2;
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
|
||||
+14
-13
@@ -144,8 +144,8 @@ PreProcess (ELEMENTPTR ElementPtr)
|
||||
{
|
||||
(*ElementPtr->preprocess_func) (ElementPtr);
|
||||
|
||||
if (((state_flags = ElementPtr->state_flags) & CHANGING)
|
||||
&& CollidingElement (ElementPtr))
|
||||
state_flags = ElementPtr->state_flags;
|
||||
if ((state_flags & CHANGING) && CollidingElement (ElementPtr))
|
||||
InitIntersectFrame (ElementPtr);
|
||||
}
|
||||
|
||||
@@ -170,8 +170,7 @@ PreProcess (ELEMENTPTR ElementPtr)
|
||||
--ElementPtr->life_span;
|
||||
}
|
||||
|
||||
ElementPtr->state_flags = (state_flags
|
||||
& ~(POST_PROCESS | COLLISION))
|
||||
ElementPtr->state_flags = (state_flags & ~(POST_PROCESS | COLLISION))
|
||||
| PRE_PROCESS;
|
||||
}
|
||||
|
||||
@@ -845,7 +844,8 @@ PostProcessQueue (VIEW_STATE view_state, SIZE scroll_x,
|
||||
ProcessCollisions (GetHeadElement (), PostElementPtr,
|
||||
MAX_TIME_VALUE, PRE_PROCESS | POST_PROCESS);
|
||||
UnlockElement (hPostElement);
|
||||
} while ((hPostElement = hNextElement) != 0);
|
||||
hPostElement = hNextElement;
|
||||
} while (hPostElement != 0);
|
||||
|
||||
scroll_x = 0;
|
||||
scroll_y = 0;
|
||||
@@ -920,20 +920,20 @@ PostProcessQueue (VIEW_STATE view_state, SIZE scroll_x,
|
||||
ElementPtr->next.image.frame =
|
||||
#ifdef SAFE
|
||||
SetAbsFrameIndex (
|
||||
ElementPtr->next.image.farray
|
||||
[index],
|
||||
ElementPtr->next.image.farray[index],
|
||||
GetFrameIndex (ElementPtr->next.image.frame));
|
||||
#else /* SAFE */
|
||||
SetEquFrameIndex (
|
||||
ElementPtr->next.image.farray
|
||||
[index],
|
||||
ElementPtr->next.image.farray[index],
|
||||
ElementPtr->next.image.frame);
|
||||
#endif /* SAFE */
|
||||
|
||||
if (optMeleeScale == TFB_SCALE_TRILINEAR && index < 2 && scale != 256)
|
||||
if (optMeleeScale == TFB_SCALE_TRILINEAR &&
|
||||
index < 2 && scale != 256)
|
||||
{
|
||||
// enqueues drawcommand to assign next (smaller) zoom
|
||||
// level image as mipmap, needed for trilinear scaling
|
||||
// enqueues drawcommand to assign next
|
||||
// (smaller) zoom level image as mipmap,
|
||||
// needed for trilinear scaling
|
||||
|
||||
PFRAME_DESC frame =
|
||||
SetAbsFrameIndex (
|
||||
@@ -1027,7 +1027,8 @@ RedrawQueue (BOOLEAN clear)
|
||||
{
|
||||
BYTE skip_frames;
|
||||
|
||||
if ((skip_frames = HIBYTE (nth_frame)) != (BYTE)~0
|
||||
skip_frames = HIBYTE (nth_frame);
|
||||
if (skip_frames != (BYTE)~0
|
||||
&& (skip_frames == 0 || (--nth_frame & 0x00FF) == 0))
|
||||
{
|
||||
nth_frame += skip_frames;
|
||||
|
||||
+42
-8
@@ -57,9 +57,9 @@
|
||||
#define FIRES_LEFT (1 << 10)
|
||||
#define SHIELD_DEFENSE (1 << 11)
|
||||
#define DONT_CHASE (1 << 12)
|
||||
#define PLAYER_CAPTAIN (1 << 13)
|
||||
/* The protagonist himself is on board. He gets a different color. */
|
||||
|
||||
#define MAX_SHAPES_ACTIVE 2
|
||||
/* SHIP_SHAPE_ACTIVE && SPECIAL_SHAPE_ACTIVE */
|
||||
|
||||
typedef struct captain_stuff
|
||||
{
|
||||
@@ -101,12 +101,24 @@ typedef struct
|
||||
{
|
||||
UWORD ship_flags;
|
||||
BYTE var1, var2;
|
||||
BYTE crew_level, max_crew;
|
||||
BYTE dummy_crew_level, dummy_max_crew;
|
||||
/* Necessary for savegame backwards compatibility.
|
||||
* Unused during the game, only used during save/load.
|
||||
*/
|
||||
BYTE energy_level, max_energy;
|
||||
POINT loc;
|
||||
|
||||
/* The fields above this line are included in queues in savegames,
|
||||
* All fields, including those below, are saved in ENCOUNTER structures
|
||||
* in savegames. The latter was probably not supposed to happen.
|
||||
*/
|
||||
|
||||
STRING race_strings;
|
||||
FRAME icons, melee_icon;
|
||||
COUNT crew_level, max_crew;
|
||||
/* For ships in npc_built_ship_q, the value INFINITE_FLEET for
|
||||
* crew_level indicates an infinite number of ships. */
|
||||
#define INFINITE_FLEET ((COUNT) ~0)
|
||||
} SHIP_INFO;
|
||||
typedef SHIP_INFO *PSHIP_INFO;
|
||||
#define SHIP_INFOPTR PSHIP_INFO
|
||||
@@ -152,13 +164,22 @@ typedef struct
|
||||
BYTE days_left;
|
||||
/* Days left before the fleet reachers 'dest_loc'. */
|
||||
BYTE growth_fract;
|
||||
BYTE crew_level, max_crew;
|
||||
BYTE dummy_crew_level, dummy_max_crew;
|
||||
/* Necessary for savegame backwards compatibility.
|
||||
* Unused during the game, only used during save/load.
|
||||
*/
|
||||
BYTE energy_level, max_energy;
|
||||
POINT loc;
|
||||
/* Location of the fleet (center) */
|
||||
|
||||
STRING race_strings;
|
||||
/* Race specific strings, see doc/devel/racestrings. */
|
||||
FRAME icons, melee_icon;
|
||||
COUNT crew_level, max_crew;
|
||||
/* For ships in npc_built_ship_q, the value INFINITE_FLEET for
|
||||
* crew_level indicates an infinite number of ships. */
|
||||
|
||||
/* -== The fields below this line are included in savegames. ==- */
|
||||
|
||||
COUNT actual_strength;
|
||||
/* Measure for the size of the sphere of influence.
|
||||
@@ -195,17 +216,25 @@ typedef struct
|
||||
typedef DATA_STUFF *PDATA_STUFF;
|
||||
#define DATA_STUFFPTR PDATA_STUFF
|
||||
|
||||
|
||||
typedef struct race_desc RACE_DESC;
|
||||
typedef RACE_DESC *PRACE_DESC;
|
||||
#define RACE_DESCPTR PRACE_DESC
|
||||
|
||||
typedef void (PREPROCESS_FUNC) (PELEMENT ElementPtr);
|
||||
typedef void (POSTPROCESS_FUNC) (PELEMENT ElementPtr);
|
||||
typedef COUNT (INIT_WEAPON_FUNC) (PELEMENT ElementPtr, HELEMENT Weapon[]);
|
||||
typedef void (UNINIT_FUNC) (RACE_DESCPTR pRaceDesc);
|
||||
|
||||
typedef struct race_desc
|
||||
struct race_desc
|
||||
{
|
||||
SHIP_INFO ship_info _ALIGNED_ANY;
|
||||
CHARACTERISTIC_STUFF characteristics _ALIGNED_ANY;
|
||||
DATA_STUFF ship_data _ALIGNED_ANY;
|
||||
INTEL_STUFF cyborg_control _ALIGNED_ANY;
|
||||
|
||||
UNINIT_FUNC *uninit_func
|
||||
_ALIGNED_ON(sizeof (UNINIT_FUNC *));
|
||||
PREPROCESS_FUNC *preprocess_func
|
||||
_ALIGNED_ON(sizeof (PREPROCESS_FUNC *));
|
||||
POSTPROCESS_FUNC *postprocess_func
|
||||
@@ -214,9 +243,8 @@ typedef struct race_desc
|
||||
_ALIGNED_ON(sizeof (INIT_WEAPON_FUNC *));
|
||||
|
||||
PVOID CodeRef _ALIGNED_ON(sizeof (PVOID));
|
||||
} RACE_DESC;
|
||||
typedef RACE_DESC *PRACE_DESC;
|
||||
#define RACE_DESCPTR PRACE_DESC
|
||||
};
|
||||
|
||||
|
||||
typedef QUEUE_HANDLE HSTARSHIP;
|
||||
|
||||
@@ -251,6 +279,12 @@ typedef struct
|
||||
|
||||
DWORD RaceResIndex;
|
||||
RACE_DESCPTR RaceDescPtr;
|
||||
/* This field is abused to store other data when the ship
|
||||
* is in GLOBAL(built_ship_q), GLOBDATA(npc_built_ship_q),
|
||||
* or race_q[], namely the side this ship is on (accessed
|
||||
* through StarShipPlayer()), and the captains name for
|
||||
* the ship (accessed through StarShipCaptain()).
|
||||
* These values are set using OwnStarShip(). */
|
||||
SHIP_INFO ShipInfo;
|
||||
} SHIP_FRAGMENT;
|
||||
typedef SHIP_FRAGMENT *PSHIP_FRAGMENT;
|
||||
|
||||
+56
-1
@@ -72,6 +72,12 @@ SaveShipQueue (DECODE_REF fh, PQUEUE pQueue)
|
||||
// See races.h; look for the enum containing NUM_AVAILABLE_RACES.
|
||||
cwrite ((PBYTE)&Index, sizeof (Index), 1, fh);
|
||||
|
||||
// Hack to retain savegame backwards compatibility, after
|
||||
// increasing crew_level and max_crew from BYTE to COUNT.
|
||||
// For the queues that are saved here, a BYTE is large enough.
|
||||
FragPtr->ShipInfo.dummy_max_crew = FragPtr->ShipInfo.max_crew;
|
||||
FragPtr->ShipInfo.dummy_crew_level = FragPtr->ShipInfo.crew_level;
|
||||
|
||||
// Write part of FragPtr, starting with FragPtr->ShipInfo for
|
||||
// GLOBAL(avail_race_q), and FragPtr->RaceDescPtr for other queues.
|
||||
// When FragPtr->RaceDescPtr is saved, it does not actually
|
||||
@@ -104,6 +110,36 @@ SaveShipQueue (DECODE_REF fh, PQUEUE pQueue)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
SaveEncounter (ENCOUNTERPTR EncounterPtr, DECODE_REF fh)
|
||||
{
|
||||
COUNT i;
|
||||
#define SAVE_BLOCK(file, start, end) \
|
||||
cwrite((PBYTE) (start), (PBYTE) (end) - (PBYTE) start, \
|
||||
1, (file))
|
||||
// An ENCOUNTER structure (indirectly) contains an array of
|
||||
// SHIP_INFO structure, which is bigger now because of the
|
||||
// larger type for crew.
|
||||
// This hack makes sure the savegames format is unchanged.
|
||||
// The original code consisted of jsut one line:
|
||||
// cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
|
||||
// Save the stuff before the SHIP_INFO array:
|
||||
SAVE_BLOCK(fh, EncounterPtr, EncounterPtr->SD.ShipList);
|
||||
|
||||
// Save each entry in the SHIP_INFO array:
|
||||
for (i = 0; i < MAX_HYPER_SHIPS; i++)
|
||||
{
|
||||
SHIP_INFO *ShipInfo = &EncounterPtr->SD.ShipList[i];
|
||||
ShipInfo->dummy_crew_level = (BYTE) ShipInfo->crew_level;
|
||||
ShipInfo->dummy_max_crew = (BYTE) ShipInfo->max_crew;
|
||||
SAVE_BLOCK(fh, ShipInfo, &ShipInfo->crew_level);
|
||||
}
|
||||
|
||||
// Save the stuff after the SHIP_INFO array:
|
||||
SAVE_BLOCK(fh, &EncounterPtr->log_x, &EncounterPtr[1]);
|
||||
}
|
||||
|
||||
static void
|
||||
PrepareSummary (SUMMARY_DESC *summary_desc)
|
||||
{
|
||||
@@ -259,6 +295,8 @@ SaveProblem (void)
|
||||
return;
|
||||
}
|
||||
|
||||
// This function first writes to a memory file, and then writes the whole
|
||||
// lot to the actual save file at once.
|
||||
BOOLEAN
|
||||
SaveGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
||||
{
|
||||
@@ -320,7 +358,8 @@ RetrySave:
|
||||
& (START_ENCOUNTER | START_INTERPLANETARY)))
|
||||
PutGroupInfo (0L, (BYTE)~0);
|
||||
|
||||
cwrite ((PBYTE)&GlobData.Game_state, sizeof (GlobData.Game_state), 1, fh);
|
||||
cwrite ((PBYTE)&GlobData.Game_state, sizeof (GlobData.Game_state),
|
||||
1, fh);
|
||||
|
||||
GLOBAL (ip_location) = pt;
|
||||
GLOBAL (ShipStamp.frame) = frame;
|
||||
@@ -330,8 +369,10 @@ RetrySave:
|
||||
SaveShipQueue (fh, &GLOBAL (npc_built_ship_q));
|
||||
SaveShipQueue (fh, &GLOBAL (built_ship_q));
|
||||
|
||||
// Save the number of game events (compressed).
|
||||
num_links = CountLinks (&GLOBAL (GameClock.event_q));
|
||||
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
||||
// Save the game events themselves (compressed):
|
||||
{
|
||||
HEVENT hEvent;
|
||||
|
||||
@@ -351,7 +392,9 @@ RetrySave:
|
||||
}
|
||||
}
|
||||
|
||||
// Save the number of encounters (black globes in HS/QS (compressed))
|
||||
num_links = CountLinks (&GLOBAL (encounter_q));
|
||||
// Save the encounters themselves (compressed):
|
||||
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
||||
{
|
||||
HENCOUNTER hEncounter;
|
||||
@@ -365,6 +408,8 @@ RetrySave:
|
||||
LockEncounter (hEncounter, &EncounterPtr);
|
||||
hNextEncounter = GetSuccEncounter (EncounterPtr);
|
||||
|
||||
//cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
SaveEncounter(EncounterPtr, fh);
|
||||
cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||
|
||||
UnlockEncounter (hEncounter);
|
||||
@@ -372,10 +417,12 @@ RetrySave:
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the star info file to the memory file (compressed).
|
||||
fp = OpenStateFile (STARINFO_FILE, "rb");
|
||||
if (fp)
|
||||
{
|
||||
flen = LengthStateFile (fp);
|
||||
// (DWORD) Write the uncompressed size.
|
||||
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
||||
while (flen)
|
||||
{
|
||||
@@ -390,10 +437,12 @@ RetrySave:
|
||||
CloseStateFile (fp);
|
||||
}
|
||||
|
||||
// Copy the ? groupinfo file into the memory file (compressed).
|
||||
fp = OpenStateFile (DEFGRPINFO_FILE, "rb");
|
||||
if (fp)
|
||||
{
|
||||
flen = LengthStateFile (fp);
|
||||
// (DWORD) Write the uncompressed size.
|
||||
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
||||
while (flen)
|
||||
{
|
||||
@@ -408,6 +457,7 @@ RetrySave:
|
||||
CloseStateFile (fp);
|
||||
}
|
||||
|
||||
// Copy the ? groupinfo file into the memory file (compressed).
|
||||
fp = OpenStateFile (RANDGRPINFO_FILE, "rb");
|
||||
if (fp)
|
||||
{
|
||||
@@ -426,18 +476,23 @@ RetrySave:
|
||||
CloseStateFile (fp);
|
||||
}
|
||||
|
||||
// Write the current star desc into the memory file (compressed).
|
||||
cwrite ((PBYTE)&SD, sizeof (SD), 1, fh);
|
||||
|
||||
flen = cclose (fh);
|
||||
|
||||
// Write the memory file to the actual savegame file.
|
||||
sprintf (file, "starcon2.%02u", which_game);
|
||||
// fprintf (stderr, "'%s' is %lu bytes long\n", file, flen + sizeof (*summary_desc));
|
||||
if (flen && (out_fp = (PVOID)res_OpenResFile (saveDir, file, "wb")))
|
||||
{
|
||||
PrepareSummary (summary_desc);
|
||||
|
||||
// First write the summary.
|
||||
success = (BOOLEAN)(WriteResFile (
|
||||
summary_desc, sizeof (*summary_desc), 1, out_fp) != 0);
|
||||
|
||||
// Then write the rest of the data.
|
||||
if (success && WriteResFile (mem_lock (h), (COUNT)flen, 1,
|
||||
out_fp) == 0)
|
||||
success = FALSE;
|
||||
|
||||
+29
-21
@@ -156,8 +156,7 @@ ship_preprocess (PELEMENT ElementPtr)
|
||||
& (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
|
||||
else
|
||||
{
|
||||
ElementPtr->crew_level =
|
||||
(BYTE)RDPtr->ship_info.crew_level;
|
||||
ElementPtr->crew_level = RDPtr->ship_info.crew_level;
|
||||
|
||||
if ((ElementPtr->state_flags & BAD_GUY)
|
||||
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||
@@ -352,20 +351,19 @@ ship_postprocess (PELEMENT ElementPtr)
|
||||
}
|
||||
|
||||
void
|
||||
collision (PELEMENT
|
||||
ElementPtr0, PPOINT
|
||||
pPt0, PELEMENT
|
||||
ElementPtr1, PPOINT
|
||||
pPt1)
|
||||
collision (PELEMENT ElementPtr0, PPOINT pPt0,
|
||||
PELEMENT ElementPtr1, PPOINT pPt1)
|
||||
{
|
||||
if (!(ElementPtr1->state_flags & FINITE_LIFE))
|
||||
{
|
||||
ElementPtr0->state_flags |= COLLISION;
|
||||
if (GRAVITY_MASS (ElementPtr1->mass_points))
|
||||
{
|
||||
// Collision with a planet.
|
||||
SIZE damage;
|
||||
|
||||
if ((damage = ElementPtr0->hit_points >> 2) == 0)
|
||||
damage = ElementPtr0->hit_points >> 2;
|
||||
if (damage == 0)
|
||||
damage = 1;
|
||||
do_damage ((ELEMENTPTR)ElementPtr0, damage);
|
||||
|
||||
@@ -380,8 +378,7 @@ collision (PELEMENT
|
||||
}
|
||||
|
||||
static BOOLEAN
|
||||
spawn_ship (STARSHIPPTR
|
||||
StarShipPtr)
|
||||
spawn_ship (STARSHIPPTR StarShipPtr)
|
||||
{
|
||||
HELEMENT hShip;
|
||||
RACE_DESCPTR RDPtr;
|
||||
@@ -399,20 +396,32 @@ spawn_ship (STARSHIPPTR
|
||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_ENCOUNTER
|
||||
|| LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||
{
|
||||
if ((RDPtr->ship_info.crew_level = StarShipPtr->special_counter) >
|
||||
RDPtr->ship_info.max_crew)
|
||||
if (StarShipPtr->special_counter == 0)
|
||||
{
|
||||
// SIS, already handled from sis_ship.c.
|
||||
// RDPtr->ship_info.crew_level = GLOBAL_SIS (CrewEnlisted);
|
||||
}
|
||||
else
|
||||
RDPtr->ship_info.crew_level = StarShipPtr->special_counter;
|
||||
|
||||
if (RDPtr->ship_info.crew_level > RDPtr->ship_info.max_crew)
|
||||
RDPtr->ship_info.crew_level = RDPtr->ship_info.max_crew;
|
||||
}
|
||||
|
||||
StarShipPtr->energy_counter =
|
||||
StarShipPtr->weapon_counter =
|
||||
StarShipPtr->special_counter = 0;
|
||||
StarShipPtr->energy_counter = 0;
|
||||
StarShipPtr->weapon_counter = 0;
|
||||
StarShipPtr->special_counter = 0;
|
||||
|
||||
if ((hShip = StarShipPtr->hShip) == 0
|
||||
&& (hShip = AllocElement ()) != 0)
|
||||
InsertElement (hShip, GetHeadElement ());
|
||||
hShip = StarShipPtr->hShip;
|
||||
if (hShip == 0)
|
||||
{
|
||||
hShip = AllocElement ();
|
||||
if (hShip != 0)
|
||||
InsertElement (hShip, GetHeadElement ());
|
||||
}
|
||||
|
||||
if ((StarShipPtr->hShip = hShip) != 0)
|
||||
StarShipPtr->hShip = hShip;
|
||||
if (StarShipPtr->hShip != 0)
|
||||
{
|
||||
ELEMENTPTR ShipElementPtr;
|
||||
|
||||
@@ -450,8 +459,7 @@ spawn_ship (STARSHIPPTR
|
||||
--facing;
|
||||
|
||||
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
||||
StarShipPtr->ShipFacing + 1, 0
|
||||
);
|
||||
StarShipPtr->ShipFacing + 1, 0);
|
||||
StarShipPtr->ShipFacing = facing;
|
||||
}
|
||||
ShipElementPtr->current.image.frame =
|
||||
|
||||
@@ -43,7 +43,7 @@ static RACE_DESC androsynth_desc =
|
||||
FIRES_FORE | SEEKING_WEAPON,
|
||||
15, /* Super Melee cost */
|
||||
~0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
||||
@@ -51,6 +51,7 @@ static RACE_DESC androsynth_desc =
|
||||
(STRING)ANDROSYNTH_RACE_STRINGS,
|
||||
(FRAME)ANDROSYNTH_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)ANDROSYNTH_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -96,9 +97,10 @@ static RACE_DESC androsynth_desc =
|
||||
LONG_RANGE_WEAPON >> 2,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
@@ -110,7 +112,7 @@ blazer_collision (PELEMENT ElementPtr0, PPOINT pPt0, PELEMENT ElementPtr1, PPOIN
|
||||
{
|
||||
#define BLAZER_OFFSET 10
|
||||
BYTE old_offs;
|
||||
BYTE old_crew_level;
|
||||
COUNT old_crew_level;
|
||||
COUNT old_life;
|
||||
|
||||
old_crew_level = ElementPtr0->crew_level;
|
||||
@@ -252,7 +254,7 @@ androsynth_intelligence (PELEMENT ShipPtr, PEVALUATE_DESC ObjectsOfConcern, COUN
|
||||
|| StarShipPtr->RaceDescPtr->ship_info.energy_level < MAX_ENERGY / 3
|
||||
|| ((WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) <= CLOSE_RANGE_WEAPON
|
||||
&& lpEvalDesc->ObjectPtr->crew_level > BLAZER_DAMAGE)
|
||||
|| (lpEvalDesc->ObjectPtr->crew_level > (BYTE)(BLAZER_DAMAGE * 3)
|
||||
|| (lpEvalDesc->ObjectPtr->crew_level > (BLAZER_DAMAGE * 3)
|
||||
&& MANEUVERABILITY (&pEnemyStarShip->RaceDescPtr->cyborg_control) > SLOW_SHIP))))
|
||||
lpEvalDesc->MoveState = ENTICE;
|
||||
}
|
||||
@@ -271,7 +273,7 @@ androsynth_intelligence (PELEMENT ShipPtr, PEVALUATE_DESC ObjectsOfConcern, COUN
|
||||
|| (lpEvalDesc->which_turn < 16
|
||||
&& (WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) > CLOSE_RANGE_WEAPON
|
||||
|| lpEvalDesc->ObjectPtr->crew_level <= BLAZER_DAMAGE)
|
||||
&& (lpEvalDesc->ObjectPtr->crew_level <= (BYTE)(BLAZER_DAMAGE * 3)
|
||||
&& (lpEvalDesc->ObjectPtr->crew_level <= (BLAZER_DAMAGE * 3)
|
||||
|| MANEUVERABILITY (&pEnemyStarShip->RaceDescPtr->cyborg_control) <=
|
||||
SLOW_SHIP)))))
|
||||
StarShipPtr->ship_input_state |= SPECIAL;
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC arilou_desc =
|
||||
/* FIRES_FORE | */ IMMEDIATE_WEAPON,
|
||||
16, /* Super Melee cost */
|
||||
250 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
438, 6372,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC arilou_desc =
|
||||
(STRING)ARILOU_RACE_STRINGS,
|
||||
(FRAME)ARILOU_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)ARILOU_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC arilou_desc =
|
||||
LASER_RANGE >> 1,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ static RACE_DESC black_urquan_desc =
|
||||
FIRES_FORE,
|
||||
30, /* Super Melee cost */
|
||||
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
6000, 6250,
|
||||
@@ -55,6 +55,7 @@ static RACE_DESC black_urquan_desc =
|
||||
(STRING)KOHR_AH_RACE_STRINGS,
|
||||
(FRAME)KOHR_AH_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)KOHR_AH_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -100,9 +101,10 @@ static RACE_DESC black_urquan_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ static RACE_DESC chenjesu_desc =
|
||||
FIRES_FORE | SEEKING_SPECIAL | SEEKING_WEAPON,
|
||||
28, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -58,6 +58,7 @@ static RACE_DESC chenjesu_desc =
|
||||
(STRING)CHENJESU_RACE_STRINGS,
|
||||
(FRAME)CHENJESU_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)CHENJESU_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -103,9 +104,10 @@ static RACE_DESC chenjesu_desc =
|
||||
LONG_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ static RACE_DESC chmmr_desc =
|
||||
FIRES_FORE | IMMEDIATE_WEAPON | SEEKING_SPECIAL | POINT_DEFENSE,
|
||||
30, /* Super Melee cost */
|
||||
0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -55,6 +55,7 @@ static RACE_DESC chmmr_desc =
|
||||
(STRING)CHMMR_RACE_STRINGS,
|
||||
(FRAME)CHMMR_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)CHMMR_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -100,9 +101,10 @@ static RACE_DESC chmmr_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ static RACE_DESC druuge_desc =
|
||||
FIRES_FORE,
|
||||
17, /* Super Melee cost */
|
||||
1400 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
9500, 2792,
|
||||
@@ -51,6 +51,7 @@ static RACE_DESC druuge_desc =
|
||||
(STRING)DRUUGE_RACE_STRINGS,
|
||||
(FRAME)DRUUGE_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)DRUUGE_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -96,9 +97,10 @@ static RACE_DESC druuge_desc =
|
||||
MISSILE_RANGE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ static RACE_DESC human_desc =
|
||||
FIRES_FORE | SEEKING_WEAPON | POINT_DEFENSE,
|
||||
11, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
1752, 1450,
|
||||
@@ -55,6 +55,7 @@ static RACE_DESC human_desc =
|
||||
(STRING)HUMAN_RACE_STRINGS,
|
||||
(FRAME)HUMAN_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)HUMAN_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -100,9 +101,10 @@ static RACE_DESC human_desc =
|
||||
LONG_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC ilwrath_desc =
|
||||
FIRES_FORE,
|
||||
10, /* Super Melee cost */
|
||||
1410 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
48, 1700,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC ilwrath_desc =
|
||||
(STRING)ILWRATH_RACE_STRINGS,
|
||||
(FRAME)ILWRATH_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)ILWRATH_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC ilwrath_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ static RACE_DESC samatra_desc =
|
||||
/* FIRES_FORE | */ IMMEDIATE_WEAPON | CREW_IMMUNE,
|
||||
16, /* Super Melee cost */
|
||||
0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -58,6 +58,7 @@ static RACE_DESC samatra_desc =
|
||||
(STRING)0,
|
||||
(FRAME)0,
|
||||
(FRAME)0,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -103,9 +104,10 @@ static RACE_DESC samatra_desc =
|
||||
0,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC melnorme_desc =
|
||||
FIRES_FORE,
|
||||
18, /* Super Melee cost */
|
||||
~0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC melnorme_desc =
|
||||
(STRING)MELNORME_RACE_STRINGS,
|
||||
(FRAME)MELNORME_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)MELNORME_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC melnorme_desc =
|
||||
PUMPUP_SPEED * PUMPUP_LIFE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ static RACE_DESC mmrnmhrm_desc =
|
||||
FIRES_FORE | IMMEDIATE_WEAPON,
|
||||
19, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -66,6 +66,7 @@ static RACE_DESC mmrnmhrm_desc =
|
||||
(STRING)MMRNMHRM_RACE_STRINGS,
|
||||
(FRAME)MMRNMHRM_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)MMRNMHRM_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -111,9 +112,10 @@ static RACE_DESC mmrnmhrm_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC mycon_desc =
|
||||
FIRES_FORE | SEEKING_WEAPON,
|
||||
21, /* Super Melee cost */
|
||||
1070 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
6392, 2200,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC mycon_desc =
|
||||
(STRING)MYCON_RACE_STRINGS,
|
||||
(FRAME)MYCON_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)MYCON_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC mycon_desc =
|
||||
DISPLAY_TO_WORLD (800),
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ static RACE_DESC orz_desc =
|
||||
FIRES_FORE | SEEKING_SPECIAL,
|
||||
23, /* Super Melee cost */
|
||||
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
3608, 2637,
|
||||
@@ -56,6 +56,7 @@ static RACE_DESC orz_desc =
|
||||
(STRING)ORZ_RACE_STRINGS,
|
||||
(FRAME)ORZ_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)ORZ_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -101,9 +102,10 @@ static RACE_DESC orz_desc =
|
||||
MISSILE_SPEED * MISSILE_LIFE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC pkunk_desc =
|
||||
FIRES_FORE | FIRES_LEFT | FIRES_RIGHT,
|
||||
20, /* Super Melee cost */
|
||||
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
502, 401,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC pkunk_desc =
|
||||
(STRING)PKUNK_RACE_STRINGS,
|
||||
(FRAME)PKUNK_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)PKUNK_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC pkunk_desc =
|
||||
CLOSE_RANGE_WEAPON + 1,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ static RACE_DESC probe_desc =
|
||||
0,
|
||||
0, /* Super Melee cost */
|
||||
0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -48,6 +48,7 @@ static RACE_DESC probe_desc =
|
||||
0,
|
||||
0,
|
||||
(FRAME)PROBE_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -93,9 +94,10 @@ static RACE_DESC probe_desc =
|
||||
0,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC shofixti_desc =
|
||||
FIRES_FORE,
|
||||
5, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC shofixti_desc =
|
||||
(STRING)SHOFIXTI_RACE_STRINGS,
|
||||
(FRAME)SHOFIXTI_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)SHOFIXTI_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC shofixti_desc =
|
||||
MISSILE_SPEED * MISSILE_LIFE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ static RACE_DESC sis_desc =
|
||||
0,
|
||||
16, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -60,6 +60,7 @@ static RACE_DESC sis_desc =
|
||||
0,
|
||||
(FRAME)SIS_ICON_MASK_PMAP_ANIM,
|
||||
0,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -105,12 +106,21 @@ static RACE_DESC sis_desc =
|
||||
BLASTER_SPEED * BLASTER_LIFE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
static void InitModuleSlots (RACE_DESCPTR RaceDescPtr,
|
||||
const BYTE *ModuleSlots);
|
||||
static void InitDriveSlots (RACE_DESCPTR RaceDescPtr,
|
||||
const BYTE *DriveSlots);
|
||||
static void InitJetSlots (RACE_DESCPTR RaceDescPtr,
|
||||
const BYTE *JetSlots);
|
||||
void uninit_sis (RACE_DESCPTR pRaceDesc);
|
||||
|
||||
static BYTE num_trackers = 0;
|
||||
|
||||
static void
|
||||
@@ -445,7 +455,7 @@ sis_battle_preprocess (PELEMENT ElementPtr)
|
||||
static void
|
||||
sis_battle_postprocess (PELEMENT ElementPtr)
|
||||
{
|
||||
SIZE crew_delta;
|
||||
// SIZE crew_delta;
|
||||
STARSHIPPTR StarShipPtr;
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
@@ -456,6 +466,7 @@ sis_battle_postprocess (PELEMENT ElementPtr)
|
||||
spawn_point_defense (ElementPtr);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (ElementPtr->crew_level > 0
|
||||
&& ElementPtr->crew_level < StarShipPtr->RaceDescPtr->ship_info.max_crew
|
||||
&& ElementPtr->crew_level != (crew_delta =
|
||||
@@ -468,6 +479,7 @@ sis_battle_postprocess (PELEMENT ElementPtr)
|
||||
else
|
||||
DeltaCrew (ElementPtr, StarShipPtr->RaceDescPtr->ship_info.max_crew);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#define BLASTER_DAMAGE 2
|
||||
@@ -736,6 +748,102 @@ sis_intelligence (PELEMENT ShipPtr, PEVALUATE_DESC ObjectsOfConcern, COUNT Conce
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
InitModuleSlots (RACE_DESCPTR RaceDescPtr, const BYTE *ModuleSlots) {
|
||||
COUNT i;
|
||||
|
||||
RaceDescPtr->ship_info.max_crew = 0;
|
||||
num_trackers = 0;
|
||||
for (i = 0; i < NUM_MODULE_SLOTS; ++i)
|
||||
{
|
||||
BYTE which_mod;
|
||||
|
||||
which_mod = ModuleSlots[(NUM_MODULE_SLOTS - 1) - i];
|
||||
switch (which_mod)
|
||||
{
|
||||
case CREW_POD:
|
||||
RaceDescPtr->ship_info.max_crew += CREW_POD_CAPACITY;
|
||||
break;
|
||||
case GUN_WEAPON:
|
||||
case BLASTER_WEAPON:
|
||||
case CANNON_WEAPON:
|
||||
RaceDescPtr->characteristics.weapon_energy_cost +=
|
||||
(which_mod - GUN_WEAPON + 1) * 2;
|
||||
if (i <= 1)
|
||||
RaceDescPtr->ship_info.ship_flags |= FIRES_FORE;
|
||||
else if (i == 2)
|
||||
RaceDescPtr->ship_info.ship_flags |=
|
||||
FIRES_LEFT | FIRES_RIGHT;
|
||||
else
|
||||
RaceDescPtr->ship_info.ship_flags |= FIRES_AFT;
|
||||
break;
|
||||
case TRACKING_SYSTEM:
|
||||
++num_trackers;
|
||||
break;
|
||||
case ANTIMISSILE_DEFENSE:
|
||||
++RaceDescPtr->characteristics.special_energy_cost;
|
||||
break;
|
||||
case SHIVA_FURNACE:
|
||||
++RaceDescPtr->characteristics.energy_regeneration;
|
||||
break;
|
||||
case DYNAMO_UNIT:
|
||||
RaceDescPtr->characteristics.energy_wait -= 2;
|
||||
if (RaceDescPtr->characteristics.energy_wait < 4)
|
||||
RaceDescPtr->characteristics.energy_wait = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (num_trackers > MAX_TRACKING)
|
||||
num_trackers = MAX_TRACKING;
|
||||
RaceDescPtr->characteristics.weapon_energy_cost += num_trackers * 3;
|
||||
if (RaceDescPtr->characteristics.special_energy_cost)
|
||||
{
|
||||
RaceDescPtr->ship_info.ship_flags |= POINT_DEFENSE;
|
||||
if (RaceDescPtr->characteristics.special_energy_cost > MAX_DEFENSE)
|
||||
RaceDescPtr->characteristics.special_energy_cost = MAX_DEFENSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
InitDriveSlots (RACE_DESCPTR RaceDescPtr, const BYTE *DriveSlots) {
|
||||
COUNT i;
|
||||
|
||||
// NB. RaceDescPtr->characteristics.max_thrust is already initialised.
|
||||
RaceDescPtr->characteristics.thrust_wait = 0;
|
||||
for (i = 0; i < NUM_DRIVE_SLOTS; ++i)
|
||||
{
|
||||
switch (DriveSlots[i])
|
||||
{
|
||||
case FUSION_THRUSTER:
|
||||
RaceDescPtr->characteristics.max_thrust += 2;
|
||||
++RaceDescPtr->characteristics.thrust_wait;
|
||||
break;
|
||||
}
|
||||
}
|
||||
RaceDescPtr->characteristics.thrust_wait = (BYTE)(
|
||||
THRUST_WAIT - (RaceDescPtr->characteristics.thrust_wait >> 1));
|
||||
RaceDescPtr->characteristics.max_thrust =
|
||||
((RaceDescPtr->characteristics.max_thrust /
|
||||
RaceDescPtr->characteristics.thrust_increment) + 1)
|
||||
* RaceDescPtr->characteristics.thrust_increment;
|
||||
}
|
||||
|
||||
static void
|
||||
InitJetSlots (RACE_DESCPTR RaceDescPtr, const BYTE *JetSlots) {
|
||||
COUNT i;
|
||||
|
||||
for (i = 0; i < NUM_JET_SLOTS; ++i)
|
||||
{
|
||||
switch (JetSlots[i])
|
||||
{
|
||||
case TURNING_JETS:
|
||||
RaceDescPtr->characteristics.turn_wait -= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RACE_DESCPTR
|
||||
init_sis (void)
|
||||
{
|
||||
@@ -746,6 +854,8 @@ init_sis (void)
|
||||
|
||||
/* copy initial ship settings to new_sis_desc */
|
||||
new_sis_desc = sis_desc;
|
||||
|
||||
new_sis_desc.uninit_func = uninit_sis;
|
||||
|
||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
||||
{
|
||||
@@ -760,7 +870,7 @@ init_sis (void)
|
||||
new_sis_desc.ship_data.victory_ditty = 0;
|
||||
new_sis_desc.ship_data.ship_sounds = 0;
|
||||
|
||||
new_sis_desc.ship_data.ship[0] = (FRAME)SIS_HYPER_MASK_PMAP_ANIM;
|
||||
new_sis_desc.ship_data.ship[0] = (FRAME)SIS_HYPER_MASK_PMAP_ANIM;
|
||||
|
||||
new_sis_desc.preprocess_func = sis_hyper_preprocess;
|
||||
new_sis_desc.postprocess_func = sis_hyper_postprocess;
|
||||
@@ -773,97 +883,32 @@ init_sis (void)
|
||||
new_sis_desc.postprocess_func = sis_battle_postprocess;
|
||||
new_sis_desc.init_weapon_func = initialize_blasters;
|
||||
new_sis_desc.cyborg_control.intelligence_func =
|
||||
(void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern, COUNT
|
||||
ConcernCounter)) sis_intelligence;
|
||||
|
||||
num_trackers = 0;
|
||||
for (i = 0; i < NUM_MODULE_SLOTS; ++i)
|
||||
{
|
||||
BYTE which_mod;
|
||||
|
||||
which_mod = GLOBAL_SIS (ModuleSlots[
|
||||
(NUM_MODULE_SLOTS - 1) - i
|
||||
]);
|
||||
switch (which_mod)
|
||||
{
|
||||
case GUN_WEAPON:
|
||||
case BLASTER_WEAPON:
|
||||
case CANNON_WEAPON:
|
||||
new_sis_desc.characteristics.weapon_energy_cost +=
|
||||
(which_mod - GUN_WEAPON + 1) * 2;
|
||||
if (i <= 1)
|
||||
new_sis_desc.ship_info.ship_flags |= FIRES_FORE;
|
||||
else if (i == 2)
|
||||
new_sis_desc.ship_info.ship_flags |= FIRES_LEFT | FIRES_RIGHT;
|
||||
else
|
||||
new_sis_desc.ship_info.ship_flags |= FIRES_AFT;
|
||||
break;
|
||||
case TRACKING_SYSTEM:
|
||||
++num_trackers;
|
||||
break;
|
||||
case ANTIMISSILE_DEFENSE:
|
||||
++new_sis_desc.characteristics.special_energy_cost;
|
||||
break;
|
||||
case SHIVA_FURNACE:
|
||||
++new_sis_desc.characteristics.energy_regeneration;
|
||||
break;
|
||||
case DYNAMO_UNIT:
|
||||
if ((new_sis_desc.characteristics.energy_wait -= 2) < 4)
|
||||
new_sis_desc.characteristics.energy_wait = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (num_trackers > MAX_TRACKING)
|
||||
num_trackers = MAX_TRACKING;
|
||||
new_sis_desc.characteristics.weapon_energy_cost += num_trackers * 3;
|
||||
if (new_sis_desc.characteristics.special_energy_cost)
|
||||
{
|
||||
new_sis_desc.ship_info.ship_flags |= POINT_DEFENSE;
|
||||
if (new_sis_desc.characteristics.special_energy_cost > MAX_DEFENSE)
|
||||
new_sis_desc.characteristics.special_energy_cost = MAX_DEFENSE;
|
||||
}
|
||||
(void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern,
|
||||
COUNT ConcernCounter)) sis_intelligence;
|
||||
|
||||
InitModuleSlots(&new_sis_desc, GLOBAL_SIS (ModuleSlots));
|
||||
|
||||
if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 3)
|
||||
{
|
||||
SET_GAME_STATE (BOMB_CARRIER, 1);
|
||||
}
|
||||
}
|
||||
|
||||
new_sis_desc.characteristics.thrust_wait = 0;
|
||||
for (i = 0; i < NUM_DRIVE_SLOTS; ++i)
|
||||
InitDriveSlots(&new_sis_desc, GLOBAL_SIS (DriveSlots));
|
||||
InitJetSlots(&new_sis_desc, GLOBAL_SIS (JetSlots));
|
||||
|
||||
if (LOBYTE (GLOBAL (CurrentActivity)) == SUPER_MELEE)
|
||||
{
|
||||
switch (GLOBAL_SIS (DriveSlots[i]))
|
||||
{
|
||||
case FUSION_THRUSTER:
|
||||
new_sis_desc.characteristics.max_thrust += 2;
|
||||
++new_sis_desc.characteristics.thrust_wait;
|
||||
break;
|
||||
}
|
||||
new_sis_desc.ship_info.crew_level = new_sis_desc.ship_info.max_crew;
|
||||
}
|
||||
new_sis_desc.characteristics.thrust_wait = (BYTE)(
|
||||
THRUST_WAIT
|
||||
- (new_sis_desc.characteristics.thrust_wait >> 1)
|
||||
);
|
||||
new_sis_desc.characteristics.max_thrust =
|
||||
((new_sis_desc.characteristics.max_thrust /
|
||||
new_sis_desc.characteristics.thrust_increment) + 1)
|
||||
* new_sis_desc.characteristics.thrust_increment;
|
||||
|
||||
for (i = 0; i < NUM_JET_SLOTS; ++i)
|
||||
else
|
||||
{
|
||||
switch (GLOBAL_SIS (JetSlots[i]))
|
||||
{
|
||||
case TURNING_JETS:
|
||||
new_sis_desc.characteristics.turn_wait -= 2;
|
||||
break;
|
||||
}
|
||||
// Count the captain too.
|
||||
new_sis_desc.ship_info.max_crew++;
|
||||
new_sis_desc.ship_info.crew_level = GLOBAL_SIS (CrewEnlisted) + 1;
|
||||
new_sis_desc.ship_info.ship_flags |= PLAYER_CAPTAIN;
|
||||
}
|
||||
|
||||
if (GLOBAL_SIS (CrewEnlisted) < MAX_CREW - 1)
|
||||
new_sis_desc.ship_info.crew_level = (BYTE)(
|
||||
GLOBAL_SIS (CrewEnlisted) + 1
|
||||
);
|
||||
|
||||
new_sis_desc.ship_info.energy_level = new_sis_desc.ship_info.max_energy;
|
||||
|
||||
RaceDescPtr = &new_sis_desc;
|
||||
@@ -871,3 +916,12 @@ init_sis (void)
|
||||
return (RaceDescPtr);
|
||||
}
|
||||
|
||||
void
|
||||
uninit_sis (RACE_DESCPTR pRaceDesc)
|
||||
{
|
||||
GLOBAL_SIS (CrewEnlisted) = pRaceDesc->ship_info.crew_level;
|
||||
if (pRaceDesc->ship_info.ship_flags & PLAYER_CAPTAIN)
|
||||
GLOBAL_SIS (CrewEnlisted)--;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC slylandro_desc =
|
||||
SEEKING_WEAPON | CREW_IMMUNE,
|
||||
17, /* Super Melee cost */
|
||||
~0, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
333, 9812,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC slylandro_desc =
|
||||
(STRING)SLYLANDRO_RACE_STRINGS,
|
||||
(FRAME)SLYLANDRO_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)SLYLANDRO_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC slylandro_desc =
|
||||
CLOSE_RANGE_WEAPON << 1,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ static RACE_DESC spathi_desc =
|
||||
FIRES_FORE | FIRES_AFT | SEEKING_SPECIAL | DONT_CHASE,
|
||||
18, /* Super Melee cost */
|
||||
1000 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
2549, 3600,
|
||||
@@ -51,6 +51,7 @@ static RACE_DESC spathi_desc =
|
||||
(STRING)SPATHI_RACE_STRINGS,
|
||||
(FRAME)SPATHI_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)SPATHI_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -96,9 +97,10 @@ static RACE_DESC spathi_desc =
|
||||
MISSILE_RANGE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC supox_desc =
|
||||
FIRES_FORE,
|
||||
16, /* Super Melee cost */
|
||||
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
7468, 9246,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC supox_desc =
|
||||
(STRING)SUPOX_RACE_STRINGS,
|
||||
(FRAME)SUPOX_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)SUPOX_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC supox_desc =
|
||||
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC syreen_desc =
|
||||
FIRES_FORE,
|
||||
13, /* Super Melee cost */
|
||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, SYREEN_MAX_CREW_SIZE,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
0, 0,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC syreen_desc =
|
||||
(STRING)SYREEN_RACE_STRINGS,
|
||||
(FRAME)SYREEN_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)SYREEN_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, SYREEN_MAX_CREW_SIZE,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC syreen_desc =
|
||||
(MISSILE_SPEED * MISSILE_LIFE * 2 / 3),
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC thraddash_desc =
|
||||
FIRES_FORE,
|
||||
10, /* Super Melee cost */
|
||||
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
2535, 8358,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC thraddash_desc =
|
||||
(STRING)THRADDASH_RACE_STRINGS,
|
||||
(FRAME)THRADDASH_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)THRADDASH_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC thraddash_desc =
|
||||
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC umgah_desc =
|
||||
FIRES_FORE | IMMEDIATE_WEAPON,
|
||||
7, /* Super Melee cost */
|
||||
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
1798, 6000,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC umgah_desc =
|
||||
(STRING)UMGAH_RACE_STRINGS,
|
||||
(FRAME)UMGAH_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)UMGAH_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC umgah_desc =
|
||||
(LONG_RANGE_WEAPON << 2),
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ static RACE_DESC urquan_desc =
|
||||
FIRES_FORE | SEEKING_SPECIAL,
|
||||
30, /* Super Melee cost */
|
||||
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
5750, 6000,
|
||||
@@ -55,6 +55,7 @@ static RACE_DESC urquan_desc =
|
||||
(STRING)URQUAN_RACE_STRINGS,
|
||||
(FRAME)URQUAN_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)URQUAN_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -100,9 +101,10 @@ static RACE_DESC urquan_desc =
|
||||
MISSILE_SPEED * MISSILE_LIFE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ static RACE_DESC utwig_desc =
|
||||
FIRES_FORE | POINT_DEFENSE | SHIELD_DEFENSE,
|
||||
22, /* Super Melee cost */
|
||||
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY >> 1, MAX_ENERGY,
|
||||
{
|
||||
8534, 8797,
|
||||
@@ -55,6 +55,7 @@ static RACE_DESC utwig_desc =
|
||||
(STRING)UTWIG_RACE_STRINGS,
|
||||
(FRAME)UTWIG_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)UTWIG_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -100,9 +101,10 @@ static RACE_DESC utwig_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ static RACE_DESC vux_desc =
|
||||
FIRES_FORE | SEEKING_SPECIAL | IMMEDIATE_WEAPON,
|
||||
12, /* Super Melee cost */
|
||||
900 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
4412, 1558,
|
||||
@@ -56,6 +56,7 @@ static RACE_DESC vux_desc =
|
||||
(STRING)VUX_RACE_STRINGS,
|
||||
(FRAME)VUX_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)VUX_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -101,9 +102,10 @@ static RACE_DESC vux_desc =
|
||||
CLOSE_RANGE_WEAPON,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static RACE_DESC yehat_desc =
|
||||
FIRES_FORE | SHIELD_DEFENSE,
|
||||
23, /* Super Melee cost */
|
||||
750 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
4970, 40,
|
||||
@@ -53,6 +53,7 @@ static RACE_DESC yehat_desc =
|
||||
(STRING)YEHAT_RACE_STRINGS,
|
||||
(FRAME)YEHAT_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)YEHAT_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -98,9 +99,10 @@ static RACE_DESC yehat_desc =
|
||||
MISSILE_SPEED * MISSILE_LIFE / 3,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ static RACE_DESC zoqfotpik_desc =
|
||||
FIRES_FORE,
|
||||
6, /* Super Melee cost */
|
||||
320 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||
MAX_CREW, MAX_CREW,
|
||||
0, 0, /* Hack; old crew field */
|
||||
MAX_ENERGY, MAX_ENERGY,
|
||||
{
|
||||
3761, 5333,
|
||||
@@ -54,6 +54,7 @@ static RACE_DESC zoqfotpik_desc =
|
||||
(STRING)ZOQFOTPIK_RACE_STRINGS,
|
||||
(FRAME)ZOQFOTPIK_ICON_MASK_PMAP_ANIM,
|
||||
(FRAME)ZOQFOTPIK_MICON_MASK_PMAP_ANIM,
|
||||
MAX_CREW, MAX_CREW,
|
||||
},
|
||||
{
|
||||
MAX_THRUST,
|
||||
@@ -99,9 +100,10 @@ static RACE_DESC zoqfotpik_desc =
|
||||
MISSILE_RANGE,
|
||||
NULL_PTR,
|
||||
},
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
NULL_PTR,
|
||||
(UNINIT_FUNC *) NULL,
|
||||
(PREPROCESS_FUNC *) NULL,
|
||||
(POSTPROCESS_FUNC *) NULL,
|
||||
(INIT_WEAPON_FUNC *) NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
+53
-62
@@ -152,9 +152,7 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
||||
r.extent.height += pClipRect->corner.y & 1;
|
||||
SetContextClipRect (&r);
|
||||
SetFrameHot (Screen, MAKE_HOT_SPOT (
|
||||
pClipRect->corner.x,
|
||||
(pClipRect->corner.y & ~1)
|
||||
));
|
||||
pClipRect->corner.x, (pClipRect->corner.y & ~1)));
|
||||
}
|
||||
|
||||
BatchGraphics ();
|
||||
@@ -170,10 +168,13 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
||||
{
|
||||
SIZE crew_height, energy_height;
|
||||
|
||||
crew_height = (((SIPtr->max_crew + 1) >> 1) << 1) + 1;
|
||||
#define MIN(a, b) (((a) <= (b)) ? (a) : (b))
|
||||
crew_height = ((MIN(SIPtr->max_crew, MAX_CREW_SIZE) + 1) & ~1) + 1;
|
||||
#undef MIN
|
||||
energy_height = (((SIPtr->max_energy + 1) >> 1) << 1) + 1;
|
||||
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x8, 0x8, 0x8), 0x1F));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x8, 0x8, 0x8), 0x1F));
|
||||
r.corner.x = CREW_XOFFS - 1;
|
||||
r.corner.y = GAUGE_YOFFS + 1 + y;
|
||||
r.extent.width = STAT_WIDTH + 2;
|
||||
@@ -191,7 +192,8 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
||||
r.extent.width = 1;
|
||||
r.extent.height = crew_height;
|
||||
DrawFilledRectangle (&r);
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19));
|
||||
r.corner.x = CREW_XOFFS - 1;
|
||||
r.corner.y = GAUGE_YOFFS - crew_height + y;
|
||||
r.extent.width = STAT_WIDTH + 2;
|
||||
@@ -297,6 +299,8 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
||||
SetContext (OldContext);
|
||||
}
|
||||
|
||||
// Pre: -crew_delta <= StarShipPtr->crew_level
|
||||
// crew_delta <= StarShipPtr->max_crew - StarShipPtr->crew_level
|
||||
void
|
||||
DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta, SIZE
|
||||
energy_delta)
|
||||
@@ -311,96 +315,83 @@ DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta, SIZE
|
||||
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
||||
|
||||
x = 0;
|
||||
y = GAUGE_YOFFS
|
||||
+ ((ShipInfoPtr->ship_flags & GOOD_GUY) ?
|
||||
y = GAUGE_YOFFS + ((ShipInfoPtr->ship_flags & GOOD_GUY) ?
|
||||
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
|
||||
|
||||
r.extent.width = UNIT_WIDTH;
|
||||
r.extent.height = UNIT_HEIGHT;
|
||||
|
||||
if (crew_delta != 0)
|
||||
{
|
||||
COUNT oldNumBlocks, newNumBlocks, blockI;
|
||||
COUNT newCrewLevel;
|
||||
|
||||
#define MIN(a, b) (((a) <= (b)) ? (a) : (b))
|
||||
oldNumBlocks = MIN(ShipInfoPtr->crew_level, MAX_CREW_SIZE);
|
||||
newCrewLevel = ShipInfoPtr->crew_level + crew_delta;
|
||||
newNumBlocks = MIN(newCrewLevel, MAX_CREW_SIZE);
|
||||
#undef MIN
|
||||
|
||||
if (crew_delta > 0)
|
||||
{
|
||||
r.corner.y = (y + 1) -
|
||||
(((ShipInfoPtr->crew_level + 1) >> 1) * (UNIT_HEIGHT + 1));
|
||||
if (StarShipPtr->captains_name_index == 0
|
||||
&& (ShipInfoPtr->ship_flags & GOOD_GUY)
|
||||
&& LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
|
||||
{
|
||||
// SIS in full game.
|
||||
crew_delta = GLOBAL_SIS (CrewEnlisted);
|
||||
if (crew_delta >= MAX_CREW_SIZE)
|
||||
crew_delta = MAX_CREW_SIZE;
|
||||
else /* if (crew_delta < MAX_CREW_SIZE) */
|
||||
{
|
||||
#define PLAYER_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0x1F), 0x09)
|
||||
SetContextForeGroundColor (PLAYER_UNIT_COLOR);
|
||||
r.corner.x = x + (CREW_XOFFS + 1);
|
||||
if (!(ShipInfoPtr->crew_level & 1))
|
||||
{
|
||||
r.corner.x += UNIT_WIDTH + 1;
|
||||
r.corner.y -= UNIT_HEIGHT + 1;
|
||||
}
|
||||
DrawFilledRectangle (&r);
|
||||
++ShipInfoPtr->crew_level;
|
||||
}
|
||||
}
|
||||
|
||||
(((oldNumBlocks + 1) >> 1) * (UNIT_HEIGHT + 1));
|
||||
#define CREW_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02)
|
||||
#define ROBOT_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08)
|
||||
SetContextForeGroundColor (
|
||||
(ShipInfoPtr->ship_flags & CREW_IMMUNE) ?
|
||||
ROBOT_UNIT_COLOR : CREW_UNIT_COLOR);
|
||||
while (crew_delta--)
|
||||
for (blockI = oldNumBlocks; blockI < newNumBlocks; blockI++)
|
||||
{
|
||||
r.corner.x = x + (CREW_XOFFS + 1);
|
||||
if (!(ShipInfoPtr->crew_level & 1))
|
||||
if (!(blockI & 1))
|
||||
{
|
||||
r.corner.x += UNIT_WIDTH + 1;
|
||||
r.corner.y -= UNIT_HEIGHT + 1;
|
||||
}
|
||||
DrawFilledRectangle (&r);
|
||||
++ShipInfoPtr->crew_level;
|
||||
}
|
||||
}
|
||||
else /* crew_delta < 0 */
|
||||
{
|
||||
if (StarShipPtr->captains_name_index == 0
|
||||
&& (ShipInfoPtr->ship_flags & GOOD_GUY)
|
||||
&& LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE)
|
||||
{
|
||||
COUNT death_count;
|
||||
|
||||
death_count = (COUNT)-crew_delta;
|
||||
if (GLOBAL_SIS (CrewEnlisted) >= death_count)
|
||||
{
|
||||
GLOBAL_SIS (CrewEnlisted) -= death_count;
|
||||
death_count = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
death_count -= GLOBAL_SIS (CrewEnlisted);
|
||||
GLOBAL_SIS (CrewEnlisted) = 0;
|
||||
}
|
||||
|
||||
DrawBattleCrewAmount (StarShipPtr,
|
||||
(BOOLEAN)(death_count == 0));
|
||||
}
|
||||
|
||||
SetContextForeGroundColor (BLACK_COLOR);
|
||||
r.corner.y = (y + 1) -
|
||||
(((ShipInfoPtr->crew_level + 2) >> 1) * (UNIT_HEIGHT + 1));
|
||||
do
|
||||
(((oldNumBlocks + 2) >> 1) * (UNIT_HEIGHT + 1));
|
||||
for (blockI = oldNumBlocks; blockI > newNumBlocks; blockI--)
|
||||
{
|
||||
r.corner.x = x + (CREW_XOFFS + 1 + UNIT_WIDTH + 1);
|
||||
if (!(ShipInfoPtr->crew_level & 1))
|
||||
if (!(blockI & 1))
|
||||
{
|
||||
r.corner.x -= UNIT_WIDTH + 1;
|
||||
r.corner.y += UNIT_HEIGHT + 1;
|
||||
}
|
||||
DrawFilledRectangle (&r);
|
||||
--ShipInfoPtr->crew_level;
|
||||
} while (++crew_delta);
|
||||
}
|
||||
}
|
||||
|
||||
if (ShipInfoPtr->ship_flags & PLAYER_CAPTAIN) {
|
||||
if (((ShipInfoPtr->crew_level > MAX_CREW_SIZE) !=
|
||||
(newCrewLevel > MAX_CREW_SIZE) ||
|
||||
ShipInfoPtr->crew_level == 0) && newCrewLevel != 0)
|
||||
{
|
||||
// The block indicating the captain needs to change color.
|
||||
#define PLAYER_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0x1F), 0x09)
|
||||
SetContextForeGroundColor (
|
||||
(newCrewLevel > MAX_CREW_SIZE) ?
|
||||
CREW_UNIT_COLOR : PLAYER_UNIT_COLOR);
|
||||
r.corner.x = x + (CREW_XOFFS + 1) + (UNIT_WIDTH + 1);
|
||||
r.corner.y = y - UNIT_HEIGHT;
|
||||
DrawFilledRectangle (&r);
|
||||
}
|
||||
}
|
||||
|
||||
ShipInfoPtr->crew_level = newCrewLevel;
|
||||
if (ShipInfoPtr->max_crew > MAX_CREW_SIZE ||
|
||||
ShipInfoPtr->ship_flags & PLAYER_CAPTAIN)
|
||||
{
|
||||
// All crew doesn't fit in the graphics; print a number.
|
||||
// Always print a number for the SIS in the full game.
|
||||
DrawBattleCrewAmount (StarShipPtr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -149,6 +149,7 @@ SpinStarShip (HSTARSHIP hStarShip)
|
||||
}
|
||||
#endif
|
||||
|
||||
// Count the ships which can be built by the player.
|
||||
static COUNT
|
||||
GetAvailableRaceCount (void)
|
||||
{
|
||||
@@ -382,9 +383,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
||||
while (hStarShip)
|
||||
{
|
||||
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
&GLOBAL (built_ship_q),
|
||||
hStarShip
|
||||
);
|
||||
&GLOBAL (built_ship_q), hStarShip);
|
||||
if (GET_GROUP_LOC (StarShipPtr) > which_window)
|
||||
{
|
||||
UnlockStarShip (&GLOBAL (built_ship_q), hStarShip);
|
||||
@@ -407,9 +406,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
||||
for (i = 0; i < num_ships; ++i)
|
||||
{
|
||||
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||
&GLOBAL (built_ship_q),
|
||||
hStarShip
|
||||
);
|
||||
&GLOBAL (built_ship_q), hStarShip);
|
||||
hNextShip = _GetSuccLink (StarShipPtr);
|
||||
|
||||
pship_win_info->StarShipPtr = StarShipPtr;
|
||||
@@ -435,10 +432,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
||||
(which_window / HANGAR_SHIPS_ROW));
|
||||
++pship_win_info;
|
||||
|
||||
UnlockStarShip (
|
||||
&GLOBAL (built_ship_q),
|
||||
hStarShip
|
||||
);
|
||||
UnlockStarShip (&GLOBAL (built_ship_q), hStarShip);
|
||||
hStarShip = hNextShip;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-3
@@ -1565,14 +1565,18 @@ SetFlashRect (PRECT pRect, FRAME f)
|
||||
SetContext (OldContext);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SaveFlagshipState (void)
|
||||
{
|
||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
||||
{
|
||||
// Player is in HyperSpace or QuasiSpace.
|
||||
// Update 'GLOBAL (ShipStamp.frame)' to the direction the flagship
|
||||
// is facing.
|
||||
|
||||
HELEMENT hElement, hNextElement;
|
||||
|
||||
// Find the flagship element.
|
||||
for (hElement = GetHeadElement ();
|
||||
hElement != 0; hElement = hNextElement)
|
||||
{
|
||||
@@ -1586,8 +1590,7 @@ SaveFlagshipState (void)
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
||||
StarShipPtr->ShipFacing + 1, 0
|
||||
);
|
||||
StarShipPtr->ShipFacing + 1, 0);
|
||||
hNextElement = 0;
|
||||
}
|
||||
UnlockElement (hElement);
|
||||
@@ -1595,6 +1598,7 @@ SaveFlagshipState (void)
|
||||
}
|
||||
else if (pSolarSysState)
|
||||
{
|
||||
// Player is in a solar system.
|
||||
UWORD index1, index2;
|
||||
FRAME frame;
|
||||
|
||||
@@ -1604,7 +1608,9 @@ SaveFlagshipState (void)
|
||||
{
|
||||
index1 = GetFrameIndex (frame) + 1;
|
||||
if (pSolarSysState->pBaseDesc == pSolarSysState->PlanetDesc)
|
||||
{
|
||||
index2 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
index2 = (UWORD)(pSolarSysState->pBaseDesc->pPrevDesc
|
||||
@@ -1615,6 +1621,9 @@ SaveFlagshipState (void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// In orbit around a planet.
|
||||
|
||||
// Update the starinfo.dat file if necessary.
|
||||
if (GET_GAME_STATE (PLANETARY_CHANGE))
|
||||
{
|
||||
PutPlanetInfo ();
|
||||
@@ -1635,3 +1644,4 @@ SaveFlagshipState (void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -246,9 +246,10 @@ GetPlanetInfo (void)
|
||||
{
|
||||
PVOID fp;
|
||||
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] =
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[MINERAL_SCAN] =
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] = 0;
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] = 0;
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[MINERAL_SCAN] = 0;
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] = 0;
|
||||
|
||||
fp = OpenStateFile (STARINFO_FILE, "rb");
|
||||
if (fp)
|
||||
{
|
||||
@@ -269,19 +270,19 @@ GetPlanetInfo (void)
|
||||
|
||||
if (offset)
|
||||
{
|
||||
COUNT i;
|
||||
COUNT i;
|
||||
|
||||
for (i = 0; i < planet_index; ++i)
|
||||
for (i = 0; i < planet_index; ++i)
|
||||
offset += sizeof (
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask
|
||||
) * (pSolarSysState->PlanetDesc[i].NumPlanets + 1);
|
||||
|
||||
offset += sizeof (
|
||||
offset += sizeof (
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask
|
||||
) * moon_index;
|
||||
|
||||
SeekStateFile (fp, offset, SEEK_SET);
|
||||
ReadStateFile (pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask,
|
||||
SeekStateFile (fp, offset, SEEK_SET);
|
||||
ReadStateFile (pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask,
|
||||
sizeof (
|
||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask
|
||||
), 1, fp);
|
||||
|
||||
@@ -114,7 +114,7 @@ CaptainsWindow (CAPTAIN_STUFFPTR CSPtr, COORD y, ELEMENT_FLAGS
|
||||
}
|
||||
|
||||
void
|
||||
DrawBattleCrewAmount (STARSHIPPTR StarShipPtr, BOOLEAN CountPlayer)
|
||||
DrawBattleCrewAmount (STARSHIPPTR StarShipPtr)
|
||||
{
|
||||
#define MAX_CREW_DIGITS 3
|
||||
RECT r;
|
||||
@@ -136,7 +136,7 @@ DrawBattleCrewAmount (STARSHIPPTR StarShipPtr, BOOLEAN CountPlayer)
|
||||
r.extent.width = 6 * MAX_CREW_DIGITS + 6;
|
||||
r.extent.height = 5;
|
||||
|
||||
sprintf (buf, "%u", GLOBAL_SIS (CrewEnlisted) + (CountPlayer ? 1 : 0));
|
||||
sprintf (buf, "%u", StarShipPtr->RaceDescPtr->ship_info.crew_level);
|
||||
SetContextFont (StarConFont);
|
||||
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08));
|
||||
@@ -247,6 +247,7 @@ DrawCaptainsWindow (STARSHIPPTR StarShipPtr)
|
||||
{
|
||||
if (RDPtr->ship_info.ship_flags & GOOD_GUY)
|
||||
{
|
||||
// SIS
|
||||
TEXT t;
|
||||
|
||||
t.baseline.x = STATUS_WIDTH >> 1;
|
||||
@@ -254,12 +255,19 @@ DrawCaptainsWindow (STARSHIPPTR StarShipPtr)
|
||||
t.align = ALIGN_CENTER;
|
||||
t.pStr = GLOBAL_SIS (CommanderName);
|
||||
t.CharCount = (COUNT)~0;
|
||||
DrawBattleCrewAmount (StarShipPtr, TRUE);
|
||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
||||
SetContextFont (TinyFont);
|
||||
font_DrawText (&t);
|
||||
}
|
||||
}
|
||||
if (RDPtr->ship_info.max_crew > MAX_CREW_SIZE ||
|
||||
RDPtr->ship_info.ship_flags & PLAYER_CAPTAIN)
|
||||
{
|
||||
// All crew doesn't fit in the graphics; print a number.
|
||||
// Always print a number for the SIS in the full game.
|
||||
DrawBattleCrewAmount (StarShipPtr);
|
||||
}
|
||||
|
||||
UnbatchGraphics ();
|
||||
}
|
||||
@@ -322,7 +330,7 @@ DeltaCrew (ELEMENTPTR ElementPtr, SIZE crew_delta)
|
||||
|
||||
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
||||
|
||||
ElementPtr->crew_level += (BYTE)crew_delta;
|
||||
ElementPtr->crew_level += crew_delta;
|
||||
if (ElementPtr->crew_level > ShipInfoPtr->max_crew)
|
||||
{
|
||||
crew_delta = ShipInfoPtr->max_crew - ShipInfoPtr->crew_level;
|
||||
@@ -331,8 +339,8 @@ DeltaCrew (ELEMENTPTR ElementPtr, SIZE crew_delta)
|
||||
}
|
||||
else if (crew_delta < 0)
|
||||
{
|
||||
if (ElementPtr->crew_level > (BYTE)-crew_delta)
|
||||
ElementPtr->crew_level += (BYTE)crew_delta;
|
||||
if (ElementPtr->crew_level > (COUNT)-crew_delta)
|
||||
ElementPtr->crew_level += crew_delta;
|
||||
else
|
||||
{
|
||||
crew_delta = -(SIZE)ElementPtr->crew_level;
|
||||
|
||||
@@ -73,8 +73,14 @@ new_ship (PELEMENT DeadShipPtr)
|
||||
DeadStarShipPtr->RaceDescPtr->ship_info.crew_level;
|
||||
if (DeadStarShipPtr->special_counter)
|
||||
{
|
||||
// We've just warped out. new_ship() will still be called
|
||||
// a few times, to process the trace left behind (I assume).
|
||||
StopMusic ();
|
||||
DeadStarShipPtr->RaceDescPtr->ship_info.crew_level = 0;
|
||||
|
||||
// Even after much investigation, I could find no purpose for
|
||||
// the next line, but with the crew management changes I need
|
||||
// it not to be here. - SvdB
|
||||
// DeadStarShipPtr->RaceDescPtr->ship_info.crew_level = 0;
|
||||
}
|
||||
|
||||
MusicStarted = FALSE;
|
||||
@@ -144,6 +150,9 @@ new_ship (PELEMENT DeadShipPtr)
|
||||
SetElementStarShip (DeadShipPtr, 0);
|
||||
RestartMusic = OpponentAlive (DeadStarShipPtr);
|
||||
|
||||
if (DeadStarShipPtr->RaceDescPtr->uninit_func != NULL)
|
||||
(*DeadStarShipPtr->RaceDescPtr->uninit_func) (
|
||||
DeadStarShipPtr->RaceDescPtr);
|
||||
free_ship (DeadStarShipPtr, TRUE);
|
||||
UnbatchGraphics ();
|
||||
if (GetNextStarShip (DeadStarShipPtr,
|
||||
|
||||
@@ -1271,7 +1271,8 @@ resetCrewBattle(void) {
|
||||
COUNT delta;
|
||||
CONTEXT OldContext;
|
||||
|
||||
if (!(GLOBAL (CurrentActivity) & IN_BATTLE))
|
||||
if (!(GLOBAL (CurrentActivity) & IN_BATTLE) ||
|
||||
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
||||
return;
|
||||
|
||||
StarShipPtr = findPlayerShip (GOOD_GUY);
|
||||
|
||||
Reference in New Issue
Block a user