mirror of
https://github.com/softdorothy/Glider4.git
synced 2025-02-18 19:30:23 +00:00
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.
1 line
10 KiB
OpenEdge ABL
Executable File
1 line
10 KiB
OpenEdge ABL
Executable File
unit Globals;
|
||
|
||
interface
|
||
uses
|
||
Palettes;
|
||
|
||
const
|
||
kGlideVersion = $0100; {version of house format}
|
||
|
||
kStackSize = 24576; {must be even - stack size}
|
||
kSleep = 1; {sleep time in Ticks}
|
||
kSuspendResumeBit = $0001; {for WNE}
|
||
kResuming = 1; {for WNE}
|
||
kSecondaryAddr = $3F2700; {address of alternate page buffer}
|
||
kSlowScoreIncrement = 17; {fast machine extend score-odometer}
|
||
kFastScoreIncrement = 37; {slow machine race score-odometer}
|
||
kMouseSlop = 1; {who knows}
|
||
kMinBassLoop = 14; {quickest pace of duh-dum}
|
||
kBassFract = 8; {smaller = slower bass @ 1st / larger = quicker}
|
||
kBonusTimeToBeat = 256; {number of passes for time bonus}
|
||
kCeilingVert = 24; {absolute ceiling in pixels}
|
||
kFloorVert = 325; {absolute floor in pixels}
|
||
kFloorLimit = kFloorVert + 5;
|
||
kMaxThrust = 5; {maximum speed (in pixels) of glider}
|
||
kLastHelpScreen = 7; {number of help screens}
|
||
kCursCount = 12; {number of frames for animated cursor}
|
||
|
||
rAcurID = 128; {resource ID numbers}
|
||
rMainWndoID = 128;
|
||
rAlertID = 128;
|
||
rFileAlertID = 129;
|
||
rSoundDlgID = 131;
|
||
rQuitNoSaveAlertID = 132;
|
||
rDepthAlertID = 136;
|
||
rCustomKeysID = 137;
|
||
rCustGetID = 256;
|
||
rAlertStrIDs = 128;
|
||
rFileStrIDs = 129;
|
||
rMiscStrID = 130;
|
||
rDemoStrIDs = 131;
|
||
rObjectPictID = 128;
|
||
rMaskPictID = 129;
|
||
rFarmPict = 130;
|
||
rSidePict1 = 140;
|
||
rSidePict2 = 141;
|
||
rIdleID = 200;
|
||
rColorIdleID = 210;
|
||
rHelpBasePictID = 1000;
|
||
|
||
kDefaultLeftKey = $2B; {default control keys}
|
||
kDefaultRightKey = $2F;
|
||
kDefaultEnergyKey = $24;
|
||
kDefaultBandKey = $31;
|
||
kDefaultLeftName = ', key'; {default names for control keys}
|
||
kDefaultRightName = '. key';
|
||
kDefaultEnergyName = 'return';
|
||
kDefaultBandName = 'space';
|
||
kTabKey = $09; {misc. ascii codes}
|
||
kReturnKey = $0D;
|
||
kSpaceBar = $20;
|
||
kSKeyMap = $01; {misc. keymap codes}
|
||
kQKeyMap = $0C;
|
||
kEKeyMap = $0E;
|
||
kReturnKeyMap = $24;
|
||
kTabKeyMap = $30;
|
||
kControlKeyMap = $3B;
|
||
kCommandKeyMap = $37;
|
||
kShiftKey = $38;
|
||
|
||
kErrUnaccounted = 1; {error codes}
|
||
kErrMacPlusNeeded = 2; {these correspond with STR#}
|
||
kErr2Or16Colors = 4; {resources for the TEXT part}
|
||
kErrNotEnoughMem = 5; {of the message}
|
||
kErrUnknownAtInit = 6;
|
||
kErrMemLow = 7;
|
||
kErrGraphicsNotFound = 8;
|
||
kErrGraphicLoad = 9;
|
||
kErrSavingPrefs = 10;
|
||
kErrAirChange = 11;
|
||
kErrLoadingRes = 12;
|
||
kErrFileExists = 13;
|
||
kErrNothingToPrint = 14;
|
||
kErrWrongHouseVers = 15;
|
||
kErrLoadingDfltHouse = 16;
|
||
kErrLoadingPrefs = 17;
|
||
kErrNotDemoHouse = 18;
|
||
kErrExitSansGraphics = 19;
|
||
kErrGraphicsAre2Bit = 20;
|
||
kErrGraphicsAre16Bit = 21;
|
||
kErrGameOldVers = 22;
|
||
kErrExitSansHouse = 23;
|
||
kErrHouseModified = 24;
|
||
kErrBackgroundMusic = 25;
|
||
kErrDepthSwitched = 26;
|
||
kErrStartUpWrongType = 27;
|
||
kErrNoSounds = 28;
|
||
kErrVolLocked = 29;
|
||
kErrMissionINIT = 30;
|
||
kErrNotFirstHouse = 31;
|
||
kErrDemoRefuseHouse = 32;
|
||
kErrNewKeyboard = 33;
|
||
|
||
kHouseType = 0;
|
||
kArtType = 1;
|
||
kGameType = 2;
|
||
|
||
nulObj = 0; {room object codes}
|
||
{furniture}
|
||
table = 1;
|
||
shelf = 2;
|
||
books = 3;
|
||
cabnet = 4;
|
||
extRct = 5;
|
||
obsRct = 6;
|
||
{blowers}
|
||
flrVnt = 8;
|
||
celVnt = 9;
|
||
celDct = 10;
|
||
candle = 11;
|
||
lftFan = 12;
|
||
ritFan = 13;
|
||
{table objects}
|
||
clock = 16;
|
||
paper = 17;
|
||
grease = 18;
|
||
bnsRct = 19;
|
||
battry = 20;
|
||
rbrBnd = 21;
|
||
{wall objects}
|
||
litSwt = 24;
|
||
outlet = 25;
|
||
thermo = 26;
|
||
shredr = 27;
|
||
pwrSwt = 28;
|
||
guitar = 29;
|
||
{animate objects}
|
||
drip = 32;
|
||
toastr = 33;
|
||
ball = 34;
|
||
fshBwl = 35;
|
||
teaKtl = 36;
|
||
window = 37;
|
||
{jewelry}
|
||
paintg = 40;
|
||
mirror = 41;
|
||
basket = 42;
|
||
macTsh = 43;
|
||
upStar = 44;
|
||
dnStar = 45;
|
||
|
||
normal = 0; {glider situational modes}
|
||
fadingIn = 1;
|
||
fadingOut = 2;
|
||
turnRt2Lf = 3;
|
||
turnLf2Rt = 4;
|
||
burning = 5;
|
||
ascending = 6;
|
||
descending = 7;
|
||
shredding = 8;
|
||
{objects effects codes}
|
||
ignoreIt = 0; {null or unknown objects}
|
||
crashIt = 1; {tables, shelves, cabinets, etc...}
|
||
liftIt = 2; {floor vents}
|
||
dropIt = 3; {ceiling blower, some ducts}
|
||
moveIt = 4; {exit rects/suction ceiling ducts}
|
||
burnIt = 5; {candle if too close}
|
||
turnItLeft = 6; {left fan}
|
||
turnItRight = 7; {right fan}
|
||
awardIt = 8; {clocks}
|
||
extraIt = 9; {folded pieces of paper}
|
||
slideIt = 10; {grease fallen}
|
||
trickIt = 11; {bonus rect}
|
||
energizeIt = 12; {battery}
|
||
bandIt = 13; {rubber bands}
|
||
playIt = 14; {guitar}
|
||
lightIt = 15; {light switch}
|
||
zapIt = 16; {wall outlet}
|
||
airOnIt = 17; {thermostats}
|
||
shredIt = 18; {shredder}
|
||
toggleIt = 19; {power switch}
|
||
weightIt = 20; {?}
|
||
spillIt = 21; {grease standing up}
|
||
ascendIt = 22; {up stair case}
|
||
descendIt = 23; {down stair case}
|
||
steamIt = 24;
|
||
|
||
highScoreMode = 0; {demo mode numbers}
|
||
balloonMode = 1;
|
||
copterMode = 2;
|
||
dartMode = 3;
|
||
controlMode = 4;
|
||
tabMode = 5;
|
||
adMode = 6;
|
||
editorMode = 7;
|
||
colorMusicMode = 8;
|
||
ventCandleMode = 9;
|
||
bandBatteryMode = 10;
|
||
paperClockMode = 11;
|
||
lastDemo = 11;
|
||
helpScreensMode = 99;
|
||
|
||
iNothing = 0;
|
||
mApple = 128; {Menu resource ID}
|
||
iAbout = 1; {Menu items}
|
||
|
||
mGame = 129; {Menu resource ID}
|
||
iBegin = 1; {Menu items<EFBFBD>}
|
||
iLoadHouse = 2;
|
||
iEndGame = 3;
|
||
iLoadGame = 5;
|
||
iSaveGame = 6;
|
||
iSaveGameAs = 7;
|
||
iQuit = 9;
|
||
|
||
mOption = 130; {Menu resource ID}
|
||
iControls = 1; {Menu items<EFBFBD>}
|
||
iSound = 2;
|
||
iShowAir = 3;
|
||
iRestoreDeep = 4;
|
||
iHiScores = 6;
|
||
iHelp = 8;
|
||
|
||
mControls = 131; {Menu resource ID}
|
||
iHoldKeyboard = 1; {Menu items<EFBFBD>}
|
||
iDropKeyboard = 2;
|
||
iAbsMouse = 3;
|
||
iRelMouse = 4;
|
||
iConfigure = 6;
|
||
|
||
whoCares = 0; {place where entered room}
|
||
topOfRoom = 1;
|
||
bottomOfRoom = 2;
|
||
leftOfRoom = 3;
|
||
rightOfRoom = 4;
|
||
|
||
kWhistleSound = 13;
|
||
kTapSound = 27;
|
||
kCRSound = 28;
|
||
kMusicSound = 29; {ID of music sound}
|
||
kDuhDumSound = 30; {ID of bass beat}
|
||
|
||
|
||
type
|
||
objectData = record
|
||
objectIs: Integer;
|
||
boundRect: Rect;
|
||
amount: Integer;
|
||
extra: Integer;
|
||
isOn: Boolean;
|
||
end;
|
||
|
||
roomData = record
|
||
roomName: string[24];
|
||
numberOObjects: Integer;
|
||
backPictID: Integer;
|
||
tileOrder: array[0..7] of Integer;
|
||
leftOpen, rightOpen: Boolean;
|
||
animateKind: Integer;
|
||
animateNumber: Integer;
|
||
animateDelay: LongInt;
|
||
conditionCode: Integer;
|
||
theObjects: array[1..16] of objectData;
|
||
end;
|
||
|
||
houseRec = record
|
||
version: Integer;
|
||
numberORooms: Integer;
|
||
timeStamp: LongInt;
|
||
hiScores: array[0..19] of LongInt;
|
||
hiLevel: array[0..19] of Integer;
|
||
hiName: array[0..19] of string[24];
|
||
hiRoom: array[0..19] of string[24];
|
||
pictFile: string[32];
|
||
nextFile: string[32];
|
||
firstFile: string[32];
|
||
theRooms: array[1..40] of roomData;
|
||
end;
|
||
|
||
gliderRec = record
|
||
destRect, oldRect, wholeRect: Rect;
|
||
shadoDest, oldShado, wholeShado: Rect;
|
||
touchRect: Rect;
|
||
timeStamp: LongInt;
|
||
mode, phase: Integer;
|
||
srcNum: Integer;
|
||
forVel: Integer;
|
||
mass: Integer;
|
||
bands, energy: Integer;
|
||
isRight, isForward: Boolean;
|
||
end;
|
||
|
||
animateRec = record
|
||
destRect, wholeRect, oldRect: Rect;
|
||
horiOff, vertOff: Integer;
|
||
kind, phase: Integer;
|
||
tickStamp, delay: LongInt;
|
||
unSeen: Boolean;
|
||
end;
|
||
|
||
cycleRec = record
|
||
holdRect, wholeRect, oldRect: Rect;
|
||
tiedTo, kindIs, phase: Integer;
|
||
reset, position: LongInt;
|
||
accel, velocity: Integer;
|
||
end;
|
||
|
||
bandRec = record
|
||
dest, whole, old: Rect;
|
||
phase, velocity: Integer;
|
||
end;
|
||
|
||
scoreRec = record
|
||
rank: Integer;
|
||
changed: Boolean;
|
||
end;
|
||
|
||
pointRec = record
|
||
whereR: Rect;
|
||
tickStamp: LongInt;
|
||
saysWhat: string[16];
|
||
out: Boolean;
|
||
end;
|
||
|
||
lightningRec = record
|
||
theBolts: array[1..3, 0..7, 0..1] of Integer;
|
||
whichBolt, whatPhase: Integer;
|
||
whatTime: LongInt;
|
||
end;
|
||
|
||
BitMapPtr = ^BitMap;
|
||
IntPtr = ^Integer;
|
||
LongintPtr = ^Longint;
|
||
|
||
acur = record
|
||
whichBall: LongInt;
|
||
ball: array[1..kCursCount] of CursHandle;
|
||
end;
|
||
acurPtr = ^acur;
|
||
acurHand = ^acurPtr;
|
||
|
||
var
|
||
theEvent: EventRecord;
|
||
|
||
mainWndo: WindowPtr;
|
||
mainPalette: PaletteHandle;
|
||
wholeArea, fullArea, nullRect, smScoreRect, lgScoreRect: Rect;
|
||
wholeRgn: RgnHandle;
|
||
offMaskMap, offVirginMap, offLoadMap, offPlayerMap, offReserveMap: BitMap;
|
||
offMaskPort, offVirginPort, offLoadPort, offPlayerPort, offReservePort: GrafPtr;
|
||
offMaskBits, offVirginBits, offLoadBits, offPlayerBits, offReserveBits: Ptr;
|
||
virginCPort, loadCPort, objectCPort, reserveCPort: CGrafPort;
|
||
virginCPtr, loadCPtr, objectCPtr, reserveCPtr: CGrafPtr;
|
||
virginCBits, loadCBits, objectCBits, reserveCBits: Ptr;
|
||
rgbBlack, rgbWhite, rgbLtBlue, rgbRed, rgbBlue, rgbLtGreen: RGBColor;
|
||
rgbYellow, rgbViolet, rgbBrown, rgbLtBrown, rgbDkGray: RGBColor;
|
||
noCursor: CursHandle;
|
||
|
||
thisHouse: houseRec;
|
||
theKeys: KeyMap;
|
||
theErr: OSErr;
|
||
|
||
currentBall: Integer;
|
||
ballList: acurHand;
|
||
ballC: array[1..kCursCount] of CCrsrHandle;
|
||
|
||
theAnimates: array[1..16] of animateRec;
|
||
animateRct: array[0..2, -1..16] of Rect;
|
||
cycleObjects: array[1..16] of cycleRec;
|
||
|
||
floatPoints: pointRec;
|
||
|
||
theGlider: GliderRec;
|
||
roomVisits: array[1..40] of Boolean;
|
||
glideRct: array[0..27] of Rect;
|
||
shadoRct: array[0..1] of Rect;
|
||
nextPhase: array[1..4, 0..16] of Integer;
|
||
|
||
theBand: BandRec;
|
||
bandRct: array[0..2] of Rect;
|
||
|
||
roomScore, suppScore, rollScore, loopsThruRoom, workingGameNumber: LongInt;
|
||
scoreList: scoreRec;
|
||
|
||
rightOffset, downOffset, gliderResNum, wasSndVolume: Integer;
|
||
controlMethod, demoMode, demoCount, wasDepth: Integer;
|
||
liftAmount, mortals, shiftAmount, sideYouCantExit: Integer;
|
||
leftKey, rightKey, energyKey, bandKey, scoreIncrement: Integer;
|
||
roomAt, roomsPassed, nObjects, binaryFlip: Integer;
|
||
gameNumber, houseNumber, wasMBarHeight: Integer;
|
||
houseVolNum, gameVolNum, resVolNum, bassLoop, playBassTime: Integer;
|
||
nAnimates, nCycleObs, herKeyBoard, iGlidersHelp: Integer;
|
||
|
||
leftName, rightName, energyName, bandName: string[12];
|
||
playerName: string[24];
|
||
musicName, gameName, resourceName: string[32];
|
||
firstFileName, defaultHouse, housesName: string[32];
|
||
mirrorRgn, windowRgn, toastRgn: RgnHandle;
|
||
theLightning: LightningRec;
|
||
|
||
tileRects: array[0..7] of Rect;
|
||
srcRect: array[0..69] of Rect;
|
||
eventRect, reserveRects: array[0..16] of Rect;
|
||
eventKind: array[0..16, 0..2] of LongInt;
|
||
|
||
windowOpen, hasWindow, leftIsOpen, rightIsOpen, enteredLeft: Boolean;
|
||
cantSwitch, airVisible, hasMirror, hasToast, lightsOut, airOut: Boolean;
|
||
bandBorne, cantColor, soundOn, musicOn, inhibitSound, hasSys7: Boolean;
|
||
buttonFires, cantMusic, smsIsActive, doneFlag, inColor: Boolean;
|
||
inBackground, playing, pausing, hasWNE, restoreColor, refuseHigh: Boolean;
|
||
scoreIsRolling, lifeNormal, didntExitEntrance, areFlipping: Boolean;
|
||
mainScreenHidden, fileWasLost, is4Channel, useColorCursor: Boolean;
|
||
|
||
implementation
|
||
end. |