projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed repeated creation of differently sized bitmaps between menu and game
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 8d2ed466dc3be327c5fc1a22de7dfcbff5b8bc59..d615d6338d5f2b914df6b1378ee135b34f84acbd 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-1619,7
+1619,6
@@
void GetPlayerConfig()
setup.sound = (setup.sound_simple || setup.sound_loops || setup.sound_music);
SetAudioMode(setup.sound);
setup.sound = (setup.sound_simple || setup.sound_loops || setup.sound_music);
SetAudioMode(setup.sound);
- InitJoysticks();
}
int GetElementFromGroupElement(int element)
}
int GetElementFromGroupElement(int element)
@@
-2699,6
+2698,9
@@
static void InitGameEngine()
game.use_block_last_field_bug =
(game.engine_version < VERSION_IDENT(3,1,1,0));
game.use_block_last_field_bug =
(game.engine_version < VERSION_IDENT(3,1,1,0));
+ game_em.use_single_button =
+ (game.engine_version > VERSION_IDENT(4,0,0,2));
+
/* ---------------------------------------------------------------------- */
/* set maximal allowed number of custom element changes per game frame */
/* ---------------------------------------------------------------------- */
/* set maximal allowed number of custom element changes per game frame */
@@
-3222,6
+3224,8
@@
void InitGame()
player->was_snapping = FALSE;
player->was_dropping = FALSE;
player->was_snapping = FALSE;
player->was_dropping = FALSE;
+ player->force_dropping = FALSE;
+
player->frame_counter_bored = -1;
player->frame_counter_sleeping = -1;
player->frame_counter_bored = -1;
player->frame_counter_sleeping = -1;
@@
-10712,7
+10716,9
@@
static void CheckSingleStepMode(struct PlayerInfo *player)
{
/* as it is called "single step mode", just return to pause mode when the
player stopped moving after one tile (or never starts moving at all) */
{
/* as it is called "single step mode", just return to pause mode when the
player stopped moving after one tile (or never starts moving at all) */
- if (!player->is_moving && !player->is_pushing)
+ if (!player->is_moving &&
+ !player->is_pushing &&
+ !player->is_dropping_pressed)
{
TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
SnapField(player, 0, 0); /* stop snapping */
{
TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
SnapField(player, 0, 0); /* stop snapping */
@@
-11206,7
+11212,7
@@
void GameActionsExt()
AdvanceFrameAndPlayerCounters(-1); /* advance counters for all players */
AdvanceFrameAndPlayerCounters(-1); /* advance counters for all players */
- if (
options.debug) /* calculate frames per second */
+ if (
global.show_frames_per_second)
{
static unsigned int fps_counter = 0;
static int fps_frames = 0;
{
static unsigned int fps_counter = 0;
static int fps_frames = 0;
@@
-11214,15
+11220,20
@@
void GameActionsExt()
fps_frames++;
fps_frames++;
- if (fps_delay_ms >= 500) /* calculate
fps
every 0.5 seconds */
+ if (fps_delay_ms >= 500) /* calculate
FPS
every 0.5 seconds */
{
global.frames_per_second = 1000 * (float)fps_frames / fps_delay_ms;
fps_frames = 0;
fps_counter = Counter();
{
global.frames_per_second = 1000 * (float)fps_frames / fps_delay_ms;
fps_frames = 0;
fps_counter = Counter();
+
+ /* always draw FPS to screen after FPS value was updated */
+ redraw_mask |= REDRAW_FPS;
}
}
- redraw_mask |= REDRAW_FPS;
+ /* only draw FPS if no screen areas are deactivated (invisible warp mode) */
+ if (GetDrawDeactivationMask() == REDRAW_NONE)
+ redraw_mask |= REDRAW_FPS;
}
}
}
}
@@
-11266,6
+11277,14
@@
void GameActions_SP_Main()
effective_action[i] = stored_player[i].effective_action;
GameActions_SP(effective_action, warp_mode);
effective_action[i] = stored_player[i].effective_action;
GameActions_SP(effective_action, warp_mode);
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ {
+ if (stored_player[i].force_dropping)
+ stored_player[i].action |= KEY_BUTTON_DROP;
+
+ stored_player[i].force_dropping = FALSE;
+ }
}
void GameActions_RND_Main()
}
void GameActions_RND_Main()
@@
-13977,8
+13996,6
@@
static boolean DropElement(struct PlayerInfo *player)
int drop_side = drop_direction;
int drop_element = get_next_dropped_element(player);
int drop_side = drop_direction;
int drop_element = get_next_dropped_element(player);
- player->is_dropping_pressed = TRUE;
-
/* do not drop an element on top of another element; when holding drop key
pressed without moving, dropped element must move away before the next
element can be dropped (this is especially important if the next element
/* do not drop an element on top of another element; when holding drop key
pressed without moving, dropped element must move away before the next
element can be dropped (this is especially important if the next element
@@
-14006,6
+14023,9
@@
static boolean DropElement(struct PlayerInfo *player)
if (new_element == EL_UNDEFINED)
return FALSE;
if (new_element == EL_UNDEFINED)
return FALSE;
+ /* only set if player has anything that can be dropped */
+ player->is_dropping_pressed = TRUE;
+
/* check if drop key was pressed long enough for EM style dynamite */
if (new_element == EL_EM_DYNAMITE && player->drop_pressed_delay < 40)
return FALSE;
/* check if drop key was pressed long enough for EM style dynamite */
if (new_element == EL_EM_DYNAMITE && player->drop_pressed_delay < 40)
return FALSE;