From: Holger Schemel Date: Sat, 14 Oct 2006 21:01:03 +0000 (+0200) Subject: rnd-20061014-2-src X-Git-Tag: 3.2.3^2~33 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=c0f3e2e3c8f0c8b88fca68375d0b942bda8ffcbf;p=rocksndiamonds.git rnd-20061014-2-src * fixed bug that prevented player from being killed when indestructible, non-walkable element is placed on player position by extended change --- diff --git a/ChangeLog b/ChangeLog index 6ede103c..15b3d146 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2006-10-14 * fixed bug that prevented player from correctly being created in the top left corner by a custom element change in a level without player + * fixed bug that prevented player from being killed when indestructible, + non-walkable element is placed on player position by extended change 2006-10-13 * added page fading effects for remaining info sub-screens diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 56c3c61b..c91dbcb4 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -4184,10 +4184,10 @@ struct ConfigInfo image_config[] = { "menu.button_next_level.clone_from", "menu.button_right" }, { "menu.button_next_level.active", "RocksDC.pcx" }, { "menu.button_next_level.active.clone_from", "menu.button_right.active" }, - { "menu.button_last_level", "RocksDC.pcx" }, - { "menu.button_last_level.clone_from", "menu.button_left" }, - { "menu.button_last_level.active", "RocksDC.pcx" }, - { "menu.button_last_level.active.clone_from", "menu.button_left.active" }, + { "menu.button_prev_level", "RocksDC.pcx" }, + { "menu.button_prev_level.clone_from", "menu.button_left" }, + { "menu.button_prev_level.active", "RocksDC.pcx" }, + { "menu.button_prev_level.active.clone_from", "menu.button_left.active" }, { "menu.scrollbar", "RocksDC.pcx" }, { "menu.scrollbar.xpos", "8" }, @@ -4548,6 +4548,82 @@ struct ConfigInfo image_config[] = { "menu.fade_delay", "250" }, { "menu.post_delay", "125" }, + { "main.button.name.x", "-1" }, + { "main.button.name.y", "-1" }, + { "main.button.levels.x", "-1" }, + { "main.button.levels.y", "-1" }, + { "main.button.scores.x", "-1" }, + { "main.button.scores.y", "-1" }, + { "main.button.editor.x", "-1" }, + { "main.button.editor.y", "-1" }, + { "main.button.info.x", "-1" }, + { "main.button.info.y", "-1" }, + { "main.button.game.x", "-1" }, + { "main.button.game.y", "-1" }, + { "main.button.setup.x", "-1" }, + { "main.button.setup.y", "-1" }, + { "main.button.quit.x", "-1" }, + { "main.button.quit.y", "-1" }, + { "main.button.prev_level.x", "-1" }, + { "main.button.prev_level.y", "-1" }, + { "main.button.next_level.x", "-1" }, + { "main.button.next_level.y", "-1" }, + + { "main.text.name.x", "-1" }, + { "main.text.name.y", "-1" }, + { "main.text.name.width", "-1" }, + { "main.text.name.height", "-1" }, + { "main.text.levels.x", "-1" }, + { "main.text.levels.y", "-1" }, + { "main.text.levels.width", "-1" }, + { "main.text.levels.height", "-1" }, + { "main.text.scores.x", "-1" }, + { "main.text.scores.y", "-1" }, + { "main.text.scores.width", "-1" }, + { "main.text.scores.height", "-1" }, + { "main.text.editor.x", "-1" }, + { "main.text.editor.y", "-1" }, + { "main.text.editor.width", "-1" }, + { "main.text.editor.height", "-1" }, + { "main.text.info.x", "-1" }, + { "main.text.info.y", "-1" }, + { "main.text.info.width", "-1" }, + { "main.text.info.height", "-1" }, + { "main.text.game.x", "-1" }, + { "main.text.game.y", "-1" }, + { "main.text.game.width", "-1" }, + { "main.text.game.height", "-1" }, + { "main.text.setup.x", "-1" }, + { "main.text.setup.y", "-1" }, + { "main.text.setup.width", "-1" }, + { "main.text.setup.height", "-1" }, + { "main.text.quit.x", "-1" }, + { "main.text.quit.y", "-1" }, + { "main.text.quit.width", "-1" }, + { "main.text.quit.height", "-1" }, + + { "main.text.current_level.x", "-1" }, + { "main.text.current_level.y", "-1" }, + { "main.text.first_level.x", "-1" }, + { "main.text.first_level.y", "-1" }, + { "main.text.last_level.x", "-1" }, + { "main.text.last_level.y", "-1" }, + { "main.text.levelset_info.x", "-1" }, + { "main.text.levelset_info.y", "-1" }, + { "main.text.level_info.x", "-1" }, + { "main.text.level_info.y", "-1" }, + + { "main.input.name.x", "-1" }, + { "main.input.name.y", "-1" }, + + { "preview.x", "148" }, + { "preview.y", "388" }, + { "preview.xsize", "66" }, + { "preview.ysize", "34" }, + { "preview.tile_size", "4" }, + { "preview.step_offset", "1" }, + { "preview.step_delay", "50" }, + { "door_1.width", "-1" }, { "door_1.height", "-1" }, { "door_1.step_offset", "2" }, @@ -4560,14 +4636,6 @@ struct ConfigInfo image_config[] = { "door_2.step_delay", "10" }, { "door_2.anim_mode", "default" }, - { "preview.x", "148" }, - { "preview.y", "388" }, - { "preview.xsize", "66" }, - { "preview.ysize", "34" }, - { "preview.tile_size", "4" }, - { "preview.step_offset", "1" }, - { "preview.step_delay", "50" }, - { "game.panel.level.x", "37" }, { "game.panel.level.y", "20" }, { "game.panel.gems.x", "29" }, diff --git a/src/conf_gfx.h b/src/conf_gfx.h index 332c6ac0..7c9d5286 100644 --- a/src/conf_gfx.h +++ b/src/conf_gfx.h @@ -1501,8 +1501,8 @@ #define IMG_MENU_BUTTON_LEAVE_MENU_ACTIVE 1480 #define IMG_MENU_BUTTON_NEXT_LEVEL 1481 #define IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE 1482 -#define IMG_MENU_BUTTON_LAST_LEVEL 1483 -#define IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE 1484 +#define IMG_MENU_BUTTON_PREV_LEVEL 1483 +#define IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE 1484 #define IMG_MENU_SCROLLBAR 1485 #define IMG_MENU_SCROLLBAR_ACTIVE 1486 #define IMG_FONT_INITIAL_1 1487 diff --git a/src/conftime.h b/src/conftime.h index 5481f447..30795ed5 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2006-10-14 12:10]" +#define COMPILE_DATE_STRING "[2006-10-14 22:55]" diff --git a/src/game.c b/src/game.c index 9ad7d033..6148015d 100644 --- a/src/game.c +++ b/src/game.c @@ -56,6 +56,8 @@ #define USE_GFX_RESET_ONLY_WHEN_MOVING (USE_NEW_STUFF * 1) #define USE_GFX_RESET_PLAYER_ARTWORK (USE_NEW_STUFF * 1) +#define USE_FIX_KILLED_BY_NON_WALKABLE (USE_NEW_STUFF * 1) + /* for DigField() */ #define DF_NO_PUSH 0 @@ -8055,6 +8057,7 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) #if USE_NEW_CUSTOM_VALUE int last_ce_value = CustomValue[x][y]; #endif + boolean player_explosion_protected = PLAYER_EXPLOSION_PROTECTED(x, y); boolean new_element_is_player = ELEM_IS_PLAYER(new_element); boolean add_player_onto_element = (new_element_is_player && #if USE_CODE_THAT_BREAKS_SNAKE_BITE @@ -8118,6 +8121,15 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) /* check if element under the player changes from accessible to unaccessible (needed for special case of dropping element which then changes) */ /* (must be checked after creating new element for walkable group elements) */ +#if USE_FIX_KILLED_BY_NON_WALKABLE + if (IS_PLAYER(x, y) && !player_explosion_protected && + IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element)) + { + Bang(x, y); + + return; + } +#else if (IS_PLAYER(x, y) && !PLAYER_EXPLOSION_PROTECTED(x, y) && IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element)) { @@ -8125,6 +8137,7 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change) return; } +#endif #endif /* "ChangeCount" not set yet to allow "entered by player" change one time */ diff --git a/src/libgame/system.h b/src/libgame/system.h index 081471ab..6a50cea0 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -984,6 +984,12 @@ struct XY int x, y; }; +struct Rect +{ + int x, y; + int width, height; +}; + /* ========================================================================= */ /* exported variables */ diff --git a/src/libgame/toons.c b/src/libgame/toons.c index f48621b9..17fe7c3c 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -308,7 +308,6 @@ void HandleAnimation(int mode) static boolean anim_restart = TRUE; static boolean reset_delay = TRUE; static int toon_nr = 0; - int draw_mode; if (!setup.toons || screen_info.num_toons == 0) return; @@ -338,6 +337,8 @@ void HandleAnimation(int mode) if (anim_running) { #if 0 + int draw_mode; + redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER); /* Redraw background even when in direct drawing mode */ diff --git a/src/main.c b/src/main.c index 76799920..915ea749 100644 --- a/src/main.c +++ b/src/main.c @@ -4616,21 +4616,21 @@ struct ElementDirectionInfo element_direction_info[NUM_DIRECTIONS_FULL + 1] = struct SpecialSuffixInfo special_suffix_info[NUM_SPECIAL_GFX_ARGS + 1 + 1] = { - { ".[DEFAULT]", GAME_MODE_DEFAULT, }, - { ".TITLE", GAME_MODE_TITLE, }, - { ".MAIN", GAME_MODE_MAIN, }, - { ".LEVELS", GAME_MODE_LEVELS }, - { ".SCORES", GAME_MODE_SCORES, }, - { ".EDITOR", GAME_MODE_EDITOR, }, - { ".INFO", GAME_MODE_INFO, }, - { ".SETUP", GAME_MODE_SETUP, }, - { ".PLAYING", GAME_MODE_PLAYING, }, - { ".DOOR", GAME_MODE_PSEUDO_DOOR, }, - { ".PREVIEW", GAME_MODE_PSEUDO_PREVIEW, }, - { ".CRUMBLED", GAME_MODE_PSEUDO_CRUMBLED, }, + { ".[DEFAULT]", GFX_SPECIAL_ARG_DEFAULT, }, + { ".TITLE", GFX_SPECIAL_ARG_TITLE, }, + { ".MAIN", GFX_SPECIAL_ARG_MAIN, }, + { ".LEVELS", GFX_SPECIAL_ARG_LEVELS }, + { ".SCORES", GFX_SPECIAL_ARG_SCORES, }, + { ".EDITOR", GFX_SPECIAL_ARG_EDITOR, }, + { ".INFO", GFX_SPECIAL_ARG_INFO, }, + { ".SETUP", GFX_SPECIAL_ARG_SETUP, }, + { ".PLAYING", GFX_SPECIAL_ARG_PLAYING, }, + { ".DOOR", GFX_SPECIAL_ARG_DOOR, }, + { ".PREVIEW", GFX_SPECIAL_ARG_PREVIEW, }, + { ".CRUMBLED", GFX_SPECIAL_ARG_CRUMBLED, }, /* empty suffix always matches -- check as last entry in InitMusicInfo() */ - { "", GAME_MODE_DEFAULT, }, + { "", GFX_SPECIAL_ARG_DEFAULT, }, { NULL, 0, } }; @@ -4674,6 +4674,82 @@ struct TokenIntPtrInfo image_config_vars[] = { "menu.fade_delay", &menu.fade_delay }, { "menu.post_delay", &menu.post_delay }, + { "main.button.name.x", &menu.main.button.name.x }, + { "main.button.name.y", &menu.main.button.name.y }, + { "main.button.levels.x", &menu.main.button.levels.x }, + { "main.button.levels.y", &menu.main.button.levels.y }, + { "main.button.scores.x", &menu.main.button.scores.x }, + { "main.button.scores.y", &menu.main.button.scores.y }, + { "main.button.editor.x", &menu.main.button.editor.x }, + { "main.button.editor.y", &menu.main.button.editor.y }, + { "main.button.info.x", &menu.main.button.info.x }, + { "main.button.info.y", &menu.main.button.info.y }, + { "main.button.game.x", &menu.main.button.game.x }, + { "main.button.game.y", &menu.main.button.game.y }, + { "main.button.setup.x", &menu.main.button.setup.x }, + { "main.button.setup.y", &menu.main.button.setup.y }, + { "main.button.quit.x", &menu.main.button.quit.x }, + { "main.button.quit.y", &menu.main.button.quit.y }, + { "main.button.prev_level.x", &menu.main.button.prev_level.x }, + { "main.button.prev_level.y", &menu.main.button.prev_level.y }, + { "main.button.next_level.x", &menu.main.button.next_level.x }, + { "main.button.next_level.y", &menu.main.button.next_level.y }, + + { "main.text.name.x", &menu.main.text.name.x }, + { "main.text.name.y", &menu.main.text.name.y }, + { "main.text.name.width", &menu.main.text.name.width }, + { "main.text.name.height", &menu.main.text.name.height }, + { "main.text.levels.x", &menu.main.text.levels.x }, + { "main.text.levels.y", &menu.main.text.levels.y }, + { "main.text.levels.width", &menu.main.text.levels.width }, + { "main.text.levels.height", &menu.main.text.levels.height }, + { "main.text.scores.x", &menu.main.text.scores.x }, + { "main.text.scores.y", &menu.main.text.scores.y }, + { "main.text.scores.width", &menu.main.text.scores.width }, + { "main.text.scores.height", &menu.main.text.scores.height }, + { "main.text.editor.x", &menu.main.text.editor.x }, + { "main.text.editor.y", &menu.main.text.editor.y }, + { "main.text.editor.width", &menu.main.text.editor.width }, + { "main.text.editor.height", &menu.main.text.editor.height }, + { "main.text.info.x", &menu.main.text.info.x }, + { "main.text.info.y", &menu.main.text.info.y }, + { "main.text.info.width", &menu.main.text.info.width }, + { "main.text.info.height", &menu.main.text.info.height }, + { "main.text.game.x", &menu.main.text.game.x }, + { "main.text.game.y", &menu.main.text.game.y }, + { "main.text.game.width", &menu.main.text.game.width }, + { "main.text.game.height", &menu.main.text.game.height }, + { "main.text.setup.x", &menu.main.text.setup.x }, + { "main.text.setup.y", &menu.main.text.setup.y }, + { "main.text.setup.width", &menu.main.text.setup.width }, + { "main.text.setup.height", &menu.main.text.setup.height }, + { "main.text.quit.x", &menu.main.text.quit.x }, + { "main.text.quit.y", &menu.main.text.quit.y }, + { "main.text.quit.width", &menu.main.text.quit.width }, + { "main.text.quit.height", &menu.main.text.quit.height }, + + { "main.text.current_level.x",&menu.main.text.current_level.x }, + { "main.text.current_level.y",&menu.main.text.current_level.y }, + { "main.text.first_level.x", &menu.main.text.first_level.x }, + { "main.text.first_level.y", &menu.main.text.first_level.y }, + { "main.text.last_level.x", &menu.main.text.last_level.x }, + { "main.text.last_level.y", &menu.main.text.last_level.y }, + { "main.text.levelset_info.x",&menu.main.text.levelset_info.x }, + { "main.text.levelset_info.y",&menu.main.text.levelset_info.y }, + { "main.text.level_info.x", &menu.main.text.level_info.x }, + { "main.text.level_info.y", &menu.main.text.level_info.y }, + + { "main.input.name.x", &menu.main.input.name.x }, + { "main.input.name.y", &menu.main.input.name.y }, + + { "preview.x", &preview.x }, + { "preview.y", &preview.y }, + { "preview.xsize", &preview.xsize }, + { "preview.ysize", &preview.ysize }, + { "preview.tile_size", &preview.tile_size }, + { "preview.step_offset", &preview.step_offset }, + { "preview.step_delay", &preview.step_delay }, + { "door_1.width", &door_1.width }, { "door_1.height", &door_1.height }, { "door_1.step_offset", &door_1.step_offset }, @@ -4685,14 +4761,6 @@ struct TokenIntPtrInfo image_config_vars[] = { "door_2.step_delay", &door_2.step_delay }, { "door_2.anim_mode", &door_2.anim_mode }, - { "preview.x", &preview.x }, - { "preview.y", &preview.y }, - { "preview.xsize", &preview.xsize }, - { "preview.ysize", &preview.ysize }, - { "preview.tile_size", &preview.tile_size }, - { "preview.step_offset", &preview.step_offset }, - { "preview.step_delay", &preview.step_delay }, - { "game.panel.level.x", &game.panel.level.x }, { "game.panel.level.y", &game.panel.level.y }, { "game.panel.gems.x", &game.panel.gems.x }, diff --git a/src/main.h b/src/main.h index b4a34769..4cedee08 100644 --- a/src/main.h +++ b/src/main.h @@ -1820,6 +1820,50 @@ struct BorderInfo int draw_masked[NUM_SPECIAL_GFX_ARGS]; }; +struct MenuMainButtonInfo +{ + struct XY name; + struct XY levels; + struct XY scores; + struct XY editor; + struct XY info; + struct XY game; + struct XY setup; + struct XY quit; + struct XY prev_level; + struct XY next_level; +}; + +struct MenuMainTextInfo +{ + struct Rect name; + struct Rect levels; + struct Rect scores; + struct Rect editor; + struct Rect info; + struct Rect game; + struct Rect setup; + struct Rect quit; + + struct XY current_level; + struct XY first_level; + struct XY last_level; + struct XY levelset_info; + struct XY level_info; +}; + +struct MenuMainInputInfo +{ + struct XY name; +}; + +struct MenuMainInfo +{ + struct MenuMainButtonInfo button; + struct MenuMainTextInfo text; + struct MenuMainInputInfo input; +}; + struct MenuInfo { int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; @@ -1834,6 +1878,8 @@ struct MenuInfo int sound[NUM_SPECIAL_GFX_ARGS]; int music[NUM_SPECIAL_GFX_ARGS]; + + struct MenuMainInfo main; }; struct DoorInfo diff --git a/src/screens.c b/src/screens.c index 17a7910c..4239faf8 100644 --- a/src/screens.c +++ b/src/screens.c @@ -72,9 +72,9 @@ #define MAX_MENU_TEXT_LENGTH_MEDIUM (MAX_MENU_TEXT_LENGTH_BIG * 2) /* buttons and scrollbars identifiers */ -#define SCREEN_CTRL_ID_LAST_LEVEL 0 +#define SCREEN_CTRL_ID_PREV_LEVEL 0 #define SCREEN_CTRL_ID_NEXT_LEVEL 1 -#define SCREEN_CTRL_ID_LAST_PLAYER 2 +#define SCREEN_CTRL_ID_PREV_PLAYER 2 #define SCREEN_CTRL_ID_NEXT_PLAYER 3 #define SCREEN_CTRL_ID_SCROLL_UP 4 #define SCREEN_CTRL_ID_SCROLL_DOWN 5 @@ -187,7 +187,7 @@ static void drawCursorExt(int xpos, int ypos, int color, int g) g == IMG_MENU_BUTTON_RIGHT ? IMG_MENU_BUTTON_RIGHT_ACTIVE : g == IMG_MENU_BUTTON_LEAVE_MENU ? IMG_MENU_BUTTON_LEAVE_MENU_ACTIVE : g == IMG_MENU_BUTTON_ENTER_MENU ? IMG_MENU_BUTTON_ENTER_MENU_ACTIVE : - g == IMG_MENU_BUTTON_LAST_LEVEL ? IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE : + g == IMG_MENU_BUTTON_PREV_LEVEL ? IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE : g == IMG_MENU_BUTTON_NEXT_LEVEL ? IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE : IMG_MENU_BUTTON_ACTIVE); @@ -3725,7 +3725,7 @@ static void getScreenMenuButtonPos(int *x, int *y, int gadget_id) { switch (gadget_id) { - case SCREEN_CTRL_ID_LAST_LEVEL: + case SCREEN_CTRL_ID_PREV_LEVEL: *x = mSX + TILEX * getLastLevelButtonPos(); *y = mSY + TILEY * (MENU_SCREEN_START_YPOS + 1); break; @@ -3735,7 +3735,7 @@ static void getScreenMenuButtonPos(int *x, int *y, int gadget_id) *y = mSY + TILEY * (MENU_SCREEN_START_YPOS + 1); break; - case SCREEN_CTRL_ID_LAST_PLAYER: + case SCREEN_CTRL_ID_PREV_PLAYER: *x = mSX + TILEX * 10; *y = mSY + TILEY * MENU_SCREEN_START_YPOS; break; @@ -3760,9 +3760,9 @@ static struct } menubutton_info[NUM_SCREEN_MENUBUTTONS] = { { - IMG_MENU_BUTTON_LAST_LEVEL, IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE, + IMG_MENU_BUTTON_PREV_LEVEL, IMG_MENU_BUTTON_PREV_LEVEL_ACTIVE, getScreenMenuButtonPos, - SCREEN_CTRL_ID_LAST_LEVEL, + SCREEN_CTRL_ID_PREV_LEVEL, SCREEN_MASK_MAIN, "last level" }, @@ -3776,7 +3776,7 @@ static struct { IMG_MENU_BUTTON_LEFT, IMG_MENU_BUTTON_LEFT_ACTIVE, getScreenMenuButtonPos, - SCREEN_CTRL_ID_LAST_PLAYER, + SCREEN_CTRL_ID_PREV_PLAYER, SCREEN_MASK_INPUT, "last player" }, @@ -4117,7 +4117,7 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) switch (id) { - case SCREEN_CTRL_ID_LAST_LEVEL: + case SCREEN_CTRL_ID_PREV_LEVEL: HandleMainMenu_SelectLevel(step, -1); break; @@ -4125,7 +4125,7 @@ static void HandleScreenGadgets(struct GadgetInfo *gi) HandleMainMenu_SelectLevel(step, +1); break; - case SCREEN_CTRL_ID_LAST_PLAYER: + case SCREEN_CTRL_ID_PREV_PLAYER: HandleSetupScreen_Input_Player(step, -1); break;