enigma-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Enigma-devel] A bug in Enigma 1.00 Mas Microball level #49 (no, re


From: Andreas Lochmann
Subject: Re: [Enigma-devel] A bug in Enigma 1.00 Mas Microball level #49 (no, really!)
Date: Sat, 10 Feb 2007 00:17:55 +0100
User-agent: Mozilla Thunderbird 1.0 (X11/20041206)

Hi,

bojster wrote:

The level-check now comes to the conclusion:
"There are four st-swap arranged in a square!", changing all of
them into st-death.

Yes, this was my first thought, too. I'm glad you confirmed it.
Today I experienced this behaviour in other sokoban levels with
swab-blocks, but it still only happened at the beginning.

However, the st-swaps inmid animation aren't
allowed to be replaced (otherwise Enigma would crash here!),
and so only two st-swaps change into st-death.

That explains why the third stone stayed a swap-block, about which
I was also wondering.

If this analysis is correct, it means that there is no other chance
than to switch off the level-checking for st-swap-sokobans in
ralf_sokoban.

It would be a shame if it was really the only option. It would be good
to keep the same behaviour (dead-end blocks turning into skull-stones)
throughout all sokoban levels. Maybe it's possible to always run
a double-check (so if the function discovers dead-end swap-blocks, it
checks again a few ms later - it should eliminate such situations, but
I have no idea if it's at all possible to code it). Also I'm wondering
why it also happens in the beginning - it never happened to me later in
the game (luckily!). If it's the case, maybe the solution would be to
postpone the first check for 2 or 3 seconds after the game starts?

These are just my suggestions, unfortunately I'm not skilled enough to
look in the code and seek the solution there - so I don't know if they
are possible to apply.
The situation seems to be more complex than expected ...
The level-check is name-based, not position-based, what
at first contradicts our suggestions.
After a review of the codes, I noticed that within a swapping
the newly created swap-stone doesn't share the same name
as the original one. Meaning: During a swap, the active swap-
stone forgets its name and is subsequently not checked
anymore. This is notable in that a swap-stone-square isn't
replaced by st-death after a while.

Start Microban 112, wait about 2 seconds. Then swap the
middle swap-stone on the left-hand side up, and the lower-left
one right and one up, thus forming a square. No st-death
so far. Now swap the two left-most swap-stones. One of them
will turn into st-death, but none else.

So, what is going on here?

The default level-check-interval is 0.3 seconds. However, the
first three level-checks are intentionally skipped (due to a cause
I don't know yet), so the first check appears at 1.2 seconds
game-time. At this first check, all st-swap are checked - so here
the error may occur.

Later in the game, due to performance only those swap-stones
are checked, that changed their position since the last check.
However, as every swap-stone forgets its name during swap,
the level can't determine any movements. And hence, can't do
a level-check.

Only exception is when a swap-stone is moved without actively
swapping. This may only happen when the swap-stone is moved
by another swap-stone; then it keeps its name and - voila - a
level-check occures.

In summary, a multiple-bug, partly based in the Enigma-code,
partly in ralf_sokoban.

Greets,
Andreas





reply via email to

[Prev in Thread] Current Thread [Next in Thread]