mirror of
https://github.com/elasota/Aerofoil.git
synced 2025-09-23 06:53:43 +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>
|
||||
// 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;
|
||||
|
||||
@@ -304,6 +304,7 @@ void ReBackUpFlames (short where, short who)
|
||||
{
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@ SInt16 ReBackUpSavedMap (Rect *, SInt16, SInt16);
|
||||
void RestoreFromSavedMap (SInt16, SInt16, Boolean);
|
||||
void AddSparkle (Rect *);
|
||||
void AddFlyingPoint (Rect *, SInt16, SInt16, SInt16);
|
||||
void ReBackUpFlames (SInt16, SInt16);
|
||||
void ReBackUpFlames (SInt16, SInt16, SInt16, SInt16);
|
||||
void AddCandleFlame (SInt16, SInt16, SInt16, SInt16);
|
||||
void ReBackUpTikiFlames (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);
|
||||
void SpillGrease (SInt16, SInt16);
|
||||
void RedrawAllGrease (void);
|
||||
void FixupFallenGrease(SInt16 where, SInt16 who, SInt16 h, SInt16 v, Boolean *isDynamic);
|
||||
|
||||
void DoHighScores (void); // --- HighScores.c
|
||||
void SortHighScores (void);
|
||||
@@ -261,8 +262,8 @@ void DrawBlueClock (Rect *);
|
||||
void DrawYellowClock (Rect *);
|
||||
void DrawCuckoo (Rect *);
|
||||
void DrawSimplePrizes (SInt16, Rect *);
|
||||
void DrawGreaseRt (Rect *, SInt16, Boolean);
|
||||
void DrawGreaseLf (Rect *, SInt16, Boolean);
|
||||
void DrawGreaseRt (Rect *, SInt16, Boolean, Boolean);
|
||||
void DrawGreaseLf (Rect *, SInt16, Boolean, Boolean);
|
||||
void DrawFoil (Rect *);
|
||||
void DrawInvisBonus (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))
|
||||
{
|
||||
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;
|
||||
BackupGrease(&src, grease[i].mapNum, grease[i].isRight);
|
||||
}
|
||||
@@ -269,10 +275,12 @@ void RedrawAllGrease (void)
|
||||
|
||||
for (i = 0; i < numGrease; i++)
|
||||
{
|
||||
if (grease[i].mode == kGreaseIdle)
|
||||
continue;
|
||||
|
||||
src = hotSpots[grease[i].hotNum].bounds;
|
||||
if ((grease[i].where == thisRoomNumber) &&
|
||||
((src.bottom - src.top) == 2) &&
|
||||
(grease[i].mode != kGreaseIdle))
|
||||
((src.bottom - src.top) == 2))
|
||||
{
|
||||
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
|
||||
|
||||
void DrawGreaseRt (Rect *theRect, short distance, Boolean state)
|
||||
void DrawGreaseRt (Rect *theRect, short distance, Boolean state, Boolean drawSpill)
|
||||
{
|
||||
Rect spill, dest;
|
||||
|
||||
@@ -1244,6 +1244,8 @@ void DrawGreaseRt (Rect *theRect, short distance, Boolean state)
|
||||
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
||||
&greaseSrcRt[3], &greaseSrcRt[3], &dest);
|
||||
|
||||
if (drawSpill)
|
||||
{
|
||||
QSetRect(&spill, 0, -2, distance - 5, 0);
|
||||
QOffsetRect(&spill, dest.right - 1, dest.bottom);
|
||||
|
||||
@@ -1251,10 +1253,11 @@ void DrawGreaseRt (Rect *theRect, short distance, Boolean state)
|
||||
backSrcMap->FillRect(spill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- DrawGreaseLf
|
||||
|
||||
void DrawGreaseLf (Rect *theRect, short distance, Boolean state)
|
||||
void DrawGreaseLf (Rect *theRect, short distance, Boolean state, Boolean drawSpill)
|
||||
{
|
||||
Rect spill, dest;
|
||||
DrawSurface *wasCPort;
|
||||
@@ -1275,6 +1278,8 @@ void DrawGreaseLf (Rect *theRect, short distance, Boolean state)
|
||||
(BitMap *)*GetGWorldPixMap(backSrcMap),
|
||||
&greaseSrcLf[3], &greaseSrcLf[3], &dest);
|
||||
|
||||
if (drawSpill)
|
||||
{
|
||||
backSrcMap->SetForeColor(PortabilityLayer::RGBAColor::Create(0, 0, 0, 255));
|
||||
|
||||
QSetRect(&spill, -distance + 5, -2, 0, 0);
|
||||
@@ -1282,6 +1287,7 @@ void DrawGreaseLf (Rect *theRect, short distance, Boolean state)
|
||||
backSrcMap->FillRect(spill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------- DrawBands
|
||||
|
||||
|
@@ -73,11 +73,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
||||
DrawSimpleBlowers(thisObject.what, &itsRect);
|
||||
if (neighbor == kCentralRoom)
|
||||
{
|
||||
const short h = itsRect.left + 10;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
AddCandleFlame(localNumbers[neighbor], i,
|
||||
itsRect.left + 10, itsRect.top + 7);
|
||||
h, v);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -88,11 +90,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
||||
rectB.bottom += kFloorSupportTall;
|
||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||
{
|
||||
const short h = itsRect.left + 10;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
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);
|
||||
if (neighbor == kCentralRoom)
|
||||
{
|
||||
const short h = itsRect.left + 14;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
AddCandleFlame(localNumbers[neighbor], i,
|
||||
itsRect.left + 14, itsRect.top + 7);
|
||||
h, v);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -122,11 +128,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
||||
rectB.bottom += kFloorSupportTall;
|
||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||
{
|
||||
const short h = itsRect.left + 14;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
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);
|
||||
if (neighbor == kCentralRoom)
|
||||
{
|
||||
const short h = itsRect.left + 9;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
AddCandleFlame(localNumbers[neighbor], i,
|
||||
itsRect.left + 9, itsRect.top + 7);
|
||||
h, v);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -156,11 +166,13 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
||||
rectB.bottom += kFloorSupportTall;
|
||||
if (!SectRect(&rectA, &rectB, &whoCares))
|
||||
{
|
||||
const short h = itsRect.left + 9;
|
||||
const short v = itsRect.top + 7;
|
||||
if (redraw)
|
||||
ReBackUpFlames(localNumbers[neighbor], i);
|
||||
ReBackUpFlames(localNumbers[neighbor], i, h, v);
|
||||
else
|
||||
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,
|
||||
thisObject.data.c.length, true);
|
||||
if (dynamicNum != -1)
|
||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, true);
|
||||
DrawGreaseRt(&itsRect, thisObject.data.c.length, true, false);
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
||||
case kGreaseLf:
|
||||
@@ -396,11 +413,16 @@ void DrawARoomsObjects (short neighbor, Boolean redraw)
|
||||
itsRect.left, itsRect.top,
|
||||
thisObject.data.c.length, false);
|
||||
if (dynamicNum != -1)
|
||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, true);
|
||||
DrawGreaseLf(&itsRect, thisObject.data.c.length, true, false);
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
||||
case kFoil:
|
||||
|
@@ -2388,7 +2388,7 @@ void DrawThisRoomsObjects (void)
|
||||
if (!thisRoom->objects[i].data.c.initial)
|
||||
QOffsetRect(&tempRect, -8, 0);
|
||||
DrawGreaseRt(&tempRect, thisRoom->objects[i].data.c.length,
|
||||
thisRoom->objects[i].data.c.initial);
|
||||
thisRoom->objects[i].data.c.initial, true);
|
||||
break;
|
||||
|
||||
case kGreaseLf:
|
||||
@@ -2396,7 +2396,7 @@ void DrawThisRoomsObjects (void)
|
||||
if (!thisRoom->objects[i].data.c.initial)
|
||||
QOffsetRect(&tempRect, 8, 0);
|
||||
DrawGreaseLf(&tempRect, thisRoom->objects[i].data.c.length,
|
||||
thisRoom->objects[i].data.c.initial);
|
||||
thisRoom->objects[i].data.c.initial, true);
|
||||
break;
|
||||
|
||||
case kFoil:
|
||||
|
@@ -129,6 +129,9 @@ void ResetLocale (Boolean soft)
|
||||
RestoreWorkMap();
|
||||
shadowVisible = IsShadowVisible();
|
||||
|
||||
if (soft)
|
||||
RedrawAllGrease();
|
||||
|
||||
SetGraphicsPort(wasCPort);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user