mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2024-11-22 20:31:19 +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
28 KiB
C
Executable File
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);
|
|
}
|
|
|