Battle & ship code cleanup: GOOD_GUY/BAD_GUY flags replaced with playerNr; these flags are not set in SHIP_INFO anymore; STARSHIP.which_side removed (fully replaced by playerNr)
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3273 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+2
-2
@@ -1436,7 +1436,7 @@ InitCommunication (CONVERSATION which_comm)
|
|||||||
|| (which_comm != CHMMR_CONVERSATION
|
|| (which_comm != CHMMR_CONVERSATION
|
||||||
&& which_comm != SYREEN_CONVERSATION
|
&& which_comm != SYREEN_CONVERSATION
|
||||||
))//&& (ActivateStarShip (status, CHECK_ALLIANCE) & BAD_GUY)))
|
))//&& (ActivateStarShip (status, CHECK_ALLIANCE) & BAD_GUY)))
|
||||||
BuildBattle (1);
|
BuildBattle (NPC_PLAYER_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocDataPtr = init_race (
|
LocDataPtr = init_race (
|
||||||
@@ -1495,7 +1495,7 @@ InitCommunication (CONVERSATION which_comm)
|
|||||||
if (status)
|
if (status)
|
||||||
{
|
{
|
||||||
// Start combat
|
// Start combat
|
||||||
BuildBattle (0);
|
BuildBattle (RPG_PLAYER_NUM);
|
||||||
EncounterBattle ();
|
EncounterBattle ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -603,8 +603,7 @@ Pursue (ELEMENT *ShipPtr, EVALUATE_DESC *EvalDescPtr)
|
|||||||
maneuver_state |= LEFT | RIGHT;
|
maneuver_state |= LEFT | RIGHT;
|
||||||
if (ShipPtr->thrust_wait == 0
|
if (ShipPtr->thrust_wait == 0
|
||||||
&& ((OtherObjPtr->state_flags & PLAYER_SHIP)
|
&& ((OtherObjPtr->state_flags & PLAYER_SHIP)
|
||||||
|| ((OtherObjPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
|| elementsOfSamePlayer (OtherObjPtr, ShipPtr)
|
||||||
(ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
|| OtherObjPtr->preprocess_func == crew_preprocess))
|
|| OtherObjPtr->preprocess_func == crew_preprocess))
|
||||||
maneuver_state |= THRUST;
|
maneuver_state |= THRUST;
|
||||||
|
|
||||||
@@ -1213,8 +1212,7 @@ if (!(ShipPtr->state_flags & FINITE_LIFE)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((ed.ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) !=
|
else if (!elementsOfSamePlayer (ed.ObjectPtr, &Ship)
|
||||||
(Ship.state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& ed.ObjectPtr->preprocess_func != crew_preprocess
|
&& ed.ObjectPtr->preprocess_func != crew_preprocess
|
||||||
&& ObjectsOfConcern[ENEMY_WEAPON_INDEX].which_turn > 1
|
&& ObjectsOfConcern[ENEMY_WEAPON_INDEX].which_turn > 1
|
||||||
&& ed.ObjectPtr->life_span > 0)
|
&& ed.ObjectPtr->life_span > 0)
|
||||||
@@ -1286,8 +1284,7 @@ if (!(ShipPtr->state_flags & FINITE_LIFE)
|
|||||||
}
|
}
|
||||||
else if ((ed.ObjectPtr->state_flags & CREW_OBJECT)
|
else if ((ed.ObjectPtr->state_flags & CREW_OBJECT)
|
||||||
&& ((!(ed.ObjectPtr->state_flags & IGNORE_SIMILAR)
|
&& ((!(ed.ObjectPtr->state_flags & IGNORE_SIMILAR)
|
||||||
&& (ed.ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
&& elementsOfSamePlayer (ed.ObjectPtr, &Ship))
|
||||||
(Ship.state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
|| ed.ObjectPtr->preprocess_func == crew_preprocess)
|
|| ed.ObjectPtr->preprocess_func == crew_preprocess)
|
||||||
&& ObjectsOfConcern[CREW_OBJECT_INDEX].which_turn > 1)
|
&& ObjectsOfConcern[CREW_OBJECT_INDEX].which_turn > 1)
|
||||||
{
|
{
|
||||||
|
|||||||
+12
-2
@@ -108,8 +108,10 @@ struct element
|
|||||||
void (*death_func) (struct element *ElementPtr);
|
void (*death_func) (struct element *ElementPtr);
|
||||||
|
|
||||||
// Player this element belongs to
|
// Player this element belongs to
|
||||||
// 0: Bottom player in Melee; The Player in full-game
|
// -1: neutral (planets, asteroids, crew, etc.)
|
||||||
COUNT playerNr;
|
// 0: Melee: bottom player; Full-game: the human player
|
||||||
|
// 1: Melee: top player; Full-game: the NPC opponent
|
||||||
|
SIZE playerNr;
|
||||||
|
|
||||||
ELEMENT_FLAGS state_flags;
|
ELEMENT_FLAGS state_flags;
|
||||||
union
|
union
|
||||||
@@ -147,6 +149,14 @@ struct element
|
|||||||
HELEMENT hTarget;
|
HELEMENT hTarget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define NEUTRAL_PLAYER_NUM -1
|
||||||
|
|
||||||
|
static inline BOOLEAN
|
||||||
|
elementsOfSamePlayer (ELEMENT *ElementPtr0, ELEMENT *ElementPtr1)
|
||||||
|
{
|
||||||
|
return ElementPtr0->playerNr == ElementPtr1->playerNr;
|
||||||
|
}
|
||||||
|
|
||||||
extern QUEUE disp_q;
|
extern QUEUE disp_q;
|
||||||
// The maximum number of elements is chosen to provide a slight margin.
|
// The maximum number of elements is chosen to provide a slight margin.
|
||||||
// Currently, it is maximum *known used* in Melee + 30
|
// Currently, it is maximum *known used* in Melee + 30
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ BuildBattle (COUNT which_player)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which_player == 0)
|
if (which_player == RPG_PLAYER_NUM)
|
||||||
pQueue = &GLOBAL (built_ship_q);
|
pQueue = &GLOBAL (built_ship_q);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -141,7 +141,6 @@ BuildBattle (COUNT which_player)
|
|||||||
{
|
{
|
||||||
BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip);
|
BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip);
|
||||||
BuiltShipPtr->captains_name_index = FragPtr->captains_name_index;
|
BuiltShipPtr->captains_name_index = FragPtr->captains_name_index;
|
||||||
BuiltShipPtr->which_side = 1 << which_player;
|
|
||||||
BuiltShipPtr->playerNr = which_player;
|
BuiltShipPtr->playerNr = which_player;
|
||||||
if (FragPtr->crew_level != INFINITE_FLEET)
|
if (FragPtr->crew_level != INFINITE_FLEET)
|
||||||
BuiltShipPtr->crew_level = FragPtr->crew_level;
|
BuiltShipPtr->crew_level = FragPtr->crew_level;
|
||||||
@@ -160,13 +159,12 @@ BuildBattle (COUNT which_player)
|
|||||||
UnlockShipFrag (pQueue, hStarShip);
|
UnlockShipFrag (pQueue, hStarShip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which_player == 0
|
if (which_player == RPG_PLAYER_NUM
|
||||||
&& (hBuiltShip = Build (&race_q[0], SIS_SHIP_ID)))
|
&& (hBuiltShip = Build (&race_q[0], SIS_SHIP_ID)))
|
||||||
{
|
{
|
||||||
BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip);
|
BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip);
|
||||||
BuiltShipPtr->captains_name_index = 0;
|
BuiltShipPtr->captains_name_index = 0;
|
||||||
BuiltShipPtr->which_side = GOOD_GUY;
|
BuiltShipPtr->playerNr = RPG_PLAYER_NUM;
|
||||||
BuiltShipPtr->playerNr = 0;
|
|
||||||
BuiltShipPtr->crew_level = 0;
|
BuiltShipPtr->crew_level = 0;
|
||||||
BuiltShipPtr->max_crew = 0;
|
BuiltShipPtr->max_crew = 0;
|
||||||
// Crew will be copied directly from
|
// Crew will be copied directly from
|
||||||
|
|||||||
@@ -751,6 +751,7 @@ AllocHyperElement (STAR_DESC *SDPtr)
|
|||||||
ELEMENT *HyperSpaceElementPtr;
|
ELEMENT *HyperSpaceElementPtr;
|
||||||
|
|
||||||
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
||||||
|
HyperSpaceElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
HyperSpaceElementPtr->state_flags = CHANGING | FINITE_LIFE;
|
HyperSpaceElementPtr->state_flags = CHANGING | FINITE_LIFE;
|
||||||
HyperSpaceElementPtr->life_span = 1;
|
HyperSpaceElementPtr->life_span = 1;
|
||||||
HyperSpaceElementPtr->mass_points = 1;
|
HyperSpaceElementPtr->mass_points = 1;
|
||||||
@@ -792,6 +793,7 @@ AddAmbientElement (void)
|
|||||||
ELEMENT *HyperSpaceElementPtr;
|
ELEMENT *HyperSpaceElementPtr;
|
||||||
|
|
||||||
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
||||||
|
HyperSpaceElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
HyperSpaceElementPtr->state_flags =
|
HyperSpaceElementPtr->state_flags =
|
||||||
APPEARING | FINITE_LIFE | NONSOLID;
|
APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
|
|||||||
+1
-2
@@ -165,8 +165,7 @@ BuildSIS (void)
|
|||||||
if (!hStarShip)
|
if (!hStarShip)
|
||||||
return 0;
|
return 0;
|
||||||
StarShipPtr = LockStarShip (&race_q[0], hStarShip);
|
StarShipPtr = LockStarShip (&race_q[0], hStarShip);
|
||||||
StarShipPtr->which_side = GOOD_GUY;
|
StarShipPtr->playerNr = RPG_PLAYER_NUM;
|
||||||
StarShipPtr->playerNr = 0;
|
|
||||||
StarShipPtr->captains_name_index = 0;
|
StarShipPtr->captains_name_index = 0;
|
||||||
UnlockStarShip (&race_q[0], hStarShip);
|
UnlockStarShip (&race_q[0], hStarShip);
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ computer_intelligence (ComputerInputContext *context, STARSHIP *StarShipPtr)
|
|||||||
InputState = tactical_intelligence (context, StarShipPtr);
|
InputState = tactical_intelligence (context, StarShipPtr);
|
||||||
|
|
||||||
// Allow a player to warp-escape in cyborg mode
|
// Allow a player to warp-escape in cyborg mode
|
||||||
if (context->playerNr == 0)
|
if (StarShipPtr->playerNr == RPG_PLAYER_NUM)
|
||||||
InputState |= CurrentInputToBattleInput (
|
InputState |= CurrentInputToBattleInput (
|
||||||
context->playerNr) & BATTLE_ESCAPE;
|
context->playerNr) & BATTLE_ESCAPE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1687,7 +1687,6 @@ BuildAndDrawShipList (MELEE_STATE *pMS)
|
|||||||
BuiltShipPtr = LockStarShip (&race_q[side], hBuiltShip);
|
BuiltShipPtr = LockStarShip (&race_q[side], hBuiltShip);
|
||||||
BuiltShipPtr->index = index;
|
BuiltShipPtr->index = index;
|
||||||
BuiltShipPtr->ship_cost = ship_cost;
|
BuiltShipPtr->ship_cost = ship_cost;
|
||||||
BuiltShipPtr->which_side = 1 << side;
|
|
||||||
BuiltShipPtr->playerNr = side;
|
BuiltShipPtr->playerNr = side;
|
||||||
BuiltShipPtr->captains_name_index = captains_name_index;
|
BuiltShipPtr->captains_name_index = captains_name_index;
|
||||||
// The next ones are not used in Melee
|
// The next ones are not used in Melee
|
||||||
|
|||||||
+5
-2
@@ -39,6 +39,7 @@ spawn_planet (void)
|
|||||||
extern FRAME planet[];
|
extern FRAME planet[];
|
||||||
|
|
||||||
LockElement (hPlanetElement, &PlanetElementPtr);
|
LockElement (hPlanetElement, &PlanetElementPtr);
|
||||||
|
PlanetElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
PlanetElementPtr->hit_points = 200;
|
PlanetElementPtr->hit_points = 200;
|
||||||
PlanetElementPtr->state_flags = APPEARING;
|
PlanetElementPtr->state_flags = APPEARING;
|
||||||
PlanetElementPtr->life_span = NORMAL_LIFE + 1;
|
PlanetElementPtr->life_span = NORMAL_LIFE + 1;
|
||||||
@@ -79,6 +80,7 @@ spawn_rubble (ELEMENT *AsteroidElementPtr)
|
|||||||
|
|
||||||
PutElement (hRubbleElement);
|
PutElement (hRubbleElement);
|
||||||
LockElement (hRubbleElement, &RubbleElementPtr);
|
LockElement (hRubbleElement, &RubbleElementPtr);
|
||||||
|
RubbleElementPtr->playerNr = AsteroidElementPtr->playerNr;
|
||||||
RubbleElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
RubbleElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
RubbleElementPtr->life_span = 5;
|
RubbleElementPtr->life_span = 5;
|
||||||
RubbleElementPtr->turn_wait = RubbleElementPtr->next_turn = 0;
|
RubbleElementPtr->turn_wait = RubbleElementPtr->next_turn = 0;
|
||||||
@@ -136,6 +138,7 @@ spawn_asteroid (ELEMENT *ElementPtr)
|
|||||||
COUNT val;
|
COUNT val;
|
||||||
|
|
||||||
LockElement (hAsteroidElement, &AsteroidElementPtr);
|
LockElement (hAsteroidElement, &AsteroidElementPtr);
|
||||||
|
AsteroidElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
AsteroidElementPtr->hit_points = 1;
|
AsteroidElementPtr->hit_points = 1;
|
||||||
AsteroidElementPtr->mass_points = 3;
|
AsteroidElementPtr->mass_points = 3;
|
||||||
AsteroidElementPtr->state_flags = APPEARING;
|
AsteroidElementPtr->state_flags = APPEARING;
|
||||||
@@ -327,9 +330,9 @@ AbandonShip (ELEMENT *ShipPtr, ELEMENT *TargetPtr,
|
|||||||
|
|
||||||
PutElement (hCrew);
|
PutElement (hCrew);
|
||||||
LockElement (hCrew, &CrewPtr);
|
LockElement (hCrew, &CrewPtr);
|
||||||
|
CrewPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
CrewPtr->hit_points = 1;
|
CrewPtr->hit_points = 1;
|
||||||
CrewPtr->state_flags =
|
CrewPtr->state_flags = APPEARING | FINITE_LIFE | CREW_OBJECT;
|
||||||
APPEARING | FINITE_LIFE | CREW_OBJECT;
|
|
||||||
CrewPtr->life_span = CREW_LIFE;
|
CrewPtr->life_span = CREW_LIFE;
|
||||||
SetPrimType (&DisplayArray[CrewPtr->PrimIndex], POINT_PRIM);
|
SetPrimType (&DisplayArray[CrewPtr->PrimIndex], POINT_PRIM);
|
||||||
SetPrimColor (&DisplayArray[CrewPtr->PrimIndex],
|
SetPrimColor (&DisplayArray[CrewPtr->PrimIndex],
|
||||||
|
|||||||
@@ -36,9 +36,7 @@ typedef uint32 Checksum;
|
|||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
crc_processELEMENT_FLAGS(crc_State *state, ELEMENT_FLAGS val) {
|
crc_processELEMENT_FLAGS(crc_State *state, ELEMENT_FLAGS val) {
|
||||||
crc_processUint16(state, (uint16) (val & ~(GOOD_GUY | BAD_GUY)));
|
crc_processUint16(state, (uint16) val);
|
||||||
// Excluding the element side, as this does not have to
|
|
||||||
// be the same for both players over a network.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|||||||
@@ -403,7 +403,6 @@ GetEncounterStarShip (STARSHIP *LastStarShipPtr, COUNT which_player)
|
|||||||
* fight, all Syreen ships there would be crewed to
|
* fight, all Syreen ships there would be crewed to
|
||||||
* the maximum, instead of the normal level */
|
* the maximum, instead of the normal level */
|
||||||
SPtr->crew_level = FragPtr->max_crew;
|
SPtr->crew_level = FragPtr->max_crew;
|
||||||
SPtr->which_side = 1 << which_player;
|
|
||||||
SPtr->playerNr = which_player;
|
SPtr->playerNr = which_player;
|
||||||
SPtr->captains_name_index = PickCaptainName ();
|
SPtr->captains_name_index = PickCaptainName ();
|
||||||
|
|
||||||
|
|||||||
@@ -684,7 +684,7 @@ PreProcessQueue (SIZE *pscroll_x, SIZE *pscroll_y)
|
|||||||
dy = DISPLAY_ALIGN (ElementPtr->next.location.y) - Origin.y;
|
dy = DISPLAY_ALIGN (ElementPtr->next.location.y) - Origin.y;
|
||||||
dy = WRAP_DELTA_Y (dy);
|
dy = WRAP_DELTA_Y (dy);
|
||||||
|
|
||||||
if (sides_active <= 2 || !(ElementPtr->state_flags & BAD_GUY))
|
if (sides_active <= 2 || ElementPtr->playerNr == 0)
|
||||||
{
|
{
|
||||||
Origin.x = DISPLAY_ALIGN (Origin.x + (dx >> 1));
|
Origin.x = DISPLAY_ALIGN (Origin.x + (dx >> 1));
|
||||||
Origin.y = DISPLAY_ALIGN (Origin.y + (dy >> 1));
|
Origin.y = DISPLAY_ALIGN (Origin.y + (dy >> 1));
|
||||||
|
|||||||
+8
-8
@@ -36,10 +36,7 @@ typedef HLINK HSTARSHIP;
|
|||||||
#define MAX_SHIPS_PER_SIDE 14
|
#define MAX_SHIPS_PER_SIDE 14
|
||||||
|
|
||||||
/* SHIP_INFO.ship_flags - ship specific flags */
|
/* SHIP_INFO.ship_flags - ship specific flags */
|
||||||
/*
|
/* bits 0 and 1 are now available */
|
||||||
#define GOOD_GUY (1 << 0)
|
|
||||||
#define BAD_GUY (1 << 1)
|
|
||||||
*/
|
|
||||||
#define SEEKING_WEAPON (1 << 2)
|
#define SEEKING_WEAPON (1 << 2)
|
||||||
#define SEEKING_SPECIAL (1 << 3)
|
#define SEEKING_SPECIAL (1 << 3)
|
||||||
#define POINT_DEFENSE (1 << 4)
|
#define POINT_DEFENSE (1 << 4)
|
||||||
@@ -245,8 +242,6 @@ struct STARSHIP
|
|||||||
RACE_DESC *RaceDescPtr;
|
RACE_DESC *RaceDescPtr;
|
||||||
|
|
||||||
// Ship information
|
// Ship information
|
||||||
UWORD which_side;
|
|
||||||
// In race_q: side the ship is on
|
|
||||||
COUNT crew_level;
|
COUNT crew_level;
|
||||||
// In full-game battles: crew left
|
// In full-game battles: crew left
|
||||||
// In SuperMelee: irrelevant
|
// In SuperMelee: irrelevant
|
||||||
@@ -274,12 +269,17 @@ struct STARSHIP
|
|||||||
HELEMENT hShip;
|
HELEMENT hShip;
|
||||||
COUNT ShipFacing;
|
COUNT ShipFacing;
|
||||||
|
|
||||||
COUNT playerNr;
|
SIZE playerNr;
|
||||||
// 0: bottom player; In full-game: the human player
|
// 0: bottom player; In full-game: the human player (RPG)
|
||||||
|
// 1: top player; In full-game: the NPC opponent
|
||||||
|
// -1: neutral; this should currently never happen (asserts)
|
||||||
BYTE control;
|
BYTE control;
|
||||||
// HUMAN, COMPUTER or NETWORK control flags, see intel.h
|
// HUMAN, COMPUTER or NETWORK control flags, see intel.h
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define RPG_PLAYER_NUM 0
|
||||||
|
#define NPC_PLAYER_NUM 1
|
||||||
|
|
||||||
static inline STARSHIP *
|
static inline STARSHIP *
|
||||||
LockStarShip (const QUEUE *pq, HSTARSHIP h)
|
LockStarShip (const QUEUE *pq, HSTARSHIP h)
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-6
@@ -168,9 +168,9 @@ ship_preprocess (ELEMENT *ElementPtr)
|
|||||||
{ // Preprocessing for the first time
|
{ // Preprocessing for the first time
|
||||||
ElementPtr->crew_level = RDPtr->ship_info.crew_level;
|
ElementPtr->crew_level = RDPtr->ship_info.crew_level;
|
||||||
|
|
||||||
if ((ElementPtr->state_flags & BAD_GUY)
|
if (ElementPtr->playerNr == NPC_PLAYER_NUM
|
||||||
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||||
{
|
{ // Sa-Matra
|
||||||
STAMP s;
|
STAMP s;
|
||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
|
|
||||||
@@ -388,7 +388,6 @@ spawn_ship (STARSHIP *StarShipPtr)
|
|||||||
if (!RDPtr)
|
if (!RDPtr)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
RDPtr->ship_info.ship_flags |= StarShipPtr->which_side;
|
|
||||||
StarShipPtr->RaceDescPtr = RDPtr;
|
StarShipPtr->RaceDescPtr = RDPtr;
|
||||||
|
|
||||||
StarShipPtr->ship_input_state = 0;
|
StarShipPtr->ship_input_state = 0;
|
||||||
@@ -430,10 +429,10 @@ spawn_ship (STARSHIP *StarShipPtr)
|
|||||||
|
|
||||||
LockElement (hShip, &ShipElementPtr);
|
LockElement (hShip, &ShipElementPtr);
|
||||||
|
|
||||||
|
ShipElementPtr->playerNr = StarShipPtr->playerNr;
|
||||||
ShipElementPtr->crew_level = 0;
|
ShipElementPtr->crew_level = 0;
|
||||||
ShipElementPtr->mass_points = RDPtr->characteristics.ship_mass;
|
ShipElementPtr->mass_points = RDPtr->characteristics.ship_mass;
|
||||||
ShipElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR
|
ShipElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR;
|
||||||
| (RDPtr->ship_info.ship_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
ShipElementPtr->turn_wait = 0;
|
ShipElementPtr->turn_wait = 0;
|
||||||
ShipElementPtr->thrust_wait = 0;
|
ShipElementPtr->thrust_wait = 0;
|
||||||
ShipElementPtr->life_span = NORMAL_LIFE;
|
ShipElementPtr->life_span = NORMAL_LIFE;
|
||||||
@@ -441,7 +440,7 @@ spawn_ship (STARSHIP *StarShipPtr)
|
|||||||
SetPrimType (&DisplayArray[ShipElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[ShipElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
ShipElementPtr->current.image.farray = RDPtr->ship_data.ship;
|
ShipElementPtr->current.image.farray = RDPtr->ship_data.ship;
|
||||||
|
|
||||||
if ((ShipElementPtr->state_flags & BAD_GUY)
|
if (ShipElementPtr->playerNr == NPC_PLAYER_NUM
|
||||||
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
&& LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE)
|
||||||
{
|
{
|
||||||
// This is the Sa-Matra
|
// This is the Sa-Matra
|
||||||
|
|||||||
@@ -200,8 +200,8 @@ initialize_bubble (ELEMENT *ShipPtr, HELEMENT BubbleArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = ANDROSYNTH_OFFSET;
|
MissileBlock.pixoffs = ANDROSYNTH_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -127,8 +127,8 @@ initialize_autoaim_laser (ELEMENT *ShipPtr, HELEMENT LaserArray[])
|
|||||||
LaserBlock.cy = ShipPtr->next.location.y;
|
LaserBlock.cy = ShipPtr->next.location.y;
|
||||||
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = ARILOU_OFFSET;
|
LaserBlock.pixoffs = ARILOU_OFFSET;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E);
|
||||||
LaserArray[0] = initialize_laser (&LaserBlock);
|
LaserArray[0] = initialize_laser (&LaserBlock);
|
||||||
|
|||||||
@@ -322,8 +322,8 @@ initialize_buzzsaw (ELEMENT *ShipPtr, HELEMENT SawArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = KOHR_AH_OFFSET;
|
MissileBlock.pixoffs = KOHR_AH_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -392,8 +392,7 @@ black_urquan_intelligence (ELEMENT *ShipPtr, EVALUATE_DESC *ObjectsOfConcern,
|
|||||||
if (!(BuzzSawPtr->state_flags & NONSOLID)
|
if (!(BuzzSawPtr->state_flags & NONSOLID)
|
||||||
&& BuzzSawPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon
|
&& BuzzSawPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon
|
||||||
&& BuzzSawPtr->life_span > MISSILE_LIFE * 3 / 4
|
&& BuzzSawPtr->life_span > MISSILE_LIFE * 3 / 4
|
||||||
&& (BuzzSawPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
&& elementsOfSamePlayer (BuzzSawPtr, ShipPtr))
|
||||||
(ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
//COUNT which_turn;
|
//COUNT which_turn;
|
||||||
@@ -479,9 +478,8 @@ spawn_gas_cloud (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.cy = ElementPtr->next.location.y;
|
MissileBlock.cy = ElementPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender =
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
| IGNORE_SIMILAR;
|
|
||||||
MissileBlock.pixoffs = 20;
|
MissileBlock.pixoffs = 20;
|
||||||
MissileBlock.speed = GAS_SPEED;
|
MissileBlock.speed = GAS_SPEED;
|
||||||
MissileBlock.hit_points = GAS_HITS;
|
MissileBlock.hit_points = GAS_HITS;
|
||||||
|
|||||||
@@ -133,9 +133,8 @@ crystal_postprocess (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.cy = ElementPtr->next.location.y;
|
MissileBlock.cy = ElementPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.index = 1;
|
MissileBlock.index = 1;
|
||||||
MissileBlock.sender =
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
| IGNORE_SIMILAR;
|
|
||||||
MissileBlock.pixoffs = 0;
|
MissileBlock.pixoffs = 0;
|
||||||
MissileBlock.speed = FRAGMENT_SPEED;
|
MissileBlock.speed = FRAGMENT_SPEED;
|
||||||
MissileBlock.hit_points = FRAGMENT_HITS;
|
MissileBlock.hit_points = FRAGMENT_HITS;
|
||||||
@@ -316,10 +315,7 @@ doggy_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
#define ENERGY_DRAIN 10
|
#define ENERGY_DRAIN 10
|
||||||
collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
||||||
if ((ElementPtr1->state_flags & PLAYER_SHIP)
|
if ((ElementPtr1->state_flags & PLAYER_SHIP)
|
||||||
&& (ElementPtr0->state_flags
|
&& !elementsOfSamePlayer (ElementPtr0, ElementPtr1))
|
||||||
& (GOOD_GUY | BAD_GUY)) !=
|
|
||||||
(ElementPtr1->state_flags
|
|
||||||
& (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
@@ -357,8 +353,8 @@ spawn_doggy (ELEMENT *ElementPtr)
|
|||||||
DoggyElementPtr->hit_points = 3;
|
DoggyElementPtr->hit_points = 3;
|
||||||
DoggyElementPtr->mass_points = 4;
|
DoggyElementPtr->mass_points = 4;
|
||||||
DoggyElementPtr->thrust_wait = 0;
|
DoggyElementPtr->thrust_wait = 0;
|
||||||
DoggyElementPtr->state_flags = APPEARING
|
DoggyElementPtr->playerNr = ElementPtr->playerNr;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
DoggyElementPtr->state_flags = APPEARING;
|
||||||
DoggyElementPtr->life_span = NORMAL_LIFE;
|
DoggyElementPtr->life_span = NORMAL_LIFE;
|
||||||
SetPrimType (&(GLOBAL (DisplayArray))[DoggyElementPtr->PrimIndex],
|
SetPrimType (&(GLOBAL (DisplayArray))[DoggyElementPtr->PrimIndex],
|
||||||
STAMP_PRIM);
|
STAMP_PRIM);
|
||||||
@@ -446,8 +442,7 @@ chenjesu_intelligence (ELEMENT *ShipPtr, EVALUATE_DESC *ObjectsOfConcern,
|
|||||||
&& CrystalPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon
|
&& CrystalPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon
|
||||||
&& CrystalPtr->preprocess_func
|
&& CrystalPtr->preprocess_func
|
||||||
&& CrystalPtr->life_span > 0
|
&& CrystalPtr->life_span > 0
|
||||||
&& (CrystalPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
&& elementsOfSamePlayer (CrystalPtr, ShipPtr))
|
||||||
(ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
if (ObjectsOfConcern[ENEMY_SHIP_INDEX].ObjectPtr)
|
if (ObjectsOfConcern[ENEMY_SHIP_INDEX].ObjectPtr)
|
||||||
{
|
{
|
||||||
@@ -514,8 +509,8 @@ initialize_crystal (ELEMENT *ShipPtr, HELEMENT CrystalArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = CHENJESU_OFFSET;
|
MissileBlock.pixoffs = CHENJESU_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -157,9 +157,9 @@ laser_death (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *IonSpotsPtr;
|
ELEMENT *IonSpotsPtr;
|
||||||
|
|
||||||
LockElement (hIonSpots, &IonSpotsPtr);
|
LockElement (hIonSpots, &IonSpotsPtr);
|
||||||
IonSpotsPtr->state_flags =
|
IonSpotsPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING
|
IonSpotsPtr->state_flags = FINITE_LIFE | NONSOLID
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| IGNORE_SIMILAR | APPEARING;
|
||||||
IonSpotsPtr->turn_wait = IonSpotsPtr->next_turn = 0;
|
IonSpotsPtr->turn_wait = IonSpotsPtr->next_turn = 0;
|
||||||
IonSpotsPtr->life_span = 9;
|
IonSpotsPtr->life_span = 9;
|
||||||
|
|
||||||
@@ -223,8 +223,8 @@ initialize_megawatt_laser (ELEMENT *ShipPtr, HELEMENT LaserArray[])
|
|||||||
+ DISPLAY_TO_WORLD (r.corner.y);
|
+ DISPLAY_TO_WORLD (r.corner.y);
|
||||||
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserBlock.color = cycle_array[StarShipPtr->special_counter];
|
LaserBlock.color = cycle_array[StarShipPtr->special_counter];
|
||||||
LaserArray[0] = initialize_laser (&LaserBlock);
|
LaserArray[0] = initialize_laser (&LaserBlock);
|
||||||
@@ -284,8 +284,7 @@ chmmr_postprocess (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
LockElement (GetTailElement (), &MuzzleFlashPtr);
|
LockElement (GetTailElement (), &MuzzleFlashPtr);
|
||||||
if (MuzzleFlashPtr != ElementPtr
|
if (MuzzleFlashPtr != ElementPtr
|
||||||
&& (MuzzleFlashPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
&& elementsOfSamePlayer (MuzzleFlashPtr, ElementPtr)
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& (MuzzleFlashPtr->state_flags & APPEARING)
|
&& (MuzzleFlashPtr->state_flags & APPEARING)
|
||||||
&& GetPrimType (&(GLOBAL (DisplayArray))[
|
&& GetPrimType (&(GLOBAL (DisplayArray))[
|
||||||
MuzzleFlashPtr->PrimIndex
|
MuzzleFlashPtr->PrimIndex
|
||||||
@@ -294,9 +293,9 @@ chmmr_postprocess (ELEMENT *ElementPtr)
|
|||||||
&& (hMuzzleFlash = AllocElement ()))
|
&& (hMuzzleFlash = AllocElement ()))
|
||||||
{
|
{
|
||||||
LockElement (hMuzzleFlash, &MuzzleFlashPtr);
|
LockElement (hMuzzleFlash, &MuzzleFlashPtr);
|
||||||
MuzzleFlashPtr->state_flags =
|
MuzzleFlashPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING
|
MuzzleFlashPtr->state_flags = FINITE_LIFE | NONSOLID
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| IGNORE_SIMILAR | APPEARING;
|
||||||
MuzzleFlashPtr->life_span = 1;
|
MuzzleFlashPtr->life_span = 1;
|
||||||
|
|
||||||
MuzzleFlashPtr->current = ElementPtr->next;
|
MuzzleFlashPtr->current = ElementPtr->next;
|
||||||
@@ -407,10 +406,9 @@ chmmr_postprocess (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *ShadowElementPtr;
|
ELEMENT *ShadowElementPtr;
|
||||||
|
|
||||||
LockElement (hShadow, &ShadowElementPtr);
|
LockElement (hShadow, &ShadowElementPtr);
|
||||||
|
ShadowElementPtr->playerNr = ShipElementPtr->playerNr;
|
||||||
ShadowElementPtr->state_flags =
|
ShadowElementPtr->state_flags = FINITE_LIFE | NONSOLID
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | POST_PROCESS
|
| IGNORE_SIMILAR | POST_PROCESS;
|
||||||
| (ShipElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
ShadowElementPtr->life_span = 1;
|
ShadowElementPtr->life_span = 1;
|
||||||
|
|
||||||
ShadowElementPtr->current = ShipElementPtr->next;
|
ShadowElementPtr->current = ShipElementPtr->next;
|
||||||
@@ -522,8 +520,8 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
{
|
{
|
||||||
LockElement (hObject, &ObjectPtr);
|
LockElement (hObject, &ObjectPtr);
|
||||||
hNextObject = GetPredElement (ObjectPtr);
|
hNextObject = GetPredElement (ObjectPtr);
|
||||||
if (((ObjectPtr->state_flags | ShipPtr->state_flags)
|
if (!elementsOfSamePlayer (ObjectPtr, ShipPtr)
|
||||||
& (GOOD_GUY | BAD_GUY)) == (GOOD_GUY | BAD_GUY)
|
&& ObjectPtr->playerNr != NEUTRAL_PLAYER_NUM
|
||||||
&& CollisionPossible (ObjectPtr, ShipPtr)
|
&& CollisionPossible (ObjectPtr, ShipPtr)
|
||||||
&& !OBJECT_CLOAKED (ObjectPtr))
|
&& !OBJECT_CLOAKED (ObjectPtr))
|
||||||
{
|
{
|
||||||
@@ -572,9 +570,8 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
- SattPtr->next.location.x;
|
- SattPtr->next.location.x;
|
||||||
LaserBlock.ey = ObjectPtr->next.location.y
|
LaserBlock.ey = ObjectPtr->next.location.y
|
||||||
- SattPtr->next.location.y;
|
- SattPtr->next.location.y;
|
||||||
LaserBlock.sender =
|
LaserBlock.sender = SattPtr->playerNr;
|
||||||
(SattPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
| IGNORE_SIMILAR;
|
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x00, 0x01, 0x1F), 0x4D);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x00, 0x01, 0x1F), 0x4D);
|
||||||
hPointDefense = initialize_laser (&LaserBlock);
|
hPointDefense = initialize_laser (&LaserBlock);
|
||||||
@@ -618,8 +615,8 @@ satellite_postprocess (ELEMENT *ElementPtr)
|
|||||||
PutElement (hDefense);
|
PutElement (hDefense);
|
||||||
|
|
||||||
LockElement (hDefense, &DefensePtr);
|
LockElement (hDefense, &DefensePtr);
|
||||||
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE
|
DefensePtr->playerNr = ElementPtr->playerNr;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE;
|
||||||
|
|
||||||
{
|
{
|
||||||
ELEMENT *SuccPtr;
|
ELEMENT *SuccPtr;
|
||||||
@@ -693,9 +690,9 @@ spawn_satellites (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *SattPtr;
|
ELEMENT *SattPtr;
|
||||||
|
|
||||||
LockElement (hSatellite, &SattPtr);
|
LockElement (hSatellite, &SattPtr);
|
||||||
SattPtr->state_flags =
|
SattPtr->playerNr = ElementPtr->playerNr;
|
||||||
IGNORE_SIMILAR | APPEARING | FINITE_LIFE
|
SattPtr->state_flags = IGNORE_SIMILAR | APPEARING
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| FINITE_LIFE;
|
||||||
SattPtr->life_span = NORMAL_LIFE + 1;
|
SattPtr->life_span = NORMAL_LIFE + 1;
|
||||||
SattPtr->hit_points = 10;
|
SattPtr->hit_points = 10;
|
||||||
SattPtr->mass_points = 10;
|
SattPtr->mass_points = 10;
|
||||||
@@ -747,9 +744,9 @@ chmmr_preprocess (ELEMENT *ElementPtr)
|
|||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
LockElement (hSatellite, &SattPtr);
|
LockElement (hSatellite, &SattPtr);
|
||||||
SattPtr->state_flags =
|
SattPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING
|
SattPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| APPEARING;
|
||||||
SattPtr->life_span = HYPERJUMP_LIFE + 1;
|
SattPtr->life_span = HYPERJUMP_LIFE + 1;
|
||||||
|
|
||||||
SattPtr->death_func = spawn_satellites;
|
SattPtr->death_func = spawn_satellites;
|
||||||
|
|||||||
@@ -164,8 +164,8 @@ initialize_cannon (ELEMENT *ShipPtr, HELEMENT CannonArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = MissileBlock.face;
|
MissileBlock.index = MissileBlock.face;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = DRUUGE_OFFSET;
|
MissileBlock.pixoffs = DRUUGE_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -165,11 +165,10 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *DefensePtr;
|
ELEMENT *DefensePtr;
|
||||||
|
|
||||||
LockElement (hDefense, &DefensePtr);
|
LockElement (hDefense, &DefensePtr);
|
||||||
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE |
|
DefensePtr->playerNr = ElementPtr->playerNr;
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE;
|
||||||
{
|
DefensePtr->death_func = spawn_point_defense;
|
||||||
DefensePtr->death_func = spawn_point_defense;
|
|
||||||
}
|
|
||||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||||
SetElementStarShip (DefensePtr, StarShipPtr);
|
SetElementStarShip (DefensePtr, StarShipPtr);
|
||||||
UnlockElement (hDefense);
|
UnlockElement (hDefense);
|
||||||
@@ -237,8 +236,8 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
- ShipPtr->next.location.x;
|
- ShipPtr->next.location.x;
|
||||||
LaserBlock.ey = ObjectPtr->next.location.y
|
LaserBlock.ey = ObjectPtr->next.location.y
|
||||||
- ShipPtr->next.location.y;
|
- ShipPtr->next.location.y;
|
||||||
LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F);
|
||||||
hPointDefense = initialize_laser (&LaserBlock);
|
hPointDefense = initialize_laser (&LaserBlock);
|
||||||
@@ -276,7 +275,8 @@ initialize_nuke (ELEMENT *ShipPtr, HELEMENT NukeArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY);
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
|
MissileBlock.flags = 0;
|
||||||
MissileBlock.pixoffs = HUMAN_OFFSET;
|
MissileBlock.pixoffs = HUMAN_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -190,8 +190,8 @@ initialize_flame (ELEMENT *ShipPtr, HELEMENT FlameArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = ILWRATH_OFFSET;
|
MissileBlock.pixoffs = ILWRATH_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ static void
|
|||||||
comet_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
comet_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||||
ELEMENT *ElementPtr1, POINT *pPt1)
|
ELEMENT *ElementPtr1, POINT *pPt1)
|
||||||
{
|
{
|
||||||
if (ElementPtr1->state_flags & GOOD_GUY)
|
if (ElementPtr1->playerNr == RPG_PLAYER_NUM)
|
||||||
{
|
{
|
||||||
BYTE old_hits;
|
BYTE old_hits;
|
||||||
COUNT old_life;
|
COUNT old_life;
|
||||||
@@ -211,7 +211,8 @@ spawn_comet (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = 0;
|
MissileBlock.face = 0;
|
||||||
MissileBlock.index = 24;
|
MissileBlock.index = 24;
|
||||||
MissileBlock.sender = BAD_GUY | IGNORE_SIMILAR;
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = 0;
|
MissileBlock.pixoffs = 0;
|
||||||
MissileBlock.speed = 0;
|
MissileBlock.speed = 0;
|
||||||
MissileBlock.hit_points = COMET_HITS;
|
MissileBlock.hit_points = COMET_HITS;
|
||||||
@@ -293,7 +294,7 @@ static void
|
|||||||
gate_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
gate_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||||
ELEMENT *ElementPtr1, POINT *pPt1)
|
ELEMENT *ElementPtr1, POINT *pPt1)
|
||||||
{
|
{
|
||||||
if (ElementPtr1->state_flags & GOOD_GUY)
|
if (ElementPtr1->playerNr == RPG_PLAYER_NUM)
|
||||||
{
|
{
|
||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
@@ -591,7 +592,7 @@ sentinel_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
COUNT angle;
|
COUNT angle;
|
||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
if (ElementPtr1->state_flags & BAD_GUY)
|
if (ElementPtr1->playerNr == NPC_PLAYER_NUM)
|
||||||
{
|
{
|
||||||
if (ElementPtr0->preprocess_func == ElementPtr1->preprocess_func
|
if (ElementPtr0->preprocess_func == ElementPtr1->preprocess_func
|
||||||
&& !(ElementPtr0->state_flags & DEFY_PHYSICS)
|
&& !(ElementPtr0->state_flags & DEFY_PHYSICS)
|
||||||
@@ -718,7 +719,8 @@ samatra_postprocess (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = 0;
|
MissileBlock.face = 0;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = BAD_GUY;
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
|
MissileBlock.flags = 0;
|
||||||
MissileBlock.pixoffs = 0;
|
MissileBlock.pixoffs = 0;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -789,8 +791,8 @@ samatra_preprocess (ELEMENT *ElementPtr)
|
|||||||
GeneratorPtr->hit_points = GENERATOR_HITS;
|
GeneratorPtr->hit_points = GENERATOR_HITS;
|
||||||
GeneratorPtr->mass_points = MAX_SHIP_MASS * 10;
|
GeneratorPtr->mass_points = MAX_SHIP_MASS * 10;
|
||||||
GeneratorPtr->life_span = NORMAL_LIFE;
|
GeneratorPtr->life_span = NORMAL_LIFE;
|
||||||
GeneratorPtr->state_flags =
|
GeneratorPtr->playerNr = ElementPtr->playerNr;
|
||||||
APPEARING | BAD_GUY | IGNORE_SIMILAR;
|
GeneratorPtr->state_flags = APPEARING | IGNORE_SIMILAR;
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
&GLOBAL (DisplayArray[GeneratorPtr->PrimIndex]),
|
&GLOBAL (DisplayArray[GeneratorPtr->PrimIndex]),
|
||||||
STAMP_PRIM
|
STAMP_PRIM
|
||||||
@@ -833,8 +835,8 @@ samatra_preprocess (ELEMENT *ElementPtr)
|
|||||||
LockElement (hTurret, &TurretPtr);
|
LockElement (hTurret, &TurretPtr);
|
||||||
TurretPtr->hit_points = 1;
|
TurretPtr->hit_points = 1;
|
||||||
TurretPtr->life_span = NORMAL_LIFE;
|
TurretPtr->life_span = NORMAL_LIFE;
|
||||||
TurretPtr->state_flags =
|
TurretPtr->playerNr = ElementPtr->playerNr;
|
||||||
APPEARING | BAD_GUY | IGNORE_SIMILAR | NONSOLID;
|
TurretPtr->state_flags = APPEARING | IGNORE_SIMILAR | NONSOLID;
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
&GLOBAL (DisplayArray[TurretPtr->PrimIndex]),
|
&GLOBAL (DisplayArray[TurretPtr->PrimIndex]),
|
||||||
STAMP_PRIM
|
STAMP_PRIM
|
||||||
@@ -869,8 +871,9 @@ samatra_preprocess (ELEMENT *ElementPtr)
|
|||||||
GatePtr->hit_points = GATE_HITS;
|
GatePtr->hit_points = GATE_HITS;
|
||||||
GatePtr->mass_points = GATE_DAMAGE;
|
GatePtr->mass_points = GATE_DAMAGE;
|
||||||
GatePtr->life_span = 2;
|
GatePtr->life_span = 2;
|
||||||
GatePtr->state_flags =
|
GatePtr->playerNr = ElementPtr->playerNr;
|
||||||
APPEARING | FINITE_LIFE | BAD_GUY | IGNORE_SIMILAR;
|
GatePtr->state_flags = APPEARING | FINITE_LIFE
|
||||||
|
| IGNORE_SIMILAR;
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
&GLOBAL (DisplayArray[GatePtr->PrimIndex]),
|
&GLOBAL (DisplayArray[GatePtr->PrimIndex]),
|
||||||
STAMP_PRIM
|
STAMP_PRIM
|
||||||
|
|||||||
@@ -312,8 +312,8 @@ initialize_pump_up (ELEMENT *ShipPtr, HELEMENT PumpUpArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = MELNORME_OFFSET;
|
MissileBlock.pixoffs = MELNORME_OFFSET;
|
||||||
MissileBlock.speed = DISPLAY_TO_WORLD (MELNORME_OFFSET);
|
MissileBlock.speed = DISPLAY_TO_WORLD (MELNORME_OFFSET);
|
||||||
MissileBlock.hit_points = PUMPUP_DAMAGE;
|
MissileBlock.hit_points = PUMPUP_DAMAGE;
|
||||||
@@ -380,9 +380,8 @@ confuse_preprocess (ELEMENT *ElementPtr)
|
|||||||
if (hEffect)
|
if (hEffect)
|
||||||
{
|
{
|
||||||
LockElement (hEffect, &eptr);
|
LockElement (hEffect, &eptr);
|
||||||
|
eptr->playerNr = ElementPtr->playerNr;
|
||||||
eptr->state_flags = FINITE_LIFE | NONSOLID | CHANGING
|
eptr->state_flags = FINITE_LIFE | NONSOLID | CHANGING;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
eptr->life_span = 1;
|
eptr->life_span = 1;
|
||||||
eptr->current = eptr->next = ElementPtr->next;
|
eptr->current = eptr->next = ElementPtr->next;
|
||||||
eptr->preprocess_func = confuse_preprocess;
|
eptr->preprocess_func = confuse_preprocess;
|
||||||
@@ -417,8 +416,7 @@ confusion_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
hConfusionElement; hConfusionElement = hNextElement)
|
hConfusionElement; hConfusionElement = hNextElement)
|
||||||
{
|
{
|
||||||
LockElement (hConfusionElement, &ConfusionPtr);
|
LockElement (hConfusionElement, &ConfusionPtr);
|
||||||
if ((ConfusionPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
if (elementsOfSamePlayer (ConfusionPtr, ElementPtr0)
|
||||||
(ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& ConfusionPtr->current.image.farray ==
|
&& ConfusionPtr->current.image.farray ==
|
||||||
StarShipPtr->RaceDescPtr->ship_data.special
|
StarShipPtr->RaceDescPtr->ship_data.special
|
||||||
&& (ConfusionPtr->state_flags & NONSOLID))
|
&& (ConfusionPtr->state_flags & NONSOLID))
|
||||||
@@ -443,8 +441,8 @@ confusion_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
ConfusionPtr->current.image.frame, 8
|
ConfusionPtr->current.image.frame, 8
|
||||||
);
|
);
|
||||||
ConfusionPtr->next = ConfusionPtr->current;
|
ConfusionPtr->next = ConfusionPtr->current;
|
||||||
ConfusionPtr->state_flags = FINITE_LIFE | NONSOLID | CHANGING
|
ConfusionPtr->playerNr = ElementPtr0->playerNr;
|
||||||
| (ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY));
|
ConfusionPtr->state_flags = FINITE_LIFE | NONSOLID | CHANGING;
|
||||||
ConfusionPtr->preprocess_func = confuse_preprocess;
|
ConfusionPtr->preprocess_func = confuse_preprocess;
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
&(GLOBAL (DisplayArray))[ConfusionPtr->PrimIndex],
|
&(GLOBAL (DisplayArray))[ConfusionPtr->PrimIndex],
|
||||||
@@ -488,8 +486,8 @@ initialize_confusion (ELEMENT *ShipPtr, HELEMENT ConfusionArray[])
|
|||||||
ConfusionBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
ConfusionBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
ConfusionBlock.index = 0;
|
ConfusionBlock.index = 0;
|
||||||
ConfusionBlock.face = StarShipPtr->ShipFacing;
|
ConfusionBlock.face = StarShipPtr->ShipFacing;
|
||||||
ConfusionBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
ConfusionBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
ConfusionBlock.flags = IGNORE_SIMILAR;
|
||||||
ConfusionBlock.pixoffs = MELNORME_OFFSET;
|
ConfusionBlock.pixoffs = MELNORME_OFFSET;
|
||||||
ConfusionBlock.speed = CMISSILE_SPEED;
|
ConfusionBlock.speed = CMISSILE_SPEED;
|
||||||
ConfusionBlock.hit_points = CMISSILE_HITS;
|
ConfusionBlock.hit_points = CMISSILE_HITS;
|
||||||
@@ -524,8 +522,8 @@ initialize_test_pump_up (ELEMENT *ShipPtr, HELEMENT PumpUpArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = MELNORME_OFFSET;
|
MissileBlock.pixoffs = MELNORME_OFFSET;
|
||||||
MissileBlock.speed = PUMPUP_SPEED;
|
MissileBlock.speed = PUMPUP_SPEED;
|
||||||
MissileBlock.hit_points = PUMPUP_DAMAGE;
|
MissileBlock.hit_points = PUMPUP_DAMAGE;
|
||||||
|
|||||||
@@ -248,8 +248,7 @@ twin_laser_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
ELEMENT *ElementPtr1, POINT *pPt1)
|
ELEMENT *ElementPtr1, POINT *pPt1)
|
||||||
{
|
{
|
||||||
if (!(ElementPtr1->state_flags & PLAYER_SHIP)
|
if (!(ElementPtr1->state_flags & PLAYER_SHIP)
|
||||||
|| !(ElementPtr0->state_flags & ElementPtr1->state_flags
|
|| !elementsOfSamePlayer (ElementPtr0, ElementPtr1))
|
||||||
& (GOOD_GUY | BAD_GUY)))
|
|
||||||
weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +274,8 @@ initialize_dual_weapons (ELEMENT *ShipPtr, HELEMENT WeaponArray[])
|
|||||||
LASER_BLOCK LaserBlock;
|
LASER_BLOCK LaserBlock;
|
||||||
ELEMENT *LaserPtr;
|
ELEMENT *LaserPtr;
|
||||||
|
|
||||||
LaserBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY);
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
|
LaserBlock.flags = 0;
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x0A, 0x0A), 0x0C);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x0A, 0x0A), 0x0C);
|
||||||
LaserBlock.face = facing;
|
LaserBlock.face = facing;
|
||||||
@@ -318,8 +318,8 @@ initialize_dual_weapons (ELEMENT *ShipPtr, HELEMENT WeaponArray[])
|
|||||||
ELEMENT *TorpPtr;
|
ELEMENT *TorpPtr;
|
||||||
|
|
||||||
TorpBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
TorpBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
TorpBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
TorpBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
TorpBlock.flags = IGNORE_SIMILAR;
|
||||||
TorpBlock.pixoffs = 0;
|
TorpBlock.pixoffs = 0;
|
||||||
TorpBlock.speed = MISSILE_SPEED;
|
TorpBlock.speed = MISSILE_SPEED;
|
||||||
TorpBlock.hit_points = MISSILE_HITS;
|
TorpBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -306,7 +306,8 @@ initialize_plasma (ELEMENT *ShipPtr, HELEMENT PlasmaArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY);
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
|
MissileBlock.flags = 0;
|
||||||
MissileBlock.pixoffs = MYCON_OFFSET;
|
MissileBlock.pixoffs = MYCON_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_DAMAGE;
|
MissileBlock.hit_points = MISSILE_DAMAGE;
|
||||||
|
|||||||
+20
-28
@@ -116,8 +116,7 @@ static void
|
|||||||
howitzer_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
howitzer_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||||
ELEMENT *ElementPtr1, POINT *pPt1)
|
ELEMENT *ElementPtr1, POINT *pPt1)
|
||||||
{
|
{
|
||||||
if ((ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY))
|
if (!elementsOfSamePlayer (ElementPtr0, ElementPtr1))
|
||||||
!= (ElementPtr1->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,8 +155,8 @@ initialize_turret_missile (ELEMENT *ShipPtr, HELEMENT MissileArray[])
|
|||||||
+ TurretPtr->thrust_wait);
|
+ TurretPtr->thrust_wait);
|
||||||
UnlockElement (GetSuccElement (ShipPtr));
|
UnlockElement (GetSuccElement (ShipPtr));
|
||||||
|
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = TURRET_OFFSET;
|
MissileBlock.pixoffs = TURRET_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -387,8 +386,7 @@ intruder_preprocess (ELEMENT *ElementPtr)
|
|||||||
{
|
{
|
||||||
LockElement (hElement, &ShipPtr);
|
LockElement (hElement, &ShipPtr);
|
||||||
if ((ShipPtr->state_flags & PLAYER_SHIP)
|
if ((ShipPtr->state_flags & PLAYER_SHIP)
|
||||||
&& (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
&& !elementsOfSamePlayer (ShipPtr, ElementPtr))
|
||||||
!= (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
STAMP s;
|
STAMP s;
|
||||||
|
|
||||||
@@ -542,8 +540,7 @@ marine_preprocess (ELEMENT *ElementPtr)
|
|||||||
&& ObjectPtr->crew_level
|
&& ObjectPtr->crew_level
|
||||||
&& !OBJECT_CLOAKED (ObjectPtr))
|
&& !OBJECT_CLOAKED (ObjectPtr))
|
||||||
{
|
{
|
||||||
if ((ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) !=
|
if (!elementsOfSamePlayer (ObjectPtr, ElementPtr))
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
if (ElementPtr->state_flags & IGNORE_SIMILAR)
|
if (ElementPtr->state_flags & IGNORE_SIMILAR)
|
||||||
hTarget = hObject;
|
hTarget = hObject;
|
||||||
@@ -588,8 +585,7 @@ marine_preprocess (ELEMENT *ElementPtr)
|
|||||||
COUNT num_frames;
|
COUNT num_frames;
|
||||||
VELOCITY_DESC ShipVelocity;
|
VELOCITY_DESC ShipVelocity;
|
||||||
|
|
||||||
if ((ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) ==
|
if (elementsOfSamePlayer (ObjectPtr, ElementPtr)
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& (ElementPtr->state_flags & IGNORE_SIMILAR))
|
&& (ElementPtr->state_flags & IGNORE_SIMILAR))
|
||||||
{
|
{
|
||||||
ElementPtr->next.image.frame = SetAbsFrameIndex (
|
ElementPtr->next.image.frame = SetAbsFrameIndex (
|
||||||
@@ -684,6 +680,7 @@ marine_preprocess (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
InsertElement (hIonElement, GetHeadElement ());
|
InsertElement (hIonElement, GetHeadElement ());
|
||||||
LockElement (hIonElement, &IonElementPtr);
|
LockElement (hIonElement, &IonElementPtr);
|
||||||
|
IonElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
IonElementPtr->state_flags =
|
IonElementPtr->state_flags =
|
||||||
APPEARING | FINITE_LIFE | NONSOLID;
|
APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
IonElementPtr->life_span =
|
IonElementPtr->life_span =
|
||||||
@@ -731,8 +728,7 @@ marine_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
|||||||
&& !(ElementPtr0->state_flags & (NONSOLID | COLLISION))
|
&& !(ElementPtr0->state_flags & (NONSOLID | COLLISION))
|
||||||
&& !(ElementPtr1->state_flags & FINITE_LIFE))
|
&& !(ElementPtr1->state_flags & FINITE_LIFE))
|
||||||
{
|
{
|
||||||
if ((ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY))
|
if (!elementsOfSamePlayer (ElementPtr0, ElementPtr1))
|
||||||
!= (ElementPtr1->state_flags & (GOOD_GUY | BAD_GUY)))
|
|
||||||
{
|
{
|
||||||
ElementPtr0->turn_wait =
|
ElementPtr0->turn_wait =
|
||||||
MAKE_BYTE (5, HINIBBLE (ElementPtr0->turn_wait));
|
MAKE_BYTE (5, HINIBBLE (ElementPtr0->turn_wait));
|
||||||
@@ -847,10 +843,10 @@ turret_postprocess (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *TurretPtr;
|
ELEMENT *TurretPtr;
|
||||||
|
|
||||||
LockElement (hTurret, &TurretPtr);
|
LockElement (hTurret, &TurretPtr);
|
||||||
TurretPtr->state_flags =
|
TurretPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR
|
TurretPtr->state_flags = FINITE_LIFE | NONSOLID
|
||||||
| CHANGING | PRE_PROCESS | POST_PROCESS
|
| IGNORE_SIMILAR | CHANGING | PRE_PROCESS
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| POST_PROCESS;
|
||||||
TurretPtr->life_span = 1;
|
TurretPtr->life_span = 1;
|
||||||
TurretPtr->current.image = ElementPtr->current.image;
|
TurretPtr->current.image = ElementPtr->current.image;
|
||||||
TurretPtr->current.location = ShipPtr->next.location;
|
TurretPtr->current.location = ShipPtr->next.location;
|
||||||
@@ -886,9 +882,7 @@ turret_postprocess (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
LockElement (GetTailElement (), &TurretEffectPtr);
|
LockElement (GetTailElement (), &TurretEffectPtr);
|
||||||
if (TurretEffectPtr != ElementPtr
|
if (TurretEffectPtr != ElementPtr
|
||||||
&& (TurretEffectPtr->state_flags &
|
&& elementsOfSamePlayer (TurretEffectPtr, ElementPtr)
|
||||||
(GOOD_GUY | BAD_GUY)) ==
|
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& (TurretEffectPtr->state_flags & APPEARING)
|
&& (TurretEffectPtr->state_flags & APPEARING)
|
||||||
&& GetPrimType (&(GLOBAL (DisplayArray))[
|
&& GetPrimType (&(GLOBAL (DisplayArray))[
|
||||||
TurretEffectPtr->PrimIndex
|
TurretEffectPtr->PrimIndex
|
||||||
@@ -901,10 +895,9 @@ turret_postprocess (ELEMENT *ElementPtr)
|
|||||||
SINE (facing, DISPLAY_TO_WORLD (2));
|
SINE (facing, DISPLAY_TO_WORLD (2));
|
||||||
|
|
||||||
LockElement (hTurretEffect, &TurretEffectPtr);
|
LockElement (hTurretEffect, &TurretEffectPtr);
|
||||||
|
TurretEffectPtr->playerNr = ElementPtr->playerNr;
|
||||||
TurretEffectPtr->state_flags = FINITE_LIFE
|
TurretEffectPtr->state_flags = FINITE_LIFE
|
||||||
| NONSOLID | IGNORE_SIMILAR | APPEARING
|
| NONSOLID | IGNORE_SIMILAR | APPEARING;
|
||||||
| (ElementPtr->state_flags &
|
|
||||||
(GOOD_GUY | BAD_GUY));
|
|
||||||
TurretEffectPtr->life_span = 4;
|
TurretEffectPtr->life_span = 4;
|
||||||
|
|
||||||
TurretEffectPtr->current.location.x =
|
TurretEffectPtr->current.location.x =
|
||||||
@@ -964,9 +957,9 @@ turret_postprocess (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *SpaceMarinePtr;
|
ELEMENT *SpaceMarinePtr;
|
||||||
|
|
||||||
LockElement (hSpaceMarine, &SpaceMarinePtr);
|
LockElement (hSpaceMarine, &SpaceMarinePtr);
|
||||||
SpaceMarinePtr->state_flags =
|
SpaceMarinePtr->playerNr = ElementPtr->playerNr;
|
||||||
IGNORE_SIMILAR | APPEARING | CREW_OBJECT
|
SpaceMarinePtr->state_flags = IGNORE_SIMILAR | APPEARING
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| CREW_OBJECT;
|
||||||
SpaceMarinePtr->life_span = NORMAL_LIFE;
|
SpaceMarinePtr->life_span = NORMAL_LIFE;
|
||||||
SpaceMarinePtr->hit_points = 3;
|
SpaceMarinePtr->hit_points = 3;
|
||||||
SpaceMarinePtr->mass_points = 1;
|
SpaceMarinePtr->mass_points = 1;
|
||||||
@@ -1044,9 +1037,8 @@ orz_preprocess (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *TurretPtr;
|
ELEMENT *TurretPtr;
|
||||||
|
|
||||||
LockElement (hTurret, &TurretPtr);
|
LockElement (hTurret, &TurretPtr);
|
||||||
TurretPtr->state_flags =
|
TurretPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR
|
TurretPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
TurretPtr->life_span = 1;
|
TurretPtr->life_span = 1;
|
||||||
TurretPtr->current.image.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
TurretPtr->current.image.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
TurretPtr->current.image.frame =
|
TurretPtr->current.image.frame =
|
||||||
|
|||||||
@@ -141,8 +141,8 @@ initialize_bug_missile (ELEMENT *ShipPtr, HELEMENT MissileArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = PKUNK_OFFSET;
|
MissileBlock.pixoffs = PKUNK_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -224,9 +224,7 @@ new_pkunk (ELEMENT *ElementPtr)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR
|
ElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
|
|
||||||
ElementPtr->mass_points = SHIP_MASS;
|
ElementPtr->mass_points = SHIP_MASS;
|
||||||
ElementPtr->preprocess_func = StarShipPtr->RaceDescPtr->preprocess_func;
|
ElementPtr->preprocess_func = StarShipPtr->RaceDescPtr->preprocess_func;
|
||||||
ElementPtr->postprocess_func = StarShipPtr->RaceDescPtr->postprocess_func;
|
ElementPtr->postprocess_func = StarShipPtr->RaceDescPtr->postprocess_func;
|
||||||
@@ -387,6 +385,7 @@ phoenix_transition (ELEMENT *ElementPtr)
|
|||||||
PutElement (hShipImage);
|
PutElement (hShipImage);
|
||||||
|
|
||||||
LockElement (hShipImage, &ShipImagePtr);
|
LockElement (hShipImage, &ShipImagePtr);
|
||||||
|
ShipImagePtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
ShipImagePtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
ShipImagePtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
ShipImagePtr->life_span = TRANSITION_LIFE;
|
ShipImagePtr->life_span = TRANSITION_LIFE;
|
||||||
SetPrimType (&(GLOBAL (DisplayArray))[ShipImagePtr->PrimIndex],
|
SetPrimType (&(GLOBAL (DisplayArray))[ShipImagePtr->PrimIndex],
|
||||||
@@ -450,9 +449,8 @@ pkunk_preprocess (ELEMENT *ElementPtr)
|
|||||||
{
|
{
|
||||||
|
|
||||||
LockElement (hPhoenix, &PhoenixPtr);
|
LockElement (hPhoenix, &PhoenixPtr);
|
||||||
PhoenixPtr->state_flags =
|
PhoenixPtr->playerNr = ElementPtr->playerNr;
|
||||||
FINITE_LIFE | NONSOLID | IGNORE_SIMILAR
|
PhoenixPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
PhoenixPtr->life_span = 1;
|
PhoenixPtr->life_span = 1;
|
||||||
|
|
||||||
PhoenixPtr->death_func = intercept_pkunk_death;
|
PhoenixPtr->death_func = intercept_pkunk_death;
|
||||||
|
|||||||
@@ -125,8 +125,8 @@ initialize_standard_missile (ELEMENT *ShipPtr, HELEMENT MissileArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = SHOFIXTI_OFFSET;
|
MissileBlock.pixoffs = SHOFIXTI_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -187,6 +187,7 @@ destruct_preprocess (ELEMENT *ElementPtr)
|
|||||||
LockElement (hDestruct, &DestructPtr);
|
LockElement (hDestruct, &DestructPtr);
|
||||||
SetElementStarShip (DestructPtr, StarShipPtr);
|
SetElementStarShip (DestructPtr, StarShipPtr);
|
||||||
DestructPtr->hit_points = DestructPtr->mass_points = 0;
|
DestructPtr->hit_points = DestructPtr->mass_points = 0;
|
||||||
|
DestructPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
DestructPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
DestructPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
DestructPtr->life_span = (NUM_EXPLOSION_FRAMES - 3) - 1;
|
DestructPtr->life_span = (NUM_EXPLOSION_FRAMES - 3) - 1;
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
@@ -234,8 +235,8 @@ self_destruct (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *DestructPtr;
|
ELEMENT *DestructPtr;
|
||||||
|
|
||||||
LockElement (hDestruct, &DestructPtr);
|
LockElement (hDestruct, &DestructPtr);
|
||||||
DestructPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE |
|
DestructPtr->playerNr = ElementPtr->playerNr;
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
DestructPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE;
|
||||||
DestructPtr->next.location = ElementPtr->next.location;
|
DestructPtr->next.location = ElementPtr->next.location;
|
||||||
DestructPtr->life_span = 0;
|
DestructPtr->life_span = 0;
|
||||||
DestructPtr->pParent = ElementPtr->pParent;
|
DestructPtr->pParent = ElementPtr->pParent;
|
||||||
|
|||||||
@@ -314,11 +314,10 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
ELEMENT *DefensePtr;
|
ELEMENT *DefensePtr;
|
||||||
|
|
||||||
LockElement (hDefense, &DefensePtr);
|
LockElement (hDefense, &DefensePtr);
|
||||||
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE |
|
DefensePtr->playerNr = ElementPtr->playerNr;
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE;
|
||||||
{
|
DefensePtr->death_func = spawn_point_defense;
|
||||||
DefensePtr->death_func = spawn_point_defense;
|
|
||||||
}
|
|
||||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||||
SetElementStarShip (DefensePtr, StarShipPtr);
|
SetElementStarShip (DefensePtr, StarShipPtr);
|
||||||
UnlockElement (hDefense);
|
UnlockElement (hDefense);
|
||||||
@@ -403,8 +402,8 @@ spawn_point_defense (ELEMENT *ElementPtr)
|
|||||||
- ShipPtr->next.location.x;
|
- ShipPtr->next.location.x;
|
||||||
LaserBlock.ey = ObjectPtr->next.location.y
|
LaserBlock.ey = ObjectPtr->next.location.y
|
||||||
- ShipPtr->next.location.y;
|
- ShipPtr->next.location.y;
|
||||||
LaserBlock.sender = (ShipPtr->state_flags &
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
(GOOD_GUY | BAD_GUY)) | IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserBlock.color = LaserColor;
|
LaserBlock.color = LaserColor;
|
||||||
hPointDefense = initialize_laser (&LaserBlock);
|
hPointDefense = initialize_laser (&LaserBlock);
|
||||||
@@ -571,8 +570,8 @@ initialize_blasters (ELEMENT *ShipPtr, HELEMENT BlasterArray[])
|
|||||||
lpMB->cx = ShipPtr->next.location.x;
|
lpMB->cx = ShipPtr->next.location.x;
|
||||||
lpMB->cy = ShipPtr->next.location.y;
|
lpMB->cy = ShipPtr->next.location.y;
|
||||||
lpMB->farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
lpMB->farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
lpMB->sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
lpMB->sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
lpMB->flags = IGNORE_SIMILAR;
|
||||||
lpMB->blast_offs = BLASTER_OFFSET;
|
lpMB->blast_offs = BLASTER_OFFSET;
|
||||||
lpMB->speed = BLASTER_SPEED;
|
lpMB->speed = BLASTER_SPEED;
|
||||||
lpMB->preprocess_func = blaster_preprocess;
|
lpMB->preprocess_func = blaster_preprocess;
|
||||||
|
|||||||
@@ -152,8 +152,8 @@ initialize_lightning (ELEMENT *ElementPtr, HELEMENT LaserArray[])
|
|||||||
LaserBlock.ex = 0;
|
LaserBlock.ex = 0;
|
||||||
LaserBlock.ey = 0;
|
LaserBlock.ey = 0;
|
||||||
|
|
||||||
LaserBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ElementPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.face = 0;
|
LaserBlock.face = 0;
|
||||||
LaserBlock.pixoffs = 0;
|
LaserBlock.pixoffs = 0;
|
||||||
LaserArray[0] = initialize_laser (&LaserBlock);
|
LaserArray[0] = initialize_laser (&LaserBlock);
|
||||||
@@ -306,9 +306,8 @@ harvest_space_junk (ELEMENT *ElementPtr)
|
|||||||
LockElement (hElement, &ObjPtr);
|
LockElement (hElement, &ObjPtr);
|
||||||
hNextElement = GetSuccElement (ObjPtr);
|
hNextElement = GetSuccElement (ObjPtr);
|
||||||
|
|
||||||
if (!(ObjPtr->state_flags
|
if (!(ObjPtr->state_flags & (APPEARING | PLAYER_SHIP | FINITE_LIFE))
|
||||||
& (APPEARING | GOOD_GUY | BAD_GUY
|
&& ObjPtr->playerNr == NEUTRAL_PLAYER_NUM
|
||||||
| PLAYER_SHIP | FINITE_LIFE))
|
|
||||||
&& !GRAVITY_MASS (ObjPtr->mass_points)
|
&& !GRAVITY_MASS (ObjPtr->mass_points)
|
||||||
&& CollisionPossible (ObjPtr, ElementPtr))
|
&& CollisionPossible (ObjPtr, ElementPtr))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -154,7 +154,8 @@ spawn_butt_missile (ELEMENT *ShipPtr)
|
|||||||
ButtMissileBlock.face = ButtMissileBlock.index =
|
ButtMissileBlock.face = ButtMissileBlock.index =
|
||||||
NORMALIZE_FACING (StarShipPtr->ShipFacing
|
NORMALIZE_FACING (StarShipPtr->ShipFacing
|
||||||
+ ANGLE_TO_FACING (HALF_CIRCLE));
|
+ ANGLE_TO_FACING (HALF_CIRCLE));
|
||||||
ButtMissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY);
|
ButtMissileBlock.sender = ShipPtr->playerNr;
|
||||||
|
ButtMissileBlock.flags = 0;
|
||||||
ButtMissileBlock.pixoffs = SPATHI_REAR_OFFSET;
|
ButtMissileBlock.pixoffs = SPATHI_REAR_OFFSET;
|
||||||
ButtMissileBlock.speed = DISCRIMINATOR_SPEED;
|
ButtMissileBlock.speed = DISCRIMINATOR_SPEED;
|
||||||
ButtMissileBlock.hit_points = DISCRIMINATOR_HITS;
|
ButtMissileBlock.hit_points = DISCRIMINATOR_HITS;
|
||||||
@@ -248,8 +249,8 @@ initialize_standard_missile (ELEMENT *ShipPtr, HELEMENT MissileArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = SPATHI_FORWARD_OFFSET;
|
MissileBlock.pixoffs = SPATHI_FORWARD_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ initialize_horn (ELEMENT *ShipPtr, HELEMENT HornArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = SUPOX_OFFSET;
|
MissileBlock.pixoffs = SUPOX_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -125,8 +125,8 @@ initialize_dagger (ELEMENT *ShipPtr, HELEMENT DaggerArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = SYREEN_OFFSET;
|
MissileBlock.pixoffs = SYREEN_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -153,8 +153,8 @@ spawn_crew (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
LockElement (hCrew, &CrewPtr);
|
LockElement (hCrew, &CrewPtr);
|
||||||
CrewPtr->next.location = ElementPtr->next.location;
|
CrewPtr->next.location = ElementPtr->next.location;
|
||||||
CrewPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE
|
CrewPtr->playerNr = ElementPtr->playerNr;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
CrewPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE;
|
||||||
CrewPtr->life_span = 0;
|
CrewPtr->life_span = 0;
|
||||||
CrewPtr->death_func = spawn_crew;
|
CrewPtr->death_func = spawn_crew;
|
||||||
CrewPtr->pParent = ElementPtr->pParent;
|
CrewPtr->pParent = ElementPtr->pParent;
|
||||||
@@ -177,8 +177,7 @@ spawn_crew (ELEMENT *ElementPtr)
|
|||||||
hNextElement = GetSuccElement (ObjPtr);
|
hNextElement = GetSuccElement (ObjPtr);
|
||||||
|
|
||||||
if ((ObjPtr->state_flags & PLAYER_SHIP)
|
if ((ObjPtr->state_flags & PLAYER_SHIP)
|
||||||
&& (ObjPtr->state_flags & (GOOD_GUY | BAD_GUY)) !=
|
&& !elementsOfSamePlayer (ObjPtr, ElementPtr)
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& ObjPtr->crew_level > 1)
|
&& ObjPtr->crew_level > 1)
|
||||||
{
|
{
|
||||||
SIZE dx, dy;
|
SIZE dx, dy;
|
||||||
|
|||||||
@@ -254,8 +254,8 @@ initialize_horn (ELEMENT *ShipPtr, HELEMENT HornArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = THRADDASH_OFFSET;
|
MissileBlock.pixoffs = THRADDASH_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -328,8 +328,8 @@ thraddash_preprocess (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.index = GetFrameCount (
|
MissileBlock.index = GetFrameCount (
|
||||||
StarShipPtr->RaceDescPtr->ship_data.special[0]
|
StarShipPtr->RaceDescPtr->ship_data.special[0]
|
||||||
) - 1;
|
) - 1;
|
||||||
MissileBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = 0;
|
MissileBlock.pixoffs = 0;
|
||||||
MissileBlock.speed = 0;
|
MissileBlock.speed = 0;
|
||||||
MissileBlock.hit_points = NAPALM_HITS;
|
MissileBlock.hit_points = NAPALM_HITS;
|
||||||
|
|||||||
@@ -274,8 +274,8 @@ initialize_cone (ELEMENT *ShipPtr, HELEMENT ConeArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = UMGAH_OFFSET;
|
MissileBlock.pixoffs = UMGAH_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
|
|||||||
@@ -126,8 +126,8 @@ initialize_fusion (ELEMENT *ShipPtr, HELEMENT FusionArray[])
|
|||||||
MissileBlock.cy = ShipPtr->next.location.y;
|
MissileBlock.cy = ShipPtr->next.location.y;
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = URQUAN_OFFSET;
|
MissileBlock.pixoffs = URQUAN_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -162,8 +162,8 @@ fighter_postprocess (ELEMENT *ElementPtr)
|
|||||||
LaserBlock.face = ElementPtr->thrust_wait;
|
LaserBlock.face = ElementPtr->thrust_wait;
|
||||||
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ElementPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = FIGHTER_OFFSET;
|
LaserBlock.pixoffs = FIGHTER_OFFSET;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E);
|
||||||
Laser = initialize_laser (&LaserBlock);
|
Laser = initialize_laser (&LaserBlock);
|
||||||
@@ -415,9 +415,9 @@ spawn_fighters (ELEMENT *ElementPtr)
|
|||||||
FighterElementPtr->hit_points = 1;
|
FighterElementPtr->hit_points = 1;
|
||||||
FighterElementPtr->mass_points = 0;
|
FighterElementPtr->mass_points = 0;
|
||||||
FighterElementPtr->thrust_wait = TRACK_THRESHOLD + 1;
|
FighterElementPtr->thrust_wait = TRACK_THRESHOLD + 1;
|
||||||
FighterElementPtr->state_flags = APPEARING
|
FighterElementPtr->playerNr = ElementPtr->playerNr;
|
||||||
| FINITE_LIFE | CREW_OBJECT | IGNORE_SIMILAR
|
FighterElementPtr->state_flags = APPEARING | FINITE_LIFE
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
| CREW_OBJECT | IGNORE_SIMILAR;
|
||||||
FighterElementPtr->life_span = FIGHTER_LIFE;
|
FighterElementPtr->life_span = FIGHTER_LIFE;
|
||||||
SetPrimType (&(GLOBAL (DisplayArray))[FighterElementPtr->PrimIndex],
|
SetPrimType (&(GLOBAL (DisplayArray))[FighterElementPtr->PrimIndex],
|
||||||
STAMP_PRIM);
|
STAMP_PRIM);
|
||||||
|
|||||||
@@ -130,8 +130,8 @@ initialize_lance (ELEMENT *ShipPtr, HELEMENT WeaponArray[])
|
|||||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
MissileBlock.damage = MISSILE_DAMAGE;
|
MissileBlock.damage = MISSILE_DAMAGE;
|
||||||
|
|||||||
@@ -203,8 +203,8 @@ spawn_limpets (ELEMENT *ElementPtr)
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing + HALF_CIRCLE;
|
MissileBlock.face = StarShipPtr->ShipFacing + HALF_CIRCLE;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ElementPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = LIMPET_OFFSET;
|
MissileBlock.pixoffs = LIMPET_OFFSET;
|
||||||
MissileBlock.speed = LIMPET_SPEED;
|
MissileBlock.speed = LIMPET_SPEED;
|
||||||
MissileBlock.hit_points = LIMPET_HITS;
|
MissileBlock.hit_points = LIMPET_HITS;
|
||||||
@@ -241,8 +241,8 @@ initialize_horrific_laser (ELEMENT *ShipPtr, HELEMENT LaserArray[])
|
|||||||
LaserBlock.cy = ShipPtr->next.location.y;
|
LaserBlock.cy = ShipPtr->next.location.y;
|
||||||
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE);
|
||||||
LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
LaserBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
LaserBlock.flags = IGNORE_SIMILAR;
|
||||||
LaserBlock.pixoffs = VUX_OFFSET;
|
LaserBlock.pixoffs = VUX_OFFSET;
|
||||||
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x0A), 0x0A);
|
LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x0A), 0x0A);
|
||||||
LaserArray[0] = initialize_laser (&LaserBlock);
|
LaserArray[0] = initialize_laser (&LaserBlock);
|
||||||
|
|||||||
@@ -124,8 +124,8 @@ initialize_standard_missiles (ELEMENT *ShipPtr, HELEMENT MissileArray[])
|
|||||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = YEHAT_OFFSET;
|
MissileBlock.pixoffs = YEHAT_OFFSET;
|
||||||
MissileBlock.speed = MISSILE_SPEED;
|
MissileBlock.speed = MISSILE_SPEED;
|
||||||
MissileBlock.hit_points = MISSILE_HITS;
|
MissileBlock.hit_points = MISSILE_HITS;
|
||||||
@@ -265,12 +265,11 @@ yehat_postprocess (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
InsertElement (hShipElement, GetSuccElement (ElementPtr));
|
InsertElement (hShipElement, GetSuccElement (ElementPtr));
|
||||||
LockElement (hShipElement, &ShipElementPtr);
|
LockElement (hShipElement, &ShipElementPtr);
|
||||||
|
ShipElementPtr->playerNr = ElementPtr->playerNr;
|
||||||
ShipElementPtr->state_flags =
|
ShipElementPtr->state_flags =
|
||||||
/* in place of APPEARING */
|
/* in place of APPEARING */
|
||||||
(CHANGING | PRE_PROCESS | POST_PROCESS)
|
(CHANGING | PRE_PROCESS | POST_PROCESS)
|
||||||
| FINITE_LIFE | NONSOLID
|
| FINITE_LIFE | NONSOLID;
|
||||||
| (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
|
||||||
SetPrimType (
|
SetPrimType (
|
||||||
&(GLOBAL (DisplayArray))[ShipElementPtr->PrimIndex],
|
&(GLOBAL (DisplayArray))[ShipElementPtr->PrimIndex],
|
||||||
STAMP_PRIM
|
STAMP_PRIM
|
||||||
|
|||||||
@@ -154,8 +154,8 @@ initialize_spit (ELEMENT *ShipPtr, HELEMENT SpitArray[])
|
|||||||
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon;
|
||||||
MissileBlock.face = StarShipPtr->ShipFacing;
|
MissileBlock.face = StarShipPtr->ShipFacing;
|
||||||
MissileBlock.index = 0;
|
MissileBlock.index = 0;
|
||||||
MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
MissileBlock.sender = ShipPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
MissileBlock.flags = IGNORE_SIMILAR;
|
||||||
MissileBlock.pixoffs = ZOQFOTPIK_OFFSET;
|
MissileBlock.pixoffs = ZOQFOTPIK_OFFSET;
|
||||||
MissileBlock.speed = DISPLAY_TO_WORLD (
|
MissileBlock.speed = DISPLAY_TO_WORLD (
|
||||||
GetFrameCount (StarShipPtr->RaceDescPtr->ship_data.weapon[0])) << 1;
|
GetFrameCount (StarShipPtr->RaceDescPtr->ship_data.weapon[0])) << 1;
|
||||||
@@ -210,8 +210,8 @@ spawn_tongue (ELEMENT *ElementPtr)
|
|||||||
TongueBlock.cy = ElementPtr->next.location.y;
|
TongueBlock.cy = ElementPtr->next.location.y;
|
||||||
TongueBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
TongueBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special;
|
||||||
TongueBlock.face = TongueBlock.index = StarShipPtr->ShipFacing;
|
TongueBlock.face = TongueBlock.index = StarShipPtr->ShipFacing;
|
||||||
TongueBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))
|
TongueBlock.sender = ElementPtr->playerNr;
|
||||||
| IGNORE_SIMILAR;
|
TongueBlock.flags = IGNORE_SIMILAR;
|
||||||
TongueBlock.pixoffs = 0;
|
TongueBlock.pixoffs = 0;
|
||||||
TongueBlock.speed = TONGUE_SPEED;
|
TongueBlock.speed = TONGUE_SPEED;
|
||||||
TongueBlock.hit_points = TONGUE_HITS;
|
TongueBlock.hit_points = TONGUE_HITS;
|
||||||
|
|||||||
@@ -141,7 +141,10 @@ InitShipStatus (SHIP_INFO *SIPtr, STARSHIP *StarShipPtr, RECT *pClipRect)
|
|||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
|
|
||||||
if (StarShipPtr) // set during battle
|
if (StarShipPtr) // set during battle
|
||||||
|
{
|
||||||
|
assert (StarShipPtr->playerNr >= 0);
|
||||||
y = status_y_offsets[StarShipPtr->playerNr];
|
y = status_y_offsets[StarShipPtr->playerNr];
|
||||||
|
}
|
||||||
|
|
||||||
OldContext = SetContext (StatusContext);
|
OldContext = SetContext (StatusContext);
|
||||||
if (pClipRect)
|
if (pClipRect)
|
||||||
@@ -267,7 +270,7 @@ InitShipStatus (SHIP_INFO *SIPtr, STARSHIP *StarShipPtr, RECT *pClipRect)
|
|||||||
SetContextFont (OldFont);
|
SetContextFont (OldFont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (StarShipPtr->playerNr == 0)
|
else if (StarShipPtr->playerNr == RPG_PLAYER_NUM)
|
||||||
{ // This is SIS
|
{ // This is SIS
|
||||||
DrawCrewFuelString (y, 0);
|
DrawCrewFuelString (y, 0);
|
||||||
DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y);
|
DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y);
|
||||||
|
|||||||
+10
-4
@@ -188,6 +188,7 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
|
|||||||
|
|
||||||
BatchGraphics ();
|
BatchGraphics ();
|
||||||
|
|
||||||
|
assert (StarShipPtr->playerNr >= 0);
|
||||||
y_offs = status_y_offsets[StarShipPtr->playerNr];
|
y_offs = status_y_offsets[StarShipPtr->playerNr];
|
||||||
|
|
||||||
r.corner.x = CAPTAIN_XOFFS - 2;
|
r.corner.x = CAPTAIN_XOFFS - 2;
|
||||||
@@ -261,7 +262,8 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
|
|||||||
s.origin.y = y;
|
s.origin.y = y;
|
||||||
DrawStamp (&s);
|
DrawStamp (&s);
|
||||||
|
|
||||||
if (StarShipPtr->captains_name_index == 0 && StarShipPtr->playerNr == 0)
|
if (StarShipPtr->captains_name_index == 0
|
||||||
|
&& StarShipPtr->playerNr == RPG_PLAYER_NUM)
|
||||||
{ // This is SIS
|
{ // This is SIS
|
||||||
TEXT t;
|
TEXT t;
|
||||||
|
|
||||||
@@ -335,7 +337,7 @@ DeltaCrew (ELEMENT *ElementPtr, SIZE crew_delta)
|
|||||||
SHIP_INFO *ShipInfoPtr;
|
SHIP_INFO *ShipInfoPtr;
|
||||||
|
|
||||||
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE
|
if (LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE
|
||||||
&& (ElementPtr->state_flags & BAD_GUY))
|
&& ElementPtr->playerNr == NPC_PLAYER_NUM)
|
||||||
return (TRUE); /* Samatra can't be crew-modified */
|
return (TRUE); /* Samatra can't be crew-modified */
|
||||||
|
|
||||||
retval = TRUE;
|
retval = TRUE;
|
||||||
@@ -374,7 +376,8 @@ PreProcessStatus (ELEMENT *ShipPtr)
|
|||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||||
if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0)
|
if (StarShipPtr->captains_name_index
|
||||||
|
|| StarShipPtr->playerNr == RPG_PLAYER_NUM)
|
||||||
{ // All except Sa-Matra, no captain's window there
|
{ // All except Sa-Matra, no captain's window there
|
||||||
STATUS_FLAGS old_status_flags, cur_status_flags;
|
STATUS_FLAGS old_status_flags, cur_status_flags;
|
||||||
CAPTAIN_STUFF *CSPtr;
|
CAPTAIN_STUFF *CSPtr;
|
||||||
@@ -387,6 +390,7 @@ PreProcessStatus (ELEMENT *ShipPtr)
|
|||||||
old_status_flags &= (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
|
old_status_flags &= (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
|
||||||
if (old_status_flags)
|
if (old_status_flags)
|
||||||
{
|
{
|
||||||
|
assert (StarShipPtr->playerNr >= 0);
|
||||||
CaptainsWindow (CSPtr, status_y_offsets[StarShipPtr->playerNr],
|
CaptainsWindow (CSPtr, status_y_offsets[StarShipPtr->playerNr],
|
||||||
old_status_flags, cur_status_flags, 1);
|
old_status_flags, cur_status_flags, 1);
|
||||||
}
|
}
|
||||||
@@ -399,13 +403,15 @@ PostProcessStatus (ELEMENT *ShipPtr)
|
|||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
|
|
||||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||||
if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0)
|
if (StarShipPtr->captains_name_index
|
||||||
|
|| StarShipPtr->playerNr == RPG_PLAYER_NUM)
|
||||||
{ // All except Sa-Matra, no captain's window there
|
{ // All except Sa-Matra, no captain's window there
|
||||||
COORD y;
|
COORD y;
|
||||||
STATUS_FLAGS cur_status_flags, old_status_flags;
|
STATUS_FLAGS cur_status_flags, old_status_flags;
|
||||||
|
|
||||||
cur_status_flags = StarShipPtr->cur_status_flags;
|
cur_status_flags = StarShipPtr->cur_status_flags;
|
||||||
|
|
||||||
|
assert (StarShipPtr->playerNr >= 0);
|
||||||
y = status_y_offsets[StarShipPtr->playerNr];
|
y = status_y_offsets[StarShipPtr->playerNr];
|
||||||
|
|
||||||
if (ShipPtr->crew_level == 0)
|
if (ShipPtr->crew_level == 0)
|
||||||
|
|||||||
@@ -474,6 +474,7 @@ explosion_preprocess (ELEMENT *ShipPtr)
|
|||||||
|
|
||||||
PutElement (hElement);
|
PutElement (hElement);
|
||||||
LockElement (hElement, &ElementPtr);
|
LockElement (hElement, &ElementPtr);
|
||||||
|
ElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
ElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
ElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
ElementPtr->life_span = 9;
|
ElementPtr->life_span = 9;
|
||||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
@@ -516,6 +517,7 @@ ship_death (ELEMENT *ShipPtr)
|
|||||||
{ // Not running away and not reincarnating (Pkunk)
|
{ // Not running away and not reincarnating (Pkunk)
|
||||||
// When a ship tries to run away, it is (dis)counted in DoRunAway(),
|
// When a ship tries to run away, it is (dis)counted in DoRunAway(),
|
||||||
// so when it dies while running away, we will not count it again
|
// so when it dies while running away, we will not count it again
|
||||||
|
assert (StarShipPtr->playerNr >= 0);
|
||||||
battle_counter[StarShipPtr->playerNr]--;
|
battle_counter[StarShipPtr->playerNr]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,6 +602,7 @@ spawn_ion_trail (ELEMENT *ElementPtr)
|
|||||||
|
|
||||||
InsertElement (hIonElement, GetHeadElement ());
|
InsertElement (hIonElement, GetHeadElement ());
|
||||||
LockElement (hIonElement, &IonElementPtr);
|
LockElement (hIonElement, &IonElementPtr);
|
||||||
|
IonElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
IonElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
IonElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
IonElementPtr->life_span = IonElementPtr->thrust_wait = ION_LIFE;
|
IonElementPtr->life_span = IonElementPtr->thrust_wait = ION_LIFE;
|
||||||
SetPrimType (&DisplayArray[IonElementPtr->PrimIndex], POINT_PRIM);
|
SetPrimType (&DisplayArray[IonElementPtr->PrimIndex], POINT_PRIM);
|
||||||
@@ -738,6 +741,7 @@ ship_transition (ELEMENT *ElementPtr)
|
|||||||
angle = FACING_TO_ANGLE (StarShipPtr->ShipFacing);
|
angle = FACING_TO_ANGLE (StarShipPtr->ShipFacing);
|
||||||
|
|
||||||
LockElement (hShipImage, &ShipImagePtr);
|
LockElement (hShipImage, &ShipImagePtr);
|
||||||
|
ShipImagePtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||||
ShipImagePtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
ShipImagePtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
ShipImagePtr->life_span = ShipImagePtr->thrust_wait =
|
ShipImagePtr->life_span = ShipImagePtr->thrust_wait =
|
||||||
TRANSITION_LIFE;
|
TRANSITION_LIFE;
|
||||||
|
|||||||
@@ -1469,9 +1469,9 @@ depositQualityString (BYTE quality)
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// Which should be GOOD_GUY or BAD_GUY
|
// playerNr should be 0 or 1
|
||||||
STARSHIP*
|
STARSHIP*
|
||||||
findPlayerShip(ELEMENT_FLAGS which) {
|
findPlayerShip (SIZE playerNr) {
|
||||||
HELEMENT hElement, hNextElement;
|
HELEMENT hElement, hNextElement;
|
||||||
|
|
||||||
for (hElement = GetHeadElement (); hElement; hElement = hNextElement)
|
for (hElement = GetHeadElement (); hElement; hElement = hNextElement)
|
||||||
@@ -1482,7 +1482,7 @@ findPlayerShip(ELEMENT_FLAGS which) {
|
|||||||
hNextElement = GetSuccElement (ElementPtr);
|
hNextElement = GetSuccElement (ElementPtr);
|
||||||
|
|
||||||
if ((ElementPtr->state_flags & PLAYER_SHIP) &&
|
if ((ElementPtr->state_flags & PLAYER_SHIP) &&
|
||||||
(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) == which)
|
ElementPtr->playerNr == playerNr)
|
||||||
{
|
{
|
||||||
STARSHIP *StarShipPtr;
|
STARSHIP *StarShipPtr;
|
||||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||||
@@ -1507,7 +1507,7 @@ resetCrewBattle(void) {
|
|||||||
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StarShipPtr = findPlayerShip (GOOD_GUY);
|
StarShipPtr = findPlayerShip (RPG_PLAYER_NUM);
|
||||||
if (StarShipPtr == NULL || StarShipPtr->RaceDescPtr == NULL)
|
if (StarShipPtr == NULL || StarShipPtr->RaceDescPtr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1529,7 +1529,7 @@ resetEnergyBattle(void) {
|
|||||||
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StarShipPtr = findPlayerShip (GOOD_GUY);
|
StarShipPtr = findPlayerShip (RPG_PLAYER_NUM);
|
||||||
if (StarShipPtr == NULL || StarShipPtr->RaceDescPtr == NULL)
|
if (StarShipPtr == NULL || StarShipPtr->RaceDescPtr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -162,8 +162,8 @@ const char *densityString (BYTE density);
|
|||||||
const char *depositQualityString (BYTE quality);
|
const char *depositQualityString (BYTE quality);
|
||||||
|
|
||||||
|
|
||||||
// Find a player ship. Setting which to BAD_GUY is only meaningful in battle.
|
// Find a player ship. Setting playerNr to non-0 is only meaningful in battle.
|
||||||
STARSHIP* findPlayerShip(ELEMENT_FLAGS which);
|
STARSHIP* findPlayerShip (SIZE playerNr);
|
||||||
|
|
||||||
// Resets the crew of the first player (the bottom one) to its maximum.
|
// Resets the crew of the first player (the bottom one) to its maximum.
|
||||||
void resetCrewBattle(void);
|
void resetCrewBattle(void);
|
||||||
|
|||||||
+11
-12
@@ -44,10 +44,11 @@ initialize_laser (LASER_BLOCK *pLaserBlock)
|
|||||||
ELEMENT *LaserElementPtr;
|
ELEMENT *LaserElementPtr;
|
||||||
|
|
||||||
LockElement (hLaserElement, &LaserElementPtr);
|
LockElement (hLaserElement, &LaserElementPtr);
|
||||||
|
LaserElementPtr->playerNr = pLaserBlock->sender;
|
||||||
LaserElementPtr->hit_points = 1;
|
LaserElementPtr->hit_points = 1;
|
||||||
LaserElementPtr->mass_points = 1;
|
LaserElementPtr->mass_points = 1;
|
||||||
LaserElementPtr->state_flags =
|
LaserElementPtr->state_flags = APPEARING | FINITE_LIFE
|
||||||
APPEARING | FINITE_LIFE | pLaserBlock->sender;
|
| pLaserBlock->flags;
|
||||||
LaserElementPtr->life_span = LASER_LIFE;
|
LaserElementPtr->life_span = LASER_LIFE;
|
||||||
LaserElementPtr->collision_func = (CollisionFunc*)weapon_collision;
|
LaserElementPtr->collision_func = (CollisionFunc*)weapon_collision;
|
||||||
LaserElementPtr->blast_offset = 1;
|
LaserElementPtr->blast_offset = 1;
|
||||||
@@ -89,8 +90,9 @@ initialize_missile (MISSILE_BLOCK *pMissileBlock)
|
|||||||
LockElement (hMissileElement, &MissileElementPtr);
|
LockElement (hMissileElement, &MissileElementPtr);
|
||||||
MissileElementPtr->hit_points = (BYTE)pMissileBlock->hit_points;
|
MissileElementPtr->hit_points = (BYTE)pMissileBlock->hit_points;
|
||||||
MissileElementPtr->mass_points = (BYTE)pMissileBlock->damage;
|
MissileElementPtr->mass_points = (BYTE)pMissileBlock->damage;
|
||||||
MissileElementPtr->state_flags =
|
MissileElementPtr->playerNr = pMissileBlock->sender;
|
||||||
APPEARING | FINITE_LIFE | pMissileBlock->sender;
|
MissileElementPtr->state_flags = APPEARING | FINITE_LIFE
|
||||||
|
| pMissileBlock->flags;
|
||||||
MissileElementPtr->life_span = pMissileBlock->life;
|
MissileElementPtr->life_span = pMissileBlock->life;
|
||||||
SetPrimType (&DisplayArray[MissileElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[MissileElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
MissileElementPtr->current.image.farray = pMissileBlock->farray;
|
MissileElementPtr->current.image.farray = pMissileBlock->farray;
|
||||||
@@ -139,8 +141,7 @@ weapon_collision (ELEMENT *WeaponElementPtr, POINT *pWPt,
|
|||||||
/* lasers from the same ship can't hit each other */
|
/* lasers from the same ship can't hit each other */
|
||||||
(GetPrimType (&DisplayArray[HitElementPtr->PrimIndex]) != LINE_PRIM
|
(GetPrimType (&DisplayArray[HitElementPtr->PrimIndex]) != LINE_PRIM
|
||||||
|| GetPrimType (&DisplayArray[WeaponElementPtr->PrimIndex]) != LINE_PRIM
|
|| GetPrimType (&DisplayArray[WeaponElementPtr->PrimIndex]) != LINE_PRIM
|
||||||
|| (HitElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) !=
|
|| !elementsOfSamePlayer (HitElementPtr, WeaponElementPtr)))
|
||||||
(WeaponElementPtr->state_flags & (GOOD_GUY | BAD_GUY))))
|
|
||||||
#endif /* NEVER */
|
#endif /* NEVER */
|
||||||
{
|
{
|
||||||
do_damage (HitElementPtr, damage);
|
do_damage (HitElementPtr, damage);
|
||||||
@@ -181,8 +182,8 @@ weapon_collision (ELEMENT *WeaponElementPtr, POINT *pWPt,
|
|||||||
|
|
||||||
PutElement (hBlastElement);
|
PutElement (hBlastElement);
|
||||||
LockElement (hBlastElement, &BlastElementPtr);
|
LockElement (hBlastElement, &BlastElementPtr);
|
||||||
BlastElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID
|
BlastElementPtr->playerNr = WeaponElementPtr->playerNr;
|
||||||
| (WeaponElementPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
BlastElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID;
|
||||||
SetPrimType (&DisplayArray[BlastElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[BlastElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
|
|
||||||
BlastElementPtr->current.location.x = DISPLAY_TO_WORLD (pWPt->x);
|
BlastElementPtr->current.location.x = DISPLAY_TO_WORLD (pWPt->x);
|
||||||
@@ -279,8 +280,7 @@ ModifySilhouette (ELEMENT *ElementPtr, STAMP *modify_stamp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ObjectIntersect.IntersectStamp.origin.y +=
|
ObjectIntersect.IntersectStamp.origin.y +=
|
||||||
(ElementPtr->state_flags & GOOD_GUY) ?
|
status_y_offsets[ElementPtr->playerNr];
|
||||||
GOOD_GUY_YOFFS : BAD_GUY_YOFFS;
|
|
||||||
|
|
||||||
if (modify_flags & MODIFY_SWAP)
|
if (modify_flags & MODIFY_SWAP)
|
||||||
{
|
{
|
||||||
@@ -330,8 +330,7 @@ TrackShip (ELEMENT *Tracker, COUNT *pfacing)
|
|||||||
LockElement (hShip, &Trackee);
|
LockElement (hShip, &Trackee);
|
||||||
hNextShip = GetSuccElement (Trackee);
|
hNextShip = GetSuccElement (Trackee);
|
||||||
if ((Trackee->state_flags & PLAYER_SHIP)
|
if ((Trackee->state_flags & PLAYER_SHIP)
|
||||||
&& (Trackee->state_flags & (GOOD_GUY | BAD_GUY)) !=
|
&& !elementsOfSamePlayer (Trackee, Tracker)
|
||||||
(Tracker->state_flags & (GOOD_GUY | BAD_GUY))
|
|
||||||
&& (!OBJECT_CLOAKED (Trackee)
|
&& (!OBJECT_CLOAKED (Trackee)
|
||||||
|| ((Tracker->state_flags & PLAYER_SHIP)
|
|| ((Tracker->state_flags & PLAYER_SHIP)
|
||||||
&& (Tracker->state_flags & APPEARING))
|
&& (Tracker->state_flags & APPEARING))
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
COORD cx, cy, ex, ey;
|
COORD cx, cy, ex, ey;
|
||||||
ELEMENT_FLAGS sender;
|
ELEMENT_FLAGS flags;
|
||||||
|
SIZE sender; // player number
|
||||||
SIZE pixoffs;
|
SIZE pixoffs;
|
||||||
COUNT face;
|
COUNT face;
|
||||||
COLOR color;
|
COLOR color;
|
||||||
@@ -34,7 +35,8 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
COORD cx, cy;
|
COORD cx, cy;
|
||||||
ELEMENT_FLAGS sender;
|
ELEMENT_FLAGS flags;
|
||||||
|
SIZE sender; // player number
|
||||||
SIZE pixoffs, speed, hit_points, damage;
|
SIZE pixoffs, speed, hit_points, damage;
|
||||||
COUNT face, index, life;
|
COUNT face, index, life;
|
||||||
FRAME *farray;
|
FRAME *farray;
|
||||||
|
|||||||
Reference in New Issue
Block a user