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:
avolkov
2009-11-04 21:42:39 +00:00
parent 5b58d27b26
commit 6a822abc49
48 changed files with 250 additions and 252 deletions
+2 -2
View File
@@ -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
+3 -6
View File
@@ -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
View File
@@ -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
+3 -5
View File
@@ -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
+2
View File
@@ -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
View File
@@ -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
View File
@@ -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;
} }
-1
View File
@@ -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
View File
@@ -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],
+1 -3
View File
@@ -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
-1
View File
@@ -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 ();
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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);
+5 -7
View File
@@ -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;
+8 -13
View File
@@ -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;
+24 -27
View File
@@ -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;
+2 -2
View File
@@ -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;
+7 -7
View File
@@ -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;
+2 -2
View File
@@ -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;
+14 -11
View File
@@ -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
+11 -13
View File
@@ -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;
+5 -5
View File
@@ -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;
+2 -1
View File
@@ -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
View File
@@ -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 =
+6 -8
View File
@@ -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;
+5 -4
View File
@@ -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;
+7 -8
View File
@@ -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;
+4 -5
View File
@@ -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))
{ {
+4 -3
View File
@@ -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;
+2 -2
View File
@@ -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;
+5 -6
View File
@@ -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;
+4 -4
View File
@@ -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;
+2 -2
View File
@@ -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;
+7 -7
View File
@@ -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);
+2 -2
View File
@@ -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;
+4 -4
View File
@@ -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);
+4 -5
View File
@@ -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
+4 -4
View File
@@ -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;
+4 -1
View File
@@ -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
View File
@@ -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)
+4
View File
@@ -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;
+5 -5
View File
@@ -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;
+2 -2
View File
@@ -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
View File
@@ -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))
+4 -2
View File
@@ -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;