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 != 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
+3 -6
View File
@@ -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
View File
@@ -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
+3 -5
View File
@@ -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
+2
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
-1
View File
@@ -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
View File
@@ -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],
+1 -3
View File
@@ -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
-1
View File
@@ -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 ();
+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 = 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
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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);
+5 -7
View File
@@ -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;
+8 -13
View File
@@ -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;
+24 -27
View File
@@ -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;
+2 -2
View File
@@ -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;
+7 -7
View File
@@ -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;
+2 -2
View File
@@ -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;
+14 -11
View File
@@ -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
+11 -13
View File
@@ -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;
+5 -5
View File
@@ -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;
+2 -1
View File
@@ -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
View File
@@ -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 =
+6 -8
View File
@@ -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;
+5 -4
View File
@@ -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;
+7 -8
View File
@@ -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;
+4 -5
View File
@@ -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))
{
+4 -3
View File
@@ -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;
+2 -2
View File
@@ -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;
+5 -6
View File
@@ -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;
+4 -4
View File
@@ -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;
+2 -2
View File
@@ -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;
+7 -7
View File
@@ -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);
+2 -2
View File
@@ -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;
+4 -4
View File
@@ -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);
+4 -5
View File
@@ -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
+4 -4
View File
@@ -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;
+4 -1
View File
@@ -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
View File
@@ -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)
+4
View File
@@ -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;
+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*
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;
+2 -2
View File
@@ -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
View File
@@ -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))
+4 -2
View File
@@ -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;