action[i] = tape.pos[tape.counter].action[i];
#if DEBUG_TAPE_WHEN_PLAYING
- Print("%05d", FrameCounter);
+ DebugContinued("", "%05d", FrameCounter);
for (i = 0; i < MAX_TAPE_ACTIONS; i++)
- Print(" %08x", action[i]);
- Print("\n");
+ DebugContinued("", " %08x", action[i]);
+ DebugContinued("tape:play", "\n");
#endif
tape.set_centered_player = FALSE;
int i;
if (TAPE_IS_EMPTY(tape))
- return(0);
+ return 0;
for (i = 0; i < tape.length; i++)
tape_length_frames += tape.pos[i].delay;
global.autoplay_leveldir);
if (autoplay_leveldir == NULL)
- Error(ERR_EXIT, "no such level identifier: '%s'",
- global.autoplay_leveldir);
+ Fail("no such level identifier: '%s'", global.autoplay_leveldir);
leveldir_current = autoplay_leveldir;
return FALSE;
}
- byte property_bits = tape->property_bits;
+ boolean unpatch_tape = FALSE;
+ boolean use_property_bit = FALSE;
byte property_bitmask = 0;
- boolean set_property_bit = TRUE;
if (strSuffix(mode, ":0") ||
strSuffix(mode, ":off") ||
strSuffix(mode, ":clear"))
- set_property_bit = FALSE;
+ unpatch_tape = TRUE;
if (strEqual(mode, "em_random_bug") || strPrefix(mode, "em_random_bug:"))
{
}
property_bitmask = TAPE_PROPERTY_EM_RANDOM_BUG;
+
+ use_property_bit = TRUE;
}
else
{
return FALSE;
}
- if (set_property_bit)
- property_bits |= property_bitmask;
- else
- property_bits &= ~property_bitmask;
-
- if (property_bits == tape->property_bits)
+ // patching tapes using property bits may be used for several patch modes
+ if (use_property_bit)
{
- Print("Tape already patched for '%s'!\n", mode);
+ byte property_bits = tape->property_bits;
+ boolean set_property_bit = (unpatch_tape ? FALSE : TRUE);
- return FALSE;
+ if (set_property_bit)
+ property_bits |= property_bitmask;
+ else
+ property_bits &= ~property_bitmask;
+
+ if (property_bits == tape->property_bits)
+ {
+ Print("Tape already patched for '%s'!\n", mode);
+
+ return FALSE;
+ }
+
+ tape->property_bits = property_bits;
}
Print("Patching for '%s' ... ", mode);
- tape->property_bits = property_bits;
-
return TRUE;
}
global.patchtapes_leveldir);
if (patchtapes_leveldir == NULL)
- Error(ERR_EXIT, "no such level identifier: '%s'",
- global.patchtapes_leveldir);
+ Fail("no such level identifier: '%s'", global.patchtapes_leveldir);
leveldir_current = patchtapes_leveldir;
GDI_END);
if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
+ Fail("cannot create gadget");
tape_gadget[id] = gi;
}