Several changes from devel once more:

- Fuck it, Quadravol will be lever action.
 - Tiny cleanup.
 - Rewrite the weapon replacement system (less of a mess now maybe?).
 - Some menu fixes.
 - Minimap zoom increments like in the Common Library.
 - Add missing sound definition for Safety Tether.
   (This mostly went unnoticed because it's VERY rare to have it play)
 - Shift Sparkster x3 (DLC2) to slot 7.
   This way you can have both it and the Quadravol simultaneously.
   It would be unfair to not let you hold both "iconic" UnSX weapons at once.
 - Small lore tweak on Quadravol stance swap.
 - Fix off-by-one bug in looping palette lights.
 - Re-do logo shader. Use separate layer textures.
 - Fix Elemental Coating breaking "End Level" damage sectors.
(This will be the last batch of changes before I continue working on menus)
This commit is contained in:
Mari the Deer 2021-12-08 18:14:18 +01:00
commit 4d7019ae86
41 changed files with 287 additions and 186 deletions

View file

@ -43,7 +43,7 @@ A couple extra weapons, not enough for a full batch, but still worthy additions.
* **DLC Weaponset 2:**
- [1] Hand of Divine *(Total Madness)*
- Facepunching Extraordinaire *(Kill 300 enemies with the Hand of Divine)*
- [6] Sparkster x3 *(UnSX 2)*
- [7] Sparkster x3 *(UnSX 2)*
- A Fine Sparking *(Kill 30 enemies at once with a Sparkster Rifle combo shot)*
- [9] Mortal Rifle *(UnSX 2)*
- Railed Hard *(Shoot through 16 enemies with a single Mortal Rifle overpressure shot)*

View file

@ -40,14 +40,25 @@ HardwareShader Texture "graphics/tempbg.png"
HardwareShader Texture "graphics/SWWMGZLogo.png"
{
Shader "shaders/glsl/LogoAnimated.fp"
Define "TEX_SZ" = "vec2(2048.,1024.)"
Texture "LogoTex" "graphics/SWWMGZLogo_Layers.png"
// what no 2d arrays does to a mf
Texture "Layer1" "graphics/SWWMGZLogo_Layer1.png"
Texture "Layer2" "graphics/SWWMGZLogo_Layer2.png"
Texture "Layer3" "graphics/SWWMGZLogo_Layer3.png"
Texture "Layer4" "graphics/SWWMGZLogo_Layer4.png"
Texture "Layer5" "graphics/SWWMGZLogo_Layer5.png"
Texture "Layer6" "graphics/SWWMGZLogo_Layer6.png"
}
HardwareShader Texture "graphics/M_SWWM.png"
{
Shader "shaders/glsl/LogoAnimated.fp"
Define "TEX_SZ" = "vec2(256.,128.)"
Texture "LogoTex" "graphics/M_SWWM_Layers.png"
// what no 2d arrays does to a mf
Texture "Layer1" "graphics/M_SWWM_Layer1.png"
Texture "Layer2" "graphics/M_SWWM_Layer2.png"
Texture "Layer3" "graphics/M_SWWM_Layer3.png"
Texture "Layer4" "graphics/M_SWWM_Layer4.png"
Texture "Layer5" "graphics/M_SWWM_Layer5.png"
Texture "Layer6" "graphics/M_SWWM_Layer6.png"
Define "NO_BILINEAR"
}
HardwareShader Sprite "MBRNB0"
{

BIN
graphics/M_SWWM_Layer1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
graphics/M_SWWM_Layer2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
graphics/M_SWWM_Layer3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
graphics/M_SWWM_Layer4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
graphics/M_SWWM_Layer5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
graphics/M_SWWM_Layer6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 MiB

View file

@ -809,9 +809,9 @@ TT_SHEENHMG =
TT_QUADRAVOL =
"\cfFire:\c- Shoot weapon.\n"
"\cfAltfire:\c- Pump weapon.\n"
"\cfZoom:\c- Toggle spread mode.\n"
"\cfReload:\c- Load cells.\n"
"\cfFire+Altfire:\c- Hold to slamfire.";
"\cfZoom+Fire:\c- Toggle spread mode.\n"
"\cfZoom+Altfire:\c- Switch firing stance.";
TT_BLACKFIRE =
"\cfFire:\c- Freeze thrower.\n"
"\cfAltfire:\c- Icicle shot.\n"

View file

@ -1541,7 +1541,7 @@ SWWM_LORETXT_HEAVYMAHSHEENGUN =
"\n"
"How much bullet is too much bullet? The answer, according to \cfCyrus Enterprises\c-, is \"never enough\". The \cfSheen Heavy Machinegun\c- is a monstrosity in all aspects when it comes to delivering lead. Steadily feeding directly off \cfHammerspace™\c-, this puppy can be carried anywhere without the need to bring along hefty ammo boxes, ready to rain death upon anything on demand. Additionally, powered by \cfTach-Engine\c-'s \"Magdalene\" Microfusion battery, the weapon can stay in operation for several days without needing to recharge.\n"
"\n"
"The ammunition employed by this weapon are AP rounds of 14.5x114mm caliber. Unlike the standard heavy ordnance rounds used within the Soviet Union, these are far more potent, employing an alloy of both mundane and exotic elements known as Meta-Tellubrium, generally used for fusion reactor parts due to its outstanding resilience to both extreme pressure and heat. As reported following the \cfGhoul Hunt\c- of 2007, this ammunition is quite effective in tearing through demon flesh as if it were jelly.\n"
"The ammunition employed by this weapon are AP rounds of 14.5x114mm caliber. Unlike the standard heavy ordnance rounds used within the Soviet Union, these are far more potent, employing an alloy of both mundane and exotic elements known as Meta-Telebrium, generally used for fusion reactor parts due to its outstanding resilience to both extreme pressure and heat. As reported following the \cfGhoul Hunt\c- of 2007, this ammunition is quite effective in tearing through demon flesh as if it were jelly.\n"
"\n"
"While generally meant for mounted use, on-the-go operation is possible, provided the user is equipped with silver-rated power armor at minimum in order to handle its heavy recoil.\n"
"\n"
@ -2896,11 +2896,11 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact.\n"
"\n"
"\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary fire engages slamfire, allowing you to shoot rapid low-charge bursts.\n"
"\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses.\n"
"\n"
"\cfTertiary Fire:\c- Toggles a scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets.\n"
"\cfTertiary Fire:\c- Hold and tap primary fire to toggle scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets. Hold and tap secondary fire to switch weapon stances between two-handed and one-handed. This serves no real purpose other than looking cooler when pumping, your accuracy with the weapon is unaffected but you won't shoot it as quickly.\n"
"\n"
"\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately ejected once it's been emptied into the weapon's internal \"crucible\", so you can hold additional ammo while keeping your charge.\n"
"\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately emptied into the weapon's internal \"crucible\", so you can keep loading additional ammo while boosting your charge.\n"
"\n"
"\cfTechniques:\c- The weapon has a certain \"extra effective\" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.\n"
"\n"
@ -2909,7 +2909,9 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfAnd of course it's huge af too, even if the grip is supposedly adapted. It honestly weirds me out how you can do that thing of... making your hands bigger, but at least it lets you use stuff like that easily.\c-\n"
"\n"
"\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-";
"\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-\n"
"\n"
"\cfBy the way, leverguns make me wild out. You know it, we all know it, they're just SO GOOD.\c-";
SWWM_LORETAG_RAFANKOS = "Rafan-Kos";
SWWM_LORETAB_RAFANKOS = "Item";
SWWM_LOREREL_RAFANKOS = "Nekuratek;Saya";
@ -2927,11 +2929,11 @@ SWWM_LORETXT_RAFANKOS =
"\n"
"The weapon employs \cfKabbadon\c- as fuel, a common byproduct of \cfNokorokinylum\c- fusion, thus making it fairly easy to produce. However, the density and degree of purity required in the creation of a single fuel pod make its price escalate dramatically.\n"
"\n"
"\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for a total of five seconds before rapidly dissipating.\n"
"\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for up to five seconds before rapidly dissipating.\n"
"\n"
"\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating much rapidly.\n"
"\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating more rapidly.\n"
"\n"
"\cfReload:\c- Loads in a new magazine, each holding four pods.\n"
"\cfReload:\c- Loads in a new magazine, each holding four pods. The currently loaded pod must be fully discharged before a new one can be chambered in.\n"
"\n"
"\cxSaya's Notes:\c-\n"
"\cf\"Ultimate Weapon\"? Talk about pretentious... But you know, something about this was making my brains itch, and then it clicked. This is basically like that one spellcard, the Master Spark. Hell, it almost even sounds and looks the same...\c-\n"

View file

@ -371,7 +371,7 @@ TOOLTIP_EVENT_SWWMRESETCVARS = "Resets all the mod's settings to their original
TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress.";
TOOLTIP_SWWM_NOINTERTIPS = "Hides intermission tips, in case you don't want to see them.";
TOOLTIP_SWWM_DEMOSLAYER = "Killed enemies may drop health and armor orbs.";
TOOLTIP_SWWM_NETEVENT_SWWMCLEAREFFECTS = "Fades out any active blood, gore, debris and casings.";
TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Fades out any active blood, gore, debris and casings.";
TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap.";
TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements.";
TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter.";

View file

@ -699,9 +699,9 @@ TT_SHEENHMG =
TT_QUADRAVOL =
"\cfPrimario:\c- Disparar arma.\n"
"\cfSecundario:\c- Bombear arma.\n"
"\cfZoom:\c- Alternar modo disperso.\n"
"\cfRecarga:\c- Cargar células.\n"
"\cfPrimario+Secundario:\c- Mantener para disparo rápido.";
"\cfZoom+Primario:\c- Alternar modo disperso.\n"
"\cfZoom+Secundario:\c- Cambiar postura de arma.";
TT_BLACKFIRE =
"\cfPrimario:\c- Lanzafrío.\n"
"\cfSecundario:\c- Disparo de carámbano.\n"

View file

@ -1426,7 +1426,7 @@ SWWM_LORETXT_HEAVYMAHSHEENGUN =
"\n"
"¿Cuanta bala es demasiada bala? La respuesta, según \cfCyrus Enterprises\c-, es \"nunca suficiente\". La \cfAmetralladora Pesada Sheen\c- es una monstruosidad en todos los aspectos en lo referente a repartir plomo. Alimentada directamente desde \cfHammerspace™\c-, esta preciosidad se puede llevar a cualquier lado sin la necesidad de llevar encima pesadas cajas de munición, lista para diluviar muerte sobre cualquier cosa cuando se desee. Adicionalmente, teniendo la batería de Microfusión \"Magdalene\" de \cfTach-Engine\c-, el arma puede permanecer operativa durante días sin necesidad de recargarla.\n"
"\n"
"La munición empleada por este arma son balas anti-armadura del calibre 14.5x114mm. A diferencia de la munición estándar para armería pesada empleada en la Unión Soviética, esta es mucho más potente, empleando una aleación de elementos tanto mundanos como exóticos conocida como Meta-Tellubrium, generalmente usada para piezas de reactores de fusión dada su excepcional resistencia tanto a presión como calor extremos. Tal y como fue reportado tras la \cfCaza de Ghouls\c- de 2007, esta munición es bastante efectiva atravesando carne demoníaca como si fuese gelatina.\n"
"La munición empleada por este arma son balas anti-armadura del calibre 14.5x114mm. A diferencia de la munición estándar para armería pesada empleada en la Unión Soviética, esta es mucho más potente, empleando una aleación de elementos tanto mundanos como exóticos conocida como Meta-Telebrium, generalmente usada para piezas de reactores de fusión dada su excepcional resistencia tanto a presión como calor extremos. Tal y como fue reportado tras la \cfCaza de Ghouls\c- de 2007, esta munición es bastante efectiva atravesando carne demoníaca como si fuese gelatina.\n"
"\n"
"Aunque generalmente ideada para el uso montado, la operación al paso es posible, siempre y cuando el usuario tenga una servoarmadura de grado plata como mínimo para manejar el potente retroceso.\n"
"\n"
@ -2668,11 +2668,11 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar.\n"
"\n"
"\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario realizará disparos en cadena rápidos de baja potencia.\n"
"\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos.\n"
"\n"
"\cfFuego Terciario:\c- Alterna el fuego primario a un modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.\n"
"\cfFuego Terciario:\c- Mantén y pulsa fuego primario para alternar el modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos. Mantén y pulsa fuego secundario para alternar la postura de arma entre dos manos y una mano. Esto solo sirve para ser más vistoso al bombear, y no altera tu puntería pero si hace los disparos más lentos.\n"
"\n"
"\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es expulsada inmediatamente tras ser vaciada en el \"crisol\" interno del arma, así que puedes almacenar munición adicional mientras mantienes la carga.\n"
"\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es vaciada immediatemente en el \"crisol\" interno del arma, así que puedes cargar munición adicional mientras incrementas la carga.\n"
"\n"
"\cfTécnicas:\c- El arma tiene un cierto movimiento especial \"extra efectivo\" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.\n"
"\n"
@ -2681,7 +2681,9 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfY por supuesto es jodidamente enorme, también, aunque la empuñadura está supuestamente adaptada. En serio que se me hace rarísimo como puedes hacer eso de... agrandar las manos, pero al menos te permite usar cosas así fácilmente.\c-\n"
"\n"
"\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-";
"\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-\n"
"\n"
"\cfPor cierto, las armas de palanca me ponen a tope. Tú lo sabes, todos lo sabemos, es que son BUENÍSIMAS.\c-";
SWWM_LORETXT_RAFANKOS =
"\cxDesignación:\c-\n"
"\cf Rafan-Kos (\"Arma Definitiva\")\c-\n"
@ -2696,11 +2698,11 @@ SWWM_LORETXT_RAFANKOS =
"\n"
"El arma emplea \cfKabbadon\c- como combustible, un subproducto común de la fusión de \cfNokorokinylum\c-, haciéndolo así fácil de fabricar. Sin embargo, dada la densidad y pureza requeridas en la creación de una sola cápsula de combustible hacen que su precio escale dramáticamente.\n"
"\n"
"\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un total de cinco segundos antes de disiparse rápidamente.\n"
"\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un máximo de cinco segundos antes de disiparse rápidamente.\n"
"\n"
"\cfFuego Secundario:\c- Libera varios estallidos dispersos en un cono amplio, con un potencial destructivo similar, pero ardiendo más rápido, con mayor intensidad, y disipándose mucho antes.\n"
"\n"
"\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas.\n"
"\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas. La cápsula cargada debe gastarse completamente antes de poder insertar una nueva en la recámara.\n"
"\n"
"\cxNotas de Saya:\c-\n"
"\cf¿\"Arma Definitiva\"? Menuda cursilada... Pero sabes, algo de todo esto hacía que me picotearan los sesos, y entonces todo encajó. Esta cosa es básicamente como esa carta de hechizo, la Chispa Maestra. Hostia, es que hasta suena y pinta igual...\c-\n"

View file

@ -370,7 +370,7 @@ TOOLTIP_EVENT_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores
TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros.";
TOOLTIP_SWWM_NOINTERTIPS = "Oculta los consejos de intermisión, por si no quieres verlos.";
TOOLTIP_SWWM_DEMOSLAYER = "Los enemigos que mates soltarán orbes de salud y armadura.";
TOOLTIP_SWWM_NETEVENT_SWWMCLEAREFFECTS = "Desvanece cualquier sangre, vísceras, escombros y casquillos activos.";
TOOLTIP_NETEVENT_SWWMCLEAREFFECTS = "Desvanece cualquier sangre, vísceras, escombros y casquillos activos.";
TOOLTIP_SWWMMINIMAPMENU = "Configura el minimapa.";
TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros.";
TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación.";

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.43 r1 \cu(Tue 30 Nov 19:05:06 CET 2021)\c-";
SWWM_SHORTVER="\cw1.1.43 r1 \cu(2021-11-30 19:05:06)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.44 \cu(Wed 8 Dec 18:17:41 CET 2021)\c-";
SWWM_SHORTVER="\cw1.1.44 \cu(2021-12-08 18:17:41)\c-";

View file

@ -14,7 +14,7 @@ TXT
How much bullet is too much bullet? The answer, according to **Cyrus Enterprises**, is "never enough". The **Sheen Heavy Machinegun** is a monstrosity in all aspects when it comes to delivering lead. Steadily feeding directly off **Hammerspace™**, this puppy can be carried anywhere without the need to bring along hefty ammo boxes, ready to rain death upon anything on demand. Additionally, powered by **Tach-Engine**'s "Magdalene" Microfusion battery, the weapon can stay in operation for several days without needing to recharge.
The ammunition employed by this weapon are AP rounds of 14.5x114mm caliber. Unlike the standard heavy ordnance rounds used within the Soviet Union, these are far more potent, employing an alloy of both mundane and exotic elements known as Meta-Tellubrium, generally used for fusion reactor parts due to its outstanding resilience to both extreme pressure and heat. As reported following the **Ghoul Hunt** of 2007, this ammunition is quite effective in tearing through demon flesh as if it were jelly.
The ammunition employed by this weapon are AP rounds of 14.5x114mm caliber. Unlike the standard heavy ordnance rounds used within the Soviet Union, these are far more potent, employing an alloy of both mundane and exotic elements known as Meta-Telebrium, generally used for fusion reactor parts due to its outstanding resilience to both extreme pressure and heat. As reported following the **Ghoul Hunt** of 2007, this ammunition is quite effective in tearing through demon flesh as if it were jelly.
While generally meant for mounted use, on-the-go operation is possible, provided the user is equipped with silver-rated power armor at minimum in order to handle its heavy recoil.

View file

@ -24,11 +24,11 @@ The Ardent Cross was the name of the general's sword which, when imbued with mag
\cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact.
\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary fire engages slamfire, allowing you to shoot rapid low-charge bursts.
\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses.
\cfTertiary Fire:\c- Toggles a scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets.
\cfTertiary Fire:\c- Hold and tap primary fire to toggle scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets. Hold and tap secondary fire to switch weapon stances between two-handed and one-handed. This serves no real purpose other than looking cooler when pumping, your accuracy with the weapon is unaffected but you won't shoot it as quickly.
\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately ejected once it's been emptied into the weapon's internal "crucible", so you can hold additional ammo while keeping your charge.
\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately emptied into the weapon's internal "crucible", so you can keep loading additional ammo while boosting your charge.
\cfTechniques:\c- The weapon has a certain "extra effective" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.
@ -38,3 +38,5 @@ The Ardent Cross was the name of the general's sword which, when imbued with mag
\cfAnd of course it's huge af too, even if the grip is supposedly adapted. It honestly weirds me out how you can do that thing of... making your hands bigger, but at least it lets you use stuff like that easily.\c-
\cfAnyway, motherfucking fireballs, that work underwater??? Gonna need to see the science behind this because that makes no fucking sense and yet... it's there.\c-
\cfBy the way, leverguns make me wild out. You know it, we all know it, they're just SO GOOD.\c-

View file

@ -18,11 +18,11 @@ The **Rafan-Kos** project ("Ultimate Weapon" in Nukuribaku) would only be partia
The weapon employs **Kabbadon** as fuel, a common byproduct of **Nokorokinylum** fusion, thus making it fairly easy to produce. However, the density and degree of purity required in the creation of a single fuel pod make its price escalate dramatically.
\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for a total of five seconds before rapidly dissipating.
\cfPrimary Fire:\c- Release a radiant blast of energy that punches its way through anything, sending sparks flying in all directions along its path and burning other nearby targets. The blast burns for up to five seconds before rapidly dissipating.
\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating much rapidly.
\cfSecondary Fire:\c- Releases several scattered blasts in a wide cone, with similar destructive potential, but burning quicker, stronger, and dissipating more rapidly.
\cfReload:\c- Loads in a new magazine, each holding four pods.
\cfReload:\c- Loads in a new magazine, each holding four pods. The currently loaded pod must be fully discharged before a new one can be chambered in.
\cxSaya's Notes:\c-
\cf"Ultimate Weapon"? Talk about pretentious... But you know, something about this was making my brains itch, and then it clicked. This is basically like that one spellcard, the Master Spark. Hell, it almost even sounds and looks the same...\c-

View file

@ -10,7 +10,7 @@ TXT
¿Cuanta bala es demasiada bala? La respuesta, según **Cyrus Enterprises**, es "nunca suficiente". La **Ametralladora Pesada Sheen** es una monstruosidad en todos los aspectos en lo referente a repartir plomo. Alimentada directamente desde **Hammerspace™**, esta preciosidad se puede llevar a cualquier lado sin la necesidad de llevar encima pesadas cajas de munición, lista para diluviar muerte sobre cualquier cosa cuando se desee. Adicionalmente, teniendo la batería de Microfusión "Magdalene" de **Tach-Engine**, el arma puede permanecer operativa durante días sin necesidad de recargarla.
La munición empleada por este arma son balas anti-armadura del calibre 14.5x114mm. A diferencia de la munición estándar para armería pesada empleada en la Unión Soviética, esta es mucho más potente, empleando una aleación de elementos tanto mundanos como exóticos conocida como Meta-Tellubrium, generalmente usada para piezas de reactores de fusión dada su excepcional resistencia tanto a presión como calor extremos. Tal y como fue reportado tras la **Caza de Ghouls** de 2007, esta munición es bastante efectiva atravesando carne demoníaca como si fuese gelatina.
La munición empleada por este arma son balas anti-armadura del calibre 14.5x114mm. A diferencia de la munición estándar para armería pesada empleada en la Unión Soviética, esta es mucho más potente, empleando una aleación de elementos tanto mundanos como exóticos conocida como Meta-Telebrium, generalmente usada para piezas de reactores de fusión dada su excepcional resistencia tanto a presión como calor extremos. Tal y como fue reportado tras la **Caza de Ghouls** de 2007, esta munición es bastante efectiva atravesando carne demoníaca como si fuese gelatina.
Aunque generalmente ideada para el uso montado, la operación al paso es posible, siempre y cuando el usuario tenga una servoarmadura de grado plata como mínimo para manejar el potente retroceso.

View file

@ -18,11 +18,11 @@ La Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida
\cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar.
\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario realizará disparos en cadena rápidos de baja potencia.
\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos.
\cfFuego Terciario:\c- Alterna el fuego primario a un modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.
\cfFuego Terciario:\c- Mantén y pulsa fuego primario para alternar el modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos. Mantén y pulsa fuego secundario para alternar la postura de arma entre dos manos y una mano. Esto solo sirve para ser más vistoso al bombear, y no altera tu puntería pero si hace los disparos más lentos.
\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es expulsada inmediatamente tras ser vaciada en el "crisol" interno del arma, así que puedes almacenar munición adicional mientras mantienes la carga.
\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es vaciada immediatemente en el "crisol" interno del arma, así que puedes cargar munición adicional mientras incrementas la carga.
\cfTécnicas:\c- El arma tiene un cierto movimiento especial "extra efectivo" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.
@ -32,3 +32,5 @@ La Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida
\cfY por supuesto es jodidamente enorme, también, aunque la empuñadura está supuestamente adaptada. En serio que se me hace rarísimo como puedes hacer eso de... agrandar las manos, pero al menos te permite usar cosas así fácilmente.\c-
\cfEn fin, putas bolas de fuego, ¿¿¿que funcionan bajo el agua??? Voy a tener que echarle un ojo a la ciencia detrás de esto porque eso no tiene puto sentido y aun así... está ahí.\c-
\cfPor cierto, las armas de palanca me ponen a tope. Tú lo sabes, todos lo sabemos, es que son BUENÍSIMAS.\c-

View file

@ -12,11 +12,11 @@ El proyecto **Rafan-Kos** ("Arma Definitiva" en Nukuribaku) solo sería completa
El arma emplea **Kabbadon** como combustible, un subproducto común de la fusión de **Nokorokinylum**, haciéndolo así fácil de fabricar. Sin embargo, dada la densidad y pureza requeridas en la creación de una sola cápsula de combustible hacen que su precio escale dramáticamente.
\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un total de cinco segundos antes de disiparse rápidamente.
\cfFuego Primario:\c- Libera un radiante estallido de energía que se abre paso a través de todo, soltando chispas en todas direcciones a su paso y quemando objetivos cercanos. El estallido arde durante un máximo de cinco segundos antes de disiparse rápidamente.
\cfFuego Secundario:\c- Libera varios estallidos dispersos en un cono amplio, con un potencial destructivo similar, pero ardiendo más rápido, con mayor intensidad, y disipándose mucho antes.
\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas.
\cfRecarga:\c- Coloca un nuevo cargador, cada uno almacenando cuatro cápsulas. La cápsula cargada debe gastarse completamente antes de poder insertar una nueva en la recámara.
\cxNotas de Saya:\c-
\cf¿"Arma Definitiva"? Menuda cursilada... Pero sabes, algo de todo esto hacía que me picotearan los sesos, y entonces todo encajó. Esta cosa es básicamente como esa carta de hechizo, la Chispa Maestra. Hostia, es que hasta suena y pinta igual...\c-

View file

@ -210,7 +210,10 @@ OptionMenu "SWWMOptionMenu"
StaticText " "
StaticText "$SWWM_MCTITLE", "Blue"
Option "$SWWM_LDSPOIL", "swwm_ldspoil", "YesNo"
Option "$SWWM_DRLASKILL", "swwm_drlaskill", "SWWMDRLASkill"
IfGame(Doom)
{
Option "$SWWM_DRLASKILL", "swwm_drlaskill", "SWWMDRLASkill"
}
StaticText " "
StaticText " "

View file

@ -5,36 +5,24 @@ const float pi = 3.14159265358979323846;
vec2 warpcoord( in vec2 uv )
{
vec2 offset = vec2(0,0);
vec2 offset;
offset.y = sin(pi*2.*(uv.x*8.+timer*.25))*.005;
offset.x = cos(pi*2.*(uv.y*4.+timer*.25))*.005;
return fract(uv+offset);
return uv+offset;
}
// based on gimp color to alpha, but simplified
vec4 blacktoalpha( in vec4 src )
{
vec4 dst = src;
float dist = 0., alpha = 0.;
float d, a;
float alpha = 0.;
float a;
a = clamp(dst.r,0.,1.);
if ( a > alpha )
{
alpha = a;
dist = d;
}
if ( a > alpha ) alpha = a;
a = clamp(dst.g,0.,1.);
if ( a > alpha )
{
alpha = a;
dist = d;
}
if ( a > alpha ) alpha = a;
a = clamp(dst.b,0.,1.);
if ( a > alpha )
{
alpha = a;
dist = d;
}
if ( a > alpha ) alpha = a;
if ( alpha > 0. )
{
float ainv = 1./alpha;
@ -43,30 +31,49 @@ vec4 blacktoalpha( in vec4 src )
dst.a *= alpha;
return dst;
}
#ifdef NO_BILINEAR
#define BilinearSample(x,y,z,w) texture(x,y)
#else
vec4 BilinearSample( in sampler2D tex, in vec2 pos, in vec2 size, in vec2 pxsize )
{
vec2 f = fract(pos*size);
pos += (.5-f)*pxsize;
vec4 p0q0 = texture(tex,pos);
vec4 p1q0 = texture(tex,pos+vec2(pxsize.x,0));
vec4 p0q1 = texture(tex,pos+vec2(0,pxsize.y));
vec4 p1q1 = texture(tex,pos+vec2(pxsize.x,pxsize.y));
vec4 pInterp_q0 = mix(p0q0,p1q0,f.x);
vec4 pInterp_q1 = mix(p0q1,p1q1,f.x);
return mix(pInterp_q0,pInterp_q1,f.y);
}
#endif
void SetupMaterial( inout Material mat )
{
// store these to save some time
vec2 size = vec2(textureSize(Layer1,0));
vec2 pxsize = 1./size;
// y'all ready for this multilayered madness?
vec2 uv = vTexCoord.st;
// base blank layer, copy
vec4 base = texture(LogoTex,uv*vec2(.5,.25));
// base blank layer
vec4 base = vec4(0.,0.,0.,1.);
// first layer, blend
vec4 tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(0.,.25));
vec4 tmp = BilinearSample(Layer1,uv,size,pxsize);
base.rgb = mix(base.rgb,tmp.rgb,tmp.a);
// second layer, warp then add
tmp = texture(LogoTex,warpcoord(uv)*vec2(.5,.25)+vec2(0.,.5));
tmp = BilinearSample(Layer2,warpcoord(uv),size,pxsize);
base.rgb += tmp.rgb;
// third layer, multiply
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(0.,.75));
tmp = BilinearSample(Layer3,uv,size,pxsize);
base.rgb *= tmp.rgb;
// fourth layer, add
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(.5,0.));
tmp = BilinearSample(Layer4,uv,size,pxsize);
base.rgb += tmp.rgb;
// fifth layer, add
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(.5,.25));
tmp = BilinearSample(Layer5,uv,size,pxsize);
base.rgb += tmp.rgb;
// sixth layer, overlay (w/ alpha blend)
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(.5,.5));
// first layer again, overlay (w/ alpha blend)
tmp = BilinearSample(Layer1,uv,size,pxsize);
vec4 tmp2;
tmp2.r = overlay(base.r,tmp.r);
tmp2.g = overlay(base.g,tmp.g);
@ -75,22 +82,13 @@ void SetupMaterial( inout Material mat )
// black to alpha
base = blacktoalpha(base);
// add alpha of first layer
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(0.,.25));
base.a += tmp.a;
base.a += BilinearSample(Layer1,uv,size,pxsize).a;
// clamp
base = clamp(base,0.,1.);
// seventh layer, alpha blend
tmp = texture(LogoTex,uv*vec2(.5,.25)+vec2(.5,.75));
base = clamp(base,vec4(0.),vec4(1.));
// sixth layer, alpha blend
tmp = BilinearSample(Layer6,uv,size,pxsize);
tmp2.a = tmp.a+base.a*(1-tmp.a);
tmp2.rgb = (tmp.rgb*tmp.a+base.rgb*base.a*(1-tmp.a))/tmp2.a;
if ( tmp2.a == 0. ) tmp2.rgb = vec3(0.);
// clamp borders
vec2 sz = TEX_SZ;
vec2 px = uv*sz;
if ( (px.x <= 1) || (px.x >= (sz.x-1)) || (px.y <= 1) || (px.y >= (sz.y-1)) )
tmp2 = vec4(0.);
// ding, logo's done
mat.Base = tmp2;
mat.Normal = ApplyNormalMap(vTexCoord.st);
}

