A few cleanups.
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3399 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+224
-229
@@ -56,7 +56,8 @@ MoveSIS (SIZE *pdx, SIZE *pdy)
|
||||
SIZE new_dx, new_dy;
|
||||
|
||||
new_dx = *pdx;
|
||||
if ((GLOBAL_SIS (log_x) -= new_dx) < 0)
|
||||
GLOBAL_SIS (log_x) -= new_dx;
|
||||
if (GLOBAL_SIS (log_x) < 0)
|
||||
{
|
||||
new_dx += (SIZE)GLOBAL_SIS (log_x);
|
||||
GLOBAL_SIS (log_x) = 0;
|
||||
@@ -68,7 +69,8 @@ MoveSIS (SIZE *pdx, SIZE *pdy)
|
||||
}
|
||||
|
||||
new_dy = *pdy;
|
||||
if ((GLOBAL_SIS (log_y) -= new_dy) < 0)
|
||||
GLOBAL_SIS (log_y) -= new_dy;
|
||||
if (GLOBAL_SIS (log_y) < 0)
|
||||
{
|
||||
new_dy += (SIZE)GLOBAL_SIS (log_y);
|
||||
GLOBAL_SIS (log_y) = 0;
|
||||
@@ -106,8 +108,7 @@ MoveSIS (SIZE *pdx, SIZE *pdy)
|
||||
}
|
||||
}
|
||||
|
||||
if (GLOBAL_SIS (FuelOnBoard)
|
||||
&& GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1)
|
||||
if (GLOBAL_SIS (FuelOnBoard) && GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1)
|
||||
{
|
||||
COUNT cur_fuel_ticks;
|
||||
COUNT hyper_dist;
|
||||
@@ -303,7 +304,9 @@ LoadHyperData (void)
|
||||
BOOLEAN
|
||||
LoadHyperspace (void)
|
||||
{
|
||||
hyper_dx = hyper_dy = hyper_extra = 0;
|
||||
hyper_dx = 0;
|
||||
hyper_dy = 0;
|
||||
hyper_extra = 0;
|
||||
fuel_ticks = 1;
|
||||
|
||||
GLOBAL (ShipStamp.origin.x) = -MAX_X_UNIVERSE;
|
||||
@@ -357,7 +360,7 @@ LoadHyperspace (void)
|
||||
|
||||
ClearSISRect (CLEAR_SIS_RADAR);
|
||||
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
@@ -372,7 +375,7 @@ FreeHyperspace (void)
|
||||
}
|
||||
// FreeHyperData ();
|
||||
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -429,35 +432,15 @@ typedef enum
|
||||
} TRANSITION_TYPE;
|
||||
|
||||
static void
|
||||
unhyper_transition (ELEMENT *ElementPtr)
|
||||
InterplanetaryTransition (ELEMENT *ElementPtr)
|
||||
{
|
||||
COUNT frame_index;
|
||||
|
||||
ElementPtr->state_flags |= CHANGING;
|
||||
|
||||
frame_index = GetFrameIndex (ElementPtr->current.image.frame);
|
||||
if (frame_index == 0)
|
||||
frame_index += ANGLE_TO_FACING (FULL_CIRCLE);
|
||||
else if (frame_index < ANGLE_TO_FACING (FULL_CIRCLE))
|
||||
frame_index = NORMALIZE_FACING (frame_index + 1);
|
||||
else if (++frame_index == GetFrameCount (ElementPtr->current.image.frame))
|
||||
{
|
||||
cleanup_hyperspace ();
|
||||
|
||||
GLOBAL (CurrentActivity) &= ~IN_BATTLE;
|
||||
switch ((TRANSITION_TYPE) ElementPtr->turn_wait)
|
||||
{
|
||||
case RANDOM_ENCOUNTER_TRANSITION:
|
||||
SaveSisHyperState ();
|
||||
GLOBAL (CurrentActivity) |= START_ENCOUNTER;
|
||||
break;
|
||||
case INTERPLANETARY_TRANSITION:
|
||||
GLOBAL (ip_planet) = 0;
|
||||
GLOBAL (in_orbit) = 0;
|
||||
GLOBAL (ShipFacing) = 0; /* Not reentering the system */
|
||||
SET_GAME_STATE (USED_BROADCASTER, 0);
|
||||
if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1)
|
||||
{
|
||||
// Enter a solar system from HyperSpace.
|
||||
GLOBAL (CurrentActivity) |= START_INTERPLANETARY;
|
||||
SET_GAME_STATE (ESCAPE_COUNTER, 0);
|
||||
}
|
||||
@@ -473,46 +456,31 @@ unhyper_transition (ELEMENT *ElementPtr)
|
||||
if (CurStarDescPtr->star_pt.x == ARILOU_HOME_X
|
||||
&& CurStarDescPtr->star_pt.y == ARILOU_HOME_Y)
|
||||
{
|
||||
// Meet the Arilou.
|
||||
GLOBAL (CurrentActivity) |= START_ENCOUNTER;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Transition from QuasiSpace to HyperSpace through
|
||||
// one of the permanent portals.
|
||||
COUNT index;
|
||||
POINT portal_pt[] =
|
||||
{
|
||||
{4091, 7748},
|
||||
{3184, 4906},
|
||||
{9211, 6104},
|
||||
{5673, 1207},
|
||||
{1910, 926},
|
||||
{8607, 151},
|
||||
{ 50, 1647},
|
||||
{6117, 4131},
|
||||
{5658, 9712},
|
||||
{2302, 3988},
|
||||
{ 112, 9409},
|
||||
{7752, 8906},
|
||||
{ 368, 6332},
|
||||
{9735, 3153},
|
||||
{5850, 6213},
|
||||
};
|
||||
const POINT portal_pt[] = QUASISPACE_PORTALS_HYPERSPACE_ENDPOINTS;
|
||||
|
||||
index = CurStarDescPtr
|
||||
- &star_array[NUM_SOLAR_SYSTEMS + 1];
|
||||
GLOBAL_SIS (log_x) =
|
||||
UNIVERSE_TO_LOGX (portal_pt[index].x);
|
||||
GLOBAL_SIS (log_y) =
|
||||
UNIVERSE_TO_LOGY (portal_pt[index].y);
|
||||
index = CurStarDescPtr - &star_array[NUM_SOLAR_SYSTEMS + 1];
|
||||
GLOBAL_SIS (log_x) = UNIVERSE_TO_LOGX (portal_pt[index].x);
|
||||
GLOBAL_SIS (log_y) = UNIVERSE_TO_LOGY (portal_pt[index].y);
|
||||
|
||||
SET_GAME_STATE (ARILOU_SPACE_SIDE, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ARILOU_SPACE_TRANSITION:
|
||||
/* Enter QuasiSpace from HyperSpace by any portal,
|
||||
* or HyperSpace from QuasiSpace through the periodically
|
||||
* opening portal.
|
||||
}
|
||||
|
||||
/* Enter QuasiSpace from HyperSpace by any portal, or HyperSpace from
|
||||
* QuasiSpace through the periodically opening portal.
|
||||
*/
|
||||
static void
|
||||
ArilouSpaceTransition (void)
|
||||
{
|
||||
GLOBAL (ShipFacing) = 0; /* Not reentering the system */
|
||||
SET_GAME_STATE (USED_BROADCASTER, 0);
|
||||
GLOBAL (autopilot.x) = ~0;
|
||||
@@ -536,12 +504,42 @@ unhyper_transition (ELEMENT *ElementPtr)
|
||||
}
|
||||
else
|
||||
{
|
||||
// From QuasiSpace to HyperSpace through the
|
||||
// periodically appearing portal.
|
||||
// From QuasiSpace to HyperSpace through the periodically appearing
|
||||
// portal.
|
||||
GLOBAL_SIS (log_x) = UNIVERSE_TO_LOGX (ARILOU_SPACE_X);
|
||||
GLOBAL_SIS (log_y) = UNIVERSE_TO_LOGY (ARILOU_SPACE_Y);
|
||||
SET_GAME_STATE (ARILOU_SPACE_SIDE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
unhyper_transition (ELEMENT *ElementPtr)
|
||||
{
|
||||
COUNT frame_index;
|
||||
|
||||
ElementPtr->state_flags |= CHANGING;
|
||||
|
||||
frame_index = GetFrameIndex (ElementPtr->current.image.frame);
|
||||
if (frame_index == 0)
|
||||
frame_index += ANGLE_TO_FACING (FULL_CIRCLE);
|
||||
else if (frame_index < ANGLE_TO_FACING (FULL_CIRCLE))
|
||||
frame_index = NORMALIZE_FACING (frame_index + 1);
|
||||
else if (++frame_index == GetFrameCount (ElementPtr->current.image.frame))
|
||||
{
|
||||
cleanup_hyperspace ();
|
||||
|
||||
GLOBAL (CurrentActivity) &= ~IN_BATTLE;
|
||||
switch ((TRANSITION_TYPE) ElementPtr->turn_wait)
|
||||
{
|
||||
case RANDOM_ENCOUNTER_TRANSITION:
|
||||
SaveSisHyperState ();
|
||||
GLOBAL (CurrentActivity) |= START_ENCOUNTER;
|
||||
break;
|
||||
case INTERPLANETARY_TRANSITION:
|
||||
InterplanetaryTransition (ElementPtr);
|
||||
break;
|
||||
case ARILOU_SPACE_TRANSITION:
|
||||
ArilouSpaceTransition ();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -557,7 +555,8 @@ static void
|
||||
init_transition (ELEMENT *ElementPtr0, ELEMENT *ElementPtr1,
|
||||
TRANSITION_TYPE which_transition)
|
||||
{
|
||||
SIZE dx, dy, num_turns;
|
||||
SIZE dx, dy;
|
||||
SIZE num_turns;
|
||||
STARSHIP *StarShipPtr;
|
||||
|
||||
dx = WORLD_TO_VELOCITY (ElementPtr0->next.location.x
|
||||
@@ -571,10 +570,11 @@ init_transition (ELEMENT *ElementPtr0, ELEMENT *ElementPtr1,
|
||||
ElementPtr1->turn_wait = (BYTE) which_transition;
|
||||
|
||||
GetElementStarShip (ElementPtr1, &StarShipPtr);
|
||||
if ((num_turns = GetFrameCount (ElementPtr1->next.image.frame)
|
||||
num_turns = GetFrameCount (ElementPtr1->next.image.frame)
|
||||
- ANGLE_TO_FACING (FULL_CIRCLE)
|
||||
+ NORMALIZE_FACING (ANGLE_TO_FACING (FULL_CIRCLE)
|
||||
- StarShipPtr->ShipFacing)) == 0)
|
||||
- StarShipPtr->ShipFacing);
|
||||
if (num_turns == 0)
|
||||
num_turns = 1;
|
||||
|
||||
SetVelocityComponents (&ElementPtr1->velocity,
|
||||
@@ -595,13 +595,12 @@ hyper_transition (ELEMENT *ElementPtr)
|
||||
|
||||
ElementPtr->state_flags |= DEFY_PHYSICS;
|
||||
|
||||
return (FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ElementPtr->preprocess_func =
|
||||
(void (*) (struct element
|
||||
*ElementPtr))hyper_transition;
|
||||
(void (*) (struct element *ElementPtr)) hyper_transition;
|
||||
ElementPtr->postprocess_func = NULL;
|
||||
ElementPtr->state_flags |= NONSOLID;
|
||||
ElementPtr->next.image.frame =
|
||||
@@ -646,7 +645,7 @@ hyper_transition (ELEMENT *ElementPtr)
|
||||
}
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -735,7 +734,8 @@ arilou_space_collision (ELEMENT *ElementPtr0,
|
||||
}
|
||||
else
|
||||
{
|
||||
init_transition (ElementPtr0, ElementPtr1, ARILOU_SPACE_TRANSITION);
|
||||
init_transition (ElementPtr0, ElementPtr1,
|
||||
ARILOU_SPACE_TRANSITION);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -764,24 +764,23 @@ AllocHyperElement (STAR_DESC *SDPtr)
|
||||
long lx, ly;
|
||||
|
||||
lx = UNIVERSE_TO_LOGX (SDPtr->star_pt.x)
|
||||
+ (LOG_SPACE_WIDTH >> 1)
|
||||
- GLOBAL_SIS (log_x);
|
||||
+ (LOG_SPACE_WIDTH >> 1) - GLOBAL_SIS (log_x);
|
||||
HyperSpaceElementPtr->current.location.x = WRAP_X (lx);
|
||||
|
||||
ly = UNIVERSE_TO_LOGY (SDPtr->star_pt.y)
|
||||
+ (LOG_SPACE_HEIGHT >> 1)
|
||||
- GLOBAL_SIS (log_y);
|
||||
+ (LOG_SPACE_HEIGHT >> 1) - GLOBAL_SIS (log_y);
|
||||
HyperSpaceElementPtr->current.location.y = WRAP_Y (ly);
|
||||
}
|
||||
|
||||
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex], STAMP_PRIM);
|
||||
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex],
|
||||
STAMP_PRIM);
|
||||
HyperSpaceElementPtr->current.image.farray =
|
||||
&hyperstars[1 + (GET_GAME_STATE (ARILOU_SPACE_SIDE) >> 1)];
|
||||
|
||||
UnlockElement (hHyperSpaceElement);
|
||||
}
|
||||
|
||||
return (hHyperSpaceElement);
|
||||
return hHyperSpaceElement;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -800,7 +799,8 @@ AddAmbientElement (void)
|
||||
HyperSpaceElementPtr->playerNr = NEUTRAL_PLAYER_NUM;
|
||||
HyperSpaceElementPtr->state_flags =
|
||||
APPEARING | FINITE_LIFE | NONSOLID;
|
||||
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex], STAMP_PRIM);
|
||||
SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex],
|
||||
STAMP_PRIM);
|
||||
HyperSpaceElementPtr->preprocess_func = animation_preprocess;
|
||||
|
||||
rand_val = TFB_Random ();
|
||||
@@ -896,11 +896,12 @@ static void
|
||||
encounter_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||
ELEMENT *ElementPtr1, POINT *pPt1)
|
||||
{
|
||||
HENCOUNTER hEncounter;
|
||||
HENCOUNTER hNextEncounter;
|
||||
|
||||
if ((ElementPtr1->state_flags & PLAYER_SHIP)
|
||||
&& (GLOBAL (CurrentActivity) & IN_BATTLE))
|
||||
{
|
||||
HENCOUNTER hEncounter, hNextEncounter;
|
||||
if (!(ElementPtr1->state_flags & PLAYER_SHIP)
|
||||
|| !(GLOBAL (CurrentActivity) & IN_BATTLE))
|
||||
return;
|
||||
|
||||
init_transition (ElementPtr0, ElementPtr1, RANDOM_ENCOUNTER_TRANSITION);
|
||||
|
||||
@@ -916,9 +917,7 @@ encounter_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||
ELEMENT *ElementPtr;
|
||||
|
||||
LockElement (EncounterPtr->hElement, &ElementPtr);
|
||||
|
||||
ElementPtr->state_flags |= NONSOLID | IGNORE_SIMILAR;
|
||||
|
||||
UnlockElement (EncounterPtr->hElement);
|
||||
}
|
||||
UnlockEncounter (hEncounter);
|
||||
@@ -929,7 +928,7 @@ encounter_collision (ELEMENT *ElementPtr0, POINT *pPt0,
|
||||
// but that would be too hacky ;)
|
||||
ElementPtr0->hTarget = getSisElement ();
|
||||
ZeroVelocityComponents (&ElementPtr0->velocity);
|
||||
}
|
||||
|
||||
(void) pPt0; /* Satisfying compiler (unused parameter) */
|
||||
(void) pPt1; /* Satisfying compiler (unused parameter) */
|
||||
}
|
||||
@@ -941,9 +940,8 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
HELEMENT hElement;
|
||||
STAR_DESC SD;
|
||||
|
||||
|
||||
if (GET_GAME_STATE (ARILOU_SPACE_SIDE) >= 2)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
if (EncounterPtr->SD.Index & ENCOUNTER_REFORMING)
|
||||
{
|
||||
@@ -952,7 +950,7 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
EncounterPtr->transition_state = 100;
|
||||
if ((EncounterPtr->SD.Index & ONE_SHOT_ENCOUNTER)
|
||||
|| LONIBBLE (EncounterPtr->SD.Index) == 0)
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (LONIBBLE (EncounterPtr->SD.Index))
|
||||
@@ -964,7 +962,8 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
{
|
||||
BYTE Type;
|
||||
SIZE dx, dy;
|
||||
COUNT i, NumShips;
|
||||
COUNT i;
|
||||
COUNT NumShips;
|
||||
DWORD radius_squared;
|
||||
BYTE EncounterMakeup[] =
|
||||
{
|
||||
@@ -987,16 +986,15 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
NumShips = MAX_HYPER_SHIPS;
|
||||
|
||||
|
||||
EncounterPtr->SD.Index = MAKE_BYTE (
|
||||
NumShips, HINIBBLE (EncounterPtr->SD.Index));
|
||||
EncounterPtr->SD.Index =
|
||||
MAKE_BYTE (NumShips, HINIBBLE (EncounterPtr->SD.Index));
|
||||
for (i = 0; i < NumShips; ++i)
|
||||
{
|
||||
HFLEETINFO hStarShip;
|
||||
FLEET_INFO *FleetPtr;
|
||||
BRIEF_SHIP_INFO *BSIPtr = &EncounterPtr->ShipList[i];
|
||||
|
||||
hStarShip = GetStarShipFromIndex (&GLOBAL (avail_race_q), Type);
|
||||
FleetPtr = LockFleetInfo (&GLOBAL (avail_race_q), hStarShip);
|
||||
HFLEETINFO hStarShip =
|
||||
GetStarShipFromIndex (&GLOBAL (avail_race_q), Type);
|
||||
FLEET_INFO *FleetPtr =
|
||||
LockFleetInfo (&GLOBAL (avail_race_q), hStarShip);
|
||||
BSIPtr->race_id = Type;
|
||||
BSIPtr->crew_level = FleetPtr->crew_level;
|
||||
BSIPtr->max_crew = FleetPtr->max_crew;
|
||||
@@ -1004,7 +1002,6 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
UnlockFleetInfo (&GLOBAL (avail_race_q), hStarShip);
|
||||
}
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
DWORD rand_val;
|
||||
@@ -1041,7 +1038,8 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
|
||||
LockElement (hElement, &ElementPtr);
|
||||
|
||||
if ((i = EncounterPtr->transition_state) || NewEncounter)
|
||||
i = EncounterPtr->transition_state;
|
||||
if (i || NewEncounter)
|
||||
{
|
||||
if (i < 0)
|
||||
{
|
||||
@@ -1078,14 +1076,14 @@ AddEncounterElement (ENCOUNTER *EncounterPtr, POINT *puniverse)
|
||||
InsertElement (hElement, GetTailElement ());
|
||||
}
|
||||
|
||||
return (EncounterPtr->hElement = hElement);
|
||||
EncounterPtr->hElement = hElement;
|
||||
return hElement;
|
||||
}
|
||||
|
||||
#define GRID_OFFSET 200
|
||||
|
||||
static void
|
||||
DrawHyperGrid (COORD ux, COORD uy, COORD ox,
|
||||
COORD oy)
|
||||
DrawHyperGrid (COORD ux, COORD uy, COORD ox, COORD oy)
|
||||
{
|
||||
COORD sx, sy, ex, ey;
|
||||
RECT r;
|
||||
@@ -1094,18 +1092,22 @@ DrawHyperGrid (COORD ux, COORD uy, COORD ox,
|
||||
SetContextForeGroundColor (
|
||||
BUILD_COLOR (MAKE_RGB15 (0x00, 0x10, 0x00), 0x6B));
|
||||
|
||||
if ((sx = ux - (RADAR_SCAN_WIDTH >> 1)) < 0)
|
||||
sx = ux - (RADAR_SCAN_WIDTH >> 1);
|
||||
if (sx < 0)
|
||||
sx = 0;
|
||||
else
|
||||
sx -= sx % GRID_OFFSET;
|
||||
if ((ex = ux + (RADAR_SCAN_WIDTH >> 1)) > MAX_X_UNIVERSE + 1)
|
||||
ex = ux + (RADAR_SCAN_WIDTH >> 1);
|
||||
if (ex > MAX_X_UNIVERSE + 1)
|
||||
ex = MAX_X_UNIVERSE + 1;
|
||||
|
||||
if ((sy = uy - (RADAR_SCAN_HEIGHT >> 1)) < 0)
|
||||
sy = uy - (RADAR_SCAN_HEIGHT >> 1);
|
||||
if (sy < 0)
|
||||
sy = 0;
|
||||
else
|
||||
sy -= sy % GRID_OFFSET;
|
||||
if ((ey = uy + (RADAR_SCAN_HEIGHT >> 1)) > MAX_Y_UNIVERSE + 1)
|
||||
ey = uy + (RADAR_SCAN_HEIGHT >> 1);
|
||||
if (ey > MAX_Y_UNIVERSE + 1)
|
||||
ey = MAX_Y_UNIVERSE + 1;
|
||||
|
||||
r.corner.y = (COORD) ((long)(MAX_Y_UNIVERSE - ey)
|
||||
@@ -1115,75 +1117,53 @@ DrawHyperGrid (COORD ux, COORD uy, COORD ox,
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - oy) - r.corner.y + 1;
|
||||
for (ux = sx; ux <= ex; ux += GRID_OFFSET)
|
||||
{
|
||||
r.corner.x = (COORD) ((long)ux
|
||||
* RADAR_WIDTH / RADAR_SCAN_WIDTH) - ox;
|
||||
r.corner.x = (COORD) ((long)ux * RADAR_WIDTH / RADAR_SCAN_WIDTH) - ox;
|
||||
DrawFilledRectangle (&r);
|
||||
} while ((ux += GRID_OFFSET) < ex);
|
||||
}
|
||||
|
||||
r.corner.x = (COORD) ((long)sx * RADAR_WIDTH / RADAR_SCAN_WIDTH) - ox;
|
||||
r.extent.width = ((COORD) ((long)ex
|
||||
* RADAR_WIDTH / RADAR_SCAN_WIDTH) - ox)
|
||||
- r.corner.x + 1;
|
||||
r.extent.width = ((COORD) ((long)ex * RADAR_WIDTH / RADAR_SCAN_WIDTH)
|
||||
- ox) - r.corner.x + 1;
|
||||
r.extent.height = 1;
|
||||
for (uy = sy; uy <= ey; uy += GRID_OFFSET)
|
||||
{
|
||||
r.corner.y = (COORD)((long)(MAX_Y_UNIVERSE - uy)
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - oy;
|
||||
DrawFilledRectangle (&r);
|
||||
} while ((uy += GRID_OFFSET) < ey);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ProcessEncounters (POINT *puniverse, COORD ox, COORD oy)
|
||||
{
|
||||
STAMP s;
|
||||
HENCOUNTER hEncounter, hNextEncounter;
|
||||
|
||||
s.frame = SetAbsFrameIndex (stars_in_space, 91);
|
||||
for (hEncounter = GetHeadEncounter ();
|
||||
hEncounter; hEncounter = hNextEncounter)
|
||||
// Returns false iff the encounter is to be removed.
|
||||
static bool
|
||||
ProcessEncounter (ENCOUNTER *EncounterPtr, POINT *puniverse,
|
||||
COORD ox, COORD oy, STAMP *stamp)
|
||||
{
|
||||
ELEMENT *ElementPtr;
|
||||
COORD ex, ey;
|
||||
ENCOUNTER *EncounterPtr;
|
||||
|
||||
LockEncounter (hEncounter, &EncounterPtr);
|
||||
hNextEncounter = GetSuccEncounter (EncounterPtr);
|
||||
|
||||
if (EncounterPtr->hElement == 0
|
||||
&& AddEncounterElement (EncounterPtr, puniverse) == 0)
|
||||
{
|
||||
DeleteEncounter:
|
||||
UnlockEncounter (hEncounter);
|
||||
|
||||
RemoveEncounter (hEncounter);
|
||||
FreeEncounter (hEncounter);
|
||||
continue;
|
||||
}
|
||||
|
||||
{
|
||||
ELEMENT *ElementPtr;
|
||||
return false;
|
||||
|
||||
LockElement (EncounterPtr->hElement, &ElementPtr);
|
||||
|
||||
if (ElementPtr->death_func)
|
||||
{
|
||||
if (EncounterPtr->transition_state
|
||||
&& ElementPtr->turn_wait == 0)
|
||||
if (EncounterPtr->transition_state && ElementPtr->turn_wait == 0)
|
||||
{
|
||||
--EncounterPtr->transition_state;
|
||||
if (EncounterPtr->transition_state >=
|
||||
NUM_VORTEX_TRANSITIONS)
|
||||
if (EncounterPtr->transition_state >= NUM_VORTEX_TRANSITIONS)
|
||||
++ElementPtr->turn_wait;
|
||||
else if (EncounterPtr->transition_state ==
|
||||
-NUM_VORTEX_TRANSITIONS)
|
||||
{
|
||||
ElementPtr->death_func = NULL;
|
||||
UnlockElement (EncounterPtr->hElement);
|
||||
goto DeleteEncounter;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMP_PRIM);
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex],
|
||||
STAMP_PRIM);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1203,38 +1183,35 @@ DeleteEncounter:
|
||||
|
||||
cur_facing = ANGLE_TO_FACING (
|
||||
GetVelocityTravelAngle (&ElementPtr->velocity));
|
||||
delta_facing = NORMALIZE_FACING (cur_facing
|
||||
- ANGLE_TO_FACING (ARCTAN (
|
||||
puniverse->x - EncounterPtr->SD.star_pt.x,
|
||||
delta_facing = NORMALIZE_FACING (cur_facing - ANGLE_TO_FACING (
|
||||
ARCTAN (puniverse->x - EncounterPtr->SD.star_pt.x,
|
||||
puniverse->y - EncounterPtr->SD.star_pt.y)));
|
||||
if (delta_facing || (delta_x == 0 && delta_y == 0))
|
||||
{
|
||||
SIZE s, RaceHyperSpeed[] =
|
||||
SIZE speed;
|
||||
const SIZE RaceHyperSpeed[] =
|
||||
{
|
||||
RACE_HYPER_SPEED
|
||||
};
|
||||
|
||||
#define ENCOUNTER_TRACK_WAIT 3
|
||||
s = RaceHyperSpeed[EncounterPtr->SD.Type];
|
||||
speed = RaceHyperSpeed[EncounterPtr->SD.Type];
|
||||
if (delta_facing < ANGLE_TO_FACING (HALF_CIRCLE))
|
||||
--cur_facing;
|
||||
else
|
||||
++cur_facing;
|
||||
if (NORMALIZE_FACING (delta_facing
|
||||
+ ANGLE_TO_FACING (OCTANT)) > ANGLE_TO_FACING (QUADRANT))
|
||||
if (NORMALIZE_FACING (delta_facing + ANGLE_TO_FACING (OCTANT))
|
||||
> ANGLE_TO_FACING (QUADRANT))
|
||||
{
|
||||
if (delta_facing < ANGLE_TO_FACING (HALF_CIRCLE))
|
||||
--cur_facing;
|
||||
else
|
||||
++cur_facing;
|
||||
s >>= 1;
|
||||
speed >>= 1;
|
||||
}
|
||||
cur_facing = FACING_TO_ANGLE (cur_facing);
|
||||
SetVelocityComponents (
|
||||
&ElementPtr->velocity,
|
||||
COSINE (cur_facing, s),
|
||||
SINE (cur_facing, s)
|
||||
);
|
||||
SetVelocityComponents (&ElementPtr->velocity,
|
||||
COSINE (cur_facing, speed), SINE (cur_facing, speed));
|
||||
GetNextVelocityComponents (&ElementPtr->velocity,
|
||||
&delta_x, &delta_y, 1);
|
||||
|
||||
@@ -1243,17 +1220,15 @@ DeleteEncounter:
|
||||
}
|
||||
EncounterPtr->log_x += delta_x;
|
||||
EncounterPtr->log_y -= delta_y;
|
||||
EncounterPtr->SD.star_pt.x =
|
||||
LOGX_TO_UNIVERSE (EncounterPtr->log_x);
|
||||
EncounterPtr->SD.star_pt.y =
|
||||
LOGY_TO_UNIVERSE (EncounterPtr->log_y);
|
||||
EncounterPtr->SD.star_pt.x = LOGX_TO_UNIVERSE (EncounterPtr->log_x);
|
||||
EncounterPtr->SD.star_pt.y = LOGY_TO_UNIVERSE (EncounterPtr->log_y);
|
||||
|
||||
encounter_radius = EncounterPtr->radius + (GRID_OFFSET >> 1);
|
||||
if ((delta_x = EncounterPtr->SD.star_pt.x
|
||||
- EncounterPtr->origin.x) < 0)
|
||||
delta_x = EncounterPtr->SD.star_pt.x - EncounterPtr->origin.x;
|
||||
if (delta_x < 0)
|
||||
delta_x = -delta_x;
|
||||
if ((delta_y = EncounterPtr->SD.star_pt.y
|
||||
- EncounterPtr->origin.y) < 0)
|
||||
delta_y = EncounterPtr->SD.star_pt.y - EncounterPtr->origin.y;
|
||||
if (delta_y < 0)
|
||||
delta_y = -delta_y;
|
||||
if ((COUNT)delta_x >= encounter_radius
|
||||
|| (COUNT)delta_y >= encounter_radius
|
||||
@@ -1273,7 +1248,7 @@ DeleteEncounter:
|
||||
{
|
||||
ElementPtr->death_func = NULL;
|
||||
UnlockElement (EncounterPtr->hElement);
|
||||
goto DeleteEncounter;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1285,18 +1260,18 @@ DeleteEncounter:
|
||||
&& ey - puniverse->y >= -UNIT_SCREEN_HEIGHT
|
||||
&& ey - puniverse->y <= UNIT_SCREEN_HEIGHT)
|
||||
{
|
||||
ElementPtr->next.location.x = (SIZE)(
|
||||
EncounterPtr->log_x - GLOBAL_SIS (log_x)
|
||||
) + (LOG_SPACE_WIDTH >> 1);
|
||||
ElementPtr->next.location.y = (SIZE)(
|
||||
EncounterPtr->log_y - GLOBAL_SIS (log_y)
|
||||
) + (LOG_SPACE_HEIGHT >> 1);
|
||||
ElementPtr->next.location.x =
|
||||
(SIZE)(EncounterPtr->log_x - GLOBAL_SIS (log_x))
|
||||
+ (LOG_SPACE_WIDTH >> 1);
|
||||
ElementPtr->next.location.y =
|
||||
(SIZE)(EncounterPtr->log_y - GLOBAL_SIS (log_y))
|
||||
+ (LOG_SPACE_HEIGHT >> 1);
|
||||
if ((ElementPtr->state_flags & NONSOLID)
|
||||
&& EncounterPtr->transition_state == 0)
|
||||
{
|
||||
ElementPtr->current.location =
|
||||
ElementPtr->next.location;
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMP_PRIM);
|
||||
ElementPtr->current.location = ElementPtr->next.location;
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex],
|
||||
STAMP_PRIM);
|
||||
if (ElementPtr->death_func == 0)
|
||||
{
|
||||
InitIntersectStartPoint (ElementPtr);
|
||||
@@ -1307,29 +1282,50 @@ DeleteEncounter:
|
||||
else
|
||||
{
|
||||
ElementPtr->state_flags |= NONSOLID;
|
||||
if (ex - puniverse->x < -XOFFS
|
||||
|| ex - puniverse->x > XOFFS
|
||||
|| ey - puniverse->y < -YOFFS
|
||||
|| ey - puniverse->y > YOFFS)
|
||||
if (ex - puniverse->x < -XOFFS || ex - puniverse->x > XOFFS
|
||||
|| ey - puniverse->y < -YOFFS || ey - puniverse->y > YOFFS)
|
||||
{
|
||||
ElementPtr->life_span = 0;
|
||||
ElementPtr->death_func = NULL;
|
||||
UnlockElement (EncounterPtr->hElement);
|
||||
|
||||
goto DeleteEncounter;
|
||||
return false;
|
||||
}
|
||||
|
||||
SetPrimType (&DisplayArray[ElementPtr->PrimIndex], NO_PRIM);
|
||||
}
|
||||
|
||||
UnlockElement (EncounterPtr->hElement);
|
||||
|
||||
stamp->origin.x = (COORD)((long)ex * RADAR_WIDTH / RADAR_SCAN_WIDTH) - ox;
|
||||
stamp->origin.y = (COORD)((long)(MAX_Y_UNIVERSE - ey) * RADAR_HEIGHT
|
||||
/ RADAR_SCAN_HEIGHT) - oy;
|
||||
DrawStamp (stamp);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
s.origin.x = (COORD)((long)ex * RADAR_WIDTH
|
||||
/ RADAR_SCAN_WIDTH) - ox;
|
||||
s.origin.y = (COORD)((long)(MAX_Y_UNIVERSE - ey) * RADAR_HEIGHT
|
||||
/ RADAR_SCAN_HEIGHT) - oy;
|
||||
DrawStamp (&s);
|
||||
static void
|
||||
ProcessEncounters (POINT *puniverse, COORD ox, COORD oy)
|
||||
{
|
||||
STAMP stamp;
|
||||
HENCOUNTER hEncounter, hNextEncounter;
|
||||
|
||||
stamp.frame = SetAbsFrameIndex (stars_in_space, 91);
|
||||
for (hEncounter = GetHeadEncounter ();
|
||||
hEncounter; hEncounter = hNextEncounter)
|
||||
{
|
||||
ENCOUNTER *EncounterPtr;
|
||||
|
||||
LockEncounter (hEncounter, &EncounterPtr);
|
||||
hNextEncounter = GetSuccEncounter (EncounterPtr);
|
||||
|
||||
if (!ProcessEncounter (EncounterPtr, puniverse, ox, oy, &stamp))
|
||||
{
|
||||
UnlockEncounter (hEncounter);
|
||||
RemoveEncounter (hEncounter);
|
||||
FreeEncounter (hEncounter);
|
||||
continue;
|
||||
}
|
||||
|
||||
UnlockEncounter (hEncounter);
|
||||
}
|
||||
@@ -1356,20 +1352,15 @@ SeedUniverse (void)
|
||||
SetContext (RadarContext);
|
||||
BatchGraphics ();
|
||||
|
||||
ox = (COORD)((long)universe.x
|
||||
* RADAR_WIDTH / RADAR_SCAN_WIDTH)
|
||||
ox = (COORD)((long)universe.x * RADAR_WIDTH / RADAR_SCAN_WIDTH)
|
||||
- (RADAR_WIDTH >> 1);
|
||||
oy = (COORD)((long)(MAX_Y_UNIVERSE - universe.y)
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT)
|
||||
- (RADAR_HEIGHT >> 1);
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - (RADAR_HEIGHT >> 1);
|
||||
|
||||
ex = (COORD)((long)GLOBAL (ShipStamp.origin.x)
|
||||
* RADAR_WIDTH / RADAR_SCAN_WIDTH)
|
||||
- (RADAR_WIDTH >> 1);
|
||||
ey = (COORD)((long)(MAX_Y_UNIVERSE
|
||||
- GLOBAL (ShipStamp.origin.y))
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT)
|
||||
- (RADAR_HEIGHT >> 1);
|
||||
* RADAR_WIDTH / RADAR_SCAN_WIDTH) - (RADAR_WIDTH >> 1);
|
||||
ey = (COORD)((long)(MAX_Y_UNIVERSE - GLOBAL (ShipStamp.origin.y))
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - (RADAR_HEIGHT >> 1);
|
||||
|
||||
arilouSpaceCounter = GET_GAME_STATE (ARILOU_SPACE_COUNTER);
|
||||
arilouSpaceSide = GET_GAME_STATE (ARILOU_SPACE_SIDE);
|
||||
@@ -1393,8 +1384,8 @@ SeedUniverse (void)
|
||||
|
||||
s.origin.x = (COORD)((long)ex * RADAR_WIDTH
|
||||
/ RADAR_SCAN_WIDTH) - ox;
|
||||
s.origin.y = (COORD)((long)(MAX_Y_UNIVERSE - ey) * RADAR_HEIGHT
|
||||
/ RADAR_SCAN_HEIGHT) - oy;
|
||||
s.origin.y = (COORD)((long)(MAX_Y_UNIVERSE - ey)
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - oy;
|
||||
s.frame = SetRelFrameIndex (blip_frame,
|
||||
star_type + 2);
|
||||
DrawStamp (&s);
|
||||
@@ -1455,34 +1446,38 @@ SeedUniverse (void)
|
||||
--i;
|
||||
sx = SD[i].star_pt.x - universe.x + XOFFS;
|
||||
sy = SD[i].star_pt.y - universe.y + YOFFS;
|
||||
if (sx >= 0 && sy >= 0
|
||||
&& sx < (XOFFS << 1) && sy < (YOFFS << 1))
|
||||
{
|
||||
if (sx < 0 || sy < 0 || sx >= (XOFFS << 1) || sy >= (YOFFS << 1))
|
||||
continue;
|
||||
|
||||
ex = SD[i].star_pt.x;
|
||||
ey = SD[i].star_pt.y;
|
||||
s.origin.x = (COORD)((long)ex * RADAR_WIDTH
|
||||
/ RADAR_SCAN_WIDTH) - ox;
|
||||
s.origin.x = (COORD)((long)ex * RADAR_WIDTH / RADAR_SCAN_WIDTH)
|
||||
- ox;
|
||||
s.origin.y = (COORD)((long)(MAX_Y_UNIVERSE - ey)
|
||||
* RADAR_HEIGHT
|
||||
/ RADAR_SCAN_HEIGHT) - oy;
|
||||
* RADAR_HEIGHT / RADAR_SCAN_HEIGHT) - oy;
|
||||
s.frame = SetAbsFrameIndex (stars_in_space, 95);
|
||||
DrawStamp (&s);
|
||||
|
||||
if ((ex -= universe.x) < 0)
|
||||
ex -= universe.x;
|
||||
if (ex < 0)
|
||||
ex = -ex;
|
||||
if ((ey -= universe.y) < 0)
|
||||
ey -= universe.y;
|
||||
if (ey < 0)
|
||||
ey = -ey;
|
||||
if (ex <= (XOFFS / NUM_RADAR_SCREENS)
|
||||
&& ey <= (YOFFS / NUM_RADAR_SCREENS)
|
||||
&& (hHyperSpaceElement =
|
||||
AllocHyperElement (&SD[i])) != 0)
|
||||
{
|
||||
|
||||
if (ex > (XOFFS / NUM_RADAR_SCREENS)
|
||||
|| ey > (YOFFS / NUM_RADAR_SCREENS))
|
||||
continue;
|
||||
|
||||
hHyperSpaceElement = AllocHyperElement (&SD[i]);
|
||||
if (hHyperSpaceElement == 0)
|
||||
continue;
|
||||
|
||||
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
||||
HyperSpaceElementPtr->current.image.frame = SetAbsFrameIndex (
|
||||
hyperstars[1 + (GET_GAME_STATE (ARILOU_SPACE_SIDE) >> 1)],
|
||||
SD[i].Index
|
||||
);
|
||||
HyperSpaceElementPtr->preprocess_func =
|
||||
SD[i].Index);
|
||||
HyperSpaceElementPtr->preprocess_func = NULL;
|
||||
HyperSpaceElementPtr->postprocess_func = NULL;
|
||||
HyperSpaceElementPtr->collision_func = arilou_space_collision;
|
||||
|
||||
@@ -1500,37 +1495,37 @@ SeedUniverse (void)
|
||||
UnlockElement (hHyperSpaceElement);
|
||||
|
||||
InsertElement (hHyperSpaceElement, GetHeadElement ());
|
||||
}
|
||||
}
|
||||
} while (i);
|
||||
}
|
||||
|
||||
{
|
||||
SDPtr = 0;
|
||||
while ((SDPtr = FindStar (SDPtr, &universe, XOFFS, YOFFS)))
|
||||
{
|
||||
ex = SDPtr->star_pt.x;
|
||||
ey = SDPtr->star_pt.y;
|
||||
if ((ex -= universe.x) < 0)
|
||||
ex = -ex;
|
||||
if ((ey -= universe.y) < 0)
|
||||
ey = -ey;
|
||||
if (ex <= (XOFFS / NUM_RADAR_SCREENS)
|
||||
&& ey <= (YOFFS / NUM_RADAR_SCREENS)
|
||||
&& (hHyperSpaceElement = AllocHyperElement (SDPtr)) != 0)
|
||||
{
|
||||
BYTE star_type;
|
||||
|
||||
ex = SDPtr->star_pt.x - universe.x;
|
||||
if (ex < 0)
|
||||
ex = -ex;
|
||||
ey = SDPtr->star_pt.y - universe.y;
|
||||
if (ey < 0)
|
||||
ey = -ey;
|
||||
if (ex > (XOFFS / NUM_RADAR_SCREENS)
|
||||
|| ey > (YOFFS / NUM_RADAR_SCREENS))
|
||||
continue;
|
||||
|
||||
hHyperSpaceElement = AllocHyperElement (SDPtr);
|
||||
if (hHyperSpaceElement == 0)
|
||||
continue;
|
||||
|
||||
star_type = SDPtr->Type;
|
||||
|
||||
LockElement (hHyperSpaceElement, &HyperSpaceElementPtr);
|
||||
HyperSpaceElementPtr->current.image.frame = SetAbsFrameIndex (
|
||||
hyperstars[1 + (GET_GAME_STATE (ARILOU_SPACE_SIDE) >> 1)],
|
||||
STAR_TYPE (star_type)
|
||||
* NUM_STAR_COLORS
|
||||
+ STAR_COLOR (star_type)
|
||||
);
|
||||
HyperSpaceElementPtr->preprocess_func =
|
||||
STAR_TYPE (star_type) * NUM_STAR_COLORS
|
||||
+ STAR_COLOR (star_type));
|
||||
HyperSpaceElementPtr->preprocess_func = NULL;
|
||||
HyperSpaceElementPtr->postprocess_func = NULL;
|
||||
HyperSpaceElementPtr->collision_func = hyper_collision;
|
||||
|
||||
@@ -1549,7 +1544,6 @@ SeedUniverse (void)
|
||||
|
||||
InsertElement (hHyperSpaceElement, GetHeadElement ());
|
||||
}
|
||||
}
|
||||
ProcessEncounters (&universe, ox, oy);
|
||||
}
|
||||
|
||||
@@ -1740,3 +1734,4 @@ SaveSisHyperState (void)
|
||||
GLOBAL (ShipFacing) = StarShipPtr->ShipFacing + 1;
|
||||
UnlockElement (hSisElement);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,27 @@
|
||||
#define ARILOU_HOME_X (QUASI_SPACE_X + ((RADAR_SCAN_WIDTH >> 1) * 3))
|
||||
#define ARILOU_HOME_Y (QUASI_SPACE_Y + ((RADAR_SCAN_HEIGHT >> 1) * 3))
|
||||
|
||||
// HyperSpace coordinates of the locations where the QuasiSpace portals
|
||||
// take you.
|
||||
#define QUASISPACE_PORTALS_HYPERSPACE_ENDPOINTS \
|
||||
{ \
|
||||
{4091, 7748}, \
|
||||
{3184, 4906}, \
|
||||
{9211, 6104}, \
|
||||
{5673, 1207}, \
|
||||
{1910, 926}, \
|
||||
{8607, 151}, \
|
||||
{ 50, 1647}, \
|
||||
{6117, 4131}, \
|
||||
{5658, 9712}, \
|
||||
{2302, 3988}, \
|
||||
{ 112, 9409}, \
|
||||
{7752, 8906}, \
|
||||
{ 368, 6332}, \
|
||||
{9735, 3153}, \
|
||||
{5850, 6213}, \
|
||||
}
|
||||
|
||||
// Hyperspace coordinates of the Sol system
|
||||
// Should be the same as in plandata.c
|
||||
#define SOL_X 1752
|
||||
|
||||
Reference in New Issue
Block a user