projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-19990317-1-src
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 1fbb21a5cef1115e2672f62d0f3dd47f907f9da4..d4860369384bee8c3a33cf2f685e70d89d1429c4 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-897,15
+897,16
@@
int NewHiScore()
#ifdef ONE_PER_NAME
put_into_list:
#endif
#ifdef ONE_PER_NAME
put_into_list:
#endif
- strncpy(highscore[k].Name, setup.player_name, MAX_
NAMELEN - 1
);
- highscore[k].Name[MAX_
NAMELEN - 1
] = '\0';
+ strncpy(highscore[k].Name, setup.player_name, MAX_
PLAYER_NAME_LEN
);
+ highscore[k].Name[MAX_
PLAYER_NAME_LEN
] = '\0';
highscore[k].Score = local_player->score;
position = k;
break;
}
#ifdef ONE_PER_NAME
highscore[k].Score = local_player->score;
position = k;
break;
}
#ifdef ONE_PER_NAME
- else if (!strncmp(setup.player_name, highscore[k].Name, MAX_NAMELEN - 1))
+ else if (!strncmp(setup.player_name, highscore[k].Name,
+ MAX_PLAYER_NAME_LEN))
break; /* player already there with a higher score */
#endif
break; /* player already there with a higher score */
#endif
@@
-1113,13
+1114,22
@@
void Explode(int ex, int ey, int phase, int mode)
if (IS_MOVING(ex, ey) || IS_BLOCKED(ex, ey))
{
if (IS_MOVING(ex, ey) || IS_BLOCKED(ex, ey))
{
+ /* put moving element to center field (and let it explode there) */
center_element = MovingOrBlocked2Element(ex, ey);
RemoveMovingField(ex, ey);
center_element = MovingOrBlocked2Element(ex, ey);
RemoveMovingField(ex, ey);
+ Feld[ex][ey] = center_element;
}
}
- for (y=ey-1; y<
ey+2; y++) for(x=ex-1; x<ex+2
; x++)
+ for (y=ey-1; y<
=ey+1; y++) for(x=ex-1; x<=ex+1
; x++)
{
{
- int element = Feld[x][y];
+ int element;
+
+ if (!IN_LEV_FIELD(x, y) ||
+ ((mode != EX_NORMAL || center_element == EL_AMOEBA2DIAM) &&
+ (x != ex || y != ey)))
+ continue;
+
+ element = Feld[x][y];
if (IS_MOVING(x, y) || IS_BLOCKED(x, y))
{
if (IS_MOVING(x, y) || IS_BLOCKED(x, y))
{
@@
-1127,11
+1137,7
@@
void Explode(int ex, int ey, int phase, int mode)
RemoveMovingField(x, y);
}
RemoveMovingField(x, y);
}
- if (!IN_LEV_FIELD(x, y) || IS_MASSIVE(element) || element == EL_BURNING)
- continue;
-
- if ((mode != EX_NORMAL || center_element == EL_AMOEBA2DIAM) &&
- (x != ex || y != ey))
+ if (IS_MASSIVE(element) || element == EL_BURNING)
continue;
if (element == EL_EXPLODING)
continue;
if (element == EL_EXPLODING)
@@
-1313,6
+1319,11
@@
void DynaExplode(int ex, int ey)
break;
element = Feld[x][y];
break;
element = Feld[x][y];
+
+ /* do not restart explosions of fields with active bombs */
+ if (element == EL_EXPLODING && IS_ACTIVE_BOMB(Store2[x][y]))
+ continue;
+
Explode(x, y, EX_PHASE_START, EX_BORDER);
if (element != EL_LEERRAUM &&
Explode(x, y, EX_PHASE_START, EX_BORDER);
if (element != EL_LEERRAUM &&
@@
-4579,6
+4590,8
@@
int DigField(struct PlayerInfo *player,
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
+ PlaySoundLevel(x, y, SND_GATE);
+
break;
case EL_EM_GATE_1X:
break;
case EL_EM_GATE_1X:
@@
-4594,6
+4607,8
@@
int DigField(struct PlayerInfo *player,
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
+ PlaySoundLevel(x, y, SND_GATE);
+
break;
case EL_SP_PORT1_LEFT:
break;
case EL_SP_PORT1_LEFT:
@@
-4635,6
+4650,8
@@
int DigField(struct PlayerInfo *player,
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
player->programmed_action = move_direction;
DOUBLE_PLAYER_SPEED(player);
+ PlaySoundLevel(x, y, SND_GATE);
+
break;
case EL_AUSGANG_ZU:
break;
case EL_AUSGANG_ZU: