steps to replicate:
- in the setup, enable Zigzag Diagonal Movement for BD engine
- go to level 2 (Cave C) of Classic Games->Boulder Dash (Native Engine)
- move down one pace and right one pace, to get in this position:
- hold the snap key while moving diagonally up and right
you will be able to snap the dirt next to the diamond from a diagonal, which shouldn't be possible, and allows a lot of unintentional maneuvers. this is because, for some reason, Crazy Dream's true diagonal movement is enabled whenever "Zigzag Diagonal Movement" is enabled, but only for snapping
BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
Moderators: Flumminator, Zomis
Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
it would seem the culprit is that the block in do_player that processes zigzag movement, including changing the diagonal movement to an orthogonal one, never executes if player_fire is true (bd_caveengine.c line 2016):
and the else block just directly calls do_player_ext with no correction to diagonal movement (bd_caveengine.c lines 2054-2057):
when zigzag movement is false (and diagonal cave movement is false) then any attempted diagonal movement gets forced to horizontal at the start of gd_cave_iterate before do_player is ever called, so in that case we never see the player snap diagonally
Code: Select all
if (game_bd.zigzag_movement && !cave->diagonal_movements && !player_fire)Code: Select all
else
{
do_player_ext(cave, x, y, player_move, player_fire);
}Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
Thanks a lot for reporting this terrible bug -- and thanks even more for the precise description of the cause of the bug!
Just fixed that bug, and will release a corrected version 4.4.1.2 very soon!
Thanks again -- bugs like that one should never happen...
Just fixed that bug, and will release a corrected version 4.4.1.2 very soon!
Thanks again -- bugs like that one should never happen...
Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
OK, I have just released version 4.4.1.2. As far as I can see, this bug should be fixed now!
Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
Is there any way this bug could be turned into a feature?
i.e. give level designers the option to enable 'true diagonal' snapping, and of course movement;
while continuing to allow only zigzag diagonal movement;
hence 'either or', or perhaps neither, although I cannot think why you would want to forbid zigzag diagonal movement; that is inherent in the game mechanics, so when we talk about 'zigzag diagonal movement' I presume we are only referring to telling the game engine to interpret a mix of two directional keys as first one and then the other.
I have played BD clones with true diagonal movement,
so eg the player could squeeze between 2 bits of wall arranged diagonally to get to a new area;
and presumably, could snap e.g. to get a diamond like so, e.g.:









These clones were clones of the C64 version of Boulderdash, but I remember some of them differed by having
a) pumpkins instead of one of fireflies or butterflies (no change in behaviour);
b) allowing true diagonal movement.
I played them in C64 Express, I am pretty sure.
I can imagine Holger, your answer being something like: 'To preserve full compatibility with the Boulder Dash engine as found in GDash, we mustn't introduce new features, other than porting new features which are added to GDash.' That's fair enough.
My response would be: please could we add this feature to the Rocks'n'Diamonds engine?
Actually I've been busy lately thinking about:
- how much I like the Rocks'n'Diamonds engine;
- how it is custom/native/endemic to Rocks'n'Diamonds the game;
- how I don't feel it is appreciated enough
- how I would love to assist in helping it to get more love from the Boulder Dash-playing community,
by assisting with adding some kick-ass new features to it;
these would be mainly new element types,
that I think might enable never-before-seen levels to be made.
So this idea, although not about new element types, is my first [recent] proposal for what I will grandiosely call 'Project Revitalise the Rocks'n'Diamonds engine'
John
i.e. give level designers the option to enable 'true diagonal' snapping, and of course movement;
while continuing to allow only zigzag diagonal movement;
hence 'either or', or perhaps neither, although I cannot think why you would want to forbid zigzag diagonal movement; that is inherent in the game mechanics, so when we talk about 'zigzag diagonal movement' I presume we are only referring to telling the game engine to interpret a mix of two directional keys as first one and then the other.
I have played BD clones with true diagonal movement,
so eg the player could squeeze between 2 bits of wall arranged diagonally to get to a new area;
and presumably, could snap e.g. to get a diamond like so, e.g.:









