From 0641d50d8c7dcc09297adb05a901447f3d6bb1f3 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:41:14 +0200 Subject: [PATCH 01/20] Add skill info abstraction --- prboom2/src/CMakeLists.txt | 2 + prboom2/src/dsda/skill_info.c | 155 ++++++++++++++++++++++++++++++++++ prboom2/src/dsda/skill_info.h | 63 ++++++++++++++ 3 files changed, 220 insertions(+) create mode 100644 prboom2/src/dsda/skill_info.c create mode 100644 prboom2/src/dsda/skill_info.h diff --git a/prboom2/src/CMakeLists.txt b/prboom2/src/CMakeLists.txt index 4b608e6b5..8f5df8a13 100644 --- a/prboom2/src/CMakeLists.txt +++ b/prboom2/src/CMakeLists.txt @@ -197,6 +197,8 @@ set(COMMON_SRC dsda/sfx.c dsda/sfx.h dsda/signal_context.h + dsda/skill_info.c + dsda/skill_info.h dsda/skip.c dsda/skip.h dsda/sndinfo.c diff --git a/prboom2/src/dsda/skill_info.c b/prboom2/src/dsda/skill_info.c new file mode 100644 index 000000000..ab2631bb8 --- /dev/null +++ b/prboom2/src/dsda/skill_info.c @@ -0,0 +1,155 @@ +// +// Copyright(C) 2023 by Ryan Krafnick +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// DESCRIPTION: +// DSDA Skill Info +// + +#include "doomstat.h" + +#include "skill_info.h" + +skill_info_t skill_info; + +static const skill_info_t doom_sk1_info = { + .ammo_factor = FRACUNIT * 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .key = 'i', + .name = "I'm too young to die.", + .pic_name = "M_JKILL", + .flags = SI_EASY_BOSS_BRAIN +}; + +static const skill_info_t doom_sk2_info = { + .spawn_filter = 2, + .key = 'h', + .name = "Hey, not too rough.", + .pic_name = "M_ROUGH", + .flags = SI_EASY_BOSS_BRAIN +}; + +static const skill_info_t doom_sk3_info = { + .spawn_filter = 3, + .key = 'h', + .name = "Hurt me plenty.", + .pic_name = "M_HURT", + .flags = SI_DEFAULT_SKILL +}; + +static const skill_info_t doom_sk4_info = { + .spawn_filter = 4, + .key = 'u', + .name = "Ultra-Violence.", + .pic_name = "M_ULTRA", + .flags = 0 +}; + +static const skill_info_t doom_sk5_info = { + .ammo_factor = FRACUNIT * 2, + .spawn_filter = 5, + .key = 'n', + .name = "Nightmare!", + .pic_name = "M_NMARE", + .respawn_time = 12, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION | SI_MUST_CONFIRM +}; + +static const skill_info_t heretic_sk1_info = { + .ammo_factor = FRACUNIT * 3 / 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .flags = SI_AUTO_USE_HEALTH +}; + +static const skill_info_t heretic_sk2_info = { + .spawn_filter = 2, + .flags = 0 +}; + +static const skill_info_t heretic_sk3_info = { + .spawn_filter = 3, + .flags = SI_DEFAULT_SKILL +}; + +static const skill_info_t heretic_sk4_info = { + .spawn_filter = 4, + .flags = 0 +}; + +static const skill_info_t heretic_sk5_info = { + .ammo_factor = FRACUNIT * 3 / 2, + .spawn_filter = 5, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION +}; + +static const skill_info_t hexen_sk1_info = { + .ammo_factor = FRACUNIT * 3 / 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .flags = SI_AUTO_USE_HEALTH +}; + +static const skill_info_t hexen_sk2_info = { + .spawn_filter = 2, + .flags = 0 +}; + +static const skill_info_t hexen_sk3_info = { + .spawn_filter = 3, + .flags = SI_DEFAULT_SKILL +}; + +static const skill_info_t hexen_sk4_info = { + .spawn_filter = 4, + .flags = 0 +}; + +static const skill_info_t hexen_sk5_info = { + .ammo_factor = FRACUNIT * 3 / 2, + .spawn_filter = 5, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION +}; + +const skill_info_t doom_skill_infos[5] = { + doom_sk1_info, + doom_sk2_info, + doom_sk3_info, + doom_sk4_info, + doom_sk5_info, +}; + +const skill_info_t heretic_skill_infos[5] = { + heretic_sk1_info, + heretic_sk2_info, + heretic_sk3_info, + heretic_sk4_info, + heretic_sk5_info, +}; + +const skill_info_t hexen_skill_infos[5] = { + hexen_sk1_info, + hexen_sk2_info, + hexen_sk3_info, + hexen_sk4_info, + hexen_sk5_info, +}; + +const skill_info_t* skill_infos; + +int num_skills = 5; + +void dsda_UpdateGameSkill(skill_t skill) { + gameskill = skill; + skill_info = skill_infos[skill]; +} diff --git a/prboom2/src/dsda/skill_info.h b/prboom2/src/dsda/skill_info.h new file mode 100644 index 000000000..cccf4d3b5 --- /dev/null +++ b/prboom2/src/dsda/skill_info.h @@ -0,0 +1,63 @@ +// +// Copyright(C) 2023 by Ryan Krafnick +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// DESCRIPTION: +// DSDA Skill Info +// + +#ifndef __DSDA_SKILL_INFO__ +#define __DSDA_SKILL_INFO__ + +#define SI_SPAWN_MULTI 0x0001 +#define SI_FAST_MONSTERS 0x0002 +#define SI_INSTANT_REACTION 0x0004 +#define SI_DISABLE_CHEATS 0x0008 +#define SI_NO_PAIN 0x0010 +#define SI_DEFAULT_SKILL 0x0020 +#define SI_NO_MENU 0x0040 +#define SI_PLAYER_RESPAWN 0x0080 +#define SI_EASY_BOSS_BRAIN 0x0100 +#define SI_MUST_CONFIRM 0x0200 +#define SI_AUTO_USE_HEALTH 0x0400 + +typedef uint16_t skill_info_flags_t; + +typedef struct { + fixed_t ammo_factor; + fixed_t damage_factor; + fixed_t armor_factor; + fixed_t health_factor; + fixed_t monster_health_factor; + fixed_t friend_health_factor; + int respawn_time; + int spawn_filter; + char key; + const char* must_confirm; + const char* name; + const char* pic_name; + int text_color; + skill_info_flags_t flags; +} skill_info_t; + +extern skill_info_t skill_info; +extern const skill_info_t* skill_infos; + +extern const skill_info_t doom_skill_infos[5]; +extern const skill_info_t heretic_skill_infos[5]; +extern const skill_info_t hexen_skill_infos[5]; + +extern int num_skills; + +void dsda_UpdateGameSkill(skill_t skill); + +#endif From 226ae8af8d127511f4d6a95caefeebc157db3d42 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:42:03 +0200 Subject: [PATCH 02/20] Abstract gameskill update --- prboom2/src/dsda/global.c | 7 +++++++ prboom2/src/g_game.c | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/prboom2/src/dsda/global.c b/prboom2/src/dsda/global.c index 68e3bd65f..53039eecb 100644 --- a/prboom2/src/dsda/global.c +++ b/prboom2/src/dsda/global.c @@ -36,6 +36,7 @@ #include "dsda/mobjinfo.h" #include "dsda/music.h" #include "dsda/sfx.h" +#include "dsda/skill_info.h" #include "dsda/sprite.h" #include "dsda/state.h" @@ -152,6 +153,8 @@ static void dsda_InitDoom(void) { weaponinfo = doom_weaponinfo; + skill_infos = doom_skill_infos; + g_maxplayers = 4; g_viewheight = 41 * FRACUNIT; g_numammo = DOOM_NUMAMMO; @@ -291,6 +294,8 @@ static void dsda_InitHeretic(void) { weaponinfo = wpnlev1info; + skill_infos = heretic_skill_infos; + g_maxplayers = 4; g_viewheight = 41 * FRACUNIT; g_numammo = HERETIC_NUMAMMO; @@ -448,6 +453,8 @@ static void dsda_InitHexen(void) { // weaponinfo = wpnlev1info; + skill_infos = hexen_skill_infos; + g_maxplayers = 8; g_viewheight = 48 * FRACUNIT; g_numammo = NUMMANA; diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index f484561b1..b61de48e8 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -107,6 +107,7 @@ #include "dsda/options.h" #include "dsda/pause.h" #include "dsda/playback.h" +#include "dsda/skill_info.h" #include "dsda/skip.h" #include "dsda/time.h" #include "dsda/split_tracker.h" @@ -3037,7 +3038,7 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) dsda_ResetPauseMode(); dsda_ResetCommandHistory(); automap_active = false; - gameskill = skill; + dsda_UpdateGameSkill(skill); dsda_UpdateGameMap(episode, map); totalleveltimes = 0; // cph From 1f157fd3799e819028dde5b1fcc339fc1c45e4f5 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:42:27 +0200 Subject: [PATCH 03/20] Add wad stats skill todo --- prboom2/src/dsda/wad_stats.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prboom2/src/dsda/wad_stats.c b/prboom2/src/dsda/wad_stats.c index b69fdcec6..9972dc6e0 100644 --- a/prboom2/src/dsda/wad_stats.c +++ b/prboom2/src/dsda/wad_stats.c @@ -263,6 +263,8 @@ void dsda_WadStatsEnterMap(void) { void dsda_WadStatsExitMap(int missed_monsters) { int skill; + // TODO: remap 5 -> num_skills and 4 -> num_skills - 1 + if (!current_map_stats || demoplayback) return; From 6b2e804fcfc2863f9b803b1a2f00be63deaed1ed Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:42:58 +0200 Subject: [PATCH 04/20] Generalize num_skills --- prboom2/src/g_game.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index b61de48e8..30bc9a5a9 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -2947,8 +2947,8 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) S_ResumeSound(); } - if (skill > sk_nightmare) - skill = sk_nightmare; + if (skill > num_skills) + skill = num_skills; if (episode < 1) episode = 1; From 29d1bc74329b180406200ee0bf12b4b5a367547d Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:44:07 +0200 Subject: [PATCH 05/20] Abstract respawn check --- prboom2/src/g_game.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index 30bc9a5a9..add06f123 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -3026,7 +3026,7 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) M_ClearRandom(); - respawnmonsters = (!raven && skill == sk_nightmare) || respawnparm; + respawnmonsters = skill_infos[skill].respawn_time > 0 || respawnparm; // force players to be initialized upon first level load for (i = 0; i < g_maxplayers; i++) From b56201e2b57ea7f83aaa4ee525da202c2bde31b8 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:44:30 +0200 Subject: [PATCH 06/20] Abstract easy boss brain --- prboom2/src/p_enemy.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/prboom2/src/p_enemy.c b/prboom2/src/p_enemy.c index 3531a3e06..0403832e0 100644 --- a/prboom2/src/p_enemy.c +++ b/prboom2/src/p_enemy.c @@ -57,6 +57,7 @@ #include "dsda/id_list.h" #include "dsda/map_format.h" #include "dsda/mapinfo.h" +#include "dsda/skill_info.h" static mobj_t *current_actor; @@ -2884,7 +2885,7 @@ void A_BrainSpit(mobj_t *mo) return; brain.easy ^= 1; // killough 3/26/98: use brain struct - if (gameskill <= sk_easy && !brain.easy) + if (skill_info.flags & SI_EASY_BOSS_BRAIN && !brain.easy) return; // shoot a cube at current target From 6951ae8d1e0eb68a5648a6776fde1d4f1b64487c Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:44:49 +0200 Subject: [PATCH 07/20] Abstract instant reaction --- prboom2/src/p_mobj.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/prboom2/src/p_mobj.c b/prboom2/src/p_mobj.c index aac252551..d672cf603 100644 --- a/prboom2/src/p_mobj.c +++ b/prboom2/src/p_mobj.c @@ -58,6 +58,7 @@ #include "dsda/map_format.h" #include "dsda/mapinfo.h" #include "dsda/settings.h" +#include "dsda/skill_info.h" #include "dsda/spawn_number.h" #include "dsda/thing_id.h" #include "dsda/tranmap.h" @@ -1678,7 +1679,7 @@ mobj_t* P_SpawnMobj(fixed_t x,fixed_t y,fixed_t z,mobjtype_t type) mobj->health = info->spawnhealth; - if (gameskill != sk_nightmare) + if (!(skill_info.flags & SI_INSTANT_REACTION)) mobj->reactiontime = info->reactiontime; mobj->lastlook = P_Random (pr_lastlook) % g_maxplayers; From 49051d1451ce7334614058718dc1fddc50b5a3cd Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:44:59 +0200 Subject: [PATCH 08/20] Fix typo --- prboom2/src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prboom2/src/p_mobj.c b/prboom2/src/p_mobj.c index d672cf603..0ec14a843 100644 --- a/prboom2/src/p_mobj.c +++ b/prboom2/src/p_mobj.c @@ -2174,7 +2174,7 @@ static dboolean P_ShouldSpawnMapThing(int options) return false; } - // check for apropriate skill level + // check for appropriate skill level if ( gameskill == sk_baby ? !(options & MTF_SKILL1) : gameskill == sk_easy ? !(options & MTF_SKILL2) : From 2a2b0eb4c2786a3fff7ff9c842af6f8d3b0731e1 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:45:11 +0200 Subject: [PATCH 09/20] Abstract spawn filter --- prboom2/src/p_mobj.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/prboom2/src/p_mobj.c b/prboom2/src/p_mobj.c index 0ec14a843..3f7802026 100644 --- a/prboom2/src/p_mobj.c +++ b/prboom2/src/p_mobj.c @@ -2176,11 +2176,11 @@ static dboolean P_ShouldSpawnMapThing(int options) // check for appropriate skill level if ( - gameskill == sk_baby ? !(options & MTF_SKILL1) : - gameskill == sk_easy ? !(options & MTF_SKILL2) : - gameskill == sk_medium ? !(options & MTF_SKILL3) : - gameskill == sk_hard ? !(options & MTF_SKILL4) : - !(options & MTF_SKILL5) + skill_info.spawn_filter == 1 ? !(options & MTF_SKILL1) : + skill_info.spawn_filter == 2 ? !(options & MTF_SKILL2) : + skill_info.spawn_filter == 3 ? !(options & MTF_SKILL3) : + skill_info.spawn_filter == 4 ? !(options & MTF_SKILL4) : + !(options & MTF_SKILL5) ) return false; From b8387bac5fb9b5ebf8d4d9928d05a7d2f2a95b3e Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:46:12 +0200 Subject: [PATCH 10/20] Abstract fast monsters --- prboom2/src/g_game.c | 2 +- prboom2/src/p_enemy.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index add06f123..7cef8357c 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -3022,7 +3022,7 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) dsda_startmap = map; } - G_SetFastParms(fastparm || skill == sk_nightmare); // killough 4/10/98 + G_SetFastParms(fastparm || skill_infos[skill].flags & SI_FAST_MONSTERS); // killough 4/10/98 M_ClearRandom(); diff --git a/prboom2/src/p_enemy.c b/prboom2/src/p_enemy.c index 0403832e0..81b3b0304 100644 --- a/prboom2/src/p_enemy.c +++ b/prboom2/src/p_enemy.c @@ -1232,7 +1232,7 @@ void A_Chase(mobj_t *actor) } } - if (raven && gameskill == sk_nightmare) + if (raven && skill_info.flags & SI_FAST_MONSTERS) { // Monsters move faster in nightmare mode actor->tics -= actor->tics / 2; if (actor->tics < 3) @@ -1268,7 +1268,7 @@ void A_Chase(mobj_t *actor) if (actor->flags & MF_JUSTATTACKED) { actor->flags &= ~MF_JUSTATTACKED; - if (gameskill != sk_nightmare && !fastparm) + if (!(skill_info.flags & SI_FAST_MONSTERS) && !fastparm) P_NewChaseDir(actor); return; } @@ -1288,7 +1288,7 @@ void A_Chase(mobj_t *actor) // check for missile attack if (actor->info->missilestate) - if (!(gameskill < sk_nightmare && !fastparm && actor->movecount)) + if (!(!(skill_info.flags & SI_FAST_MONSTERS) && !fastparm && actor->movecount)) if (P_CheckMissileRange(actor)) { P_SetMobjState(actor, actor->info->missilestate); @@ -5755,7 +5755,7 @@ void A_SerpentChase(mobj_t * actor) actor->threshold--; } - if (gameskill == sk_nightmare) + if (skill_info.flags & SI_FAST_MONSTERS) { // Monsters move faster in nightmare mode actor->tics -= actor->tics / 2; if (actor->tics < 3) @@ -5797,7 +5797,7 @@ void A_SerpentChase(mobj_t * actor) if (actor->flags & MF_JUSTATTACKED) { actor->flags &= ~MF_JUSTATTACKED; - if (gameskill != sk_nightmare) + if (!(skill_info.flags & SI_FAST_MONSTERS)) P_NewChaseDir(actor); return; } @@ -5916,7 +5916,7 @@ void A_SerpentWalk(mobj_t * actor) actor->threshold--; } - if (gameskill == sk_nightmare) + if (skill_info.flags & SI_FAST_MONSTERS) { // Monsters move faster in nightmare mode actor->tics -= actor->tics / 2; if (actor->tics < 3) @@ -5958,7 +5958,7 @@ void A_SerpentWalk(mobj_t * actor) if (actor->flags & MF_JUSTATTACKED) { actor->flags &= ~MF_JUSTATTACKED; - if (gameskill != sk_nightmare) + if (!(skill_info.flags & SI_FAST_MONSTERS)) P_NewChaseDir(actor); return; } @@ -8030,7 +8030,7 @@ void A_FastChase(mobj_t * actor) actor->threshold--; } - if (gameskill == sk_nightmare) + if (skill_info.flags & SI_FAST_MONSTERS) { // Monsters move faster in nightmare mode actor->tics -= actor->tics / 2; if (actor->tics < 3) @@ -8072,7 +8072,7 @@ void A_FastChase(mobj_t * actor) if (actor->flags & MF_JUSTATTACKED) { actor->flags &= ~MF_JUSTATTACKED; - if (gameskill != sk_nightmare) + if (!(skill_info.flags & SI_FAST_MONSTERS)) P_NewChaseDir(actor); return; } @@ -8111,7 +8111,7 @@ void A_FastChase(mobj_t * actor) // if (actor->info->missilestate) { - if (gameskill < sk_nightmare && actor->movecount) + if (!(skill_info.flags & SI_FAST_MONSTERS) && actor->movecount) goto nomissile; if (!P_CheckMissileRange(actor)) goto nomissile; From 6dfa00bbdc52da2b432f41987d01ff67456ff02f Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:46:31 +0200 Subject: [PATCH 11/20] Abstract ammo factor --- prboom2/src/p_inter.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/prboom2/src/p_inter.c b/prboom2/src/p_inter.c index 2ca4fbfc0..9441b9c46 100644 --- a/prboom2/src/p_inter.c +++ b/prboom2/src/p_inter.c @@ -56,6 +56,7 @@ #include "dsda/map_format.h" #include "dsda/mapinfo.h" #include "dsda/messenger.h" +#include "dsda/skill_info.h" #include "heretic/def.h" #include "heretic/sb_bar.h" @@ -162,11 +163,8 @@ static dboolean P_GiveAmmo(player_t *player, ammotype_t ammo, int num) else num = clipammo[ammo]/2; - // give double ammo in trainer mode, you'll need in nightmare - if (gameskill == sk_baby || gameskill == sk_nightmare) { - if (heretic) num += num >> 1; - else num <<= 1; - } + if (skill_info.ammo_factor) + num = num * skill_info.ammo_factor / FRACUNIT; oldammo = player->ammo[ammo]; player->ammo[ammo] += num; @@ -2716,9 +2714,9 @@ dboolean P_GiveMana(player_t * player, manatype_t mana, int count) { return (false); } - if (gameskill == sk_baby || gameskill == sk_nightmare) - { // extra mana in baby mode and nightmare mode - count += count >> 1; + if (skill_info.ammo_factor) + { + count = count * skill_info.ammo_factor / FRACUNIT; } prevMana = player->ammo[mana]; From 45dd80ceaed281a325cf45a8fa097e431e6b9e24 Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:46:52 +0200 Subject: [PATCH 12/20] Abstract damage factor --- prboom2/src/p_inter.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/prboom2/src/p_inter.c b/prboom2/src/p_inter.c index 9441b9c46..0e46858e5 100644 --- a/prboom2/src/p_inter.c +++ b/prboom2/src/p_inter.c @@ -1250,8 +1250,8 @@ void P_DamageMobj(mobj_t *target,mobj_t *inflictor, mobj_t *source, int damage) } player = target->player; - if (player && gameskill == sk_baby) - damage >>= 1; // take half damage in trainer mode + if (player && skill_info.damage_factor) + damage = damage * skill_info.damage_factor / FRACUNIT; // Special damage types if (raven && inflictor) @@ -2648,10 +2648,9 @@ void P_PoisonDamage(player_t * player, mobj_t * source, int damage, { // mobj is invulnerable return; } - if (gameskill == sk_baby) + if (skill_info.damage_factor) { - // Take half damage in trainer mode - damage >>= 1; + damage = damage * skill_info.damage_factor / FRACUNIT; } if (damage < 1000 && ((player->cheats & CF_GODMODE) || player->powers[pw_invulnerability])) From 2d46bf673befcd4bebd83a6770e660cb13c3385d Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 19:47:03 +0200 Subject: [PATCH 13/20] Abstract auto use health --- prboom2/src/p_inter.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/prboom2/src/p_inter.c b/prboom2/src/p_inter.c index 0e46858e5..e2a660569 100644 --- a/prboom2/src/p_inter.c +++ b/prboom2/src/p_inter.c @@ -1560,7 +1560,7 @@ void P_DamageMobj(mobj_t *target,mobj_t *inflictor, mobj_t *source, int damage) if ( raven && damage >= player->health && - (gameskill == sk_baby || deathmatch) && + (skill_info.flags & SI_AUTO_USE_HEALTH || deathmatch) && !player->chickenTics && !player->morphTics ) { // Try to use some inventory health @@ -2497,7 +2497,7 @@ void P_AutoUseHealth(player_t * player, int saveHealth) superCount = player->inventory[i].count; } } - if ((gameskill == sk_baby) && (normalCount * 25 >= saveHealth)) + if (skill_info.flags & SI_AUTO_USE_HEALTH && (normalCount * 25 >= saveHealth)) { // Use quartz flasks count = (saveHealth + 24) / 25; for (i = 0; i < count; i++) @@ -2515,7 +2515,7 @@ void P_AutoUseHealth(player_t * player, int saveHealth) P_PlayerRemoveArtifact(player, superSlot); } } - else if ((gameskill == sk_baby) + else if (skill_info.flags & SI_AUTO_USE_HEALTH && (superCount * 100 + normalCount * 25 >= saveHealth)) { // Use mystic urns and quartz flasks count = (saveHealth + 24) / 25; @@ -2658,7 +2658,7 @@ void P_PoisonDamage(player_t * player, mobj_t * source, int damage, return; } if (damage >= player->health - && ((gameskill == sk_baby) || deathmatch) && !player->morphTics) + && (skill_info.flags & SI_AUTO_USE_HEALTH || deathmatch) && !player->morphTics) { // Try to use some inventory health P_AutoUseHealth(player, damage - player->health + 1); } From a4871b301712de9a1e6f30282778bc2afebd279d Mon Sep 17 00:00:00 2001 From: kraflab Date: Tue, 18 Jul 2023 20:15:56 +0200 Subject: [PATCH 14/20] Appease msvc --- prboom2/src/dsda/skill_info.c | 200 +++++++++++++++------------------- 1 file changed, 85 insertions(+), 115 deletions(-) diff --git a/prboom2/src/dsda/skill_info.c b/prboom2/src/dsda/skill_info.c index ab2631bb8..cb6e6bebf 100644 --- a/prboom2/src/dsda/skill_info.c +++ b/prboom2/src/dsda/skill_info.c @@ -21,128 +21,98 @@ skill_info_t skill_info; -static const skill_info_t doom_sk1_info = { - .ammo_factor = FRACUNIT * 2, - .damage_factor = FRACUNIT / 2, - .spawn_filter = 1, - .key = 'i', - .name = "I'm too young to die.", - .pic_name = "M_JKILL", - .flags = SI_EASY_BOSS_BRAIN -}; - -static const skill_info_t doom_sk2_info = { - .spawn_filter = 2, - .key = 'h', - .name = "Hey, not too rough.", - .pic_name = "M_ROUGH", - .flags = SI_EASY_BOSS_BRAIN -}; - -static const skill_info_t doom_sk3_info = { - .spawn_filter = 3, - .key = 'h', - .name = "Hurt me plenty.", - .pic_name = "M_HURT", - .flags = SI_DEFAULT_SKILL -}; - -static const skill_info_t doom_sk4_info = { - .spawn_filter = 4, - .key = 'u', - .name = "Ultra-Violence.", - .pic_name = "M_ULTRA", - .flags = 0 -}; - -static const skill_info_t doom_sk5_info = { - .ammo_factor = FRACUNIT * 2, - .spawn_filter = 5, - .key = 'n', - .name = "Nightmare!", - .pic_name = "M_NMARE", - .respawn_time = 12, - .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION | SI_MUST_CONFIRM -}; - -static const skill_info_t heretic_sk1_info = { - .ammo_factor = FRACUNIT * 3 / 2, - .damage_factor = FRACUNIT / 2, - .spawn_filter = 1, - .flags = SI_AUTO_USE_HEALTH -}; - -static const skill_info_t heretic_sk2_info = { - .spawn_filter = 2, - .flags = 0 -}; - -static const skill_info_t heretic_sk3_info = { - .spawn_filter = 3, - .flags = SI_DEFAULT_SKILL -}; - -static const skill_info_t heretic_sk4_info = { - .spawn_filter = 4, - .flags = 0 -}; - -static const skill_info_t heretic_sk5_info = { - .ammo_factor = FRACUNIT * 3 / 2, - .spawn_filter = 5, - .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION -}; - -static const skill_info_t hexen_sk1_info = { - .ammo_factor = FRACUNIT * 3 / 2, - .damage_factor = FRACUNIT / 2, - .spawn_filter = 1, - .flags = SI_AUTO_USE_HEALTH -}; - -static const skill_info_t hexen_sk2_info = { - .spawn_filter = 2, - .flags = 0 -}; - -static const skill_info_t hexen_sk3_info = { - .spawn_filter = 3, - .flags = SI_DEFAULT_SKILL -}; - -static const skill_info_t hexen_sk4_info = { - .spawn_filter = 4, - .flags = 0 -}; - -static const skill_info_t hexen_sk5_info = { - .ammo_factor = FRACUNIT * 3 / 2, - .spawn_filter = 5, - .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION -}; - const skill_info_t doom_skill_infos[5] = { - doom_sk1_info, - doom_sk2_info, - doom_sk3_info, - doom_sk4_info, - doom_sk5_info, + { + .ammo_factor = FRACUNIT * 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .key = 'i', + .name = "I'm too young to die.", + .pic_name = "M_JKILL", + .flags = SI_EASY_BOSS_BRAIN + }, + { + .spawn_filter = 2, + .key = 'h', + .name = "Hey, not too rough.", + .pic_name = "M_ROUGH", + .flags = SI_EASY_BOSS_BRAIN + }, + { + .spawn_filter = 3, + .key = 'h', + .name = "Hurt me plenty.", + .pic_name = "M_HURT", + .flags = SI_DEFAULT_SKILL + }, + { + .spawn_filter = 4, + .key = 'u', + .name = "Ultra-Violence.", + .pic_name = "M_ULTRA", + .flags = 0 + }, + { + .ammo_factor = FRACUNIT * 2, + .spawn_filter = 5, + .key = 'n', + .name = "Nightmare!", + .pic_name = "M_NMARE", + .respawn_time = 12, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION | SI_MUST_CONFIRM + }, }; const skill_info_t heretic_skill_infos[5] = { - heretic_sk1_info, - heretic_sk2_info, - heretic_sk3_info, - heretic_sk4_info, - heretic_sk5_info, + { + .ammo_factor = FRACUNIT * 3 / 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .flags = SI_AUTO_USE_HEALTH + }, + { + .spawn_filter = 2, + .flags = 0 + }, + { + .spawn_filter = 3, + .flags = SI_DEFAULT_SKILL + }, + { + .spawn_filter = 4, + .flags = 0 + }, + { + .ammo_factor = FRACUNIT * 3 / 2, + .spawn_filter = 5, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION + }, }; const skill_info_t hexen_skill_infos[5] = { - hexen_sk1_info, - hexen_sk2_info, - hexen_sk3_info, - hexen_sk4_info, - hexen_sk5_info, + { + .ammo_factor = FRACUNIT * 3 / 2, + .damage_factor = FRACUNIT / 2, + .spawn_filter = 1, + .flags = SI_AUTO_USE_HEALTH + }, + { + .spawn_filter = 2, + .flags = 0 + }, + { + .spawn_filter = 3, + .flags = SI_DEFAULT_SKILL + }, + { + .spawn_filter = 4, + .flags = 0 + }, + { + .ammo_factor = FRACUNIT * 3 / 2, + .spawn_filter = 5, + .flags = SI_FAST_MONSTERS | SI_INSTANT_REACTION + }, }; const skill_info_t* skill_infos; From 14804266b4c8d062294e3e538e52d9c0e4f770aa Mon Sep 17 00:00:00 2001 From: kraflab Date: Wed, 19 Jul 2023 15:45:25 +0200 Subject: [PATCH 15/20] Adjust params after updating skill --- prboom2/src/g_game.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index 7cef8357c..644c622ad 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -3022,12 +3022,8 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) dsda_startmap = map; } - G_SetFastParms(fastparm || skill_infos[skill].flags & SI_FAST_MONSTERS); // killough 4/10/98 - M_ClearRandom(); - respawnmonsters = skill_infos[skill].respawn_time > 0 || respawnparm; - // force players to be initialized upon first level load for (i = 0; i < g_maxplayers; i++) { @@ -3041,6 +3037,10 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) dsda_UpdateGameSkill(skill); dsda_UpdateGameMap(episode, map); + G_SetFastParms(fastparm || skill_info.flags & SI_FAST_MONSTERS); // killough 4/10/98 + + respawnmonsters = skill_info.respawn_time > 0 || respawnparm; + totalleveltimes = 0; // cph levels_completed = 0; From f93091819ea9c672684f73e78a2de1a10cd87890 Mon Sep 17 00:00:00 2001 From: kraflab Date: Wed, 19 Jul 2023 15:54:11 +0200 Subject: [PATCH 16/20] Add missing headers --- prboom2/src/dsda/skill_info.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prboom2/src/dsda/skill_info.h b/prboom2/src/dsda/skill_info.h index cccf4d3b5..1ab06a7a6 100644 --- a/prboom2/src/dsda/skill_info.h +++ b/prboom2/src/dsda/skill_info.h @@ -18,6 +18,9 @@ #ifndef __DSDA_SKILL_INFO__ #define __DSDA_SKILL_INFO__ +#include "doomdef.h" +#include "m_fixed.h" + #define SI_SPAWN_MULTI 0x0001 #define SI_FAST_MONSTERS 0x0002 #define SI_INSTANT_REACTION 0x0004 From c5e4d66d89d12377e79fcc1544255b5ea15ec76b Mon Sep 17 00:00:00 2001 From: kraflab Date: Wed, 19 Jul 2023 15:55:17 +0200 Subject: [PATCH 17/20] Use skill_info for respawn check --- prboom2/src/doomstat.h | 3 --- prboom2/src/dsda/hud_components/map_totals.c | 4 +++- prboom2/src/dsda/hud_components/stat_totals.c | 4 +++- prboom2/src/dsda/skill_info.c | 3 +++ prboom2/src/dsda/wad_stats.c | 3 ++- prboom2/src/g_game.c | 3 --- prboom2/src/p_mobj.c | 2 +- 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/prboom2/src/doomstat.h b/prboom2/src/doomstat.h index 98ac7c7cc..e35141a34 100644 --- a/prboom2/src/doomstat.h +++ b/prboom2/src/doomstat.h @@ -162,9 +162,6 @@ extern leave_data_t leave_data; #define LF_SET_ANGLE 0x01 #define LEAVE_VICTORY -1 -// Nightmare mode flag, single player. -extern dboolean respawnmonsters; - // Netgame? Only true if >1 player. extern dboolean netgame; diff --git a/prboom2/src/dsda/hud_components/map_totals.c b/prboom2/src/dsda/hud_components/map_totals.c index 7c342931b..605a03d7a 100644 --- a/prboom2/src/dsda/hud_components/map_totals.c +++ b/prboom2/src/dsda/hud_components/map_totals.c @@ -15,6 +15,8 @@ // DSDA Map Totals HUD Component // +#include "dsda/skill_info.h" + #include "base.h" #include "map_totals.h" @@ -52,7 +54,7 @@ static void dsda_UpdateComponentText(char* str, size_t max_size) { } } - if (respawnmonsters) { + if (skill_info.respawn_time) { fullkillcount = kill_percent_count; max_kill_requirement = totalkills; } diff --git a/prboom2/src/dsda/hud_components/stat_totals.c b/prboom2/src/dsda/hud_components/stat_totals.c index 224c461dc..cc2e6f5a2 100644 --- a/prboom2/src/dsda/hud_components/stat_totals.c +++ b/prboom2/src/dsda/hud_components/stat_totals.c @@ -15,6 +15,8 @@ // DSDA Stat Totals HUD Component // +#include "dsda/skill_info.h" + #include "base.h" #include "stat_totals.h" @@ -55,7 +57,7 @@ static void dsda_UpdateComponentText(char* str, size_t max_size) { } } - if (respawnmonsters) { + if (skill_info.respawn_time) { fullkillcount = kill_percent_count; max_kill_requirement = totalkills; } diff --git a/prboom2/src/dsda/skill_info.c b/prboom2/src/dsda/skill_info.c index cb6e6bebf..d8c1b4d1f 100644 --- a/prboom2/src/dsda/skill_info.c +++ b/prboom2/src/dsda/skill_info.c @@ -122,4 +122,7 @@ int num_skills = 5; void dsda_UpdateGameSkill(skill_t skill) { gameskill = skill; skill_info = skill_infos[skill]; + + if (respawnparm && !skill_info.respawn_time) + skill_info.respawn_time = 12; } diff --git a/prboom2/src/dsda/wad_stats.c b/prboom2/src/dsda/wad_stats.c index 9972dc6e0..1534c02ac 100644 --- a/prboom2/src/dsda/wad_stats.c +++ b/prboom2/src/dsda/wad_stats.c @@ -24,6 +24,7 @@ #include "z_zone.h" #include "dsda/data_organizer.h" +#include "dsda/skill_info.h" #include "dsda/utility.h" #include "wad_stats.h" @@ -292,7 +293,7 @@ void dsda_WadStatsExitMap(int missed_monsters) { current_map_stats->max_items = totalitems; current_map_stats->max_secrets = totalsecret; - if (!respawnmonsters) { + if (!skill_info.respawn_time) { if (totalkills - missed_monsters > current_map_stats->best_kills) current_map_stats->best_kills = totalkills - missed_monsters; diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index 644c622ad..f5e402b2f 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -149,7 +149,6 @@ gameaction_t gameaction; gamestate_t gamestate; dboolean in_game; skill_t gameskill; -dboolean respawnmonsters; int gameepisode; int gamemap; // CPhipps - moved *_loadgame vars here @@ -3039,8 +3038,6 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) G_SetFastParms(fastparm || skill_info.flags & SI_FAST_MONSTERS); // killough 4/10/98 - respawnmonsters = skill_info.respawn_time > 0 || respawnparm; - totalleveltimes = 0; // cph levels_completed = 0; diff --git a/prboom2/src/p_mobj.c b/prboom2/src/p_mobj.c index 3f7802026..1fa3f3f6c 100644 --- a/prboom2/src/p_mobj.c +++ b/prboom2/src/p_mobj.c @@ -1409,7 +1409,7 @@ void P_MobjThinker (mobj_t* mobj) if (! (mobj->flags & MF_COUNTKILL) ) return; - if (!respawnmonsters) + if (!skill_info.respawn_time) return; mobj->movecount++; From 7751878566b6d1b35a4d5b6cde465aae64584428 Mon Sep 17 00:00:00 2001 From: kraflab Date: Wed, 19 Jul 2023 16:28:25 +0200 Subject: [PATCH 18/20] Use skill_info for fast monsters check --- prboom2/src/dsda/skill_info.c | 17 ++++++++++++++--- prboom2/src/dsda/skill_info.h | 1 + prboom2/src/g_game.c | 7 ++++--- prboom2/src/g_game.h | 2 +- prboom2/src/m_cheat.c | 3 ++- prboom2/src/p_enemy.c | 4 ++-- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/prboom2/src/dsda/skill_info.c b/prboom2/src/dsda/skill_info.c index d8c1b4d1f..deb3b7ccd 100644 --- a/prboom2/src/dsda/skill_info.c +++ b/prboom2/src/dsda/skill_info.c @@ -119,10 +119,21 @@ const skill_info_t* skill_infos; int num_skills = 5; -void dsda_UpdateGameSkill(skill_t skill) { - gameskill = skill; - skill_info = skill_infos[skill]; +void dsda_RefreshGameSkill(void) { + void G_RefreshFastMonsters(void); + + skill_info = skill_infos[gameskill]; if (respawnparm && !skill_info.respawn_time) skill_info.respawn_time = 12; + + if (fastparm) + skill_info.flags |= SI_FAST_MONSTERS; + + G_RefreshFastMonsters(); +} + +void dsda_UpdateGameSkill(skill_t skill) { + gameskill = skill; + dsda_RefreshGameSkill(); } diff --git a/prboom2/src/dsda/skill_info.h b/prboom2/src/dsda/skill_info.h index 1ab06a7a6..ddfb7259d 100644 --- a/prboom2/src/dsda/skill_info.h +++ b/prboom2/src/dsda/skill_info.h @@ -61,6 +61,7 @@ extern const skill_info_t hexen_skill_infos[5]; extern int num_skills; +void dsda_RefreshGameSkill(void); void dsda_UpdateGameSkill(skill_t skill); #endif diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index f5e402b2f..d5f7e202d 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -2842,10 +2842,13 @@ void G_DoNewGame (void) // killough 4/10/98: New function to fix bug which caused Doom // lockups when idclev was used in conjunction with -fast. -void G_SetFastParms(int fast_pending) +void G_RefreshFastMonsters(void) { static int fast = 0; // remembers fast state int i; + int fast_pending; + + fast_pending = !!(skill_info.flags & SI_FAST_MONSTERS); if (hexen) { @@ -3036,8 +3039,6 @@ void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) dsda_UpdateGameSkill(skill); dsda_UpdateGameMap(episode, map); - G_SetFastParms(fastparm || skill_info.flags & SI_FAST_MONSTERS); // killough 4/10/98 - totalleveltimes = 0; // cph levels_completed = 0; diff --git a/prboom2/src/g_game.h b/prboom2/src/g_game.h index ebb9182ae..c64e1eab6 100644 --- a/prboom2/src/g_game.h +++ b/prboom2/src/g_game.h @@ -61,7 +61,7 @@ void G_EndGame(void); /* cph - make m_menu.c call a G_* function for this */ void G_Ticker(void); void G_ScreenShot(void); void G_ReloadDefaults(void); // killough 3/1/98: loads game defaults -void G_SetFastParms(int); // killough 4/10/98: sets -fast parameters +void G_RefreshFastMonsters(void); // killough 4/10/98: sets -fast parameters void G_DoNewGame(void); void G_DoReborn(int playernum); void G_StartDemoPlayback(const byte *buffer, int length, int behaviour); diff --git a/prboom2/src/m_cheat.c b/prboom2/src/m_cheat.c index 0d23d2c9a..ace407c83 100644 --- a/prboom2/src/m_cheat.c +++ b/prboom2/src/m_cheat.c @@ -64,6 +64,7 @@ #include "dsda/mapinfo.h" #include "dsda/messenger.h" #include "dsda/settings.h" +#include "dsda/skill_info.h" #define plyr (players+consoleplayer) /* the console player */ @@ -721,7 +722,7 @@ static void cheat_hom() static void cheat_fast() { dsda_AddMessage((fastparm = !fastparm) ? "Fast Monsters On" : "Fast Monsters Off"); - G_SetFastParms(fastparm); // killough 4/10/98: set -fast parameter correctly + dsda_RefreshGameSkill(); // refresh fast monsters } // killough 2/16/98: keycard/skullkey cheat functions diff --git a/prboom2/src/p_enemy.c b/prboom2/src/p_enemy.c index 81b3b0304..2677e519c 100644 --- a/prboom2/src/p_enemy.c +++ b/prboom2/src/p_enemy.c @@ -1268,7 +1268,7 @@ void A_Chase(mobj_t *actor) if (actor->flags & MF_JUSTATTACKED) { actor->flags &= ~MF_JUSTATTACKED; - if (!(skill_info.flags & SI_FAST_MONSTERS) && !fastparm) + if (!(skill_info.flags & SI_FAST_MONSTERS)) P_NewChaseDir(actor); return; } @@ -1288,7 +1288,7 @@ void A_Chase(mobj_t *actor) // check for missile attack if (actor->info->missilestate) - if (!(!(skill_info.flags & SI_FAST_MONSTERS) && !fastparm && actor->movecount)) + if (!(!(skill_info.flags & SI_FAST_MONSTERS) && actor->movecount)) if (P_CheckMissileRange(actor)) { P_SetMobjState(actor, actor->info->missilestate); From 57a8b9f51470ebcc52c133a23fc6d5b34380d31b Mon Sep 17 00:00:00 2001 From: kraflab Date: Sat, 22 Jul 2023 20:31:37 +0200 Subject: [PATCH 19/20] Don't use skill_t --- prboom2/src/d_main.c | 4 ++-- prboom2/src/doomstat.h | 4 ++-- prboom2/src/dsda.c | 2 +- prboom2/src/dsda.h | 2 +- prboom2/src/dsda/skill_info.c | 2 +- prboom2/src/dsda/skill_info.h | 2 +- prboom2/src/g_game.c | 15 +++++---------- prboom2/src/g_game.h | 4 ++-- prboom2/src/p_setup.c | 2 +- prboom2/src/p_setup.h | 2 +- 10 files changed, 17 insertions(+), 22 deletions(-) diff --git a/prboom2/src/d_main.c b/prboom2/src/d_main.c index d5f96b4ed..832071a8d 100644 --- a/prboom2/src/d_main.c +++ b/prboom2/src/d_main.c @@ -142,7 +142,7 @@ dboolean nomusicparm; extern dboolean inhelpscreens; extern dboolean BorderNeedRefresh; -skill_t startskill; +int startskill; int startepisode; int startmap; dboolean autostart; @@ -1676,7 +1676,7 @@ static void D_DoomMainSetup(void) // get skill / episode / map from parms - startskill = sk_none; // jff 3/24/98 was sk_medium, just note not picked + startskill = dsda_IntConfig(dsda_config_default_skill) - 1; startepisode = 1; startmap = 1; autostart = false; diff --git a/prboom2/src/doomstat.h b/prboom2/src/doomstat.h index e35141a34..b04870f1e 100644 --- a/prboom2/src/doomstat.h +++ b/prboom2/src/doomstat.h @@ -139,13 +139,13 @@ extern Language_t language; // // Defaults for menu, methinks. -extern skill_t startskill; +extern int startskill; extern int startepisode; extern dboolean autostart; // Selected by user. -extern skill_t gameskill; +extern int gameskill; extern int gameepisode; extern int gamemap; diff --git a/prboom2/src/dsda.c b/prboom2/src/dsda.c index ef302415d..41c310072 100644 --- a/prboom2/src/dsda.c +++ b/prboom2/src/dsda.c @@ -518,7 +518,7 @@ static void dsda_ResetTracking(void) { dsda_pacifist_note_shown = false; } -void dsda_WatchDeferredInitNew(skill_t skill, int episode, int map) { +void dsda_WatchDeferredInitNew(int skill, int episode, int map) { if (!demorecording) return; ++dsda_session_attempts; diff --git a/prboom2/src/dsda.h b/prboom2/src/dsda.h index 2af9b1e99..fcb1825db 100644 --- a/prboom2/src/dsda.h +++ b/prboom2/src/dsda.h @@ -73,7 +73,7 @@ void dsda_WatchNewLevel(void); void dsda_WatchLevelCompletion(void); void dsda_WatchWeaponFire(weapontype_t weapon); void dsda_WatchSecret(void); -void dsda_WatchDeferredInitNew(skill_t skill, int episode, int map); +void dsda_WatchDeferredInitNew(int skill, int episode, int map); void dsda_WatchNewGame(void); void dsda_WatchLevelReload(int* reloaded); void dsda_WatchLineActivation(line_t* line, mobj_t* mo); diff --git a/prboom2/src/dsda/skill_info.c b/prboom2/src/dsda/skill_info.c index deb3b7ccd..07d8cb4c2 100644 --- a/prboom2/src/dsda/skill_info.c +++ b/prboom2/src/dsda/skill_info.c @@ -133,7 +133,7 @@ void dsda_RefreshGameSkill(void) { G_RefreshFastMonsters(); } -void dsda_UpdateGameSkill(skill_t skill) { +void dsda_UpdateGameSkill(int skill) { gameskill = skill; dsda_RefreshGameSkill(); } diff --git a/prboom2/src/dsda/skill_info.h b/prboom2/src/dsda/skill_info.h index ddfb7259d..2cc96f2b1 100644 --- a/prboom2/src/dsda/skill_info.h +++ b/prboom2/src/dsda/skill_info.h @@ -62,6 +62,6 @@ extern const skill_info_t hexen_skill_infos[5]; extern int num_skills; void dsda_RefreshGameSkill(void); -void dsda_UpdateGameSkill(skill_t skill); +void dsda_UpdateGameSkill(int skill); #endif diff --git a/prboom2/src/g_game.c b/prboom2/src/g_game.c index d5f7e202d..f33568a92 100644 --- a/prboom2/src/g_game.c +++ b/prboom2/src/g_game.c @@ -148,7 +148,7 @@ static int demolength; // check for overrun (missing DEMOMARKER) gameaction_t gameaction; gamestate_t gamestate; dboolean in_game; -skill_t gameskill; +int gameskill; int gameepisode; int gamemap; // CPhipps - moved *_loadgame vars here @@ -2563,11 +2563,11 @@ static void G_DoSaveGame(dboolean via_cmd) Z_Free(name); } -static skill_t d_skill; +static int d_skill; static int d_episode; static int d_map; -void G_DeferedInitNew(skill_t skill, int episode, int map) +void G_DeferedInitNew(int skill, int episode, int map) { d_skill = skill; d_episode = episode; @@ -2756,11 +2756,6 @@ void G_ReloadDefaults(void) fastparm = clfastparm; nomonsters = clnomonsters; - //jff 3/24/98 set startskill from defaultskill in config file, unless - // it has already been set by a -skill parameter - if (startskill == sk_none) - startskill = (skill_t)(dsda_IntConfig(dsda_config_default_skill) - 1); - dsda_ClearPlaybackStream(); // killough 2/21/98: @@ -2925,7 +2920,7 @@ int G_ValidateMapName(const char *mapname, int *pEpi, int *pMap) extern int EpiCustom; -void G_InitNew(skill_t skill, int episode, int map, dboolean prepare) +void G_InitNew(int skill, int episode, int map, dboolean prepare) { int i; @@ -3538,7 +3533,7 @@ static dboolean CheckForOverrun(const byte *start_p, const byte *current_p, size const byte* G_ReadDemoHeaderEx(const byte *demo_p, size_t size, unsigned int params) { - skill_t skill; + int skill; int i, episode = 1, map = 0; // e6y diff --git a/prboom2/src/g_game.h b/prboom2/src/g_game.h index c64e1eab6..3fbcb3b0d 100644 --- a/prboom2/src/g_game.h +++ b/prboom2/src/g_game.h @@ -46,8 +46,8 @@ dboolean G_Responder(event_t *ev); dboolean G_CheckDemoStatus(void); void G_DeathMatchSpawnPlayer(int playernum); -void G_InitNew(skill_t skill, int episode, int map, dboolean prepare); -void G_DeferedInitNew(skill_t skill, int episode, int map); +void G_InitNew(int skill, int episode, int map, dboolean prepare); +void G_DeferedInitNew(int skill, int episode, int map); void G_DeferedPlayDemo(const char *demo); // CPhipps - const void G_LoadGame(int slot); // killough 5/15/98 void G_ForcedLoadGame(void); // killough 5/15/98: forced loadgames diff --git a/prboom2/src/p_setup.c b/prboom2/src/p_setup.c index 147499477..613ceeb49 100644 --- a/prboom2/src/p_setup.c +++ b/prboom2/src/p_setup.c @@ -3677,7 +3677,7 @@ void P_MustRebuildBlockmap(void) // // killough 5/3/98: reformatted, cleaned up -void P_SetupLevel(int episode, int map, int playermask, skill_t skill) +void P_SetupLevel(int episode, int map, int playermask, int skill) { int i; char lumpname[9]; diff --git a/prboom2/src/p_setup.h b/prboom2/src/p_setup.h index 461eda41e..6efd4fcbf 100644 --- a/prboom2/src/p_setup.h +++ b/prboom2/src/p_setup.h @@ -36,7 +36,7 @@ #include "p_mobj.h" -void P_SetupLevel(int episode, int map, int playermask, skill_t skill); +void P_SetupLevel(int episode, int map, int playermask, int skill); void P_Init(void); /* Called by startup code. */ extern const byte *rejectmatrix; /* for fast sight rejection - cph - const* */ From 6af6f532ec159bee9acfe622a46d16b895025d3e Mon Sep 17 00:00:00 2001 From: kraflab Date: Sat, 22 Jul 2023 20:42:58 +0200 Subject: [PATCH 20/20] Remove skill_t --- prboom2/src/doomdef.h | 9 --------- prboom2/src/dsda/analysis.c | 7 +++++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/prboom2/src/doomdef.h b/prboom2/src/doomdef.h index 3040021ef..1b71a57e2 100644 --- a/prboom2/src/doomdef.h +++ b/prboom2/src/doomdef.h @@ -190,15 +190,6 @@ typedef enum { #define MTF_SKILL4 0x00080000 #define MTF_SKILL5 0x00100000 -typedef enum { - sk_none=-1, //jff 3/24/98 create unpicked skill setting - sk_baby=0, - sk_easy, - sk_medium, - sk_hard, - sk_nightmare -} skill_t; - // // Key cards. // diff --git a/prboom2/src/dsda/analysis.c b/prboom2/src/dsda/analysis.c index 9738e1650..0410860d3 100644 --- a/prboom2/src/dsda/analysis.c +++ b/prboom2/src/dsda/analysis.c @@ -115,6 +115,9 @@ void dsda_WriteAnalysis(void) { return; } +#define SKILL4 3 +#define SKILL5 4 + const char* dsda_DetectCategory(void) { dboolean satisfies_max; dboolean satisfies_respawn; @@ -153,7 +156,7 @@ const char* dsda_DetectCategory(void) { if (solo_net) return "Other"; if (dsda_reborn) return "Other"; - if (gameskill == sk_hard) { + if (gameskill == SKILL4) { if (dsda_nomo && !dsda_respawn && !dsda_fast) { if (satisfies_100s) return "NoMo 100S"; @@ -181,7 +184,7 @@ const char* dsda_DetectCategory(void) { return "UV Speed"; } - else if (gameskill == sk_nightmare) { + else if (gameskill == SKILL5) { if (nomonsters) return "Other"; if (satisfies_100s) return "NM 100S";