From 5220bcb03e4e547139c3fcfecfc3d04782ea737b Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Sun, 3 Mar 2013 20:04:28 -0500 Subject: [PATCH] Move deathtypes to entities entirely --- qcsrc/common/deathtypes.qh | 72 ++++++++++++++++++++------------------ qcsrc/server/g_damage.qc | 2 +- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/qcsrc/common/deathtypes.qh b/qcsrc/common/deathtypes.qh index 033779567d..ca13f15a06 100644 --- a/qcsrc/common/deathtypes.qh +++ b/qcsrc/common/deathtypes.qh @@ -1,32 +1,6 @@ -// Deathtypes (weapon deathtypes are the IT_* constants below) -// NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too. -#define DT_FIRST 10000 -#define DT_MAX 1024 // limit of recursive functions with ACCUMULATE_FUNCTION -float DT_COUNT; - -entity deathtypes[DT_MAX]; -.entity death_msgself; -.entity death_msgmurder; - -#define DEATHTYPE(name,msg_death,msg_death_by,position) \ - float name; \ - float position; \ - void RegisterDeathtype_##name() \ - { \ - SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \ - SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \ - CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \ - \ - entity deathent = spawn(); \ - deathtypes[name - 1] = deathent; \ - #if (msg_death != NO_MSG) \ - deathent.death_msgself = msg_multi_notifs[msg_death - 1]; \ - #endif \ - #if (msg_death_by != NO_MSG) \ - deathent.death_msgmurder = msg_multi_notifs[msg_death_by - 1]; \ - #endif \ - } \ - ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name) +// ================================ +// Deathtypes, reworked by Samual +// ================================ #define DEATHTYPES \ DEATHTYPE(DEATH_AUTOTEAMCHANGE, DEATH_SELF_AUTOTEAMCHANGE, NO_MSG, DEATH_SPECIAL_START) \ @@ -77,6 +51,36 @@ entity deathtypes[DT_MAX]; DEATHTYPE(DEATH_VH_WAKI_ROCKET, DEATH_SELF_VH_WAKI_ROCKET, DEATH_MURDER_VH_WAKI_ROCKET, DEATH_VHLAST) \ DEATHTYPE(DEATH_WEAPON, NO_MSG, NO_MSG, NORMAL_POS) +#define DT_FIRST 10000 +#define DT_MAX 128 // limit of recursive functions with ACCUMULATE_FUNCTION +float DT_COUNT; + +entity deathtypes[DT_MAX]; +.entity death_msgself; +.entity death_msgmurder; + +#define DEATHTYPE(name,msg_death,msg_death_by,position) \ + float name; \ + float position; \ + void RegisterDeathtype_##name() \ + { \ + SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \ + SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \ + CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \ + \ + entity deathent = spawn(); \ + deathtypes[(name - DT_FIRST) - 1] = deathent; \ + deathent.classname = "deathtype"; \ + deathent.nent_name = #name; \ + #if (msg_death != NO_MSG) \ + deathent.death_msgself = msg_multi_notifs[msg_death - 1]; \ + #endif \ + #if (msg_death_by != NO_MSG) \ + deathent.death_msgmurder = msg_multi_notifs[msg_death_by - 1]; \ + #endif \ + } \ + ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name) + DEATHTYPES #undef DEATHTYPE @@ -92,13 +96,11 @@ string Deathtype_Name(float deathtype) { if(DEATH_ISSPECIAL(deathtype)) { - #define DEATHTYPE(name,msg_death,msg_death_by,position) \ - { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); } - - DEATHTYPES - #undef DEATHTYPE + entity deathent = deathtypes[(deathtype - DT_FIRST) - 1]; + if not(deathent) { backtrace("Deathtype_Name: Could not find deathtype entity!\n"); return ""; } + return deathent.nent_name; } - return "foobar"; + else { return ftos(deathtype); } } float DEATH_WEAPONMASK = 0xFF; diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index ec818cfcf4..73882c0858 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -263,7 +263,7 @@ void Obituary_SpecialDeath(entity notif_target, float murder, float deathtype, s { if(DEATH_ISSPECIAL(deathtype)) { - entity deathent = deathtypes[deathtype - 1]; + entity deathent = deathtypes[(deathtype - DT_FIRST) - 1]; if not(deathent) { backtrace("Obituary_SpecialDeath: Could not find deathtype entity!\n"); return; } if(murder) -- 2.39.2