From: <av...@us...> - 2009-10-30 22:33:24
|
Revision: 3265 http://sc2.svn.sourceforge.net/sc2/?rev=3265&view=rev Author: avolkov Date: 2009-10-30 22:33:09 +0000 (Fri, 30 Oct 2009) Log Message: ----------- Battle & ship code cleanup: Destruction of WHICH_SIDE(); removal of turn_wait abuse in new_ship() Modified Paths: -------------- trunk/sc2/src/uqm/element.h trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/netplay/checksum.c trunk/sc2/src/uqm/ships/androsyn/androsyn.c trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c trunk/sc2/src/uqm/ships/umgah/umgah.c trunk/sc2/src/uqm/tactrans.c trunk/sc2/src/uqm/weapon.c Modified: trunk/sc2/src/uqm/element.h =================================================================== --- trunk/sc2/src/uqm/element.h 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/element.h 2009-10-30 22:33:09 UTC (rev 3265) @@ -166,13 +166,6 @@ #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 \ Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/init.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -316,7 +316,7 @@ /* 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; } Modified: trunk/sc2/src/uqm/netplay/checksum.c =================================================================== --- trunk/sc2/src/uqm/netplay/checksum.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/netplay/checksum.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -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_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); Modified: trunk/sc2/src/uqm/ships/androsyn/androsyn.c =================================================================== --- trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -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 @@ } } -static CollisionFunc *ship_collision_func[2]; +static CollisionFunc *ship_collision_func[NUM_PLAYERS]; #define BLAZER_TURN_WAIT 1 @@ -355,7 +357,7 @@ 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 @@ 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 = Modified: trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c =================================================================== --- trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -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 @@ 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 @@ 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 @@ } else { - STARSHIP *StarShipPtr; - - GetElementStarShip (ElementPtr, &StarShipPtr); if ((StarShipPtr->cur_status_flags & SPECIAL) && StarShipPtr->special_counter == 0) { Modified: trunk/sc2/src/uqm/ships/umgah/umgah.c =================================================================== --- trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -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 @@ if (!(StarShipPtr->ship_input_state & SPECIAL)) StarShipPtr->RaceDescPtr->characteristics.special_wait = 0xFF; } + static COUNT initialize_cone (ELEMENT *ShipPtr, HELEMENT ConeArray[]) { @@ -281,9 +284,11 @@ 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 @@ static void umgah_preprocess (ELEMENT *ElementPtr) { + STARSHIP *StarShipPtr; + + GetElementStarShip (ElementPtr, &StarShipPtr); + if (ElementPtr->state_flags & APPEARING) - LastShipFrame[WHICH_SIDE(ElementPtr->state_flags)] = 0; + { + // 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 { - STARSHIP *StarShipPtr; - - GetElementStarShip (ElementPtr, &StarShipPtr); if (ElementPtr->thrust_wait == 0 && (StarShipPtr->cur_status_flags & SPECIAL) && DeltaEnergy (ElementPtr, -SPECIAL_ENERGY_COST)) Modified: trunk/sc2/src/uqm/tactrans.c =================================================================== --- trunk/sc2/src/uqm/tactrans.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/tactrans.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -289,12 +289,11 @@ } 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 @@ } if (DeadShipPtr->life_span || !readyForBattleEnd ( - WHICH_SIDE (DeadShipPtr->turn_wait))) + DeadStarShipPtr->playerNr)) { DeadShipPtr->state_flags &= ~DISAPPEARING; ++DeadShipPtr->life_span; @@ -369,7 +368,10 @@ 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 @@ } #endif /* NETPLAY */ - if (GetNextStarShip (DeadStarShipPtr, - WHICH_SIDE (DeadShipPtr->turn_wait))) + if (GetNextStarShip (DeadStarShipPtr, DeadStarShipPtr->playerNr)) { #ifdef NETPLAY { @@ -420,18 +421,7 @@ 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 @@ 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 @@ UnlockElement (hElement); } - GetElementStarShip (ShipPtr, &StarShipPtr); StarShipPtr->cur_status_flags &= ~PLAY_VICTORY_DITTY; DeltaEnergy (ShipPtr, Modified: trunk/sc2/src/uqm/weapon.c =================================================================== --- trunk/sc2/src/uqm/weapon.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/weapon.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -279,8 +279,8 @@ } 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) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |