mirror of
https://github.com/softdorothy/Pararena2.git
synced 2024-06-11 01:29:28 +00:00
1 line
17 KiB
C
1 line
17 KiB
C
|
/*============================================================*/
/*============================================================*/
/*== ==*/
/*== Instant Replay Handling Routines ==*/
/*== ==*/
/*============================================================*/
/*============================================================*/
/*======================================================== Includes */
#include "Globals.h"
#include "UnivUtilities.h"
#include "Replay.h"
#include "Render.h"
#include "RenderQD.h"
#include "NetOpponent.h"
#include "RenderAsm1.h"
#include "RenderAsm4.h"
/*======================================================== Functions */
/*======================================================== AmassReplayData */
void AmassReplayData (void)
{
short theFrame;
if (canReplay)
{
replayData->frame++;
if (replayData->frame >= kMaxReplayFrames)
replayData->frame = 0;
theFrame = replayData->frame;
replayData->data[theFrame].playerIs = thePlayer.isRect;
replayData->data[theFrame].opponentIs = theOpponent.isRect;
replayData->data[theFrame].ballIs = theBall.isRect;
if (leftGoalIsPlayers)
replayData->data[theFrame].playerArraySrc = kPlayerSrc;
else
replayData->data[theFrame].playerArraySrc = kOpponentSrc;
replayData->data[theFrame].playerDirSrc = thePlayer.dirFlagSrc;
replayData->data[theFrame].playerPostSrc = thePlayer.postFlagSrc;
replayData->data[theFrame].playerArrayMask = thePlayer.arrayFlagMask;
replayData->data[theFrame].playerDirMask = thePlayer.dirFlagMask;
replayData->data[theFrame].playerPostMask = thePlayer.postFlagMask;
replayData->data[theFrame].playerMode = thePlayer.mode;
if (leftGoalIsPlayers)
replayData->data[theFrame].opponentArraySrc = kOpponentSrc;
else
replayData->data[theFrame].opponentArraySrc = kPlayerSrc;
replayData->data[theFrame].opponentDirSrc = theOpponent.dirFlagSrc;
replayData->data[theFrame].opponentPostSrc = theOpponent.postFlagSrc;
replayData->data[theFrame].opponentArrayMask = theOpponent.arrayFlagMask;
replayData->data[theFrame].opponentDirMask = theOpponent.dirFlagMask;
replayData->data[theFrame].opponentPostMask = theOpponent.postFlagMask;
replayData->data[theFrame].opponentMode = theOpponent.mode;
replayData->data[theFrame].ballMode = theBall.mode;
replayData->data[theFrame].wheresBall = whosGotBall;
replayData->data[theFrame].ballDontDraw = theBall.dontDraw;
}
}
/*======================================================== DoInstantReplay */
void DoInstantReplay (void)
{
Rect playerIsRect, opponentIsRect, ballIsRect, zoomFrame;
RgnHandle wasClip, newClip;
GrafPtr wasPort;
long nowTime, waitFor, dummyLong;
short theFrame, i, replayTickDelay, zoomWide, zoomHigh, wasFrame;
char ballsMode;
Boolean confirmed, doQuicktime;
if (!canReplay)
return;
doQuicktime = (isColor && OptionKeyIsDown() && CommandKeyIsDown());
nowTime = Ticks;
HandlePreGraphics();
RenderScene();
zoomFrame = replayRect;
GetPort(&wasPort);
SetPort((GrafPtr)mainWndo);
wasClip = NewRgn();
if (wasClip != kNilPointer)
CopyRgn((RgnHandle)((GrafPtr)mainWndo->visRgn), wasClip);
newClip = NewRgn();
if (newClip != kNilPointer)
{
RectRgn(newClip, &screenBits.bounds);
CopyRgn(newClip, (RgnHandle)((GrafPtr)mainWndo->visRgn));
}
if (replayZooms)
{
InsetRect(&zoomFrame, 63, 63);
for (i = 1; i < 65; i++)
{
PenPat(black);
FrameRect(&zoomFrame);
InsetRect(&zoomFrame, -1, -1);
PenPat(white);
FrameRect(&zoomFrame);
}
}
else
{
FillRect(&zoomFrame, black);
InsetRect(&zoomFrame, -1, -1);
PenPat(white);
FrameRect(&zoomFrame);
}
PenNormal();
SetPort((GrafPtr)wasPort);
replayData->hVel = 0;
replayData->vVel = 0;
wasFrame = replayData->frame;
replayData->frame++;
if (replayData->frame >= kMaxReplayFrames)
replayData->frame = 0;
theFrame = replayData->frame;
playerIsRect = replayData->data[theFrame].playerIs;
opponentIsRect = replayData->data[theFrame].opponentIs;
ballIsRect = replayData->data[theFrame].ba
|