regression (or tape compatibility issue)

Found a bug in R'n'D? Report it here!

Moderators: Flumminator, Zomis

Post Reply
filbo
Posts: 647
Joined: Fri Jun 20, 2014 10:06 am

regression (or tape compatibility issue)

Post by filbo »

Regarding The Exception One level 25 (levels/Emerald Mine Club/emc_exception_1/25):

My tape made under 4.1.4.2 (which I believe you have) works under releases 4.0.0.0-4.1.4.2, but fails under 4.2.0.0 and later; i.e. new EMC engine.

The cause is immediately obvious at the start of the level. You don't even need a tape. Oh, you need 'small graphics' turned on so you can see the bad action.

In the lower left corner of the level, there is an acid pool next to a steel wall. On top of the steel is an emerald.

In the old engine, the emerald is fine; in the new, it falls into the acid. Both seem like potentially valid choices, but can the new engine emulate the old when playing an old tape? Or is this one of those things that's too ugly to fix in the engine code?

The level is 10000% solvable without any change; it has plenty of extra coinage, those 2 emeralds aren't needed. The tape fails only because I followed my general policy of only eating as much goodies as needed to exit the level. In fact if I had eaten *1* more emerald, it would have succeeded and I wouldn't have noticed the discrepancy.

That's one of the 5 remaining levels in my tape collection which solve only under 4.1.4.2. There also remain 2 which solve only under 4.0.1.0 (not earlier and not later!)

Wait! I figured out why, and fixed those 4.0.1.0-only tapes, and now they work on 4.2.0.5 and I assume all versions in between. The problem: they were run on a binary which had 4.0.1.0 changes in it, but stamped the save file 4.0.0.2, so future versions applied the wrong engine fixes. I patched the tapes to say 4.0.1.0 and now they work.)

So now just 5 4.1.4.2-and-earlier tapes. I half-remember that we already figured out the problem was acid behavior and it was too ugly to fix in the new engine...?

=====

Another bug I've seen for a long time but never mentioned (that I remember): when interactively playing back a tape, if you die before the end of the tape (as might happen with a tape from a different release), the tape counter resets to length-of-tape after you die. This makes it harder than necessary to figure out the actual death point. e.g. I open a level, hit '555' (warp), die at 3:30, and tape counter says 6:15. The time counter does show the right number, except it's still ticking after death.
User avatar
Holger
Site Admin
Posts: 4073
Joined: Fri Jun 18, 2004 4:13 pm
Location: Germany
Contact:

Re: regression (or tape compatibility issue)

Post by Holger »

In the old engine, the emerald is fine; in the new, it falls into the acid.
This was caused by an incorrect implementation of the "fake acid" element (again) in the old EM engine. Emeralds do slip off from normal steel wall in the original EM engine (as strange as this may seem), and fake acid always behaves exactly like empty space if correctly implemented (because it only exits as a graphical artifact, not as a real game element).

Therefore, the way it works in the latest engine is technically correct, even though the behaviour in the old game engine seems to be more what one would expect. :(
Both seem like potentially valid choices, but can the new engine emulate the old when playing an old tape? Or is this one of those things that's too ugly to fix in the engine code?
I would say yes, it is too ugly. :(

In my opinion, it is OK to emulate old behaviour for old tapes if the resulting "game play" as seen in the tape can reasonably be reproduced when attempting to play the level afterwards. That is, if a chain explosion behaves slightly different in an old tape when compared to newly played games using the latest engine, it is OK if the new engine does not produce less gems, for example (else people would desperately try to reproduce the behaviour they have watched in the tape).

In comparison, all those (very few) tapes that currently fail due to wrong fake acid produce such a different behaviour that it would not make sense to emulate this (in my opinion), because people would watch these tapes and wonder why the tapes behave completely different when compared to playing that level regarding fake acid.

If these levels were user generated with the old (wrong) element behavior in mind, it would be a different story (and I would emulate the old behaviour for old levels, maybe with an added switch in the element properties), but in this case the levels were always meant to use the correct behaviour, and were only solvable with the incorrect behaviour just by chance.

Therefore, in my opinion, re-recording those few tapes seem to be the best solution in this case.
Another bug I've seen for a long time but never mentioned (that I remember): when interactively playing back a tape, if you die before the end of the tape (as might happen with a tape from a different release), the tape counter resets to length-of-tape after you die. This makes it harder than necessary to figure out the actual death point. e.g. I open a level, hit '555' (warp), die at 3:30, and tape counter says 6:15. The time counter does show the right number, except it's still ticking after death.
Yes, I understand. The problem is that the tape stops when the player dies when replaying a tape, and a stopped tape shows (and should show, I think) the total tape length (and not the last tape position). In this regard, the R'n'D tape recorder behaves more like a CD player than a VHS tape recorder. ;-)

A solution would be to set the tape recorder to "pause" mode instead, but this would mean that the game engine should also be paused at this point (instead of continuing to run after the player death).

I will think about this if there is a better solution...
Post Reply