mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2024-11-22 05:31:29 +00:00
7a70d18ba6
Sources for Glider PRO, a Macintosh game written by John Calhoun and published by Casady & Greene, Inc. I believe it was using CodeWarrior IDE to create a fat (68K and PowerPC) binary.
1 line
4.3 KiB
C
Executable File
1 line
4.3 KiB
C
Executable File
|
|
//============================================================================
|
|
//----------------------------------------------------------------------------
|
|
// Triggers.c
|
|
//----------------------------------------------------------------------------
|
|
//============================================================================
|
|
|
|
|
|
#include "Externs.h"
|
|
|
|
|
|
#define kMaxTriggers 16
|
|
|
|
|
|
typedef struct
|
|
{
|
|
short object, room;
|
|
short index, timer;
|
|
short what;
|
|
Boolean armed;
|
|
} trigType, *trigPtr;
|
|
|
|
|
|
short FindEmptyTriggerSlot (void);
|
|
void FireTrigger (short);
|
|
|
|
|
|
trigType triggers[kMaxTriggers];
|
|
|
|
|
|
//============================================================== Functions
|
|
//-------------------------------------------------------------- ArmTrigger
|
|
|
|
void ArmTrigger (hotPtr who)
|
|
{
|
|
short where, whoLinked;
|
|
|
|
if (who->stillOver)
|
|
return;
|
|
|
|
where = FindEmptyTriggerSlot();
|
|
|
|
if (where != -1)
|
|
{
|
|
whoLinked = who->who; // what is trigger's obj. #
|
|
triggers[where].room = masterObjects[whoLinked].roomLink;
|
|
triggers[where].object = masterObjects[whoLinked].objectLink;
|
|
triggers[where].index = whoLinked;
|
|
triggers[where].timer = masterObjects[whoLinked].theObject.data.e.delay * 3;
|
|
triggers[where].what = masterObjects[triggers[where].object].theObject.what;
|
|
triggers[where].armed = true;
|
|
}
|
|
|
|
who->stillOver = true;
|
|
}
|
|
|
|
//-------------------------------------------------------------- FindEmptyTriggerSlot
|
|
|
|
short FindEmptyTriggerSlot (void)
|
|
{
|
|
short where, i;
|
|
|
|
where = -1;
|
|
|
|
for (i = 0; i < kMaxTriggers; i++)
|
|
{
|
|
if (!triggers[i].armed)
|
|
{
|
|
where = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (where);
|
|
}
|
|
|
|
//-------------------------------------------------------------- HandleTriggers
|
|
|
|
void HandleTriggers (void)
|
|
{
|
|
short i;
|
|
|
|
for (i = 0; i < kMaxTriggers; i++)
|
|
{
|
|
if (triggers[i].armed)
|
|
{
|
|
triggers[i].timer--;
|
|
if (triggers[i].timer <= 0)
|
|
{
|
|
triggers[i].timer = 0;
|
|
triggers[i].armed = false;
|
|
FireTrigger(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- FireTrigger
|
|
|
|
void FireTrigger (short index)
|
|
{
|
|
short triggerIs, triggeredIs;
|
|
char wasState;
|
|
|
|
triggerIs = triggers[index].index;
|
|
|
|
if (masterObjects[triggerIs].localLink != -1)
|
|
{
|
|
triggeredIs = masterObjects[triggerIs].localLink;
|
|
switch (masterObjects[triggeredIs].theObject.what)
|
|
{
|
|
case kGreaseRt:
|
|
case kGreaseLf:
|
|
if (SetObjectState(triggers[index].room, triggers[index].object,
|
|
kForceOn, triggeredIs))
|
|
{
|
|
SpillGrease(masterObjects[triggeredIs].dynaNum,
|
|
masterObjects[triggeredIs].hotNum);
|
|
}
|
|
break;
|
|
|
|
case kLightSwitch:
|
|
case kMachineSwitch:
|
|
case kThermostat:
|
|
case kPowerSwitch:
|
|
case kKnifeSwitch:
|
|
case kInvisSwitch:
|
|
TriggerSwitch(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kSoundTrigger:
|
|
PlayPrioritySound(kChordSound, kChordPriority); // Change me
|
|
break;
|
|
|
|
case kToaster:
|
|
TriggerToast(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kGuitar:
|
|
PlayPrioritySound(kChordSound, kChordPriority);
|
|
break;
|
|
|
|
case kCoffee:
|
|
PlayPrioritySound(kCoffeeSound, kCoffeePriority);
|
|
break;
|
|
|
|
case kOutlet:
|
|
TriggerOutlet(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kBalloon:
|
|
TriggerBalloon(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kCopterLf:
|
|
case kCopterRt:
|
|
TriggerCopter(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kDartLf:
|
|
case kDartRt:
|
|
TriggerDart(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kDrip:
|
|
TriggerDrip(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
|
|
case kFish:
|
|
TriggerFish(masterObjects[triggeredIs].dynaNum);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wasState = HGetState((Handle)thisHouse);
|
|
HLock((Handle)thisHouse);
|
|
triggeredIs = masterObjects[triggerIs].localLink;
|
|
switch ((*thisHouse)->rooms[triggers[index].room].
|
|
objects[triggers[index].object].what)
|
|
{
|
|
case kGreaseRt:
|
|
case kGreaseLf:
|
|
if (SetObjectState(triggers[index].room, triggers[index].object,
|
|
kForceOn, triggeredIs))
|
|
{
|
|
SpillGrease(masterObjects[triggeredIs].dynaNum,
|
|
masterObjects[triggeredIs].hotNum);
|
|
}
|
|
break;
|
|
}
|
|
HSetState((Handle)thisHouse, wasState);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- ZeroTriggers
|
|
|
|
void ZeroTriggers (void)
|
|
{
|
|
short i;
|
|
|
|
for (i = 0; i < kMaxTriggers; i++)
|
|
triggers[i].armed = false;
|
|
}
|
|
|