First steps towards disentangling the lander input state from MENU_STATE.
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3303 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+229
-193
@@ -48,6 +48,35 @@
|
|||||||
// ONE_SECOND.
|
// ONE_SECOND.
|
||||||
#define PLANET_SIDE_RATE (ONE_SECOND / 35)
|
#define PLANET_SIDE_RATE (ONE_SECOND / 35)
|
||||||
|
|
||||||
|
// This is a derived type from INPUT_STATE_DESC.
|
||||||
|
// Originally, the general MENU_STATE structure was used. Now, only the
|
||||||
|
// fields which are relevant are put in here. In the MENU_STATE structure,
|
||||||
|
// these fields were reused for all sorts of purposes, which had nothing
|
||||||
|
// to do with what the name suggests. Not all fields have been renamed yet
|
||||||
|
// in LanderInputState.
|
||||||
|
typedef struct LanderInputState LanderInputState;
|
||||||
|
struct LanderInputState {
|
||||||
|
BOOLEAN (*InputFunc) (LanderInputState *pMS);
|
||||||
|
COUNT MenuRepeatDelay;
|
||||||
|
|
||||||
|
PLANETSIDE_DESC *planetSideDesc;
|
||||||
|
SIZE Initialized;
|
||||||
|
MENU_STATE *scanInputState;
|
||||||
|
|
||||||
|
// The following fields need to be renamed:
|
||||||
|
BYTE CurState;
|
||||||
|
// High byte: ?
|
||||||
|
// Low byte: ?
|
||||||
|
SIZE delta_item;
|
||||||
|
// High byte: ?
|
||||||
|
// Low byte: bits 0-6: current lander crew count
|
||||||
|
// bit 7: set if damage was prevented by a shield
|
||||||
|
};
|
||||||
|
|
||||||
|
LanderInputState *pLanderInputState;
|
||||||
|
// Temporary, to replace the references to pMenuState.
|
||||||
|
// Eventually, this should become a parameter to everything which
|
||||||
|
// needs it.
|
||||||
|
|
||||||
FRAME LanderFrame[8];
|
FRAME LanderFrame[8];
|
||||||
static SOUND LanderSounds;
|
static SOUND LanderSounds;
|
||||||
@@ -111,8 +140,6 @@ const LIFEFORM_DESC CreatureData[] =
|
|||||||
// Zex's Beauty
|
// Zex's Beauty
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FLASH_WIDTH 9
|
|
||||||
#define FLASH_HEIGHT 9
|
|
||||||
|
|
||||||
extern PRIM_LINKS DisplayLinks;
|
extern PRIM_LINKS DisplayLinks;
|
||||||
|
|
||||||
@@ -196,7 +223,8 @@ RepairTopography (ELEMENT *ElementPtr)
|
|||||||
r.corner.x += delta;
|
r.corner.x += delta;
|
||||||
r.extent.width -= delta;
|
r.extent.width -= delta;
|
||||||
}
|
}
|
||||||
if ((ElementPtr->current.location.x += delta) < 0)
|
ElementPtr->current.location.x += delta;
|
||||||
|
if (ElementPtr->current.location.x < 0)
|
||||||
ElementPtr->current.location.x += MAP_WIDTH;
|
ElementPtr->current.location.x += MAP_WIDTH;
|
||||||
else if (ElementPtr->current.location.x >= MAP_WIDTH)
|
else if (ElementPtr->current.location.x >= MAP_WIDTH)
|
||||||
ElementPtr->current.location.x -= MAP_WIDTH;
|
ElementPtr->current.location.x -= MAP_WIDTH;
|
||||||
@@ -211,7 +239,7 @@ RepairTopography (ELEMENT *ElementPtr)
|
|||||||
}
|
}
|
||||||
ElementPtr->current.location.y += delta;
|
ElementPtr->current.location.y += delta;
|
||||||
|
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HELEMENT AddGroundDisaster (COUNT which_disaster);
|
static HELEMENT AddGroundDisaster (COUNT which_disaster);
|
||||||
@@ -261,7 +289,7 @@ object_animation (ELEMENT *ElementPtr)
|
|||||||
/* A natural disaster */
|
/* A natural disaster */
|
||||||
if (ElementPtr->mass_points == DEATH_EXPLOSION)
|
if (ElementPtr->mass_points == DEATH_EXPLOSION)
|
||||||
{
|
{
|
||||||
if (++pMenuState->CurState >= EXPLOSION_LIFE)
|
if (++pLanderInputState->CurState >= EXPLOSION_LIFE)
|
||||||
pPrim->Object.Stamp.frame =
|
pPrim->Object.Stamp.frame =
|
||||||
DecFrameIndex (pPrim->Object.Stamp.frame);
|
DecFrameIndex (pPrim->Object.Stamp.frame);
|
||||||
}
|
}
|
||||||
@@ -347,7 +375,7 @@ object_animation (ELEMENT *ElementPtr)
|
|||||||
DetectPercent = (((BYTE)(CreatureData[index].Attributes
|
DetectPercent = (((BYTE)(CreatureData[index].Attributes
|
||||||
& AWARENESS_MASK) >> AWARENESS_SHIFT) + 1)
|
& AWARENESS_MASK) >> AWARENESS_SHIFT) + 1)
|
||||||
* (30 / 6);
|
* (30 / 6);
|
||||||
// XXX: Shouldn't this be dependant on
|
// XXX: Shouldn't this be dependent on
|
||||||
// PLANET_SIDE_RATE somehow? And why is it
|
// PLANET_SIDE_RATE somehow? And why is it
|
||||||
// written as '30 / 6' instead of 5? Does the 30
|
// written as '30 / 6' instead of 5? Does the 30
|
||||||
// specify the (PC) framerate? That doesn't make
|
// specify the (PC) framerate? That doesn't make
|
||||||
@@ -442,8 +470,9 @@ DeltaLanderCrew (SIZE crew_delta, COUNT which_disaster)
|
|||||||
|
|
||||||
if (crew_delta > 0)
|
if (crew_delta > 0)
|
||||||
{
|
{
|
||||||
crew_delta = HIBYTE (pMenuState->delta_item);
|
// Filling up the crew bar when landing.
|
||||||
pMenuState->delta_item += MAKE_WORD (0, 1);
|
crew_delta = HIBYTE (pLanderInputState->delta_item);
|
||||||
|
pLanderInputState->delta_item += MAKE_WORD (0, 1);
|
||||||
|
|
||||||
s.frame = SetAbsFrameIndex (LanderFrame[0], 55);
|
s.frame = SetAbsFrameIndex (LanderFrame[0], 55);
|
||||||
}
|
}
|
||||||
@@ -453,20 +482,24 @@ DeltaLanderCrew (SIZE crew_delta, COUNT which_disaster)
|
|||||||
|
|
||||||
ShieldFlags = GET_GAME_STATE (LANDER_SHIELDS);
|
ShieldFlags = GET_GAME_STATE (LANDER_SHIELDS);
|
||||||
ShieldFlags &= 1 << which_disaster;
|
ShieldFlags &= 1 << which_disaster;
|
||||||
crew_delta = HIBYTE (pMenuState->delta_item);
|
crew_delta = HIBYTE (pLanderInputState->delta_item);
|
||||||
if (crew_delta < 1)
|
if (crew_delta < 1)
|
||||||
return;
|
return;
|
||||||
if (ShieldFlags && (BYTE)TFB_Random () < 256 * 95 / 100)
|
if (ShieldFlags && (BYTE)TFB_Random () < 256 * 95 / 100)
|
||||||
pMenuState->delta_item = SHIELD_BIT;
|
{
|
||||||
|
// Protected by a lander shield.
|
||||||
|
pLanderInputState->delta_item = SHIELD_BIT;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Deal damage.
|
||||||
ShieldFlags = 0;
|
ShieldFlags = 0;
|
||||||
if (--crew_delta == 0)
|
if (--crew_delta == 0)
|
||||||
pMenuState->CurState = 0;
|
pLanderInputState->CurState = 0;
|
||||||
pMenuState->delta_item = 0;
|
pLanderInputState->delta_item = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
pMenuState->delta_item |= MAKE_WORD (DAMAGE_CYCLE, crew_delta);
|
pLanderInputState->delta_item |= MAKE_WORD (DAMAGE_CYCLE, crew_delta);
|
||||||
if (ShieldFlags)
|
if (ShieldFlags)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -557,7 +590,7 @@ CheckObjectCollision (COUNT index)
|
|||||||
index = GetSuccLink (DisplayLinks);
|
index = GetSuccLink (DisplayLinks);
|
||||||
}
|
}
|
||||||
|
|
||||||
pPSD = (PLANETSIDE_DESC*)pMenuState->ModuleFrame;
|
pPSD = pLanderInputState->planetSideDesc;
|
||||||
LanderControl.EndPoint = LanderControl.IntersectStamp.origin;
|
LanderControl.EndPoint = LanderControl.IntersectStamp.origin;
|
||||||
LanderHandle = GetFrameParentDrawable (LanderControl.IntersectStamp.frame);
|
LanderHandle = GetFrameParentDrawable (LanderControl.IntersectStamp.frame);
|
||||||
|
|
||||||
@@ -610,7 +643,7 @@ CheckObjectCollision (COUNT index)
|
|||||||
if (pLanderPrim == 0)
|
if (pLanderPrim == 0)
|
||||||
{
|
{
|
||||||
/* Collision of lander with another object */
|
/* Collision of lander with another object */
|
||||||
if (HIBYTE (pMenuState->delta_item) == 0
|
if (HIBYTE (pLanderInputState->delta_item) == 0
|
||||||
|| pPSD->InTransit)
|
|| pPSD->InTransit)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -644,10 +677,11 @@ CheckObjectCollision (COUNT index)
|
|||||||
DeltaLanderCrew (-1, LANDER_INJURED);
|
DeltaLanderCrew (-1, LANDER_INJURED);
|
||||||
SleepThreadUntil (TimeIn + ONE_SECOND / 20);
|
SleepThreadUntil (TimeIn + ONE_SECOND / 20);
|
||||||
TimeIn = GetTimeCounter();
|
TimeIn = GetTimeCounter();
|
||||||
} while (HIBYTE (pMenuState->delta_item) && --which_node);
|
} while (HIBYTE (pLanderInputState->delta_item) &&
|
||||||
|
--which_node);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HIBYTE (pMenuState->delta_item)
|
if (HIBYTE (pLanderInputState->delta_item)
|
||||||
&& pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
&& pSolarSysState->SysInfo.PlanetInfo.DiscoveryString
|
||||||
&& CurStarDescPtr->Index != ANDROSYNTH_DEFINED)
|
&& CurStarDescPtr->Index != ANDROSYNTH_DEFINED)
|
||||||
{
|
{
|
||||||
@@ -682,8 +716,9 @@ CheckObjectCollision (COUNT index)
|
|||||||
danger_vals[dangerLevel])
|
danger_vals[dangerLevel])
|
||||||
{
|
{
|
||||||
PlaySound (SetAbsSoundIndex (
|
PlaySound (SetAbsSoundIndex (
|
||||||
LanderSounds, BIOLOGICAL_DISASTER
|
LanderSounds, BIOLOGICAL_DISASTER),
|
||||||
), NotPositional (), NULL, GAME_SOUND_PRIORITY);
|
NotPositional (), NULL,
|
||||||
|
GAME_SOUND_PRIORITY);
|
||||||
DeltaLanderCrew (-1, BIOLOGICAL_DISASTER);
|
DeltaLanderCrew (-1, BIOLOGICAL_DISASTER);
|
||||||
}
|
}
|
||||||
UnlockElement (hElement);
|
UnlockElement (hElement);
|
||||||
@@ -738,8 +773,7 @@ CheckObjectCollision (COUNT index)
|
|||||||
DeltaVelocityComponents (
|
DeltaVelocityComponents (
|
||||||
&ElementPtr->velocity,
|
&ElementPtr->velocity,
|
||||||
COSINE (angle, WORLD_TO_VELOCITY (1)),
|
COSINE (angle, WORLD_TO_VELOCITY (1)),
|
||||||
SINE (angle, WORLD_TO_VELOCITY (1))
|
SINE (angle, WORLD_TO_VELOCITY (1)));
|
||||||
);
|
|
||||||
ElementPtr->thrust_wait = 0;
|
ElementPtr->thrust_wait = 0;
|
||||||
ElementPtr->mass_points |= CREATURE_AWARE;
|
ElementPtr->mass_points |= CREATURE_AWARE;
|
||||||
}
|
}
|
||||||
@@ -914,11 +948,10 @@ lightning_process (ELEMENT *ElementPtr)
|
|||||||
if (ElementPtr->mass_points == LIGHTNING_DISASTER)
|
if (ElementPtr->mass_points == LIGHTNING_DISASTER)
|
||||||
{
|
{
|
||||||
/* This one always strikes the lander and can hurt */
|
/* This one always strikes the lander and can hurt */
|
||||||
if (HIBYTE (pMenuState->delta_item)
|
PLANETSIDE_DESC *pPSD = pLanderInputState->planetSideDesc;
|
||||||
|
if (HIBYTE (pLanderInputState->delta_item)
|
||||||
&& (BYTE)TFB_Random () < (256 / 10)
|
&& (BYTE)TFB_Random () < (256 / 10)
|
||||||
&& !(
|
&& !pPSD->InTransit)
|
||||||
(PLANETSIDE_DESC*)pMenuState->ModuleFrame
|
|
||||||
)->InTransit)
|
|
||||||
lander_flags |= KILL_CREW;
|
lander_flags |= KILL_CREW;
|
||||||
|
|
||||||
ElementPtr->next.location =
|
ElementPtr->next.location =
|
||||||
@@ -1058,7 +1091,7 @@ BuildObjectList (void)
|
|||||||
|
|
||||||
lander_flags &= ~KILL_CREW;
|
lander_flags &= ~KILL_CREW;
|
||||||
|
|
||||||
pPSD = (PLANETSIDE_DESC*)pMenuState->ModuleFrame;
|
pPSD = pLanderInputState->planetSideDesc;
|
||||||
rand_val = TFB_Random ();
|
rand_val = TFB_Random ();
|
||||||
if (LOBYTE (HIWORD (rand_val)) < pPSD->FireChance)
|
if (LOBYTE (HIWORD (rand_val)) < pPSD->FireChance)
|
||||||
{
|
{
|
||||||
@@ -1206,7 +1239,7 @@ RepairScan (void)
|
|||||||
DrawPlanet (0, 0, 0, 0);
|
DrawPlanet (0, 0, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
DrawScannedObjects (TRUE);
|
DrawScannedObjects (TRUE);
|
||||||
drawPlanetCursor (pMenuState, FALSE);
|
drawPlanetCursor (pLanderInputState->scanInputState, FALSE);
|
||||||
UnbatchGraphics ();
|
UnbatchGraphics ();
|
||||||
|
|
||||||
SetContext (OldContext);
|
SetContext (OldContext);
|
||||||
@@ -1219,9 +1252,12 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
STAMP lander_s, shadow_s, shield_s;
|
STAMP lander_s, shadow_s, shield_s;
|
||||||
CONTEXT OldContext;
|
CONTEXT OldContext;
|
||||||
signed char lander_pos[] = { -10, 1, 12, 22, 31, 39, 45, 50, 54, 57, 59 };
|
signed char lander_pos[] = { -10, 1, 12, 22, 31, 39, 45, 50, 54, 57, 59 };
|
||||||
|
MENU_STATE *scanInputState = &pSolarSysState->MenuState;
|
||||||
|
// TODO: Make a new structure ScanInputState, like
|
||||||
|
// LanderInputState, instead of using MENU_STATE.
|
||||||
|
|
||||||
old_pt.x = pSolarSysState->MenuState.first_item.x - (SURFACE_WIDTH >> 1);
|
old_pt.x = scanInputState->first_item.x - (SURFACE_WIDTH >> 1);
|
||||||
old_pt.y = pSolarSysState->MenuState.first_item.y - (SURFACE_HEIGHT >> 1);
|
old_pt.y = scanInputState->first_item.y - (SURFACE_HEIGHT >> 1);
|
||||||
|
|
||||||
new_pt.y = old_pt.y + dy;
|
new_pt.y = old_pt.y + dy;
|
||||||
if (new_pt.y < -(SURFACE_HEIGHT >> 1))
|
if (new_pt.y < -(SURFACE_HEIGHT >> 1))
|
||||||
@@ -1245,26 +1281,25 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
else if (new_pt.x >= MAP_WIDTH << MAG_SHIFT)
|
else if (new_pt.x >= MAP_WIDTH << MAG_SHIFT)
|
||||||
new_pt.x -= MAP_WIDTH << MAG_SHIFT;
|
new_pt.x -= MAP_WIDTH << MAG_SHIFT;
|
||||||
|
|
||||||
new_pt.x = pSolarSysState->MenuState.first_item.x + dx;
|
new_pt.x = scanInputState->first_item.x + dx;
|
||||||
if (new_pt.x < 0)
|
if (new_pt.x < 0)
|
||||||
new_pt.x += MAP_WIDTH << MAG_SHIFT;
|
new_pt.x += MAP_WIDTH << MAG_SHIFT;
|
||||||
else if (new_pt.x >= MAP_WIDTH << MAG_SHIFT)
|
else if (new_pt.x >= MAP_WIDTH << MAG_SHIFT)
|
||||||
new_pt.x -= MAP_WIDTH << MAG_SHIFT;
|
new_pt.x -= MAP_WIDTH << MAG_SHIFT;
|
||||||
new_pt.y = pSolarSysState->MenuState.first_item.y + dy;
|
new_pt.y = scanInputState->first_item.y + dy;
|
||||||
|
|
||||||
pSolarSysState->MenuState.first_item = new_pt;
|
scanInputState->first_item = new_pt;
|
||||||
|
|
||||||
{
|
{
|
||||||
DWORD TimeIn;
|
DWORD TimeIn;
|
||||||
|
|
||||||
SleepThreadUntil (MAKE_DWORD (
|
SleepThreadUntil (MAKE_DWORD (
|
||||||
pSolarSysState->MenuState.flash_rect1.corner.x,
|
scanInputState->flash_rect1.corner.x,
|
||||||
pSolarSysState->MenuState.flash_rect1.corner.y
|
scanInputState->flash_rect1.corner.y));
|
||||||
));
|
|
||||||
// planet-side rate is set here
|
// planet-side rate is set here
|
||||||
TimeIn = GetTimeCounter () + PLANET_SIDE_RATE;
|
TimeIn = GetTimeCounter () + PLANET_SIDE_RATE;
|
||||||
pSolarSysState->MenuState.flash_rect1.corner.x = LOWORD (TimeIn);
|
scanInputState->flash_rect1.corner.x = LOWORD (TimeIn);
|
||||||
pSolarSysState->MenuState.flash_rect1.corner.y = HIWORD (TimeIn);
|
scanInputState->flash_rect1.corner.y = HIWORD (TimeIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
@@ -1292,7 +1327,7 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
|
|
||||||
DrawBatch (DisplayArray, DisplayLinks, 0);
|
DrawBatch (DisplayArray, DisplayLinks, 0);
|
||||||
|
|
||||||
if (pMenuState->delta_item || pMenuState->CurState < 3)
|
if (pLanderInputState->delta_item || pLanderInputState->CurState < 3)
|
||||||
{
|
{
|
||||||
BYTE damage_index;
|
BYTE damage_index;
|
||||||
|
|
||||||
@@ -1312,11 +1347,12 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
DrawFilledStamp (&shadow_s);
|
DrawFilledStamp (&shadow_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((damage_index = LOBYTE (pMenuState->delta_item)) == 0)
|
damage_index = LOBYTE (pLanderInputState->delta_item);
|
||||||
|
if (damage_index == 0)
|
||||||
DrawStamp (&lander_s);
|
DrawStamp (&lander_s);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
--pMenuState->delta_item;
|
--pLanderInputState->delta_item;
|
||||||
if (!(damage_index & SHIELD_BIT))
|
if (!(damage_index & SHIELD_BIT))
|
||||||
{
|
{
|
||||||
SetContextForeGroundColor (DamageColorCycle (0, damage_index));
|
SetContextForeGroundColor (DamageColorCycle (0, damage_index));
|
||||||
@@ -1324,20 +1360,18 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((damage_index =
|
damage_index = (BYTE)((damage_index & ~SHIELD_BIT) - 1);
|
||||||
(BYTE)((damage_index & ~SHIELD_BIT) - 1)) == 0)
|
if (damage_index == 0)
|
||||||
pMenuState->delta_item &= ~SHIELD_BIT;
|
pLanderInputState->delta_item &= ~SHIELD_BIT;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
shield_s.origin = lander_s.origin;
|
shield_s.origin = lander_s.origin;
|
||||||
shield_s.frame = SetEquFrameIndex (
|
shield_s.frame = SetEquFrameIndex (
|
||||||
LanderFrame[4],
|
LanderFrame[4], lander_s.frame);
|
||||||
lander_s.frame
|
|
||||||
);
|
|
||||||
|
|
||||||
SetContextForeGroundColor (
|
SetContextForeGroundColor (BUILD_COLOR (
|
||||||
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F) | 0x8000, damage_index)
|
MAKE_RGB15 (0x1F, 0x1F, 0x1F) | 0x8000,
|
||||||
);
|
damage_index));
|
||||||
DrawFilledStamp (&shield_s);
|
DrawFilledStamp (&shield_s);
|
||||||
}
|
}
|
||||||
DrawStamp (&lander_s);
|
DrawStamp (&lander_s);
|
||||||
@@ -1346,14 +1380,14 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (CountDown < 0
|
if (CountDown < 0
|
||||||
&& HIBYTE (pMenuState->delta_item)
|
&& HIBYTE (pLanderInputState->delta_item)
|
||||||
&& GetPredLink (DisplayLinks) != END_OF_LIST)
|
&& GetPredLink (DisplayLinks) != END_OF_LIST)
|
||||||
CheckObjectCollision (END_OF_LIST);
|
CheckObjectCollision (END_OF_LIST);
|
||||||
|
|
||||||
{
|
{
|
||||||
PLANETSIDE_DESC *pPSD;
|
PLANETSIDE_DESC *pPSD;
|
||||||
|
|
||||||
pPSD = (PLANETSIDE_DESC*)pMenuState->ModuleFrame;
|
pPSD = pLanderInputState->planetSideDesc;
|
||||||
if (pPSD->NumFrames)
|
if (pPSD->NumFrames)
|
||||||
{
|
{
|
||||||
--pPSD->NumFrames;
|
--pPSD->NumFrames;
|
||||||
@@ -1362,16 +1396,20 @@ ScrollPlanetSide (SIZE dx, SIZE dy, SIZE CountDown)
|
|||||||
pPSD->MineralText[0].baseline.x -= dx;
|
pPSD->MineralText[0].baseline.x -= dx;
|
||||||
pPSD->MineralText[0].baseline.y -= dy;
|
pPSD->MineralText[0].baseline.y -= dy;
|
||||||
font_DrawText (&pPSD->MineralText[0]);
|
font_DrawText (&pPSD->MineralText[0]);
|
||||||
pPSD->MineralText[1].baseline.x = pPSD->MineralText[0].baseline.x;
|
pPSD->MineralText[1].baseline.x =
|
||||||
pPSD->MineralText[1].baseline.y = pPSD->MineralText[0].baseline.y + 7;
|
pPSD->MineralText[0].baseline.x;
|
||||||
|
pPSD->MineralText[1].baseline.y =
|
||||||
|
pPSD->MineralText[0].baseline.y + 7;
|
||||||
font_DrawText (&pPSD->MineralText[1]);
|
font_DrawText (&pPSD->MineralText[1]);
|
||||||
pPSD->MineralText[2].baseline.x = pPSD->MineralText[1].baseline.x;
|
pPSD->MineralText[2].baseline.x =
|
||||||
pPSD->MineralText[2].baseline.y = pPSD->MineralText[1].baseline.y + 7;
|
pPSD->MineralText[1].baseline.x;
|
||||||
|
pPSD->MineralText[2].baseline.y =
|
||||||
|
pPSD->MineralText[1].baseline.y + 7;
|
||||||
font_DrawText (&pPSD->MineralText[2]);
|
font_DrawText (&pPSD->MineralText[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setPlanetCursorLoc (pMenuState, new_pt);
|
setPlanetCursorLoc (pLanderInputState->scanInputState, new_pt);
|
||||||
RepairScan ();
|
RepairScan ();
|
||||||
|
|
||||||
if (lander_flags & KILL_CREW)
|
if (lander_flags & KILL_CREW)
|
||||||
@@ -1592,54 +1630,104 @@ InitPlanetSide (void)
|
|||||||
SET_GAME_STATE (PLANETARY_LANDING, 1);
|
SET_GAME_STATE (PLANETARY_LANDING, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
LanderFire (LanderInputState *inputState, SIZE index) {
|
||||||
|
#define SHUTTLE_FIRE_WAIT 15
|
||||||
|
HELEMENT hWeaponElement;
|
||||||
|
SIZE wdx, wdy;
|
||||||
|
ELEMENT *WeaponElementPtr;
|
||||||
|
|
||||||
|
hWeaponElement = AllocElement ();
|
||||||
|
if (hWeaponElement == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LockElement (hWeaponElement, &WeaponElementPtr);
|
||||||
|
|
||||||
|
WeaponElementPtr->playerNr = PS_HUMAN_PLAYER;
|
||||||
|
WeaponElementPtr->mass_points = 1;
|
||||||
|
WeaponElementPtr->life_span = 12;
|
||||||
|
WeaponElementPtr->state_flags = FINITE_LIFE;
|
||||||
|
WeaponElementPtr->next.location =
|
||||||
|
pSolarSysState->MenuState.first_item;
|
||||||
|
WeaponElementPtr->current.location.x =
|
||||||
|
WeaponElementPtr->next.location.x >> MAG_SHIFT;
|
||||||
|
WeaponElementPtr->current.location.y =
|
||||||
|
WeaponElementPtr->next.location.y >> MAG_SHIFT;
|
||||||
|
|
||||||
|
SetPrimType (&DisplayArray[WeaponElementPtr->PrimIndex], STAMP_PRIM);
|
||||||
|
DisplayArray[WeaponElementPtr->PrimIndex].Object.Stamp.frame =
|
||||||
|
SetAbsFrameIndex (
|
||||||
|
LanderFrame[0],
|
||||||
|
index + ANGLE_TO_FACING (FULL_CIRCLE));
|
||||||
|
|
||||||
|
if (!CurrentInputState.key[PlayerControls[0]][KEY_UP])
|
||||||
|
{
|
||||||
|
wdx = 0;
|
||||||
|
wdy = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetCurrentVelocityComponents (&GLOBAL (velocity), &wdx, &wdy);
|
||||||
|
}
|
||||||
|
|
||||||
|
index = FACING_TO_ANGLE (index);
|
||||||
|
SetVelocityComponents (
|
||||||
|
&WeaponElementPtr->velocity,
|
||||||
|
COSINE (index, WORLD_TO_VELOCITY (2 * 3)) + wdx,
|
||||||
|
SINE (index, WORLD_TO_VELOCITY (2 * 3)) + wdy);
|
||||||
|
|
||||||
|
UnlockElement (hWeaponElement);
|
||||||
|
|
||||||
|
InsertElement (hWeaponElement, GetHeadElement ());
|
||||||
|
|
||||||
|
PlaySound (SetAbsSoundIndex (LanderSounds, LANDER_SHOOTS),
|
||||||
|
NotPositional (), NULL, GAME_SOUND_PRIORITY);
|
||||||
|
|
||||||
|
wdx = SHUTTLE_FIRE_WAIT;
|
||||||
|
if (GET_GAME_STATE (IMPROVED_LANDER_SHOT))
|
||||||
|
wdx >>= 1;
|
||||||
|
inputState->CurState = MAKE_BYTE (LONIBBLE (inputState->CurState), wdx);
|
||||||
|
}
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
DoPlanetSide (MENU_STATE *pMS)
|
DoPlanetSide (LanderInputState *pMS)
|
||||||
{
|
{
|
||||||
#define NUM_LANDING_DELTAS 10
|
#define NUM_LANDING_DELTAS 10
|
||||||
#define SHUTTLE_TURN_WAIT 2
|
#define SHUTTLE_TURN_WAIT 2
|
||||||
#define SHUTTLE_FIRE_WAIT 15
|
|
||||||
SIZE index;
|
|
||||||
|
|
||||||
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
|
|
||||||
pMS->MenuRepeatDelay = 0;
|
pMS->MenuRepeatDelay = 0;
|
||||||
if (!pMS->Initialized)
|
if (!pMS->Initialized)
|
||||||
{
|
{
|
||||||
|
COUNT landerSpeedNumer;
|
||||||
|
COUNT angle;
|
||||||
|
|
||||||
pMS->Initialized = TRUE;
|
pMS->Initialized = TRUE;
|
||||||
pMS->CurState = 0;
|
pMS->CurState = 0;
|
||||||
|
|
||||||
index = FACING_TO_ANGLE (GetFrameIndex (LanderFrame[0]));
|
angle = FACING_TO_ANGLE (GetFrameIndex (LanderFrame[0]));
|
||||||
if (!GET_GAME_STATE (IMPROVED_LANDER_SPEED))
|
landerSpeedNumer = GET_GAME_STATE (IMPROVED_LANDER_SPEED) ?
|
||||||
SetVelocityComponents (
|
WORLD_TO_VELOCITY (2 * 14) :
|
||||||
&GLOBAL (velocity),
|
WORLD_TO_VELOCITY (2 * 8);
|
||||||
COSINE (index, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (index, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
else
|
|
||||||
SetVelocityComponents (
|
|
||||||
&GLOBAL (velocity),
|
|
||||||
COSINE (index, WORLD_TO_VELOCITY (2 * 14)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (index, WORLD_TO_VELOCITY (2 * 14)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
#ifdef FAST_FAST
|
#ifdef FAST_FAST
|
||||||
SetVelocityComponents (
|
landerSpeedNumer = WORLD_TO_VELOCITY (48);
|
||||||
&GLOBAL (velocity),
|
|
||||||
COSINE (index, WORLD_TO_VELOCITY (48)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (index, WORLD_TO_VELOCITY (48)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SetVelocityComponents (&GLOBAL (velocity),
|
||||||
|
COSINE (angle, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM,
|
||||||
|
SINE (angle, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM);
|
||||||
}
|
}
|
||||||
else if (pMS->delta_item == 0
|
else if (pMS->delta_item == 0
|
||||||
|| (HIBYTE (pMS->delta_item)
|
|| (HIBYTE (pMS->delta_item)
|
||||||
&& ((CurrentInputState.key[PlayerControls[0]][KEY_ESCAPE] ||
|
&& ((CurrentInputState.key[PlayerControls[0]][KEY_ESCAPE] ||
|
||||||
CurrentInputState.key[PlayerControls[0]][KEY_SPECIAL])
|
CurrentInputState.key[PlayerControls[0]][KEY_SPECIAL])
|
||||||
|| ((PLANETSIDE_DESC*)pMenuState->ModuleFrame)->InTransit)))
|
|| pLanderInputState->planetSideDesc->InTransit)))
|
||||||
{
|
{
|
||||||
if (pMS->delta_item || pMS->CurState > EXPLOSION_LIFE + 60)
|
if (pMS->delta_item || pMS->CurState > EXPLOSION_LIFE + 60)
|
||||||
return (FALSE);
|
return FALSE;
|
||||||
else
|
|
||||||
{
|
|
||||||
if (pMS->CurState > EXPLOSION_LIFE)
|
if (pMS->CurState > EXPLOSION_LIFE)
|
||||||
++pMS->CurState;
|
++pMS->CurState;
|
||||||
else if (pMS->CurState == 0)
|
else if (pMS->CurState == 0)
|
||||||
@@ -1667,7 +1755,8 @@ SetVelocityComponents (
|
|||||||
EXPLOSION_LIFE
|
EXPLOSION_LIFE
|
||||||
* (LONIBBLE (ExplosionElementPtr->turn_wait) + 1);
|
* (LONIBBLE (ExplosionElementPtr->turn_wait) + 1);
|
||||||
|
|
||||||
SetPrimType (&DisplayArray[ExplosionElementPtr->PrimIndex], STAMP_PRIM);
|
SetPrimType (&DisplayArray[ExplosionElementPtr->PrimIndex],
|
||||||
|
STAMP_PRIM);
|
||||||
DisplayArray[ExplosionElementPtr->PrimIndex].Object.Stamp.frame =
|
DisplayArray[ExplosionElementPtr->PrimIndex].Object.Stamp.frame =
|
||||||
SetAbsFrameIndex (LanderFrame[0], 46);
|
SetAbsFrameIndex (LanderFrame[0], 46);
|
||||||
|
|
||||||
@@ -1689,164 +1778,105 @@ SetVelocityComponents (
|
|||||||
|
|
||||||
ScrollPlanetSide (0, 0, -1);
|
ScrollPlanetSide (0, 0, -1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SIZE dx, dy;
|
SIZE dx, dy;
|
||||||
|
|
||||||
if (HIBYTE (pMS->delta_item) == 0)
|
if (HIBYTE (pMS->delta_item) == 0)
|
||||||
dx = dy = 0;
|
{
|
||||||
|
dx = 0;
|
||||||
|
dy = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
index = GetFrameIndex (LanderFrame[0]);
|
SIZE index = GetFrameIndex (LanderFrame[0]);
|
||||||
if (LONIBBLE (pMS->CurState))
|
if (LONIBBLE (pMS->CurState))
|
||||||
pMS->CurState -= MAKE_BYTE (1, 0);
|
pMS->CurState -= MAKE_BYTE (1, 0);
|
||||||
else if (CurrentInputState.key[PlayerControls[0]][KEY_LEFT] ||
|
else if (CurrentInputState.key[PlayerControls[0]][KEY_LEFT] ||
|
||||||
CurrentInputState.key[PlayerControls[0]][KEY_RIGHT])
|
CurrentInputState.key[PlayerControls[0]][KEY_RIGHT])
|
||||||
{
|
{
|
||||||
|
COUNT landerSpeedNumer;
|
||||||
|
COUNT angle;
|
||||||
|
|
||||||
if (CurrentInputState.key[PlayerControls[0]][KEY_LEFT])
|
if (CurrentInputState.key[PlayerControls[0]][KEY_LEFT])
|
||||||
{
|
|
||||||
dx = -1;
|
|
||||||
--index;
|
--index;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
dx = +1;
|
|
||||||
++index;
|
++index;
|
||||||
}
|
|
||||||
|
|
||||||
index = NORMALIZE_FACING (index);
|
index = NORMALIZE_FACING (index);
|
||||||
LanderFrame[0] = SetAbsFrameIndex (LanderFrame[0], index);
|
LanderFrame[0] = SetAbsFrameIndex (LanderFrame[0], index);
|
||||||
|
|
||||||
dx = FACING_TO_ANGLE (index);
|
angle = FACING_TO_ANGLE (index);
|
||||||
if (!GET_GAME_STATE (IMPROVED_LANDER_SPEED))
|
landerSpeedNumer = GET_GAME_STATE (IMPROVED_LANDER_SPEED) ?
|
||||||
SetVelocityComponents (
|
WORLD_TO_VELOCITY (2 * 14) :
|
||||||
&GLOBAL (velocity),
|
WORLD_TO_VELOCITY (2 * 8);
|
||||||
COSINE (dx, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (dx, WORLD_TO_VELOCITY (2 * 8)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
else
|
|
||||||
SetVelocityComponents (
|
|
||||||
&GLOBAL (velocity),
|
|
||||||
COSINE (dx, WORLD_TO_VELOCITY (2 * 14)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (dx, WORLD_TO_VELOCITY (2 * 14)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
#ifdef FAST_FAST
|
#ifdef FAST_FAST
|
||||||
SetVelocityComponents (
|
landerSpeedNumer = WORLD_TO_VELOCITY (48);
|
||||||
&GLOBAL (velocity),
|
|
||||||
COSINE (dx, WORLD_TO_VELOCITY (48)) / LANDER_SPEED_DENOM,
|
|
||||||
SINE (dx, WORLD_TO_VELOCITY (48)) / LANDER_SPEED_DENOM
|
|
||||||
);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SetVelocityComponents (&GLOBAL (velocity),
|
||||||
|
COSINE (angle, landerSpeedNumer) / LANDER_SPEED_DENOM,
|
||||||
|
SINE (angle, landerSpeedNumer) / LANDER_SPEED_DENOM);
|
||||||
|
|
||||||
pMS->CurState = MAKE_BYTE (
|
pMS->CurState = MAKE_BYTE (
|
||||||
SHUTTLE_TURN_WAIT, HINIBBLE (pMS->CurState)
|
SHUTTLE_TURN_WAIT, HINIBBLE (pMS->CurState));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CurrentInputState.key[PlayerControls[0]][KEY_UP])
|
if (!CurrentInputState.key[PlayerControls[0]][KEY_UP])
|
||||||
dx = dy = 0;
|
{
|
||||||
|
dx = 0;
|
||||||
|
dy = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
GetNextVelocityComponents (
|
GetNextVelocityComponents (&GLOBAL (velocity), &dx, &dy, 1);
|
||||||
&GLOBAL (velocity), &dx, &dy, 1
|
|
||||||
);
|
|
||||||
|
|
||||||
if (HINIBBLE (pMS->CurState))
|
if (HINIBBLE (pMS->CurState))
|
||||||
pMS->CurState -= MAKE_BYTE (0, 1);
|
pMS->CurState -= MAKE_BYTE (0, 1);
|
||||||
else if (CurrentInputState.key[PlayerControls[0]][KEY_WEAPON])
|
else if (CurrentInputState.key[PlayerControls[0]][KEY_WEAPON])
|
||||||
{
|
{
|
||||||
HELEMENT hWeaponElement;
|
LanderFire (pMS, index);
|
||||||
|
|
||||||
hWeaponElement = AllocElement ();
|
|
||||||
if (hWeaponElement)
|
|
||||||
{
|
|
||||||
SIZE wdx, wdy;
|
|
||||||
ELEMENT *WeaponElementPtr;
|
|
||||||
|
|
||||||
LockElement (hWeaponElement, &WeaponElementPtr);
|
|
||||||
|
|
||||||
WeaponElementPtr->playerNr = PS_HUMAN_PLAYER;
|
|
||||||
WeaponElementPtr->mass_points = 1;
|
|
||||||
WeaponElementPtr->life_span = 12;
|
|
||||||
WeaponElementPtr->state_flags = FINITE_LIFE;
|
|
||||||
WeaponElementPtr->next.location =
|
|
||||||
pSolarSysState->MenuState.first_item;
|
|
||||||
WeaponElementPtr->current.location.x =
|
|
||||||
WeaponElementPtr->next.location.x >> MAG_SHIFT;
|
|
||||||
WeaponElementPtr->current.location.y =
|
|
||||||
WeaponElementPtr->next.location.y >> MAG_SHIFT;
|
|
||||||
|
|
||||||
SetPrimType (&DisplayArray[WeaponElementPtr->PrimIndex], STAMP_PRIM);
|
|
||||||
DisplayArray[WeaponElementPtr->PrimIndex].Object.Stamp.frame =
|
|
||||||
SetAbsFrameIndex (
|
|
||||||
LanderFrame[0],
|
|
||||||
index + ANGLE_TO_FACING (FULL_CIRCLE)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!CurrentInputState.key[PlayerControls[0]][KEY_UP])
|
|
||||||
wdx = wdy = 0;
|
|
||||||
else
|
|
||||||
GetCurrentVelocityComponents (
|
|
||||||
&GLOBAL (velocity), &wdx, &wdy
|
|
||||||
);
|
|
||||||
index = FACING_TO_ANGLE (index);
|
|
||||||
SetVelocityComponents (
|
|
||||||
&WeaponElementPtr->velocity,
|
|
||||||
COSINE (index, WORLD_TO_VELOCITY (2 * 3)) + wdx,
|
|
||||||
SINE (index, WORLD_TO_VELOCITY (2 * 3)) + wdy
|
|
||||||
);
|
|
||||||
|
|
||||||
UnlockElement (hWeaponElement);
|
|
||||||
|
|
||||||
InsertElement (hWeaponElement, GetHeadElement ());
|
|
||||||
|
|
||||||
PlaySound (SetAbsSoundIndex (
|
|
||||||
LanderSounds, LANDER_SHOOTS
|
|
||||||
), NotPositional (), NULL, GAME_SOUND_PRIORITY);
|
|
||||||
|
|
||||||
wdx = SHUTTLE_FIRE_WAIT;
|
|
||||||
if (GET_GAME_STATE (IMPROVED_LANDER_SHOT))
|
|
||||||
wdx >>= 1;
|
|
||||||
pMS->CurState = MAKE_BYTE (LONIBBLE (pMS->CurState), wdx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollPlanetSide (dx, dy, -1);
|
ScrollPlanetSide (dx, dy, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FreeLanderData (void)
|
FreeLanderData (void)
|
||||||
{
|
|
||||||
if (LanderFrame[0])
|
|
||||||
{
|
{
|
||||||
COUNT i;
|
COUNT i;
|
||||||
|
COUNT landerFrameCount;
|
||||||
|
|
||||||
|
if (LanderFrame[0] == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = 0; i < NUM_ORBIT_THEMES; ++i)
|
for (i = 0; i < NUM_ORBIT_THEMES; ++i)
|
||||||
{
|
{
|
||||||
DestroyMusic (OrbitMusic[i]);
|
DestroyMusic (OrbitMusic[i]);
|
||||||
OrbitMusic[i] = 0;
|
OrbitMusic[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DestroySound (ReleaseSound (LanderSounds));
|
DestroySound (ReleaseSound (LanderSounds));
|
||||||
LanderSounds = 0;
|
LanderSounds = 0;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (LanderFrame)
|
landerFrameCount = sizeof (LanderFrame) / sizeof (LanderFrame[0]);
|
||||||
/ sizeof (LanderFrame[0]); ++i)
|
for (i = 0; i < landerFrameCount; ++i)
|
||||||
{
|
{
|
||||||
DestroyDrawable (ReleaseDrawable (LanderFrame[i]));
|
DestroyDrawable (ReleaseDrawable (LanderFrame[i]));
|
||||||
LanderFrame[i] = 0;
|
LanderFrame[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
LoadLanderData (void)
|
LoadLanderData (void)
|
||||||
{
|
{
|
||||||
if (LanderFrame[0] == 0)
|
if (LanderFrame[0] != 0)
|
||||||
{
|
return;
|
||||||
|
|
||||||
LanderFrame[0] =
|
LanderFrame[0] =
|
||||||
CaptureDrawable (LoadGraphic (LANDER_MASK_PMAP_ANIM));
|
CaptureDrawable (LoadGraphic (LANDER_MASK_PMAP_ANIM));
|
||||||
LanderFrame[1] =
|
LanderFrame[1] =
|
||||||
@@ -1855,16 +1885,17 @@ LoadLanderData (void)
|
|||||||
CaptureDrawable (LoadGraphic (LIGHTNING_MASK_ANIM));
|
CaptureDrawable (LoadGraphic (LIGHTNING_MASK_ANIM));
|
||||||
LanderFrame[3] =
|
LanderFrame[3] =
|
||||||
CaptureDrawable (LoadGraphic (LAVA_MASK_PMAP_ANIM));
|
CaptureDrawable (LoadGraphic (LAVA_MASK_PMAP_ANIM));
|
||||||
LanderFrame[4] = CaptureDrawable (LoadGraphic (LANDER_SHIELD_MASK_ANIM));
|
LanderFrame[4] =
|
||||||
|
CaptureDrawable (LoadGraphic (LANDER_SHIELD_MASK_ANIM));
|
||||||
LanderFrame[5] =
|
LanderFrame[5] =
|
||||||
CaptureDrawable (LoadGraphic (LANDER_LAUNCH_MASK_PMAP_ANIM));
|
CaptureDrawable (LoadGraphic (LANDER_LAUNCH_MASK_PMAP_ANIM));
|
||||||
LanderFrame[6] =
|
LanderFrame[6] =
|
||||||
CaptureDrawable (LoadGraphic (LANDER_RETURN_MASK_PMAP_ANIM));
|
CaptureDrawable (LoadGraphic (LANDER_RETURN_MASK_PMAP_ANIM));
|
||||||
LanderSounds = CaptureSound (LoadSound (LANDER_SOUNDS));
|
|
||||||
|
|
||||||
LanderFrame[7] =
|
LanderFrame[7] =
|
||||||
CaptureDrawable (LoadGraphic (ORBIT_VIEW_ANIM));
|
CaptureDrawable (LoadGraphic (ORBIT_VIEW_ANIM));
|
||||||
|
|
||||||
|
LanderSounds = CaptureSound (LoadSound (LANDER_SOUNDS));
|
||||||
|
|
||||||
{
|
{
|
||||||
COUNT i;
|
COUNT i;
|
||||||
|
|
||||||
@@ -1872,7 +1903,6 @@ LoadLanderData (void)
|
|||||||
OrbitMusic[i] = load_orbit_theme (i);
|
OrbitMusic[i] = load_orbit_theme (i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SetPlanetMusic (BYTE planet_type)
|
SetPlanetMusic (BYTE planet_type)
|
||||||
@@ -1910,6 +1940,7 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
{
|
{
|
||||||
SIZE index;
|
SIZE index;
|
||||||
DWORD TimeIn;
|
DWORD TimeIn;
|
||||||
|
LanderInputState landerInputState;
|
||||||
PLANETSIDE_DESC PSD;
|
PLANETSIDE_DESC PSD;
|
||||||
BYTE TectonicsChanceTab[] = {0*3, 0*3, 1*3, 2*3, 4*3, 8*3, 16*3, 32*3};
|
BYTE TectonicsChanceTab[] = {0*3, 0*3, 1*3, 2*3, 4*3, 8*3, 16*3, 32*3};
|
||||||
BYTE WeatherChanceTab[] = {0*3, 0*3, 1*3, 2*3, 3*3, 6*3, 12*3, 24*3};
|
BYTE WeatherChanceTab[] = {0*3, 0*3, 1*3, 2*3, 3*3, 6*3, 12*3, 24*3};
|
||||||
@@ -1959,7 +1990,10 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
PSD.ColorCycle[2] = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x11, 0x00), 0x7B);
|
PSD.ColorCycle[2] = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x11, 0x00), 0x7B);
|
||||||
PSD.ColorCycle[3] = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x71);
|
PSD.ColorCycle[3] = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x71);
|
||||||
for (index = 4; index < (NUM_TEXT_FRAMES >> 1) - 4; ++index)
|
for (index = 4; index < (NUM_TEXT_FRAMES >> 1) - 4; ++index)
|
||||||
PSD.ColorCycle[index] = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F);
|
{
|
||||||
|
PSD.ColorCycle[index] =
|
||||||
|
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F);
|
||||||
|
}
|
||||||
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 4] =
|
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 4] =
|
||||||
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x71);
|
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x71);
|
||||||
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 3] =
|
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 3] =
|
||||||
@@ -1968,13 +2002,15 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x0A, 0x00), 0x7D);
|
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x0A, 0x00), 0x7D);
|
||||||
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 1] =
|
PSD.ColorCycle[(NUM_TEXT_FRAMES >> 1) - 1] =
|
||||||
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x03, 0x00), 0x7F);
|
BUILD_COLOR (MAKE_RGB15 (0x1F, 0x03, 0x00), 0x7F);
|
||||||
pMS->ModuleFrame = (FRAME)&PSD;
|
landerInputState.planetSideDesc = &PSD;
|
||||||
|
|
||||||
|
// ScrollPlanetSide depends on this. Not just DoPlanetSide().
|
||||||
|
pLanderInputState = &landerInputState;
|
||||||
|
landerInputState.scanInputState = pMS;
|
||||||
|
|
||||||
index = NORMALIZE_FACING ((COUNT)TFB_Random ());
|
index = NORMALIZE_FACING ((COUNT)TFB_Random ());
|
||||||
LanderFrame[0] = SetAbsFrameIndex (
|
LanderFrame[0] = SetAbsFrameIndex (LanderFrame[0], index);
|
||||||
LanderFrame[0], index
|
landerInputState.delta_item = 0;
|
||||||
);
|
|
||||||
pMS->delta_item = 0;
|
|
||||||
pSolarSysState->MenuState.Initialized += 4;
|
pSolarSysState->MenuState.Initialized += 4;
|
||||||
|
|
||||||
InitPlanetSide ();
|
InitPlanetSide ();
|
||||||
@@ -2000,10 +2036,10 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
pSolarSysState->MenuState.flash_rect1.corner.x = LOWORD (TimeIn);
|
pSolarSysState->MenuState.flash_rect1.corner.x = LOWORD (TimeIn);
|
||||||
pSolarSysState->MenuState.flash_rect1.corner.y = HIWORD (TimeIn);
|
pSolarSysState->MenuState.flash_rect1.corner.y = HIWORD (TimeIn);
|
||||||
|
|
||||||
pMS->Initialized = FALSE;
|
landerInputState.Initialized = FALSE;
|
||||||
pMS->InputFunc = DoPlanetSide;
|
landerInputState.InputFunc = DoPlanetSide;
|
||||||
SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE);
|
SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE);
|
||||||
DoInput (pMS, FALSE);
|
DoInput (&landerInputState, FALSE);
|
||||||
|
|
||||||
if (!(GLOBAL (CurrentActivity) & CHECK_ABORT))
|
if (!(GLOBAL (CurrentActivity) & CHECK_ABORT))
|
||||||
{
|
{
|
||||||
@@ -2011,7 +2047,7 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
RECT r;
|
RECT r;
|
||||||
//CONTEXT OldContext;
|
//CONTEXT OldContext;
|
||||||
|
|
||||||
crew_left = HIBYTE (pMS->delta_item);
|
crew_left = HIBYTE (landerInputState.delta_item);
|
||||||
|
|
||||||
r.corner.x = SIS_ORG_X;
|
r.corner.x = SIS_ORG_X;
|
||||||
r.corner.y = SIS_ORG_Y;
|
r.corner.y = SIS_ORG_Y;
|
||||||
@@ -2083,7 +2119,7 @@ PlanetSide (MENU_STATE *pMS)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pMS->ModuleFrame = 0;
|
landerInputState.planetSideDesc = NULL;
|
||||||
|
|
||||||
{
|
{
|
||||||
HELEMENT hElement, hNextElement;
|
HELEMENT hElement, hNextElement;
|
||||||
|
|||||||
@@ -37,8 +37,9 @@ typedef struct
|
|||||||
|
|
||||||
SOUND OldMenuSounds;
|
SOUND OldMenuSounds;
|
||||||
|
|
||||||
COUNT ElementLevel, MaxElementLevel,
|
COUNT ElementLevel;
|
||||||
BiologicalLevel;
|
COUNT MaxElementLevel;
|
||||||
|
COUNT BiologicalLevel;
|
||||||
COUNT ElementAmounts[NUM_ELEMENT_CATEGORIES];
|
COUNT ElementAmounts[NUM_ELEMENT_CATEGORIES];
|
||||||
|
|
||||||
COUNT NumFrames;
|
COUNT NumFrames;
|
||||||
@@ -47,7 +48,9 @@ typedef struct
|
|||||||
|
|
||||||
COLOR ColorCycle[NUM_TEXT_FRAMES >> 1];
|
COLOR ColorCycle[NUM_TEXT_FRAMES >> 1];
|
||||||
|
|
||||||
BYTE TectonicsChance, WeatherChance, FireChance;
|
BYTE TectonicsChance;
|
||||||
|
BYTE WeatherChance;
|
||||||
|
BYTE FireChance;
|
||||||
} PLANETSIDE_DESC;
|
} PLANETSIDE_DESC;
|
||||||
|
|
||||||
extern CONTEXT ScanContext;
|
extern CONTEXT ScanContext;
|
||||||
|
|||||||
@@ -670,8 +670,7 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
COUNT fuel_required;
|
COUNT fuel_required;
|
||||||
|
|
||||||
fuel_required = (COUNT)(
|
fuel_required = (COUNT)(
|
||||||
pSolarSysState->SysInfo.PlanetInfo.SurfaceGravity << 1
|
pSolarSysState->SysInfo.PlanetInfo.SurfaceGravity << 1);
|
||||||
);
|
|
||||||
if (fuel_required > 3 * FUEL_TANK_SCALE)
|
if (fuel_required > 3 * FUEL_TANK_SCALE)
|
||||||
fuel_required = 3 * FUEL_TANK_SCALE;
|
fuel_required = 3 * FUEL_TANK_SCALE;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user