From 7267e608cf2cf7936b5057490d1dbc783be6604f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 26 Feb 2017 19:37:25 +0100 Subject: [PATCH 1/2] - added kickback factor skill property. --- src/g_level.h | 2 ++ src/g_skill.cpp | 10 ++++++++++ src/p_interaction.cpp | 1 + 3 files changed, 13 insertions(+) diff --git a/src/g_level.h b/src/g_level.h index cf5d1865d..03fa70dcd 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -497,6 +497,7 @@ enum EFSkillProperty // floating point properties SKILLP_Aggressiveness, SKILLP_MonsterHealth, SKILLP_FriendlyHealth, + SKILLP_KickbackFactor, }; int G_SkillProperty(ESkillProperty prop); @@ -514,6 +515,7 @@ struct FSkillInfo double DamageFactor; double ArmorFactor; double HealthFactor; + double KickbackFactor; bool FastMonsters; bool SlowMonsters; diff --git a/src/g_skill.cpp b/src/g_skill.cpp index d158fa4cd..1bf80bb42 100644 --- a/src/g_skill.cpp +++ b/src/g_skill.cpp @@ -66,6 +66,7 @@ void FMapInfoParser::ParseSkill () skill.DamageFactor = 1.; skill.ArmorFactor = 1.; skill.HealthFactor = 1.; + skill.KickbackFactor = 1.; skill.FastMonsters = false; skill.SlowMonsters = false; skill.DisableCheats = false; @@ -118,6 +119,12 @@ void FMapInfoParser::ParseSkill () sc.MustGetFloat (); skill.DamageFactor = sc.Float; } + else if (sc.Compare("kickbackfactor")) + { + ParseAssign(); + sc.MustGetFloat(); + skill.KickbackFactor = sc.Float; + } else if (sc.Compare ("fastmonsters")) { skill.FastMonsters = true; @@ -436,6 +443,9 @@ double G_SkillProperty(EFSkillProperty prop) case SKILLP_FriendlyHealth: return AllSkills[gameskill].FriendlyHealth; + case SKILLP_KickbackFactor: + return AllSkills[gameskill].KickbackFactor; + } } return 0; diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index c13024fcf..7699fe376 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -1212,6 +1212,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da else kickback = source->player->ReadyWeapon->Kickback; + kickback = int(kickback * G_SkillProperty(SKILLP_KickbackFactor)); if (kickback) { AActor *origin = (source && (flags & DMG_INFLICTOR_IS_PUFF))? source : inflictor; From 4d043f086e494bf249a3122affd4ec1681401798 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 26 Feb 2017 19:41:39 +0100 Subject: [PATCH 2/2] - missed a spot. --- src/g_skill.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/g_skill.cpp b/src/g_skill.cpp index 1bf80bb42..dd772a745 100644 --- a/src/g_skill.cpp +++ b/src/g_skill.cpp @@ -511,6 +511,7 @@ FSkillInfo &FSkillInfo::operator=(const FSkillInfo &other) DoubleAmmoFactor = other.DoubleAmmoFactor; DropAmmoFactor = other.DropAmmoFactor; DamageFactor = other.DamageFactor; + KickbackFactor = other.KickbackFactor; FastMonsters = other.FastMonsters; SlowMonsters = other.SlowMonsters; DisableCheats = other.DisableCheats;