// Animate Zonks (falling)
// ==========================================================================
// Animate Zonks (falling)
// ==========================================================================
loc_g_0D35: // Case fiZonk, fiInfotron, fiRAM
ax = PlayField16[si + FieldWidth - 1];
loc_g_0D35: // Case fiZonk, fiInfotron, fiRAM
ax = PlayField16[si + FieldWidth - 1];
loc_g_0D64: // Case fiSpace
MovHighByte(&PlayField16[si], 0x40);
loc_g_0D64: // Case fiSpace
MovHighByte(&PlayField16[si], 0x40);
{
MovHighByte(&PlayField16[si], bl);
subCleanUpForZonksAbove(si - FieldWidth);
{
MovHighByte(&PlayField16[si], bl);
subCleanUpForZonksAbove(si - FieldWidth);
} // loc_g_0E35:
MovHighByte(&PlayField16[si], 0); // zonk arrived at the field
if ((FreezeZonks & 0xFF) == 2)
} // loc_g_0E35:
MovHighByte(&PlayField16[si], 0); // zonk arrived at the field
if ((FreezeZonks & 0xFF) == 2)
// play the zonk sound, 'cause zonk hits something "hard"
subSoundFX(si, fiZonk, actImpact);
// play the zonk sound, 'cause zonk hits something "hard"
subSoundFX(si, fiZonk, actImpact);
loc_g_0EDD: // go on falling down?
PlayField16[si] = 0x7001; // go into intermediate waitstate
PlayField16[si + FieldWidth] = 0x9999; // mark as "zonk waiting to access"
loc_g_0EDD: // go on falling down?
PlayField16[si] = 0x7001; // go into intermediate waitstate
PlayField16[si + FieldWidth] = 0x9999; // mark as "zonk waiting to access"
MovHighByte(&PlayField16[si], 0x50); // zonk rolls left
PlayField16[si - 1] = 0x8888; // mark as zonk accessing?
MovHighByte(&PlayField16[si], 0x50); // zonk rolls left
PlayField16[si - 1] = 0x8888; // mark as zonk accessing?
MovHighByte(&PlayField16[si], 0x60); // zonk rolls right
PlayField16[si + 1] = 0x8888; // mark as zonk accessing?
MovHighByte(&PlayField16[si], 0x60); // zonk rolls right
PlayField16[si + 1] = 0x8888; // mark as zonk accessing?
loc_g_0F14: // Murphy dies, but not in any case
bl = HighByte(PlayField16[si + FieldWidth]);
if (bl == 0xE || bl == 0xF || bl == 0x28)
loc_g_0F14: // Murphy dies, but not in any case
bl = HighByte(PlayField16[si + FieldWidth]);
if (bl == 0xE || bl == 0xF || bl == 0x28)
loc_g_0F6E: // someone dies/explodes
si = si + FieldWidth; // 1 field down
ExplodeFieldSP(si); // Explode
loc_g_0F6E: // someone dies/explodes
si = si + FieldWidth; // 1 field down
ExplodeFieldSP(si); // Explode
loc_g_0F75: // OrangeDisk explodes next cycle
si = si + FieldWidth; // 1 field down
PlayField8[si] = fiHardWare;
loc_g_0F75: // OrangeDisk explodes next cycle
si = si + FieldWidth; // 1 field down
PlayField8[si] = fiHardWare;
si = si - 1; // 1 field left
PlayField16[si] = 0x2201;
PlayField16[si + FieldWidth] = 0xFFFF;
si = si - 1; // 1 field left
PlayField16[si] = 0x2201;
PlayField16[si + FieldWidth] = 0xFFFF;
loc_g_10E2: // stay waiting
bl = bl - 1;
MovHighByte(&PlayField16[si], bl);
loc_g_10E2: // stay waiting
bl = bl - 1;
MovHighByte(&PlayField16[si], bl);
loc_g_1150: // stay waiting
bl = bl - 1;
MovHighByte(&PlayField16[si], bl);
loc_g_1150: // stay waiting
bl = bl - 1;
MovHighByte(&PlayField16[si], bl);