mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-22 22:45:39 +00:00
Lots of stuff
This commit is contained in:
640
GpApp/Modes.cpp
Normal file
640
GpApp/Modes.cpp
Normal file
@@ -0,0 +1,640 @@
|
||||
|
||||
//============================================================================
|
||||
//----------------------------------------------------------------------------
|
||||
// Modes.c
|
||||
//----------------------------------------------------------------------------
|
||||
//============================================================================
|
||||
|
||||
|
||||
#include "Externs.h"
|
||||
#include "RectUtils.h"
|
||||
|
||||
|
||||
short saidFollow;
|
||||
|
||||
extern Rect gliderSrc[];
|
||||
extern Rect transRect;
|
||||
extern short fadeInSequence[], linkedToWhat;
|
||||
extern short rightClip, leftClip, transRoom;
|
||||
extern Boolean hasMirror, shadowVisible, firstPlayer, twoPlayerGame;
|
||||
extern Boolean onePlayerLeft, playerDead;
|
||||
|
||||
//============================================================== Functions
|
||||
//-------------------------------------------------------------- StartGliderFadingIn
|
||||
|
||||
void StartGliderFadingIn (gliderPtr thisGlider)
|
||||
{
|
||||
if (foilTotal <= 0)
|
||||
showFoil = false;
|
||||
|
||||
thisGlider->mode = kGliderFadingIn;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->dontDraw = false;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
thisGlider->mask =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderTransportingIn
|
||||
|
||||
void StartGliderTransportingIn (gliderPtr thisGlider)
|
||||
{
|
||||
if (foilTotal <= 0)
|
||||
showFoil = false;
|
||||
|
||||
thisGlider->mode = kGliderTransportingIn;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->dontDraw = false;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
thisGlider->mask =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderFadingOut
|
||||
|
||||
void StartGliderFadingOut (gliderPtr thisGlider)
|
||||
{
|
||||
Rect tempBounds;
|
||||
|
||||
if (thisGlider->mode == kGliderFadingOut)
|
||||
return;
|
||||
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
if (RectTall(&thisGlider->dest) > kGliderHigh)
|
||||
{
|
||||
tempBounds = thisGlider->dest;
|
||||
QOffsetRect(&tempBounds, playOriginH, playOriginV);
|
||||
AddRectToWorkRects(&tempBounds);
|
||||
if (hasMirror)
|
||||
{
|
||||
tempBounds = thisGlider->dest;
|
||||
QOffsetRect(&tempBounds, playOriginH - 20, playOriginV - 16);
|
||||
AddRectToWorkRects(&tempBounds);
|
||||
}
|
||||
thisGlider->dest.right = thisGlider->dest.left + kGliderWide;
|
||||
thisGlider->dest.top = thisGlider->dest.bottom - kGliderHigh;
|
||||
}
|
||||
thisGlider->mode = kGliderFadingOut;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = kLastFadeSequence - 1;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
thisGlider->mask =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderGoingUpStairs
|
||||
|
||||
void StartGliderGoingUpStairs (gliderPtr thisGlider)
|
||||
{
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
if (thisGlider->mode == kGliderBurning)
|
||||
thisGlider->frame = kWasBurning;
|
||||
else
|
||||
thisGlider->frame = 0;
|
||||
|
||||
thisGlider->mode = kGliderGoingUp;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderGoingDownStairs
|
||||
|
||||
void StartGliderGoingDownStairs (gliderPtr thisGlider)
|
||||
{
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
if (thisGlider->mode == kGliderBurning)
|
||||
thisGlider->frame = kWasBurning;
|
||||
else
|
||||
thisGlider->frame = 0;
|
||||
|
||||
thisGlider->mode = kGliderGoingDown;
|
||||
rightClip = GetUpStairsRightEdge();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderMailingIn
|
||||
|
||||
void StartGliderMailingIn (gliderPtr thisGlider, Rect *bounds, hotPtr who)
|
||||
{
|
||||
short topSought, whoLinked;
|
||||
Byte objLinked;
|
||||
char wasState;
|
||||
|
||||
PlayPrioritySound(kTransOutSound, kTransOutPriority);
|
||||
|
||||
whoLinked = who->who;
|
||||
transRoom = masterObjects[whoLinked].roomLink;
|
||||
objLinked = masterObjects[whoLinked].objectLink;
|
||||
linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked);
|
||||
|
||||
wasState = HGetState((Handle)thisHouse);
|
||||
HLock((Handle)thisHouse);
|
||||
GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect);
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->clip = *bounds;
|
||||
topSought = bounds->bottom - RectTall(&thisGlider->dest);
|
||||
thisGlider->clip.top = topSought;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderMailingOut
|
||||
|
||||
void StartGliderMailingOut (gliderPtr thisGlider)
|
||||
{
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
if (linkedToWhat == kLinkedToLeftMailbox)
|
||||
{
|
||||
thisGlider->facing = kFaceLeft;
|
||||
thisGlider->mode = kGliderMailOutLeft;
|
||||
thisGlider->src = gliderSrc[2];
|
||||
thisGlider->mask = gliderSrc[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->facing = kFaceRight;
|
||||
thisGlider->mode = kGliderMailOutRight;
|
||||
thisGlider->src = gliderSrc[0];
|
||||
thisGlider->mask = gliderSrc[0];
|
||||
}
|
||||
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->tipped = false;
|
||||
thisGlider->dontDraw = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderDuctingDown
|
||||
|
||||
void StartGliderDuctingDown (gliderPtr thisGlider, Rect *bounds, hotPtr who)
|
||||
{
|
||||
short leftSought, whoLinked;
|
||||
Byte objLinked;
|
||||
char wasState;
|
||||
|
||||
PlayPrioritySound(kTransOutSound, kTransOutPriority);
|
||||
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
whoLinked = who->who;
|
||||
transRoom = masterObjects[whoLinked].roomLink;
|
||||
objLinked = masterObjects[whoLinked].objectLink;
|
||||
linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked);
|
||||
|
||||
wasState = HGetState((Handle)thisHouse);
|
||||
HLock((Handle)thisHouse);
|
||||
GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect);
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->clip = *bounds;
|
||||
leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2);
|
||||
thisGlider->clip.left = leftSought;
|
||||
|
||||
thisGlider->mode = kGliderDuctingDown;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderDuctingUp
|
||||
|
||||
void StartGliderDuctingUp (gliderPtr thisGlider, Rect *bounds, hotPtr who)
|
||||
{
|
||||
short leftSought, whoLinked;
|
||||
Byte objLinked;
|
||||
char wasState;
|
||||
|
||||
PlayPrioritySound(kTransOutSound, kTransOutPriority);
|
||||
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
whoLinked = who->who;
|
||||
transRoom = masterObjects[whoLinked].roomLink;
|
||||
objLinked = masterObjects[whoLinked].objectLink;
|
||||
linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked);
|
||||
|
||||
wasState = HGetState((Handle)thisHouse);
|
||||
HLock((Handle)thisHouse);
|
||||
GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect);
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->clip = *bounds;
|
||||
leftSought = bounds->left + ((RectWide(bounds) - kGliderWide) / 2);
|
||||
thisGlider->clip.left = leftSought;
|
||||
|
||||
thisGlider->mode = kGliderDuctingUp;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderDuctingIn
|
||||
|
||||
void StartGliderDuctingIn (gliderPtr thisGlider)
|
||||
{
|
||||
thisGlider->mode = kGliderDuctingIn;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->dontDraw = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderTransporting
|
||||
|
||||
void StartGliderTransporting (gliderPtr thisGlider, hotPtr who)
|
||||
{
|
||||
short whoLinked;
|
||||
Byte objLinked;
|
||||
char wasState;
|
||||
|
||||
PlayPrioritySound(kTransOutSound, kTransOutPriority);
|
||||
|
||||
if (thisGlider->mode == kGliderGoingFoil)
|
||||
DeckGliderInFoil(thisGlider);
|
||||
else if (thisGlider->mode == kGliderLosingFoil)
|
||||
RemoveFoilFromGlider(thisGlider);
|
||||
|
||||
whoLinked = who->who;
|
||||
transRoom = masterObjects[whoLinked].roomLink;
|
||||
objLinked = masterObjects[whoLinked].objectLink;
|
||||
linkedToWhat = WhatAreWeLinkedTo(transRoom, objLinked);
|
||||
|
||||
wasState = HGetState((Handle)thisHouse);
|
||||
HLock((Handle)thisHouse);
|
||||
GetObjectRect(&(*thisHouse)->rooms[transRoom].objects[objLinked], &transRect);
|
||||
HSetState((Handle)thisHouse, wasState);
|
||||
|
||||
thisGlider->dest.right = thisGlider->dest.left + kGliderWide;
|
||||
thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh;
|
||||
thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide;
|
||||
thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh;
|
||||
thisGlider->mode = kGliderTransporting;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = kLastFadeSequence - 1;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
thisGlider->mask =
|
||||
gliderSrc[fadeInSequence[thisGlider->frame] + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
thisGlider->mask = gliderSrc[fadeInSequence[thisGlider->frame]];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderNormal
|
||||
|
||||
void FlagGliderNormal (gliderPtr thisGlider)
|
||||
{
|
||||
thisGlider->dest.right = thisGlider->dest.left + kGliderWide;
|
||||
thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh;
|
||||
thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide;
|
||||
thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh;
|
||||
thisGlider->mode = kGliderNormal;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src = gliderSrc[2];
|
||||
thisGlider->mask = gliderSrc[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[0];
|
||||
thisGlider->mask = gliderSrc[0];
|
||||
}
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->tipped = false;
|
||||
thisGlider->ignoreLeft = false;
|
||||
thisGlider->ignoreRight = false;
|
||||
thisGlider->ignoreGround = false;
|
||||
thisGlider->dontDraw = false;
|
||||
thisGlider->frame = 0;
|
||||
shadowVisible = IsShadowVisible();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderShredding
|
||||
|
||||
void FlagGliderShredding (gliderPtr thisGlider, Rect *bounds)
|
||||
{
|
||||
PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority);
|
||||
thisGlider->dest.left = bounds->left + 36;
|
||||
thisGlider->dest.right = thisGlider->dest.left + kGliderWide;
|
||||
thisGlider->dest.bottom = thisGlider->dest.top + kGliderHigh;
|
||||
if (thisGlider->dest.left > thisGlider->whole.left)
|
||||
{
|
||||
thisGlider->whole.right = thisGlider->dest.right;
|
||||
thisGlider->wholeShadow.right = thisGlider->dest.right;
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->whole.left = thisGlider->dest.left;
|
||||
thisGlider->wholeShadow.left = thisGlider->dest.left;
|
||||
}
|
||||
thisGlider->destShadow.left = thisGlider->dest.left;
|
||||
thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide;
|
||||
thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh;
|
||||
thisGlider->mode = kGliderShredding;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src = gliderSrc[2];
|
||||
thisGlider->mask = gliderSrc[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[0];
|
||||
thisGlider->mask = gliderSrc[0];
|
||||
}
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->frame = bounds->bottom - 3;
|
||||
thisGlider->tipped = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderBurning
|
||||
|
||||
void FlagGliderBurning (gliderPtr thisGlider)
|
||||
{
|
||||
#define kFramesToBurn 60
|
||||
|
||||
PlayPrioritySound(kCaughtFireSound, kCaughtFirePriority);
|
||||
|
||||
thisGlider->dest.right = thisGlider->dest.left + kGliderWide;
|
||||
thisGlider->dest.top = thisGlider->dest.bottom - kGliderBurningHigh;
|
||||
thisGlider->destShadow.right = thisGlider->destShadow.left + kGliderWide;
|
||||
thisGlider->destShadow.bottom = thisGlider->destShadow.top + kShadowHigh;
|
||||
thisGlider->mode = kGliderBurning;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src = gliderSrc[25];
|
||||
thisGlider->mask = gliderSrc[25];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[21];
|
||||
thisGlider->mask = gliderSrc[21];
|
||||
}
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->frame = 0;
|
||||
thisGlider->wasMode = kFramesToBurn; // used to count down burning
|
||||
thisGlider->tipped = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderFaceLeft
|
||||
|
||||
void FlagGliderFaceLeft (gliderPtr thisGlider)
|
||||
{
|
||||
thisGlider->mode = kGliderFaceLeft;
|
||||
thisGlider->frame = kLastAboutFaceFrame;
|
||||
thisGlider->src = gliderSrc[kLastAboutFaceFrame];
|
||||
thisGlider->mask = gliderSrc[kLastAboutFaceFrame];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderFaceRight
|
||||
|
||||
void FlagGliderFaceRight (gliderPtr thisGlider)
|
||||
{
|
||||
thisGlider->mode = kGliderFaceRight;
|
||||
thisGlider->frame = kFirstAboutFaceFrame;
|
||||
thisGlider->src = gliderSrc[kFirstAboutFaceFrame];
|
||||
thisGlider->mask = gliderSrc[kFirstAboutFaceFrame];
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- FlagGliderInLimbo
|
||||
|
||||
void FlagGliderInLimbo (gliderPtr thisGlider, Boolean sayIt)
|
||||
{
|
||||
thisGlider->wasMode = thisGlider->mode;
|
||||
thisGlider->mode = kGliderInLimbo;
|
||||
if ((sayIt) && (saidFollow < 3))
|
||||
{
|
||||
PlayPrioritySound(kFollowSound, kFollowPriority);
|
||||
saidFollow++;
|
||||
}
|
||||
firstPlayer = thisGlider->which;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- UndoGliderLimbo
|
||||
|
||||
void UndoGliderLimbo (gliderPtr thisGlider)
|
||||
{
|
||||
if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead))
|
||||
return;
|
||||
|
||||
if (thisGlider->mode == kGliderInLimbo)
|
||||
thisGlider->mode = thisGlider->wasMode;
|
||||
thisGlider->dontDraw = false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- ToggleGliderFacing
|
||||
|
||||
void ToggleGliderFacing (gliderPtr thisGlider)
|
||||
{
|
||||
if (thisGlider->mode != kGliderNormal)
|
||||
return;
|
||||
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
FlagGliderFaceRight(thisGlider);
|
||||
else
|
||||
FlagGliderFaceLeft(thisGlider);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- InsureGliderFacingRight
|
||||
|
||||
void InsureGliderFacingRight (gliderPtr thisGlider)
|
||||
{
|
||||
if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead))
|
||||
return;
|
||||
|
||||
if ((thisGlider->facing == kFaceLeft) && (thisGlider->mode != kGliderBurning))
|
||||
FlagGliderFaceRight(thisGlider);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- InsureGliderFacingLeft
|
||||
|
||||
void InsureGliderFacingLeft (gliderPtr thisGlider)
|
||||
{
|
||||
if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead))
|
||||
return;
|
||||
|
||||
if ((thisGlider->facing == kFaceRight) && (thisGlider->mode != kGliderBurning))
|
||||
FlagGliderFaceLeft(thisGlider);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- ReadyGliderForTripUpStairs
|
||||
|
||||
void ReadyGliderForTripUpStairs (gliderPtr thisGlider)
|
||||
{
|
||||
#define kVGliderAppearsComingUp 100
|
||||
|
||||
if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft))
|
||||
return;
|
||||
|
||||
thisGlider->facing = kFaceLeft;
|
||||
thisGlider->mode = kGliderComingUp;
|
||||
thisGlider->src = gliderSrc[2];
|
||||
thisGlider->mask = gliderSrc[2];
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->tipped = false;
|
||||
|
||||
rightClip = GetUpStairsRightEdge();
|
||||
thisGlider->dest = thisGlider->src;
|
||||
ZeroRectCorner(&thisGlider->dest);
|
||||
QOffsetRect(&thisGlider->dest, rightClip, kVGliderAppearsComingUp);
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->destShadow.left = thisGlider->dest.left;
|
||||
thisGlider->destShadow.right = thisGlider->dest.right;
|
||||
thisGlider->wholeShadow = thisGlider->destShadow;
|
||||
|
||||
FinishGliderUpStairs(thisGlider);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- ReadyGliderForTripDownStairs
|
||||
|
||||
void ReadyGliderForTripDownStairs (gliderPtr thisGlider)
|
||||
{
|
||||
#define kVGliderAppearsComingDown 100
|
||||
|
||||
if ((twoPlayerGame) && (thisGlider->which == playerDead) && (onePlayerLeft))
|
||||
return;
|
||||
|
||||
thisGlider->facing = kFaceRight;
|
||||
thisGlider->mode = kGliderComingDown;
|
||||
thisGlider->src = gliderSrc[0];
|
||||
thisGlider->mask = gliderSrc[0];
|
||||
thisGlider->hVel = 0;
|
||||
thisGlider->vVel = 0;
|
||||
thisGlider->hDesiredVel = 0;
|
||||
thisGlider->vDesiredVel = 0;
|
||||
thisGlider->tipped = false;
|
||||
|
||||
leftClip = GetDownStairsLeftEdge();
|
||||
thisGlider->dest = thisGlider->src;
|
||||
ZeroRectCorner(&thisGlider->dest);
|
||||
QOffsetRect(&thisGlider->dest, leftClip - kGliderWide, kVGliderAppearsComingDown);
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->destShadow.left = thisGlider->dest.left;
|
||||
thisGlider->destShadow.right = thisGlider->dest.right;
|
||||
thisGlider->wholeShadow = thisGlider->destShadow;
|
||||
|
||||
FinishGliderDownStairs(thisGlider);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderFoilGoing
|
||||
|
||||
void StartGliderFoilGoing (gliderPtr thisGlider)
|
||||
{
|
||||
if ((thisGlider->mode == kGliderGoingFoil) || (thisGlider->mode == kGliderInLimbo))
|
||||
return;
|
||||
|
||||
QuickFoilRefresh(false);
|
||||
|
||||
thisGlider->mode = kGliderGoingFoil;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = 0;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset];
|
||||
thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[10 - thisGlider->frame];
|
||||
thisGlider->mask = gliderSrc[10 - thisGlider->frame];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- StartGliderFoilLosing
|
||||
|
||||
void StartGliderFoilLosing (gliderPtr thisGlider)
|
||||
{
|
||||
if ((thisGlider->mode == kGliderLosingFoil) ||
|
||||
(thisGlider->mode == kGliderInLimbo))
|
||||
return;
|
||||
|
||||
QuickFoilRefresh(false);
|
||||
PlayPrioritySound(kFizzleSound, kFizzlePriority);
|
||||
|
||||
thisGlider->mode = kGliderLosingFoil;
|
||||
thisGlider->whole = thisGlider->dest;
|
||||
thisGlider->frame = 0;
|
||||
if (thisGlider->facing == kFaceLeft)
|
||||
{
|
||||
thisGlider->src = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset];
|
||||
thisGlider->mask = gliderSrc[(10 - thisGlider->frame) + kLeftFadeOffset];
|
||||
}
|
||||
else
|
||||
{
|
||||
thisGlider->src = gliderSrc[10 - thisGlider->frame];
|
||||
thisGlider->mask = gliderSrc[10 - thisGlider->frame];
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- TagGliderIdle
|
||||
|
||||
void TagGliderIdle (gliderPtr thisGlider)
|
||||
{
|
||||
if ((twoPlayerGame) && (onePlayerLeft) && (thisGlider->which == playerDead))
|
||||
return;
|
||||
|
||||
thisGlider->wasMode = thisGlider->mode;
|
||||
thisGlider->mode = kGliderIdle;
|
||||
thisGlider->hVel = 30; // used for 30 frame delay
|
||||
}
|
||||
|
Reference in New Issue
Block a user