View file

@ -1053,6 +1053,7 @@ $limit powerup/divinehit 16
powerup/divineend sounds/items/diviend.ogg
powerup/tetheruse sounds/items/tetheruse.ogg
powerup/tetherfail sounds/items/tetherfail.ogg
powerup/tethererror sounds/items/tethererror.ogg
mykradvo/arc1 sounds/items/mykrarc1.ogg
mykradvo/arc2 sounds/items/mykrarc2.ogg

View file

@ -103,7 +103,12 @@ GameInfo
"PsykkonovexxGesture"
// really damn big textures
PrecacheTextures = "graphics/SWWMGZLogo.png",
"graphics/SWWMGZLogo_Layers.png"
"graphics/SWWMGZLogo_Layer1.png",
"graphics/SWWMGZLogo_Layer2.png",
"graphics/SWWMGZLogo_Layer3.png",
"graphics/SWWMGZLogo_Layer4.png",
"graphics/SWWMGZLogo_Layer5.png",
"graphics/SWWMGZLogo_Layer6.png"
}
ClearSkills

View file

@ -1,5 +1,5 @@
// Tach-Engine & Nekuratek Sparkster x3 (from UnSX 2)
// Slot 6, spawns shared with Hellblazer
// Slot 7, spawns shared with Biospark Carbine
Class ModernSparkster : SWWMWeapon
{
@ -19,7 +19,7 @@ Class ModernSparkster : SWWMWeapon
Obituary "$O_NEWSPARKSTER";
SWWMWeapon.Tooltip "$TT_NEWSPARKSTER";
Inventory.Icon "graphics/HUD/Icons/W_NewSparkster.png";
Weapon.SlotNumber 6;
Weapon.SlotNumber 7;
Weapon.SlotPriority 3.;
Weapon.SelectionOrder 625;
Weapon.AmmoType1 "SparksterBAmmo";

View file

@ -18,7 +18,9 @@ extend Class SWWMHandler
{
if ( (gamestate != GS_LEVEL) || (players[consoleplayer].Health <= 0) || !(players[consoleplayer].mo is 'Demolitionist') )
return;
double val = max(.5,swwm_mm_zoom/2.);
double val = swwm_mm_zoom;
if ( val > 1. ) val = max(1.,val-.5);
else val = max(.5,val-.25);
CVar.FindCVar('swwm_mm_zoom').SetFloat(val);
}
else if ( e.Name ~== "swwmzoomout" )
@ -26,7 +28,9 @@ extend Class SWWMHandler
if ( (gamestate != GS_LEVEL) || (players[consoleplayer].Health <= 0) || !(players[consoleplayer].mo is 'Demolitionist') )
return;
double maxval = players[consoleplayer].mo.FindInventory("Omnisight")?2.:1.;
double val = min(maxval,swwm_mm_zoom*2.);
double val = swwm_mm_zoom;
if ( val >= 1. ) val = min(maxval,val+.5);
else val = min(1.,val+.25);
CVar.FindCVar('swwm_mm_zoom').SetFloat(val);
}
}

