From: Samual Lenks Date: Mon, 4 Mar 2013 01:04:28 +0000 (-0500) Subject: Move deathtypes to entities entirely X-Git-Tag: xonotic-v0.7.0~62^2~23^2~14 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=5220bcb03e4e547139c3fcfecfc3d04782ea737b;p=xonotic%2Fxonotic-data.pk3dir.git Move deathtypes to entities entirely --- diff --git a/qcsrc/common/deathtypes.qh b/qcsrc/common/deathtypes.qh index 033779567..ca13f15a0 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 ec818cfcf..73882c085 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)