These clones were clones of the C64 version of Boulderdash, but I remember some of them differed by having
a) pumpkins instead of one of fireflies or butterflies (no change in behaviour);
b) allowing true diagonal movement.
I played them in C64 Express, I am pretty sure.
I can imagine Holger, your answer being something like: 'To preserve full compatibility with the Boulder Dash engine as found in GDash, we mustn't introduce new features, other than porting new features which are added to GDash.' That's fair enough.
My response would be: please could we add this feature to the Rocks'n'Diamonds engine?
Actually I've been busy lately thinking about:
- how much I like the Rocks'n'Diamonds engine;
- how it is custom/native/endemic to Rocks'n'Diamonds the game;
- how I don't feel it is appreciated enough
- how I would love to assist in helping it to get more love from the Boulder Dash-playing community,
by assisting with adding some kick-ass new features to it;
these would be mainly new element types,
that I think might enable never-before-seen levels to be made.
So this idea, although not about new element types, is my first [recent] proposal for what I will grandiosely call 'Project Revitalise the Rocks'n'Diamonds engine'
John
Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
both of these are already in GDash, and by extension, RnD. that's why this bug exists in the first place, because GDash supports true diagonal movement for specific caves and RnD's code for zigzag diagonal movement accidentally invoked it outside of those caves.BrownSky wrote: ↑Tue Jan 06, 2026 1:04 am Is there any way this bug could be turned into a feature?
[...]
These clones were clones of the C64 version of Boulderdash, but I remember some of them differed by having
a) pumpkins instead of one of fireflies or butterflies (no change in behaviour);
b) allowing true diagonal movement.
the clones you mention are in fact in RnD's Boulder Dash collection: https://www.artsoft.org/RELEASES/rocksn ... -1.0.7.zip . look under "Marek Roth"
Re: BD engine bug: Zigzag Diagonal Movement setting permits Crazy Dream-style diagonal snapping in any level
Thanks ncrecc, you bet me to the 'Submit' button
I had realized that 'true diagonal' movement is already an optional feature in the Boulder Dash engine, and wrote out this post, which I will only revise lightly in view of your post .
I can't tell from your post whether diagonal snapping, as opposed to 'true diagonal movement', is a thing. Presumably not. [I know I should just go and try the levels, but not enough disk space blah blah]
Let me try to alter my suggestion in the previous post to fit these facts.
[Thinks] ... The revised suggestion/request is:
Could diagonal snapping be made into an option?
It could even be independent of diagonal movement, so a player could move true-diagonally but not snap diagonally,
or,
could snap diagonally but not move true-diagonally,
or neither.
If not possible in the Boulder Dash engine because not allowed to add novel features to it,
could the Rocks'n'Diamonds engine be allowed to support true diagonal movement, and diagonal snapping?
Actually I would vote for this to be a feature of the Rocks'n'Diamonds engine _as well as _ the Boulder Dash engine, where it is already [partially];
My reason is, that I think the Rocks'n'Diamonds engine should always be better than the Boulder Dash engine, and omitting features from it won't help with that goal
)
[Note: not expecting the Rocks'n'Diamonds engine to contain all the features of the Boulder Dash engine; I understand that it doesn't suit some features such as wrap-around levels, which anyway, I don't even like that much, or at least, don't like more than non-wrapping-around levels]
If the full feature could be brought to the Rocks'n'Diamonds engine,
then, possibilities would arise:
- 4 players each with their own setting means some players could do it and some not, offering new opportunities for teamwork;
- setting/unsetting either/both of these states could be added to the list of actions available on CE change pages, so the designer could create pills / orbs etc that enable or disable diagonal movement and snapping
* * *
Another thing, thinking about it, is that in the Boulderdash clone with true diagonal movement, I think that the monsters could also move diagonally, although only through space, not through sand as the player can. Put another way, under conditions of true diagonal movement for player/monsters, two bits of wall in a diagonal arrangement are not a barrier:
under this state of affairs,
in an area like this:
















After the firefly gets to to the corner of its void that is opposite to where it is now,
it could come into the player's void and kill the player, unless the player moves away or defends itself somehow.
Again this could be a configurable option with all levels without the switch set, defaulting to 'old' behaviour, so nothing gets broken / unsolvable etc.
It would add some fun / novelty, I think.
John
I can't tell from your post whether diagonal snapping, as opposed to 'true diagonal movement', is a thing. Presumably not. [I know I should just go and try the levels, but not enough disk space blah blah]
Let me try to alter my suggestion in the previous post to fit these facts.
[Thinks] ... The revised suggestion/request is:
Could diagonal snapping be made into an option?
It could even be independent of diagonal movement, so a player could move true-diagonally but not snap diagonally,
or,
could snap diagonally but not move true-diagonally,
or neither.
If not possible in the Boulder Dash engine because not allowed to add novel features to it,
could the Rocks'n'Diamonds engine be allowed to support true diagonal movement, and diagonal snapping?
Actually I would vote for this to be a feature of the Rocks'n'Diamonds engine _as well as _ the Boulder Dash engine, where it is already [partially];
My reason is, that I think the Rocks'n'Diamonds engine should always be better than the Boulder Dash engine, and omitting features from it won't help with that goal
[Note: not expecting the Rocks'n'Diamonds engine to contain all the features of the Boulder Dash engine; I understand that it doesn't suit some features such as wrap-around levels, which anyway, I don't even like that much, or at least, don't like more than non-wrapping-around levels]
If the full feature could be brought to the Rocks'n'Diamonds engine,
then, possibilities would arise:
- 4 players each with their own setting means some players could do it and some not, offering new opportunities for teamwork;
- setting/unsetting either/both of these states could be added to the list of actions available on CE change pages, so the designer could create pills / orbs etc that enable or disable diagonal movement and snapping
* * *
Another thing, thinking about it, is that in the Boulderdash clone with true diagonal movement, I think that the monsters could also move diagonally, although only through space, not through sand as the player can. Put another way, under conditions of true diagonal movement for player/monsters, two bits of wall in a diagonal arrangement are not a barrier:
under this state of affairs,
in an area like this:
















After the firefly gets to to the corner of its void that is opposite to where it is now,
it could come into the player's void and kill the player, unless the player moves away or defends itself somehow.
Again this could be a configurable option with all levels without the switch set, defaulting to 'old' behaviour, so nothing gets broken / unsolvable etc.
It would add some fun / novelty, I think.
John