View file

@ -616,9 +616,9 @@ extend Class SWWMHandler
else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = SWWMUtility.PickSWWMSlot1();
else if ( (e.Replacee is 'Fist') || (e.Replacee is 'Staff') ) e.Replacement = 'DeepImpact';
else if ( (e.Replacee is 'Pistol') || (e.Replacee is 'GoldWand') || (e.Replacee is 'FWeapFist') || (e.Replacee is 'CWeapMace') || (e.Replacee is 'MWeapWand') ) e.Replacement = SWWMUtility.PickSWWMSlot2();
else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') ) e.Replacement = SWWMUtility.IsDoomOne()?SWWMUtility.PickHereticSlot3():SWWMUtility.PickSWWMSlot3();
else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') ) e.Replacement = SWWMUtility.IsDoomOne()?SWWMUtility.PickDoomSlot3():SWWMUtility.PickSWWMSlot3();
else if ( (e.Replacee is 'SuperShotgun') || (e.Replacee is 'MWeapFrost') ) e.Replacement = SWWMUtility.PickSWWMSlot4();
else if ( e.Replacee is 'Crossbow' ) e.Replacement = SWWMUtility.PickHereticSlot3();
else if ( e.Replacee is 'Crossbow' ) e.Replacement = SWWMUtility.PickDoomSlot3();
else if ( (e.Replacee is 'Chaingun') || (e.Replacee is 'Blaster') || (e.Replacee is 'FWeaponPiece3') ) e.Replacement = SWWMUtility.PickSWWMSlot5();
else if ( (e.Replacee is 'RocketLauncher') || (e.Replacee is 'PhoenixRod') || (e.Replacee is 'FWeapHammer') ) e.Replacement = SWWMUtility.PickSWWMSlot6();
else if ( (e.Replacee is 'PlasmaRifle') || (e.Replacee is 'SkullRod') ) e.Replacement = SWWMUtility.PickDoomSlot6();

