Pararena2/Sources/Initialize.c

1 line
24 KiB
C
Executable File

/*============================================================*/
/*============================================================*/
/*== ==*/
/*== Initialization Routines ==*/
/*== ==*/
/*============================================================*/
/*============================================================*/
/*======================================================== Includes */
#include "UnivUtilities.h"
#include "Globals.h"
#include "AppleTalkDDP.h"
#include "Initialize.h"
#include "AnimCursor.h"
#include "MainWindow.h"
#include <Sound.h>
#include "Render.h"
#include "Environ.h"
#include "InitGameStructs.h"
#include "TeamSetUp.h"
#include "Menu.h"
#include "ValidInstall.h"
/*======================================================== ToolBoxInit */
void ToolBoxInit (void)
{
short count;
InitGraf(&thePort);
InitFonts();
FlushEvents(everyEvent, kRemoveAllEvents);
InitWindows();
InitMenus();
TEInit();
InitDialogs(kNilPointer);
InitCursor();
MaxApplZone();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
MoreMasters();
for (count = 1; count <= 3; count++)
EventAvail(everyEvent, &theEvent);
inBackground = FALSE;
}
/*======================================================== BitMapInit */
void BitMapInit (void)
{
PicHandle thePict;
short mapWidth, mapHeight;
SpinCursor(7);
/* Set up offscreen bit map for various game objects */
offPartsPtr = (GrafPtr)(NewPtr(sizeof(GrafPort)));
OpenPort(offPartsPtr);
mapWidth = 400;
mapHeight = 264;
SetRect(&offPartsRect, 0, 0, mapWidth, mapHeight);
partsRowBytes = ((offPartsRect.right - offPartsRect.left + 15) / 16) * 2;
offPartsBits.rowBytes = partsRowBytes;
offPartsBits.bounds = offPartsRect;
offPartsBits.baseAddr = NewPtr((long)offPartsBits.rowBytes *
(offPartsRect.bottom - offPartsRect.top));
if (offPartsBits.baseAddr == kNilPointer)
DeathError(kErrNoMemory);
if (MemError() != noErr)
DeathError(kErrNoMemory);
SetPortBits(&offPartsBits);
ClipRect(&offPartsRect);
EraseRect(&offPartsRect);
thePict = GetPicture(rPartsPict1BitID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &offPartsRect);
ReleaseResource((Handle)thePict);
}
else
DeathError(kErrNoPictRsrc);
/* Set up offscreen bit map for preloading assembled graphics */
offWorkPtr = (GrafPtr)(NewPtr(sizeof(GrafPort)));
OpenPort(offWorkPtr);
mapWidth = screenWide;
mapHeight = screenHigh;
SetRect(&offWorkRect, 0, 0, mapWidth, mapHeight);
workRowBytes = ((offWorkRect.right - offWorkRect.left + 15) / 16) * 2;
offWorkBits.rowBytes = workRowBytes;
offWorkBits.bounds = offWorkRect;
offWorkBits.baseAddr = NewPtr((long)offWorkBits.rowBytes *
(offWorkRect.bottom - offWorkRect.top));
if (offWorkBits.baseAddr == kNilPointer)
DeathError(kErrNoMemory);
if (MemError() != noErr)
DeathError(kErrNoMemory);
SetPortBits(&offWorkBits);
ClipRect(&offWorkRect);
EraseRect(&offWorkRect);
/* Set up offscreen bit map for a virgin copy of background */
offBackPtr = (GrafPtr)(NewPtr(sizeof(GrafPort)));
OpenPort(offBackPtr);
mapWidth = screenWide;
mapHeight = screenHigh;
SetRect(&offBackRect, 0, 0, mapWidth, mapHeight);
backRowBytes = ((offBackRect.right - offBackRect.left + 15) / 16) * 2;
offBackBits.rowBytes = backRowBytes;
offBackBits.bounds = offBackRect;
offBackBits.baseAddr = NewPtr((long)offBackBits.rowBytes *
(offBackRect.bottom - offBackRect.top));
if (offBackBits.baseAddr == kNilPointer)
DeathError(kErrNoMemory);
if (MemError() != noErr)
DeathError(kErrNoMemory);
SetPortBits(&offBackBits);
ClipRect(&offBackRect);
EraseRect(&offBackRect);
LoadBackgroundPict();
CopyBits(&offBackBits, &offWorkBits, &offBackRect, &offBackRect, srcCopy, nil);
CopyBits(&offBackBits, &offPartsBits, &rightArrowDest, &rightArrowStorage, srcCopy,
nil);
CopyBits(&offBackBits, &offPartsBits, &leftArrowDest, &leftArrowStorage, srcCopy,
nil);
}
/*======================================================== PixMapInit */
void PixMap4Init (void)
{
GDHandle thisGDevice;
CTabHandle thisCMHandle;
PicHandle thePict;
Rect pictRect;
long sizeOfOff;
OSErr theErr;
short theDepth, mapWidth, mapHeight;
SpinCursor(7);
thisGDevice = GetMainDevice();
offCPartsPtr = &offCPartsPort; /* set up parts port */
OpenCPort(offCPartsPtr);
theDepth = 4;
mapWidth = 400;
mapHeight = 264;
SetRect (&offPartsRect, 0, 0, mapWidth, mapHeight);
partsRowBytes = (((theDepth * mapWidth) + 15) >> 4) << 1;
sizeOfOff = (long)mapHeight * (long)partsRowBytes;
offPartsPix = NewPtr(sizeOfOff);
if (offPartsPix == kNilPointer)
{
DeathError(kErrNoMemory);
}
(**(*offCPartsPtr).portPixMap).baseAddr = offPartsPix;
(**(*offCPartsPtr).portPixMap).rowBytes = (short)partsRowBytes + 0x8000;
(**(*offCPartsPtr).portPixMap).bounds = offPartsRect;
SetPort((GrafPtr)offCPartsPtr);
ClipRect(&offPartsRect);
thisCMHandle = (**(**thisGDevice).gdPMap).pmTable;
theErr = HandToHand((Handle *)&thisCMHandle);
if (theErr != noErr)
DeathError(kErrNoMemory);
(**(*offCPartsPtr).portPixMap).pmTable = thisCMHandle;
PmForeColor(kBlackColor4Bit);
PmBackColor(kWhiteColor4Bit);
thePict = GetPicture(rPartsPict4BitID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &offPartsRect);
ReleaseResource((Handle)thePict);
}
else
DeathError(kErrNoPictRsrc);
/* set up work port for pre-graphics */
offCWorkPtr = &offCWorkPort;
OpenCPort(offCWorkPtr);
theDepth = 4;
mapWidth = screenWide;
mapHeight = screenHigh;
SetRect (&offWorkRect, 0, 0, mapWidth, mapHeight);
workRowBytes = (((theDepth * mapWidth) + 15) >> 4) << 1;
sizeOfOff = (long)mapHeight * (long)workRowBytes;
offWorkPix = NewPtr(sizeOfOff);
if (offWorkPix == kNilPointer)
{
DeathError(kErrNoMemory);
}
(**(*offCWorkPtr).portPixMap).baseAddr = offWorkPix;
(**(*offCWorkPtr).portPixMap).rowBytes = workRowBytes + 0x8000;
(**(*offCWorkPtr).portPixMap).bounds = offWorkRect;
SetPort((GrafPtr)offCWorkPtr);
ClipRect(&offWorkRect);
thisCMHandle = (**(**thisGDevice).gdPMap).pmTable;
theErr = HandToHand((Handle *)&thisCMHandle);
if (theErr != noErr)
DeathError(kErrNoMemory);
(**(*offCPartsPtr).portPixMap).pmTable = thisCMHandle;
PmForeColor(kBlackColor4Bit);
PmBackColor(kWhiteColor4Bit);
/* set up background port */
offCBackPtr = &offCBackPort;
OpenCPort(offCBackPtr);
theDepth = 4;
mapWidth = screenWide;
mapHeight = screenHigh;
SetRect (&offBackRect, 0, 0, mapWidth, mapHeight);
backRowBytes = (((theDepth * mapWidth) + 15) >> 4) << 1;
sizeOfOff = (long)mapHeight * (long)backRowBytes;
offBackPix = NewPtr(sizeOfOff);
if (offBackPix == kNilPointer)
{
DeathError(kErrNoMemory);
}
(**(*offCBackPtr).portPixMap).baseAddr = offBackPix;
(**(*offCBackPtr).portPixMap).rowBytes = backRowBytes + 0x8000;
(**(*offCBackPtr).portPixMap).bounds = offBackRect;
SetPort((GrafPtr)offCBackPtr);
ClipRect(&offBackRect);
thisCMHandle = (**(**thisGDevice).gdPMap).pmTable;
theErr = HandToHand((Handle *)&thisCMHandle);
if (theErr != noErr)
DeathError(kErrNoMemory);
(**(*offCPartsPtr).portPixMap).pmTable = thisCMHandle;
PmForeColor(kBlackColor4Bit);
PmBackColor(kWhiteColor4Bit);
LoadBackgroundPict();
CopyBits(&((GrafPtr)offCBackPtr)->portBits, &((GrafPtr)offCWorkPtr)->portBits,
&offBackRect, &offBackRect, srcCopy, nil);
CopyBits(&((GrafPtr)offCBackPtr)->portBits, &((GrafPtr)offCPartsPtr)->portBits,
&rightArrowDest, &rightArrowStorage, srcCopy, nil);
CopyBits(&((GrafPtr)offCBackPtr)->portBits, &((GrafPtr)offCPartsPtr)->portBits,
&leftArrowDest, &leftArrowStorage, srcCopy, nil);
}
/*======================================================== MaskMapInit */
void MaskMapInit (void)
{
PicHandle thePict;
short mapWidth, mapHeight;
SpinCursor(7);
offMaskPtr = (GrafPtr)(NewPtr(sizeof(GrafPort)));
OpenPort(offMaskPtr);
mapWidth = 320;
mapHeight = 264;
SetRect(&offMaskRect, 0, 0, mapWidth, mapHeight);
maskRowBytes = ((offMaskRect.right - offMaskRect.left + 15) / 16) * 2;
offMaskMap.rowBytes = maskRowBytes;
offMaskMap.baseAddr = NewPtr((long)offMaskMap.rowBytes *
(offMaskRect.bottom - offMaskRect.top));
if (offMaskMap.baseAddr == kNilPointer)
DeathError(kErrNoMemory);
offMaskMap.bounds = offMaskRect;
if (MemError() != noErr)
DeathError(kErrNoMemory);
SetPortBits(&offMaskMap);
ClipRect(&offMaskRect);
EraseRect(&offMaskRect);
if (isColor)
thePict = GetPicture(rMaskPict48ID);
else
thePict = GetPicture(rMaskPict1ID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &offMaskRect);
ReleaseResource((Handle)thePict);
}
else
DeathError(kErrNoPictRsrc);
}
/*======================================================== MaskPixInit */
void MaskPixInit (void)
{
GDHandle thisGDevice;
CTabHandle thisCMHandle;
PicHandle thePict;
Rect pictRect;
long sizeOfOff;
OSErr theErr;
short theDepth, mapWidth, mapHeight;
thisGDevice = GetMainDevice();
offCMaskPtr = &offCMaskPort; /* set up Mask port */
OpenCPort(offCMaskPtr);
theDepth = 4;
mapWidth = 320;
mapHeight = 264;
SetRect (&offMaskRect, 0, 0, mapWidth, mapHeight);
maskCRowBytes = (((theDepth * mapWidth) + 15) >> 4) << 1;
sizeOfOff = (long)mapHeight * (long)maskCRowBytes;
offMaskPix = NewPtr(sizeOfOff);
if (offMaskPix == kNilPointer)
{
DeathError(kErrNoMemory);
}
(**(*offCMaskPtr).portPixMap).baseAddr = offMaskPix;
(**(*offCMaskPtr).portPixMap).rowBytes = (short)maskCRowBytes + 0x8000;
(**(*offCMaskPtr).portPixMap).bounds = offMaskRect;
SetPort((GrafPtr)offCMaskPtr);
ClipRect(&offMaskRect);
thisCMHandle = (**(**thisGDevice).gdPMap).pmTable;
theErr = HandToHand((Handle *)&thisCMHandle);
if (theErr != noErr)
DeathError(kErrNoMemory);
(**(*offCPartsPtr).portPixMap).pmTable = thisCMHandle;
PmForeColor(kBlackColor4Bit);
PmBackColor(kWhiteColor4Bit);
if (isColor)
thePict = GetPicture(rMaskPict48ID);
else
thePict = GetPicture(rMaskPict1ID);
if (thePict != kNilPointer)
{
DrawPicture(thePict, &offMaskRect);
ReleaseResource((Handle)thePict);
}
else
DeathError(kErrNoPictRsrc);
}
/*======================================================== GetBaseAddressC */
void GetBaseAddressC (void)
{
GDHandle theDevice;
PixMapHandle pixMapH;
long insetHPix, insetVPix;
short i;
theDevice = GetMainDevice();
pixMapH = (**theDevice).gdPMap;
screenBase = (long)((**pixMapH).baseAddr);
screenRowBytes = (**pixMapH).rowBytes & 0x7FFF;
insetHPix = (long)(screenBits.bounds.right - screenBits.bounds.left - screenWide) / 2L;
insetVPix = (long)(screenBits.bounds.bottom - screenBits.bounds.top - screenHigh) / 2L;
insetBytes = (insetVPix * (long)screenRowBytes) + (insetHPix * (long)isDepth / 8L);
for (i = 0; i < 480; i++)
screenRowAddrs[i] = ((long)screenRowBytes * (long)i) + screenBase +
(long)insetBytes;
for (i = 0; i < 480; i++)
workRowOffsets[i] = (long)workRowBytes * (long)i;
theDoor.srcAddrs[0][0] = ((long)theDoor.srcRects[0][0].top * partsRowBytes) +
((long)theDoor.srcRects[0][0].left * (long)isDepth / 8L) + (long)offPartsPix;
theDoor.srcAddrs[0][1] = ((long)theDoor.srcRects[0][1].top * partsRowBytes) +
((long)theDoor.srcRects[0][1].left * (long)isDepth / 8L) + (long)offPartsPix;
theDoor.srcAddrs[1][0] = ((long)theDoor.srcRects[1][0].top * partsRowBytes) +
((long)theDoor.srcRects[1][0].left * (long)isDepth / 8L) + (long)offPartsPix;
theDoor.srcAddrs[1][1] = ((long)theDoor.srcRects[1][1].top * partsRowBytes) +
((long)theDoor.srcRects[1][1].left * (long)isDepth / 8L) + (long)offPartsPix;
theDoor.screenDestAddr[0] = ((long)theDoor.destRects[0].top * (long)screenRowBytes) +
((long)theDoor.destRects[0].left * (long)isDepth / 8L) + screenBase +
insetBytes;
theDoor.screenDestAddr[1] = ((long)theDoor.destRects[1].top * (long)screenRowBytes) +
((long)theDoor.destRects[1].left * (long)isDepth / 8L) + screenBase +
insetBytes;
theDoor.workDestAddr[0] = ((long)theDoor.destRects[0].top * workRowBytes) +
((long)theDoor.destRects[0].left * (long)isDepth / 8L) + (long)offWorkPix;
theDoor.workDestAddr[1] = ((long)theDoor.destRects[1].top * workRowBytes) +
((long)theDoor.destRects[1].left * (long)isDepth / 8L) + (long)offWorkPix;
theDoor.backDestAddr[0] = ((long)theDoor.destRects[0].top * backRowBytes) +
((long)theDoor.destRects[0].left * (long)isDepth / 8L) + (long)offBackPix;
theDoor.backDestAddr[1] = ((long)theDoor.destRects[1].top * backRowBytes) +
((long)theDoor.destRects[1].left * (long)isDepth / 8L) + (long)offBackPix;
for (i = 0; i < 9; i++)
{
playerSrcAddrs[i][0] = ((long)playerSrcRects[i][0].top * partsRowBytes) +
((long)playerSrcRects[i][0].left * (long)isDepth / 8L) + (long)offPartsPix;
playerSrcAddrs[i][1] = ((long)playerSrcRects[i][1].top * partsRowBytes) +
((long)playerSrcRects[i][1].left * (long)isDepth / 8L) + (long)offPartsPix;
playerSrcAddrs[i][2] = ((long)playerSrcRects[i][2].top * partsRowBytes) +
((long)playerSrcRects[i][2].left * (long)isDepth / 8L) + (long)offPartsPix;
maskAddrs[i][0] = ((long)playerSrcRects[i][0].top * maskCRowBytes) +
((long)playerSrcRects[i][0].left * (long)isDepth / 8L) + (long)offMaskPix;
maskAddrs[i][1] = ((long)playerSrcRects[i][1].top * maskCRowBytes) +
((long)playerSrcRects[i][1].left * (long)isDepth / 8L) + (long)offMaskPix;
maskAddrs[i][2] = ((long)playerSrcRects[i][2].top * maskCRowBytes) +
((long)playerSrcRects[i][2].left * (long)isDepth / 8L) + (long)offMaskPix;
opponentSrcAddrs[i][0] = ((long)opponentSrcRects[i][0].top * partsRowBytes) +
((long)opponentSrcRects[i][0].left * (long)isDepth / 8L) + (long)offPartsPix;
opponentSrcAddrs[i][1] = ((long)opponentSrcRects[i][1].top * partsRowBytes) +
((long)opponentSrcRects[i][1].left * (long)isDepth / 8L) + (long)offPartsPix;
opponentSrcAddrs[i][2] = ((long)opponentSrcRects[i][2].top * partsRowBytes) +
((long)opponentSrcRects[i][2].left * (long)isDepth / 8L) + (long)offPartsPix;
fadeMaskAddrs[i][0] = ((long)fadeMaskRects[i][0].top * maskCRowBytes) +
((long)fadeMaskRects[i][0].left * (long)isDepth / 8L) + (long)offMaskPix;
fadeMaskAddrs[i][1] = ((long)fadeMaskRects[i][1].top * maskCRowBytes) +
((long)fadeMaskRects[i][1].left * (long)isDepth / 8L) + (long)offMaskPix;
fadeMaskAddrs[i][2] = ((long)fadeMaskRects[i][2].top * maskCRowBytes) +
((long)fadeMaskRects[i][2].left * (long)isDepth / 8L) + (long)offMaskPix;
}
ballSrcAddr = ((long)theBall.srcRect.top * partsRowBytes) +
((long)theBall.srcRect.left * (long)isDepth / 8L) + (long)offPartsPix;
ballMaskAddr = ((long)theBall.srcRect.top * maskCRowBytes) +
((long)theBall.srcRect.left * (long)isDepth / 8L) + (long)offMaskPix;
boardCursor.srcAddr = ((long)boardCursor.srcRect.top * partsRowBytes) +
((long)boardCursor.srcRect.left * (long)isDepth / 8L) + (long)offPartsPix;
boardCursor.maskAddr = ((long)boardCursor.srcRect.top * maskCRowBytes) +
((long)boardCursor.srcRect.left * (long)isDepth / 8L) + (long)offMaskPix;
replaySrc = ((long)replayRect.top * workRowBytes) +
((long)replayRect.left * (long)isDepth / 8L) + (long)offWorkPix;
replayDest = ((long)replayRect.top * (long)screenRowBytes) +
((long)replayRect.left * (long)isDepth / 8L) + screenBase + insetBytes;
}
/*======================================================== GetBaseAddress1 */
void GetBaseAddress1 (void)
{
long insetHPix, insetVPix;
short i;
screenBase = (long)screenBits.baseAddr;
screenRowBytes = screenBits.rowBytes;
insetHPix = (long)(screenBits.bounds.right - screenBits.bounds.left - screenWide) / 2L;
insetVPix = (long)(screenBits.bounds.bottom - screenBits.bounds.top - screenHigh) / 2L;
insetBytes = (insetVPix * (long)screenRowBytes) + (insetHPix / 8L);
for (i = 0; i < 480; i++)
screenRowAddrs[i] = ((long)screenRowBytes * (long)i) + screenBase +
(long)insetBytes;
for (i = 0; i < 480; i++)
workRowOffsets[i] = (long)workRowBytes * (long)i;
theDoor.srcAddrs[0][0] = ((long)theDoor.srcRects[0][0].top * partsRowBytes) +
((long)theDoor.srcRects[0][0].left / 8L) + (long)offPartsBits.baseAddr;
theDoor.srcAddrs[0][1] = ((long)theDoor.srcRects[0][1].top * partsRowBytes) +
((long)theDoor.srcRects[0][1].left / 8L) + (long)offPartsBits.baseAddr;
theDoor.srcAddrs[1][0] = ((long)theDoor.srcRects[1][0].top * partsRowBytes) +
((long)theDoor.srcRects[1][0].left / 8L) + (long)offPartsBits.baseAddr;
theDoor.srcAddrs[1][1] = ((long)theDoor.srcRects[1][1].top * partsRowBytes) +
((long)theDoor.srcRects[1][1].left / 8L) + (long)offPartsBits.baseAddr;
theDoor.screenDestAddr[0] = ((long)theDoor.destRects[0].top * (long)screenRowBytes) +
((long)theDoor.destRects[0].left / 8L) + screenBase + insetBytes;
theDoor.screenDestAddr[1] = ((long)theDoor.destRects[1].top * (long)screenRowBytes) +
((long)theDoor.destRects[1].left / 8L) + screenBase + insetBytes;
theDoor.workDestAddr[0] = ((long)theDoor.destRects[0].top * workRowBytes) +
((long)theDoor.destRects[0].left / 8L) + (long)offWorkBits.baseAddr;
theDoor.workDestAddr[1] = ((long)theDoor.destRects[1].top * workRowBytes) +
((long)theDoor.destRects[1].left / 8L) + (long)offWorkBits.baseAddr;
theDoor.backDestAddr[0] = ((long)theDoor.destRects[0].top * backRowBytes) +
((long)theDoor.destRects[0].left / 8L) + (long)offBackBits.baseAddr;
theDoor.backDestAddr[1] = ((long)theDoor.destRects[1].top * backRowBytes) +
((long)theDoor.destRects[1].left / 8L) + (long)offBackBits.baseAddr;
for (i = 0; i < 9; i++)
{
playerSrcAddrs[i][0] = ((long)playerSrcRects[i][0].top * partsRowBytes) +
((long)playerSrcRects[i][0].left / 8L) + (long)offPartsBits.baseAddr;
playerSrcAddrs[i][1] = ((long)playerSrcRects[i][1].top * partsRowBytes) +
((long)playerSrcRects[i][1].left / 8L) + (long)offPartsBits.baseAddr;
playerSrcAddrs[i][2] = ((long)playerSrcRects[i][2].top * partsRowBytes) +
((long)playerSrcRects[i][2].left / 8L) + (long)offPartsBits.baseAddr;
maskAddrs[i][0] = ((long)playerSrcRects[i][0].top * maskRowBytes) +
((long)playerSrcRects[i][0].left / 8L) + (long)offMaskMap.baseAddr;
maskAddrs[i][1] = ((long)playerSrcRects[i][1].top * maskRowBytes) +
((long)playerSrcRects[i][1].left / 8L) + (long)offMaskMap.baseAddr;
maskAddrs[i][2] = ((long)playerSrcRects[i][2].top * maskRowBytes) +
((long)playerSrcRects[i][2].left / 8L) + (long)offMaskMap.baseAddr;
opponentSrcAddrs[i][0] = ((long)opponentSrcRects[i][0].top * partsRowBytes) +
((long)opponentSrcRects[i][0].left / 8L) + (long)offPartsBits.baseAddr;
opponentSrcAddrs[i][1] = ((long)opponentSrcRects[i][1].top * partsRowBytes) +
((long)opponentSrcRects[i][1].left / 8L) + (long)offPartsBits.baseAddr;
opponentSrcAddrs[i][2] = ((long)opponentSrcRects[i][2].top * partsRowBytes) +
((long)opponentSrcRects[i][2].left / 8L) + (long)offPartsBits.baseAddr;
fadeMaskAddrs[i][0] = ((long)fadeMaskRects[i][0].top * maskRowBytes) +
((long)fadeMaskRects[i][0].left / 8L) + (long)offMaskMap.baseAddr;
fadeMaskAddrs[i][1] = ((long)fadeMaskRects[i][1].top * maskRowBytes) +
((long)fadeMaskRects[i][1].left / 8L) + (long)offMaskMap.baseAddr;
fadeMaskAddrs[i][2] = ((long)fadeMaskRects[i][2].top * maskRowBytes) +
((long)fadeMaskRects[i][2].left / 8L) + (long)offMaskMap.baseAddr;
}
ballSrcAddr = ((long)theBall.srcRect.top * partsRowBytes) +
((long)theBall.srcRect.left / 8L) + (long)offPartsBits.baseAddr;
ballMaskAddr = ((long)theBall.srcRect.top * maskRowBytes) +
((long)theBall.srcRect.left / 8L) + (long)offMaskMap.baseAddr;
boardCursor.srcAddr = ((long)boardCursor.srcRect.top * partsRowBytes) +
((long)boardCursor.srcRect.left / 8L) + (long)offPartsBits.baseAddr;
boardCursor.maskAddr = ((long)boardCursor.srcRect.top * maskRowBytes) +
((long)boardCursor.srcRect.left / 8L) + (long)offMaskMap.baseAddr;
replaySrc = ((long)replayRect.top * workRowBytes) +
((long)replayRect.left / 8L) + (long)offWorkBits.baseAddr;
replayDest = ((long)replayRect.top * (long)screenRowBytes) +
((long)replayRect.left / 8L) + screenBase + insetBytes;
}
/*======================================================== LoadSounds */
void LoadSounds (void)
{
Str255 fileName;
Handle theSound, memoryBuffer;
short i;
GetSoundVol(&wasSoundVolume);
SetSoundVol(soundVolume);
soundPriorities[0] = 0;
soundPriorities[kClashSound] = kClashPriority;
soundPriorities[kRicochetSound] = kRicochetPriority;
soundPriorities[kScoreSound] = kScorePriority;
soundPriorities[kBallFiringSound] = kBallFiringPriority;
soundPriorities[kBeamInSound] = kBeamInPriority;
soundPriorities[kBeamOutSound] = kBeamOutPriority;
soundPriorities[kFoulSound] = kFoulPriority;
soundPriorities[kBallPickUpSound] = kBallPickUpPriority;
soundPriorities[kCrowdSound] = kCrowdPriority;
soundPriorities[kCrowdSwellSound] = kCrowdSwellPriority;
soundPriorities[kApplauseSound] = kApplausePriority;
soundPriorities[kCrowdFadeSound] = kCrowdFadePriority;
soundPriorities[kBellSound] = kBellPriority;
soundPriorities[kMobSwellSound] = kMobSwellPriority;
soundPriorities[kMobSound] = kMobPriority;
soundPriorities[kMobFadeSound] = kMobFadePriority;
soundPriorities[kHoldingSound] = kHoldingPriority;
soundPriorities[kGameSound] = kGamePriority;
soundPriorities[kPointSound] = kPointPriority;
soundPriorities[kBallDropSound] = kBallDropPriority;
soundPriorities[kBrakeSound] = kBrakePriority;
soundPriorities[kAllSound] = kAllPriority;
soundPriorities[kTiedSound] = kTiedPriority;
soundPriorities[kIdleSound] = kIdlePriority;
soundPriorities[kOverSound] = kOverPriority;
memoryBuffer = NewHandle(65536L);
if (memoryBuffer == kNilPointer)
DeathError(kErrNoMemory);
for (i = 1; i < kMaxNumberOfSounds; i++)
{
theSound = GetResource('SMSD', i);
if (theSound != kNilPointer)
{
MoveHHi(theSound);
HLock(theSound);
HNoPurge(theSound);
soundLoaded[i] = TRUE;
}
else
soundLoaded[i] = FALSE;
}
soundFileRefNum = -1;
GetIndString(fileName, rMiscStrings, 6);
if (fileName[0] != 0)
{
soundFileRefNum = OpenResFile((StringPtr)StripAddress((Ptr)fileName));
UseResFile(soundFileRefNum);
for (i = kMaxNumberOfSounds; i <= kLastIncidentalSounds; i++)
{
theSound = GetResource('SMSD', i);
if (theSound != kNilPointer)
{
MoveHHi(theSound);
HLock(theSound);
HNoPurge(theSound);
incidentSoundLoaded[i - kMaxNumberOfSounds] = TRUE;
}
else
incidentSoundLoaded[i - kMaxNumberOfSounds] = FALSE;
}
}
DisposeHandle(memoryBuffer);
}
/*======================================================== SpeedTest */
void SpeedTest (void)
{
long thisTime;
speedFlag = 0L;
thisTime = Ticks;
while (thisTime == Ticks);
thisTime += 15L;
while (thisTime >= Ticks)
{
TwinkleAStar();
speedFlag++;
}
}
/*======================================================== InitializeAll */
void InitializeAll (void)
{
short netErr;
Boolean wereLegit;
ToolBoxInit();
CheckOurEnvirons();
LoadCursors();
CouldAlert(rDeathAlertID);
LoadThePreferences();
#if kDemoVersion
canNetwork = FALSE;
#else
if (!netOnly)
{
wereLegit = ValidInstallation(TRUE);
if (wereLegit)
{
netOnly = FALSE;
}
else
{
encryptedNumber = 0L;
netOnly = TRUE;
}
}
if (netOnly)
{
thePlayer.persona = kHumanPlayer;
theOpponent.persona = kNetHuman;
whichGame = kStandardGame;
}
netErr = InitializeAppleTalk();
if (netErr == kNetErrNoErr)
canNetwork = TRUE;
else
{
canNetwork = FALSE;
if (netOnly)
{
MinorError(kMinorCantNetAndNetOnly);
}
else if (theOpponent.persona == kNetHuman)
{
theOpponent.persona = kMissTeak;
MinorError(kMinorCantNetDefault);
}
}
#endif
LoadLargeDataStructures();
VarInit();
InitBallData();
InitPlayerData();
InitOpponentData();
InitDigiDispData();
OpenMainWindow();
DoSplashScreen();
if (isColor)
PixMap4Init();
else
BitMapInit();
if ((!useQD) && (isColor))
MaskPixInit();
MaskMapInit();
if (isColor)
GetBaseAddressC();
else
GetBaseAddress1();
WhosOnFirst();
UpdateGoalPicts(FALSE);
MenuBarInit();
LoadSounds();
SpeedTest();
FlushEvents(everyEvent, kRemoveAllEvents);
}