Battle & ship code cleanup: Destruction of WHICH_SIDE(); removal of turn_wait abuse in new_ship()
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3265 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -166,13 +166,6 @@ extern PRIMITIVE DisplayArray[MAX_DISPLAY_PRIMS];
|
||||
#define GRAVITY_MASS(m) ((m) > MAX_SHIP_MASS * 10)
|
||||
#define GRAVITY_THRESHOLD (COUNT)255
|
||||
|
||||
static inline BYTE
|
||||
ElementFlagsSide (ELEMENT_FLAGS flags)
|
||||
{
|
||||
return (BYTE) ((flags & BAD_GUY) >> 1);
|
||||
}
|
||||
#define WHICH_SIDE(flags) ElementFlagsSide (flags)
|
||||
|
||||
#define OBJECT_CLOAKED(eptr) \
|
||||
(GetPrimType (&GLOBAL (DisplayArray[(eptr)->PrimIndex])) >= NUM_PRIMS \
|
||||
|| (GetPrimType (&GLOBAL (DisplayArray[(eptr)->PrimIndex])) == STAMPFILL_PRIM \
|
||||
|
||||
+1
-1
@@ -316,7 +316,7 @@ UninitShips (void)
|
||||
/* Record crew left after battle */
|
||||
StarShipPtr->crew_level =
|
||||
StarShipPtr->RaceDescPtr->ship_info.crew_level;
|
||||
SPtr[WHICH_SIDE (ElementPtr->state_flags)] = StarShipPtr;
|
||||
SPtr[StarShipPtr->playerNr] = StarShipPtr;
|
||||
free_ship (StarShipPtr->RaceDescPtr, TRUE, TRUE);
|
||||
StarShipPtr->RaceDescPtr = 0;
|
||||
}
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
// for DUMP_CRC_OPS
|
||||
#include "netconnection.h"
|
||||
#include "netmelee.h"
|
||||
#include "../tactrans.h"
|
||||
// for new_ship
|
||||
#include "libs/log.h"
|
||||
#include "libs/mathlib.h"
|
||||
|
||||
@@ -121,19 +119,7 @@ crc_processELEMENT(crc_State *state, const ELEMENT *val) {
|
||||
crc_processCOUNT(state, val->life_span);
|
||||
crc_processCOUNT(state, val->crew_level);
|
||||
crc_processBYTE(state, val->mass_points);
|
||||
|
||||
// HACK: when a ship is being destroyed, turn_wait is abused to store
|
||||
// the side this ship is on. This must be excluded from the checksum
|
||||
// as this does not have to be the same for both sides.
|
||||
{
|
||||
BYTE turn_wait = val->turn_wait;
|
||||
|
||||
if (val->preprocess_func == new_ship)
|
||||
turn_wait = 0;
|
||||
|
||||
crc_processBYTE(state, turn_wait);
|
||||
}
|
||||
|
||||
crc_processBYTE(state, val->turn_wait);
|
||||
crc_processBYTE(state, val->thrust_wait);
|
||||
crc_processVELOCITY_DESC(state, &val->velocity);
|
||||
crc_processSTATE(state, &val->current);
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include "resinst.h"
|
||||
|
||||
#include "libs/mathlib.h"
|
||||
#include "uqm/init.h"
|
||||
// for NUM_PLAYERS
|
||||
|
||||
|
||||
#define MAX_CREW 20
|
||||
@@ -322,7 +324,7 @@ androsynth_intelligence (ELEMENT *ShipPtr, EVALUATE_DESC *ObjectsOfConcern,
|
||||
}
|
||||
}
|
||||
|
||||
static CollisionFunc *ship_collision_func[2];
|
||||
static CollisionFunc *ship_collision_func[NUM_PLAYERS];
|
||||
|
||||
#define BLAZER_TURN_WAIT 1
|
||||
|
||||
@@ -355,7 +357,7 @@ androsynth_postprocess (ELEMENT *ElementPtr)
|
||||
ElementPtr->mass_points = BLAZER_MASS;
|
||||
StarShipPtr->RaceDescPtr->characteristics.turn_wait
|
||||
= BLAZER_TURN_WAIT;
|
||||
ship_collision_func[WHICH_SIDE(ElementPtr->state_flags)]
|
||||
ship_collision_func[StarShipPtr->playerNr]
|
||||
= ElementPtr->collision_func;
|
||||
ElementPtr->collision_func = blazer_collision;
|
||||
}
|
||||
@@ -424,7 +426,7 @@ androsynth_preprocess (ELEMENT *ElementPtr)
|
||||
StarShipPtr->RaceDescPtr->characteristics.special_wait;
|
||||
StarShipPtr->RaceDescPtr->characteristics.energy_regeneration = ENERGY_REGENERATION;
|
||||
ElementPtr->mass_points = SHIP_MASS;
|
||||
ElementPtr->collision_func = ship_collision_func[WHICH_SIDE(ElementPtr->state_flags)];
|
||||
ElementPtr->collision_func = ship_collision_func[StarShipPtr->playerNr];
|
||||
ElementPtr->next.image.farray =
|
||||
StarShipPtr->RaceDescPtr->ship_data.ship;
|
||||
ElementPtr->next.image.frame =
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "resinst.h"
|
||||
|
||||
#include "uqm/init.h"
|
||||
// for NUM_PLAYERS
|
||||
|
||||
|
||||
#define MAX_CREW 20
|
||||
@@ -50,7 +51,7 @@
|
||||
#define MMRNMHRM_OFFSET 16
|
||||
#define LASER_RANGE DISPLAY_TO_WORLD (125 + MMRNMHRM_OFFSET)
|
||||
|
||||
static CHARACTERISTIC_STUFF otherwing_desc[NUM_SIDES];
|
||||
static CHARACTERISTIC_STUFF otherwing_desc[NUM_PLAYERS];
|
||||
|
||||
static RACE_DESC mmrnmhrm_desc =
|
||||
{
|
||||
@@ -372,8 +373,8 @@ mmrnmhrm_postprocess (ELEMENT *ElementPtr)
|
||||
|
||||
StarShipPtr->weapon_counter = 0;
|
||||
|
||||
t = otherwing_desc[WHICH_SIDE(ElementPtr->state_flags)];
|
||||
otherwing_desc[WHICH_SIDE(ElementPtr->state_flags)] = StarShipPtr->RaceDescPtr->characteristics;
|
||||
t = otherwing_desc[StarShipPtr->playerNr];
|
||||
otherwing_desc[StarShipPtr->playerNr] = StarShipPtr->RaceDescPtr->characteristics;
|
||||
StarShipPtr->RaceDescPtr->characteristics = t;
|
||||
StarShipPtr->RaceDescPtr->cyborg_control.ManeuverabilityIndex = 0;
|
||||
|
||||
@@ -407,11 +408,14 @@ mmrnmhrm_postprocess (ELEMENT *ElementPtr)
|
||||
static void
|
||||
mmrnmhrm_preprocess (ELEMENT *ElementPtr)
|
||||
{
|
||||
STARSHIP *StarShipPtr;
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
|
||||
if (ElementPtr->state_flags & APPEARING)
|
||||
{
|
||||
COUNT i;
|
||||
|
||||
i = WHICH_SIDE (ElementPtr->state_flags);
|
||||
// Set here because playerNr is unknown during init()
|
||||
COUNT i = StarShipPtr->playerNr;
|
||||
otherwing_desc[i].max_thrust = YWING_MAX_THRUST;
|
||||
otherwing_desc[i].thrust_increment = YWING_THRUST_INCREMENT;
|
||||
otherwing_desc[i].energy_regeneration = YWING_ENERGY_REGENERATION;
|
||||
@@ -426,9 +430,6 @@ mmrnmhrm_preprocess (ELEMENT *ElementPtr)
|
||||
}
|
||||
else
|
||||
{
|
||||
STARSHIP *StarShipPtr;
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
if ((StarShipPtr->cur_status_flags & SPECIAL)
|
||||
&& StarShipPtr->special_counter == 0)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include "resinst.h"
|
||||
|
||||
#include "libs/mathlib.h"
|
||||
#include "uqm/init.h"
|
||||
// for NUM_PLAYERS
|
||||
|
||||
|
||||
#define MAX_CREW 10
|
||||
@@ -37,7 +39,7 @@
|
||||
|
||||
#define SHIP_MASS 1
|
||||
|
||||
static FRAME LastShipFrame[2];
|
||||
static FRAME LastShipFrame[NUM_PLAYERS];
|
||||
|
||||
static RACE_DESC umgah_desc =
|
||||
{
|
||||
@@ -254,6 +256,7 @@ umgah_intelligence (ELEMENT *ShipPtr, EVALUATE_DESC *ObjectsOfConcern,
|
||||
if (!(StarShipPtr->ship_input_state & SPECIAL))
|
||||
StarShipPtr->RaceDescPtr->characteristics.special_wait = 0xFF;
|
||||
}
|
||||
|
||||
static COUNT
|
||||
initialize_cone (ELEMENT *ShipPtr, HELEMENT ConeArray[])
|
||||
{
|
||||
@@ -281,9 +284,11 @@ initialize_cone (ELEMENT *ShipPtr, HELEMENT ConeArray[])
|
||||
MissileBlock.preprocess_func = cone_preprocess;
|
||||
MissileBlock.blast_offs = MISSILE_OFFSET;
|
||||
|
||||
if (ShipPtr->next.image.frame != LastShipFrame[WHICH_SIDE(ShipPtr->state_flags)])
|
||||
// This func is called every frame while the player is holding down WEAPON
|
||||
// Don't reset the cone FRAME to the first image every time
|
||||
if (ShipPtr->next.image.frame != LastShipFrame[StarShipPtr->playerNr])
|
||||
{
|
||||
LastShipFrame[WHICH_SIDE(ShipPtr->state_flags)] = ShipPtr->next.image.frame;
|
||||
LastShipFrame[StarShipPtr->playerNr] = ShipPtr->next.image.frame;
|
||||
|
||||
StarShipPtr->RaceDescPtr->ship_data.special[0] =
|
||||
SetAbsFrameIndex (
|
||||
@@ -330,13 +335,18 @@ umgah_postprocess (ELEMENT *ElementPtr)
|
||||
static void
|
||||
umgah_preprocess (ELEMENT *ElementPtr)
|
||||
{
|
||||
if (ElementPtr->state_flags & APPEARING)
|
||||
LastShipFrame[WHICH_SIDE(ElementPtr->state_flags)] = 0;
|
||||
else
|
||||
{
|
||||
STARSHIP *StarShipPtr;
|
||||
|
||||
GetElementStarShip (ElementPtr, &StarShipPtr);
|
||||
|
||||
if (ElementPtr->state_flags & APPEARING)
|
||||
{
|
||||
// Reset prevously set value, if any. It could only have been
|
||||
// set by another ship of the same player, though.
|
||||
LastShipFrame[StarShipPtr->playerNr] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ElementPtr->thrust_wait == 0
|
||||
&& (StarShipPtr->cur_status_flags & SPECIAL)
|
||||
&& DeltaEnergy (ElementPtr, -SPECIAL_ENERGY_COST))
|
||||
|
||||
+18
-26
@@ -289,12 +289,11 @@ new_ship (ELEMENT *DeadShipPtr)
|
||||
}
|
||||
|
||||
MusicStarted = FALSE;
|
||||
DeadShipPtr->turn_wait = (BYTE)(
|
||||
DeadShipPtr->state_flags & (GOOD_GUY | BAD_GUY));
|
||||
// DeadShipPtr->turn_wait is abused to store which
|
||||
// side this element is for, because this information
|
||||
// will be lost from state_flags when the element is
|
||||
// set up for deletion below.
|
||||
// XXX: Set to 0 to be vaguely checksum-compatible with previous
|
||||
// Netplay builds which abused turn_wait to store the ship's side.
|
||||
// The value is irrelevant at this point.
|
||||
DeadShipPtr->turn_wait = 0;
|
||||
|
||||
for (hElement = GetHeadElement (); hElement; hElement = hSuccElement)
|
||||
{
|
||||
ELEMENT *ElementPtr;
|
||||
@@ -348,7 +347,7 @@ new_ship (ELEMENT *DeadShipPtr)
|
||||
}
|
||||
|
||||
if (DeadShipPtr->life_span || !readyForBattleEnd (
|
||||
WHICH_SIDE (DeadShipPtr->turn_wait)))
|
||||
DeadStarShipPtr->playerNr))
|
||||
{
|
||||
DeadShipPtr->state_flags &= ~DISAPPEARING;
|
||||
++DeadShipPtr->life_span;
|
||||
@@ -369,7 +368,10 @@ new_ship (ELEMENT *DeadShipPtr)
|
||||
DeadStarShipPtr->RaceDescPtr);
|
||||
free_ship (DeadStarShipPtr->RaceDescPtr, TRUE, TRUE);
|
||||
DeadStarShipPtr->RaceDescPtr = 0;
|
||||
UnbatchGraphics ();
|
||||
|
||||
// Graphics are batched while the draw queue is processed,
|
||||
// but we are going to draw the ship selection box now
|
||||
UnbatchGraphics ();
|
||||
|
||||
#ifdef NETPLAY
|
||||
initBattleStateDataConnections ();
|
||||
@@ -389,8 +391,7 @@ UnbatchGraphics ();
|
||||
}
|
||||
#endif /* NETPLAY */
|
||||
|
||||
if (GetNextStarShip (DeadStarShipPtr,
|
||||
WHICH_SIDE (DeadShipPtr->turn_wait)))
|
||||
if (GetNextStarShip (DeadStarShipPtr, DeadStarShipPtr->playerNr))
|
||||
{
|
||||
#ifdef NETPLAY
|
||||
{
|
||||
@@ -420,18 +421,7 @@ UnbatchGraphics ();
|
||||
GLOBAL (CurrentActivity) |= CHECK_ABORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NETPLAY
|
||||
// Turn_wait was abused to store the side this element was on.
|
||||
// We don't want this included in checksums, as it can be different
|
||||
// for both sides of a connection.
|
||||
// While preprocess_func == new_ship, turn_wait isn't included in
|
||||
// the checksum at all all, but now that new_ship is done,
|
||||
// it would be. As the value is irrelevant at this point, we can
|
||||
// just set it to the same value on either side.
|
||||
DeadShipPtr->turn_wait = 0;
|
||||
#endif
|
||||
BatchGraphics ();
|
||||
BatchGraphics ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -520,10 +510,13 @@ ship_death (ELEMENT *ShipPtr)
|
||||
|
||||
StopMusic ();
|
||||
|
||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||
|
||||
if (ShipPtr->mass_points <= MAX_SHIP_MASS)
|
||||
{
|
||||
COUNT side = ElementFlagsSide (ShipPtr->state_flags);
|
||||
battle_counter[side]--;
|
||||
{ // 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
|
||||
battle_counter[StarShipPtr->playerNr]--;
|
||||
}
|
||||
|
||||
VictoriousStarShipPtr = 0;
|
||||
@@ -548,7 +541,6 @@ ship_death (ELEMENT *ShipPtr)
|
||||
UnlockElement (hElement);
|
||||
}
|
||||
|
||||
GetElementStarShip (ShipPtr, &StarShipPtr);
|
||||
StarShipPtr->cur_status_flags &= ~PLAY_VICTORY_DITTY;
|
||||
|
||||
DeltaEnergy (ShipPtr,
|
||||
|
||||
@@ -279,8 +279,8 @@ ModifySilhouette (ELEMENT *ElementPtr, STAMP *modify_stamp,
|
||||
}
|
||||
|
||||
ObjectIntersect.IntersectStamp.origin.y +=
|
||||
(WHICH_SIDE (ElementPtr->state_flags)
|
||||
? BAD_GUY_YOFFS : GOOD_GUY_YOFFS);
|
||||
(ElementPtr->state_flags & GOOD_GUY) ?
|
||||
GOOD_GUY_YOFFS : BAD_GUY_YOFFS;
|
||||
|
||||
if (modify_flags & MODIFY_SWAP)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user