projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20030105-1-src
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 5a6a248936827043d5a28bf9ec565323df6be7dc..17473731b737bf0b128d41559df8682fb5d84eb5 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-962,7
+962,6
@@
void InitGame()
DrawLevel();
DrawAllPlayers();
DrawLevel();
DrawAllPlayers();
- FadeToFront();
/* after drawing the level, correct some elements */
if (game.timegate_time_left == 0)
/* after drawing the level, correct some elements */
if (game.timegate_time_left == 0)
@@
-972,6
+971,7
@@
void InitGame()
BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
redraw_mask |= REDRAW_FROM_BACKBUFFER;
BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
redraw_mask |= REDRAW_FROM_BACKBUFFER;
+ FadeToFront();
/* copy default game door content to main double buffer */
BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto,
/* copy default game door content to main double buffer */
BlitBitmap(new_graphic_info[IMG_MENU_DOOR].bitmap, drawto,
@@
-983,7
+983,7
@@
void InitGame()
else
{
DrawTextExt(drawto, DX + XX_EMERALDS, DY + YY_EMERALDS,
else
{
DrawTextExt(drawto, DX + XX_EMERALDS, DY + YY_EMERALDS,
- int2str(level_nr, 3), FS_SMALL, FC_SPECIAL3);
+ int2str(level_nr, 3), FS_SMALL, FC_SPECIAL3
, FONT_OPAQUE
);
BlitBitmap(drawto, drawto,
DX + XX_EMERALDS, DY + YY_EMERALDS + 1,
FONT5_XSIZE * 3, FONT5_YSIZE - 1,
BlitBitmap(drawto, drawto,
DX + XX_EMERALDS, DY + YY_EMERALDS + 1,
FONT5_XSIZE * 3, FONT5_YSIZE - 1,
@@
-2807,6
+2807,8
@@
static boolean JustBeingPushed(int x, int y)
void StartMoving(int x, int y)
{
void StartMoving(int x, int y)
{
+ static boolean use_spring_bug = TRUE;
+ boolean started_moving = FALSE; /* some elements can fall _and_ move */
int element = Feld[x][y];
if (Stop[x][y])
int element = Feld[x][y];
if (Stop[x][y])
@@
-2814,7
+2816,7
@@
void StartMoving(int x, int y)
GfxAction[x][y] = GFX_ACTION_DEFAULT;
GfxAction[x][y] = GFX_ACTION_DEFAULT;
- if (CAN_FALL(element) && y
<lev_fieldy-
1)
+ if (CAN_FALL(element) && y
< lev_fieldy -
1)
{
if ((x>0 && IS_PLAYER(x-1, y)) || (x<lev_fieldx-1 && IS_PLAYER(x+1, y)))
if (JustBeingPushed(x, y))
{
if ((x>0 && IS_PLAYER(x-1, y)) || (x<lev_fieldx-1 && IS_PLAYER(x+1, y)))
if (JustBeingPushed(x, y))
@@
-2825,6
+2827,8
@@
void StartMoving(int x, int y)
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Feld[x][y] = EL_QUICKSAND_EMPTYING;
Store[x][y] = EL_ROCK;
PlaySoundLevel(x, y, SND_QUICKSAND_EMPTYING);
Feld[x][y] = EL_QUICKSAND_EMPTYING;
Store[x][y] = EL_ROCK;
PlaySoundLevel(x, y, SND_QUICKSAND_EMPTYING);
@@
-2852,6
+2856,8
@@
void StartMoving(int x, int y)
Feld[x][y+1] == EL_QUICKSAND_EMPTY)
{
InitMovingField(x, y, MV_DOWN);
Feld[x][y+1] == EL_QUICKSAND_EMPTY)
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Feld[x][y] = EL_QUICKSAND_FILLING;
Store[x][y] = element;
PlaySoundLevel(x, y, SND_QUICKSAND_FILLING);
Feld[x][y] = EL_QUICKSAND_FILLING;
Store[x][y] = element;
PlaySoundLevel(x, y, SND_QUICKSAND_FILLING);
@@
-2861,6
+2867,8
@@
void StartMoving(int x, int y)
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Feld[x][y] = EL_MAGIC_WALL_EMPTYING;
Store[x][y] = EL_CHANGED(Store[x][y]);
}
Feld[x][y] = EL_MAGIC_WALL_EMPTYING;
Store[x][y] = EL_CHANGED(Store[x][y]);
}
@@
-2887,6
+2895,8
@@
void StartMoving(int x, int y)
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Feld[x][y] = EL_BD_MAGIC_WALL_EMPTYING;
Store[x][y] = EL_CHANGED2(Store[x][y]);
}
Feld[x][y] = EL_BD_MAGIC_WALL_EMPTYING;
Store[x][y] = EL_CHANGED2(Store[x][y]);
}
@@
-2913,6
+2923,8
@@
void StartMoving(int x, int y)
Feld[x][y+1] == EL_BD_MAGIC_WALL_ACTIVE))
{
InitMovingField(x, y, MV_DOWN);
Feld[x][y+1] == EL_BD_MAGIC_WALL_ACTIVE))
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Feld[x][y] =
(Feld[x][y+1] == EL_MAGIC_WALL_ACTIVE ? EL_MAGIC_WALL_FILLING :
EL_BD_MAGIC_WALL_FILLING);
Feld[x][y] =
(Feld[x][y+1] == EL_MAGIC_WALL_ACTIVE ? EL_MAGIC_WALL_FILLING :
EL_BD_MAGIC_WALL_FILLING);
@@
-2921,7
+2933,10
@@
void StartMoving(int x, int y)
else if (CAN_SMASH(element) && Feld[x][y+1] == EL_ACID)
{
Blurb(x, y);
else if (CAN_SMASH(element) && Feld[x][y+1] == EL_ACID)
{
Blurb(x, y);
+
InitMovingField(x, y, MV_DOWN);
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+
Store[x][y] = EL_ACID;
}
else if (CAN_SMASH(element) && Feld[x][y+1] == EL_BLOCKED &&
Store[x][y] = EL_ACID;
}
else if (CAN_SMASH(element) && Feld[x][y+1] == EL_BLOCKED &&
@@
-2929,9
+2944,18
@@
void StartMoving(int x, int y)
{
Impact(x, y);
}
{
Impact(x, y);
}
+ else if (IS_FREE(x, y+1) && element == EL_SPRING && use_spring_bug)
+ {
+ if (MovDir[x][y] == MV_NO_MOVING)
+ {
+ InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
+ }
+ }
else if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
else if (IS_FREE(x, y+1))
{
InitMovingField(x, y, MV_DOWN);
+ started_moving = TRUE;
}
else if (element == EL_AMOEBA_DROP)
{
}
else if (element == EL_AMOEBA_DROP)
{
@@
-2969,6
+2993,7
@@
void StartMoving(int x, int y)
left = !(right = RND(2));
InitMovingField(x, y, left ? MV_LEFT : MV_RIGHT);
left = !(right = RND(2));
InitMovingField(x, y, left ? MV_LEFT : MV_RIGHT);
+ started_moving = TRUE;
}
}
else if (IS_BELT_ACTIVE(Feld[x][y+1]))
}
}
else if (IS_BELT_ACTIVE(Feld[x][y+1]))
@@
-2982,12
+3007,15
@@
void StartMoving(int x, int y)
(belt_dir == MV_RIGHT && right_is_free))
{
InitMovingField(x, y, belt_dir);
(belt_dir == MV_RIGHT && right_is_free))
{
InitMovingField(x, y, belt_dir);
+ started_moving = TRUE;
+
GfxAction[x][y] = GFX_ACTION_DEFAULT;
}
}
}
GfxAction[x][y] = GFX_ACTION_DEFAULT;
}
}
}
- if (CAN_MOVE(element)) /* not "else if" because of EL_SPRING */
+ /* not "else if" because of EL_SPRING */
+ if (CAN_MOVE(element) && !started_moving)
{
int newx, newy;
{
int newx, newy;
@@
-2997,8
+3025,19
@@
void StartMoving(int x, int y)
&& JustBeingPushed(x, y))
return;
&& JustBeingPushed(x, y))
return;
+#if 0
+#if 0
if (element == EL_SPRING && MovDir[x][y] == MV_DOWN)
Feld[x][y + 1] = EL_EMPTY; /* was set to EL_BLOCKED above */
if (element == EL_SPRING && MovDir[x][y] == MV_DOWN)
Feld[x][y + 1] = EL_EMPTY; /* was set to EL_BLOCKED above */
+#else
+ if (element == EL_SPRING && MovDir[x][y] != MV_NO_MOVING)
+ {
+ Moving2Blocked(x, y, &newx, &newy);
+ if (Feld[newx][newy] == EL_BLOCKED)
+ Feld[newx][newy] = EL_EMPTY; /* was set to EL_BLOCKED above */
+ }
+#endif
+#endif
if (!MovDelay[x][y]) /* start new movement phase */
{
if (!MovDelay[x][y]) /* start new movement phase */
{
@@
-4927,8
+4966,6
@@
void GameActions()
#endif
#endif
#endif
#endif
-
-
FrameCounter++;
TimeFrames++;
FrameCounter++;
TimeFrames++;
@@
-5475,7
+5512,8
@@
boolean MoveFigure(struct PlayerInfo *player, int dx, int dy)
int original_move_delay_value = player->move_delay_value;
#if DEBUG
int original_move_delay_value = player->move_delay_value;
#if DEBUG
- printf("THIS SHOULD ONLY HAPPEN WITH PRE-1.2 LEVEL TAPES.\n");
+ printf("THIS SHOULD ONLY HAPPEN WITH PRE-1.2 LEVEL TAPES. [%ld]\n",
+ tape.counter);
#endif
/* scroll remaining steps with finest movement resolution */
#endif
/* scroll remaining steps with finest movement resolution */
@@
-6991,6
+7029,14
@@
void CreateGameButtons()
}
}
}
}
+void FreeGameButtons()
+{
+ int i;
+
+ for (i=0; i<NUM_GAME_BUTTONS; i++)
+ FreeGadget(game_gadget[i]);
+}
+
static void MapGameButtons()
{
int i;
static void MapGameButtons()
{
int i;