GliderPRO/Sources/ObjectDrawAll.c
John Calhoun 7a70d18ba6 First check-in.
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.
2016-01-28 08:10:38 -08:00

1 line
28 KiB
C
Executable File

//============================================================================
//----------------------------------------------------------------------------
// ObjectDrawAll.c
//----------------------------------------------------------------------------
//============================================================================
#include "Externs.h"
#include "Environ.h"
#include "RectUtils.h"
extern Rect localRoomsDest[], movieRect;
extern short localNumbers[];
extern short numLights, tvWithMovieNumber;
extern Boolean tvOn;
//============================================================== Functions
//-------------------------------------------------------------- DrawARoomsObjects
void DrawARoomsObjects (short neighbor, Boolean redraw)
{
objectType thisObject;
Rect whoCares, itsRect, rectA, rectB, testRect;
RgnHandle theRgn;
short i, legit, dynamicNum, n;
short floor, suite, room, obj;
char wasState;
Boolean isLit;
if (localNumbers[neighbor] == kRoomIsEmpty)
return;
testRect = houseRect;
ZeroRectCorner(&testRect);
isLit = (numLights > 0);
wasState = HGetState((Handle)thisHouse);
HLock((Handle)thisHouse);
for (i = 0; i < kMaxRoomObs; i++)
{
dynamicNum = -1;
legit = -1;
if (IsThisValid(localNumbers[neighbor], i))
{
thisObject = (*thisHouse)->rooms[localNumbers[neighbor]].objects[i];
switch (thisObject.what)
{
case kObjectIsEmpty:
break;
case kFloorVent:
case kCeilingVent:
case kFloorBlower:
case kCeilingBlower:
case kSewerGrate:
case kLeftFan:
case kRightFan:
case kGrecoVent:
case kSewerBlower:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawSimpleBlowers(thisObject.what, &itsRect);
break;
case kTaper:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (isLit)
DrawSimpleBlowers(thisObject.what, &itsRect);
if (neighbor == kCentralRoom)
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 10, itsRect.top + 7);
}
else
{
QSetRect(&rectA, 0, 0, 16, 15);
QOffsetRect(&rectA, itsRect.left + 10 - 8, itsRect.top + 7 - 15);
rectB = localRoomsDest[kCentralRoom];
rectB.top -= kFloorSupportTall;
rectB.bottom += kFloorSupportTall;
if (!SectRect(&rectA, &rectB, &whoCares))
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 10, itsRect.top + 7);
}
}
}
break;
case kCandle:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (isLit)
DrawSimpleBlowers(thisObject.what, &itsRect);
if (neighbor == kCentralRoom)
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 14, itsRect.top + 7);
}
else
{
QSetRect(&rectA, 0, 0, 16, 15);
QOffsetRect(&rectA, itsRect.left + 14 - 8, itsRect.top + 7 - 15);
rectB = localRoomsDest[kCentralRoom];
rectB.top -= kFloorSupportTall;
rectB.bottom += kFloorSupportTall;
if (!SectRect(&rectA, &rectB, &whoCares))
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 14, itsRect.top + 7);
}
}
}
break;
case kStubby:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (isLit)
DrawSimpleBlowers(thisObject.what, &itsRect);
if (neighbor == kCentralRoom)
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 9, itsRect.top + 7);
}
else
{
QSetRect(&rectA, 0, 0, 16, 15);
QOffsetRect(&rectA, itsRect.left + 9 - 8, itsRect.top + 7 - 15);
rectB = localRoomsDest[kCentralRoom];
rectB.top -= kFloorSupportTall;
rectB.bottom += kFloorSupportTall;
if (!SectRect(&rectA, &rectB, &whoCares))
{
if (redraw)
ReBackUpFlames(localNumbers[neighbor], i);
else
AddCandleFlame(localNumbers[neighbor], i,
itsRect.left + 9, itsRect.top + 7);
}
}
}
break;
case kTiki:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawTiki(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
if (redraw)
ReBackUpTikiFlames(localNumbers[neighbor], i);
else
AddTikiFlame(localNumbers[neighbor], i,
itsRect.left + 10, itsRect.top - 9);
break;
case kBBQ:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (isLit)
DrawPictSansWhiteObject(thisObject.what, &itsRect);
if (redraw)
ReBackUpBBQCoals(localNumbers[neighbor], i);
else
AddBBQCoals(localNumbers[neighbor], i,
itsRect.left + 16, itsRect.top + 9);
}
break;
case kInvisBlower:
case kLiftArea:
break;
case kTable:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawTable(&itsRect, playOriginV);
break;
case kShelf:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawShelf(&itsRect);
break;
case kCabinet:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawCabinet(&itsRect);
break;
case kFilingCabinet:
case kOzma:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawPictObject(thisObject.what, &itsRect);
break;
case kWasteBasket:
case kMilkCrate:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawSimpleFurniture(thisObject.what, &itsRect);
break;
case kCounter:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawCounter(&itsRect);
break;
case kDresser:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawDresser(&itsRect);
break;
case kDeckTable:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawDeckTable(&itsRect, playOriginV);
break;
case kStool:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (isLit)
DrawStool(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
break;
case kInvisObstacle:
break;
case kManhole:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
AddTempManholeRect(&itsRect);
if (isLit)
DrawPictSansWhiteObject(thisObject.what, &itsRect);
}
break;
case kInvisBounce:
break;
case kRedClock:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
DrawRedClock(&itsRect);
}
break;
case kBlueClock:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
DrawBlueClock(&itsRect);
}
break;
case kYellowClock:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
DrawYellowClock(&itsRect);
}
break;
case kCuckoo:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
{
DrawCuckoo(&itsRect);
if (redraw)
ReBackUpPendulum(localNumbers[neighbor], i);
else
AddPendulum(localNumbers[neighbor], i,
itsRect.left + 4, itsRect.top + 46);
}
}
break;
case kPaper:
case kBattery:
case kBands:
case kHelium:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
DrawSimplePrizes(thisObject.what, &itsRect);
}
break;
case kGreaseRt:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (thisObject.data.c.state) // standing
{
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
dynamicNum = ReBackUpGrease(localNumbers[neighbor], i);
else
dynamicNum = AddGrease(localNumbers[neighbor], i,
itsRect.left, itsRect.top,
thisObject.data.c.length, true);
if (dynamicNum != -1)
DrawGreaseRt(&itsRect, thisObject.data.c.length, true);
}
}
else // fallen
DrawGreaseRt(&itsRect, thisObject.data.c.length, false);
break;
case kGreaseLf:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (thisObject.data.c.state)
{
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
dynamicNum = ReBackUpGrease(localNumbers[neighbor], i);
else
dynamicNum = AddGrease(localNumbers[neighbor], i,
itsRect.left, itsRect.top,
thisObject.data.c.length, false);
if (dynamicNum != -1)
DrawGreaseLf(&itsRect, thisObject.data.c.length, true);
}
}
else
DrawGreaseLf(&itsRect, thisObject.data.c.length, false);
break;
case kFoil:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
DrawFoil(&itsRect);
}
break;
case kInvisBonus:
case kSlider:
break;
case kStar:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (redraw)
legit = ReBackUpSavedMap(&itsRect, localNumbers[neighbor], i);
else
legit = BackUpToSavedMap(&itsRect, localNumbers[neighbor], i);
if (legit != -1)
{
if (redraw)
ReBackUpStar(localNumbers[neighbor], i);
else
AddStar(localNumbers[neighbor], i, itsRect.left,
itsRect.top);
DrawSimplePrizes(thisObject.what, &itsRect);
}
}
break;
case kSparkle:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if ((!redraw) && (neighbor == kCentralRoom))
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kSparkle, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.c.state);
}
}
break;
case kUpStairs:
case kDoorInLf:
case kDoorInRt:
case kWindowInLf:
case kWindowInRt:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
DrawPictSansWhiteObject(thisObject.what, &itsRect);
break;
case kDownStairs:
case kDoorExRt:
case kDoorExLf:
case kWindowExRt:
case kWindowExLf:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
DrawPictObject(thisObject.what, &itsRect);
break;
case kMailboxLf:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
DrawMailboxLeft(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
break;
case kMailboxRt:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
DrawMailboxRight(&itsRect, playOriginV + VerticalRoomOffset(neighbor));
break;
case kFloorTrans:
case kCeilingTrans:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
DrawSimpleTransport(thisObject.what, &itsRect);
break;
case kInvisTrans:
case kDeluxeTrans:
break;
case kLightSwitch:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
room = GetRoomNumber(floor, suite);
obj = (short)thisObject.data.e.who;
DrawLightSwitch(&itsRect, GetObjectState(room, obj));
}
dynamicNum = masterObjects[i].hotNum;
break;
case kMachineSwitch:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
room = GetRoomNumber(floor, suite);
obj = (short)thisObject.data.e.who;
DrawMachineSwitch(&itsRect, GetObjectState(room, obj));
}
dynamicNum = masterObjects[i].hotNum;
break;
case kThermostat:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
room = GetRoomNumber(floor, suite);
obj = (short)thisObject.data.e.who;
DrawThermostat(&itsRect, GetObjectState(room, obj));
}
dynamicNum = masterObjects[i].hotNum;
break;
case kPowerSwitch:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
room = GetRoomNumber(floor, suite);
obj = (short)thisObject.data.e.who;
DrawPowerSwitch(&itsRect, GetObjectState(room, obj));
}
dynamicNum = masterObjects[i].hotNum;
break;
case kKnifeSwitch:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
ExtractFloorSuite(thisObject.data.e.where, &floor, &suite);
room = GetRoomNumber(floor, suite);
obj = (short)thisObject.data.e.who;
DrawKnifeSwitch(&itsRect, GetObjectState(room, obj));
}
dynamicNum = masterObjects[i].hotNum;
break;
case kInvisSwitch:
dynamicNum = masterObjects[i].hotNum;
break;
case kTrigger:
case kLgTrigger:
case kSoundTrigger:
break;
case kCeilingLight:
case kLightBulb:
case kTableLamp:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawSimpleLight(thisObject.what, &itsRect);
break;
case kTrunk:
case kBooks:
case kHipLamp:
case kDecoLamp:
case kGuitar:
case kCinderBlock:
case kFlowerBox:
case kFireplace:
case kBear:
case kVase1:
case kVase2:
case kRug:
case kChimes:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawPictSansWhiteObject(thisObject.what, &itsRect);
break;
case kCustomPict:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawCustPictSansWhite(thisObject.data.g.height, &itsRect);
break;
case kFlourescent:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawFlourescent(&itsRect);
break;
case kTrackLight:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawTrackLight(&itsRect);
break;
case kInvisLight:
break;
case kShredder:
case kCDs:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawSimpleAppliance(thisObject.what, &itsRect);
break;
case kToaster:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawSimpleAppliance(thisObject.what, &itsRect);
if ((!redraw) && (neighbor == kCentralRoom))
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kToaster, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kMacPlus:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawMacPlus(&itsRect, thisObject.data.g.state, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kMacPlus, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kTV:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
#ifdef COMPILEQT
if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) &&
(!tvInRoom))
{
whoCares = tvScreen1;
ZeroRectCorner(&whoCares);
OffsetRect(&whoCares, itsRect.left + 17, itsRect.top + 10);
GetMovieBox(theMovie, &movieRect);
CenterRectInRect(&movieRect, &whoCares);
SetMovieBox(theMovie, &movieRect);
theRgn = NewRgn();
RectRgn(theRgn, &whoCares);
SetMovieDisplayClipRgn(theMovie, theRgn);
DisposeRgn(theRgn);
tvOn = thisObject.data.g.state;
}
#endif
DrawTV(&itsRect, thisObject.data.g.state, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kTV, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
#ifdef COMPILEQT
if ((thisMac.hasQT) && (hasMovie) && (neighbor == kCentralRoom) &&
(!tvInRoom))
{
tvWithMovieNumber = dynamicNum;
tvInRoom = true;
}
#endif
}
}
break;
case kCoffee:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawCoffee(&itsRect, thisObject.data.g.state, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kCoffee, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kOutlet:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
if (isLit)
DrawOutlet(&itsRect);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kOutlet, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kVCR:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawVCR(&itsRect, thisObject.data.g.state, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kVCR, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kStereo:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawStereo(&itsRect, isPlayMusicGame, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kStereo, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kMicrowave:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawMicrowave(&itsRect, thisObject.data.g.state, isLit);
if (!redraw)
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kMicrowave, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.g.state);
}
}
break;
case kBalloon:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kBalloon, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kCopterLf:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kCopterLf, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kCopterRt:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kCopterRt, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kDartLf:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kDartLf, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kDartRt:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kDartRt, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kBall:
if ((neighbor == kCentralRoom) && (!redraw))
{
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
QOffsetRect(&itsRect, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kBall, &itsRect, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
break;
case kDrip:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawDrip(&itsRect);
if ((!redraw) && (neighbor == kCentralRoom))
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kDrip, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
}
break;
case kFish:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
{
DrawFish(thisObject.what, &itsRect);
if ((!redraw) && (neighbor == kCentralRoom))
{
rectA = itsRect;
QOffsetRect(&rectA, -playOriginH, -playOriginV);
dynamicNum = AddDynamicObject(kFish, &rectA, &thisObject,
localNumbers[neighbor], i, thisObject.data.h.state);
}
}
break;
case kCobweb:
case kCloud:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawPictWithMaskObject(thisObject.what, &itsRect);
break;
case kMirror:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawMirror(&itsRect);
if ((neighbor == kCentralRoom) && (!redraw))
{
InsetRect(&itsRect, 4, 4);
AddToMirrorRegion(&itsRect);
}
break;
case kMousehole:
case kFaucet:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawSimpleClutter(thisObject.what, &itsRect);
break;
case kFlower:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawFlower(&itsRect, thisObject.data.i.pict);
break;
case kWallWindow:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if (SectRect(&itsRect, &testRect, &whoCares))
DrawWallWindow(&itsRect);
break;
case kCalendar:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawCalendar(&itsRect);
break;
case kBulletin:
GetObjectRect(&thisObject, &itsRect);
OffsetRectRoomRelative(&itsRect, neighbor);
if ((SectRect(&itsRect, &testRect, &whoCares)) && isLit)
DrawBulletin(&itsRect);
break;
}
}
if (!redraw) // set up links
{
for (n = 0; n < numMasterObjects; n++)
{
if ((masterObjects[n].objectNum == i) &&
(masterObjects[n].roomNum == localNumbers[neighbor]))
masterObjects[n].dynaNum = dynamicNum;
}
}
}
HSetState((Handle)thisHouse, wasState);
}