View file

@ -207,17 +207,6 @@ Class SWWMAmmo : Ammo
return Super.HandlePickup(item);
}
override void DoEffect()
{
Super.DoEffect();
// drop excess ammo
if ( !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo') )
{
int excess = Amount-MaxAmount;
if ( excess > 0 ) CreateTossable(excess);
}
}
override bool CanPickup( Actor toucher )
{
// don't allow picking up ammo for weapons we can't pick up
@ -486,12 +475,6 @@ Class MagAmmo : Inventory abstract
override void DoEffect()
{
Super.DoEffect();
// drop excess ammo
if ( !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo') )
{
int excess = Amount-MaxAmount;
if ( excess > 0 ) CreateTossable(excess);
}
if ( !pamo )
{
pamo = Ammo(Owner.FindInventory(ParentAmmo));

View file

@ -2174,6 +2174,33 @@ Class BarrierPower : PowerIronFeet
if ( !snd ) snd = Spawn("BarrierSnd",Owner.pos);
snd.target = Owner;
snd.master = self;
// break ourselves if we're in an endlevel sector
bool endlv = false;
for ( int i=0; i<Owner.CurSector.Get3DFloorCount(); i++ )
{
F3DFloor ff = Owner.CurSector.Get3DFloor(i);
if ( !(ff.flags&(F3DFloor.FF_EXISTS|F3DFloor.FF_SWIMMABLE)) ) continue;
if ( (ff.model.DamageAmount <= 0) || (ff.model.damageinterval <= 0) ) continue;
if ( ff.top.ZAtPoint(Owner.pos.xy) <= Owner.pos.z ) continue;
if ( ff.bottom.ZAtPoint(Owner.pos.xy) >= (Owner.pos.z+Owner.Height) ) continue;
if ( !(ff.model.flags&Sector.SECF_ENDLEVEL) ) continue;
endlv = true;
break;
}
if ( !endlv && (Owner.pos.z <= Owner.floorz) )
{
bool damageterrain = false;
if ( (Owner.floorsector.damageamount > 0) && (Owner.floorsector.damageinterval > 0) ) damageterrain = true;
else
{
let t = Owner.GetFloorTerrain();
if ( t && (t.DamageAmount > 0) && (t.DamageTimeMask > 0) )
damageterrain = true;
}
if ( damageterrain && (Owner.floorsector.flags&Sector.SECF_ENDLEVEL) ) endlv = true;
}
if ( !endlv ) return;
EffectTics = min(0,EffectTics);
}
}
@ -2226,6 +2253,7 @@ Class EBarrier : Inventory
override void DoEffect()
{
Super.DoEffect();
if ( !Owner || (Owner.Health <= 0) ) return;
// check terrain for auto-use
let b = Powerup(Owner.FindInventory("BarrierPower"));
if ( b && (b.EffectTics > 5) )
@ -2234,6 +2262,7 @@ Class EBarrier : Inventory
return;
}
bool damageterrain = false;
bool endlevelterrain = false;
// check any 3d floors first
for ( int i=0; i<Owner.CurSector.Get3DFloorCount(); i++ )
{
@ -2242,6 +2271,7 @@ Class EBarrier : Inventory
if ( (ff.model.DamageAmount <= 0) || (ff.model.damageinterval <= 0) ) continue;
if ( ff.top.ZAtPoint(Owner.pos.xy) <= Owner.pos.z ) continue;
if ( ff.bottom.ZAtPoint(Owner.pos.xy) >= (Owner.pos.z+Owner.Height) ) continue;
if ( ff.model.flags&Sector.SECF_ENDLEVEL ) endlevelterrain = true;
damageterrain = true;
break;
}
@ -2254,7 +2284,10 @@ Class EBarrier : Inventory
if ( t && (t.DamageAmount > 0) && (t.DamageTimeMask > 0) )
damageterrain = true;
}
if ( damageterrain && (Owner.floorsector.flags&Sector.SECF_ENDLEVEL) ) endlevelterrain = true;
}
// do not auto-use for these
if ( endlevelterrain ) return;
if ( !damageterrain )
{
terrainwait = max(0,terrainwait-1);

View file

@ -15,7 +15,7 @@ Class PaletteLight : PointLight
}
private void UpdateLight()
{
int index = clamp(255-((255*ReactionTime)/abs(InitialReactionTime)),0,255);
int index = clamp(255-((255*ReactionTime)/InitialReactionTime),0,255);
args[LIGHT_RED] = pal[index].r;
args[LIGHT_GREEN] = pal[index].g;
args[LIGHT_BLUE] = pal[index].b;
@ -23,7 +23,6 @@ Class PaletteLight : PointLight
override void PostBeginPlay()
{
Super.PostBeginPlay();
InitialReactionTime = ReactionTime;
String palname = GetTag();
int sep = palname.IndexOf(",");
int palnum = 0;
@ -43,9 +42,10 @@ Class PaletteLight : PointLight
}
if ( ReactionTime < 0 )
{
ReactionTime = -ReactionTime;
ReactionTime = abs(ReactionTime)-1;
IsLooping = true;
}
InitialReactionTime = ReactionTime;
UpdateLight();
}
override void Tick()

View file

@ -2063,138 +2063,196 @@ Class SWWMUtility
}
// multi-weapon spawn stuff
static private Class<Inventory> PickPair( Class<Inventory> a, Class<Inventory> b, int weight = 1 )
static private Class<Weapon> PickPair( Class<Weapon> a, Class<Weapon> b )
{
if ( CheckNeedsItem(a) ) return a;
if ( CheckNeedsItem(b) ) return b;
return Random[Replacements](weight,0)?a:b;
if ( ItemExists(a,mapstart:true) ) return b;
return Random[Replacements](0,1)?a:b;
}
static private Class<Inventory> PickTrio( Class<Inventory> a, Class<Inventory> b, Class<Inventory> c, int weight1 = 1, int weight2 = 1 )
static private Class<Weapon> PickTrio( Class<Weapon> a, Class<Weapon> b, Class<Weapon> c )
{
if ( CheckNeedsItem(a) ) return a;
if ( CheckNeedsItem(b) ) return b;
if ( CheckNeedsItem(c) ) return c;
return Random[Replacements](weight1,0)?a:Random[Replacements](weight2,0)?b:c;
if ( ItemExists(a,mapstart:true) )
{
if ( ItemExists(b,mapstart:true) )
return c;
return Random[Replacements](0,1)?b:c;
}
if ( ItemExists(b,mapstart:true) )
{
if ( ItemExists(c,mapstart:true) )
return a;
return Random[Replacements](0,1)?a:c;
}
if ( ItemExists(c,mapstart:true) )
Random[Replacements](0,1)?a:b;
switch ( Random[Replacements](0,2) )
{
case 0:
return a;
case 1:
return b;
}
return c;
}
// boy, this one got complicated fast
static Class<Inventory> PickSWWMSlot1()
// melee weapons + extra slot 2 guns (50% chance)
static Class<Weapon> PickSWWMSlot1()
{
// so the player can recover it if they decided to drop it in a previous map, or they didn't start with it
if ( CheckNeedsItem('DeepImpact') ) return 'DeepImpact';
bool needsmelee = CheckNeedsItem('PusherWeapon')/*|CheckNeedsItem('ItamexHammer')|CheckNeedsItem('FistGun')*/;
bool needsgun = CheckNeedsItem('ExplodiumGun',true)/*|CheckNeedsItem('PlasmaBlast',true)*/;
if ( !needsmelee && !needsgun )
{
static const Class<Weapon> wpns[] =
{
'ExplodiumGun', 'PusherWeapon',
'PlasmaBlast', 'ItamexHammer',
'FistGun'
};
//return wpns[Random[Replacements](0,4)];
//return wpns[Random[Replacements](0,3)];
return wpns[Random[Replacements](0,1)];
}
if ( !needsmelee && needsgun )
{
//bool needsexplo = CheckNeedsItem('ExplodiumGun',true);
//bool needsblast = CheckNeedsItem('PlasmaBlast',true);
//if ( needsexplo && !needsblast ) return 'ExplodiumGun';
//if ( !needsexplo && needsblast ) return 'PlasmaBlast';
//return Random[Replacements](0,1)?'ExplodiumGun':'PlasmaBlast';
return 'ExplodiumGun';
}
if ( needsmelee && !needsgun )
{
//return PickTrio('PusherWeapon','ItamexHammer','FistGun');
//return PickPair('PusherWeapon','ItamexHammer');
return 'PusherWeapon';
}
if ( CheckNeedsItem('ExplodiumGun',true) && Random[Replacements](0,1) ) return 'ExplodiumGun';
//if ( CheckNeedsItem('PlasmaBlast',true) && Random[Replacements](0,1) ) return 'PlasmaBlast';
bool hasmelee = (!CheckNeedsItem('PusherWeapon')/*||!CheckNeedsItem('ItamexHammer')||!CheckNeedsItem('FistGun')*/);
bool gunexists = ItemExists('ExplodiumGun',worldonly:true)/*||ItemExists('PlasmaBlast',worldonly:true)*/;
// if the player already has a melee weapon, 50% chance to spawn either slot 2 weapon as long as one doesn't exist in the map already
if ( hasmelee && !gunexists && Random[Replacements](0,1) )
return PickSWWMSlot2();
//return PickTrio('PusherWeapon','ItamexHammer','FistGun');
//return PickPair('PusherWeapon','ItamexHammer');
return 'PusherWeapon';
}
static Class<Inventory> PickSWWMSlot2()
// pistol spawn, pretty simple
static Class<Weapon> PickSWWMSlot2()
{
//return PickPair('ExplodiumGun','PlasmaBlast');
return 'ExplodiumGun';
}
static Class<Inventory> PickSWWMSlot3()
// shotgun spawn
static Class<Weapon> PickSWWMSlot3()
{
//return PickPair('Spreadgun','PuntzerBeta');
return 'Spreadgun';
}
static Class<Inventory> PickSWWMSlot4()
// super shotgun spawn
static Class<Weapon> PickSWWMSlot4()
{
//return PickPair('Wallbuster','PuntzerGamma');
return 'Wallbuster';
}
static Class<Inventory> PickSWWMSlot5()
// chaingun spawn
static Class<Weapon> PickSWWMSlot5()
{
//return PickPair('Eviscerator','HeavyMahSheenGun');
return 'Eviscerator';
}
static Class<Inventory> PickSWWMSlot6()
// rocket launcher spawn
static Class<Weapon> PickSWWMSlot6()
{
//return PickTrip('Hellblazer','Quadravol','ModernSparkster');
//return PickTrio('Hellblazer','Quadravol','ModernSparkster');
//return PickPair('Hellblazer','Quadravol');
return 'Hellblazer';
}
static Class<Inventory> PickSWWMSlot7()
// first plasma rifle spawn
static Class<Weapon> PickSWWMSlot7()
{
//return PickPair('Sparkster','BlackfireIgniter');
return 'Sparkster';
}
static Class<Inventory> PickSWWMSlot8()
// second plasma rifle spawn
static Class<Weapon> PickSWWMSlot8()
{
//return PickPair('SilverBullet','EMPCarbine');
return 'SilverBullet';
}
static Class<Inventory> PickSWWMSlot9()
// first bfg spawn
static Class<Weapon> PickSWWMSlot9()
{
//return PickTrio('CandyGun','RayKhom','MisterRifle');
//return PickPair('CandyGun','RayKhom');
return 'CandyGun';
}
static Class<Inventory> PickSWWMSlot0()
// second bfg spawn (each weapon can only exist once)
static Class<Weapon> PickSWWMSlot0( bool fallback = true )
{
/*if ( !CheckNeedsItem('Ynykron') )
/*if ( ItemExists('Ynykron',mapstart:true) )
{
if ( !CheckNeedsItem('GrandLance') )
if ( ItemExists('GrandLance',mapstart:true) )
{
if ( !CheckNeedsItem('RafanKos') )
return PickSWWMSlot9();
if ( ItemExists('RafanKos',null,true) )
return fallback?PickSWWMSlot9():null;
return 'RafanKos';
}
if ( !CheckNeedsItem('RafanKos') )
if ( ItemExists('RafanKos',mapstart:true) )
return 'GrandLance';
return PickPair('GrandLance','RafanKos');
return Random[Replacements](0,1)?'GrandLance':'RafanKos';
}
return PickTrio('Ynykron','GrandLance','RafanKos');*/
/*if ( !CheckNeedsItem('Ynykron') )
if ( ItemExists('GrandLance',mapstart:true) )
{
if ( !CheckNeedsItem('GrandLance') )
return PickSWWMSlot9();
if ( ItemExists('RafanKos',mapstart:true) )
return 'Ynykron';
return Random[Replacements](0,1)?'Ynykron':'RafanKos';
}
if ( ItemExists('RafanKos',mapstart:truee) )
return Random[Replacements](0,1)?'Ynykron':'GrandLance';
switch ( Random[Replacements](0,2) )
{
case 0:
return 'Ynykron';
case 1:
return 'GrandLance';
}
return PickPair('Ynykron','GrandLance');*/
return !CheckNeedsItem('Ynykron')?'CandyGun':'Ynykron';
return 'RafanKos';*/
/*if ( ItemExists('Ynykron',mapstart:true) )
{
if ( ItemExists('GrandLance',mapstart:true) )
return fallback?PickSWWMSlot9():null;
return 'GrandLance';
}
if ( ItemExists('GrandLance',mapstart:true) )
return 'Ynykron';
return Random[Replacements](0,1)?'Ynykron':'GrandLance';*/
if ( ItemExists('Ynykron',mapstart:true) ) return fallback?PickSWWMSlot9():null;
return 'Ynykron';
}
static Class<Inventory> PickDoomSlot6()
// either plasma rifle spawn
static Class<Weapon> PickDoomSlot6()
{
return PickPair(PickSWWMSlot7(),PickSWWMSlot8(),2);
bool hasslot7 = (!CheckNeedsItem('Sparkster')/*||!CheckNeedsItem('BlackfireIgniter')*/);
bool hasslot8 = (!CheckNeedsItem('SilverBullet')/*||!CheckNeedsItem('EMPCarbine')*/);
// if the player already has a slot 7 weapon...
if ( hasslot7 )
{
// ... and also has a slot 8 weapon, 33% chance of a slot 8 spawn
// otherwise, guaranteed slot 8 spawn
if ( hasslot8 && Random[Replacements](0,2) ) return PickSWWMSlot7();
else return PickSWWMSlot8();
}
// otherwise, always spawn a slot 7 weapon first
return PickSWWMSlot7();
}
static Class<Inventory> PickDoomSlot7()
// either bfg spawn
static Class<Weapon> PickDoomSlot7()
{
return PickPair(PickSWWMSlot9(),PickSWWMSlot0(),2);
bool hasslot9 = (!CheckNeedsItem('CandyGun')/*||!CheckNeedsItem('RayKhom')||!CheckNeedsItem('MortalRifle')*/);
bool hasslot0 = (!CheckNeedsItem('Ynykron')/*||!CheckNeedsItem('GrandLance')||!CheckNeedsItem('RafanKos')*/);
let rep = PickSWWMSlot0(false);
// if the player already has a slot 9 weapon (and a slot 0 weapon can still spawn)...
if ( hasslot9 && rep )
{
// ... and also has a slot 0 weapon already, 33% chance of a slot 0 spawn
// otherwise, guaranteed slot 0 spawn
if ( hasslot0 && Random[Replacements](0,2) ) return PickSWWMSlot9();
else return rep;
}
// otherwise, always spawn a slot 9 weapon first
return PickSWWMSlot9();
}
static Class<Inventory> PickHereticSlot3() // also used for Doom 1
// either shotgun spawn (also used for Heretic)
static Class<Weapon> PickDoomSlot3()
{
if ( level.maptime ) return PickSWWMSlot3(); // always slot 3 after map start, prevents shotgun guys from dropping wallbusters
return PickPair(PickSWWMSlot3(),PickSWWMSlot4(),2);
// always slot 3 after map start, prevents shotgun guys from dropping wallbusters, which is weird af
if ( level.maptime ) return PickSWWMSlot3();
bool hasslot3 = (!CheckNeedsItem('Spreadgun')/*||!CheckNeedsItem('PuntzerBeta')*/);
bool hasslot4 = (!CheckNeedsItem('Wallbuster')/*||!CheckNeedsItem('PuntzerGamma')*/);
// if the player already has a slot 3 weapon...
if ( hasslot3 )
{
// ... and also has a slot 4 weapon, 33% chance of a slot 4 spawn
// otherwise, guaranteed slot 4 spawn
if ( hasslot4 && Random[Replacements](0,2) ) return PickSWWMSlot3();
return PickSWWMSlot4();
}
// otherwise, always spawn a slot 3 weapon first
return PickSWWMSlot3();
}
// what RandomSpawner does, basically (simplified for items)
static play void TransferItemProp( Actor a, Actor b, bool bundlehack = false )

View file

@ -41,7 +41,7 @@ Class SWWMWeapon : Weapon abstract
override void Touch( Actor toucher )
{
// cannot pick up swapweapon unless explicitly pressing use
// show prompt to swap weapon, and prevent normal pickup
SWWMWeapon sw;
if ( bSPECIAL && swwm_swapweapons && (sw = HasSwapWeapon(toucher)) )
{
@ -54,6 +54,7 @@ Class SWWMWeapon : Weapon abstract
}
return;
}
// explicit use-to pickup, function must be called from Used() virtual
if ( toucher.player && swwm_usetopickup && !bUsePickup )
return;
Super.Touch(toucher);
@ -388,10 +389,6 @@ Class SWWMWeapon : Weapon abstract
if ( swwm_enemydrops > 0 ) return false;
else if ( swwm_enemydrops == 0 )
{
// first, check if no others exist in the map, just in
// case this weapon drop MAY be needed
if ( !SWWMUtility.ItemExists(GetClass(),self) )
return false; // drop us
// drop our corresponding ammo
if ( !DropAmmoType ) return true;
let a = Spawn(DropAmmoType,pos,ALLOW_REPLACE);