From 580094a7924ea586bc0c789e55d51aa3dc3f2287 Mon Sep 17 00:00:00 2001 From: Gaerzi Date: Thu, 10 Apr 2014 12:32:23 +0200 Subject: [PATCH] More editing flags PSX-inspired flags to change the render styles of monsters (and other things). --- src/doomdata.h | 12 +++++++++++- src/namedef.h | 5 +++++ src/p_mobj.cpp | 22 ++++++++++++++++++++++ src/p_udmf.cpp | 35 +++++++++++++++++++++++++++++++++++ src/p_xlat.cpp | 3 +++ wadsrc/static/xlat/defines.i | 3 ++- wadsrc/static/xlat/strife.txt | 1 + 7 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/doomdata.h b/src/doomdata.h index 55903170a..8ba831082 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -192,9 +192,10 @@ enum EMapLineFlags // These are flags that use different values internally ML_RESERVED_ETERNITY = 0x0800, // [RH] Extra flags for Strife - ML_TRANSLUCENT_STRIFE = 0x1000, ML_RAILING_STRIFE = 0x0200, ML_BLOCK_FLOATERS_STRIFE = 0x0400, + ML_TRANSPARENT_STRIFE = 0x0800, + ML_TRANSLUCENT_STRIFE = 0x1000, }; @@ -385,6 +386,15 @@ enum EMapThingFlags MTF_SECRET = 0x080000, // Secret pickup MTF_NOINFIGHTING = 0x100000, + + // PSX Doom and Doom 64 effects + + MTF_TRANS = 0x200000, // 50% alpha + MTF_ADD = 0x400000, // 100% additive + MTF_SUBTRACT = 0x800000, // 100% subtractive + MTF_SPECTRE = 0x1000000, // 25% additive + MTF_DOUBLEHEALTH = 0x2000000, // Double hit points + // BOOM and DOOM compatible versions of some of the above BTF_NOTSINGLE = 0x0010, // (TF_COOPERATIVE|TF_DEATHMATCH) diff --git a/src/namedef.h b/src/namedef.h index 644d0deb4..50853f7ce 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -373,6 +373,11 @@ xx(Friend) xx(Strifeally) xx(Standing) xx(Countsecret) +//xx(Transparent) defined below for linedefs +//xx(Additive) already defined for invisibility types +xx(Subtractive) +xx(Spectre) +xx(Doublehealth) xx(Blocking) xx(Blockmonsters) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index eb214279d..2bf242cd2 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -4022,6 +4022,24 @@ void AActor::HandleSpawnFlags () RenderStyle = STYLE_Translucent; alpha = TRANSLUC25; } + else if (SpawnFlags & MTF_TRANS) + { + RenderStyle = STYLE_Translucent; + alpha = TRANSLUC50; + } + else if (SpawnFlags & MTF_ADD) + { + RenderStyle = STYLE_Add; + } + else if (SpawnFlags & MTF_SUBTRACT) + { + RenderStyle = STYLE_Subtract; + } + else if (SpawnFlags & MTF_SPECTRE) + { + RenderStyle = STYLE_Add; + alpha = TRANSLUC25; + } else if (SpawnFlags & MTF_ALTSHADOW) { RenderStyle = STYLE_None; @@ -4035,6 +4053,10 @@ void AActor::HandleSpawnFlags () level.total_secrets++; } } + if (SpawnFlags & MTF_DOUBLEHEALTH) + { + health *= 2; + } } void AActor::BeginPlay () diff --git a/src/p_udmf.cpp b/src/p_udmf.cpp index fc5964737..bc58aaef7 100644 --- a/src/p_udmf.cpp +++ b/src/p_udmf.cpp @@ -632,6 +632,31 @@ public: Flag(th->flags, MTF_SECRET, key); break; + case NAME_Transparent: + CHECK_N(Zd | Zdt) + Flag(th->flags, MTF_TRANS, key); + break; + + case NAME_Additive: + CHECK_N(Zd | Zdt) + Flag(th->flags, MTF_ADD, key); + break; + + case NAME_Subtractive: + CHECK_N(Zd | Zdt) + Flag(th->flags, MTF_SUBTRACT, key); + break; + + case NAME_Spectre: + CHECK_N(Zd | Zdt) + Flag(th->flags, MTF_SPECTRE, key); + break; + + case NAME_Doublehealth: + CHECK_N(Zd | Zdt) + Flag(th->flags, MTF_DOUBLEHEALTH, key); + break; + default: if (0 == strnicmp("user_", key.GetChars(), 5)) { // Custom user key - Sets an actor's user variable directly @@ -686,6 +711,7 @@ public: { bool passuse = false; bool strifetrans = false; + bool strifetrans2 = false; FString arg0str, arg1str; memset(ld, 0, sizeof(*ld)); @@ -803,6 +829,11 @@ public: strifetrans = CheckBool(key); continue; + case NAME_Transparent: + CHECK_N(St | Zd | Zdt | Va) + strifetrans2 = CheckBool(key); + continue; + case NAME_Passuse: CHECK_N(Dm | Zd | Zdt | Va) passuse = CheckBool(key); @@ -965,6 +996,10 @@ public: { ld->Alpha = FRACUNIT * 3/4; } + if (strifetrans2 && ld->Alpha == FRACUNIT) + { + ld->Alpha = FRACUNIT * 1/4; + } if (ld->sidedef[0] == NULL) { ld->sidedef[0] = (side_t*)(intptr_t)(1); diff --git a/src/p_xlat.cpp b/src/p_xlat.cpp index 7ece27ae8..be2d154c3 100644 --- a/src/p_xlat.cpp +++ b/src/p_xlat.cpp @@ -89,6 +89,9 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld) case -2: ld->Alpha = FRACUNIT*3/4; break; + case -3: + ld->Alpha = FRACUNIT / 4; + break; default: newflags |= LineFlagTranslations[i].newvalue; break; diff --git a/wadsrc/static/xlat/defines.i b/wadsrc/static/xlat/defines.i index 60d582f70..0acc2465e 100644 --- a/wadsrc/static/xlat/defines.i +++ b/wadsrc/static/xlat/defines.i @@ -239,5 +239,6 @@ enum // ML_PASSTHROUGH = -1, - ML_TRANSLUCENT = -2 + ML_TRANSLUCENT = -2, + ML_TRANSPARENT = -3, } \ No newline at end of file diff --git a/wadsrc/static/xlat/strife.txt b/wadsrc/static/xlat/strife.txt index 710fa1fad..159933c80 100644 --- a/wadsrc/static/xlat/strife.txt +++ b/wadsrc/static/xlat/strife.txt @@ -363,5 +363,6 @@ lineflag 7 = ML_DONTDRAW; lineflag 8 = ML_MAPPED; lineflag 9 = ML_RAILING; lineflag 10 = ML_BLOCK_FLOATERS; +lineflag 11 = ML_TRANSPARENT; lineflag 12 = ML_TRANSLUCENT;