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:
|
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
|
- Debugging function to add crew during battle. - SvdB
|
||||||
- More documentation - SvdB.
|
- More documentation - SvdB.
|
||||||
- RMPLIFIED PRECURSOR BOMB is now AMPLIFIED, from Vorn (bug #812)
|
- RMPLIFIED PRECURSOR BOMB is now AMPLIFIED, from Vorn (bug #812)
|
||||||
|
|||||||
@@ -66,19 +66,6 @@ ProcessInput (void)
|
|||||||
JournalInput (InputState);
|
JournalInput (InputState);
|
||||||
#endif /* CREATE_JOURNAL */
|
#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;
|
CyborgDescPtr->ship_input_state = 0;
|
||||||
if (CyborgDescPtr->RaceDescPtr->ship_info.crew_level)
|
if (CyborgDescPtr->RaceDescPtr->ship_info.crew_level)
|
||||||
{
|
{
|
||||||
@@ -94,12 +81,14 @@ if ((InputState & DEVICE_BUTTON3)
|
|||||||
if (InputState & BATTLE_SPECIAL)
|
if (InputState & BATTLE_SPECIAL)
|
||||||
CyborgDescPtr->ship_input_state |= SPECIAL;
|
CyborgDescPtr->ship_input_state |= SPECIAL;
|
||||||
|
|
||||||
if (CanRunAway && cur_player == 0 && (InputState & BATTLE_ESCAPE))
|
if (CanRunAway && cur_player == 0 &&
|
||||||
|
(InputState & BATTLE_ESCAPE))
|
||||||
{
|
{
|
||||||
ELEMENTPTR ElementPtr;
|
ELEMENTPTR ElementPtr;
|
||||||
|
|
||||||
LockElement (StarShipPtr->hShip, &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->life_span == NORMAL_LIFE
|
||||||
&& !(ElementPtr->state_flags & FINITE_LIFE)
|
&& !(ElementPtr->state_flags & FINITE_LIFE)
|
||||||
&& ElementPtr->mass_points != MAX_SHIP_MASS * 10
|
&& ElementPtr->mass_points != MAX_SHIP_MASS * 10
|
||||||
@@ -118,8 +107,10 @@ if ((InputState & DEVICE_BUTTON3)
|
|||||||
~(SHIP_AT_MAX_SPEED | SHIP_BEYOND_MAX_SPEED);
|
~(SHIP_AT_MAX_SPEED | SHIP_BEYOND_MAX_SPEED);
|
||||||
|
|
||||||
SetPrimColor (&DisplayArray[ElementPtr->PrimIndex],
|
SetPrimColor (&DisplayArray[ElementPtr->PrimIndex],
|
||||||
BUILD_COLOR (MAKE_RGB15 (0xB, 0x00, 0x00), 0x2E));
|
BUILD_COLOR (
|
||||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMPFILL_PRIM);
|
MAKE_RGB15 (0xB, 0x00, 0x00), 0x2E));
|
||||||
|
SetPrimType (&DisplayArray[
|
||||||
|
ElementPtr->PrimIndex], STAMPFILL_PRIM);
|
||||||
|
|
||||||
CyborgDescPtr->ship_input_state = 0;
|
CyborgDescPtr->ship_input_state = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -383,14 +383,16 @@ NameCaptain (PQUEUE pQueue, STARSHIPPTR StarShipPtr)
|
|||||||
return name_index;
|
return name_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// crew_level can be set to INFINITE_FLEET for a ship which is to
|
||||||
|
// represent an infinite number of ships.
|
||||||
HSTARSHIP
|
HSTARSHIP
|
||||||
CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, BYTE crew_level)
|
CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, COUNT crew_level)
|
||||||
{
|
{
|
||||||
HSTARSHIP hStarShip, hBuiltShip;
|
HSTARSHIP hStarShip, hBuiltShip;
|
||||||
SHIP_FRAGMENTPTR TemplatePtr;
|
SHIP_FRAGMENTPTR TemplatePtr;
|
||||||
|
|
||||||
if ((hStarShip = GetStarShipFromIndex (&GLOBAL (avail_race_q),
|
hStarShip = GetStarShipFromIndex (&GLOBAL (avail_race_q), shipIndex);
|
||||||
shipIndex)) == 0)
|
if (hStarShip == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
|
|||||||
@@ -45,8 +45,8 @@
|
|||||||
|
|
||||||
extern HSTARSHIP Build (PQUEUE pQueue, DWORD RaceResIndex, COUNT
|
extern HSTARSHIP Build (PQUEUE pQueue, DWORD RaceResIndex, COUNT
|
||||||
which_player, BYTE captains_name_index);
|
which_player, BYTE captains_name_index);
|
||||||
extern HSTARSHIP CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue, BYTE
|
extern HSTARSHIP CloneShipFragment (COUNT shipIndex, PQUEUE pDstQueue,
|
||||||
crew_level);
|
COUNT crew_level);
|
||||||
extern HSTARSHIP GetStarShipFromIndex (PQUEUE pShipQ, COUNT Index);
|
extern HSTARSHIP GetStarShipFromIndex (PQUEUE pShipQ, COUNT Index);
|
||||||
extern BYTE NameCaptain (PQUEUE pQueue, STARSHIPPTR StarShipPtr);
|
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 InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect);
|
||||||
extern void DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta,
|
extern void DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta,
|
||||||
SIZE energy_delta);
|
SIZE energy_delta);
|
||||||
extern void DrawBattleCrewAmount (STARSHIPPTR StarShipPtr,
|
extern void DrawBattleCrewAmount (STARSHIPPTR StarShipPtr);
|
||||||
BOOLEAN CountPlayer);
|
|
||||||
|
|
||||||
#endif /* _BUILD_H */
|
#endif /* _BUILD_H */
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ typedef struct element
|
|||||||
|
|
||||||
ELEMENT_FLAGS state_flags;
|
ELEMENT_FLAGS state_flags;
|
||||||
COUNT life_span;
|
COUNT life_span;
|
||||||
BYTE crew_level, mass_points;
|
COUNT crew_level;
|
||||||
|
BYTE mass_points;
|
||||||
BYTE turn_wait, thrust_wait;
|
BYTE turn_wait, thrust_wait;
|
||||||
VELOCITY_DESC velocity;
|
VELOCITY_DESC velocity;
|
||||||
INTERSECT_CONTROL IntersectControl;
|
INTERSECT_CONTROL IntersectControl;
|
||||||
|
|||||||
+16
-36
@@ -130,57 +130,37 @@ BuildBattle (COUNT which_player)
|
|||||||
hBuiltShip = Build (&race_q[which_player],
|
hBuiltShip = Build (&race_q[which_player],
|
||||||
GET_RACE_ID (FragPtr) == SAMATRA_SHIP ?
|
GET_RACE_ID (FragPtr) == SAMATRA_SHIP ?
|
||||||
SAMATRA_RES_INDEX : FragPtr->RaceResIndex,
|
SAMATRA_RES_INDEX : FragPtr->RaceResIndex,
|
||||||
1 << which_player,
|
1 << which_player, StarShipCaptain (FragPtr));
|
||||||
StarShipCaptain (FragPtr));
|
|
||||||
if (hBuiltShip)
|
if (hBuiltShip)
|
||||||
{
|
{
|
||||||
BuiltShipPtr = LockStarShip (
|
BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip);
|
||||||
&race_q[which_player],
|
|
||||||
hBuiltShip
|
|
||||||
);
|
|
||||||
BuiltShipPtr->captains_name_index =
|
BuiltShipPtr->captains_name_index =
|
||||||
StarShipCaptain (BuiltShipPtr);
|
StarShipCaptain (BuiltShipPtr);
|
||||||
BuiltShipPtr->cur_status_flags =
|
BuiltShipPtr->cur_status_flags =
|
||||||
StarShipPlayer (BuiltShipPtr);
|
StarShipPlayer (BuiltShipPtr);
|
||||||
if (FragPtr->ShipInfo.crew_level != (BYTE)~0)
|
if (FragPtr->ShipInfo.crew_level != INFINITE_FLEET)
|
||||||
BuiltShipPtr->special_counter = FragPtr->ShipInfo.crew_level;
|
BuiltShipPtr->special_counter = FragPtr->ShipInfo.crew_level;
|
||||||
else /* if infinite ships */
|
else /* if infinite ships */
|
||||||
BuiltShipPtr->special_counter = FragPtr->ShipInfo.max_crew;
|
BuiltShipPtr->special_counter = FragPtr->ShipInfo.max_crew;
|
||||||
BuiltShipPtr->RaceDescPtr =
|
BuiltShipPtr->RaceDescPtr = (RACE_DESCPTR)&FragPtr->ShipInfo;
|
||||||
(RACE_DESCPTR)&FragPtr->ShipInfo;
|
|
||||||
|
|
||||||
UnlockStarShip (
|
UnlockStarShip (&race_q[which_player], hBuiltShip);
|
||||||
&race_q[which_player],
|
|
||||||
hBuiltShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UnlockStarShip (pQueue, hStarShip);
|
UnlockStarShip (pQueue, hStarShip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which_player == 0
|
if (which_player == 0
|
||||||
&& (hBuiltShip = Build (&race_q[0],
|
&& (hBuiltShip = Build (&race_q[0], SIS_RES_INDEX, GOOD_GUY, 0)))
|
||||||
SIS_RES_INDEX, GOOD_GUY, 0)))
|
|
||||||
{
|
{
|
||||||
BuiltShipPtr = LockStarShip (
|
BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip);
|
||||||
&race_q[0],
|
BuiltShipPtr->captains_name_index = StarShipCaptain (BuiltShipPtr);
|
||||||
hBuiltShip
|
BuiltShipPtr->cur_status_flags = StarShipPlayer (BuiltShipPtr);
|
||||||
);
|
BuiltShipPtr->special_counter = 0;
|
||||||
BuiltShipPtr->captains_name_index =
|
// Crew will be copied directly from
|
||||||
StarShipCaptain (BuiltShipPtr);
|
// GLOBAL_SIS (CrewEnlisted) later.
|
||||||
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->energy_counter = MAX_ENERGY_SIZE;
|
BuiltShipPtr->energy_counter = MAX_ENERGY_SIZE;
|
||||||
UnlockStarShip (
|
UnlockStarShip (&race_q[0], hBuiltShip);
|
||||||
&race_q[0],
|
|
||||||
hBuiltShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,7 +272,8 @@ InitEncounter (void)
|
|||||||
STARSHIPPTR StarShipPtr;
|
STARSHIPPTR StarShipPtr;
|
||||||
|
|
||||||
StarShipPtr = LockStarShip (&race_q[1], hStarShip);
|
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);
|
hNextShip = _GetSuccLink (StarShipPtr);
|
||||||
else /* if infinite ships */
|
else /* if infinite ships */
|
||||||
hNextShip = hStarShip;
|
hNextShip = hStarShip;
|
||||||
@@ -311,8 +292,7 @@ InitEncounter (void)
|
|||||||
s.origin.y = SINE (angle, radius);
|
s.origin.y = SINE (angle, radius);
|
||||||
}
|
}
|
||||||
s.frame = SetAbsFrameIndex (
|
s.frame = SetAbsFrameIndex (
|
||||||
StarShipPtr->RaceDescPtr->ship_info.icons, 0
|
StarShipPtr->RaceDescPtr->ship_info.icons, 0);
|
||||||
);
|
|
||||||
GetFrameRect (s.frame, &r);
|
GetFrameRect (s.frame, &r);
|
||||||
s.origin.x += (SIS_SCREEN_WIDTH >> 1) - (r.extent.width >> 1);
|
s.origin.x += (SIS_SCREEN_WIDTH >> 1) - (r.extent.width >> 1);
|
||||||
s.origin.y += (SIS_SCREEN_HEIGHT >> 1) - (r.extent.height >> 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++);
|
ship_ref = MAKE_RESOURCE (rp++, rt, ri++);
|
||||||
else if (i == num_ships - 2)
|
else if (i == num_ships - 2)
|
||||||
ship_ref = YEHAT_SHIP_INDEX;
|
ship_ref = YEHAT_SHIP_INDEX;
|
||||||
else
|
else /* (i == num_ships - 1) */
|
||||||
ship_ref = PROBE_RES_INDEX;
|
ship_ref = PROBE_RES_INDEX;
|
||||||
hStarShip = Build (&GLOBAL (avail_race_q), ship_ref, 0, 0);
|
hStarShip = Build (&GLOBAL (avail_race_q), ship_ref, 0, 0);
|
||||||
if (hStarShip)
|
if (hStarShip)
|
||||||
@@ -190,6 +190,7 @@ InitSIS (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Ur-Quan probe.
|
||||||
load_ship ((STARSHIPPTR)FragPtr, FALSE);
|
load_ship ((STARSHIPPTR)FragPtr, FALSE);
|
||||||
FragPtr->ShipInfo = FragPtr->RaceDescPtr->ship_info;
|
FragPtr->ShipInfo = FragPtr->RaceDescPtr->ship_info;
|
||||||
FragPtr->RaceDescPtr->ship_info.melee_icon = 0;
|
FragPtr->RaceDescPtr->ship_info.melee_icon = 0;
|
||||||
|
|||||||
@@ -210,6 +210,11 @@ START_GAME_STATE
|
|||||||
*/
|
*/
|
||||||
ADD_GAME_STATE (PLANETARY_LANDING, 1)
|
ADD_GAME_STATE (PLANETARY_LANDING, 1)
|
||||||
ADD_GAME_STATE (PLANETARY_CHANGE, 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 */
|
/* Spathi states */
|
||||||
ADD_GAME_STATE (SPATHI_VISITS, 3)
|
ADD_GAME_STATE (SPATHI_VISITS, 3)
|
||||||
@@ -741,6 +746,14 @@ START_GAME_STATE
|
|||||||
ADD_GAME_STATE (UMGAH_MENTIONED_TRICKS, 2)
|
ADD_GAME_STATE (UMGAH_MENTIONED_TRICKS, 2)
|
||||||
|
|
||||||
ADD_GAME_STATE (BOMB_CARRIER, 1)
|
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_MANNER, 1)
|
||||||
ADD_GAME_STATE (THRADD_INTRO, 2)
|
ADD_GAME_STATE (THRADD_INTRO, 2)
|
||||||
ADD_GAME_STATE (THRADD_DEMEANOR, 3)
|
ADD_GAME_STATE (THRADD_DEMEANOR, 3)
|
||||||
|
|||||||
@@ -227,8 +227,8 @@ FoundHome:
|
|||||||
{
|
{
|
||||||
if (Index <= LONIBBLE (EncounterMakeup[BestIndex])
|
if (Index <= LONIBBLE (EncounterMakeup[BestIndex])
|
||||||
|| (COUNT)TFB_Random () % 100 < 50)
|
|| (COUNT)TFB_Random () % 100 < 50)
|
||||||
CloneShipFragment (BestIndex, &GLOBAL (npc_built_ship_q),
|
CloneShipFragment (BestIndex,
|
||||||
0);
|
&GLOBAL (npc_built_ship_q), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
PutGroupInfo (0L, ++which_group);
|
PutGroupInfo (0L, ++which_group);
|
||||||
@@ -261,16 +261,14 @@ FlushGroupInfo (GROUP_HEADER *pGH, DWORD offset, BYTE which_group, PVOID fp)
|
|||||||
for (hStarShip = GetHeadLink (&temp_q);
|
for (hStarShip = GetHeadLink (&temp_q);
|
||||||
hStarShip; hStarShip = hNextShip)
|
hStarShip; hStarShip = hNextShip)
|
||||||
{
|
{
|
||||||
BYTE crew_level;
|
COUNT crew_level;
|
||||||
|
|
||||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
&temp_q, hStarShip);
|
&temp_q, hStarShip);
|
||||||
hNextShip = _GetSuccLink (FragPtr);
|
hNextShip = _GetSuccLink (FragPtr);
|
||||||
crew_level = FragPtr->ShipInfo.crew_level;
|
crew_level = FragPtr->ShipInfo.crew_level;
|
||||||
which_group = GET_GROUP_ID (FragPtr);
|
which_group = GET_GROUP_ID (FragPtr);
|
||||||
UnlockStarShip (
|
UnlockStarShip (&temp_q, hStarShip);
|
||||||
&temp_q, hStarShip
|
|
||||||
);
|
|
||||||
|
|
||||||
if (crew_level == 0)
|
if (crew_level == 0)
|
||||||
{
|
{
|
||||||
@@ -590,9 +588,7 @@ GetGroupInfo (DWORD offset, BYTE which_group)
|
|||||||
NAME_OFFSET + NUM_CAPTAINS_NAMES + 1;
|
NAME_OFFSET + NUM_CAPTAINS_NAMES + 1;
|
||||||
OwnStarShip (FragPtr, BAD_GUY, captains_name_index);
|
OwnStarShip (FragPtr, BAD_GUY, captains_name_index);
|
||||||
}
|
}
|
||||||
UnlockStarShip (
|
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||||
&GLOBAL (npc_built_ship_q), hStarShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -631,6 +627,8 @@ PutGroupInfo (DWORD offset, BYTE which_group)
|
|||||||
GH.GroupOffset[0] = 0;
|
GH.GroupOffset[0] = 0;
|
||||||
SeekStateFile (fp, offset, SEEK_SET);
|
SeekStateFile (fp, offset, SEEK_SET);
|
||||||
WriteStateFile (&GH, sizeof (GH), 1, fp);
|
WriteStateFile (&GH, sizeof (GH), 1, fp);
|
||||||
|
// XXX: It seems that GH is not completely initialised.
|
||||||
|
// Some garbage is saved. -- SvdB
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which_group)
|
if (which_group)
|
||||||
|
|||||||
@@ -251,10 +251,7 @@ check_hyperspace_encounter (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UnlockStarShip (
|
UnlockStarShip (&GLOBAL (avail_race_q), hStarShip);
|
||||||
&GLOBAL (avail_race_q),
|
|
||||||
hStarShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_GAME_STATE (USED_BROADCASTER, 0);
|
SET_GAME_STATE (USED_BROADCASTER, 0);
|
||||||
@@ -952,8 +949,7 @@ AddEncounterElement (ENCOUNTERPTR EncounterPtr,
|
|||||||
|
|
||||||
|
|
||||||
EncounterPtr->SD.Index = MAKE_BYTE (
|
EncounterPtr->SD.Index = MAKE_BYTE (
|
||||||
NumShips, HINIBBLE (EncounterPtr->SD.Index)
|
NumShips, HINIBBLE (EncounterPtr->SD.Index));
|
||||||
);
|
|
||||||
for (i = 0; i < NumShips; ++i)
|
for (i = 0; i < NumShips; ++i)
|
||||||
{
|
{
|
||||||
HSTARSHIP hStarShip;
|
HSTARSHIP hStarShip;
|
||||||
|
|||||||
+22
-8
@@ -205,7 +205,19 @@ UninitShips (void)
|
|||||||
for (i = 0; i < NUM_PLAYERS; ++i)
|
for (i = 0; i < NUM_PLAYERS; ++i)
|
||||||
SPtr[i] = 0;
|
SPtr[i] = 0;
|
||||||
|
|
||||||
|
// Count the crew floating in space.
|
||||||
crew_retrieved = 0;
|
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 ();
|
for (hElement = GetHeadElement ();
|
||||||
hElement != 0; hElement = hNextElement)
|
hElement != 0; hElement = hNextElement)
|
||||||
{
|
{
|
||||||
@@ -214,14 +226,20 @@ UninitShips (void)
|
|||||||
|
|
||||||
LockElement (hElement, &ElementPtr);
|
LockElement (hElement, &ElementPtr);
|
||||||
hNextElement = GetSuccElement (ElementPtr);
|
hNextElement = GetSuccElement (ElementPtr);
|
||||||
if (ElementPtr->state_flags & CREW_OBJECT)
|
if ((ElementPtr->state_flags & PLAYER_SHIP)
|
||||||
++crew_retrieved;
|
|
||||||
else if ((ElementPtr->state_flags & PLAYER_SHIP)
|
|
||||||
|| ElementPtr->death_func == new_ship)
|
|| ElementPtr->death_func == new_ship)
|
||||||
{
|
{
|
||||||
STARSHIPPTR StarShipPtr;
|
STARSHIPPTR StarShipPtr;
|
||||||
|
|
||||||
GetElementStarShip (ElementPtr, &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->ShipFacing =
|
||||||
StarShipPtr->RaceDescPtr->ship_info.var2;
|
StarShipPtr->RaceDescPtr->ship_info.var2;
|
||||||
StarShipPtr->special_counter =
|
StarShipPtr->special_counter =
|
||||||
@@ -243,14 +261,9 @@ UninitShips (void)
|
|||||||
for (i = NUM_PLAYERS - 1; i >= 0; --i)
|
for (i = NUM_PLAYERS - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
if (SPtr[i])
|
if (SPtr[i])
|
||||||
{
|
|
||||||
if (SPtr[i]->special_counter)
|
|
||||||
SPtr[i]->special_counter += crew_retrieved;
|
|
||||||
|
|
||||||
GetEncounterStarShip (SPtr[i], i);
|
GetEncounterStarShip (SPtr[i], i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (LOBYTE (GLOBAL (CurrentActivity)) != IN_ENCOUNTER)
|
if (LOBYTE (GLOBAL (CurrentActivity)) != IN_ENCOUNTER)
|
||||||
{
|
{
|
||||||
@@ -262,3 +275,4 @@ UninitShips (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+40
-3
@@ -74,6 +74,13 @@ LoadShipQueue (DECODE_REF fh, PQUEUE pQueue, BOOLEAN MakeQ)
|
|||||||
Ptr = ((PBYTE)&FragPtr->ShipInfo) - Offset;
|
Ptr = ((PBYTE)&FragPtr->ShipInfo) - Offset;
|
||||||
cread ((PBYTE)Ptr,
|
cread ((PBYTE)Ptr,
|
||||||
((PBYTE)&FragPtr->ShipInfo.race_strings) - Ptr, 1, fh);
|
((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)
|
if (Offset == 0)
|
||||||
{
|
{
|
||||||
EXTENDED_SHIP_FRAGMENTPTR ExtFragPtr;
|
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
|
static BOOLEAN
|
||||||
LoadSummary (uio_Stream *in_fp)
|
LoadSummary (uio_Stream *in_fp)
|
||||||
{
|
{
|
||||||
@@ -211,7 +248,8 @@ LoadGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
|||||||
hEncounter = AllocEncounter ();
|
hEncounter = AllocEncounter ();
|
||||||
LockEncounter (hEncounter, &EncounterPtr);
|
LockEncounter (hEncounter, &EncounterPtr);
|
||||||
|
|
||||||
cread ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
//cread ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||||
|
LoadEncounter(EncounterPtr, fh);
|
||||||
EncounterPtr->hElement = 0;
|
EncounterPtr->hElement = 0;
|
||||||
NumShips = LONIBBLE (EncounterPtr->SD.Index);
|
NumShips = LONIBBLE (EncounterPtr->SD.Index);
|
||||||
for (i = 0; i < NumShips; ++i)
|
for (i = 0; i < NumShips; ++i)
|
||||||
@@ -223,8 +261,7 @@ LoadGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
|||||||
&GLOBAL (avail_race_q),
|
&GLOBAL (avail_race_q),
|
||||||
EncounterPtr->SD.ShipList[i].var1);
|
EncounterPtr->SD.ShipList[i].var1);
|
||||||
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
TemplatePtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
&GLOBAL (avail_race_q), hStarShip
|
&GLOBAL (avail_race_q), hStarShip);
|
||||||
);
|
|
||||||
EncounterPtr->SD.ShipList[i].race_strings =
|
EncounterPtr->SD.ShipList[i].race_strings =
|
||||||
TemplatePtr->ShipInfo.race_strings;
|
TemplatePtr->ShipInfo.race_strings;
|
||||||
EncounterPtr->SD.ShipList[i].icons =
|
EncounterPtr->SD.ShipList[i].icons =
|
||||||
|
|||||||
+18
-13
@@ -110,7 +110,8 @@ DoGetMelee (GETMELEE_STATE *gms)
|
|||||||
|
|
||||||
if (select)
|
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;
|
GLOBAL (CurrentActivity) &= ~CHECK_ABORT;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -171,14 +172,17 @@ ChangeSelection:
|
|||||||
for (gms->hBattleShip = GetHeadLink (&race_q[which_player]);
|
for (gms->hBattleShip = GetHeadLink (&race_q[which_player]);
|
||||||
gms->hBattleShip != 0; gms->hBattleShip = hNextShip)
|
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)
|
if (StarShipPtr->RaceResIndex && ship_index-- == 0)
|
||||||
{
|
{
|
||||||
UnlockStarShip (&race_q[which_player], gms->hBattleShip);
|
UnlockStarShip (&race_q[which_player],
|
||||||
|
gms->hBattleShip);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
hNextShip = _GetSuccLink (StarShipPtr);
|
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]);
|
for (gms->hBattleShip = GetHeadLink (&race_q[which_player]);
|
||||||
gms->hBattleShip != 0; gms->hBattleShip = hNextShip)
|
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)
|
if (StarShipPtr->ShipFacing == ship_index)
|
||||||
{
|
{
|
||||||
hNextShip = gms->hBattleShip;
|
hNextShip = gms->hBattleShip;
|
||||||
@@ -272,16 +277,15 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
t.pStr = buf;
|
t.pStr = buf;
|
||||||
t.CharCount = (COUNT)~0;
|
t.CharCount = (COUNT)~0;
|
||||||
SetContextFont (TinyFont);
|
SetContextFont (TinyFont);
|
||||||
SetContextForeGroundColor (BUILD_COLOR (
|
SetContextForeGroundColor (
|
||||||
MAKE_RGB15 (0x13, 0x00, 0x00), 0x2C));
|
BUILD_COLOR (MAKE_RGB15 (0x13, 0x00, 0x00), 0x2C));
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetContext (SpaceContext);
|
SetContext (SpaceContext);
|
||||||
|
|
||||||
s.origin.x = PICK_X_OFFS - 3;
|
s.origin.x = PICK_X_OFFS - 3;
|
||||||
s.origin.y = PICK_Y_OFFS - 9
|
s.origin.y = PICK_Y_OFFS - 9 + ((1 - which_player) * PICK_SIDE_OFFS);
|
||||||
+ ((1 - which_player) * PICK_SIDE_OFFS);
|
|
||||||
|
|
||||||
DrawStamp (&s);
|
DrawStamp (&s);
|
||||||
|
|
||||||
@@ -299,11 +303,13 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
UnlockMutex (GraphicsLock);
|
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
|
do
|
||||||
{
|
{
|
||||||
UpdateInputState ();
|
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)
|
if (PressState)
|
||||||
{
|
{
|
||||||
PressState = ButtonState;
|
PressState = ButtonState;
|
||||||
@@ -323,8 +329,7 @@ GetMeleeStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
BYTE fade_buf[] = {FadeAllToColor};
|
BYTE fade_buf[] = {FadeAllToColor};
|
||||||
|
|
||||||
SleepThreadUntil (XFormColorMap
|
SleepThreadUntil (XFormColorMap
|
||||||
((COLORMAPPTR) fade_buf, ONE_SECOND / 2)
|
((COLORMAPPTR) fade_buf, ONE_SECOND / 2) + ONE_SECOND / 60);
|
||||||
+ ONE_SECOND / 60);
|
|
||||||
FlushColorXForms ();
|
FlushColorXForms ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-17
@@ -197,8 +197,7 @@ ChangeSelection:
|
|||||||
|
|
||||||
locString = SetAbsStringTableIndex (
|
locString = SetAbsStringTableIndex (
|
||||||
StarShipPtr->RaceDescPtr->ship_info.race_strings,
|
StarShipPtr->RaceDescPtr->ship_info.race_strings,
|
||||||
StarShipPtr->captains_name_index
|
StarShipPtr->captains_name_index);
|
||||||
);
|
|
||||||
t.pStr = (UNICODE *)GetStringAddress (locString);
|
t.pStr = (UNICODE *)GetStringAddress (locString);
|
||||||
t.CharCount = GetStringLength (locString);
|
t.CharCount = GetStringLength (locString);
|
||||||
crew_level = StarShipPtr->RaceDescPtr->ship_info.crew_level;
|
crew_level = StarShipPtr->RaceDescPtr->ship_info.crew_level;
|
||||||
@@ -206,7 +205,8 @@ ChangeSelection:
|
|||||||
}
|
}
|
||||||
UnlockStarShip (&race_q[0], hBattleShip);
|
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);
|
font_DrawText (&t);
|
||||||
SetContextForeGroundColor (BLACK_COLOR);
|
SetContextForeGroundColor (BLACK_COLOR);
|
||||||
}
|
}
|
||||||
@@ -227,7 +227,8 @@ ChangeSelection:
|
|||||||
sprintf (buf, "%u", crew_level);
|
sprintf (buf, "%u", crew_level);
|
||||||
else
|
else
|
||||||
sprintf (buf, "%u/%u", crew_level, max_crew);
|
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);
|
font_DrawText (&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,10 +325,12 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
{
|
{
|
||||||
hStarShip = GetHeadLink (&GLOBAL (npc_built_ship_q));
|
hStarShip = GetHeadLink (&GLOBAL (npc_built_ship_q));
|
||||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
&GLOBAL (npc_built_ship_q), hStarShip
|
&GLOBAL (npc_built_ship_q), hStarShip);
|
||||||
);
|
if (FragPtr->ShipInfo.crew_level == INFINITE_FLEET)
|
||||||
if (FragPtr->ShipInfo.crew_level == (BYTE)~0)
|
{
|
||||||
|
// Infinite number of ships.
|
||||||
battle_counter += MAKE_WORD (0, 1);
|
battle_counter += MAKE_WORD (0, 1);
|
||||||
|
}
|
||||||
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -354,7 +357,7 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (pQueue, hStarShip);
|
FragPtr = (SHIP_FRAGMENTPTR)LockStarShip (pQueue, hStarShip);
|
||||||
if (SPtr == LastStarShipPtr)
|
if (SPtr == LastStarShipPtr)
|
||||||
{
|
{
|
||||||
if (FragPtr->ShipInfo.crew_level != (BYTE)~0)
|
if (FragPtr->ShipInfo.crew_level != INFINITE_FLEET)
|
||||||
{
|
{
|
||||||
FragPtr->ShipInfo.crew_level = SPtr->special_counter;
|
FragPtr->ShipInfo.crew_level = SPtr->special_counter;
|
||||||
SPtr->RaceDescPtr = (RACE_DESCPTR)&FragPtr->ShipInfo;
|
SPtr->RaceDescPtr = (RACE_DESCPTR)&FragPtr->ShipInfo;
|
||||||
@@ -391,8 +394,7 @@ GetEncounterStarShip (STARSHIPPTR LastStarShipPtr, COUNT which_player)
|
|||||||
#ifndef TESTING
|
#ifndef TESTING
|
||||||
else if (GLOBAL_SIS (FuelOnBoard) >
|
else if (GLOBAL_SIS (FuelOnBoard) >
|
||||||
RUN_AWAY_FUEL_COST)
|
RUN_AWAY_FUEL_COST)
|
||||||
GLOBAL_SIS (FuelOnBoard) -=
|
GLOBAL_SIS (FuelOnBoard) -= RUN_AWAY_FUEL_COST;
|
||||||
RUN_AWAY_FUEL_COST;
|
|
||||||
else
|
else
|
||||||
GLOBAL_SIS (FuelOnBoard) = 0;
|
GLOBAL_SIS (FuelOnBoard) = 0;
|
||||||
#endif /* TESTING */
|
#endif /* TESTING */
|
||||||
@@ -430,9 +432,7 @@ DrawArmadaPickShip (BOOLEAN draw_salvage_frame, PRECT pPickRect)
|
|||||||
hLastIndex = SetResourceIndex (hResIndex);
|
hLastIndex = SetResourceIndex (hResIndex);
|
||||||
OldContext = SetContext (SpaceContext);
|
OldContext = SetContext (SpaceContext);
|
||||||
|
|
||||||
PickFrame = CaptureDrawable (
|
PickFrame = CaptureDrawable (LoadGraphic (SC2_PICK_PMAP_ANIM));
|
||||||
LoadGraphic (SC2_PICK_PMAP_ANIM)
|
|
||||||
);
|
|
||||||
|
|
||||||
BatchGraphics ();
|
BatchGraphics ();
|
||||||
|
|
||||||
@@ -469,7 +469,8 @@ DrawArmadaPickShip (BOOLEAN draw_salvage_frame, PRECT pPickRect)
|
|||||||
t.align = ALIGN_CENTER;
|
t.align = ALIGN_CENTER;
|
||||||
t.pStr = GLOBAL_SIS (ShipName);
|
t.pStr = GLOBAL_SIS (ShipName);
|
||||||
t.CharCount = (COUNT)~0;
|
t.CharCount = (COUNT)~0;
|
||||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
SetContextForeGroundColor (
|
||||||
|
BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
||||||
SetContextFont (StarConFont);
|
SetContextFont (StarConFont);
|
||||||
font_DrawText (&t);
|
font_DrawText (&t);
|
||||||
|
|
||||||
@@ -485,8 +486,7 @@ SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
|||||||
COUNT ship_index;
|
COUNT ship_index;
|
||||||
|
|
||||||
ship_index = (COUNT)LONIBBLE (
|
ship_index = (COUNT)LONIBBLE (
|
||||||
StarShipPtr->RaceDescPtr->ship_info.var2
|
StarShipPtr->RaceDescPtr->ship_info.var2);
|
||||||
);
|
|
||||||
|
|
||||||
s.origin.x = pick_r.corner.x
|
s.origin.x = pick_r.corner.x
|
||||||
+ (5 + ((ICON_WIDTH + 4)
|
+ (5 + ((ICON_WIDTH + 4)
|
||||||
@@ -516,7 +516,8 @@ SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x12, 0x12, 0x12), 0x17));
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Ship ran away */
|
/* Ship ran away */
|
||||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01));
|
SetContextForeGroundColor (BUILD_COLOR (
|
||||||
|
MAKE_RGB15 (0x00, 0x00, 0x14), 0x01));
|
||||||
DrawFilledStamp (&s);
|
DrawFilledStamp (&s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ GenerateChmmr (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (ILWRATH_SHIP,
|
CloneShipFragment (ILWRATH_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6);
|
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6);
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ GenerateDruuge (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (DRUUGE_SHIP,
|
CloneShipFragment (DRUUGE_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ GenerateIlwrath (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (ILWRATH_SHIP,
|
CloneShipFragment (ILWRATH_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -140,7 +140,8 @@ GenerateMycon (BYTE control)
|
|||||||
if (CurStarDescPtr->Index == MYCON_DEFINED
|
if (CurStarDescPtr->Index == MYCON_DEFINED
|
||||||
|| !GET_GAME_STATE (MYCON_FELL_FOR_AMBUSH))
|
|| !GET_GAME_STATE (MYCON_FELL_FOR_AMBUSH))
|
||||||
CloneShipFragment (MYCON_SHIP,
|
CloneShipFragment (MYCON_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q),
|
||||||
|
INFINITE_FLEET);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
COUNT i;
|
COUNT i;
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ GenerateOrz (BYTE control)
|
|||||||
if (CurStarDescPtr->Index == ORZ_DEFINED)
|
if (CurStarDescPtr->Index == ORZ_DEFINED)
|
||||||
{
|
{
|
||||||
CloneShipFragment (ORZ_SHIP,
|
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);
|
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ GenerateTalkingPet (BYTE control)
|
|||||||
if (!GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES))
|
if (!GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES))
|
||||||
{
|
{
|
||||||
CloneShipFragment (UMGAH_SHIP,
|
CloneShipFragment (UMGAH_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
InitCommunication (UMGAH_CONVERSATION);
|
InitCommunication (UMGAH_CONVERSATION);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ GeneratePkunk (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (PKUNK_SHIP,
|
CloneShipFragment (PKUNK_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -252,7 +252,7 @@ GenerateSamatra (BYTE control)
|
|||||||
if (!GET_GAME_STATE (URQUAN_MESSED_UP))
|
if (!GET_GAME_STATE (URQUAN_MESSED_UP))
|
||||||
CloneShipFragment (!GET_GAME_STATE (KOHR_AH_FRENZY) ?
|
CloneShipFragment (!GET_GAME_STATE (KOHR_AH_FRENZY) ?
|
||||||
URQUAN_SHIP : BLACK_URQUAN_SHIP,
|
URQUAN_SHIP : BLACK_URQUAN_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#define URQUAN_REMNANTS 3
|
#define URQUAN_REMNANTS 3
|
||||||
|
|||||||
@@ -42,9 +42,7 @@ check_old_shofixti (void)
|
|||||||
FLEE | IGNORE_FLAGSHIP | (task & REFORM_GROUP));
|
FLEE | IGNORE_FLAGSHIP | (task & REFORM_GROUP));
|
||||||
SET_GROUP_DEST (FragPtr, 0);
|
SET_GROUP_DEST (FragPtr, 0);
|
||||||
|
|
||||||
UnlockStarShip (
|
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||||
&GLOBAL (npc_built_ship_q), hStarShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,9 +67,7 @@ GenerateShofixti (BYTE control)
|
|||||||
MAKE_WORD (b0, b1), MAKE_WORD (b2, b3)
|
MAKE_WORD (b0, b1), MAKE_WORD (b2, b3)
|
||||||
);
|
);
|
||||||
if (GLOBAL (BattleGroupRef) == 0
|
if (GLOBAL (BattleGroupRef) == 0
|
||||||
|| !GetGroupInfo (
|
|| !GetGroupInfo (GLOBAL (BattleGroupRef), (BYTE)~0))
|
||||||
GLOBAL (BattleGroupRef), (BYTE)~0
|
|
||||||
))
|
|
||||||
{
|
{
|
||||||
if (GLOBAL (BattleGroupRef) == 0)
|
if (GLOBAL (BattleGroupRef) == 0)
|
||||||
GLOBAL (BattleGroupRef) = ~0L;
|
GLOBAL (BattleGroupRef) = ~0L;
|
||||||
@@ -80,8 +76,7 @@ GenerateShofixti (BYTE control)
|
|||||||
&GLOBAL (npc_built_ship_q), 1);
|
&GLOBAL (npc_built_ship_q), 1);
|
||||||
|
|
||||||
GLOBAL (BattleGroupRef) = PutGroupInfo (
|
GLOBAL (BattleGroupRef) = PutGroupInfo (
|
||||||
GLOBAL (BattleGroupRef), 1
|
GLOBAL (BattleGroupRef), 1);
|
||||||
);
|
|
||||||
b0 = LOBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
b0 = LOBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
||||||
b1 = HIBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
b1 = HIBYTE (LOWORD (GLOBAL (BattleGroupRef)));
|
||||||
b2 = LOBYTE (HIWORD (GLOBAL (BattleGroupRef)));
|
b2 = LOBYTE (HIWORD (GLOBAL (BattleGroupRef)));
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ GenerateSpathi (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (SPATHI_SHIP,
|
CloneShipFragment (SPATHI_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ GenerateSupox (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (SUPOX_SHIP,
|
CloneShipFragment (SUPOX_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ GenerateThradd (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (THRADDASH_SHIP,
|
CloneShipFragment (THRADDASH_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ GenerateUtwig (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (UTWIG_SHIP,
|
CloneShipFragment (UTWIG_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ GenerateVUX (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (VUX_SHIP,
|
CloneShipFragment (VUX_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
if (CurStarDescPtr->Index == VUX_DEFINED)
|
if (CurStarDescPtr->Index == VUX_DEFINED)
|
||||||
{
|
{
|
||||||
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7);
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ GenerateYehat (BYTE control)
|
|||||||
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
ReinitQueue (&GLOBAL (npc_built_ship_q));
|
||||||
|
|
||||||
CloneShipFragment (YEHAT_SHIP,
|
CloneShipFragment (YEHAT_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
@@ -51,9 +51,7 @@ check_scout (void)
|
|||||||
SET_GROUP_DEST (FragPtr, 0);
|
SET_GROUP_DEST (FragPtr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
UnlockStarShip (
|
UnlockStarShip (&GLOBAL (npc_built_ship_q), hStarShip);
|
||||||
&GLOBAL (npc_built_ship_q), hStarShip
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +199,7 @@ GenerateZoqFotPik (BYTE control)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CloneShipFragment (ZOQFOTPIK_SHIP,
|
CloneShipFragment (ZOQFOTPIK_SHIP,
|
||||||
&GLOBAL (npc_built_ship_q), (BYTE)~0);
|
&GLOBAL (npc_built_ship_q), INFINITE_FLEET);
|
||||||
|
|
||||||
pSolarSysState->MenuState.Initialized += 2;
|
pSolarSysState->MenuState.Initialized += 2;
|
||||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||||
|
|||||||
+14
-13
@@ -144,8 +144,8 @@ PreProcess (ELEMENTPTR ElementPtr)
|
|||||||
{
|
{
|
||||||
(*ElementPtr->preprocess_func) (ElementPtr);
|
(*ElementPtr->preprocess_func) (ElementPtr);
|
||||||
|
|
||||||
if (((state_flags = ElementPtr->state_flags) & CHANGING)
|
state_flags = ElementPtr->state_flags;
|
||||||
&& CollidingElement (ElementPtr))
|
if ((state_flags & CHANGING) && CollidingElement (ElementPtr))
|
||||||
InitIntersectFrame (ElementPtr);
|
InitIntersectFrame (ElementPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +170,7 @@ PreProcess (ELEMENTPTR ElementPtr)
|
|||||||
--ElementPtr->life_span;
|
--ElementPtr->life_span;
|
||||||
}
|
}
|
||||||
|
|
||||||
ElementPtr->state_flags = (state_flags
|
ElementPtr->state_flags = (state_flags & ~(POST_PROCESS | COLLISION))
|
||||||
& ~(POST_PROCESS | COLLISION))
|
|
||||||
| PRE_PROCESS;
|
| PRE_PROCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -845,7 +844,8 @@ PostProcessQueue (VIEW_STATE view_state, SIZE scroll_x,
|
|||||||
ProcessCollisions (GetHeadElement (), PostElementPtr,
|
ProcessCollisions (GetHeadElement (), PostElementPtr,
|
||||||
MAX_TIME_VALUE, PRE_PROCESS | POST_PROCESS);
|
MAX_TIME_VALUE, PRE_PROCESS | POST_PROCESS);
|
||||||
UnlockElement (hPostElement);
|
UnlockElement (hPostElement);
|
||||||
} while ((hPostElement = hNextElement) != 0);
|
hPostElement = hNextElement;
|
||||||
|
} while (hPostElement != 0);
|
||||||
|
|
||||||
scroll_x = 0;
|
scroll_x = 0;
|
||||||
scroll_y = 0;
|
scroll_y = 0;
|
||||||
@@ -920,20 +920,20 @@ PostProcessQueue (VIEW_STATE view_state, SIZE scroll_x,
|
|||||||
ElementPtr->next.image.frame =
|
ElementPtr->next.image.frame =
|
||||||
#ifdef SAFE
|
#ifdef SAFE
|
||||||
SetAbsFrameIndex (
|
SetAbsFrameIndex (
|
||||||
ElementPtr->next.image.farray
|
ElementPtr->next.image.farray[index],
|
||||||
[index],
|
|
||||||
GetFrameIndex (ElementPtr->next.image.frame));
|
GetFrameIndex (ElementPtr->next.image.frame));
|
||||||
#else /* SAFE */
|
#else /* SAFE */
|
||||||
SetEquFrameIndex (
|
SetEquFrameIndex (
|
||||||
ElementPtr->next.image.farray
|
ElementPtr->next.image.farray[index],
|
||||||
[index],
|
|
||||||
ElementPtr->next.image.frame);
|
ElementPtr->next.image.frame);
|
||||||
#endif /* SAFE */
|
#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
|
// enqueues drawcommand to assign next
|
||||||
// level image as mipmap, needed for trilinear scaling
|
// (smaller) zoom level image as mipmap,
|
||||||
|
// needed for trilinear scaling
|
||||||
|
|
||||||
PFRAME_DESC frame =
|
PFRAME_DESC frame =
|
||||||
SetAbsFrameIndex (
|
SetAbsFrameIndex (
|
||||||
@@ -1027,7 +1027,8 @@ RedrawQueue (BOOLEAN clear)
|
|||||||
{
|
{
|
||||||
BYTE skip_frames;
|
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))
|
&& (skip_frames == 0 || (--nth_frame & 0x00FF) == 0))
|
||||||
{
|
{
|
||||||
nth_frame += skip_frames;
|
nth_frame += skip_frames;
|
||||||
|
|||||||
+42
-8
@@ -57,9 +57,9 @@
|
|||||||
#define FIRES_LEFT (1 << 10)
|
#define FIRES_LEFT (1 << 10)
|
||||||
#define SHIELD_DEFENSE (1 << 11)
|
#define SHIELD_DEFENSE (1 << 11)
|
||||||
#define DONT_CHASE (1 << 12)
|
#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
|
typedef struct captain_stuff
|
||||||
{
|
{
|
||||||
@@ -101,12 +101,24 @@ typedef struct
|
|||||||
{
|
{
|
||||||
UWORD ship_flags;
|
UWORD ship_flags;
|
||||||
BYTE var1, var2;
|
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;
|
BYTE energy_level, max_energy;
|
||||||
POINT loc;
|
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;
|
STRING race_strings;
|
||||||
FRAME icons, melee_icon;
|
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;
|
} SHIP_INFO;
|
||||||
typedef SHIP_INFO *PSHIP_INFO;
|
typedef SHIP_INFO *PSHIP_INFO;
|
||||||
#define SHIP_INFOPTR PSHIP_INFO
|
#define SHIP_INFOPTR PSHIP_INFO
|
||||||
@@ -152,13 +164,22 @@ typedef struct
|
|||||||
BYTE days_left;
|
BYTE days_left;
|
||||||
/* Days left before the fleet reachers 'dest_loc'. */
|
/* Days left before the fleet reachers 'dest_loc'. */
|
||||||
BYTE growth_fract;
|
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;
|
BYTE energy_level, max_energy;
|
||||||
POINT loc;
|
POINT loc;
|
||||||
/* Location of the fleet (center) */
|
/* Location of the fleet (center) */
|
||||||
|
|
||||||
STRING race_strings;
|
STRING race_strings;
|
||||||
|
/* Race specific strings, see doc/devel/racestrings. */
|
||||||
FRAME icons, melee_icon;
|
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;
|
COUNT actual_strength;
|
||||||
/* Measure for the size of the sphere of influence.
|
/* Measure for the size of the sphere of influence.
|
||||||
@@ -195,17 +216,25 @@ typedef struct
|
|||||||
typedef DATA_STUFF *PDATA_STUFF;
|
typedef DATA_STUFF *PDATA_STUFF;
|
||||||
#define DATA_STUFFPTR 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 (PREPROCESS_FUNC) (PELEMENT ElementPtr);
|
||||||
typedef void (POSTPROCESS_FUNC) (PELEMENT ElementPtr);
|
typedef void (POSTPROCESS_FUNC) (PELEMENT ElementPtr);
|
||||||
typedef COUNT (INIT_WEAPON_FUNC) (PELEMENT ElementPtr, HELEMENT Weapon[]);
|
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;
|
SHIP_INFO ship_info _ALIGNED_ANY;
|
||||||
CHARACTERISTIC_STUFF characteristics _ALIGNED_ANY;
|
CHARACTERISTIC_STUFF characteristics _ALIGNED_ANY;
|
||||||
DATA_STUFF ship_data _ALIGNED_ANY;
|
DATA_STUFF ship_data _ALIGNED_ANY;
|
||||||
INTEL_STUFF cyborg_control _ALIGNED_ANY;
|
INTEL_STUFF cyborg_control _ALIGNED_ANY;
|
||||||
|
|
||||||
|
UNINIT_FUNC *uninit_func
|
||||||
|
_ALIGNED_ON(sizeof (UNINIT_FUNC *));
|
||||||
PREPROCESS_FUNC *preprocess_func
|
PREPROCESS_FUNC *preprocess_func
|
||||||
_ALIGNED_ON(sizeof (PREPROCESS_FUNC *));
|
_ALIGNED_ON(sizeof (PREPROCESS_FUNC *));
|
||||||
POSTPROCESS_FUNC *postprocess_func
|
POSTPROCESS_FUNC *postprocess_func
|
||||||
@@ -214,9 +243,8 @@ typedef struct race_desc
|
|||||||
_ALIGNED_ON(sizeof (INIT_WEAPON_FUNC *));
|
_ALIGNED_ON(sizeof (INIT_WEAPON_FUNC *));
|
||||||
|
|
||||||
PVOID CodeRef _ALIGNED_ON(sizeof (PVOID));
|
PVOID CodeRef _ALIGNED_ON(sizeof (PVOID));
|
||||||
} RACE_DESC;
|
};
|
||||||
typedef RACE_DESC *PRACE_DESC;
|
|
||||||
#define RACE_DESCPTR PRACE_DESC
|
|
||||||
|
|
||||||
typedef QUEUE_HANDLE HSTARSHIP;
|
typedef QUEUE_HANDLE HSTARSHIP;
|
||||||
|
|
||||||
@@ -251,6 +279,12 @@ typedef struct
|
|||||||
|
|
||||||
DWORD RaceResIndex;
|
DWORD RaceResIndex;
|
||||||
RACE_DESCPTR RaceDescPtr;
|
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_INFO ShipInfo;
|
||||||
} SHIP_FRAGMENT;
|
} SHIP_FRAGMENT;
|
||||||
typedef SHIP_FRAGMENT *PSHIP_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.
|
// See races.h; look for the enum containing NUM_AVAILABLE_RACES.
|
||||||
cwrite ((PBYTE)&Index, sizeof (Index), 1, fh);
|
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
|
// Write part of FragPtr, starting with FragPtr->ShipInfo for
|
||||||
// GLOBAL(avail_race_q), and FragPtr->RaceDescPtr for other queues.
|
// GLOBAL(avail_race_q), and FragPtr->RaceDescPtr for other queues.
|
||||||
// When FragPtr->RaceDescPtr is saved, it does not actually
|
// 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
|
static void
|
||||||
PrepareSummary (SUMMARY_DESC *summary_desc)
|
PrepareSummary (SUMMARY_DESC *summary_desc)
|
||||||
{
|
{
|
||||||
@@ -259,6 +295,8 @@ SaveProblem (void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function first writes to a memory file, and then writes the whole
|
||||||
|
// lot to the actual save file at once.
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
SaveGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
SaveGame (COUNT which_game, SUMMARY_DESC *summary_desc)
|
||||||
{
|
{
|
||||||
@@ -320,7 +358,8 @@ RetrySave:
|
|||||||
& (START_ENCOUNTER | START_INTERPLANETARY)))
|
& (START_ENCOUNTER | START_INTERPLANETARY)))
|
||||||
PutGroupInfo (0L, (BYTE)~0);
|
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 (ip_location) = pt;
|
||||||
GLOBAL (ShipStamp.frame) = frame;
|
GLOBAL (ShipStamp.frame) = frame;
|
||||||
@@ -330,8 +369,10 @@ RetrySave:
|
|||||||
SaveShipQueue (fh, &GLOBAL (npc_built_ship_q));
|
SaveShipQueue (fh, &GLOBAL (npc_built_ship_q));
|
||||||
SaveShipQueue (fh, &GLOBAL (built_ship_q));
|
SaveShipQueue (fh, &GLOBAL (built_ship_q));
|
||||||
|
|
||||||
|
// Save the number of game events (compressed).
|
||||||
num_links = CountLinks (&GLOBAL (GameClock.event_q));
|
num_links = CountLinks (&GLOBAL (GameClock.event_q));
|
||||||
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
||||||
|
// Save the game events themselves (compressed):
|
||||||
{
|
{
|
||||||
HEVENT hEvent;
|
HEVENT hEvent;
|
||||||
|
|
||||||
@@ -351,7 +392,9 @@ RetrySave:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save the number of encounters (black globes in HS/QS (compressed))
|
||||||
num_links = CountLinks (&GLOBAL (encounter_q));
|
num_links = CountLinks (&GLOBAL (encounter_q));
|
||||||
|
// Save the encounters themselves (compressed):
|
||||||
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
cwrite ((PBYTE)&num_links, sizeof (num_links), 1, fh);
|
||||||
{
|
{
|
||||||
HENCOUNTER hEncounter;
|
HENCOUNTER hEncounter;
|
||||||
@@ -365,6 +408,8 @@ RetrySave:
|
|||||||
LockEncounter (hEncounter, &EncounterPtr);
|
LockEncounter (hEncounter, &EncounterPtr);
|
||||||
hNextEncounter = GetSuccEncounter (EncounterPtr);
|
hNextEncounter = GetSuccEncounter (EncounterPtr);
|
||||||
|
|
||||||
|
//cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||||
|
SaveEncounter(EncounterPtr, fh);
|
||||||
cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
cwrite ((PBYTE)EncounterPtr, sizeof (*EncounterPtr), 1, fh);
|
||||||
|
|
||||||
UnlockEncounter (hEncounter);
|
UnlockEncounter (hEncounter);
|
||||||
@@ -372,10 +417,12 @@ RetrySave:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy the star info file to the memory file (compressed).
|
||||||
fp = OpenStateFile (STARINFO_FILE, "rb");
|
fp = OpenStateFile (STARINFO_FILE, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
flen = LengthStateFile (fp);
|
flen = LengthStateFile (fp);
|
||||||
|
// (DWORD) Write the uncompressed size.
|
||||||
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
||||||
while (flen)
|
while (flen)
|
||||||
{
|
{
|
||||||
@@ -390,10 +437,12 @@ RetrySave:
|
|||||||
CloseStateFile (fp);
|
CloseStateFile (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy the ? groupinfo file into the memory file (compressed).
|
||||||
fp = OpenStateFile (DEFGRPINFO_FILE, "rb");
|
fp = OpenStateFile (DEFGRPINFO_FILE, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
flen = LengthStateFile (fp);
|
flen = LengthStateFile (fp);
|
||||||
|
// (DWORD) Write the uncompressed size.
|
||||||
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
cwrite ((PBYTE)&flen, sizeof (flen), 1, fh);
|
||||||
while (flen)
|
while (flen)
|
||||||
{
|
{
|
||||||
@@ -408,6 +457,7 @@ RetrySave:
|
|||||||
CloseStateFile (fp);
|
CloseStateFile (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy the ? groupinfo file into the memory file (compressed).
|
||||||
fp = OpenStateFile (RANDGRPINFO_FILE, "rb");
|
fp = OpenStateFile (RANDGRPINFO_FILE, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
@@ -426,18 +476,23 @@ RetrySave:
|
|||||||
CloseStateFile (fp);
|
CloseStateFile (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write the current star desc into the memory file (compressed).
|
||||||
cwrite ((PBYTE)&SD, sizeof (SD), 1, fh);
|
cwrite ((PBYTE)&SD, sizeof (SD), 1, fh);
|
||||||
|
|
||||||
flen = cclose (fh);
|
flen = cclose (fh);
|
||||||
|
|
||||||
|
// Write the memory file to the actual savegame file.
|
||||||
sprintf (file, "starcon2.%02u", which_game);
|
sprintf (file, "starcon2.%02u", which_game);
|
||||||
// fprintf (stderr, "'%s' is %lu bytes long\n", file, flen + sizeof (*summary_desc));
|
// fprintf (stderr, "'%s' is %lu bytes long\n", file, flen + sizeof (*summary_desc));
|
||||||
if (flen && (out_fp = (PVOID)res_OpenResFile (saveDir, file, "wb")))
|
if (flen && (out_fp = (PVOID)res_OpenResFile (saveDir, file, "wb")))
|
||||||
{
|
{
|
||||||
PrepareSummary (summary_desc);
|
PrepareSummary (summary_desc);
|
||||||
|
|
||||||
|
// First write the summary.
|
||||||
success = (BOOLEAN)(WriteResFile (
|
success = (BOOLEAN)(WriteResFile (
|
||||||
summary_desc, sizeof (*summary_desc), 1, out_fp) != 0);
|
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,
|
if (success && WriteResFile (mem_lock (h), (COUNT)flen, 1,
|
||||||
out_fp) == 0)
|
out_fp) == 0)
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|||||||
+27
-19
@@ -156,8 +156,7 @@ ship_preprocess (PELEMENT ElementPtr)
|
|||||||
& (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
|
& (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ElementPtr->crew_level =
|
ElementPtr->crew_level = RDPtr->ship_info.crew_level;
|
||||||
(BYTE)RDPtr->ship_info.crew_level;
|
|
||||||
|
|
||||||
if ((ElementPtr->state_flags & BAD_GUY)
|
if ((ElementPtr->state_flags & BAD_GUY)
|
||||||
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||||
@@ -352,20 +351,19 @@ ship_postprocess (PELEMENT ElementPtr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
collision (PELEMENT
|
collision (PELEMENT ElementPtr0, PPOINT pPt0,
|
||||||
ElementPtr0, PPOINT
|
PELEMENT ElementPtr1, PPOINT pPt1)
|
||||||
pPt0, PELEMENT
|
|
||||||
ElementPtr1, PPOINT
|
|
||||||
pPt1)
|
|
||||||
{
|
{
|
||||||
if (!(ElementPtr1->state_flags & FINITE_LIFE))
|
if (!(ElementPtr1->state_flags & FINITE_LIFE))
|
||||||
{
|
{
|
||||||
ElementPtr0->state_flags |= COLLISION;
|
ElementPtr0->state_flags |= COLLISION;
|
||||||
if (GRAVITY_MASS (ElementPtr1->mass_points))
|
if (GRAVITY_MASS (ElementPtr1->mass_points))
|
||||||
{
|
{
|
||||||
|
// Collision with a planet.
|
||||||
SIZE damage;
|
SIZE damage;
|
||||||
|
|
||||||
if ((damage = ElementPtr0->hit_points >> 2) == 0)
|
damage = ElementPtr0->hit_points >> 2;
|
||||||
|
if (damage == 0)
|
||||||
damage = 1;
|
damage = 1;
|
||||||
do_damage ((ELEMENTPTR)ElementPtr0, damage);
|
do_damage ((ELEMENTPTR)ElementPtr0, damage);
|
||||||
|
|
||||||
@@ -380,8 +378,7 @@ collision (PELEMENT
|
|||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
spawn_ship (STARSHIPPTR
|
spawn_ship (STARSHIPPTR StarShipPtr)
|
||||||
StarShipPtr)
|
|
||||||
{
|
{
|
||||||
HELEMENT hShip;
|
HELEMENT hShip;
|
||||||
RACE_DESCPTR RDPtr;
|
RACE_DESCPTR RDPtr;
|
||||||
@@ -399,20 +396,32 @@ spawn_ship (STARSHIPPTR
|
|||||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_ENCOUNTER
|
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_ENCOUNTER
|
||||||
|| LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
|| LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||||
{
|
{
|
||||||
if ((RDPtr->ship_info.crew_level = StarShipPtr->special_counter) >
|
if (StarShipPtr->special_counter == 0)
|
||||||
RDPtr->ship_info.max_crew)
|
{
|
||||||
|
// 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;
|
RDPtr->ship_info.crew_level = RDPtr->ship_info.max_crew;
|
||||||
}
|
}
|
||||||
|
|
||||||
StarShipPtr->energy_counter =
|
StarShipPtr->energy_counter = 0;
|
||||||
StarShipPtr->weapon_counter =
|
StarShipPtr->weapon_counter = 0;
|
||||||
StarShipPtr->special_counter = 0;
|
StarShipPtr->special_counter = 0;
|
||||||
|
|
||||||
if ((hShip = StarShipPtr->hShip) == 0
|
hShip = StarShipPtr->hShip;
|
||||||
&& (hShip = AllocElement ()) != 0)
|
if (hShip == 0)
|
||||||
|
{
|
||||||
|
hShip = AllocElement ();
|
||||||
|
if (hShip != 0)
|
||||||
InsertElement (hShip, GetHeadElement ());
|
InsertElement (hShip, GetHeadElement ());
|
||||||
|
}
|
||||||
|
|
||||||
if ((StarShipPtr->hShip = hShip) != 0)
|
StarShipPtr->hShip = hShip;
|
||||||
|
if (StarShipPtr->hShip != 0)
|
||||||
{
|
{
|
||||||
ELEMENTPTR ShipElementPtr;
|
ELEMENTPTR ShipElementPtr;
|
||||||
|
|
||||||
@@ -450,8 +459,7 @@ spawn_ship (STARSHIPPTR
|
|||||||
--facing;
|
--facing;
|
||||||
|
|
||||||
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
||||||
StarShipPtr->ShipFacing + 1, 0
|
StarShipPtr->ShipFacing + 1, 0);
|
||||||
);
|
|
||||||
StarShipPtr->ShipFacing = facing;
|
StarShipPtr->ShipFacing = facing;
|
||||||
}
|
}
|
||||||
ShipElementPtr->current.image.frame =
|
ShipElementPtr->current.image.frame =
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ static RACE_DESC androsynth_desc =
|
|||||||
FIRES_FORE | SEEKING_WEAPON,
|
FIRES_FORE | SEEKING_WEAPON,
|
||||||
15, /* Super Melee cost */
|
15, /* Super Melee cost */
|
||||||
~0, /* Initial sphere of influence radius */
|
~0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
||||||
@@ -51,6 +51,7 @@ static RACE_DESC androsynth_desc =
|
|||||||
(STRING)ANDROSYNTH_RACE_STRINGS,
|
(STRING)ANDROSYNTH_RACE_STRINGS,
|
||||||
(FRAME)ANDROSYNTH_ICON_MASK_PMAP_ANIM,
|
(FRAME)ANDROSYNTH_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)ANDROSYNTH_MICON_MASK_PMAP_ANIM,
|
(FRAME)ANDROSYNTH_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -96,9 +97,10 @@ static RACE_DESC androsynth_desc =
|
|||||||
LONG_RANGE_WEAPON >> 2,
|
LONG_RANGE_WEAPON >> 2,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -110,7 +112,7 @@ blazer_collision (PELEMENT ElementPtr0, PPOINT pPt0, PELEMENT ElementPtr1, PPOIN
|
|||||||
{
|
{
|
||||||
#define BLAZER_OFFSET 10
|
#define BLAZER_OFFSET 10
|
||||||
BYTE old_offs;
|
BYTE old_offs;
|
||||||
BYTE old_crew_level;
|
COUNT old_crew_level;
|
||||||
COUNT old_life;
|
COUNT old_life;
|
||||||
|
|
||||||
old_crew_level = ElementPtr0->crew_level;
|
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
|
|| StarShipPtr->RaceDescPtr->ship_info.energy_level < MAX_ENERGY / 3
|
||||||
|| ((WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) <= CLOSE_RANGE_WEAPON
|
|| ((WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) <= CLOSE_RANGE_WEAPON
|
||||||
&& lpEvalDesc->ObjectPtr->crew_level > BLAZER_DAMAGE)
|
&& 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))))
|
&& MANEUVERABILITY (&pEnemyStarShip->RaceDescPtr->cyborg_control) > SLOW_SHIP))))
|
||||||
lpEvalDesc->MoveState = ENTICE;
|
lpEvalDesc->MoveState = ENTICE;
|
||||||
}
|
}
|
||||||
@@ -271,7 +273,7 @@ androsynth_intelligence (PELEMENT ShipPtr, PEVALUATE_DESC ObjectsOfConcern, COUN
|
|||||||
|| (lpEvalDesc->which_turn < 16
|
|| (lpEvalDesc->which_turn < 16
|
||||||
&& (WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) > CLOSE_RANGE_WEAPON
|
&& (WEAPON_RANGE (&pEnemyStarShip->RaceDescPtr->cyborg_control) > CLOSE_RANGE_WEAPON
|
||||||
|| lpEvalDesc->ObjectPtr->crew_level <= BLAZER_DAMAGE)
|
|| 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) <=
|
|| MANEUVERABILITY (&pEnemyStarShip->RaceDescPtr->cyborg_control) <=
|
||||||
SLOW_SHIP)))))
|
SLOW_SHIP)))))
|
||||||
StarShipPtr->ship_input_state |= SPECIAL;
|
StarShipPtr->ship_input_state |= SPECIAL;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static RACE_DESC arilou_desc =
|
|||||||
/* FIRES_FORE | */ IMMEDIATE_WEAPON,
|
/* FIRES_FORE | */ IMMEDIATE_WEAPON,
|
||||||
16, /* Super Melee cost */
|
16, /* Super Melee cost */
|
||||||
250 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
250 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
438, 6372,
|
438, 6372,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC arilou_desc =
|
|||||||
(STRING)ARILOU_RACE_STRINGS,
|
(STRING)ARILOU_RACE_STRINGS,
|
||||||
(FRAME)ARILOU_ICON_MASK_PMAP_ANIM,
|
(FRAME)ARILOU_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)ARILOU_MICON_MASK_PMAP_ANIM,
|
(FRAME)ARILOU_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC arilou_desc =
|
|||||||
LASER_RANGE >> 1,
|
LASER_RANGE >> 1,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static RACE_DESC black_urquan_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
30, /* Super Melee cost */
|
30, /* Super Melee cost */
|
||||||
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
6000, 6250,
|
6000, 6250,
|
||||||
@@ -55,6 +55,7 @@ static RACE_DESC black_urquan_desc =
|
|||||||
(STRING)KOHR_AH_RACE_STRINGS,
|
(STRING)KOHR_AH_RACE_STRINGS,
|
||||||
(FRAME)KOHR_AH_ICON_MASK_PMAP_ANIM,
|
(FRAME)KOHR_AH_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)KOHR_AH_MICON_MASK_PMAP_ANIM,
|
(FRAME)KOHR_AH_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -100,9 +101,10 @@ static RACE_DESC black_urquan_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ static RACE_DESC chenjesu_desc =
|
|||||||
FIRES_FORE | SEEKING_SPECIAL | SEEKING_WEAPON,
|
FIRES_FORE | SEEKING_SPECIAL | SEEKING_WEAPON,
|
||||||
28, /* Super Melee cost */
|
28, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -58,6 +58,7 @@ static RACE_DESC chenjesu_desc =
|
|||||||
(STRING)CHENJESU_RACE_STRINGS,
|
(STRING)CHENJESU_RACE_STRINGS,
|
||||||
(FRAME)CHENJESU_ICON_MASK_PMAP_ANIM,
|
(FRAME)CHENJESU_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)CHENJESU_MICON_MASK_PMAP_ANIM,
|
(FRAME)CHENJESU_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -103,9 +104,10 @@ static RACE_DESC chenjesu_desc =
|
|||||||
LONG_RANGE_WEAPON,
|
LONG_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static RACE_DESC chmmr_desc =
|
|||||||
FIRES_FORE | IMMEDIATE_WEAPON | SEEKING_SPECIAL | POINT_DEFENSE,
|
FIRES_FORE | IMMEDIATE_WEAPON | SEEKING_SPECIAL | POINT_DEFENSE,
|
||||||
30, /* Super Melee cost */
|
30, /* Super Melee cost */
|
||||||
0, /* Initial sphere of influence radius */
|
0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -55,6 +55,7 @@ static RACE_DESC chmmr_desc =
|
|||||||
(STRING)CHMMR_RACE_STRINGS,
|
(STRING)CHMMR_RACE_STRINGS,
|
||||||
(FRAME)CHMMR_ICON_MASK_PMAP_ANIM,
|
(FRAME)CHMMR_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)CHMMR_MICON_MASK_PMAP_ANIM,
|
(FRAME)CHMMR_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -100,9 +101,10 @@ static RACE_DESC chmmr_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ static RACE_DESC druuge_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
17, /* Super Melee cost */
|
17, /* Super Melee cost */
|
||||||
1400 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
1400 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
9500, 2792,
|
9500, 2792,
|
||||||
@@ -51,6 +51,7 @@ static RACE_DESC druuge_desc =
|
|||||||
(STRING)DRUUGE_RACE_STRINGS,
|
(STRING)DRUUGE_RACE_STRINGS,
|
||||||
(FRAME)DRUUGE_ICON_MASK_PMAP_ANIM,
|
(FRAME)DRUUGE_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)DRUUGE_MICON_MASK_PMAP_ANIM,
|
(FRAME)DRUUGE_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -96,9 +97,10 @@ static RACE_DESC druuge_desc =
|
|||||||
MISSILE_RANGE,
|
MISSILE_RANGE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static RACE_DESC human_desc =
|
|||||||
FIRES_FORE | SEEKING_WEAPON | POINT_DEFENSE,
|
FIRES_FORE | SEEKING_WEAPON | POINT_DEFENSE,
|
||||||
11, /* Super Melee cost */
|
11, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
1752, 1450,
|
1752, 1450,
|
||||||
@@ -55,6 +55,7 @@ static RACE_DESC human_desc =
|
|||||||
(STRING)HUMAN_RACE_STRINGS,
|
(STRING)HUMAN_RACE_STRINGS,
|
||||||
(FRAME)HUMAN_ICON_MASK_PMAP_ANIM,
|
(FRAME)HUMAN_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)HUMAN_MICON_MASK_PMAP_ANIM,
|
(FRAME)HUMAN_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -100,9 +101,10 @@ static RACE_DESC human_desc =
|
|||||||
LONG_RANGE_WEAPON,
|
LONG_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static RACE_DESC ilwrath_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
10, /* Super Melee cost */
|
10, /* Super Melee cost */
|
||||||
1410 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
1410 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
48, 1700,
|
48, 1700,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC ilwrath_desc =
|
|||||||
(STRING)ILWRATH_RACE_STRINGS,
|
(STRING)ILWRATH_RACE_STRINGS,
|
||||||
(FRAME)ILWRATH_ICON_MASK_PMAP_ANIM,
|
(FRAME)ILWRATH_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)ILWRATH_MICON_MASK_PMAP_ANIM,
|
(FRAME)ILWRATH_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC ilwrath_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ static RACE_DESC samatra_desc =
|
|||||||
/* FIRES_FORE | */ IMMEDIATE_WEAPON | CREW_IMMUNE,
|
/* FIRES_FORE | */ IMMEDIATE_WEAPON | CREW_IMMUNE,
|
||||||
16, /* Super Melee cost */
|
16, /* Super Melee cost */
|
||||||
0, /* Initial sphere of influence radius */
|
0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -58,6 +58,7 @@ static RACE_DESC samatra_desc =
|
|||||||
(STRING)0,
|
(STRING)0,
|
||||||
(FRAME)0,
|
(FRAME)0,
|
||||||
(FRAME)0,
|
(FRAME)0,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -103,9 +104,10 @@ static RACE_DESC samatra_desc =
|
|||||||
0,
|
0,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC melnorme_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
18, /* Super Melee cost */
|
18, /* Super Melee cost */
|
||||||
~0, /* Initial sphere of influence radius */
|
~0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
MAX_X_UNIVERSE >> 1, MAX_Y_UNIVERSE >> 1,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC melnorme_desc =
|
|||||||
(STRING)MELNORME_RACE_STRINGS,
|
(STRING)MELNORME_RACE_STRINGS,
|
||||||
(FRAME)MELNORME_ICON_MASK_PMAP_ANIM,
|
(FRAME)MELNORME_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)MELNORME_MICON_MASK_PMAP_ANIM,
|
(FRAME)MELNORME_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC melnorme_desc =
|
|||||||
PUMPUP_SPEED * PUMPUP_LIFE,
|
PUMPUP_SPEED * PUMPUP_LIFE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ static RACE_DESC mmrnmhrm_desc =
|
|||||||
FIRES_FORE | IMMEDIATE_WEAPON,
|
FIRES_FORE | IMMEDIATE_WEAPON,
|
||||||
19, /* Super Melee cost */
|
19, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -66,6 +66,7 @@ static RACE_DESC mmrnmhrm_desc =
|
|||||||
(STRING)MMRNMHRM_RACE_STRINGS,
|
(STRING)MMRNMHRM_RACE_STRINGS,
|
||||||
(FRAME)MMRNMHRM_ICON_MASK_PMAP_ANIM,
|
(FRAME)MMRNMHRM_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)MMRNMHRM_MICON_MASK_PMAP_ANIM,
|
(FRAME)MMRNMHRM_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -111,9 +112,10 @@ static RACE_DESC mmrnmhrm_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC mycon_desc =
|
|||||||
FIRES_FORE | SEEKING_WEAPON,
|
FIRES_FORE | SEEKING_WEAPON,
|
||||||
21, /* Super Melee cost */
|
21, /* Super Melee cost */
|
||||||
1070 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
1070 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
6392, 2200,
|
6392, 2200,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC mycon_desc =
|
|||||||
(STRING)MYCON_RACE_STRINGS,
|
(STRING)MYCON_RACE_STRINGS,
|
||||||
(FRAME)MYCON_ICON_MASK_PMAP_ANIM,
|
(FRAME)MYCON_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)MYCON_MICON_MASK_PMAP_ANIM,
|
(FRAME)MYCON_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC mycon_desc =
|
|||||||
DISPLAY_TO_WORLD (800),
|
DISPLAY_TO_WORLD (800),
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ static RACE_DESC orz_desc =
|
|||||||
FIRES_FORE | SEEKING_SPECIAL,
|
FIRES_FORE | SEEKING_SPECIAL,
|
||||||
23, /* Super Melee cost */
|
23, /* Super Melee cost */
|
||||||
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
3608, 2637,
|
3608, 2637,
|
||||||
@@ -56,6 +56,7 @@ static RACE_DESC orz_desc =
|
|||||||
(STRING)ORZ_RACE_STRINGS,
|
(STRING)ORZ_RACE_STRINGS,
|
||||||
(FRAME)ORZ_ICON_MASK_PMAP_ANIM,
|
(FRAME)ORZ_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)ORZ_MICON_MASK_PMAP_ANIM,
|
(FRAME)ORZ_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -101,9 +102,10 @@ static RACE_DESC orz_desc =
|
|||||||
MISSILE_SPEED * MISSILE_LIFE,
|
MISSILE_SPEED * MISSILE_LIFE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC pkunk_desc =
|
|||||||
FIRES_FORE | FIRES_LEFT | FIRES_RIGHT,
|
FIRES_FORE | FIRES_LEFT | FIRES_RIGHT,
|
||||||
20, /* Super Melee cost */
|
20, /* Super Melee cost */
|
||||||
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
502, 401,
|
502, 401,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC pkunk_desc =
|
|||||||
(STRING)PKUNK_RACE_STRINGS,
|
(STRING)PKUNK_RACE_STRINGS,
|
||||||
(FRAME)PKUNK_ICON_MASK_PMAP_ANIM,
|
(FRAME)PKUNK_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)PKUNK_MICON_MASK_PMAP_ANIM,
|
(FRAME)PKUNK_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC pkunk_desc =
|
|||||||
CLOSE_RANGE_WEAPON + 1,
|
CLOSE_RANGE_WEAPON + 1,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ static RACE_DESC probe_desc =
|
|||||||
0,
|
0,
|
||||||
0, /* Super Melee cost */
|
0, /* Super Melee cost */
|
||||||
0, /* Initial sphere of influence radius */
|
0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -48,6 +48,7 @@ static RACE_DESC probe_desc =
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
(FRAME)PROBE_MICON_MASK_PMAP_ANIM,
|
(FRAME)PROBE_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -93,9 +94,10 @@ static RACE_DESC probe_desc =
|
|||||||
0,
|
0,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC shofixti_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
5, /* Super Melee cost */
|
5, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC shofixti_desc =
|
|||||||
(STRING)SHOFIXTI_RACE_STRINGS,
|
(STRING)SHOFIXTI_RACE_STRINGS,
|
||||||
(FRAME)SHOFIXTI_ICON_MASK_PMAP_ANIM,
|
(FRAME)SHOFIXTI_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)SHOFIXTI_MICON_MASK_PMAP_ANIM,
|
(FRAME)SHOFIXTI_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC shofixti_desc =
|
|||||||
MISSILE_SPEED * MISSILE_LIFE,
|
MISSILE_SPEED * MISSILE_LIFE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ static RACE_DESC sis_desc =
|
|||||||
0,
|
0,
|
||||||
16, /* Super Melee cost */
|
16, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -60,6 +60,7 @@ static RACE_DESC sis_desc =
|
|||||||
0,
|
0,
|
||||||
(FRAME)SIS_ICON_MASK_PMAP_ANIM,
|
(FRAME)SIS_ICON_MASK_PMAP_ANIM,
|
||||||
0,
|
0,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -105,12 +106,21 @@ static RACE_DESC sis_desc =
|
|||||||
BLASTER_SPEED * BLASTER_LIFE,
|
BLASTER_SPEED * BLASTER_LIFE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
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 BYTE num_trackers = 0;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -445,7 +455,7 @@ sis_battle_preprocess (PELEMENT ElementPtr)
|
|||||||
static void
|
static void
|
||||||
sis_battle_postprocess (PELEMENT ElementPtr)
|
sis_battle_postprocess (PELEMENT ElementPtr)
|
||||||
{
|
{
|
||||||
SIZE crew_delta;
|
// SIZE crew_delta;
|
||||||
STARSHIPPTR StarShipPtr;
|
STARSHIPPTR StarShipPtr;
|
||||||
|
|
||||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||||
@@ -456,6 +466,7 @@ sis_battle_postprocess (PELEMENT ElementPtr)
|
|||||||
spawn_point_defense (ElementPtr);
|
spawn_point_defense (ElementPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (ElementPtr->crew_level > 0
|
if (ElementPtr->crew_level > 0
|
||||||
&& ElementPtr->crew_level < StarShipPtr->RaceDescPtr->ship_info.max_crew
|
&& ElementPtr->crew_level < StarShipPtr->RaceDescPtr->ship_info.max_crew
|
||||||
&& ElementPtr->crew_level != (crew_delta =
|
&& ElementPtr->crew_level != (crew_delta =
|
||||||
@@ -468,6 +479,7 @@ sis_battle_postprocess (PELEMENT ElementPtr)
|
|||||||
else
|
else
|
||||||
DeltaCrew (ElementPtr, StarShipPtr->RaceDescPtr->ship_info.max_crew);
|
DeltaCrew (ElementPtr, StarShipPtr->RaceDescPtr->ship_info.max_crew);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BLASTER_DAMAGE 2
|
#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
|
RACE_DESCPTR
|
||||||
init_sis (void)
|
init_sis (void)
|
||||||
{
|
{
|
||||||
@@ -747,6 +855,8 @@ init_sis (void)
|
|||||||
/* copy initial ship settings to new_sis_desc */
|
/* copy initial ship settings to new_sis_desc */
|
||||||
new_sis_desc = sis_desc;
|
new_sis_desc = sis_desc;
|
||||||
|
|
||||||
|
new_sis_desc.uninit_func = uninit_sis;
|
||||||
|
|
||||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
||||||
{
|
{
|
||||||
for (i = 0; i < NUM_VIEWS; ++i)
|
for (i = 0; i < NUM_VIEWS; ++i)
|
||||||
@@ -773,56 +883,10 @@ init_sis (void)
|
|||||||
new_sis_desc.postprocess_func = sis_battle_postprocess;
|
new_sis_desc.postprocess_func = sis_battle_postprocess;
|
||||||
new_sis_desc.init_weapon_func = initialize_blasters;
|
new_sis_desc.init_weapon_func = initialize_blasters;
|
||||||
new_sis_desc.cyborg_control.intelligence_func =
|
new_sis_desc.cyborg_control.intelligence_func =
|
||||||
(void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern, COUNT
|
(void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern,
|
||||||
ConcernCounter)) sis_intelligence;
|
COUNT ConcernCounter)) sis_intelligence;
|
||||||
|
|
||||||
num_trackers = 0;
|
InitModuleSlots(&new_sis_desc, GLOBAL_SIS (ModuleSlots));
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 3)
|
if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 3)
|
||||||
{
|
{
|
||||||
@@ -830,40 +894,21 @@ init_sis (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new_sis_desc.characteristics.thrust_wait = 0;
|
InitDriveSlots(&new_sis_desc, GLOBAL_SIS (DriveSlots));
|
||||||
for (i = 0; i < NUM_DRIVE_SLOTS; ++i)
|
InitJetSlots(&new_sis_desc, GLOBAL_SIS (JetSlots));
|
||||||
{
|
|
||||||
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.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)
|
if (LOBYTE (GLOBAL (CurrentActivity)) == SUPER_MELEE)
|
||||||
{
|
{
|
||||||
switch (GLOBAL_SIS (JetSlots[i]))
|
new_sis_desc.ship_info.crew_level = new_sis_desc.ship_info.max_crew;
|
||||||
{
|
|
||||||
case TURNING_JETS:
|
|
||||||
new_sis_desc.characteristics.turn_wait -= 2;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 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;
|
new_sis_desc.ship_info.energy_level = new_sis_desc.ship_info.max_energy;
|
||||||
|
|
||||||
RaceDescPtr = &new_sis_desc;
|
RaceDescPtr = &new_sis_desc;
|
||||||
@@ -871,3 +916,12 @@ init_sis (void)
|
|||||||
return (RaceDescPtr);
|
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,
|
SEEKING_WEAPON | CREW_IMMUNE,
|
||||||
17, /* Super Melee cost */
|
17, /* Super Melee cost */
|
||||||
~0, /* Initial sphere of influence radius */
|
~0, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
333, 9812,
|
333, 9812,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC slylandro_desc =
|
|||||||
(STRING)SLYLANDRO_RACE_STRINGS,
|
(STRING)SLYLANDRO_RACE_STRINGS,
|
||||||
(FRAME)SLYLANDRO_ICON_MASK_PMAP_ANIM,
|
(FRAME)SLYLANDRO_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)SLYLANDRO_MICON_MASK_PMAP_ANIM,
|
(FRAME)SLYLANDRO_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC slylandro_desc =
|
|||||||
CLOSE_RANGE_WEAPON << 1,
|
CLOSE_RANGE_WEAPON << 1,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ static RACE_DESC spathi_desc =
|
|||||||
FIRES_FORE | FIRES_AFT | SEEKING_SPECIAL | DONT_CHASE,
|
FIRES_FORE | FIRES_AFT | SEEKING_SPECIAL | DONT_CHASE,
|
||||||
18, /* Super Melee cost */
|
18, /* Super Melee cost */
|
||||||
1000 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
1000 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
2549, 3600,
|
2549, 3600,
|
||||||
@@ -51,6 +51,7 @@ static RACE_DESC spathi_desc =
|
|||||||
(STRING)SPATHI_RACE_STRINGS,
|
(STRING)SPATHI_RACE_STRINGS,
|
||||||
(FRAME)SPATHI_ICON_MASK_PMAP_ANIM,
|
(FRAME)SPATHI_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)SPATHI_MICON_MASK_PMAP_ANIM,
|
(FRAME)SPATHI_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -96,9 +97,10 @@ static RACE_DESC spathi_desc =
|
|||||||
MISSILE_RANGE,
|
MISSILE_RANGE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static RACE_DESC supox_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
16, /* Super Melee cost */
|
16, /* Super Melee cost */
|
||||||
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
333 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
7468, 9246,
|
7468, 9246,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC supox_desc =
|
|||||||
(STRING)SUPOX_RACE_STRINGS,
|
(STRING)SUPOX_RACE_STRINGS,
|
||||||
(FRAME)SUPOX_ICON_MASK_PMAP_ANIM,
|
(FRAME)SUPOX_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)SUPOX_MICON_MASK_PMAP_ANIM,
|
(FRAME)SUPOX_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC supox_desc =
|
|||||||
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC syreen_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
13, /* Super Melee cost */
|
13, /* Super Melee cost */
|
||||||
0 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
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,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
0, 0,
|
0, 0,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC syreen_desc =
|
|||||||
(STRING)SYREEN_RACE_STRINGS,
|
(STRING)SYREEN_RACE_STRINGS,
|
||||||
(FRAME)SYREEN_ICON_MASK_PMAP_ANIM,
|
(FRAME)SYREEN_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)SYREEN_MICON_MASK_PMAP_ANIM,
|
(FRAME)SYREEN_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, SYREEN_MAX_CREW_SIZE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC syreen_desc =
|
|||||||
(MISSILE_SPEED * MISSILE_LIFE * 2 / 3),
|
(MISSILE_SPEED * MISSILE_LIFE * 2 / 3),
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC thraddash_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
10, /* Super Melee cost */
|
10, /* Super Melee cost */
|
||||||
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
2535, 8358,
|
2535, 8358,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC thraddash_desc =
|
|||||||
(STRING)THRADDASH_RACE_STRINGS,
|
(STRING)THRADDASH_RACE_STRINGS,
|
||||||
(FRAME)THRADDASH_ICON_MASK_PMAP_ANIM,
|
(FRAME)THRADDASH_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)THRADDASH_MICON_MASK_PMAP_ANIM,
|
(FRAME)THRADDASH_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC thraddash_desc =
|
|||||||
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
(MISSILE_SPEED * MISSILE_LIFE) >> 1,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static RACE_DESC umgah_desc =
|
|||||||
FIRES_FORE | IMMEDIATE_WEAPON,
|
FIRES_FORE | IMMEDIATE_WEAPON,
|
||||||
7, /* Super Melee cost */
|
7, /* Super Melee cost */
|
||||||
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
833 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
1798, 6000,
|
1798, 6000,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC umgah_desc =
|
|||||||
(STRING)UMGAH_RACE_STRINGS,
|
(STRING)UMGAH_RACE_STRINGS,
|
||||||
(FRAME)UMGAH_ICON_MASK_PMAP_ANIM,
|
(FRAME)UMGAH_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)UMGAH_MICON_MASK_PMAP_ANIM,
|
(FRAME)UMGAH_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC umgah_desc =
|
|||||||
(LONG_RANGE_WEAPON << 2),
|
(LONG_RANGE_WEAPON << 2),
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static RACE_DESC urquan_desc =
|
|||||||
FIRES_FORE | SEEKING_SPECIAL,
|
FIRES_FORE | SEEKING_SPECIAL,
|
||||||
30, /* Super Melee cost */
|
30, /* Super Melee cost */
|
||||||
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
2666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
5750, 6000,
|
5750, 6000,
|
||||||
@@ -55,6 +55,7 @@ static RACE_DESC urquan_desc =
|
|||||||
(STRING)URQUAN_RACE_STRINGS,
|
(STRING)URQUAN_RACE_STRINGS,
|
||||||
(FRAME)URQUAN_ICON_MASK_PMAP_ANIM,
|
(FRAME)URQUAN_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)URQUAN_MICON_MASK_PMAP_ANIM,
|
(FRAME)URQUAN_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -100,9 +101,10 @@ static RACE_DESC urquan_desc =
|
|||||||
MISSILE_SPEED * MISSILE_LIFE,
|
MISSILE_SPEED * MISSILE_LIFE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static RACE_DESC utwig_desc =
|
|||||||
FIRES_FORE | POINT_DEFENSE | SHIELD_DEFENSE,
|
FIRES_FORE | POINT_DEFENSE | SHIELD_DEFENSE,
|
||||||
22, /* Super Melee cost */
|
22, /* Super Melee cost */
|
||||||
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
666 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY >> 1, MAX_ENERGY,
|
MAX_ENERGY >> 1, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
8534, 8797,
|
8534, 8797,
|
||||||
@@ -55,6 +55,7 @@ static RACE_DESC utwig_desc =
|
|||||||
(STRING)UTWIG_RACE_STRINGS,
|
(STRING)UTWIG_RACE_STRINGS,
|
||||||
(FRAME)UTWIG_ICON_MASK_PMAP_ANIM,
|
(FRAME)UTWIG_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)UTWIG_MICON_MASK_PMAP_ANIM,
|
(FRAME)UTWIG_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -100,9 +101,10 @@ static RACE_DESC utwig_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ static RACE_DESC vux_desc =
|
|||||||
FIRES_FORE | SEEKING_SPECIAL | IMMEDIATE_WEAPON,
|
FIRES_FORE | SEEKING_SPECIAL | IMMEDIATE_WEAPON,
|
||||||
12, /* Super Melee cost */
|
12, /* Super Melee cost */
|
||||||
900 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
900 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
4412, 1558,
|
4412, 1558,
|
||||||
@@ -56,6 +56,7 @@ static RACE_DESC vux_desc =
|
|||||||
(STRING)VUX_RACE_STRINGS,
|
(STRING)VUX_RACE_STRINGS,
|
||||||
(FRAME)VUX_ICON_MASK_PMAP_ANIM,
|
(FRAME)VUX_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)VUX_MICON_MASK_PMAP_ANIM,
|
(FRAME)VUX_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -101,9 +102,10 @@ static RACE_DESC vux_desc =
|
|||||||
CLOSE_RANGE_WEAPON,
|
CLOSE_RANGE_WEAPON,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static RACE_DESC yehat_desc =
|
|||||||
FIRES_FORE | SHIELD_DEFENSE,
|
FIRES_FORE | SHIELD_DEFENSE,
|
||||||
23, /* Super Melee cost */
|
23, /* Super Melee cost */
|
||||||
750 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
750 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
4970, 40,
|
4970, 40,
|
||||||
@@ -53,6 +53,7 @@ static RACE_DESC yehat_desc =
|
|||||||
(STRING)YEHAT_RACE_STRINGS,
|
(STRING)YEHAT_RACE_STRINGS,
|
||||||
(FRAME)YEHAT_ICON_MASK_PMAP_ANIM,
|
(FRAME)YEHAT_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)YEHAT_MICON_MASK_PMAP_ANIM,
|
(FRAME)YEHAT_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -98,9 +99,10 @@ static RACE_DESC yehat_desc =
|
|||||||
MISSILE_SPEED * MISSILE_LIFE / 3,
|
MISSILE_SPEED * MISSILE_LIFE / 3,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static RACE_DESC zoqfotpik_desc =
|
|||||||
FIRES_FORE,
|
FIRES_FORE,
|
||||||
6, /* Super Melee cost */
|
6, /* Super Melee cost */
|
||||||
320 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
320 / SPHERE_RADIUS_INCREMENT, /* Initial sphere of influence radius */
|
||||||
MAX_CREW, MAX_CREW,
|
0, 0, /* Hack; old crew field */
|
||||||
MAX_ENERGY, MAX_ENERGY,
|
MAX_ENERGY, MAX_ENERGY,
|
||||||
{
|
{
|
||||||
3761, 5333,
|
3761, 5333,
|
||||||
@@ -54,6 +54,7 @@ static RACE_DESC zoqfotpik_desc =
|
|||||||
(STRING)ZOQFOTPIK_RACE_STRINGS,
|
(STRING)ZOQFOTPIK_RACE_STRINGS,
|
||||||
(FRAME)ZOQFOTPIK_ICON_MASK_PMAP_ANIM,
|
(FRAME)ZOQFOTPIK_ICON_MASK_PMAP_ANIM,
|
||||||
(FRAME)ZOQFOTPIK_MICON_MASK_PMAP_ANIM,
|
(FRAME)ZOQFOTPIK_MICON_MASK_PMAP_ANIM,
|
||||||
|
MAX_CREW, MAX_CREW,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MAX_THRUST,
|
MAX_THRUST,
|
||||||
@@ -99,9 +100,10 @@ static RACE_DESC zoqfotpik_desc =
|
|||||||
MISSILE_RANGE,
|
MISSILE_RANGE,
|
||||||
NULL_PTR,
|
NULL_PTR,
|
||||||
},
|
},
|
||||||
NULL_PTR,
|
(UNINIT_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(PREPROCESS_FUNC *) NULL,
|
||||||
NULL_PTR,
|
(POSTPROCESS_FUNC *) NULL,
|
||||||
|
(INIT_WEAPON_FUNC *) NULL,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+53
-62
@@ -152,9 +152,7 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
|||||||
r.extent.height += pClipRect->corner.y & 1;
|
r.extent.height += pClipRect->corner.y & 1;
|
||||||
SetContextClipRect (&r);
|
SetContextClipRect (&r);
|
||||||
SetFrameHot (Screen, MAKE_HOT_SPOT (
|
SetFrameHot (Screen, MAKE_HOT_SPOT (
|
||||||
pClipRect->corner.x,
|
pClipRect->corner.x, (pClipRect->corner.y & ~1)));
|
||||||
(pClipRect->corner.y & ~1)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BatchGraphics ();
|
BatchGraphics ();
|
||||||
@@ -170,10 +168,13 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
|||||||
{
|
{
|
||||||
SIZE crew_height, energy_height;
|
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;
|
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.x = CREW_XOFFS - 1;
|
||||||
r.corner.y = GAUGE_YOFFS + 1 + y;
|
r.corner.y = GAUGE_YOFFS + 1 + y;
|
||||||
r.extent.width = STAT_WIDTH + 2;
|
r.extent.width = STAT_WIDTH + 2;
|
||||||
@@ -191,7 +192,8 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
|||||||
r.extent.width = 1;
|
r.extent.width = 1;
|
||||||
r.extent.height = crew_height;
|
r.extent.height = crew_height;
|
||||||
DrawFilledRectangle (&r);
|
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.x = CREW_XOFFS - 1;
|
||||||
r.corner.y = GAUGE_YOFFS - crew_height + y;
|
r.corner.y = GAUGE_YOFFS - crew_height + y;
|
||||||
r.extent.width = STAT_WIDTH + 2;
|
r.extent.width = STAT_WIDTH + 2;
|
||||||
@@ -297,6 +299,8 @@ InitShipStatus (STARSHIPPTR StarShipPtr, PRECT pClipRect)
|
|||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pre: -crew_delta <= StarShipPtr->crew_level
|
||||||
|
// crew_delta <= StarShipPtr->max_crew - StarShipPtr->crew_level
|
||||||
void
|
void
|
||||||
DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta, SIZE
|
DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta, SIZE
|
||||||
energy_delta)
|
energy_delta)
|
||||||
@@ -311,96 +315,83 @@ DeltaStatistics (STARSHIPPTR StarShipPtr, SIZE crew_delta, SIZE
|
|||||||
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
||||||
|
|
||||||
x = 0;
|
x = 0;
|
||||||
y = GAUGE_YOFFS
|
y = GAUGE_YOFFS + ((ShipInfoPtr->ship_flags & GOOD_GUY) ?
|
||||||
+ ((ShipInfoPtr->ship_flags & GOOD_GUY) ?
|
|
||||||
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
|
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
|
||||||
|
|
||||||
r.extent.width = UNIT_WIDTH;
|
r.extent.width = UNIT_WIDTH;
|
||||||
r.extent.height = UNIT_HEIGHT;
|
r.extent.height = UNIT_HEIGHT;
|
||||||
|
|
||||||
if (crew_delta != 0)
|
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)
|
if (crew_delta > 0)
|
||||||
{
|
{
|
||||||
r.corner.y = (y + 1) -
|
r.corner.y = (y + 1) -
|
||||||
(((ShipInfoPtr->crew_level + 1) >> 1) * (UNIT_HEIGHT + 1));
|
(((oldNumBlocks + 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CREW_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02)
|
#define CREW_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02)
|
||||||
#define ROBOT_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08)
|
#define ROBOT_UNIT_COLOR BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08)
|
||||||
SetContextForeGroundColor (
|
SetContextForeGroundColor (
|
||||||
(ShipInfoPtr->ship_flags & CREW_IMMUNE) ?
|
(ShipInfoPtr->ship_flags & CREW_IMMUNE) ?
|
||||||
ROBOT_UNIT_COLOR : CREW_UNIT_COLOR);
|
ROBOT_UNIT_COLOR : CREW_UNIT_COLOR);
|
||||||
while (crew_delta--)
|
for (blockI = oldNumBlocks; blockI < newNumBlocks; blockI++)
|
||||||
{
|
{
|
||||||
r.corner.x = x + (CREW_XOFFS + 1);
|
r.corner.x = x + (CREW_XOFFS + 1);
|
||||||
if (!(ShipInfoPtr->crew_level & 1))
|
if (!(blockI & 1))
|
||||||
{
|
{
|
||||||
r.corner.x += UNIT_WIDTH + 1;
|
r.corner.x += UNIT_WIDTH + 1;
|
||||||
r.corner.y -= UNIT_HEIGHT + 1;
|
r.corner.y -= UNIT_HEIGHT + 1;
|
||||||
}
|
}
|
||||||
DrawFilledRectangle (&r);
|
DrawFilledRectangle (&r);
|
||||||
++ShipInfoPtr->crew_level;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* crew_delta < 0 */
|
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);
|
SetContextForeGroundColor (BLACK_COLOR);
|
||||||
r.corner.y = (y + 1) -
|
r.corner.y = (y + 1) -
|
||||||
(((ShipInfoPtr->crew_level + 2) >> 1) * (UNIT_HEIGHT + 1));
|
(((oldNumBlocks + 2) >> 1) * (UNIT_HEIGHT + 1));
|
||||||
do
|
for (blockI = oldNumBlocks; blockI > newNumBlocks; blockI--)
|
||||||
{
|
{
|
||||||
r.corner.x = x + (CREW_XOFFS + 1 + UNIT_WIDTH + 1);
|
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.x -= UNIT_WIDTH + 1;
|
||||||
r.corner.y += UNIT_HEIGHT + 1;
|
r.corner.y += UNIT_HEIGHT + 1;
|
||||||
}
|
}
|
||||||
DrawFilledRectangle (&r);
|
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
|
#endif
|
||||||
|
|
||||||
|
// Count the ships which can be built by the player.
|
||||||
static COUNT
|
static COUNT
|
||||||
GetAvailableRaceCount (void)
|
GetAvailableRaceCount (void)
|
||||||
{
|
{
|
||||||
@@ -382,9 +383,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
|||||||
while (hStarShip)
|
while (hStarShip)
|
||||||
{
|
{
|
||||||
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
&GLOBAL (built_ship_q),
|
&GLOBAL (built_ship_q), hStarShip);
|
||||||
hStarShip
|
|
||||||
);
|
|
||||||
if (GET_GROUP_LOC (StarShipPtr) > which_window)
|
if (GET_GROUP_LOC (StarShipPtr) > which_window)
|
||||||
{
|
{
|
||||||
UnlockStarShip (&GLOBAL (built_ship_q), hStarShip);
|
UnlockStarShip (&GLOBAL (built_ship_q), hStarShip);
|
||||||
@@ -407,9 +406,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
|||||||
for (i = 0; i < num_ships; ++i)
|
for (i = 0; i < num_ships; ++i)
|
||||||
{
|
{
|
||||||
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
StarShipPtr = (SHIP_FRAGMENTPTR)LockStarShip (
|
||||||
&GLOBAL (built_ship_q),
|
&GLOBAL (built_ship_q), hStarShip);
|
||||||
hStarShip
|
|
||||||
);
|
|
||||||
hNextShip = _GetSuccLink (StarShipPtr);
|
hNextShip = _GetSuccLink (StarShipPtr);
|
||||||
|
|
||||||
pship_win_info->StarShipPtr = StarShipPtr;
|
pship_win_info->StarShipPtr = StarShipPtr;
|
||||||
@@ -435,10 +432,7 @@ ShowCombatShip (COUNT which_window, SHIP_FRAGMENTPTR YankedStarShipPtr)
|
|||||||
(which_window / HANGAR_SHIPS_ROW));
|
(which_window / HANGAR_SHIPS_ROW));
|
||||||
++pship_win_info;
|
++pship_win_info;
|
||||||
|
|
||||||
UnlockStarShip (
|
UnlockStarShip (&GLOBAL (built_ship_q), hStarShip);
|
||||||
&GLOBAL (built_ship_q),
|
|
||||||
hStarShip
|
|
||||||
);
|
|
||||||
hStarShip = hNextShip;
|
hStarShip = hNextShip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-3
@@ -1565,14 +1565,18 @@ SetFlashRect (PRECT pRect, FRAME f)
|
|||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SaveFlagshipState (void)
|
SaveFlagshipState (void)
|
||||||
{
|
{
|
||||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)
|
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;
|
HELEMENT hElement, hNextElement;
|
||||||
|
|
||||||
|
// Find the flagship element.
|
||||||
for (hElement = GetHeadElement ();
|
for (hElement = GetHeadElement ();
|
||||||
hElement != 0; hElement = hNextElement)
|
hElement != 0; hElement = hNextElement)
|
||||||
{
|
{
|
||||||
@@ -1586,8 +1590,7 @@ SaveFlagshipState (void)
|
|||||||
|
|
||||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||||
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
GLOBAL (ShipStamp.frame) = (FRAME)MAKE_DWORD (
|
||||||
StarShipPtr->ShipFacing + 1, 0
|
StarShipPtr->ShipFacing + 1, 0);
|
||||||
);
|
|
||||||
hNextElement = 0;
|
hNextElement = 0;
|
||||||
}
|
}
|
||||||
UnlockElement (hElement);
|
UnlockElement (hElement);
|
||||||
@@ -1595,6 +1598,7 @@ SaveFlagshipState (void)
|
|||||||
}
|
}
|
||||||
else if (pSolarSysState)
|
else if (pSolarSysState)
|
||||||
{
|
{
|
||||||
|
// Player is in a solar system.
|
||||||
UWORD index1, index2;
|
UWORD index1, index2;
|
||||||
FRAME frame;
|
FRAME frame;
|
||||||
|
|
||||||
@@ -1604,7 +1608,9 @@ SaveFlagshipState (void)
|
|||||||
{
|
{
|
||||||
index1 = GetFrameIndex (frame) + 1;
|
index1 = GetFrameIndex (frame) + 1;
|
||||||
if (pSolarSysState->pBaseDesc == pSolarSysState->PlanetDesc)
|
if (pSolarSysState->pBaseDesc == pSolarSysState->PlanetDesc)
|
||||||
|
{
|
||||||
index2 = 0;
|
index2 = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
index2 = (UWORD)(pSolarSysState->pBaseDesc->pPrevDesc
|
index2 = (UWORD)(pSolarSysState->pBaseDesc->pPrevDesc
|
||||||
@@ -1615,6 +1621,9 @@ SaveFlagshipState (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// In orbit around a planet.
|
||||||
|
|
||||||
|
// Update the starinfo.dat file if necessary.
|
||||||
if (GET_GAME_STATE (PLANETARY_CHANGE))
|
if (GET_GAME_STATE (PLANETARY_CHANGE))
|
||||||
{
|
{
|
||||||
PutPlanetInfo ();
|
PutPlanetInfo ();
|
||||||
@@ -1635,3 +1644,4 @@ SaveFlagshipState (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -246,9 +246,10 @@ GetPlanetInfo (void)
|
|||||||
{
|
{
|
||||||
PVOID fp;
|
PVOID fp;
|
||||||
|
|
||||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] =
|
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] = 0;
|
||||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[MINERAL_SCAN] =
|
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[MINERAL_SCAN] = 0;
|
||||||
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] = 0;
|
pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] = 0;
|
||||||
|
|
||||||
fp = OpenStateFile (STARINFO_FILE, "rb");
|
fp = OpenStateFile (STARINFO_FILE, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ CaptainsWindow (CAPTAIN_STUFFPTR CSPtr, COORD y, ELEMENT_FLAGS
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DrawBattleCrewAmount (STARSHIPPTR StarShipPtr, BOOLEAN CountPlayer)
|
DrawBattleCrewAmount (STARSHIPPTR StarShipPtr)
|
||||||
{
|
{
|
||||||
#define MAX_CREW_DIGITS 3
|
#define MAX_CREW_DIGITS 3
|
||||||
RECT r;
|
RECT r;
|
||||||
@@ -136,7 +136,7 @@ DrawBattleCrewAmount (STARSHIPPTR StarShipPtr, BOOLEAN CountPlayer)
|
|||||||
r.extent.width = 6 * MAX_CREW_DIGITS + 6;
|
r.extent.width = 6 * MAX_CREW_DIGITS + 6;
|
||||||
r.extent.height = 5;
|
r.extent.height = 5;
|
||||||
|
|
||||||
sprintf (buf, "%u", GLOBAL_SIS (CrewEnlisted) + (CountPlayer ? 1 : 0));
|
sprintf (buf, "%u", StarShipPtr->RaceDescPtr->ship_info.crew_level);
|
||||||
SetContextFont (StarConFont);
|
SetContextFont (StarConFont);
|
||||||
|
|
||||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08));
|
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0xA, 0xA, 0xA), 0x08));
|
||||||
@@ -247,6 +247,7 @@ DrawCaptainsWindow (STARSHIPPTR StarShipPtr)
|
|||||||
{
|
{
|
||||||
if (RDPtr->ship_info.ship_flags & GOOD_GUY)
|
if (RDPtr->ship_info.ship_flags & GOOD_GUY)
|
||||||
{
|
{
|
||||||
|
// SIS
|
||||||
TEXT t;
|
TEXT t;
|
||||||
|
|
||||||
t.baseline.x = STATUS_WIDTH >> 1;
|
t.baseline.x = STATUS_WIDTH >> 1;
|
||||||
@@ -254,12 +255,19 @@ DrawCaptainsWindow (STARSHIPPTR StarShipPtr)
|
|||||||
t.align = ALIGN_CENTER;
|
t.align = ALIGN_CENTER;
|
||||||
t.pStr = GLOBAL_SIS (CommanderName);
|
t.pStr = GLOBAL_SIS (CommanderName);
|
||||||
t.CharCount = (COUNT)~0;
|
t.CharCount = (COUNT)~0;
|
||||||
DrawBattleCrewAmount (StarShipPtr, TRUE);
|
SetContextForeGroundColor (
|
||||||
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
|
||||||
SetContextFont (TinyFont);
|
SetContextFont (TinyFont);
|
||||||
font_DrawText (&t);
|
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 ();
|
UnbatchGraphics ();
|
||||||
}
|
}
|
||||||
@@ -322,7 +330,7 @@ DeltaCrew (ELEMENTPTR ElementPtr, SIZE crew_delta)
|
|||||||
|
|
||||||
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
ShipInfoPtr = &StarShipPtr->RaceDescPtr->ship_info;
|
||||||
|
|
||||||
ElementPtr->crew_level += (BYTE)crew_delta;
|
ElementPtr->crew_level += crew_delta;
|
||||||
if (ElementPtr->crew_level > ShipInfoPtr->max_crew)
|
if (ElementPtr->crew_level > ShipInfoPtr->max_crew)
|
||||||
{
|
{
|
||||||
crew_delta = ShipInfoPtr->max_crew - ShipInfoPtr->crew_level;
|
crew_delta = ShipInfoPtr->max_crew - ShipInfoPtr->crew_level;
|
||||||
@@ -331,8 +339,8 @@ DeltaCrew (ELEMENTPTR ElementPtr, SIZE crew_delta)
|
|||||||
}
|
}
|
||||||
else if (crew_delta < 0)
|
else if (crew_delta < 0)
|
||||||
{
|
{
|
||||||
if (ElementPtr->crew_level > (BYTE)-crew_delta)
|
if (ElementPtr->crew_level > (COUNT)-crew_delta)
|
||||||
ElementPtr->crew_level += (BYTE)crew_delta;
|
ElementPtr->crew_level += crew_delta;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
crew_delta = -(SIZE)ElementPtr->crew_level;
|
crew_delta = -(SIZE)ElementPtr->crew_level;
|
||||||
|
|||||||
@@ -73,8 +73,14 @@ new_ship (PELEMENT DeadShipPtr)
|
|||||||
DeadStarShipPtr->RaceDescPtr->ship_info.crew_level;
|
DeadStarShipPtr->RaceDescPtr->ship_info.crew_level;
|
||||||
if (DeadStarShipPtr->special_counter)
|
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 ();
|
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;
|
MusicStarted = FALSE;
|
||||||
@@ -144,6 +150,9 @@ new_ship (PELEMENT DeadShipPtr)
|
|||||||
SetElementStarShip (DeadShipPtr, 0);
|
SetElementStarShip (DeadShipPtr, 0);
|
||||||
RestartMusic = OpponentAlive (DeadStarShipPtr);
|
RestartMusic = OpponentAlive (DeadStarShipPtr);
|
||||||
|
|
||||||
|
if (DeadStarShipPtr->RaceDescPtr->uninit_func != NULL)
|
||||||
|
(*DeadStarShipPtr->RaceDescPtr->uninit_func) (
|
||||||
|
DeadStarShipPtr->RaceDescPtr);
|
||||||
free_ship (DeadStarShipPtr, TRUE);
|
free_ship (DeadStarShipPtr, TRUE);
|
||||||
UnbatchGraphics ();
|
UnbatchGraphics ();
|
||||||
if (GetNextStarShip (DeadStarShipPtr,
|
if (GetNextStarShip (DeadStarShipPtr,
|
||||||
|
|||||||
@@ -1271,7 +1271,8 @@ resetCrewBattle(void) {
|
|||||||
COUNT delta;
|
COUNT delta;
|
||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
|
|
||||||
if (!(GLOBAL (CurrentActivity) & IN_BATTLE))
|
if (!(GLOBAL (CurrentActivity) & IN_BATTLE) ||
|
||||||
|
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StarShipPtr = findPlayerShip (GOOD_GUY);
|
StarShipPtr = findPlayerShip (GOOD_GUY);
|
||||||
|
|||||||
Reference in New Issue
Block a user