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