Battle & ship code cleanup: Switch to playerNr instead of GOOD_GUY/BAD_GUY in ship status code

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3266 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2009-10-31 00:57:09 +00:00
parent 415eec4efb
commit a56719420e
7 changed files with 122 additions and 111 deletions
+2 -2
View File
@@ -894,7 +894,7 @@ DrawMeleeShipStrings (MELEE_STATE *pMS, BYTE NewStarShip)
RECT r;
TEXT t;
ClearShipStatus (BAD_GUY_YOFFS);
ClearShipStatus (0);
SetContextFont (StarConFont);
r.corner.x = 3;
r.corner.y = 4;
@@ -931,7 +931,7 @@ DrawMeleeShipStrings (MELEE_STATE *pMS, BYTE NewStarShip)
hMasterShip = GetStarShipFromIndex (&master_q, NewStarShip);
MasterPtr = LockMasterShip (&master_q, hMasterShip);
InitShipStatus (&MasterPtr->ShipInfo, ~0, NULL);
InitShipStatus (&MasterPtr->ShipInfo, NULL, NULL);
UnlockMasterShip (&master_q, hMasterShip);
}
+2
View File
@@ -27,6 +27,7 @@
#endif
#include "init.h"
#include "intel.h"
#include "status.h"
#include "resinst.h"
#include "sounds.h"
#include "libs/compiler.h"
@@ -219,6 +220,7 @@ InitKernel (void)
if (MenuSounds == 0)
return FALSE;
InitStatusOffsets ();
InitSpace ();
return TRUE;
+4 -3
View File
@@ -160,10 +160,12 @@ ship_preprocess (ELEMENT *ElementPtr)
StarShipPtr->cur_status_flags
& ~(LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
if (!(ElementPtr->state_flags & APPEARING))
{
cur_status_flags |= StarShipPtr->ship_input_state
& (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
}
else
{
{ // Preprocessing for the first time
ElementPtr->crew_level = RDPtr->ship_info.crew_level;
if ((ElementPtr->state_flags & BAD_GUY)
@@ -184,8 +186,7 @@ ship_preprocess (ELEMENT *ElementPtr)
{
CONTEXT OldContext;
InitShipStatus (&RDPtr->ship_info,
StarShipPtr->captains_name_index, NULL);
InitShipStatus (&RDPtr->ship_info, StarShipPtr, NULL);
OldContext = SetContext (StatusContext);
DrawCaptainsWindow (StarShipPtr);
SetContext (OldContext);
+23 -24
View File
@@ -133,18 +133,17 @@ OutlineShipStatus (COORD y)
}
void
InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
InitShipStatus (SHIP_INFO *SIPtr, STARSHIP *StarShipPtr, RECT *pClipRect)
{
RECT r;
COORD y, y_stat;
COORD y = 0; // default, for Melee menu
STAMP Stamp;
CONTEXT OldContext;
y_stat = (SIPtr->ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS;
if (StarShipPtr) // set during battle
y = status_y_offsets[StarShipPtr->playerNr];
OldContext = SetContext (StatusContext);
y = y_stat;
if (pClipRect)
{
GetContextClipRect (&r);
@@ -225,8 +224,9 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
DrawFilledRectangle (&r);
}
if (captains_name_index)
{
if (!StarShipPtr || StarShipPtr->captains_name_index)
{ // Any regular ship. SIS and Sa-Matra are separate.
// This includes Melee menu.
STRING locString;
DrawCrewFuelString (y, 0);
@@ -234,7 +234,7 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
locString = SetAbsStringTableIndex (SIPtr->race_strings, 1);
DrawShipNameString (
(UNICODE *)GetStringAddress (locString),
GetStringLength (locString),y);
GetStringLength (locString), y);
{
UNICODE buf[30];
@@ -243,8 +243,8 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
OldFont = SetContextFont (TinyFont);
if (!(GLOBAL (CurrentActivity) & IN_BATTLE))
{
if (!StarShipPtr)
{ // In Melee menu
sprintf (buf, "%d", SIPtr->ship_cost);
Text.pStr = buf;
Text.CharCount = (COUNT)~0;
@@ -252,7 +252,7 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
else
{
locString = SetAbsStringTableIndex (SIPtr->race_strings,
captains_name_index);
StarShipPtr->captains_name_index);
Text.pStr = (UNICODE *)GetStringAddress (locString);
Text.CharCount = GetStringLength (locString);
}
@@ -267,13 +267,10 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
SetContextFont (OldFont);
}
}
else /* if (captains_name_index == 0) */
{ /* Only SIS or Sa-Matra */
if (SIPtr->ship_flags & GOOD_GUY)
{
DrawCrewFuelString (y, 0);
DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y);
}
else if (StarShipPtr->playerNr == 0)
{ // This is SIS
DrawCrewFuelString (y, 0);
DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y);
}
{
@@ -281,8 +278,10 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
crew_delta = SIPtr->crew_level;
energy_delta = SIPtr->energy_level;
SIPtr->crew_level = SIPtr->energy_level = 0;
DeltaStatistics (SIPtr, crew_delta, energy_delta);
// DeltaStatistics() below will add specified values to these
SIPtr->crew_level = 0;
SIPtr->energy_level = 0;
DeltaStatistics (SIPtr, y, crew_delta, energy_delta);
}
UnbatchGraphics ();
@@ -303,7 +302,8 @@ InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect)
// Pre: -crew_delta <= ShipInfoPtr->crew_level
// crew_delta <= ShipInfoPtr->max_crew - ShipInfoPtr->crew_level
void
DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta, SIZE energy_delta)
DeltaStatistics (SHIP_INFO *ShipInfoPtr, COORD y_offs,
SIZE crew_delta, SIZE energy_delta)
{
COORD x, y;
RECT r;
@@ -312,8 +312,7 @@ DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta, SIZE energy_delta)
return;
x = 0;
y = GAUGE_YOFFS + ((ShipInfoPtr->ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
y = GAUGE_YOFFS + y_offs;
r.extent.width = UNIT_WIDTH;
r.extent.height = UNIT_HEIGHT;
@@ -388,7 +387,7 @@ DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta, SIZE energy_delta)
{
// All crew doesn't fit in the graphics; print a number.
// Always print a number for the SIS in the full game.
DrawBattleCrewAmount (ShipInfoPtr);
DrawBattleCrewAmount (ShipInfoPtr, y_offs);
}
}
+81 -77
View File
@@ -23,10 +23,25 @@
#include "ship.h"
#include "setup.h"
#include "options.h"
#include "init.h"
// for NUM_PLAYERS
#include <stdio.h>
#include <string.h>
COORD status_y_offsets[NUM_PLAYERS];
void
InitStatusOffsets (void)
{
// XXX: We have to jump through these hoops because GOOD_GUY_YOFFS is
// not a constant, contrary to what its' name suggests.
status_y_offsets[0] = GOOD_GUY_YOFFS; // bottom player
status_y_offsets[1] = BAD_GUY_YOFFS; // top player
}
static void
CaptainsWindow (CAPTAIN_STUFF *CSPtr, COORD y,
STATUS_FLAGS delta_status_flags, STATUS_FLAGS cur_status_flags,
@@ -115,7 +130,7 @@ CaptainsWindow (CAPTAIN_STUFF *CSPtr, COORD y,
}
void
DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr)
DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr, COORD y_offs)
{
#define MAX_CREW_DIGITS 3
RECT r;
@@ -125,9 +140,7 @@ DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr)
t.baseline.x = BATTLE_CREW_X + 2;
if (optWhichMenu == OPT_PC)
t.baseline.x -= 8;
t.baseline.y = BATTLE_CREW_Y +
((ShipInfoPtr->ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
t.baseline.y = BATTLE_CREW_Y + y_offs;
t.align = ALIGN_LEFT;
t.pStr = buf;
t.CharCount = (COUNT)~0;
@@ -150,7 +163,8 @@ DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr)
void
DrawCaptainsWindow (STARSHIP *StarShipPtr)
{
COORD y, y_offs;
COORD y;
COORD y_offs;
RECT r;
STAMP s;
FRAME Frame;
@@ -174,23 +188,20 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
BatchGraphics ();
y_offs = CAPTAIN_YOFFS
+ ((RDPtr->ship_info.ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS);
y_offs = status_y_offsets[StarShipPtr->playerNr];
r.corner.x = CAPTAIN_XOFFS - 2;
r.corner.y = y_offs - 4;
r.corner.y = y_offs + SHIP_INFO_HEIGHT;
r.extent.width = STATUS_WIDTH - CAPTAIN_XOFFS;
r.extent.height = SHIP_STATUS_HEIGHT - CAPTAIN_YOFFS + 2;
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x0A), 0x08));
DrawFilledRectangle (&r);
y = y_offs - CAPTAIN_YOFFS;
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F));
r.corner.x = 1;
r.corner.y = SHIP_INFO_HEIGHT + y;
r.corner.y = y_offs + SHIP_INFO_HEIGHT;
r.extent.width = 1;
r.extent.height = (SHIP_STATUS_HEIGHT - SHIP_INFO_HEIGHT - 2);
DrawFilledRectangle (&r);
@@ -201,7 +212,7 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19));
r.corner.x = STATUS_WIDTH - 1;
r.corner.y = SHIP_INFO_HEIGHT + y;
r.corner.y = y_offs + SHIP_INFO_HEIGHT;
r.extent.width = 1;
r.extent.height = SHIP_STATUS_HEIGHT - SHIP_INFO_HEIGHT;
DrawFilledRectangle (&r);
@@ -209,7 +220,7 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
DrawFilledRectangle (&r);
r.corner.x = 1;
r.extent.width = STATUS_WIDTH - 2;
r.corner.y = (SHIP_STATUS_HEIGHT - 2) + y;
r.corner.y = y_offs + (SHIP_STATUS_HEIGHT - 2);
r.extent.height = 1;
DrawFilledRectangle (&r);
r.corner.x = 0;
@@ -217,63 +228,59 @@ DrawCaptainsWindow (STARSHIP *StarShipPtr)
++r.corner.y;
DrawFilledRectangle (&r);
{
y = y_offs + CAPTAIN_YOFFS;
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F));
r.corner.x = 59;
r.corner.y = y;
r.extent.width = 1;
r.extent.height = 30;
DrawFilledRectangle (&r);
r.corner.x = 3;
r.corner.y += 30;
r.extent.width = 57;
r.extent.height = 1;
DrawFilledRectangle (&r);
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19));
r.corner.x = 3;
r.extent.width = 57;
r.corner.y = y - 1;
r.extent.height = 1;
DrawFilledRectangle (&r);
r.corner.x = 3;
r.extent.width = 1;
r.corner.y = y;
r.extent.height = 30;
DrawFilledRectangle (&r);
s.frame = RDPtr->ship_data.captain_control.background;
s.origin.x = CAPTAIN_XOFFS;
s.origin.y = y;
DrawStamp (&s);
if (StarShipPtr->captains_name_index == 0 && StarShipPtr->playerNr == 0)
{ // This is SIS
TEXT t;
t.baseline.x = STATUS_WIDTH >> 1;
t.baseline.y = y + 6;
t.align = ALIGN_CENTER;
t.pStr = GLOBAL_SIS (CommanderName);
t.CharCount = (COUNT)~0;
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F));
r.corner.x = 59;
r.corner.y = y_offs;
r.extent.width = 1;
r.extent.height = 30;
DrawFilledRectangle (&r);
r.corner.x = 3;
r.corner.y += 30;
r.extent.width = 57;
r.extent.height = 1;
DrawFilledRectangle (&r);
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19));
r.corner.x = 3;
r.extent.width = 57;
r.corner.y = y_offs - 1;
r.extent.height = 1;
DrawFilledRectangle (&r);
r.corner.x = 3;
r.extent.width = 1;
r.corner.y = y_offs;
r.extent.height = 30;
DrawFilledRectangle (&r);
s.frame = RDPtr->ship_data.captain_control.background;
s.origin.x = CAPTAIN_XOFFS;
s.origin.y = y_offs;
DrawStamp (&s);
}
if (StarShipPtr->captains_name_index == 0)
{
if (RDPtr->ship_info.ship_flags & GOOD_GUY)
{
// SIS
TEXT t;
t.baseline.x = STATUS_WIDTH >> 1;
t.baseline.y = y_offs + 6;
t.align = ALIGN_CENTER;
t.pStr = GLOBAL_SIS (CommanderName);
t.CharCount = (COUNT)~0;
SetContextForeGroundColor (
BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
SetContextFont (TinyFont);
font_DrawText (&t);
}
BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02));
SetContextFont (TinyFont);
font_DrawText (&t);
}
if (RDPtr->ship_info.max_crew > MAX_CREW_SIZE ||
RDPtr->ship_info.ship_flags & PLAYER_CAPTAIN)
{
// All crew doesn't fit in the graphics; print a number.
// Always print a number for the SIS in the full game.
DrawBattleCrewAmount (&RDPtr->ship_info);
DrawBattleCrewAmount (&RDPtr->ship_info, y_offs);
}
UnbatchGraphics ();
@@ -313,7 +320,8 @@ DeltaEnergy (ELEMENT *ElementPtr, SIZE energy_delta)
StarShipPtr->energy_counter =
StarShipPtr->RaceDescPtr->characteristics.energy_wait;
DeltaStatistics (ShipInfoPtr, 0, energy_delta);
DeltaStatistics (ShipInfoPtr, status_y_offsets[StarShipPtr->playerNr],
0, energy_delta);
}
return (retval);
@@ -354,7 +362,8 @@ DeltaCrew (ELEMENT *ElementPtr, SIZE crew_delta)
}
}
DeltaStatistics (ShipInfoPtr, crew_delta, 0);
DeltaStatistics (ShipInfoPtr, status_y_offsets[StarShipPtr->playerNr],
crew_delta, 0);
return (retval);
}
@@ -365,9 +374,8 @@ PreProcessStatus (ELEMENT *ShipPtr)
STARSHIP *StarShipPtr;
GetElementStarShip (ShipPtr, &StarShipPtr);
if (StarShipPtr->captains_name_index
|| (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY))
{
if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0)
{ // All except Sa-Matra, no captain's window there
STATUS_FLAGS old_status_flags, cur_status_flags;
CAPTAIN_STUFF *CSPtr;
@@ -379,9 +387,7 @@ PreProcessStatus (ELEMENT *ShipPtr)
old_status_flags &= (LEFT | RIGHT | THRUST | WEAPON | SPECIAL);
if (old_status_flags)
{
CaptainsWindow (CSPtr,
(StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS,
CaptainsWindow (CSPtr, status_y_offsets[StarShipPtr->playerNr],
old_status_flags, cur_status_flags, 1);
}
}
@@ -393,16 +399,14 @@ PostProcessStatus (ELEMENT *ShipPtr)
STARSHIP *StarShipPtr;
GetElementStarShip (ShipPtr, &StarShipPtr);
if (StarShipPtr->captains_name_index
|| (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY))
{
if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0)
{ // 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;
y = (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY) ?
GOOD_GUY_YOFFS : BAD_GUY_YOFFS;
y = status_y_offsets[StarShipPtr->playerNr];
if (ShipPtr->crew_level == 0)
{
+9 -4
View File
@@ -43,14 +43,19 @@
#define BATTLE_CREW_X 10
#define BATTLE_CREW_Y (64 - SAFE_Y)
extern COORD status_y_offsets[];
extern void InitStatusOffsets (void);
extern void DrawCrewFuelString (COORD y, SIZE state);
extern void ClearShipStatus (COORD y);
extern void OutlineShipStatus (COORD y);
extern void InitShipStatus (SHIP_INFO *ShipInfoPtr, BYTE captains_name_index,
extern void InitShipStatus (SHIP_INFO *ShipInfoPtr, STARSHIP *StarShipPtr,
RECT *pClipRect);
extern void DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta,
SIZE energy_delta);
extern void DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr);
// StarShipPtr or pClipRect can be NULL
extern void DeltaStatistics (SHIP_INFO *ShipInfoPtr, COORD y_offs,
SIZE crew_delta, SIZE energy_delta);
extern void DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr, COORD y_offs);
extern void DrawCaptainsWindow (STARSHIP *StarShipPtr);
extern BOOLEAN DeltaEnergy (ELEMENT *ElementPtr, SIZE energy_delta);
+1 -1
View File
@@ -287,7 +287,7 @@ ModifySilhouette (ELEMENT *ElementPtr, STAMP *modify_stamp,
or.corner.x += ObjectIntersect.IntersectStamp.origin.x;
or.corner.y += ObjectIntersect.IntersectStamp.origin.y;
InitShipStatus (&StarShipPtr->RaceDescPtr->ship_info,
StarShipPtr->captains_name_index, &or);
StarShipPtr, &or);
}
else
{