From e30eb249365792977c837131b428e2f88de302aa Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Fri, 12 Mar 2021 17:15:06 +0100 Subject: [PATCH] Weapons with switchable ammos/modes display nametags on change. --- language.def_base | 10 ++++++++++ language.es_base | 8 ++++++++ language.version | 4 ++-- zscript/weapons/swwm_blazeit.zsc | 17 +++++++++++++++++ zscript/weapons/swwm_danmaku.zsc | 17 +++++++++++++++++ zscript/weapons/swwm_deathlydeathcannon.zsc | 12 ++++++++++++ zscript/weapons/swwm_shot.zsc | 17 +++++++++++++++++ zscript/weapons/swwm_thiccboolet.zsc | 12 ++++++++++++ 8 files changed, 95 insertions(+), 2 deletions(-) diff --git a/language.def_base b/language.def_base index 5ce868697..8eb20efc1 100644 --- a/language.def_base +++ b/language.def_base @@ -607,6 +607,16 @@ SWWM_YOURSELF = "Yourself"; SWWM_DOKIDOKI = "The Power of Love™"; SWWM_GRAVKILL = "Gravity"; SWWM_SETSLOTSTRICT = "\cg!!!WARNING!!!\c-\n\cj\"setslotstrict\" is enabled. This will cause SWWM GZ weapons to not have slots assigned. Please go into Miscellaneous Options and toggle the \"Strict KEYCONF Weapons/Players\" setting.\c-"; +SWWM_FCBSEL = "1.150 FCB"; +SWWM_XSBSEL = "1.150 XSB"; +SWWM_WIDESPREAD = "Wide Spread Mode"; +SWWM_TIGHTSPREAD = "Tight Spread Mode"; +SWWM_YNYKRONFORWARD = "Beam Mode"; // desya / forward +SWWM_YNYKRONBACKWARD = "Vortex Mode"; // busa / backward +SWWM_GAMMAMODE1 = "Semi-Auto"; +SWWM_GAMMAMODE2 = "3-Round Burst"; +SWWM_GAMMAMODE3 = "Full Auto"; +SWWM_GAMMAMODE4 = "FULLER AUTO"; // boss tags BT_BRUISERS = "Bruiser Brothers"; BT_CYBIE = "Tyrant of Babel"; diff --git a/language.es_base b/language.es_base index ece416ba3..8d15ccbe4 100644 --- a/language.es_base +++ b/language.es_base @@ -530,6 +530,14 @@ SWWM_YOURSELF = "Tú"; SWWM_DOKIDOKI = "El Poder del Amor™"; SWWM_GRAVKILL = "Gravedad"; SWWM_SETSLOTSTRICT = "\cg!!!ADVERTENCIA!!!\c-\n\cj\"setslotstrict\" está activado. Esto causará que las armas de SWWM GZ no tengan ranuras asignadas. Por favor, ve a Opciones Misceláneas y cambia la opción de \"KEYCONF de Armas/Jugadores estricto\".\c-"; +SWWM_WIDESPREAD = "Modo Amplio"; +SWWM_TIGHTSPREAD = "Modo Concentrado"; +SWWM_YNYKRONFORWARD = "Modo de Rayo"; // desya / forward +SWWM_YNYKRONBACKWARD = "Modo de Vórtice"; // busa / backward +SWWM_GAMMAMODE1 = "Semiautomático"; +SWWM_GAMMAMODE2 = "Triple Ráfaga"; +SWWM_GAMMAMODE3 = "Automático"; +SWWM_GAMMAMODE4 = "SUPERAUTOMÁTICO"; // boss tags BT_BRUISERS = "Hermanos de Guerra"; BT_CYBIE = "Tirano de Babel"; diff --git a/language.version b/language.version index b20f23501..913b3dd44 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r349 \cu(Fri 12 Mar 16:05:39 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r349 \cu(2021-03-12 16:05:39)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r350 \cu(Fri 12 Mar 17:15:06 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r350 \cu(2021-03-12 17:15:06)\c-"; diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index 34e79c7f4..e8d30b7cd 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -92,6 +92,7 @@ Class Hellblazer : SWWMWeapon bool magstate[6]; // true: rocket was spent int magpos; // current rotation Class loadammo, nextammo; + ui Class lastammo; int spinskipped; HellblazerXSub pickuprockets[6]; @@ -178,6 +179,22 @@ Class Hellblazer : SWWMWeapon } } + override void HudTick() + { + Super.HudTick(); + if ( lastammo && (lastammo != nextammo) && (Owner.player == players[consoleplayer]) ) + { + let bar = SWWMStatusBar(statusbar); + if ( bar ) + { + bar.ntagstr = GetDefaultByType(nextammo).GetTag(); + bar.ntagtic = level.totaltime; + bar.ntagcol = nametagcolor; + } + } + lastammo = nextammo; + } + override Vector3 GetTraceOffset() { return (10.,3.5,-5.); diff --git a/zscript/weapons/swwm_danmaku.zsc b/zscript/weapons/swwm_danmaku.zsc index 3dcbc843f..1d5a8d123 100644 --- a/zscript/weapons/swwm_danmaku.zsc +++ b/zscript/weapons/swwm_danmaku.zsc @@ -7,6 +7,7 @@ Class Eviscerator : SWWMWeapon bool isfiring; // barrel is extended bool extended; + ui int lastmode; // pending shell load bool pendingload; // has shell chambered @@ -72,6 +73,22 @@ Class Eviscerator : SWWMWeapon } } + override void HudTick() + { + Super.HudTick(); + if ( lastmode && (lastmode != extended+1) && (Owner.player == players[consoleplayer]) ) + { + let bar = SWWMStatusBar(statusbar); + if ( bar ) + { + bar.ntagstr = StringTable.Localize(extended?"$SWWM_TIGHTSPREAD":"$SWWM_WIDESPREAD"); + bar.ntagtic = level.totaltime; + bar.ntagcol = nametagcolor; + } + } + lastmode = extended+1; + } + action void A_StartLoad( int delay = 0 ) { invoker.pendingload = true; diff --git a/zscript/weapons/swwm_deathlydeathcannon.zsc b/zscript/weapons/swwm_deathlydeathcannon.zsc index f5979fd9b..b804e128f 100644 --- a/zscript/weapons/swwm_deathlydeathcannon.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon.zsc @@ -19,6 +19,7 @@ Class Ynykron : SWWMWeapon int chargestate; double chargelevel; bool inverted, invertreload; + ui int lastmode; double ventalpha, ventfade; int ventcooldown; @@ -47,6 +48,17 @@ Class Ynykron : SWWMWeapon Super.HudTick(); if ( !ChargeInter ) ChargeInter = DynamicValueInterpolator.Create(int(chargelevel*10),.5,1,400); ChargeInter.Update(int(chargelevel*10)); + if ( lastmode && (lastmode != inverted+1) && (Owner.player == players[consoleplayer]) ) + { + let bar = SWWMStatusBar(statusbar); + if ( bar ) + { + bar.ntagstr = StringTable.Localize(inverted?"$SWWM_YNYKRONBACKWARD":"$SWWM_YNYKRONFORWARD"); + bar.ntagtic = level.totaltime; + bar.ntagcol = nametagcolor; + } + } + lastmode = inverted+1; } override bool ReportHUDAmmo() diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 38b0757d3..813b66d9d 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -122,11 +122,28 @@ Class Spreadgun : SWWMWeapon bool chambered; // a shell is actually loaded bool emptyup; // next reload will keep the chamber empty Class loadammo, nextammo; // currently loaded shell, next shell to load + ui Class lastammo; bool initialized; transient ui TextureID WeaponBox, AmmoIcon[7], LoadedIcon[7]; transient ui Font TewiFont; + override void HudTick() + { + Super.HudTick(); + if ( lastammo && (lastammo != nextammo) && (Owner.player == players[consoleplayer]) ) + { + let bar = SWWMStatusBar(statusbar); + if ( bar ) + { + bar.ntagstr = GetDefaultByType(nextammo).GetTag(); + bar.ntagtic = level.totaltime; + bar.ntagcol = nametagcolor; + } + } + lastammo = nextammo; + } + override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { if ( loadammo is 'RedShell' ) return StringTable.Localize("$O_SPREADGUN_RED"); diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index 60fbf2678..fe7845dd3 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -246,6 +246,7 @@ Class SilverBullet : SWWMWeapon { bool chambered, fired; bool fcbchambered, fcbloaded, fcbselected; + ui int lastammo; int clipcount; double casex, casey; @@ -316,6 +317,17 @@ Class SilverBullet : SWWMWeapon Super.HudTick(); if ( !ZoomInter ) ZoomInter = DynamicValueInterpolator.Create(int(zoomlevel*10),.5,1,20); ZoomInter.Update(int(zoomlevel*10)); + if ( lastammo && (lastammo != fcbselected+1) && (Owner.player == players[consoleplayer]) ) + { + let bar = SWWMStatusBar(statusbar); + if ( bar ) + { + bar.ntagstr = StringTable.Localize(fcbselected?"$SWWM_FCBSEL":"$SWWM_XSBSEL"); + bar.ntagtic = level.totaltime; + bar.ntagcol = nametagcolor; + } + } + lastammo = fcbselected+1; } override bool ReportHUDAmmo()