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:
Meep-Eep
2009-12-07 21:56:24 +00:00
parent 6e83a1df99
commit 7334ca7eea
2 changed files with 450 additions and 434 deletions
+224 -229
View File
@@ -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);
}
+21
View File
@@ -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