return;
}
- if ((element == EL_BOMBE || element == EL_SP_DISK_ORANGE) &&
+ if ((element == EL_BOMBE ||
+ element == EL_SP_DISK_ORANGE ||
+ element == EL_DX_SUPABOMB) &&
(lastline || object_hit)) /* element is bomb */
{
Bang(x, y);
return;
}
}
- else if (element == EL_FELSBROCKEN || element == EL_SP_ZONK)
+ else if (element == EL_FELSBROCKEN ||
+ element == EL_SP_ZONK ||
+ element == EL_BD_ROCK)
{
if (IS_ENEMY(smashed) ||
smashed == EL_BOMBE || smashed == EL_SP_DISK_ORANGE ||
+ smashed == EL_DX_SUPABOMB ||
smashed == EL_SONDE || smashed == EL_SCHWEIN ||
smashed == EL_DRACHE || smashed == EL_MOLE)
{
sound = SND_KLUMPF;
break;
case EL_FELSBROCKEN:
+ case EL_BD_ROCK:
sound = SND_KLOPF;
break;
case EL_SP_ZONK:
MovDir[x][y] = game.balloon_dir;
MovDelay[x][y] = 0;
}
+ else if (element == EL_SPRING_MOVING)
+ {
+ if (!IN_LEV_FIELD(move_x, move_y) || !IS_FREE(move_x, move_y) ||
+ (IN_LEV_FIELD(x, y+1) && IS_FREE(x, y+1)))
+ {
+ Feld[x][y] = EL_SPRING;
+ MovDir[x][y] = MV_NO_MOVING;
+ }
+ MovDelay[x][y] = 0;
+ }
else if (element == EL_ROBOT || element == EL_SONDE || element == EL_PINGUIN)
{
int attr_x = -1, attr_y = -1;
Feld[x][y+1] = EL_MORAST_VOLL;
}
}
- else if (element == EL_FELSBROCKEN && Feld[x][y+1] == EL_MORAST_LEER)
+ else if ((element == EL_FELSBROCKEN || element == EL_BD_ROCK) &&
+ Feld[x][y+1] == EL_MORAST_LEER)
{
InitMovingField(x, y, MV_DOWN);
Store[x][y] = EL_MORAST_VOLL;
else if (IS_SLIPPERY(Feld[x][y+1]) && !Store[x][y+1])
#else
else if (IS_SLIPPERY(Feld[x][y+1]) && !Store[x][y+1] &&
- !IS_FALLING(x, y+1) && !JustStopped[x][y+1])
+ !IS_FALLING(x, y+1) && !JustStopped[x][y+1] &&
+ element != EL_DX_SUPABOMB)
#endif
{
boolean left = (x>0 && IS_FREE(x-1, y) &&
if (left || right)
{
- if (left && right && game.emulation != EMU_BOULDERDASH)
+ if (left && right &&
+ (game.emulation != EMU_BOULDERDASH &&
+ element != EL_BD_ROCK && element != EL_EDELSTEIN_BD))
left = !(right = RND(2));
InitMovingField(x, y, left ? MV_LEFT : MV_RIGHT);
{
int newx, newy;
- if ((element == EL_SONDE || element == EL_BALLOON)
+ if ((element == EL_SONDE || element == EL_BALLOON ||
+ element == EL_SPRING_MOVING)
&& JustBeingPushed(x, y))
return;
else if (CAN_FALL(element) && horiz_move &&
y < lev_fieldy-1 && IS_BELT(Feld[x][y+1]))
step /= 2;
+ else if (element == EL_SPRING_MOVING)
+ step*=2;
#if OLD_GAME_BEHAVIOUR
else if (CAN_FALL(element) && horiz_move && !IS_SP_ELEMENT(element))
if (done)
PlaySoundLevel(ax, ay,
- (new_element == EL_FELSBROCKEN ? SND_KLOPF : SND_PLING));
+ (new_element == EL_BD_ROCK ? SND_KLOPF : SND_PLING));
}
void AmoebeWaechst(int x, int y)
if (element == EL_AMOEBE_BD && AmoebaCnt2[new_group_nr] >= 200)
{
- AmoebeUmwandelnBD(newax, neway, EL_FELSBROCKEN);
+ AmoebeUmwandelnBD(newax, neway, EL_BD_ROCK);
return;
}
}
{
int el = Feld[jx+dx][jy];
int push_delay = (IS_SB_ELEMENT(el) || el == EL_SONDE ? 2 :
- el == EL_BALLOON ? 0 : 10);
+ (el == EL_BALLOON || el == EL_SPRING) ? 0 : 10);
if (tape.delay_played + push_delay >= tape.pos[tape.counter].delay)
{
break;
case EL_FELSBROCKEN:
+ case EL_BD_ROCK:
case EL_BOMBE:
+ case EL_DX_SUPABOMB:
case EL_KOKOSNUSS:
case EL_ZEIT_LEER:
case EL_SP_ZONK:
case EL_SP_DISK_ORANGE:
+ case EL_SPRING:
if (dy || mode == DF_SNAP)
return MF_NO_ACTION;
if (player->push_delay == 0)
player->push_delay = FrameCounter;
if (!FrameReached(&player->push_delay, player->push_delay_value) &&
- !tape.playing)
+ !tape.playing && element != EL_SPRING)
return MF_NO_ACTION;
RemoveField(x, y);
Feld[x+dx][y+dy] = element;
- player->push_delay_value = 2+RND(8);
+ if (element == EL_SPRING)
+ {
+ Feld[x+dx][y+dy] = EL_SPRING_MOVING;
+ MovDir[x+dx][y+dy] = move_direction;
+ }
+
+ player->push_delay_value = (element == EL_SPRING ? 0 : 2 + RND(8));
DrawLevelField(x+dx, y+dy);
- if (element == EL_FELSBROCKEN)
+ if (element == EL_FELSBROCKEN || element == EL_BD_ROCK)
PlaySoundLevel(x+dx, y+dy, SND_PUSCH);
else if (element == EL_KOKOSNUSS)
PlaySoundLevel(x+dx, y+dy, SND_KNURK);
case EL_SONDE:
case EL_SP_DISK_YELLOW:
case EL_BALLOON:
- case EL_SPRING:
if (mode == DF_SNAP)
return MF_NO_ACTION;