Glider4/RoomEditor_103/Sources/E-Initialize.p
John Calhoun e178486ce8 Initial check-in
There was an effort to organize the files a little bit for presenting
in this repository. I hope I have included everything needed for both
Glider 4.05 and the Room Editor 1.0.3. The code is in Pascal — THINK
Pascal was used to build the original. I’m not sure how someone would
open the project files (or for that matter the resource files) these
days. Never mind there is also a .o file (SMS.a) representing a
statically linked library (from hand-coded 68K assembly) for doing
performant 4-channel sound on 68K Macs in the day (this was licensed
from Patrick Buckland — I’m sure he won’t mind my preserving it here
for posterity, right?). Art files, sound files of unknown format…. What
a joy it will be sleuthing through these files…. Enjoy.
2016-01-26 20:30:26 -08:00

1 line
27 KiB
OpenEdge ABL
Executable File

unit Initialize;
interface
uses
Balloons, Palettes, Globals, Utilities, RoomStuff;
procedure InitVariables;
{=================================}
implementation
{=================================}
procedure InitVariables;
var
index, theDepth: Integer;
sizeOfOff, offRowBytes: LongInt;
tempByte: SignedByte;
rawPointer: Ptr;
thePict: PicHandle;
tempRect: Rect;
ignore: Boolean;
{---------------------}
procedure CheckOurEnvirons;
const
WNETrapNum = $60;
unimplTrapNum = $9F;
Color = 1;
Monochrome = 0;
GDTypeFlag = 1;
var
sheSaid: Integer;
err: OSErr;
thisWorld: SysEnvRec;
theDevice: GDHandle;
{-----------}
function DepthAlert: Integer;
var
dummyInt: Integer;
alertHandle: AlertTHndl;
alertRect: Rect;
begin
UseResFile(editorResNum);
InitCursor;
alertHandle := AlertTHndl(Get1Resource('ALRT', depthAlertID));
if (alertHandle <> nil) then
begin
HNoPurge(Handle(alertHandle));
alertRect := alertHandle^^.boundsRect;
OffsetRect(alertRect, -alertRect.left, -alertRect.top);
dummyInt := (screenBits.bounds.right - alertRect.right) div 2;
OffsetRect(alertRect, dummyInt, 0);
dummyInt := (screenBits.bounds.bottom - alertRect.bottom) div 3;
OffsetRect(alertRect, 0, dummyInt);
alertHandle^^.boundsRect := alertRect;
HPurge(Handle(alertHandle));
end;
dummyInt := Alert(depthAlertID, nil);
DepthAlert := dummyInt;
end;
{-----------}
function SetDepth (gd: GDHandle; newDepth, whichFlags, newFlags: Integer): Integer;
inline
$203C, $000A, $0013, $AAA2;
{-----------}
begin
rightOffset := (ScreenBits.bounds.right - 512) div 2;
downOffset := (ScreenBits.bounds.bottom - 342) div 2;
err := SysEnvirons(1, thisWorld); {Check on the set up of the Mac game is on }
with thisWorld do
begin
if (machineType < 1) then {If less than a Mac 512KE (=1) then quit now!}
begin
GenericAlert(kErrMacPlusNeeded);
ExitToShell;
end;
if (systemVersion < $0602) then
begin
inhibitSound := TRUE;
GenericAlert(3);
end
else
inhibitSound := FALSE;
cantColor := not hasColorQD;
inColor := hasColorQD;
cantSwitch := (systemVersion < $0605);
hasSys7 := (systemVersion >= $0700);
if (inColor) then
begin
theDevice := GetMainDevice;
HLock(Handle(theDevice));
with theDevice^^.gdPMap^^ do
begin
wasDepth := pixelSize;
if ((pixelSize <> 4) and (pixelSize <> 1)) then
if (cantSwitch) then
begin
GenericAlert(kErr2Or16Colors);
ExitToShell;
end
else
begin
sheSaid := DepthAlert;
case sheSaid of
1:
err := SetDepth(theDevice, 4, GDTypeFlag, Color);
2:
begin
err := SetDepth(theDevice, 1, GDTypeFlag, Color);
inColor := FALSE;
end;
otherwise
ExitToShell;
end;
end;
if (pixelSize = 1) then
inColor := FALSE;
end;
HUnlock(Handle(theDevice));
end;
herKeyboard := keyBoardType;
case keyBoardType of {determine keycodes}
envMacPlusKbd:
begin
leftArrow := $46;
rightArrow := $42;
deleteKey := $33;
end;
envAExtendKbd, envStandADBKbd:
begin
leftArrow := $7B;
rightArrow := $7C;
deleteKey := $33;
end;
otherwise
begin
leftArrow := $2B;
rightArrow := $2F;
deleteKey := $0;
end;
end; {case}
end; {end - with}
hasWNE := (NGetTrapAddress(WNETrapNum, ToolTrap) <> NGetTrapAddress(unimplTrapNum, toolTrap));
end;
{---------------------}
procedure LoadCursors;
var
count: Integer;
tempByte: SignedByte;
begin
useColorCursor := inColor;
UseResFile(editorResNum);
ballList := acurHand(GetResource('acur', acurID));
if (ballList = nil) then
begin
GenericAlert(kErrLoadingRes);
Exit(LoadCursors);
end;
tempByte := HGetState(Handle(ballList));
HLock(Handle(ballList));
with ballList^^ do
begin
for count := 1 to kCursCount do
begin
if (useColorCursor) then
begin
ballC[count] := GetCCursor(HiWord(LongInt(ball[count])));
if (ballC[count] = nil) then
useColorCursor := FALSE;
end;
ball[count] := GetCursor(HiWord(LongInt(ball[count])));
if (ball[count] = nil) then
begin
GenericAlert(kErrLoadingRes);
whichBall := -1;
Exit(LoadCursors);
end;
end;
whichBall := 0;
end;
HSetState(Handle(ballList), tempByte);
end;
{---------------------}
procedure SetUpColors;
begin
SpinBall;
rgbBlack.red := 0;
rgbBlack.green := 0;
rgbBlack.blue := 0;
rgbWhite.red := -1;
rgbWhite.green := -1;
rgbWhite.blue := -1;
rgbYellow.red := -1;
rgbYellow.green := -1;
rgbYellow.blue := 0;
rgbViolet.red := -1;
rgbViolet.green := 0;
rgbViolet.blue := -1;
rgbRed.red := -1;
rgbRed.green := 0;
rgbRed.blue := 0;
rgbLtBlue.red := 0;
rgbLtBlue.green := -1;
rgbLtBlue.blue := -1;
rgbBrown.red := 22016;
rgbBrown.green := 11421;
rgbBrown.blue := 1316;
rgbLtBrown.red := -28457;
rgbLtBrown.green := 29024;
rgbLtBrown.blue := 14900;
rgbDkGray.red := 16384;
rgbDkGray.green := 16384;
rgbDkGray.blue := 16384;
end;
{---------------------}
procedure SetUpMainWndo;
begin
SpinBall;
SetRect(screenArea, 0, 0, 512, 322);
SetRect(wholeArea, 0, 0, 512, 342);
SetRect(nullRect, -500, -500, -499, -499);
SetRect(fullArea, -rightOffset, -downOffset, 512 + rightOffset, 342 + downOffset);
wholeRgn := NewRgn;
RectRgn(wholeRgn, wholeArea);
SpinBall;
{Init main window}
mainWndo := nil;
if (inColor) then
mainWndo := GetNewCWindow(mainWndoID, nil, WindowPtr(-1))
else
mainWndo := GetNewWindow(mainWndoID, nil, WindowPtr(-1));
if (mainWndo = nil) then
GenericAlert(kErrLoadingRes);
SetPort(GrafPtr(mainWndo));
MoveWindow(GrafPtr(mainWndo), rightOffset, downOffset, FALSE);
ShowWindow(GrafPtr(mainWndo));
SetWRefCon(mainWndo, 0);
ClipRect(wholeArea);
if (inColor) then
begin
mainPalette := GetNewPalette(mainWndoID);
SetPalette(mainWndo, mainPalette, TRUE);
end;
end;
{---------------------}
procedure SetUpMenus;
var
tempMenu: MenuHandle;
theErr: OSErr;
begin
SpinBall;
ClearMenuBar;
tempMenu := GetMenu(mApple);
if (tempMenu <> nil) then
begin
AddResMenu(tempMenu, 'DRVR');
InsertMenu(tempMenu, 0);
end
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
SpinBall;
tempMenu := GetMenu(mFile);
if (tempMenu <> nil) then
InsertMenu(tempMenu, 0)
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
SpinBall;
tempMenu := GetMenu(mEdit);
if (tempMenu <> nil) then
InsertMenu(tempMenu, 0)
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
SpinBall;
tempMenu := GetMenu(mSpecial);
if (tempMenu <> nil) then
InsertMenu(tempMenu, 0)
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
SpinBall;
tempMenu := GetMenu(mControls);
if (tempMenu <> nil) then
InsertMenu(tempMenu, -1)
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
SpinBall;
tempMenu := GetMenu(mWindows);
if (tempMenu <> nil) then
InsertMenu(tempMenu, 0)
else
begin
GenericAlert(kErrUnknownAtInit);
ExitToShell;
end;
if (hasSys7) then {add a Help menu item}
begin
theErr := HMGetHelpMenuHandle(tempMenu);
if (theErr = noErr) then
if (tempMenu <> nil) then
begin
AppendMenu(tempMenu, 'Room Editor Help');
iGlidersHelp := CountMItems(tempMenu);
end
else
begin
tempMenu := GetMenu(mWindows);
AppendMenu(tempMenu, '(-');
AppendMenu(tempMenu, 'Help');
end
else
begin
tempMenu := GetMenu(mWindows);
AppendMenu(tempMenu, '(-');
AppendMenu(tempMenu, 'Help');
end;
end
else
begin
AppendMenu(tempMenu, '(-');
AppendMenu(tempMenu, 'Help');
end;
SpinBall;
DrawMenuBar;
end;
{---------------------}
function NewBitMap (var theBitMap: BitMap; theRect: Rect): Ptr;
begin
with theBitMap, theRect do
begin
rowBytes := ((right - left + 15) div 16) * 2;
baseAddr := NewPtr(rowBytes * (bottom - top));
bounds := theRect;
if (MemError <> noErr) then
begin
GenericAlert(kErrNotEnoughMem);
NewBitMap := nil;
ExitToShell;
end
else
NewBitMap := baseAddr;
end;
end;
{---------------------}
procedure SetUpBitMaps;
begin
SpinBall;
{Init b&w Bitmaps}
{Init offscreen virgin map}
offVirginPort := GrafPtr(NewPtr(SizeOf(GrafPort)));
OpenPort(offVirginPort);
offVirginBits := NewBitMap(offVirginMap, wholeArea);
SetPortBits(offVirginMap);
ClipRect(wholeArea);
EraseRect(offVirginMap.bounds);
SpinBall;
{Init offscreen load map}
offLoadPort := GrafPtr(NewPtr(SizeOf(GrafPort)));
OpenPort(offLoadPort);
offLoadBits := NewBitMap(offLoadMap, wholeArea);
SetPortBits(offLoadMap);
ClipRect(wholeArea);
EraseRect(offLoadMap.bounds);
SpinBall;
{Init offscreen object map}
offPlayerPort := GrafPtr(NewPtr(SizeOf(GrafPort)));
OpenPort(offPlayerPort);
offPlayerBits := NewBitMap(offPlayerMap, wholeArea);
SetPortBits(offPlayerMap);
ClipRect(wholeArea);
EraseRect(offPlayerMap.bounds);
end;
{---------------------}
procedure SetUpPixMaps;
begin
SetPort(GrafPtr(mainWndo));
RGBForeColor(rgbBlack);
RGBBackColor(rgbWhite);
SpinBall;
virginCPtr := @virginCPort;
OpenCPort(virginCPtr);
theDepth := 4;
offRowBytes := ((((theDepth * (wholeArea.right - wholeArea.left)) + 15)) div 16) * 2;
sizeOfOff := LONGINT(wholeArea.bottom - wholeArea.top) * offRowBytes;
virginCBits := NewPtr(sizeOfOff);
if (virginCPtr = nil) then
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
with virginCPtr^.portPixMap^^ do
begin
baseAddr := virginCBits;
rowBytes := offRowBytes + $8000;
bounds := wholeArea;
end;
RGBForeColor(rgbBlack);
RGBBackColor(rgbWhite);
EraseRect(thePort^.portRect);
ClipRect(wholeArea);
SpinBall;
loadCPtr := @loadCPort;
OpenCPort(loadCPtr);
loadCBits := NewPtr(sizeOfOff);
if (loadCBits = nil) then
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
with loadCPtr^.portPixMap^^ do
begin
baseAddr := loadCBits;
rowBytes := offRowBytes + $8000;
bounds := wholeArea;
end;
RGBForeColor(rgbBlack);
RGBBackColor(rgbWhite);
EraseRect(thePort^.portRect);
ClipRect(wholeArea);
SpinBall;
objectCPtr := @objectCPort;
OpenCPort(objectCPtr);
objectCBits := NewPtr(sizeOfOff);
if (objectCBits = nil) then
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
with objectCPtr^.portPixMap^^ do
begin
baseAddr := objectCBits;
rowBytes := offRowBytes + $8000;
bounds := wholeArea;
end;
RGBForeColor(rgbBlack);
RGBBackColor(rgbWhite);
EraseRect(thePort^.portRect);
ClipRect(wholeArea);
end;
{---------------------}
procedure SetUpOffMask;
begin
SpinBall;
{Init offscreen mask map}
offMaskPort := GrafPtr(NewPtr(SizeOf(GrafPort)));
OpenPort(offMaskPort);
offMaskBits := NewBitMap(offMaskMap, wholeArea);
SetPortBits(offMaskMap);
ClipRect(wholeArea);
EraseRect(offMaskMap.bounds);
end;
{---------------------}
function DoOpenResFile: Boolean;
var
dlgOrigin: Point;
theTypeList: SFTypeList;
theReply: SFReply;
begin
SpinBall;
DoOpenResFile := FALSE;
SetPt(dlgOrigin, dlgLeft + rightOffset, dlgTop + downOffset);
theTypeList[0] := 'GLbk';
SFGetFile(dlgOrigin, '', nil, 1, theTypeList, nil, theReply);
with theReply do
begin
if (good) then
begin
resourceName := fName;
DoOpenResFile := TRUE;
end;
end;
end;
{-----------------}
procedure GetPrefs;
type
prefType = record
resName: string[32];
controlIs: Integer;
leftIs, rightIs, energyIs, bandIs: Integer;
buttonIs, restoreIs: Boolean;
leftNameIs, rightNameIs, energyNameIs, bandNameIs: string[12];
isKeyBoard: Integer;
end;
prefPtr = ^prefType;
prefHand = ^prefPtr;
pictDeepPt = ^Integer;
pictDeepHn = ^pictDeepPt;
var
theirPrefs: prefHand;
pictDeep: pictDeepHn;
refNumber, tempVol: Integer;
satisfactory: Boolean;
{-----------------}
procedure DefaultControls;
begin
leftKey := defaultLeftKey;
rightKey := defaultRightKey;
energyKey := defaultEnergyKey;
bandKey := defaultBandKey;
buttonFires := FALSE;
leftName := defaultLeftName;
rightName := defaultRightName;
energyName := defaultEnergyName;
bandName := defaultBandName;
end;
{-----------------}
procedure Default;
begin
if (inColor) then
resourceName := 'Art 16'
else
resourceName := 'Art 2';
controlMethod := absMouse;
restoreColor := TRUE;
DefaultControls;
end;
{-----------------}
begin
SpinBall;
UseResFile(editorResNum);
theirPrefs := prefHand(NewHandle(SIZEOF(prefType)));
if (theirPrefs = nil) then
begin
Default;
Exit(GetPrefs);
end;
Handle(theirPrefs) := GetResource('Gprf', 128);
if ((ResError = noErr) and (theirPrefs <> nil)) then
begin
HLock(Handle(theirPrefs));
with theirPrefs^^ do
begin
resourceName := resName;
controlMethod := controlIs;
leftKey := leftIs;
rightKey := rightIs;
energyKey := energyIs;
bandKey := bandIs;
buttonFires := buttonIs;
restoreColor := restoreIs;
leftName := leftNameIs;
rightName := rightNameIs;
energyName := energyNameIs;
bandName := bandNameIs;
if (isKeyBoard <> herKeyBoard) then
DefaultControls;
end;
HUnlock(Handle(theirPrefs));
ReleaseResource(Handle(theirPrefs));
end
else
begin
Default;
end;
SpinBall;
if ((controlMethod < holdKey) or (controlMethod > relMouse)) then
controlMethod := absMouse;
CheckItem(GetMenu(mControls), controlMethod, TRUE);
if (restoreColor) then
SetItem(GetMenu(mSpecial), iRestoreDeep, 'Depth Restore is On')
else
SetItem(GetMenu(mSpecial), iRestoreDeep, 'Depth Restore is Off');
if ((cantColor) or (cantSwitch)) then
DisableItem(GetMenu(mSpecial), iRestoreDeep);
refNumber := OpenResFile(resourceName); {test to see if res legit}
if (refNumber = -1) then
begin
if (ResError = resFNotFound) then {Hmmm. Maybe color depth has changed}
begin
if (inColor) then
resourceName := 'Color Art' {Try the default color name}
else
resourceName := 'B&W Art'; {Or default B&W file name}
refNumber := OpenResFile(resourceName); {test to see if res legit yet}
if (refNumber = -1) then
begin
UseResFile(editorResNum); {back to Editor res file}
GenericAlert(kErrGraphicsNotFound); {bitch about all this}
if (not DoOpenResFile) then
begin
GenericAlert(kErrExitSansGraphics);
ExitToShell;
end;
refNumber := OpenResFile(resourceName);
end;
end
else
begin
UseResFile(editorResNum); {back to Editor res file}
GenericAlert(kErrGraphicsNotFound); {bitch about all this}
if (not DoOpenResFile) then
begin
GenericAlert(kErrExitSansGraphics);
ExitToShell;
end;
refNumber := OpenResFile(resourceName);
end;
end;
satisfactory := FALSE;
repeat
UseResFile(refNumber);
pictDeep := pictDeepHn(NewHandle(SIZEOF(Integer)));
if (pictDeep = nil) then
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
Handle(pictDeep) := GetResource('deep', 128);
if ((ResError = noErr) and (pictDeep <> nil)) then
begin
HLock(Handle(pictDeep));
if (inColor) then
begin
if (pictDeep^^ <> $0004) then
begin
if (pictDeep <> nil) then
begin
HUnlock(Handle(pictDeep));
ReleaseResource(Handle(pictDeep));
pictDeep := nil;
end;
CloseResFile(refNumber);
if (resourceName <> 'Color Art') then
begin
resourceName := 'Color Art';
refNumber := OpenResFile(resourceName);
end
else
begin
GenericAlert(21);
if (not DoOpenResFile) then
begin
GenericAlert(kErrExitSansGraphics);
ExitToShell;
end;
refNumber := OpenResFile(resourceName);
end;
end
else
satisfactory := TRUE;
end
else {were in b&w mode}
begin
if (pictDeep^^ <> $0001) then
begin
if (pictDeep <> nil) then
begin
HUnlock(Handle(pictDeep));
ReleaseResource(Handle(pictDeep));
pictDeep := nil;
end;
CloseResFile(refNumber);
if (resourceName <> 'B&W Art') then
begin
resourceName := 'B&W Art';
refNumber := OpenResFile(resourceName);
end
else
begin
GenericAlert(22);
if (not DoOpenResFile) then
begin
GenericAlert(20);
ExitToShell;
end;
refNumber := OpenResFile(resourceName);
end;
end
else
satisfactory := TRUE;
end;
end
else
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
if (pictDeep <> nil) then
begin
HUnlock(Handle(pictDeep));
ReleaseResource(Handle(pictDeep));
pictDeep := nil;
end;
until satisfactory;
CloseResFile(refNumber);
UseResFile(editorResNum);
end;
{---------------------}
procedure LoadPICTs;
var
refNumber: Integer;
wasPort: GrafPtr;
begin
SpinBall;
refNumber := OpenResFile(resourceName);
if (refNumber = -1) then
begin
UseResFile(editorResNum);
GenericAlert(kErrGraphicsNotFound);
if (not DoOpenResFile) then
ExitToShell;
refNumber := OpenResFile(resourceName);
if (refNumber = -1) then
begin
GenericAlert(kErrGraphicsNotFound);
ExitToShell;
end;
end;
UseResFile(refNumber);
SpinBall;
GetPort(wasPort);
if (inColor) then {load the objects up}
SetPort(GrafPtr(objectCPtr))
else
SetPort(offPlayerPort);
thePict := GetPicture(objectPictID);
if (thePict^ <> nil) then
begin
tempByte := HGetState(Handle(thePict));
MoveHHi(Handle(thePict));
HLock(Handle(thePict));
DrawPicture(thePict, wholeArea);
HSetState(Handle(thePict), tempByte);
end
else
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
ReleaseResource(Handle(thePict));
SpinBall;
SetPort(offMaskPort);
thePict := GetPicture(maskPictID); {load the mask up}
if (thePict^ <> nil) then
begin
tempByte := HGetState(Handle(thePict));
MoveHHi(Handle(thePict));
HLock(Handle(thePict));
DrawPicture(thePict, wholeArea);
HSetState(Handle(thePict), tempByte);
end
else
begin
GenericAlert(kErrNotEnoughMem);
ExitToShell;
end;
ReleaseResource(Handle(thePict));
SpinBall;
SetPort(wasPort);
CloseResFile(refNumber);
UseResFile(editorResNum);
end;
{---------------------}
begin
editorResNum := CurResFile;
SetApplLimit(Ptr(LongInt(GetApplLimit) - StackSize));
MaxApplZone;
for index := 1 to 10 do
MoreMasters;
InitGraf(@thePort);
InitFonts;
InitWindows;
InitMenus;
TEInit;
InitDialogs(nil);
InitCursor;
for index := 1 to 3 do
ignore := EventAvail(EveryEvent, theEvent);
inBackground := FALSE;
SetCursor(GetCursor(WatchCursor)^^);
CheckOurEnvirons;
LoadCursors;
SpinBall;
if (inColor) then
SetUpColors;
SpinBall;
SetUpMenus;
SpinBall;
SetUpMainWndo;
SpinBall;
if (inColor) then
SetUpPixMaps
else
SetUpBitMaps;
SpinBall;
SetUpOffMask;
SpinBall;
GetPrefs;
SpinBall;
LoadPICTs;
SpinBall;
doneFlag := FALSE;
soundOn := not inhibitSound;
playing := FALSE;
pausing := FALSE;
roomScrapDirty := FALSE;
objectScrapDirty := FALSE;
fileIsOpen := FALSE;
autoHide := FALSE;
lightsOut := FALSE;
bandBorne := TRUE;
lockIt := FALSE;
binaryFlip := 1;
GetDateTime(RandSeed);
FlushRoom(thisRoom);
setOTools := 0;
toolWndo := nil;
housesName := 'untitled';
marqueeTime := FALSE;
marqueeIndex := 0;
for index := 0 to 4 do
begin
SpinBall;
GetIndPattern(marqueePat[index], 128, index + 1);
end;
for index := 0 to 7 do
SetRect(tileRects[index], index * 64, 0, (index + 1) * 64, 342);
SetRect(iconRect[0], 5, 55, 37, 87);
SetRect(iconRect[1], 41, 55, 73, 87);
SetRect(iconRect[2], 5, 90, 37, 122);
SetRect(iconRect[3], 41, 90, 73, 122);
SetRect(iconRect[4], 5, 125, 37, 157);
SetRect(iconRect[5], 41, 125, 73, 157);
SpinBall;
SetRect(selectRect[0], 8, 6, 24, 22);
SetRect(selectRect[1], 31, 6, 47, 22);
SetRect(selectRect[2], 54, 6, 70, 22);
SetRect(selectRect[3], 8, 28, 24, 44);
SetRect(selectRect[4], 31, 28, 47, 44);
SetRect(selectRect[5], 54, 28, 70, 44);
SetRect(shadoRct[0], 256, 0, 304, 11);
SetRect(shadoRct[1], 256, 12, 304, 23);
SpinBall;
SetRect(glideRct[0], 0, 0, 48, 20); {right forward}
SetRect(glideRct[1], 0, 21, 48, 41); {right tipped}
SetRect(glideRct[2], 0, 42, 48, 62); {left forward}
SetRect(glideRct[3], 0, 63, 48, 83); {left tipped}
SetRect(glideRct[4], 208, 0, 256, 20); {turn endpoint}
SetRect(glideRct[5], 208, 21, 256, 41); { " }
SetRect(glideRct[6], 208, 42, 256, 62); { " }
SetRect(glideRct[7], 208, 63, 256, 83); { " }
SetRect(glideRct[8], 208, 84, 256, 104); { " }
SetRect(glideRct[9], 208, 105, 256, 125);{turn endpoint}
SetRect(glideRct[10], 414, 53, 462, 73); {glider fading masks right}
SetRect(glideRct[11], 414, 74, 462, 94);
SetRect(glideRct[12], 414, 95, 462, 115);
SetRect(glideRct[13], 414, 116, 462, 136);
SetRect(glideRct[14], 414, 137, 462, 157);
SetRect(glideRct[15], 414, 158, 462, 178);
SetRect(glideRct[16], 414, 179, 462, 199);
SetRect(glideRct[17], 463, 53, 511, 73); {glider fading masks left}
SetRect(glideRct[18], 463, 74, 511, 94);
SetRect(glideRct[19], 463, 95, 511, 115);
SetRect(glideRct[20], 463, 116, 511, 136);
SetRect(glideRct[21], 463, 137, 511, 157);
SetRect(glideRct[22], 463, 158, 511, 178);
SetRect(glideRct[23], 463, 179, 511, 199);
SetRect(glideRct[24], 265, 24, 313, 60); {burning}
SetRect(glideRct[25], 265, 61, 313, 97);
SetRect(glideRct[26], 265, 98, 313, 134);
SetRect(glideRct[27], 265, 135, 313, 171);
SpinBall;
nextPhase[1, 0] := 10;
nextPhase[1, 1] := 11;
nextPhase[1, 2] := 10;
nextPhase[1, 3] := 11;
nextPhase[1, 4] := 12;
nextPhase[1, 5] := 11;
nextPhase[1, 6] := 12;
nextPhase[1, 7] := 13;
nextPhase[1, 8] := 12;
nextPhase[1, 9] := 13;
nextPhase[1, 10] := 14;
nextPhase[1, 11] := 13;
nextPhase[1, 12] := 14;
nextPhase[1, 13] := 15;
nextPhase[1, 14] := 14;
nextPhase[1, 15] := 15;
nextPhase[1, 16] := 16;
nextPhase[2, 0] := 16;
nextPhase[2, 1] := 15;
nextPhase[2, 2] := 16;
nextPhase[2, 3] := 15;
nextPhase[2, 4] := 14;
nextPhase[2, 5] := 15;
nextPhase[2, 6] := 14;
nextPhase[2, 7] := 13;
nextPhase[2, 8] := 14;
nextPhase[2, 9] := 13;
nextPhase[2, 10] := 12;
nextPhase[2, 11] := 13;
nextPhase[2, 12] := 12;
nextPhase[2, 13] := 11;
nextPhase[2, 14] := 12;
nextPhase[2, 15] := 11;
nextPhase[2, 16] := 10;
nextPhase[3, 0] := 4;
nextPhase[3, 1] := 4;
nextPhase[3, 2] := 5;
nextPhase[3, 3] := 5;
nextPhase[3, 4] := 6;
nextPhase[3, 5] := 6;
nextPhase[3, 6] := 7;
nextPhase[3, 7] := 7;
nextPhase[3, 8] := 8;
nextPhase[3, 9] := 8;
nextPhase[3, 10] := 9;
nextPhase[3, 11] := 9;
nextPhase[4, 0] := 9;
nextPhase[4, 1] := 9;
nextPhase[4, 2] := 8;
nextPhase[4, 3] := 8;
nextPhase[4, 4] := 7;
nextPhase[4, 5] := 7;
nextPhase[4, 6] := 6;
nextPhase[4, 7] := 6;
nextPhase[4, 8] := 5;
nextPhase[4, 9] := 5;
nextPhase[4, 10] := 4;
nextPhase[4, 11] := 4;
SpinBall;
SetRect(srcRect[celVnt], 0, 84, 48, 96);
SetRect(srcRect[celDct], 0, 97, 48, 110);
SetRect(srcRect[flrVnt], 0, 111, 48, 124);
SetRect(srcRect[paper], 0, 125, 48, 146);
SetRect(srcRect[toastr], 0, 147, 38, 174);
SetRect(srcRect[60], 304, 84, 336, 115); {toast 1}
SetRect(srcRect[61], 304, 116, 336, 147); {toast 2}
SetRect(srcRect[62], 304, 148, 336, 179); {toast 3}
SetRect(srcRect[63], 304, 180, 336, 211); {toast 4}
SetRect(srcRect[64], 304, 212, 336, 243); {toast 5}
SetRect(srcRect[65], 304, 244, 336, 275); {toast 6}
SetRect(srcRect[teaKtl], 0, 175, 41, 205);
SetRect(srcRect[lftFan], 0, 206, 35, 261);
SetRect(srcRect[ritFan], 0, 262, 35, 316);
SetRect(srcRect[table], 48, 23, 112, 45);
SetRect(srcRect[shredr], 48, 46, 112, 70);
SetRect(srcRect[books], 48, 71, 112, 126);
SetRect(srcRect[clock], 112, 0, 144, 29);
SetRect(srcRect[candle], 112, 30, 144, 51);
SetRect(srcRect[rbrBnd], 112, 52, 144, 75);
SetRect(srcRect[ball], 112, 76, 144, 108);
SetRect(srcRect[fshBwl], 112, 109, 144, 138);
SetRect(srcRect[66], 144, 109, 160, 125); {fish 1}
SetRect(srcRect[67], 144, 126, 160, 142); {fish 2}
SetRect(srcRect[68], 144, 143, 160, 159); {fish 3}
SetRect(srcRect[69], 144, 160, 160, 176); {fish 4}
SetRect(srcRect[grease], 112, 139, 144, 168);
SetRect(srcRect[58], 112, 169, 144, 198); {grease falling 1}
SetRect(srcRect[59], 112, 199, 144, 228); {grease fallen}
SetRect(srcRect[litSwt], 142, 0, 160, 26);
SetRect(srcRect[thermo], 144, 27, 162, 54);
SetRect(srcRect[outlet], 160, 264, 192, 289);
SetRect(srcRect[51], 160, 290, 192, 315); {outlet sparking 1}
SetRect(srcRect[52], 160, 316, 192, 341); {outlet sparking 2}
SetRect(srcRect[pwrSwt], 144, 82, 162, 108);
SetRect(srcRect[guitar], 48, 127, 112, 297);
SetRect(srcRect[drip], 192, 42, 208, 55);
SetRect(srcRect[shelf], 192, 71, 208, 100);
SetRect(srcRect[basket], 448, 270, 511, 341);
SetRect(srcRect[paintg], 408, 53, 510, 146);
SetRect(srcRect[battry], 144, 55, 160, 81);
SetRect(srcRect[macTsh], 256, 209, 301, 267);
SetRect(srcRect[upStar], 0, 0, 161, 254);
SetRect(srcRect[dnStar], 0, 0, 161, 254);
SetRect(srcRect[48], 144, 189, 160, 201); {candle flame}
SetRect(srcRect[49], 144, 202, 160, 214); {candle flame}
SetRect(srcRect[50], 144, 215, 160, 227); {candle flame}
SetRect(srcRect[53], 192, 0, 208, 13); {drip}
SetRect(srcRect[54], 192, 14, 208, 27); {drip}
SetRect(srcRect[55], 192, 28, 208, 41); {drip}
SetRect(srcRect[56], 192, 42, 208, 55); {drip}
SetRect(srcRect[57], 192, 56, 208, 70); {drip}
SpinBall;
toolIcnID[0] := 400;
toolIcnID[1] := 401;
toolIcnID[2] := 402;
toolIcnID[3] := 403;
toolIcnID[4] := 404;
toolIcnID[5] := 405;
toolIcnID[6] := 406;
toolIcnID[8] := 408;
toolIcnID[9] := 409;
toolIcnID[10] := 410;
toolIcnID[11] := 411;
toolIcnID[12] := 412;
toolIcnID[13] := 413;
toolIcnID[16] := 416;
toolIcnID[17] := 417;
toolIcnID[18] := 418;
toolIcnID[19] := 419;
toolIcnID[20] := 420;
toolIcnID[21] := 421;
toolIcnID[24] := 424;
toolIcnID[25] := 425;
toolIcnID[26] := 426;
toolIcnID[27] := 427;
toolIcnID[28] := 428;
toolIcnID[29] := 429;
toolIcnID[32] := 432;
toolIcnID[33] := 433;
toolIcnID[34] := 434;
toolIcnID[35] := 435;
toolIcnID[36] := 436;
toolIcnID[37] := 437;
toolIcnID[40] := 440;
toolIcnID[41] := 441;
toolIcnID[42] := 442;
toolIcnID[43] := 443;
toolIcnID[44] := 444;
toolIcnID[45] := 445;
InitCursor;
end;
{=================================}
end.