From 1a47e534f1a3945f70dd1465fa6e272a65abfe1f Mon Sep 17 00:00:00 2001 From: skyjake Date: Thu, 19 Apr 2012 18:05:29 +0300 Subject: [PATCH] Doom|Heretic: Added compatibility menu option for monsters floating over obstacles Also, player mobjs must be exempt from the check or it would hinder melee fights. --- doomsday/plugins/common/src/hu_menu.c | 5 +++++ doomsday/plugins/common/src/p_map.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doomsday/plugins/common/src/hu_menu.c b/doomsday/plugins/common/src/hu_menu.c index 448494b1d8..0ba3b55d00 100644 --- a/doomsday/plugins/common/src/hu_menu.c +++ b/doomsday/plugins/common/src/hu_menu.c @@ -167,6 +167,7 @@ cvarbutton_t mnCVarButtons[] = { #endif #if __JDOOM__ || __JHERETIC__ || __JDOOM64__ { 0, "game-monsters-stuckindoors" }, + { 0, "game-monsters-floatoverblocking" }, { 0, "game-objects-clipping" }, { 0, "game-objects-falloff" }, { 0, "game-objects-neverhangoverledges" }, @@ -1067,6 +1068,7 @@ mndata_text_t txt_gameplay_painelemental_limit_lostsouls = { "PE Limited To 21 L mndata_text_t txt_gameplay_lostsouls_stuck = { "LS Can Get Stuck Inside Walls" }; # endif mndata_text_t txt_gameplay_monsters_stuck_in_doors = { "Monsters Can Get Stuck In Doors" }; +mndata_text_t txt_gameplay_monsters_float_over_blocking = { "Monsters Fly Over Obstacles" }; mndata_text_t txt_gameplay_never_hang_over_ledges = { "Some Objects Never Hang Over Ledges" }; mndata_text_t txt_gameplay_fall_under_own_weight = { "Objects Fall Under Own Weight" }; mndata_text_t txt_gameplay_corpse_stair_slide = { "Corpses Slide Down Stairs" }; @@ -1089,6 +1091,7 @@ mndata_button_t btn_gameplay_allow_jumping = { true, "player-jump" }; mndata_button_t btn_gameplay_weapon_recoil = { true, "player-weapon-recoil" }; #endif #if __JDOOM__ || __JHERETIC__ || __JDOOM64__ +mndata_button_t btn_gameplay_monsters_float_over_blocking = { true, "game-monsters-floatoverblocking" }; # if __JDOOM__ || __JDOOM64__ mndata_button_t btn_gameplay_any_boss_trigger_666 = { true, "game-anybossdeath666" }; # if !__JDOOM64__ @@ -1140,6 +1143,8 @@ static mn_object_t GameplayMenuObjects[] = { { MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_gameplay_lostsouls_stuck }, { MN_BUTTON, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_gameplay_lostsouls_stuck }, # endif + { MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_gameplay_monsters_float_over_blocking }, + { MN_BUTTON, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_gameplay_monsters_float_over_blocking }, { MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_gameplay_monsters_stuck_in_doors }, { MN_BUTTON, 1, 0, { 0, 0 }, 'd',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_gameplay_monsters_stuck_in_doors }, { MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_gameplay_never_hang_over_ledges }, diff --git a/doomsday/plugins/common/src/p_map.c b/doomsday/plugins/common/src/p_map.c index 6b74aac101..b00d325b32 100644 --- a/doomsday/plugins/common/src/p_map.c +++ b/doomsday/plugins/common/src/p_map.c @@ -949,7 +949,7 @@ int PIT_CheckThing(mobj_t* thing, void* data) else if(!tmThing->player && solid) { // A non-player object is contacting a solid object. - if(cfg.allowMonsterFloatOverBlocking && (tmThing->flags & MF_FLOAT)) + if(cfg.allowMonsterFloatOverBlocking && (tmThing->flags & MF_FLOAT) && !thing->player) { float top = thing->pos[VZ] + thing->height; tmThing->onMobj = thing;