mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-12-14 12:09:36 +00:00
Fix candle flames and grease spill progression on res change
This commit is contained in:
@@ -292,7 +292,7 @@ void BackUpFlames (Rect *src, short index)
|
|||||||
// Like the above function but this is called when the lighting changes<65>
|
// Like the above function but this is called when the lighting changes<65>
|
||||||
// in a room (lights go on or off).
|
// in a room (lights go on or off).
|
||||||
|
|
||||||
void ReBackUpFlames (short where, short who)
|
void ReBackUpFlames (short where, short who, short h, short v)
|
||||||
{
|
{
|
||||||
short i, f;
|
short i, f;
|
||||||
|
|
||||||
@@ -304,6 +304,7 @@ void ReBackUpFlames (short where, short who)
|
|||||||
{
|
{
|
||||||
if (flames[f].who == i)
|
if (flames[f].who == i)
|
||||||
{
|
{
|
||||||
|
QOffsetRect(&flames[f].dest, h - 8 - flames[f].dest.left, v - 15 - flames[f].dest.top);
|
||||||
BackUpFlames(&flames[f].dest, i);
|
BackUpFlames(&flames[f].dest, i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ SInt16 ReBackUpSavedMap (Rect *, SInt16, SInt16);
|
|||||||
void RestoreFromSavedMap (SInt16, SInt16, Boolean);
|
void RestoreFromSavedMap (SInt16, SInt16, Boolean);
|
||||||
void AddSparkle (Rect *);
|
void AddSparkle (Rect *);
|
||||||
void AddFlyingPoint (Rect *, SInt16, SInt16, SInt16);
|
void AddFlyingPoint (Rect *, SInt16, SInt16, SInt16);
|
||||||
void ReBackUpFlames (SInt16, SInt16);
|
void ReBackUpFlames (SInt16, SInt16, SInt16, SInt16);
|
||||||
void AddCandleFlame (SInt16, SInt16, SInt16, SInt16);
|
void AddCandleFlame (SInt16, SInt16, SInt16, SInt16);
|
||||||
void ReBackUpTikiFlames (SInt16, SInt16);
|
void ReBackUpTikiFlames (SInt16, SInt16);
|
||||||
void AddTikiFlame (SInt16, SInt16, SInt16, SInt16);
|
void AddTikiFlame (SInt16, SInt16, SInt16, SInt16);
|
||||||
@@ -87,6 +87,7 @@ SInt16 ReBackUpGrease (SInt16 where, SInt16 who, SInt16 h, SInt16 v);
|
|||||||
SInt16 AddGrease (SInt16, SInt16, SInt16, SInt16, SInt16, Boolean);
|
SInt16 AddGrease (SInt16, SInt16, SInt16, SInt16, SInt16, Boolean);
|
||||||
void SpillGrease (SInt16, SInt16);
|
void SpillGrease (SInt16, SInt16);
|
||||||
void RedrawAllGrease (void);
|
void RedrawAllGrease (void);
|
||||||
|
void FixupFallenGrease(SInt16 where, SInt16 who, SInt16 h, SInt16 v, Boolean *isDynamic);
|
||||||
|
|
||||||
void DoHighScores (void); // --- HighScores.c
|
void DoHighScores (void); // --- HighScores.c
|
||||||
void SortHighScores (void);
|
void SortHighScores (void);
|
||||||
@@ -261,8 +262,8 @@ void DrawBlueClock (Rect *);
|
|||||||
void DrawYellowClock (Rect *);
|
void DrawYellowClock (Rect *);
|
||||||
void DrawCuckoo (Rect *);
|
void DrawCuckoo (Rect *);
|
||||||
void DrawSimplePrizes (SInt16, Rect *);
|
void DrawSimplePrizes (SInt16, Rect *);
|
||||||
void DrawGreaseRt (Rect *, SInt16, Boolean);
|
void DrawGreaseRt (Rect *, SInt16, Boolean, Boolean);
|
||||||
void DrawGreaseLf (Rect *, SInt16, Boolean);
|
void DrawGreaseLf (Rect *, SInt16, Boolean, Boolean);
|
||||||
void DrawFoil (Rect *);
|
void DrawFoil (Rect *);
|
||||||
void DrawInvisBonus (Rect *);
|
void DrawInvisBonus (Rect *);
|
||||||
void DrawSlider (Rect *);
|
void DrawSlider (Rect *);
|
||||||
|
|||||||
@@ -178,7 +178,13 @@ short ReBackUpGrease (short where, short who, short h, short v)
|
|||||||
{
|
{
|
||||||
if ((grease[i].mode == kGreaseIdle) || (grease[i].mode == kGreaseFalling))
|
if ((grease[i].mode == kGreaseIdle) || (grease[i].mode == kGreaseFalling))
|
||||||
{
|
{
|
||||||
QOffsetRect(&grease[i].dest, h - grease[i].dest.left, v - grease[i].dest.top);
|
greasePtr greaseItem = &grease[i];
|
||||||
|
const short hDelta = h - grease[i].dest.left;
|
||||||
|
const short vDelta = v - grease[i].dest.top;
|
||||||
|
QOffsetRect(&greaseItem->dest, hDelta, vDelta);
|
||||||
|
greaseItem->start += hDelta;
|
||||||
|
greaseItem->stop += hDelta;
|
||||||
|
|
||||||
src = grease[i].dest;
|
src = grease[i].dest;
|
||||||
BackupGrease(&src, grease[i].mapNum, grease[i].isRight);
|
BackupGrease(&src, grease[i].mapNum, grease[i].isRight);
|
||||||
}
|
}
|
||||||
@@ -269,10 +275,12 @@ void RedrawAllGrease (void)
|
|||||||
|
|
||||||
for (i = 0; i < numGrease; i++)
|
for (i = 0; i < numGrease; i++)
|
||||||
{
|
{
|
||||||
|
if (grease[i].mode == kGreaseIdle)
|
||||||
|
continue;
|
||||||
|
|
||||||
src = hotSpots[grease[i].hotNum].bounds;
|
src = hotSpots[grease[i].hotNum].bounds;
|
||||||
if ((grease[i].where == thisRoomNumber) &&
|
if ((grease[i].where == thisRoomNumber) &&
|
||||||
((src.bottom - src.top) == 2) &&
|
((src.bottom - src.top) == 2))
|
||||||
(grease[i].mode != kGreaseIdle))
|
|
||||||
{
|
{
|
||||||
QOffsetRect(&src, playOriginH, playOriginV);
|
QOffsetRect(&src, playOriginH, playOriginV);
|
||||||
|
|
||||||
@@ -288,3 +296,29 @@ void RedrawAllGrease (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FixupFallenGrease(SInt16 where, SInt16 who, SInt16 h, SInt16 v, Boolean *isDynamic)
|
||||||
|
{
|
||||||
|
short i;
|
||||||
|
|
||||||
|
for (i = 0; i < numGrease; i++)
|
||||||
|
{
|
||||||
|
greasePtr greaseItem = grease + i;
|
||||||
|
if ((greaseItem->where == where) && (greaseItem->who == who))
|
||||||
|
{
|
||||||
|
short hDelta = h - greaseItem->dest.left;
|
||||||
|
short vDelta = v - greaseItem->dest.top;
|
||||||
|
QOffsetRect(&greaseItem->dest, hDelta, vDelta);
|
||||||
|
greaseItem->start += hDelta;
|
||||||
|
greaseItem->stop += hDelta;
|
||||||
|
if (greaseItem->mode != kGreaseIdle)
|
||||||
|
{
|
||||||
|
hotPtr hotSpot = &hotSpots[greaseItem->hotNum];
|
||||||
|
//QOffsetRect(&hotSpot->bounds, hDelta, vDelta);
|
||||||
|
}
|
||||||
|
*isDynamic = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*isDynamic = false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1224,7 +1224,7 @@ void DrawSimplePrizes (short what, Rect *theRect)
|
|||||||
|
|
||||||
//-------------------------------------------------------------- DrawGreaseRt
|
//-------------------------------------------------------------- DrawGreaseRt
|
||||||
|
|
||||||
void DrawGreaseRt (Rect *theRect, short distance, Boolean state)
|
void DrawGreaseRt (Rect *theRect, short distance, Boolean state, Boolean drawSpill)
|
||||||
{
|
{
|
||||||
Rect spill, dest;
|
Rect spill, dest;
|
||||||
|
|
||||||
@@ -1244,17 +1244,20 @@ void DrawGreaseRt (Rect *theRect, short distance, Boolean state)
|
|||||||
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
||||||
&greaseSrcRt[3], &greaseSrcRt[3], &dest);
|
&greaseSrcRt[3], &greaseSrcRt[3], &dest);
|
||||||
|
|
||||||
|
if (drawSpill)
|
||||||
|
{
|
||||||
QSetRect(&spill, 0, -2, distance - 5, 0);
|
QSetRect(&spill, 0, -2, distance - 5, 0);
|
||||||
QOffsetRect(&spill, dest.right - 1, dest.bottom);
|
QOffsetRect(&spill, dest.right - 1, dest.bottom);
|
||||||
|
|
||||||
backSrcMap->SetForeColor(PortabilityLayer::RGBAColor::Create(0, 0, 0, 255));
|
backSrcMap->SetForeColor(PortabilityLayer::RGBAColor::Create(0, 0, 0, 255));
|
||||||
backSrcMap->FillRect(spill);
|
backSrcMap->FillRect(spill);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------- DrawGreaseLf
|
//-------------------------------------------------------------- DrawGreaseLf
|
||||||
|
|
||||||
void DrawGreaseLf (Rect *theRect, short distance, Boolean state)
|
void DrawGreaseLf (Rect *theRect, short distance, Boolean state, Boolean drawSpill)
|
||||||
{
|
{
|
||||||
Rect spill, dest;
|
Rect spill, dest;
|
||||||
DrawSurface *wasCPort;
|
DrawSurface *wasCPort;
|
||||||
@@ -1275,12 +1278,15 @@ void DrawGreaseLf (Rect *theRect, short distance, Boolean state)
|
|||||||
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
||||||
&greaseSrcLf[3], &greaseSrcLf[3], &dest);
|
&greaseSrcLf[3], &greaseSrcLf[3], &dest);
|
||||||
|
|
||||||
|
if (drawSpill)
|
||||||
|
{
|
||||||
backSrcMap->SetForeColor(PortabilityLayer::RGBAColor::Create(0, 0, 0, 255));
|
backSrcMap->SetForeColor(PortabilityLayer::RGBAColor::Create(0, 0, 0, 255));
|
||||||
|
|
||||||
QSetRect(&spill, -distance + 5, -2, 0, 0);
|
QSetRect(&spill, -distance + 5, -2, 0, 0);
|
||||||
QOffsetRect(&spill, dest.left + 1, dest.bottom);
|
QOffsetRect(&spill, dest.left + 1, dest.bottom);
|
||||||
backSrcMap->FillRect(spill);
|
backSrcMap->FillRect(spill);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------- DrawBands
|
//-------------------------------------------------------------- DrawBands
|
||||||
|
|||||||
@@ -73,11 +73,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
DrawSimpleBlowers(thisObject.what, &itsRect);
|
DrawSimpleBlowers(thisObject.what, &itsRect);
|
||||||
if (neighbor == kCentralRoom)
|
if (neighbor == kCentralRoom)
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 10;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 10, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -88,11 +90,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
rectB.bottom += kFloorSupportTall;
|
rectB.bottom += kFloorSupportTall;
|
||||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 10;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 10, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,11 +111,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
DrawSimpleBlowers(thisObject.what, &itsRect);
|
DrawSimpleBlowers(thisObject.what, &itsRect);
|
||||||
if (neighbor == kCentralRoom)
|
if (neighbor == kCentralRoom)
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 14;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 14, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -122,11 +128,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
rectB.bottom += kFloorSupportTall;
|
rectB.bottom += kFloorSupportTall;
|
||||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 14;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 14, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,11 +149,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
DrawSimpleBlowers(thisObject.what, &itsRect);
|
DrawSimpleBlowers(thisObject.what, &itsRect);
|
||||||
if (neighbor == kCentralRoom)
|
if (neighbor == kCentralRoom)
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 9;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 9, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -156,11 +166,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
rectB.bottom += kFloorSupportTall;
|
rectB.bottom += kFloorSupportTall;
|
||||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||||
{
|
{
|
||||||
|
const short h = itsRect.left + 9;
|
||||||
|
const short v = itsRect.top + 7;
|
||||||
if (redraw)
|
if (redraw)
|
||||||
ReBackUpFlames(localNumbers[neighbor], i);
|
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||||
else
|
else
|
||||||
AddCandleFlame(localNumbers[neighbor], i,
|
AddCandleFlame(localNumbers[neighbor], i,
|
||||||
itsRect.left + 9, itsRect.top + 7);
|
h, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -375,11 +387,16 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
itsRect.left, itsRect.top,
|
itsRect.left, itsRect.top,
|
||||||
thisObject.data.c.length, true);
|
thisObject.data.c.length, true);
|
||||||
if (dynamicNum != -1)
|
if (dynamicNum != -1)
|
||||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, true);
|
DrawGreaseRt(&itsRect, thisObject.data.c.length, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // fallen
|
else // fallen
|
||||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, false);
|
{
|
||||||
|
Boolean isDynamic = false;
|
||||||
|
if (redraw)
|
||||||
|
FixupFallenGrease(localNumbers[neighbor], i, itsRect.left, itsRect.top, &isDynamic);
|
||||||
|
DrawGreaseRt(&itsRect, thisObject.data.c.length, false, !isDynamic);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kGreaseLf:
|
case kGreaseLf:
|
||||||
@@ -396,11 +413,16 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
|||||||
itsRect.left, itsRect.top,
|
itsRect.left, itsRect.top,
|
||||||
thisObject.data.c.length, false);
|
thisObject.data.c.length, false);
|
||||||
if (dynamicNum != -1)
|
if (dynamicNum != -1)
|
||||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, true);
|
DrawGreaseLf(&itsRect, thisObject.data.c.length, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, false);
|
{
|
||||||
|
Boolean isDynamic = false;
|
||||||
|
if (redraw)
|
||||||
|
FixupFallenGrease(localNumbers[neighbor], i, itsRect.left, itsRect.top, &isDynamic);
|
||||||
|
DrawGreaseLf(&itsRect, thisObject.data.c.length, false, !isDynamic);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kFoil:
|
case kFoil:
|
||||||
|
|||||||
@@ -2388,7 +2388,7 @@ void DrawThisRoomsObjects (void)
|
|||||||
if (!thisRoom->objects[i].data.c.initial)
|
if (!thisRoom->objects[i].data.c.initial)
|
||||||
QOffsetRect(&tempRect, -8, 0);
|
QOffsetRect(&tempRect, -8, 0);
|
||||||
DrawGreaseRt(&tempRect, thisRoom->objects[i].data.c.length,
|
DrawGreaseRt(&tempRect, thisRoom->objects[i].data.c.length,
|
||||||
thisRoom->objects[i].data.c.initial);
|
thisRoom->objects[i].data.c.initial, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kGreaseLf:
|
case kGreaseLf:
|
||||||
@@ -2396,7 +2396,7 @@ void DrawThisRoomsObjects (void)
|
|||||||
if (!thisRoom->objects[i].data.c.initial)
|
if (!thisRoom->objects[i].data.c.initial)
|
||||||
QOffsetRect(&tempRect, 8, 0);
|
QOffsetRect(&tempRect, 8, 0);
|
||||||
DrawGreaseLf(&tempRect, thisRoom->objects[i].data.c.length,
|
DrawGreaseLf(&tempRect, thisRoom->objects[i].data.c.length,
|
||||||
thisRoom->objects[i].data.c.initial);
|
thisRoom->objects[i].data.c.initial, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kFoil:
|
case kFoil:
|
||||||
|
|||||||
@@ -129,6 +129,9 @@ void ResetLocale (Boolean soft)
|
|||||||
RestoreWorkMap();
|
RestoreWorkMap();
|
||||||
shadowVisible = IsShadowVisible();
|
shadowVisible = IsShadowVisible();
|
||||||
|
|
||||||
|
if (soft)
|
||||||
|
RedrawAllGrease();
|
||||||
|
|
||||||
SetGraphicsPort(wasCPort);
|
SetGraphicsPort(wasCPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user