// ==========================================================================
loc_g_63D3:
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyDigUpRight : aniMurphyDigUpLeft);
PlayField16[*si - FieldWidth] = 0x503;
// ==========================================================================
loc_g_641C:
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesMurphyEatLeft;
dx1 = aniMurphyDigLeft;
PlayField16[*si - 1] = 0x203;
// ==========================================================================
loc_g_6459:
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyDigUpRight : aniMurphyDigUpLeft);
PlayField16[*si + FieldWidth] = 0x703;
// ==========================================================================
loc_g_64A2:
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesMurphyEatRight;
dx1 = aniMurphyDigRight;
PlayField16[*si + 1] = 0x803;
loc_g_64DF:
subCopyImageToScreen(*si, aniMurphyTouchUp);
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesTouchBase;
dx1 = aniTouchBase;
dxPos = *si - FieldWidth;
loc_g_651D:
subCopyImageToScreen(*si, aniMurphyTouchLeft);
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesTouchBase;
dx1 = aniTouchBase;
dxPos = *si - 1;
loc_g_655B:
subCopyImageToScreen(*si, aniMurphyTouchDown);
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesTouchBase;
dx1 = aniTouchBase;
dxPos = *si + FieldWidth;
loc_g_6599:
subCopyImageToScreen(*si, aniMurphyTouchRight);
+#if 1
+ subSoundFX(*si, fiBase, actDigging);
+#else
subSoundFXBase();
+#endif
+
dx = aniFramesTouchBase;
dx1 = aniTouchBase;
dxPos = *si + 1;
// ==========================================================================
loc_g_65C6:
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
PlayField16[*si - FieldWidth] = 0x903;
// ==========================================================================
loc_g_65FE:
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesEatInfotronLeft;
dx1 = aniEatInfotronLeft;
#if 0
// ==========================================================================
loc_g_662A:
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = (MurphyVarFaceLeft == 0 ? aniFramesMurphyEatUpRight : aniFramesMurphyEatUpLeft);
dx1 = (MurphyVarFaceLeft == 0 ? aniMurphyEatUpRight : aniMurphyEatUpLeft);
PlayField16[*si + FieldWidth] = 0xB03;
// ==========================================================================
loc_g_6662:
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesEatInfotronRight;
dx1 = aniEatInfotronRight;
#if 0
loc_g_668E:
subCopyImageToScreen(*si, aniMurphyTouchUp);
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesTouchInfotron;
dx1 = aniTouchInfotron;
MovHighByte(&PlayField16[*si], 0x14);
loc_g_66C0:
subCopyImageToScreen(*si, aniMurphyTouchLeft);
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesTouchInfotron;
dx1 = aniTouchInfotron;
MovHighByte(&PlayField16[*si], 0x15);
loc_g_66F2:
subCopyImageToScreen(*si, aniMurphyTouchDown);
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesTouchInfotron;
dx1 = aniTouchInfotron;
MovHighByte(&PlayField16[*si], 0x16);
loc_g_6724:
subCopyImageToScreen(*si, aniMurphyTouchRight);
+#if 1
+ subSoundFX(*si, fiInfotron, actCollecting);
+#else
subSoundFXInfotron();
+#endif
+
dx = aniFramesTouchInfotron;
dx1 = aniTouchInfotron;
MovHighByte(&PlayField16[*si], 0x17);
return;
#if 1
- if (!game_sp_info.LevelSolved)
+ if (!game_sp.LevelSolved)
printf("::: Murphy.c: !!!!!!!!!! LEVEL %d SOLVED !!!!!!!!!!\n",LevelNumber);
#endif
#if 1
- game_sp_info.LevelSolved = TRUE;
+ game_sp.LevelSolved = TRUE;
#endif
+#if 1
+ subSoundFX(*si, fiExit, actPassing);
+#else
subSoundFXExit();
+#endif
+
data_h_DemoDone = 1; // EP set level success bytes
LevelStatus = 1; // set Level Status DONE
EP_GameDemoVar0DAA = 0; // force demo for lead-out
#if 1
// draw new terminal type
+#if 1
+ GfxGraphic[GetX(*si - FieldWidth)][GetY(*si - FieldWidth)] = aniTerminalActive;
+#else
subCopyImageToScreen(*si - FieldWidth, aniTerminalActive);
+#endif
#else
subCopyFieldToScreen(*si - FieldWidth, 0x88); // draw new terminal type
#endif
#if 1
// draw new terminal type
+#if 1
+ GfxGraphic[GetX(*si - 1)][GetY(*si - 1)] = aniTerminalActive;
+#else
subCopyImageToScreen(*si - 1, aniTerminalActive);
+#endif
#else
subCopyFieldToScreen(*si - 1, 0x88); // draw new terminal type
#endif
#if 1
// draw new terminal type
+#if 1
+ GfxGraphic[GetX(*si + FieldWidth)][GetY(*si + FieldWidth)] = aniTerminalActive;
+#else
subCopyImageToScreen(*si + FieldWidth, aniTerminalActive);
+#endif
#else
subCopyFieldToScreen(*si + FieldWidth, 0x88); // draw new terminal type
#endif
#if 1
// draw new terminal type
+#if 1
+ GfxGraphic[GetX(*si + 1)][GetY(*si + 1)] = aniTerminalActive;
+#else
subCopyImageToScreen(*si + 1, aniTerminalActive);
+#endif
#else
subCopyFieldToScreen(*si + 1, 0x88); // draw new terminal type
#endif
ax = ax - 1; // next picture of sequence
MovingPictureSequencePhase = ax; // store for later
+
if (ax == 0) // Sound effects
+#if 1
+ {
+ switch (HighByte(PlayField16[*si]))
+ {
+ case 0xE:
+ case 0xF:
+ subSoundFX(*si, fiZonk, actPushing);
+ break;
+
+ case 0x28:
+ case 0x29:
+ subSoundFX(*si, fiOrangeDisk, actPushing);
+ break;
+
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ case 0x27:
+ subSoundFX(*si, fiYellowDisk, actPushing);
+ break;
+
+ default:
+ break;
+ }
+ }
+#else
subSoundFXPush();
+#endif
bl = HighByte(PlayField16[*si]);
if (bl == 0xE) // Push Zonk to left
MurphyScreenXPos, MurphyScreenYPos, MurphyDX, MurphyDY);
#endif
+#if 0
+ // !!! special two-tile animation currently not used !!!
if (dx2 == fiInfotron) // special case of infotron moving left or right
{
tDeltaX = 0;
tDeltaY = 0;
}
else
+#endif
{
tDeltaX = MurphyDX * LocalStretch * (SeqPos + 1);
tDeltaY = MurphyDY * LocalStretch * (SeqPos + 1);
#if 1
StretchedSprites.BltImg(X, Y, dx1, Tmp);
+ GfxGraphic[GetX(*si)][GetY(*si)] = -1; // (Murphy's position)
+ GfxGraphic[GetX(dxPos)][GetY(dxPos)] = -1; // (snapping position)
// printf("::: Tmp: %d\n", Tmp);
#else
StretchedSprites.BltEx(X, Y, dx[Tmp]);
tPos = dxPos + dx2Step;
X = GetStretchX(tPos);
Y = GetStretchY(tPos);
+#if 0
+ // !!! special two-tile animation currently not used !!!
if (dx2 == fiInfotron) // special case of infotron moving left or right
{
StretchedSprites.BltEx(X, Y, dx[SeqPos] + dx2Step);
}
else // pushing something
+#endif
{
#if 1
// (SeqPos iterates from 0 to 7 while pushing)
tDeltaY = MurphyDY * LocalStretch * (SeqPos + 1);
X = GetStretchX(dxPos) + tDeltaX;
Y = GetStretchY(dxPos) + tDeltaY;
+#if 1
+ StretchedSprites.BltImg(X, Y, dx1, SeqPos); // plot first murphy
+#else
StretchedSprites.BltEx(X, Y, dx[SeqPos]); // plot first murphy
+#endif
tPos = dxPos + dx2Step;
X = GetStretchX(tPos);
Y = GetStretchY(tPos);
+#if 1
+ StretchedSprites.BltImg(X + tDeltaX, Y + tDeltaY, dx1, SeqPos); // plot second murphy
+ StretchedSprites.BltImg(X, Y, fiGraphic[LowByte(PlayField16[tPos])], 0); // replot the port on top
+#else
StretchedSprites.BltEx(X + tDeltaX, Y + tDeltaY, dx[SeqPos]); // plot second murphy
StretchedSprites.BltEx(X, Y, LowByte(PlayField16[tPos])); // replot the port on top
+#endif
// End of split movement (port)
// ------------------------------
} // loc_g_6D1E:'loc_g_6D28:
RedDiskReleasePhase = 2;
RedDiskCount = RedDiskCount - 1;
subDisplayRedDiskCount();
+
+#if 1
+ subSoundFX(*si, fiRedDisk, actDropping);
+#else
subSoundFXPush(); // Sound effects
+#endif
} // subAnimateMurphy
// ==========================================================================
return subSpPortTest;
} // subSpPortTest
+#if 0
+
void subCopyFieldToScreen(int si, int fi)
{
int X, Y;
// +++++++++++++++++++++++++++++++++++++++++
}
+#endif
+
void subCopyAnimToScreen(int si, int graphic, int sync_frame)
{
int X, Y;