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