From 93ac4d3a4f2995b8a60ccf0c39d8ae2e205a6253 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sat, 4 Jun 2022 22:09:46 +0200 Subject: [PATCH] Remove Dragon's Breath shells. Nuggets can no longer be stored as spares. --- README.md | 7 +- docimg/shells.png | Bin 11634 -> 10104 bytes graphics/HUD/LoadedWhiteShell.png | Bin 284 -> 0 bytes graphics/HUD/SpreadgunDisplay.png | Bin 167 -> 191 bytes graphics/HUD/WhiteShell.png | Bin 168 -> 0 bytes language.def_base | 3 - language.def_lore | 8 +- language.es_base | 3 - language.es_dlg | 2 +- language.es_lore | 8 +- language.es_voice | 2 +- language.version | 4 +- lore/default/spreadgun.txt | 6 +- lore/default/wallbuster.txt | 2 +- lore/es/spreadgun.txt | 6 +- lore/es/wallbuster.txt | 2 +- modeldef.ammo | 37 -- modeldef.spreadgun | 138 ------ models/Shell_Dragon.png | Bin 2062 -> 0 bytes models/Shell_Dragon_Used.png | Bin 2238 -> 0 bytes sndinfo.txt | 3 - sounds/spreadgun/spread_whitefire1.ogg | Bin 33059 -> 0 bytes sounds/spreadgun/spread_whitefire2.ogg | Bin 35989 -> 0 bytes zscript.txt | 2 + zscript/dlc1/swwm_dlcweapons_hud.zsc | 1 + zscript/items/swwm_ammoitems.zsc | 184 +++----- zscript/items/swwm_ammospawn.zsc | 16 +- zscript/items/swwm_armor.zsc | 25 +- zscript/items/swwm_funstuff.zsc | 17 +- zscript/items/swwm_health.zsc | 25 +- zscript/kbase/swwm_kbasetab_store.zsc | 5 +- zscript/swwm_thinkers_player.zsc | 2 +- zscript/weapons/swwm_blazeit.zsc | 79 +--- zscript/weapons/swwm_cbt.zsc | 95 ----- zscript/weapons/swwm_danmaku.zsc | 13 - zscript/weapons/swwm_deathlydeathcannon.zsc | 15 - zscript/weapons/swwm_deepdarkimpact.zsc | 13 - zscript/weapons/swwm_jackhammer.zsc | 11 - zscript/weapons/swwm_shot.zsc | 228 +++------- zscript/weapons/swwm_shot_fx.zsc | 179 -------- zscript/weapons/swwm_sparkyboi.zsc | 32 -- zscript/weapons/swwm_splode.zsc | 20 - zscript/weapons/swwm_tastytreat.zsc | 20 - zscript/weapons/swwm_thiccboolet.zsc | 42 -- zscript/weapons/swwm_weapons_hud.zsc | 439 ++++++++++++++++++++ 45 files changed, 639 insertions(+), 1055 deletions(-) delete mode 100644 graphics/HUD/LoadedWhiteShell.png delete mode 100644 graphics/HUD/WhiteShell.png delete mode 100644 models/Shell_Dragon.png delete mode 100644 models/Shell_Dragon_Used.png delete mode 100644 sounds/spreadgun/spread_whitefire1.ogg delete mode 100644 sounds/spreadgun/spread_whitefire2.ogg create mode 100644 zscript/dlc1/swwm_dlcweapons_hud.zsc create mode 100644 zscript/weapons/swwm_weapons_hud.zsc diff --git a/README.md b/README.md index 4ba64884a..1cb727105 100644 --- a/README.md +++ b/README.md @@ -128,16 +128,15 @@ on replaced item, may also come in bundles: - **Standard buckshot (red):** Lots of tiny pellets ready to tear enemies to shreds. Most common. - **Slug (green):** Concentrated damage in a single, large projectile. Common. - - **Dragon's breath (white):** Fiery pain in one shot for everything in front of you. Not very effective underwater, but still deals some small heat damage. Somewhat rare. - - **Kinylum saltshot (blue):** Highly volatile shards of **Kinylum** that leave behind a trail of burning plasma. Rare. + - **Kinylum saltshot (blue):** Highly volatile shards of **Kinylum** that leave behind a trail of burning plasma. Somewhat rare. + - ***"The ball"* (purple):** A big lead ball, 'nuff said. Rare. - **Telebrium flechette (black):** A discharge of puncturing darts tipped with pure Telebrium, highly corrosive, effects may spread through emitted fumes. Very rare. - - ***"The ball"* (purple):** A big lead ball, 'nuff said. Somewhat rare. - **Golden shell (self-explanatory color):** An extremely rare, but very valuable type. Fires a sabot packed with a very dense, high-grade **Explodium** charge, the shell also contains some gold glitter, but it's just for show. Clearly designed by someone completely insane, and definitely guaranteed to not fail catastrophically and blow up your gun, your hands, your arms, and the rest of your upper body. Unlike the others, this one is only available as a rare drop from powerful monsters (over 1000HP) and bosses. They may also appear in **Chanceboxes**. ### Wallbuster (slot 4) ~ Replaces SSG, Ethereal Crossbow, Frost Shards ![](docimg/wallbuster.png) -A ludicrously overkill weapon, courtesy of the always-overkill **Blackmann Arms**. Sporting a pentagonal array of 5-barrel cylinders, for a grand total of 25 barrels. Everything in front of you is pretty much dead. Cannot use dragon's breath, flechettes or golden shells. +A ludicrously overkill weapon, courtesy of the always-overkill **Blackmann Arms**. Sporting a pentagonal array of 5-barrel cylinders, for a grand total of 25 barrels. Everything in front of you is pretty much dead. Cannot use flechettes or golden shells. **Primary fire:** Shoot one barrel at a time. diff --git a/docimg/shells.png b/docimg/shells.png index 9b0c912df10343a969b1a44f579ebbe785da1e33..9472dcd762e654c7e5e26244c12db0b7e0320484 100644 GIT binary patch literal 10104 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 literal 11634 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 diff --git a/graphics/HUD/LoadedWhiteShell.png b/graphics/HUD/LoadedWhiteShell.png deleted file mode 100644 index 583d3f0f2b5f0e7d220c561ecfc965f9f99656f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U|{25V_;yAxp}0Cfq~(%r;B5V#O2-zhTew* zBwWvD+pWDeLBYvDDW%Zouj;qu=>;n2)oYseCWl##nqIAoSP1=gGfM9Vz<}R&k$qaq7J1Qf-P#O{*Twapu2wKes3Gg>}>4 rS&wh_?0UJg{zebOgZJM5&xk*CEPilS@cDBF1_lOCS3j3^P6TA+R&BQ&BsShk4eH5|2Kw9tuLx9J8)yFbM&IUGF(QdCOSki eFlTFo2{17H4p7ZY7HH%L8Sd%o=d#Wzp$PySm@t3< literal 167 zcmeAS@N?(olHy`uVBq!ia0y~yU@&K3V9;SwkFqH)P1v8v^;^@4Xfq}us)5S5w;&ifxw=>hj6LUh?+FTq} z9<-ei43wBEGgW5llAS3X+(HJEal|aox4YknfOz z0L$}p)1=K!9tvt~`NO2iD(X=wT>qf+nD2+58a_v+EuQ())E_IxwVOD9VZwR-KyTd2^Kwg#zT|$!Mi7OI2Hd$FBQqEWmd4i`u&)A Y*J=&XiVf;f3=9kmp00i_>zopr0N-jof&c&j diff --git a/language.def_base b/language.def_base index a504e4d67..79911dca5 100644 --- a/language.def_base +++ b/language.def_base @@ -42,8 +42,6 @@ T_REDSHELL = "Shell"; T_REDSHELLS = "Shells"; T_GREENSHELL = "Slug"; T_GREENSHELLS = "Slugs"; -T_WHITESHELL = "Dragon's Breath Round"; -T_WHITESHELLS = "Dragon's Breath Rounds"; T_BLUESHELL = "Kinylum Saltshot Round"; T_BLUESHELLS = "Kinylum Saltshot Rounds"; T_BLACKSHELL = "Corrosive Round"; @@ -486,7 +484,6 @@ O_DEEPIMPACT_WEAK = "%k coughed in %o's general direction."; O_EXPLODIUM = "%k inflicted severe knee explosions onto %o."; O_SPREADGUN_RED = "%k gave %o a mouthful of shot."; O_SPREADGUN_GREEN = "%o got slugged by %k."; -O_SPREADGUN_WHITE = "%k burninated %o."; O_SPREADGUN_BLUE = "%k made %o very salty."; O_SPREADGUN_BLACK = "%o received a very spiky treatment from %o."; O_SPREADGUN_BLACK_DEBUFF = "%k turned %o into a corroded mess."; diff --git a/language.def_lore b/language.def_lore index f22989518..acc8c9442 100644 --- a/language.def_lore +++ b/language.def_lore @@ -3667,14 +3667,12 @@ SWWM_LORETXT_SPREADGUN = "\n" "\cfMetal Slug:\c- Green shells. Very potent slugs that have a decent accuracy, even at longer ranges. Due to their size and weight, they can potentially penetrate multiple small targets.\n" "\n" -"\cfDragon's Breath:\c- White shells. A burst of flame in each shot, has considerable range. Ineffective underwater, for obvious reasons.\n" -"\n" "\cfKinylum Saltshot:\c- Teal shells. Small chunks of Kinylum in its natural \"salt\" form. Once shot, they leave a trail of boiling hot plasma that remains in the air for a few moments before finally dissipating. In addition, the chunks will explode violently on contact with any surface, or once they \"destabilize\" (which unfortunately makes this type of ammunition ineffective at longer distances).\n" "\n" -"\cfTelebrium Flechettes:\c- Black shells. Dozens of piercing projectiles tipped with pure Telebrium, an exotic element known for its potent corrosive effects when heated. Targets hit by these projectiles will experience a very painful discharge of corrosive toxins through their bodies (even non-organic ones), although the effects of this will dissipate in a couple seconds. Use of this ammunition is highly restricted, but you have been granted permission to use it against the invading forces.\n" -"\n" "\cfLead Ball:\c- Purple shells. Coming from \cfPlutoni Incorporated\c-, these rounds shoot out a heavy ball of pure hurt. Despite the fact it's made of lead, it tends to keep its shape no matter how hard it hits something (some wonder if it actually IS made of lead, or if it's something else entirely). Having come out of such a place, it's no surprise that they also have some rather odd effects. It appears that, on certain occasions, the balls may emit odd sounds on impact, which in addition cause some form of potent shockwave around itself, increasing its speed in the process. This odd happening is listed as \"Random Crits\" in the store page.\n" "\n" +"\cfTelebrium Flechettes:\c- Black shells. Dozens of piercing projectiles tipped with pure Telebrium, an exotic element known for its potent corrosive effects when heated. Targets hit by these projectiles will experience a very painful discharge of corrosive toxins through their bodies (even non-organic ones), although the effects of this will dissipate in a couple seconds. Use of this ammunition is highly restricted, but you have been granted permission to use it against the invading forces.\n" +"\n" "\cfGolden Shell:\c- Gold-plated shells with a heavy metal body. A highly rare and expensive type of ammunition, with unmatched destructive power. Each round fires a sabot packing a high-grade, high-density \cfExplodium\c- charge, along with gold glitter (which is apparently just for show). Anything directly hit by it is guaranteed to be completely vaporized by the ensuing blast.\n" "\n" "The wide range of compatible ammunition types makes the Spreadgun a rather versatile weapon, once you look past its tedious manual reloading. There are however plans to make a much more comfortable semi-automatic, recoil operated variant of this weapon, with prototypes already being tested.\n" @@ -4026,7 +4024,7 @@ SWWM_LORETXT_WALLBUSTER = "\n" "The internal mechanisms driving this weapon have such a degree of complexity that they've been described as \cf\"Kraut Deep Space Magic\"\c- by some. Only \cfHermann E. Ischer\c- himself knows every detail about their operation. With each twist of the main trigger, the topmost barrel is primed, and then its cylinder spins counter-clockwise, with the next round ready for shooting. On a complete rotation, or when the secondary trigger is used, the main body spins afterwards, switching to another cylinder.\n" "\n" -"The Wallbuster is compatible with most types of 6ga shells distributed by Blackmann, although there are safety restrictions on some, namely dragon's breath, flechettes, and golden shells. This limits the range of ammunition usable to only these four types:\n" +"The Wallbuster is compatible with most types of 6ga shells distributed by Blackmann, although there are safety restrictions on some, namely flechettes and golden shells. This limits the range of ammunition usable to only these four types:\n" "\n" "\cfStandard Buckshot:\c- Red shells. Exactly what it says on the tin. Quite lethal at short range, and with some extra reach due to the length of the weapon's barrels.\n" "\n" diff --git a/language.es_base b/language.es_base index 281515cc5..b40f250b8 100644 --- a/language.es_base +++ b/language.es_base @@ -32,8 +32,6 @@ T_REDSHELL = "Cartucho"; T_REDSHELLS = "Cartuchos"; T_GREENSHELL = "Slug"; T_GREENSHELLS = "Slugs"; -T_WHITESHELL = "Cartucho Dragon's Breath"; -T_WHITESHELLS = "Cartuchos Dragon's Breath"; T_BLUESHELL = "Cartucho de Sal de Kinylum"; T_BLUESHELLS = "Cartuchos de Sal de Kinylum"; T_BLACKSHELL = "Cartucho Corrosivo"; @@ -385,7 +383,6 @@ O_DEEPIMPACT_WEAK = "%k tosió en la dirección general de %o."; O_EXPLODIUM = "%k infligió explosiones de rodilla severas a %o."; O_SPREADGUN_RED = "%k le dio a %o un bocado de perdigones."; O_SPREADGUN_GREEN = "%o fue sluggead@[ao_esp] por %k."; -O_SPREADGUN_WHITE = "%k incendificó a %o."; O_SPREADGUN_BLUE = "%k puso a %o muy salad@[ao_esp]."; O_SPREADGUN_BLACK = "%o recibió un trato muy puntiagudo de %k."; O_SPREADGUN_BLACK_DEBUFF = "%k dejó a %o hech@[ao_esp] un desastre corroído."; diff --git a/language.es_dlg b/language.es_dlg index b80c4d1ed..b07847a57 100644 --- a/language.es_dlg +++ b/language.es_dlg @@ -158,7 +158,7 @@ SWWM_SAYACLERICC2 = "Los clérigos son una puta mierda..."; SWWM_SAYAMAGE1 = "La guarida de Menelkir, eh... ...\nOh dios, no se lo digas a \cxKirin-kun\c-, aquí hay puzzles."; SWWM_SAYAMAGE2 = "Sí, está ya más que cansado de todo este tema. Y aparentemente ahora los tenemos de coincidir dibujos."; SWWM_SAYAMAGE3 = "Bueno, al menos estos son puzzles de verdad, y no lo que coño sea que fuera todo aquello."; -SWWM_SAYAMAGE4 = "Aun que sean... Ya sabes... De los que son todo cutres y chupadísimos."; +SWWM_SAYAMAGE4 = "Aunque sean... Ya sabes... De los que son todo cutres y chupadísimos."; // Dark Crucible SWWM_SAYAKORAXA1 = "Aquí estamos, \cdDemo\c-. El gran bastardo feo apestoso ese espera."; SWWM_SAYAKORAXB1 = "Al fin, el reinado maligno del vil conspirador encontrará su fin."; // Kirin reply diff --git a/language.es_lore b/language.es_lore index c7841f650..840ec84de 100644 --- a/language.es_lore +++ b/language.es_lore @@ -3403,14 +3403,12 @@ SWWM_LORETXT_SPREADGUN = "\n" "\cfSlug Metálico:\c- Cartuchos verdes. Slugs muy potentes con una puntería decente, incluso en distancias largas. Dado su tamaño y peso, tienen el potencial de penetrar varios objetivos pequeños.\n" "\n" -"\cfAliento de Dragón:\c- Cartuchos blancos. Un estallido de llamas con cada disparo, con rango considerable. Ineficaz bajo el agua, por razones obvias.\n" -"\n" "\cfSal de Kinylum:\c- Cartuchos cian. Pequeños trozos de Kinylum en su forma natural de \"sal\". Ya disparados, dejan un rastro de plasma ardiente que permanece en el aire durante unos momentos hasta disiparse. Adicionalmente, los trozos explotarán violentamente en contacto con cualquier superficie, o una vez se \"desestabilicen\" (lo cual desafortunadamente hace que este tipo de munición pierda efectividad a larga distancia).\n" "\n" -"\cfDardos de Telebrium:\c- Cartuchos negros. Docenas de proyectiles penetrantes cargados de Telebrium puro, un elemento exótico conocido por sus potentes efectos corrosivos al ser calentado. Los objetivos alcanzados por estos proyectiles experimentarán una muy dolorosa descarga de toxinas corrosivas por sus cuerpos (incluso los no orgánicos), aunque estos efectos se despejarán en cuestión de segundos. El uso de esta munición está altamente restringido, pero has obtenido permiso para usarla contra las fuerzas invasoras.\n" -"\n" "\cfBola de Plomo:\c- Cartuchos violetas. Viniendo de \cfPlutoni Incorporated\c-, estos cartuchos disparan una bola pesada de dolor puro. A pesar del hecho de que son de plomo, tiende a mantener la forma da igual la fuerza de impacto contra algo (algunos dudan de que realmente sean de plomo, siendo más bien de cualquier otro material). Habiendo salido de tal lugar, no es sorprendente que tengan efectos extraños. Al parecer, en ciertas ocasiones, las bolas pueden emitir sonidos extraños al impactar, los cuales adicionalmente provocan potentes ondas de choque, incrementando su velocidad en el proceso. Este suceso extraño está listado como \"Golpes Críticos Aleatorios\" en la página de la tienda.\n" "\n" +"\cfDardos de Telebrium:\c- Cartuchos negros. Docenas de proyectiles penetrantes cargados de Telebrium puro, un elemento exótico conocido por sus potentes efectos corrosivos al ser calentado. Los objetivos alcanzados por estos proyectiles experimentarán una muy dolorosa descarga de toxinas corrosivas por sus cuerpos (incluso los no orgánicos), aunque estos efectos se despejarán en cuestión de segundos. El uso de esta munición está altamente restringido, pero has obtenido permiso para usarla contra las fuerzas invasoras.\n" +"\n" "\cfCartucho Dorado:\c- Cartuchos cubiertos de oro con un fuerte cuerpo metálico. Un tipo de munición caro y muy poco común, con un poder destructor sin par. Cada cartucho dispara un proyectil que contiene una carga de \cfExplodium\c- de alta densidad y pureza, junto con brillantina dorada (que es aparentemente solo para quedar bonito). Se garantiza que cualquier cosa que reciba un impacto directo será vaporizada completamente por la explosión resultante.\n" "\n" "El amplio rango de munición compatible hace del Trabuco un arma bastante versátil, una vez acostumbrado a su tediosa recarga manual. Hay sin embargo planes para crear una variante semiautomática más cómoda de usar, con prototipos ya probándose.\n" @@ -3741,7 +3739,7 @@ SWWM_LORETXT_WALLBUSTER = "\n" "Los mecanismos internos que empujan el funcionamiento de este arma tienen tal grado de complejidad que han sido descritos por algunos como \cfIngeniería Loca Alemana\c-. Solamente el propio \cfHermann E. Ischer\c- conoce todos los detalles de su operación. Con cada accionamiento del gatillo principal, el cañón superior es disparado, y luego su tambor gira a contrarreloj, con el siguiente cartucho listo para dispararse. Con una rotación completa, o cuando se usa el gatillo secundario, el cuerpo principal gira después, alternando a otro tambor.\n" "\n" -"La Wallbuster es compatible con la mayor parte de cartuchos de calibre 6, aunque hay restricciones de seguridad para algunas, específicamente los cartuchos dragon's breath, flechette y dorados. Esto limita el rango de munición utilizable a sólo estos cuatro tipos:\n" +"La Wallbuster es compatible con la mayor parte de cartuchos de calibre 6, aunque hay restricciones de seguridad para algunas, específicamente los cartuchos de flechette y dorados. Esto limita el rango de munición utilizable a sólo estos cuatro tipos:\n" "\n" "\cfPerdigones Estándar:\c- Cartuchos rojos. Exactamente lo que pone. Bastante letal a corto rango, y con cierto alcance extra dada la longitud de los cañones del arma.\n" "\n" diff --git a/language.es_voice b/language.es_voice index e6e8b708e..413a398ce 100644 --- a/language.es_voice +++ b/language.es_voice @@ -328,7 +328,7 @@ SWWM_SUBS_DEFAULT_DSPARILA2 = "¿Por que no te bajas de esa cosa y hablamos?"; SWWM_SUBS_DEFAULT_DSPARILA3 = "Voy a fregar el suelo contigo, friki."; SWWM_SUBS_DEFAULT_DSPARILB1 = "¿Pero que os pasa a todos con lo de hablar al revés?"; SWWM_SUBS_DEFAULT_DSPARILB2 = "Lo siento, ¿podrías repetir eso?"; -SWWM_SUBS_DEFAULT_DSPARILB3 = "séver la ralbah odeup néibmat oY."; // record this line normally then just reverse it, really +SWWM_SUBS_DEFAULT_DSPARILB3 = ".séver la ralbah odeup néibmat oY"; // record this line normally then just reverse it, really // (H-Doom compat) Demon girl petting SWWM_SUBS_DEFAULT_PETHDOOM1 = "Buena chica~"; SWWM_SUBS_DEFAULT_PETHDOOM2 = "Eh, no tienes por qué pelear."; diff --git a/language.version b/language.version index 3b6ead28f..c8c7f8c78 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.2.21 r7 \cu(Tue 7 Jun 12:07:21 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.2.21 r7 \cu(2022-06-07 12:07:21)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.2.21 r8 \cu(Tue 7 Jun 12:31:02 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.2.21 r8 \cu(2022-06-07 12:31:02)\c-"; diff --git a/lore/default/spreadgun.txt b/lore/default/spreadgun.txt index 799806c49..e2b3155f1 100644 --- a/lore/default/spreadgun.txt +++ b/lore/default/spreadgun.txt @@ -20,14 +20,12 @@ The weapon is chambered for rather sizable 6ga shells, and there's an exclusive \cfMetal Slug:\c- Green shells. Very potent slugs that have a decent accuracy, even at longer ranges. Due to their size and weight, they can potentially penetrate multiple small targets. -\cfDragon's Breath:\c- White shells. A burst of flame in each shot, has considerable range. Ineffective underwater, for obvious reasons. - \cfKinylum Saltshot:\c- Teal shells. Small chunks of Kinylum in its natural "salt" form. Once shot, they leave a trail of boiling hot plasma that remains in the air for a few moments before finally dissipating. In addition, the chunks will explode violently on contact with any surface, or once they "destabilize" (which unfortunately makes this type of ammunition ineffective at longer distances). -\cfTelebrium Flechettes:\c- Black shells. Dozens of piercing projectiles tipped with pure Telebrium, an exotic element known for its potent corrosive effects when heated. Targets hit by these projectiles will experience a very painful discharge of corrosive toxins through their bodies (even non-organic ones), although the effects of this will dissipate in a couple seconds. Use of this ammunition is highly restricted, but you have been granted permission to use it against the invading forces. - \cfLead Ball:\c- Purple shells. Coming from **Plutoni Incorporated**, these rounds shoot out a heavy ball of pure hurt. Despite the fact it's made of lead, it tends to keep its shape no matter how hard it hits something (some wonder if it actually IS made of lead, or if it's something else entirely). Having come out of such a place, it's no surprise that they also have some rather odd effects. It appears that, on certain occasions, the balls may emit odd sounds on impact, which in addition cause some form of potent shockwave around itself, increasing its speed in the process. This odd happening is listed as "Random Crits" in the store page. +\cfTelebrium Flechettes:\c- Black shells. Dozens of piercing projectiles tipped with pure Telebrium, an exotic element known for its potent corrosive effects when heated. Targets hit by these projectiles will experience a very painful discharge of corrosive toxins through their bodies (even non-organic ones), although the effects of this will dissipate in a couple seconds. Use of this ammunition is highly restricted, but you have been granted permission to use it against the invading forces. + \cfGolden Shell:\c- Gold-plated shells with a heavy metal body. A highly rare and expensive type of ammunition, with unmatched destructive power. Each round fires a sabot packing a high-grade, high-density **Explodium** charge, along with gold glitter (which is apparently just for show). Anything directly hit by it is guaranteed to be completely vaporized by the ensuing blast. The wide range of compatible ammunition types makes the Spreadgun a rather versatile weapon, once you look past its tedious manual reloading. There are however plans to make a much more comfortable semi-automatic, recoil operated variant of this weapon, with prototypes already being tested. diff --git a/lore/default/wallbuster.txt b/lore/default/wallbuster.txt index a83280cd0..e7608fc79 100644 --- a/lore/default/wallbuster.txt +++ b/lore/default/wallbuster.txt @@ -17,7 +17,7 @@ The **Wallbuster** is a beefy beast of a shotgun, sporting a total of 25 barrels The internal mechanisms driving this weapon have such a degree of complexity that they've been described as **"Kraut Deep Space Magic"** by some. Only **Hermann E. Ischer** himself knows every detail about their operation. With each twist of the main trigger, the topmost barrel is primed, and then its cylinder spins counter-clockwise, with the next round ready for shooting. On a complete rotation, or when the secondary trigger is used, the main body spins afterwards, switching to another cylinder. -The Wallbuster is compatible with most types of 6ga shells distributed by Blackmann, although there are safety restrictions on some, namely dragon's breath, flechettes, and golden shells. This limits the range of ammunition usable to only these four types: +The Wallbuster is compatible with most types of 6ga shells distributed by Blackmann, although there are safety restrictions on some, namely flechettes and golden shells. This limits the range of ammunition usable to only these four types: \cfStandard Buckshot:\c- Red shells. Exactly what it says on the tin. Quite lethal at short range, and with some extra reach due to the length of the weapon's barrels. diff --git a/lore/es/spreadgun.txt b/lore/es/spreadgun.txt index ae940c258..b5026c9b2 100644 --- a/lore/es/spreadgun.txt +++ b/lore/es/spreadgun.txt @@ -16,14 +16,12 @@ El arma emplea el ciertamente grande calibre 6, y hay un surtido exclusivo de mu \cfSlug Metálico:\c- Cartuchos verdes. Slugs muy potentes con una puntería decente, incluso en distancias largas. Dado su tamaño y peso, tienen el potencial de penetrar varios objetivos pequeños. -\cfAliento de Dragón:\c- Cartuchos blancos. Un estallido de llamas con cada disparo, con rango considerable. Ineficaz bajo el agua, por razones obvias. - \cfSal de Kinylum:\c- Cartuchos cian. Pequeños trozos de Kinylum en su forma natural de "sal". Ya disparados, dejan un rastro de plasma ardiente que permanece en el aire durante unos momentos hasta disiparse. Adicionalmente, los trozos explotarán violentamente en contacto con cualquier superficie, o una vez se "desestabilicen" (lo cual desafortunadamente hace que este tipo de munición pierda efectividad a larga distancia). -\cfDardos de Telebrium:\c- Cartuchos negros. Docenas de proyectiles penetrantes cargados de Telebrium puro, un elemento exótico conocido por sus potentes efectos corrosivos al ser calentado. Los objetivos alcanzados por estos proyectiles experimentarán una muy dolorosa descarga de toxinas corrosivas por sus cuerpos (incluso los no orgánicos), aunque estos efectos se despejarán en cuestión de segundos. El uso de esta munición está altamente restringido, pero has obtenido permiso para usarla contra las fuerzas invasoras. - \cfBola de Plomo:\c- Cartuchos violetas. Viniendo de **Plutoni Incorporated**, estos cartuchos disparan una bola pesada de dolor puro. A pesar del hecho de que son de plomo, tiende a mantener la forma da igual la fuerza de impacto contra algo (algunos dudan de que realmente sean de plomo, siendo más bien de cualquier otro material). Habiendo salido de tal lugar, no es sorprendente que tengan efectos extraños. Al parecer, en ciertas ocasiones, las bolas pueden emitir sonidos extraños al impactar, los cuales adicionalmente provocan potentes ondas de choque, incrementando su velocidad en el proceso. Este suceso extraño está listado como "Golpes Críticos Aleatorios" en la página de la tienda. +\cfDardos de Telebrium:\c- Cartuchos negros. Docenas de proyectiles penetrantes cargados de Telebrium puro, un elemento exótico conocido por sus potentes efectos corrosivos al ser calentado. Los objetivos alcanzados por estos proyectiles experimentarán una muy dolorosa descarga de toxinas corrosivas por sus cuerpos (incluso los no orgánicos), aunque estos efectos se despejarán en cuestión de segundos. El uso de esta munición está altamente restringido, pero has obtenido permiso para usarla contra las fuerzas invasoras. + \cfCartucho Dorado:\c- Cartuchos cubiertos de oro con un fuerte cuerpo metálico. Un tipo de munición caro y muy poco común, con un poder destructor sin par. Cada cartucho dispara un proyectil que contiene una carga de **Explodium** de alta densidad y pureza, junto con brillantina dorada (que es aparentemente solo para quedar bonito). Se garantiza que cualquier cosa que reciba un impacto directo será vaporizada completamente por la explosión resultante. El amplio rango de munición compatible hace del Trabuco un arma bastante versátil, una vez acostumbrado a su tediosa recarga manual. Hay sin embargo planes para crear una variante semiautomática más cómoda de usar, con prototipos ya probándose. diff --git a/lore/es/wallbuster.txt b/lore/es/wallbuster.txt index 75678d8ad..e00806498 100644 --- a/lore/es/wallbuster.txt +++ b/lore/es/wallbuster.txt @@ -11,7 +11,7 @@ La **Wallbuster** es una escopeta bestial, teniendo un total de 25 cañones divi Los mecanismos internos que empujan el funcionamiento de este arma tienen tal grado de complejidad que han sido descritos por algunos como **Ingeniería Loca Alemana**. Solamente el propio **Hermann E. Ischer** conoce todos los detalles de su operación. Con cada accionamiento del gatillo principal, el cañón superior es disparado, y luego su tambor gira a contrarreloj, con el siguiente cartucho listo para dispararse. Con una rotación completa, o cuando se usa el gatillo secundario, el cuerpo principal gira después, alternando a otro tambor. -La Wallbuster es compatible con la mayor parte de cartuchos de calibre 6, aunque hay restricciones de seguridad para algunas, específicamente los cartuchos dragon's breath, flechette y dorados. Esto limita el rango de munición utilizable a sólo estos cuatro tipos: +La Wallbuster es compatible con la mayor parte de cartuchos de calibre 6, aunque hay restricciones de seguridad para algunas, específicamente los cartuchos de flechette y dorados. Esto limita el rango de munición utilizable a sólo estos cuatro tipos: \cfPerdigones Estándar:\c- Cartuchos rojos. Exactamente lo que pone. Bastante letal a corto rango, y con cierto alcance extra dada la longitud de los cañones del arma. diff --git a/modeldef.ammo b/modeldef.ammo index c02f73d18..430925494 100644 --- a/modeldef.ammo +++ b/modeldef.ammo @@ -73,43 +73,6 @@ Model "GreenShell4" FrameIndex XZW1 A 0 0 } -Model "WhiteShell" -{ - Path "models" - - Model 0 "ShellAmmo_One_d.3d" - Skin 0 "Shell_Dragon.png" - Scale 0.024 0.024 0.024 - PitchOffset 30 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "WhiteShell2" -{ - Path "models" - - Model 0 "ShellAmmo_Two_d.3d" - Skin 0 "Shell_Dragon.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "WhiteShell4" -{ - Path "models" - - Model 0 "ShellAmmo_Four_d.3d" - Skin 0 "Shell_Dragon.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} Model "BlueShell" { diff --git a/modeldef.spreadgun b/modeldef.spreadgun index 268b2fabb..3a02eed7e 100644 --- a/modeldef.spreadgun +++ b/modeldef.spreadgun @@ -26,20 +26,6 @@ Model "GreenShellCasing" ZOffset 1 FrameIndex XZW1 B 0 0 } -Model "WhiteShellCasing" -{ - Path "models" - - Model 0 "ShotShell_d.3d" - Skin 0 "Shell_Dragon_Used.png" - Scale 0.15 0.15 0.15 - USEACTORPITCH - USEACTORROLL - - FrameIndex XZW1 A 0 0 - ZOffset 1 - FrameIndex XZW1 B 0 0 -} Model "BlueShellCasing" { Path "models" @@ -208,10 +194,6 @@ Model "Spreadgun" Scale 0.08 0.08 0.08 Skin 2 "ShotgMuz.png" FrameIndex XZW0 B 2 0 - // dragon - Scale 0.12 0.12 0.12 - Skin 2 "ShotgMuz.png" - FrameIndex XZW0 C 2 0 // kinylum Scale 0.13 0.13 0.13 Skin 2 "ShotgMuzSalt.png" @@ -335,27 +317,6 @@ Model "Spreadgun" FrameIndex XZW4 Y 1 60 SurfaceSkin 1 4 "" FrameIndex XZW4 Z 1 61 - // Unload (White) - SurfaceSkin 1 4 "Shell_Dragon_Used.png" - FrameIndex XZW5 A 1 44 - FrameIndex XZW5 B 1 45 - FrameIndex XZW5 C 1 46 - FrameIndex XZW5 D 1 47 - FrameIndex XZW5 E 1 48 - FrameIndex XZW5 F 1 49 - FrameIndex XZW5 G 1 50 - FrameIndex XZW5 H 1 51 - FrameIndex XZW5 I 1 52 - FrameIndex XZW5 J 1 53 - FrameIndex XZW5 K 1 54 - FrameIndex XZW5 L 1 55 - FrameIndex XZW5 M 1 56 - FrameIndex XZW5 N 1 57 - FrameIndex XZW5 O 1 58 - FrameIndex XZW5 P 1 59 - FrameIndex XZW5 Q 1 60 - SurfaceSkin 1 4 "" - FrameIndex XZW5 R 1 61 // Unload (Blue) SurfaceSkin 1 4 "Shell_Kinylum_Used.png" FrameIndex XZW5 S 1 44 @@ -516,44 +477,6 @@ Model "Spreadgun" FrameIndex XZWA Y 1 93 FrameIndex XZWA Z 1 94 SurfaceSkin 1 4 "" - // Load (White) - SurfaceSkin 1 5 "Shell_Dragon.png" - FrameIndex XZWB A 1 62 - FrameIndex XZWB B 1 63 - FrameIndex XZWB C 1 64 - FrameIndex XZWB D 1 65 - FrameIndex XZWB E 1 66 - FrameIndex XZWB F 1 67 - FrameIndex XZWB G 1 68 - FrameIndex XZWB H 1 69 - FrameIndex XZWB I 1 70 - FrameIndex XZWB J 1 71 - FrameIndex XZWB K 1 72 - SurfaceSkin 1 5 "" - SurfaceSkin 1 4 "Shell_Dragon.png" - FrameIndex XZWB L 1 73 - FrameIndex XZWB M 1 74 - FrameIndex XZWB N 1 75 - FrameIndex XZWB O 1 76 - FrameIndex XZWB P 1 77 - FrameIndex XZWB Q 1 78 - FrameIndex XZWB R 1 79 - FrameIndex XZWB S 1 80 - FrameIndex XZWB T 1 81 - FrameIndex XZWB U 1 82 - FrameIndex XZWB V 1 83 - FrameIndex XZWB W 1 84 - FrameIndex XZWB X 1 85 - FrameIndex XZWB Y 1 86 - FrameIndex XZWB Z 1 87 - FrameIndex XZWC A 1 88 - FrameIndex XZWC B 1 89 - FrameIndex XZWC C 1 90 - FrameIndex XZWC D 1 91 - FrameIndex XZWC E 1 92 - FrameIndex XZWC F 1 93 - FrameIndex XZWC G 1 94 - SurfaceSkin 1 4 "" // Load (Blue) SurfaceSkin 1 5 "Shell_Kinylum.png" FrameIndex XZWC H 1 62 @@ -833,27 +756,6 @@ Model "Spreadgun" FrameIndex XZWL R 1 196 SurfaceSkin 1 4 "" FrameIndex XZWL S 1 197 - // Unload (White) - SurfaceSkin 1 4 "Shell_Dragon.png" - FrameIndex XZWL T 1 180 - FrameIndex XZWL U 1 181 - FrameIndex XZWL V 1 182 - FrameIndex XZWL W 1 183 - FrameIndex XZWL X 1 184 - FrameIndex XZWL Y 1 185 - FrameIndex XZWL Z 1 186 - FrameIndex XZWM A 1 187 - FrameIndex XZWM B 1 188 - FrameIndex XZWM C 1 189 - FrameIndex XZWM D 1 190 - FrameIndex XZWM E 1 191 - FrameIndex XZWM F 1 192 - FrameIndex XZWM G 1 193 - FrameIndex XZWM H 1 194 - FrameIndex XZWM I 1 195 - FrameIndex XZWM J 1 196 - SurfaceSkin 1 4 "" - FrameIndex XZWM K 1 197 // Unload (Blue) SurfaceSkin 1 4 "Shell_Kinylum.png" FrameIndex XZWM L 1 180 @@ -1014,46 +916,6 @@ Model "Spreadgun" FrameIndex XZWR R 1 229 FrameIndex XZWR S 1 230 SurfaceSkin 1 4 "" - // Load (White) - SurfaceSkin 1 5 "Shell_Dragon.png" - FrameIndex XZWR T 1 198 - FrameIndex XZWR U 1 199 - FrameIndex XZWR V 1 200 - FrameIndex XZWR W 1 201 - FrameIndex XZWR X 1 202 - FrameIndex XZWR Y 1 203 - FrameIndex XZWR Z 1 204 - FrameIndex XZWS A 1 205 - FrameIndex XZWS B 1 206 - FrameIndex XZWS C 1 207 - FrameIndex XZWS D 1 208 - SurfaceSkin 1 5 "" - SurfaceSkin 1 4 "Shell_Dragon.png" - FrameIndex XZWS E 1 209 - FrameIndex XZWS F 1 210 - FrameIndex XZWS G 1 211 - FrameIndex XZWS H 1 212 - FrameIndex XZWS I 1 213 - FrameIndex XZWS J 1 214 - FrameIndex XZWS K 1 215 - FrameIndex XZWS L 1 216 - FrameIndex XZWS M 1 217 - FrameIndex XZWS N 1 218 - FrameIndex XZWS O 1 219 - FrameIndex XZWS P 1 220 - FrameIndex XZWS Q 1 221 - FrameIndex XZWS R 1 222 - SurfaceSkin 1 5 "" - SurfaceSkin 1 4 "Shell_Gold.png" - FrameIndex XZWS S 1 223 - FrameIndex XZWS T 1 224 - FrameIndex XZWS U 1 225 - FrameIndex XZWS V 1 226 - FrameIndex XZWS W 1 227 - FrameIndex XZWS X 1 228 - FrameIndex XZWS Y 1 229 - FrameIndex XZWS Z 1 230 - SurfaceSkin 1 4 "" // Load (Blue) SurfaceSkin 1 5 "Shell_Kinylum.png" FrameIndex XZWT A 1 198 diff --git a/models/Shell_Dragon.png b/models/Shell_Dragon.png deleted file mode 100644 index 03bbc74816c42d1bf41eaccba39514c9901e1ba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2062 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�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 vipammodrop = null; - if ( SWWMUtility.ItemExists("Ynykron") && Random[Chancebox](0,1) ) vipammodrop = "YnykronAmmo"; - //if ( SWWMUtility.ItemExists("GrandLance") && Random[Chancebox](0,1) && !vipammodrop ) vipammodrop = "GrandAmmo"; - //if ( SWWMUtility.ItemExists("RafanKos") && Random[Chancebox](0,1) && !vipammodrop ) vipammodrop = "UltimateAmmo"; + if ( SWWMUtility.ItemExists("Ynykron") && SWWMUtility.CheckNeedsItem("YnykronAmmo",true) && Random[Chancebox](0,1) ) vipammodrop = "YnykronAmmo"; + if ( SWWMUtility.ItemExists("RafanKos") && SWWMUtility.CheckNeedsItem("UltimateAmmo",true) && Random[Chancebox](0,1) && !vipammodrop ) vipammodrop = "UltimateAmmo"; if ( SWWMUtility.ItemExists("Spreadgun") && SWWMUtility.CheckNeedsItem("GoldShell",true) && !vipammodrop ) vipammodrop = "GoldShell"; Class vipitemdrop = null; if ( SWWMUtility.CheckNeedsItem("Mykradvo",true) && !SWWMUtility.ItemExists("Mykradvo",worldonly:true) && Random[Chancebox](0,1) ) vipitemdrop = "Mykradvo"; @@ -1051,21 +1050,13 @@ Class Chancebox : Actor a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); - for ( int i=0; i<3; i++ ) - { - a = Spawn("WhiteShell",pos); - a.bDROPPED = false; - a.bNOGRAVITY = false; - a.vel.z = FRandom[Chancebox](2,4); - a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2); - } for ( int i=0; i<8; i++ ) { a = Spawn((i%2)?"PurpleShell":"BlueShell",pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); - a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4); + a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](2,3); } for ( int i=0; i<12; i++ ) { @@ -1073,7 +1064,7 @@ Class Chancebox : Actor a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); - a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](5,6); + a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](4,5); } } else if ( Random[Chancebox](0,1) ) diff --git a/zscript/items/swwm_health.zsc b/zscript/items/swwm_health.zsc index 30940f31f..e456f8b85 100644 --- a/zscript/items/swwm_health.zsc +++ b/zscript/items/swwm_health.zsc @@ -65,11 +65,24 @@ Class RefresherRegen : Powerup Class HealthNuggetItem : SWWMHealth { - override Inventory CreateCopy( Actor other ) + override bool Use( bool pickup ) { // additional lore - SWWMLoreLibrary.Add(other.player,"Nugget"); - return Super.CreateCopy(other); + SWWMLoreLibrary.Add(Owner.player,"Nugget"); + bool bUsed = Super.Use(pickup); + // sell excess + if ( !bUsed ) + { + int sellprice = int(abs(Stamina)*.5); + SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2)); + SWWMCredits.Give(Owner.player,sellprice); + if ( Owner.player ) + { + if ( Owner.player == players[consoleplayer] ) Console.Printf(StringTable.Localize(SWWMUtility.SellFemaleItem(self)?"$SWWM_SELLEXTRA_FEM":"$SWWM_SELLEXTRA"),GetTag(),sellprice); + else Console.Printf(StringTable.Localize(SWWMUtility.SellFemaleItem(self)?"$SWWM_SELLEXTRAREM_FEM":"$SWWM_SELLEXTRAREM"),Owner.player.GetUserName(),GetTag(),sellprice); + } + } + return bUsed; } override void DoPickupSpecial( Actor toucher ) { @@ -84,12 +97,12 @@ Class HealthNuggetItem : SWWMHealth //$Icon health Tag "$T_NUGGETH"; Stamina 200; - Inventory.Icon "graphics/HUD/Icons/I_HealthNugget.png"; Inventory.PickupMessage "$T_NUGGETH"; - Inventory.MaxAmount 20; - Inventory.InterHubAmount 20; + Inventory.MaxAmount 0; + Inventory.InterHubAmount 0; SWWMHealth.GiveHealth "HealthNugget"; +INVENTORY.ALWAYSPICKUP; + -INVENTORY.INVBAR; Radius 4; Height 22; } diff --git a/zscript/kbase/swwm_kbasetab_store.zsc b/zscript/kbase/swwm_kbasetab_store.zsc index 62f27f3d5..65e65aa3e 100644 --- a/zscript/kbase/swwm_kbasetab_store.zsc +++ b/zscript/kbase/swwm_kbasetab_store.zsc @@ -107,6 +107,9 @@ Class DemolitionistStoreTab : DemolitionistMenuTab { // skip maxed items if buying if ( cur && (cur.Amount >= cur.MaxAmount) ) return true; + // nuggets are skipped if more can't be picked up + if ( (type is 'HealthNuggetItem') && (players[consoleplayer].Health >= GetDefaultByType('HealthNugget').MaxAmount) ) return true; + if ( (type is 'ArmorNuggetItem') && (players[consoleplayer].mo.CountInv('ArmorNugget') >= GetDefaultByType('ArmorNugget').MaxAmount) ) return true; // ignore ammo for weapons not owned if buying bool notownedammo = false; if ( type is 'Ammo' ) @@ -600,7 +603,7 @@ Class DemolitionistMenuStoreItem : DemolitionistMenuListItem camt = 0; max = GetDefaultByType(inv).MaxAmount; } - if ( camt >= max ) + if ( (max > 0) && (camt >= max) ) { master.MenuSound("menu/noinvuse"); master.tmsg = StringTable.Localize("$SWWM_STOREFULL"); diff --git a/zscript/swwm_thinkers_player.zsc b/zscript/swwm_thinkers_player.zsc index 52788961b..2bab053a8 100644 --- a/zscript/swwm_thinkers_player.zsc +++ b/zscript/swwm_thinkers_player.zsc @@ -165,7 +165,7 @@ Class SWWMStats : SWWMStaticThinker else if ( inflictor is 'AirBullet' ) which = 'DeepImpact'; else if ( inflictor is 'PusherProjectile' ) which = 'PusherWeapon'; else if ( (inflictor is 'ExplodiumMagArm') || (inflictor is 'ExplodiumMagProj') || (inflictor is 'ExplodiumBulletImpact') ) which = 'ExplodiumGun'; - else if ( (inflictor is 'DragonBreathArm') || ((inflictor is 'SaltImpact') && !inflictor.Args[0]) || ((inflictor is 'SaltBeam') && !inflictor.Args[1]) || (inflictor is 'CorrodeDebuff') || (inflictor is 'CorrosiveFlechette') || ((inflictor is 'TheBall') && !inflictor.special1) || (inflictor is 'GoldenImpact') || (inflictor is 'GoldenSubImpact') || (inflictor is 'GoldenSubSubImpact') ) which = 'Spreadgun'; + else if ( ((inflictor is 'SaltImpact') && !inflictor.Args[0]) || ((inflictor is 'SaltBeam') && !inflictor.Args[1]) || (inflictor is 'CorrodeDebuff') || (inflictor is 'CorrosiveFlechette') || ((inflictor is 'TheBall') && !inflictor.special1) || (inflictor is 'GoldenImpact') || (inflictor is 'GoldenSubImpact') || (inflictor is 'GoldenSubSubImpact') ) which = 'Spreadgun'; else if ( ((inflictor is 'SaltImpact') && inflictor.Args[0]) || ((inflictor is 'SaltBeam') && inflictor.Args[1]) || ((inflictor is 'TheBall') && inflictor.special1) ) which = 'Wallbuster'; else if ( (inflictor is 'EvisceratorChunk') || (inflictor is 'EvisceratorProj') ) which = 'Eviscerator'; else if ( (inflictor is 'HellblazerMissile') || (inflictor is 'HellblazerRavagerArm') || (inflictor is 'HellblazerWarheadArm') ) which = 'Hellblazer'; diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index c68eed781..aa06722c6 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -102,8 +102,8 @@ Class Hellblazer : SWWMWeapon Property ClipCount : clipcount; - transient ui TextureID WeaponBox, AmmoIcon[4], LoadedIcon[4], LockIcon[4]; transient ui SWWMProjectionData projdata; + ui TextureID LockIcon[4]; override void RenderUnderlay( RenderEvent e ) { @@ -139,83 +139,6 @@ Class Hellblazer : SWWMWeapon } } - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; - if ( !WeaponBox ) - { - WeaponBox = TexMan.CheckForTexture("graphics/HUD/HellblazerDisplay.png",TexMan.Type_Any); - AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/HellblazerMissile.png",TexMan.Type_Any); - AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/HellblazerCrackshot.png",TexMan.Type_Any); - AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/HellblazerRavager.png",TexMan.Type_Any); - AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/HellblazerWarhead.png",TexMan.Type_Any); - LoadedIcon[0] = TexMan.CheckForTexture("graphics/HUD/HellblazerMissileLoaded.png",TexMan.Type_Any); - LoadedIcon[1] = TexMan.CheckForTexture("graphics/HUD/HellblazerCrackshotLoaded.png",TexMan.Type_Any); - LoadedIcon[2] = TexMan.CheckForTexture("graphics/HUD/HellblazerRavagerLoaded.png",TexMan.Type_Any); - LoadedIcon[3] = TexMan.CheckForTexture("graphics/HUD/HellblazerWarheadLoaded.png",TexMan.Type_Any); - } - double xx = -56, yy = -49; - Screen.DrawTexture(WeaponBox,false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int curtype = 0; - for ( int i=0; i<4; i++ ) - { - if ( loadammo != types[i] ) continue; - curtype = i; - break; - } - xx += 2; - yy += 2; - for ( int i=0; i<4; i++ ) - { - int amt = Owner.CountInv(types[i]); - String amtstr = String.Format("%3d",amt); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx+xx,by+yy,amtstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); - Screen.DrawTexture(AmmoIcon[i],false,bx+xx+19,by+yy+1,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); - yy += 13; - if ( i%2 ) - { - yy -= 26; - xx += 28; - } - } - yy = -18; - switch ( curtype ) - { - case 0: - xx = -54; - for ( int i=0; i<6; i++ ) - { - Screen.DrawTexture(LoadedIcon[0],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); - xx += 9; - } - break; - case 1: - xx = -49; - for ( int i=0; i<3; i++ ) - { - Screen.DrawTexture(LoadedIcon[1],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); - xx += 18; - } - break; - case 2: - xx = -49; - for ( int i=0; i<3; i++ ) - { - Screen.DrawTexture(LoadedIcon[2],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); - xx += 18; - } - break; - case 3: - xx = -45; - for ( int i=0; i<2; i++ ) - { - Screen.DrawTexture(LoadedIcon[3],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); - xx += 27; - } - break; - } - } - override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_cbt.zsc b/zscript/weapons/swwm_cbt.zsc index 49f58cd1a..5d359ae5b 100644 --- a/zscript/weapons/swwm_cbt.zsc +++ b/zscript/weapons/swwm_cbt.zsc @@ -14,7 +14,6 @@ Class Wallbuster : SWWMWeapon transient bool cancelreload; transient bool clearout; - transient ui TextureID WeaponBox, AmmoIcon[4], LoadIcon[4], UsedIcon[4], EmptyIcon; Class curobt; ui Vector3 cpos25[25]; @@ -29,100 +28,6 @@ Class Wallbuster : SWWMWeapon if ( curobt is 'PurpleShell' ) return StringTable.Localize("$O_WALLBUSTER_PURPLE"); return Super.GetObituary(victim,inflictor,mod,playerattack); } - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell"}; - /* - (Layout of indices) - - 0 - 4 1 - 3 2 - L 9 - K M 8 5 - O N 7 6 - - H D - G I C E - F J B A - - */ - static const int barrelposx[] = - { - 29,24,26,32,34, - 10,12,18,20,15, - 17,23,25,20,15, - 41,43,38,33,35, - 48,43,38,40,46 - }; - static const int barrelposy[] = - { - 46,42,36,36,42, - 31,25,25,31,35, - 8, 8,14,18,14, - 8,14,18,14, 8, - 31,35,31,25,25 - }; - if ( !WeaponBox ) - { - WeaponBox = TexMan.CheckForTexture("graphics/HUD/WallbusterDisplay.png",TexMan.Type_Any); - AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/RedShell.png",TexMan.Type_Any); - AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/GreenShell.png",TexMan.Type_Any); - AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/BlueShell.png",TexMan.Type_Any); - AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/PurpleShell.png",TexMan.Type_Any); - LoadIcon[0] = TexMan.CheckForTexture("graphics/HUD/WallbusterRed.png",TexMan.Type_Any); - LoadIcon[1] = TexMan.CheckForTexture("graphics/HUD/WallbusterGreen.png",TexMan.Type_Any); - LoadIcon[2] = TexMan.CheckForTexture("graphics/HUD/WallbusterBlue.png",TexMan.Type_Any); - LoadIcon[3] = TexMan.CheckForTexture("graphics/HUD/WallbusterPurple.png",TexMan.Type_Any); - UsedIcon[0] = TexMan.CheckForTexture("graphics/HUD/WallbusterRedUsed.png",TexMan.Type_Any); - UsedIcon[1] = TexMan.CheckForTexture("graphics/HUD/WallbusterGreenUsed.png",TexMan.Type_Any); - UsedIcon[2] = TexMan.CheckForTexture("graphics/HUD/WallbusterBlueUsed.png",TexMan.Type_Any); - UsedIcon[3] = TexMan.CheckForTexture("graphics/HUD/WallbusterPurpleUsed.png",TexMan.Type_Any); - EmptyIcon = TexMan.CheckForTexture("graphics/HUD/WallbusterEmpty.png",TexMan.Type_Any); - } - Screen.DrawTexture(WeaponBox,false,bx-54,by-72,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int ox = 6; - int oy = 60; - for ( int i=0; i<4; i++ ) - { - Screen.DrawTexture(AmmoIcon[i],false,bx-ox,by-oy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - String astr = String.Format("%3d",Owner.CountInv(types[i])); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-ox-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-oy-1,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - oy += 10; - if ( i == 1 ) - { - oy = 60; - ox = 33; - } - } - // and here's the big clusterdick - for ( int i=0; i<25; i++ ) - { - int idx = i; - int group = idx/5; - // shift based on group rotation - int gidx = i%5; - gidx = (gidx-rotation[group]); - while ( gidx < 0 ) gidx += 5; - idx = gidx+group*5; - // shift based on full rotation - idx = (idx-rotation[5]*5); - while ( idx < 0 ) idx += 25; - if ( !loaded[i] ) - { - Screen.DrawTexture(EmptyIcon,false,bx-barrelposx[idx],by-barrelposy[idx],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - continue; - } - int which = 0; - for ( int j=0; j<4; j++ ) - { - if ( !(loaded[i] is types[j]) ) continue; - which = j; - break; - } - Screen.DrawTexture(fired[i]?UsedIcon[which]:LoadIcon[which],false,bx-barrelposx[idx],by-barrelposy[idx],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - } override void HudTick() { diff --git a/zscript/weapons/swwm_danmaku.zsc b/zscript/weapons/swwm_danmaku.zsc index af6687a5b..36e51f371 100644 --- a/zscript/weapons/swwm_danmaku.zsc +++ b/zscript/weapons/swwm_danmaku.zsc @@ -15,19 +15,6 @@ Class Eviscerator : SWWMWeapon // countdown to loading new shell int loadtics; - transient ui TextureID WeaponBox, AmmoIcon; - - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/EvisceratorDisplay.png",TexMan.Type_Any); - if ( !AmmoIcon ) AmmoIcon = TexMan.CheckForTexture("graphics/HUD/EvisceratorShell.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-46,by-16,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - String astr = String.Format("%d",Ammo1.Amount); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-14-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-14,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawTexture(AmmoIcon,false,bx-14,by-14,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,chambered?Color(0,0,0,0):Color(128,0,0,0)); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_WHITE,bx-44,by-14,extended?"►":"",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - override bool ReportHUDAmmo() { if ( (Ammo1.Amount > 0) || chambered ) return true; diff --git a/zscript/weapons/swwm_deathlydeathcannon.zsc b/zscript/weapons/swwm_deathlydeathcannon.zsc index 27c783215..f2cdafb99 100644 --- a/zscript/weapons/swwm_deathlydeathcannon.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon.zsc @@ -3,7 +3,6 @@ Class Ynykron : SWWMWeapon { - transient ui TextureID WeaponBox, ChargeBar[2], BoxSide[2]; transient ui DynamicValueInterpolator ChargeInter; enum EChargeState @@ -27,20 +26,6 @@ Class Ynykron : SWWMWeapon Property ClipCount : clipcount; - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/YnykronDisplay.png",TexMan.Type_Any); - if ( !ChargeBar[0] ) ChargeBar[0] = TexMan.CheckForTexture("graphics/HUD/YnykronBarA.png",TexMan.Type_Any); - if ( !ChargeBar[1] ) ChargeBar[1] = TexMan.CheckForTexture("graphics/HUD/YnykronBarB.png",TexMan.Type_Any); - if ( !BoxSide[0] ) BoxSide[0] = TexMan.CheckForTexture("graphics/HUD/YnykronSideA.png",TexMan.Type_Any); - if ( !BoxSide[1] ) BoxSide[1] = TexMan.CheckForTexture("graphics/HUD/YnykronSideB.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-33,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*10),0,400); - int ct = int(((by-2)-chg/10.)*hs); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-30,by-15,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawTexture(BoxSide[inverted],false,bx-23,by-31,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,clipcount?Color(0,0,0,0):Color(128,0,0,0)); - Screen.DrawTexture(ChargeBar[inverted],false,bx-6,by-42,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(chargestate==CS_READY)?Color(int(clamp(sin((level.maptime+TicFrac)*8)*40+24,0.,64.)),255,255,255):Color(0,0,0,0),DTA_ClipTop,ct); - } override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_deepdarkimpact.zsc b/zscript/weapons/swwm_deepdarkimpact.zsc index a86d7be32..42a7b1d7b 100644 --- a/zscript/weapons/swwm_deepdarkimpact.zsc +++ b/zscript/weapons/swwm_deepdarkimpact.zsc @@ -49,24 +49,11 @@ Class DeepImpact : SWWMWeapon double charge; bool charging; - transient ui TextureID WeaponBox, AmmoBar; transient ui DynamicValueInterpolator ChargeInter; transient int failtime; Property ClipCount : clipcount; - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/DeepImpactDisplay.png",TexMan.Type_Any); - if ( !AmmoBar ) AmmoBar = TexMan.CheckForTexture("graphics/HUD/DeepImpactBar.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-36,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int chg = clamp(ChargeInter?ChargeInter.GetValue():clipcount,0,100); - int ct = int(((by-2)-(chg*50./100.))*hs); - bool blinking = (failtime>gametic)&&((failtime-gametic)%8>=4); - Screen.DrawTexture(AmmoBar,false,bx-7,by-52,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ClipTop,ct,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-35,by-12,String.Format("%3d%%",chg),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); - } - override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_jackhammer.zsc b/zscript/weapons/swwm_jackhammer.zsc index e6b521efc..a02033a21 100644 --- a/zscript/weapons/swwm_jackhammer.zsc +++ b/zscript/weapons/swwm_jackhammer.zsc @@ -6,19 +6,8 @@ Class PusherWeapon : SWWMWeapon double chargelevel, vibe; int hitcnt; - transient ui TextureID WeaponBox, ChargeBar; transient ui DynamicValueInterpolator ChargeInter; - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/PusherDisplay.png",TexMan.Type_Any); - if ( !ChargeBar ) ChargeBar = TexMan.CheckForTexture("graphics/HUD/PusherBar.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-60,by-9,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*100),0,100); - double cw = chg*56./100.; - Screen.DrawTexture(ChargeBar,false,bx-58,by-7,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,cw); - } - override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 12fc341c3..b9c75c4e8 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -126,8 +126,6 @@ Class Spreadgun : SWWMWeapon ui Class lastammo; bool initialized; - transient ui TextureID WeaponBox, AmmoIcon[7], LoadedIcon[7]; - override void HudTick() { Super.HudTick(); @@ -148,73 +146,27 @@ Class Spreadgun : SWWMWeapon { if ( loadammo is 'RedShell' ) return StringTable.Localize("$O_SPREADGUN_RED"); if ( loadammo is 'GreenShell' ) return StringTable.Localize("$O_SPREADGUN_GREEN"); - if ( loadammo is 'WhiteShell' ) return StringTable.Localize("$O_SPREADGUN_WHITE"); if ( loadammo is 'BlueShell' ) return StringTable.Localize("$O_SPREADGUN_BLUE"); - if ( loadammo is 'BlackShell' ) return StringTable.Localize("$O_SPREADGUN_BLACK"); if ( loadammo is 'PurpleShell' ) return StringTable.Localize("$O_SPREADGUN_PURPLE"); + if ( loadammo is 'BlackShell' ) return StringTable.Localize("$O_SPREADGUN_BLACK"); if ( loadammo is 'GoldShell' ) return StringTable.Localize("$O_SPREADGUN_GOLD"); return Super.GetObituary(victim,inflictor,mod,playerattack); } - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - if ( !WeaponBox ) - { - WeaponBox = TexMan.CheckForTexture("graphics/HUD/SpreadgunDisplay.png",TexMan.Type_Any); - AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/RedShell.png",TexMan.Type_Any); - AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/GreenShell.png",TexMan.Type_Any); - AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/WhiteShell.png",TexMan.Type_Any); - AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/BlueShell.png",TexMan.Type_Any); - AmmoIcon[4] = TexMan.CheckForTexture("graphics/HUD/BlackShell.png",TexMan.Type_Any); - AmmoIcon[5] = TexMan.CheckForTexture("graphics/HUD/PurpleShell.png",TexMan.Type_Any); - AmmoIcon[6] = TexMan.CheckForTexture("graphics/HUD/GoldShell.png",TexMan.Type_Any); - LoadedIcon[0] = TexMan.CheckForTexture("graphics/HUD/LoadedRedShell.png",TexMan.Type_Any); - LoadedIcon[1] = TexMan.CheckForTexture("graphics/HUD/LoadedGreenShell.png",TexMan.Type_Any); - LoadedIcon[2] = TexMan.CheckForTexture("graphics/HUD/LoadedWhiteShell.png",TexMan.Type_Any); - LoadedIcon[3] = TexMan.CheckForTexture("graphics/HUD/LoadedBlueShell.png",TexMan.Type_Any); - LoadedIcon[4] = TexMan.CheckForTexture("graphics/HUD/LoadedBlackShell.png",TexMan.Type_Any); - LoadedIcon[5] = TexMan.CheckForTexture("graphics/HUD/LoadedPurpleShell.png",TexMan.Type_Any); - LoadedIcon[6] = TexMan.CheckForTexture("graphics/HUD/LoadedGoldShell.png",TexMan.Type_Any); - } - Screen.DrawTexture(WeaponBox,false,bx-54,by-43,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int ox = 6; - int oy = 11; - for ( int i=0; i<7; i++ ) - { - Screen.DrawTexture(AmmoIcon[i],false,bx-ox,by-oy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); - String astr = String.Format("%3d",Owner.CountInv(types[i])); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-ox-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-oy-1,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); - oy += 10; - if ( i == 3 ) - { - oy = 21; - ox = 33; - } - } - if ( !chambered ) return; - for ( int i=0; i<7; i++ ) - { - if ( loadammo != types[i] ) continue; - Screen.DrawTexture(LoadedIcon[i],false,bx-48,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fired?Color(128,0,0,0):Color(0,0,0,0)); - break; - } - } - override bool ReportHUDAmmo() { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - for ( int i=0; i<7; i++ ) if ( Owner.CountInv(types[i]) > 0 ) return true; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + for ( int i=0; i<6; i++ ) if ( Owner.CountInv(types[i]) > 0 ) return true; return (!fired && chambered); } override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount ) { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; if ( (firemode == PrimaryFire) || (firemode == AltFire) ) { if ( !fired && chambered ) return true; - for ( int i=0; i<7; i++ ) if ( Owner.CountInv(types[i]) > 0 ) return true; + for ( int i=0; i<6; i++ ) if ( Owner.CountInv(types[i]) > 0 ) return true; return false; } return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount); @@ -222,18 +174,18 @@ Class Spreadgun : SWWMWeapon override bool UsesAmmo( Class kind ) { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - for ( int i=0; i<7; i++ ) if ( kind is types[i] ) return true; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + for ( int i=0; i<6; i++ ) if ( kind is types[i] ) return true; return false; } action void A_SelectUnloadState() { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - static const statelabel primedstates[] = {"UnloadRed", "UnloadGreen", "UnloadWhite", "UnloadBlue", "UnloadBlack", "UnloadPurple", "UnloadGold"}; - static const statelabel firedstates[] = {"UnloadRedFired", "UnloadGreenFired", "UnloadWhiteFired", "UnloadBlueFired", "UnloadBlackFired", "UnloadPurpleFired", "UnloadGoldFired"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + static const statelabel primedstates[] = {"UnloadRed", "UnloadGreen", "UnloadBlue", "UnloadPurple", "UnloadBlack", "UnloadGold"}; + static const statelabel firedstates[] = {"UnloadRedFired", "UnloadGreenFired", "UnloadBlueFired", "UnloadPurpleFired", "UnloadBlackFired", "UnloadGoldFired"}; int amidx = 0; - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { if ( invoker.loadammo != types[i] ) continue; amidx = i; @@ -249,11 +201,11 @@ Class Spreadgun : SWWMWeapon action void A_SelectLoadState() { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - static const statelabel primedstates[] = {"LoadRed", "LoadGreen", "LoadWhite", "LoadBlue", "LoadBlack", "LoadPurple", "LoadGold"}; - static const statelabel firedstates[] = {"LoadRedFired", "LoadGreenFired", "LoadWhiteFired", "LoadBlueFired", "LoadBlackFired", "LoadPurpleFired", "LoadGoldFired"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + static const statelabel primedstates[] = {"LoadRed", "LoadGreen", "LoadBlue", "LoadPurple", "LoadBlack", "LoadGold"}; + static const statelabel firedstates[] = {"LoadRedFired", "LoadGreenFired", "LoadBlueFired", "LoadPurpleFired", "LoadBlackFired", "LoadGoldFired"}; int amidx = 0; - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { if ( invoker.nextammo != types[i] ) continue; amidx = i; @@ -278,11 +230,11 @@ Class Spreadgun : SWWMWeapon action void A_DropShell() { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - static const Class casetypes[] = {"RedShellCasing","GreenShellCasing","WhiteShellCasing","BlueShellCasing","BlackShellCasing","PurpleShellCasing","GoldShellCasing"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + static const Class casetypes[] = {"RedShellCasing","GreenShellCasing","BlueShellCasing","PurpleShellCasing","BlackShellCasing","GoldShellCasing"}; if ( !invoker.fired ) { - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { if ( invoker.loadammo != types[i] ) continue; let amo = FindInventory(types[i]); @@ -300,7 +252,7 @@ Class Spreadgun : SWWMWeapon } else { - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { if ( invoker.loadammo != types[i] ) continue; Vector3 x, y, z; @@ -394,13 +346,13 @@ Class Spreadgun : SWWMWeapon action void A_FireShell() { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - static const statelabel flashes[] = {"FlashRed","FlashGreen","FlashWhite","FlashBlue","FlashBlack","FlashPurple","FlashGold"}; - static const String sounds[] = {"spreadgun/redfire","spreadgun/greenfire","spreadgun/whitefire","spreadgun/bluefire","spreadgun/blackfire","spreadgun/purplefire","spreadgun/goldfire"}; - static const int louds[] = {800,1000,1100,1200,1400,600,2500}; - static const int quakes[] = {3,4,2,4,3,1,6}; - static const Color cols[] = {Color(40,255,192,64),Color(36,255,192,80),Color(64,255,160,32),Color(48,32,176,255),Color(72,255,128,16),Color(24,255,224,96),Color(96,255,224,16)}; - for ( int i=0; i<7; i++ ) + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + static const statelabel flashes[] = {"FlashRed","FlashGreen","FlashBlue","FlashPurple","FlashBlack","FlashGold"}; + static const String sounds[] = {"spreadgun/redfire","spreadgun/greenfire","spreadgun/bluefire","spreadgun/purplefire","spreadgun/blackfire","spreadgun/goldfire"}; + static const int louds[] = {800,1000,1200,600,1400,2500}; + static const int quakes[] = {3,4,4,1,3,6}; + static const Color cols[] = {Color(40,255,192,64),Color(36,255,192,80),Color(48,32,176,255),Color(24,255,224,96),Color(72,255,128,16),Color(96,255,224,16)}; + for ( int i=0; i<6; i++ ) { if ( invoker.loadammo != types[i] ) continue; A_SWWMFlash(flashes[i]); @@ -451,35 +403,6 @@ Class Spreadgun : SWWMWeapon SWWMUtility.DoKnockback(self,-x,25000.); break; case 2: - for ( int j=0; j<3; j++ ) - { - a = FRandom[Spreadgun](0,360); - s = FRandom[Spreadgun](0,.24); - dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); - let p = Spawn("DragonBreathArm",origin); - p.target = self; - p.angle = atan2(dir.y,dir.x); - p.pitch = asin(-dir.z); - } - for ( int i=0; i<15; i++ ) - { - let s = Spawn("SWWMSmoke",origin); - s.special1 = 1; - s.scale *= .9; - s.alpha *= .3; - s.SetShade(Color(1,1,1)*Random[Spreadgun](96,192)); - s.vel += vel*.5+x*FRandom[Spreadgun](3.,5.)+y*FRandom[Spreadgun](-1,1)+z*FRandom[Spreadgun](-1,1); - } - for ( int i=0; i<12; i++ ) - { - let s = Spawn("SWWMSpark",origin); - s.scale *= .3; - s.alpha *= .4; - s.vel += vel*.5+x*FRandom[Spreadgun](4.,8.)+y*FRandom[Spreadgun](-2,2)+z*FRandom[Spreadgun](-2,2); - } - SWWMUtility.DoKnockback(self,-x,13000.); - break; - case 3: for ( int j=0; j<8; j++ ) { a = FRandom[Spreadgun](0,360); @@ -507,6 +430,32 @@ Class Spreadgun : SWWMWeapon } SWWMUtility.DoKnockback(self,-x,23000.); break; + case 3: + a = FRandom[Spreadgun](0,360); + s = FRandom[Spreadgun](0,.03); + dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); + let b = Spawn("TheBall",origin); + b.target = self; + b.angle = atan2(dir.y,dir.x); + b.pitch = asin(-dir.z); + b.vel = dir*b.speed; + for ( int i=0; i<8; i++ ) + { + let s = Spawn("SWWMSmoke",origin); + s.scale *= .6; + s.alpha *= .25; + s.SetShade(Color(1,1,1)*Random[Spreadgun](96,192)); + s.vel += vel*.5+x*FRandom[Spreadgun](3.,5.); + } + for ( int i=0; i<8; i++ ) + { + let s = Spawn("SWWMSpark",origin); + s.scale *= .2; + s.alpha *= .4; + s.vel += vel*.5+x*FRandom[Spreadgun](4.,8.)+y*FRandom[Spreadgun](-1,1)+z*FRandom[Spreadgun](-1,1); + } + SWWMUtility.DoKnockback(self,-x,9500.); + break; case 4: for ( int j=0; j<50; j++ ) { @@ -537,32 +486,6 @@ Class Spreadgun : SWWMWeapon SWWMUtility.DoKnockback(self,-x,15000.); break; case 5: - a = FRandom[Spreadgun](0,360); - s = FRandom[Spreadgun](0,.03); - dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); - let b = Spawn("TheBall",origin); - b.target = self; - b.angle = atan2(dir.y,dir.x); - b.pitch = asin(-dir.z); - b.vel = dir*b.speed; - for ( int i=0; i<8; i++ ) - { - let s = Spawn("SWWMSmoke",origin); - s.scale *= .6; - s.alpha *= .25; - s.SetShade(Color(1,1,1)*Random[Spreadgun](96,192)); - s.vel += vel*.5+x*FRandom[Spreadgun](3.,5.); - } - for ( int i=0; i<8; i++ ) - { - let s = Spawn("SWWMSpark",origin); - s.scale *= .2; - s.alpha *= .4; - s.vel += vel*.5+x*FRandom[Spreadgun](4.,8.)+y*FRandom[Spreadgun](-1,1)+z*FRandom[Spreadgun](-1,1); - } - SWWMUtility.DoKnockback(self,-x,9500.); - break; - case 6: a = FRandom[Spreadgun](0,360); s = FRandom[Spreadgun](0,.01); dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); @@ -703,7 +626,7 @@ Class Spreadgun : SWWMWeapon override void AttachToOwner( Actor other ) { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; if ( !initialized ) { initialized = true; @@ -711,7 +634,7 @@ Class Spreadgun : SWWMWeapon fired = false; chambered = true; } - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { Ammo a = Ammo(other.FindInventory(types[i])); if ( !a ) continue; @@ -725,9 +648,9 @@ Class Spreadgun : SWWMWeapon action void A_SwitchAmmoType( bool rev = false ) { - static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; int cur = 0, next = 0; - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { if ( invoker.nextammo != types[i] ) continue; cur = i; @@ -746,7 +669,7 @@ Class Spreadgun : SWWMWeapon if ( ridx == -1 ) { // check forwards instead, but avoid golden shells - for ( int i=0; i<6; i++ ) + for ( int i=0; i<5; i++ ) { if ( CountInv(types[i]) <= 0 ) continue; ridx = i; @@ -757,9 +680,9 @@ Class Spreadgun : SWWMWeapon } else { - for ( int i=0; i<7; i++ ) + for ( int i=0; i<6; i++ ) { - ridx = (i+cur+1)%7; + ridx = (i+cur+1)%6; if ( CountInv(types[ridx]) <= 0 ) continue; next = ridx; break; @@ -807,8 +730,6 @@ Class Spreadgun : SWWMWeapon MarkSound("spreadgun/redfire2"); MarkSound("spreadgun/greenfire1"); MarkSound("spreadgun/greenfire2"); - MarkSound("spreadgun/whitefire1"); - MarkSound("spreadgun/whitefire2"); MarkSound("spreadgun/bluefire1"); MarkSound("spreadgun/bluefire2"); MarkSound("spreadgun/blackfire1"); @@ -1002,12 +923,6 @@ Class Spreadgun : SWWMWeapon XZW4 MNOPQRSTUVWXYZ 1; XZW9 T 1; Goto Reload2; - UnloadWhiteFired: - XZW2 Z 2; - XZW5 ABCD 2; - XZW5 EFGHIJKLMNOPQR 1; - XZWB A 1; - Goto Reload2; UnloadBlueFired: XZW2 Z 2; XZW5 STUV 2; @@ -1048,13 +963,6 @@ Class Spreadgun : SWWMWeapon XZWL FGHIJKLMNOPQRS 1; XZWQ M 1; Goto Reload2; - UnloadWhite: - XZW2 A 2; - XZWL TUVW 2; - XZWL XYZ 1; - XZWM ABCDEFGHIJK 1; - XZWR T 1; - Goto Reload2; UnloadBlue: XZW2 A 2; XZWM LMNO 2; @@ -1111,10 +1019,6 @@ Class Spreadgun : SWWMWeapon XZW9 TUVWXYZ 1; XZWA ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; Goto Ready; - LoadWhiteFired: - XZWB ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; - XZWC ABCDEFG 1; - Goto Ready; LoadBlueFired: XZWC HIJKLMNOPQRSTUVWXYZ 1; XZWD ABCDEFGHIJKLMN 1; @@ -1140,10 +1044,6 @@ Class Spreadgun : SWWMWeapon XZWQ MNOPQRSTUVWXYZ 1; XZWR ABCDEFGHIJKLMNOPQRS 1; Goto Ready; - LoadWhite: - XZWR TUVWXYZ 1; - XZWS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; - Goto Ready; LoadBlue: XZWT ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; XZWU ABCDEFG 1; @@ -1247,16 +1147,6 @@ Class Spreadgun : SWWMWeapon l.target = self; } Stop; - FlashWhite: - XZW0 C 2 Bright - { - let l = Spawn("SWWMWeaponLight",pos); - l.args[1] = 176; - l.args[2] = 32; - l.args[3] = 160; - l.target = self; - } - Stop; FlashBlue: XZW0 D 2 Bright { diff --git a/zscript/weapons/swwm_shot_fx.zsc b/zscript/weapons/swwm_shot_fx.zsc index eec5cf9c3..31d912f88 100644 --- a/zscript/weapons/swwm_shot_fx.zsc +++ b/zscript/weapons/swwm_shot_fx.zsc @@ -13,7 +13,6 @@ Class RedShellCasing : SWWMCasing } } Class GreenShellCasing : RedShellCasing {} -Class WhiteShellCasing : RedShellCasing {} Class BlueShellCasing : RedShellCasing {} Class BlackShellCasing : RedShellCasing {} Class PurpleShellCasing : RedShellCasing {} @@ -117,184 +116,6 @@ Class SlugImpact : Actor } } -Class DragonBreathPuff : Actor -{ - Vector2 initsc; - - Default - { - RenderStyle "Add"; - Scale 0.5; - Alpha 0.35; - Radius .1; - Height 0; - +NOGRAVITY; - +NOBLOCKMAP; - +DONTSPLASH; - +NOINTERACTION; - +NOTELEPORT; - +ROLLSPRITE; - +ROLLCENTER; - +FORCEXYBILLBOARD; - } - override void PostBeginPlay() - { - scale *= FRandom[Spreadgun](.8,1.); - alpha *= FRandom[Spreadgun](.8,1.); - roll = FRandom[Spreadgun](0,360); - SetState(FindState("Spawn")+Random[Spreadgun](0,19)); - initsc = scale; - } - override void Tick() - { - if ( isFrozen() ) return; - A_FadeOut((waterlevel>0)?.1:.02); - scale += initsc*.2; - } - States - { - Spawn: - XFLM ABCDEFGHIJKLMNOPQRST -1 Bright; - Stop; - } -} - -Class DragonBreathArm : Actor -{ - Vector3 oldvel; - - Default - { - Obituary "$O_SPREADGUN_WHITE"; - DamageType 'Fire'; - PROJECTILE; - +THRUACTORS; - +BOUNCEONWALLS; - +BOUNCEONFLOORS; - +BOUNCEONCEILINGS; - +CANBOUNCEWATER; - +USEBOUNCESTATE; - +NODAMAGETHRUST; - +FORCERADIUSDMG; - -NOGRAVITY; - Gravity 0.15; - BounceFactor 1.0; - Radius 2; - Height 4; - } - override void PostBeginPlay() - { - Super.PostBeginPlay(); - reactiontime = Random[ExploS](18,24); - vel = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch))*FRandom[ExploS](16.,32.); - let l = Spawn("PaletteLight",pos); - l.Args[3] = int(60+60*(ReactionTime/20.)); - l.ReactionTime = ReactionTime+2; - l.target = self; - - } - override void Tick() - { - oldvel = vel; - Super.Tick(); - } - void A_HandleBounce() - { - Vector3 HitNormal = -vel.unit(); - F3DFloor ff; - if ( BlockingFloor ) - { - // find closest 3d floor for its normal - for ( int i=0; i= (BlockingMobj.pos.x+BlockingMobj.radius) ) - HitNormal = (1,0,0); - else if ( (pos.y+radius) <= (BlockingMobj.pos.y-BlockingMobj.radius) ) - HitNormal = (0,-1,0); - else if ( (pos.y-radius) >= (BlockingMobj.pos.y+BlockingMobj.radius) ) - HitNormal = (0,1,0); - else if ( pos.z >= (BlockingMobj.pos.z+BlockingMobj.height) ) - HitNormal = (0,0,1); - else if ( (pos.z+height) <= BlockingMobj.pos.z ) - HitNormal = (0,0,-1); - } - // undo the bounce, we need to hook in our own - vel = oldvel; - // re-do the bounce with our formula - vel = .8*((vel dot HitNormal)*HitNormal*(-1.8+FRandom[Spreadgun](.0,.6))+vel); - bHITOWNER = true; - } - States - { - Spawn: - TNT1 A 1 - { - if ( waterlevel > 0 ) ReactionTime -= 2; - let p = Spawn("DragonBreathPuff",pos); - p.alpha *= .6+.4*(ReactionTime/20.); - p.scale *= 3.5-2.5*(ReactionTime/20.); - SWWMUtility.DoExplosion(self,6+(reactiontime/2),1000+200*reactiontime,90+5*reactiontime,flags:DE_HOWL,ignoreme:bHITOWNER?null:target); - double spd = vel.length(); - vel = (vel*.4+(FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2))).unit()*spd; - Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5); - if ( !(ReactionTime%2) ) - { - let s = Spawn("SWWMHalfSmoke",pos); - s.vel = pvel+vel*.2; - s.SetShade(Color(1,1,1)*Random[ExploS](96,192)); - s.special1 = Random[ExploS](2,4); - s.scale *= 2.4; - s.alpha *= .1+.2*(ReactionTime/20.); - int numpt = Random[Spreadgun](-2,4); - for ( int i=0; igametic)&&((failtime-gametic)%16>=8); - if ( doublestacc ) - { - Screen.DrawTexture(AmmoBar[5],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawTexture(AmmoBar[5],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawTexture(AmmoBar[3+(clipcount<2)],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/10.):0.,DTA_ColorOverlay,(blinking&&(clipcount<=4))?Color(128,0,0,0):Color(0,0,0,0)); - if ( (iclip && (iclip.GetValue() > 120)) || (!iclip && (clipcount > 4)) ) - Screen.DrawTexture(AmmoBar[3+(clipcount<6)],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(((iclip.GetValue()/10.))-12.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); - } - else - { - Screen.DrawTexture(AmmoBar[2],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawTexture(AmmoBar[clipcount<2],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/5.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); - } - } - override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_splode.zsc b/zscript/weapons/swwm_splode.zsc index 90d9561af..da101eae6 100644 --- a/zscript/weapons/swwm_splode.zsc +++ b/zscript/weapons/swwm_splode.zsc @@ -8,19 +8,10 @@ Class ExplodiumGun : SWWMWeapon bool preinit; bool firstselect; double casex, casey; - transient ui TextureID WeaponBox; int deadeyecnt; Property ClipCount : ClipCount; - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/ExplodiumDisplay.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-24,by-22,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - override void HudTick() { if ( !Owner ) return; @@ -586,20 +577,9 @@ Class DualExplodiumGun : SWWMWeapon int clipcount; bool chambered; double casex, casey, lcasex, lcasey; - transient ui TextureID WeaponBox; Property ClipCount : ClipCount; - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/DualExplodiumDisplay.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-48,by-22,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - if ( ExplodiumGun(SisterWeapon).chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(ExplodiumGun(SisterWeapon).clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-46,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-43,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - override void RenderUnderlay( RenderEvent e ) { Super.RenderUnderlay(e); diff --git a/zscript/weapons/swwm_tastytreat.zsc b/zscript/weapons/swwm_tastytreat.zsc index 45c47a8d6..2c093939f 100644 --- a/zscript/weapons/swwm_tastytreat.zsc +++ b/zscript/weapons/swwm_tastytreat.zsc @@ -6,7 +6,6 @@ Class CandyGun : SWWMWeapon int clipcount; bool chambered; double casex, casey; - transient ui TextureID WeaponBox; bool tospecial; bool swapdrop; // used by weapon swapping so CreateTossable actually tosses the gun, rather than spares @@ -86,25 +85,6 @@ Class CandyGun : SWWMWeapon return gotstuff, gotspares; } - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( Amount <= 0 ) return; - if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/CandygunDisplay.png",TexMan.Type_Any); - Screen.DrawTexture(WeaponBox,false,bx-51,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - int cx = (Ammo1.Amount>9)?48:45; - int sb = Owner.CountInv("CandyGunBullets"); - if ( sb > 0 ) - { - int cbx = (sb>9)?50:47; - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-20,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-13,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-17,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-37,by-39,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - } - override Vector3 GetTraceOffset() { return (10.,3,-2.); diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index d757656d5..2082518bf 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -224,7 +224,6 @@ Class SilverBullet : SWWMWeapon double casex, casey; int nkills; - transient ui TextureID WeaponBox[2], ZoomBar, BulletIcon[2], AmmoIcon[2]; transient ui DynamicValueInterpolator ZoomInter; bool zoomed; @@ -245,47 +244,6 @@ Class SilverBullet : SWWMWeapon return Super.GetObituary(victim,inflictor,mod,playerattack); } - override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) - { - if ( !WeaponBox[0] ) WeaponBox[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletDisplay.png",TexMan.Type_Any); - if ( !WeaponBox[1] ) WeaponBox[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomDisplay.png",TexMan.Type_Any); - if ( !BulletIcon[0] ) BulletIcon[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSB.png",TexMan.Type_Any); - if ( !BulletIcon[1] ) BulletIcon[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCB.png",TexMan.Type_Any); - if ( !AmmoIcon[0] ) AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSBMag.png",TexMan.Type_Any); - if ( !AmmoIcon[1] ) AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCBMag.png",TexMan.Type_Any); - if ( !ZoomBar ) ZoomBar = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomBar.png",TexMan.Type_Any); - int zl = clamp(ZoomInter?ZoomInter.GetValue():int(zoomlevel*10),0,160); - if ( zl >= 10 ) - { - Screen.DrawTexture(WeaponBox[1],false,bx-35,by-56,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - double zw = zl*31./160.; - Screen.DrawTexture(ZoomBar,false,bx-33,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,zw); - } - Screen.DrawTexture(WeaponBox[0],false,bx-55,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - if ( chambered ) Screen.DrawTexture(BulletIcon[fcbchambered],false,bx-53,by-30,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fired?Color(128,0,0,0):Color(0,0,0,0)); - for ( int i=0; i9)?32:29; - int sb = Owner.CountInv("SilverBullets"); - if ( sb > 0 ) - { - int cbx = (sb>9)?34:30; - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-20,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-13,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); - } - else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-15,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); - cx = (Ammo2.Amount>9)?32:29; - sb = Owner.CountInv("SilverBullets2"); - if ( sb > 0 ) - { - int cbx = (sb>9)?34:30; - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-42,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); - Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-35,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); - } - else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-39,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); - } override void HudTick() { Super.HudTick(); diff --git a/zscript/weapons/swwm_weapons_hud.zsc b/zscript/weapons/swwm_weapons_hud.zsc new file mode 100644 index 000000000..80cb901f5 --- /dev/null +++ b/zscript/weapons/swwm_weapons_hud.zsc @@ -0,0 +1,439 @@ +// DrawWeapon code for all weapons + +// Deep Impact +extend Class DeepImpact +{ + ui TextureID WeaponBox, AmmoBar; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/DeepImpactDisplay.png",TexMan.Type_Any); + if ( !AmmoBar ) AmmoBar = TexMan.CheckForTexture("graphics/HUD/DeepImpactBar.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-36,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int chg = clamp(ChargeInter?ChargeInter.GetValue():clipcount,0,100); + int ct = int(((by-2)-(chg*50./100.))*hs); + bool blinking = (failtime>gametic)&&((failtime-gametic)%8>=4); + Screen.DrawTexture(AmmoBar,false,bx-7,by-52,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ClipTop,ct,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-35,by-12,String.Format("%3d%%",chg),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); + } +} + +// Pusher +extend Class PusherWeapon +{ + ui TextureID WeaponBox, ChargeBar; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/PusherDisplay.png",TexMan.Type_Any); + if ( !ChargeBar ) ChargeBar = TexMan.CheckForTexture("graphics/HUD/PusherBar.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-60,by-9,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*100),0,100); + double cw = chg*56./100.; + Screen.DrawTexture(ChargeBar,false,bx-58,by-7,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,cw); + } +} + +// Explodium Gun +extend Class ExplodiumGun +{ + ui TextureID WeaponBox; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/ExplodiumDisplay.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-24,by-22,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } +} +extend Class DualExplodiumGun +{ + ui TextureID WeaponBox; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/DualExplodiumDisplay.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-48,by-22,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( ExplodiumGun(SisterWeapon).chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(ExplodiumGun(SisterWeapon).clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-46,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-43,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } +} + +// Spreadgun +extend Class Spreadgun +{ + ui TextureID WeaponBox, AmmoIcon[6], LoadedIcon[6]; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"}; + if ( !WeaponBox ) + { + WeaponBox = TexMan.CheckForTexture("graphics/HUD/SpreadgunDisplay.png",TexMan.Type_Any); + AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/RedShell.png",TexMan.Type_Any); + AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/GreenShell.png",TexMan.Type_Any); + AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/BlueShell.png",TexMan.Type_Any); + AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/PurpleShell.png",TexMan.Type_Any); + AmmoIcon[4] = TexMan.CheckForTexture("graphics/HUD/BlackShell.png",TexMan.Type_Any); + AmmoIcon[5] = TexMan.CheckForTexture("graphics/HUD/GoldShell.png",TexMan.Type_Any); + LoadedIcon[0] = TexMan.CheckForTexture("graphics/HUD/LoadedRedShell.png",TexMan.Type_Any); + LoadedIcon[1] = TexMan.CheckForTexture("graphics/HUD/LoadedGreenShell.png",TexMan.Type_Any); + LoadedIcon[2] = TexMan.CheckForTexture("graphics/HUD/LoadedBlueShell.png",TexMan.Type_Any); + LoadedIcon[3] = TexMan.CheckForTexture("graphics/HUD/LoadedPurpleShell.png",TexMan.Type_Any); + LoadedIcon[4] = TexMan.CheckForTexture("graphics/HUD/LoadedBlackShell.png",TexMan.Type_Any); + LoadedIcon[5] = TexMan.CheckForTexture("graphics/HUD/LoadedGoldShell.png",TexMan.Type_Any); + } + Screen.DrawTexture(WeaponBox,false,bx-46,by-63,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int ox = 6; + int oy = 11; + for ( int i=0; i<6; i++ ) + { + Screen.DrawTexture(AmmoIcon[i],false,bx-ox,by-oy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); + String astr = String.Format("%3d",Owner.CountInv(types[i])); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-ox-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-oy-1,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); + oy += 10; + } + if ( !chambered ) return; + for ( int i=0; i<6; i++ ) + { + if ( loadammo != types[i] ) continue; + Screen.DrawTexture(LoadedIcon[i],false,bx-44,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fired?Color(128,0,0,0):Color(0,0,0,0)); + break; + } + } +} + +// Wallbuster (oh good lord why) +extend Class Wallbuster +{ + ui TextureID WeaponBox, AmmoIcon[4], LoadIcon[4], UsedIcon[4], EmptyIcon; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + static const Class types[] = {"RedShell","GreenShell","BlueShell","PurpleShell"}; + /* + (Layout of indices) + + 0 + 4 1 + 3 2 + L 9 + K M 8 5 + O N 7 6 + + H D + G I C E + F J B A + + */ + static const int barrelposx[] = + { + 29,24,26,32,34, + 10,12,18,20,15, + 17,23,25,20,15, + 41,43,38,33,35, + 48,43,38,40,46 + }; + static const int barrelposy[] = + { + 46,42,36,36,42, + 31,25,25,31,35, + 8, 8,14,18,14, + 8,14,18,14, 8, + 31,35,31,25,25 + }; + if ( !WeaponBox ) + { + WeaponBox = TexMan.CheckForTexture("graphics/HUD/WallbusterDisplay.png",TexMan.Type_Any); + AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/RedShell.png",TexMan.Type_Any); + AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/GreenShell.png",TexMan.Type_Any); + AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/BlueShell.png",TexMan.Type_Any); + AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/PurpleShell.png",TexMan.Type_Any); + LoadIcon[0] = TexMan.CheckForTexture("graphics/HUD/WallbusterRed.png",TexMan.Type_Any); + LoadIcon[1] = TexMan.CheckForTexture("graphics/HUD/WallbusterGreen.png",TexMan.Type_Any); + LoadIcon[2] = TexMan.CheckForTexture("graphics/HUD/WallbusterBlue.png",TexMan.Type_Any); + LoadIcon[3] = TexMan.CheckForTexture("graphics/HUD/WallbusterPurple.png",TexMan.Type_Any); + UsedIcon[0] = TexMan.CheckForTexture("graphics/HUD/WallbusterRedUsed.png",TexMan.Type_Any); + UsedIcon[1] = TexMan.CheckForTexture("graphics/HUD/WallbusterGreenUsed.png",TexMan.Type_Any); + UsedIcon[2] = TexMan.CheckForTexture("graphics/HUD/WallbusterBlueUsed.png",TexMan.Type_Any); + UsedIcon[3] = TexMan.CheckForTexture("graphics/HUD/WallbusterPurpleUsed.png",TexMan.Type_Any); + EmptyIcon = TexMan.CheckForTexture("graphics/HUD/WallbusterEmpty.png",TexMan.Type_Any); + } + Screen.DrawTexture(WeaponBox,false,bx-54,by-72,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int ox = 6; + int oy = 60; + for ( int i=0; i<4; i++ ) + { + Screen.DrawTexture(AmmoIcon[i],false,bx-ox,by-oy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + String astr = String.Format("%3d",Owner.CountInv(types[i])); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-ox-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-oy-1,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + oy += 10; + if ( i == 1 ) + { + oy = 60; + ox = 33; + } + } + // and here's the big clusterdick + for ( int i=0; i<25; i++ ) + { + int idx = i; + int group = idx/5; + // shift based on group rotation + int gidx = i%5; + gidx = (gidx-rotation[group]); + while ( gidx < 0 ) gidx += 5; + idx = gidx+group*5; + // shift based on full rotation + idx = (idx-rotation[5]*5); + while ( idx < 0 ) idx += 25; + if ( !loaded[i] ) + { + Screen.DrawTexture(EmptyIcon,false,bx-barrelposx[idx],by-barrelposy[idx],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + continue; + } + int which = 0; + for ( int j=0; j<4; j++ ) + { + if ( !(loaded[i] is types[j]) ) continue; + which = j; + break; + } + Screen.DrawTexture(fired[i]?UsedIcon[which]:LoadIcon[which],false,bx-barrelposx[idx],by-barrelposy[idx],DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } + } +} + +// Eviscerator +extend Class Eviscerator +{ + ui TextureID WeaponBox, AmmoIcon; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/EvisceratorDisplay.png",TexMan.Type_Any); + if ( !AmmoIcon ) AmmoIcon = TexMan.CheckForTexture("graphics/HUD/EvisceratorShell.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-46,by-16,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + String astr = String.Format("%d",Ammo1.Amount); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-14-(SWWMStatusBar(StatusBar).mSmallFont.StringWidth(astr)+1),by-14,astr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawTexture(AmmoIcon,false,bx-14,by-14,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,chambered?Color(0,0,0,0):Color(128,0,0,0)); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_WHITE,bx-44,by-14,extended?"►":"",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } +} + +// Hellblazer +extend Class Hellblazer +{ + ui TextureID WeaponBox, AmmoIcon[4], LoadedIcon[4]; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; + if ( !WeaponBox ) + { + WeaponBox = TexMan.CheckForTexture("graphics/HUD/HellblazerDisplay.png",TexMan.Type_Any); + AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/HellblazerMissile.png",TexMan.Type_Any); + AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/HellblazerCrackshot.png",TexMan.Type_Any); + AmmoIcon[2] = TexMan.CheckForTexture("graphics/HUD/HellblazerRavager.png",TexMan.Type_Any); + AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/HellblazerWarhead.png",TexMan.Type_Any); + LoadedIcon[0] = TexMan.CheckForTexture("graphics/HUD/HellblazerMissileLoaded.png",TexMan.Type_Any); + LoadedIcon[1] = TexMan.CheckForTexture("graphics/HUD/HellblazerCrackshotLoaded.png",TexMan.Type_Any); + LoadedIcon[2] = TexMan.CheckForTexture("graphics/HUD/HellblazerRavagerLoaded.png",TexMan.Type_Any); + LoadedIcon[3] = TexMan.CheckForTexture("graphics/HUD/HellblazerWarheadLoaded.png",TexMan.Type_Any); + } + double xx = -56, yy = -49; + Screen.DrawTexture(WeaponBox,false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int curtype = 0; + for ( int i=0; i<4; i++ ) + { + if ( loadammo != types[i] ) continue; + curtype = i; + break; + } + xx += 2; + yy += 2; + for ( int i=0; i<4; i++ ) + { + int amt = Owner.CountInv(types[i]); + String amtstr = String.Format("%3d",amt); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx+xx,by+yy,amtstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); + Screen.DrawTexture(AmmoIcon[i],false,bx+xx+19,by+yy+1,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(types[i]==nextammo)?Color(0,0,0,0):Color(128,0,0,0)); + yy += 13; + if ( i%2 ) + { + yy -= 26; + xx += 28; + } + } + yy = -18; + switch ( curtype ) + { + case 0: + xx = -54; + for ( int i=0; i<6; i++ ) + { + Screen.DrawTexture(LoadedIcon[0],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + xx += 9; + } + break; + case 1: + xx = -49; + for ( int i=0; i<3; i++ ) + { + Screen.DrawTexture(LoadedIcon[1],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + xx += 18; + } + break; + case 2: + xx = -49; + for ( int i=0; i<3; i++ ) + { + Screen.DrawTexture(LoadedIcon[2],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + xx += 18; + } + break; + case 3: + xx = -45; + for ( int i=0; i<2; i++ ) + { + Screen.DrawTexture(LoadedIcon[3],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + xx += 27; + } + break; + } + } +} + +// Biospark Carbine +extend Class Sparkster +{ + ui TextureID WeaponBox, AmmoBar[6]; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) + { + WeaponBox = TexMan.CheckForTexture("graphics/HUD/BiosparkDisplay.png",TexMan.Type_Any); + AmmoBar[0] = TexMan.CheckForTexture("graphics/HUD/BiosparkBar.png",TexMan.Type_Any); + AmmoBar[1] = TexMan.CheckForTexture("graphics/HUD/BiosparkBarRed.png",TexMan.Type_Any); + AmmoBar[2] = TexMan.CheckForTexture("graphics/HUD/BiosparkBarGray.png",TexMan.Type_Any); + AmmoBar[3] = TexMan.CheckForTexture("graphics/HUD/BiosparkBarSlim.png",TexMan.Type_Any); + AmmoBar[4] = TexMan.CheckForTexture("graphics/HUD/BiosparkBarSlimRed.png",TexMan.Type_Any); + AmmoBar[5] = TexMan.CheckForTexture("graphics/HUD/BiosparkBarSlimGray.png",TexMan.Type_Any); + } + Screen.DrawTexture(WeaponBox,false,bx-28,by-28,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-26,by-25,String.Format("%2d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( nomag ) return; + bool blinking = (failtime>gametic)&&((failtime-gametic)%16>=8); + if ( doublestacc ) + { + Screen.DrawTexture(AmmoBar[5],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawTexture(AmmoBar[5],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawTexture(AmmoBar[3+(clipcount<2)],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/10.):0.,DTA_ColorOverlay,(blinking&&(clipcount<=4))?Color(128,0,0,0):Color(0,0,0,0)); + if ( (iclip && (iclip.GetValue() > 120)) || (!iclip && (clipcount > 4)) ) + Screen.DrawTexture(AmmoBar[3+(clipcount<6)],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(((iclip.GetValue()/10.))-12.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); + } + else + { + Screen.DrawTexture(AmmoBar[2],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawTexture(AmmoBar[clipcount<2],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/5.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0)); + } + } +} + +// Silver Bullet JET +extend Class SilverBullet +{ + ui TextureID WeaponBox[2], ZoomBar, BulletIcon[2], AmmoIcon[2]; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox[0] ) WeaponBox[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletDisplay.png",TexMan.Type_Any); + if ( !WeaponBox[1] ) WeaponBox[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomDisplay.png",TexMan.Type_Any); + if ( !BulletIcon[0] ) BulletIcon[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSB.png",TexMan.Type_Any); + if ( !BulletIcon[1] ) BulletIcon[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCB.png",TexMan.Type_Any); + if ( !AmmoIcon[0] ) AmmoIcon[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSBMag.png",TexMan.Type_Any); + if ( !AmmoIcon[1] ) AmmoIcon[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCBMag.png",TexMan.Type_Any); + if ( !ZoomBar ) ZoomBar = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomBar.png",TexMan.Type_Any); + int zl = clamp(ZoomInter?ZoomInter.GetValue():int(zoomlevel*10),0,160); + if ( zl >= 10 ) + { + Screen.DrawTexture(WeaponBox[1],false,bx-35,by-56,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + double zw = zl*31./160.; + Screen.DrawTexture(ZoomBar,false,bx-33,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,zw); + } + Screen.DrawTexture(WeaponBox[0],false,bx-55,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( chambered ) Screen.DrawTexture(BulletIcon[fcbchambered],false,bx-53,by-30,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fired?Color(128,0,0,0):Color(0,0,0,0)); + for ( int i=0; i9)?32:29; + int sb = Owner.CountInv("SilverBullets"); + if ( sb > 0 ) + { + int cbx = (sb>9)?34:30; + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-20,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-13,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); + } + else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-15,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(128,0,0,0):Color(0,0,0,0)); + cx = (Ammo2.Amount>9)?32:29; + sb = Owner.CountInv("SilverBullets2"); + if ( sb > 0 ) + { + int cbx = (sb>9)?34:30; + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-42,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-35,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); + } + else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-39,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,fcbselected?Color(0,0,0,0):Color(128,0,0,0)); + } +} + +// Candy Gun +extend Class CandyGun +{ + ui TextureID WeaponBox; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( Amount <= 0 ) return; + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/CandygunDisplay.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-51,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( chambered ) Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-22,by-20,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-19,by-13,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int cx = (Ammo1.Amount>9)?48:45; + int sb = Owner.CountInv("CandyGunBullets"); + if ( sb > 0 ) + { + int cbx = (sb>9)?50:47; + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cbx,by-20,String.Format("⁺%s",SWWMUtility.SuperscriptNum(sb)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-13,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } + else Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-cx,by-17,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-37,by-39,String.Format("%d",Ammo2.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + } +} + +// Ynykron +extend Class Ynykron +{ + ui TextureID WeaponBox, ChargeBar[2], BoxSide[2]; + + override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss ) + { + if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/YnykronDisplay.png",TexMan.Type_Any); + if ( !ChargeBar[0] ) ChargeBar[0] = TexMan.CheckForTexture("graphics/HUD/YnykronBarA.png",TexMan.Type_Any); + if ( !ChargeBar[1] ) ChargeBar[1] = TexMan.CheckForTexture("graphics/HUD/YnykronBarB.png",TexMan.Type_Any); + if ( !BoxSide[0] ) BoxSide[0] = TexMan.CheckForTexture("graphics/HUD/YnykronSideA.png",TexMan.Type_Any); + if ( !BoxSide[1] ) BoxSide[1] = TexMan.CheckForTexture("graphics/HUD/YnykronSideB.png",TexMan.Type_Any); + Screen.DrawTexture(WeaponBox,false,bx-33,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*10),0,400); + int ct = int(((by-2)-chg/10.)*hs); + Screen.DrawText(SWWMStatusBar(StatusBar).mSmallFont,Font.CR_FIRE,bx-30,by-15,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawTexture(BoxSide[inverted],false,bx-23,by-31,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,clipcount?Color(0,0,0,0):Color(128,0,0,0)); + Screen.DrawTexture(ChargeBar[inverted],false,bx-6,by-42,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(chargestate==CS_READY)?Color(int(clamp(sin((level.maptime+TicFrac)*8)*40+24,0.,64.)),255,255,255):Color(0,0,0,0),DTA_ClipTop,ct); + } +}