Remove Dragon's Breath shells.

Nuggets can no longer be stored as spares.
This commit is contained in:
Mari the Deer 2022-06-04 22:09:46 +02:00
commit e296c02608
39 changed files with 247 additions and 731 deletions

View file

@ -145,10 +145,9 @@ 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**.
### Puntzer Beta (slot 3) ~ Replaces Shotgun, Ethereal Crossbow, Serpent Staff
@ -170,7 +169,7 @@ These 6.9mm **(nice)** corkscrew-shaped bullets have some fine drilling power, b
### 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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

After

Width:  |  Height:  |  Size: 191 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 B

View file

@ -40,8 +40,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";
@ -483,7 +481,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.";

View file

@ -3644,14 +3644,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"
@ -4003,7 +4001,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"

View file

@ -31,8 +31,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";
@ -383,7 +381,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.";

View file

@ -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

View file

@ -3383,14 +3383,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"
@ -3721,7 +3719,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"

View file

@ -79,7 +79,7 @@ SWWM_SUBS_DEFAULT_MAPSTART11 = "Bueno, mas vale no dejar a todos esperando.";
SWWM_SUBS_DEFAULT_MAPSTART12 = "Me esforzaré al máximo.";
SWWM_SUBS_DEFAULT_MAPSTART13 = "Deja que diga una cosa: Todo lo que encuentre, me lo quedo.";
SWWM_SUBS_DEFAULT_MAPSTART14 = "Vengo a mascar chicle y patear traseros... Y no tengo boca.";
SWWM_SUBS_DEFAULT_MAPSTART15 = "¿Por qué me mudé aquí? Supongo que por el tiempo.";
SWWM_SUBS_DEFAULT_MAPSTART15 = "¿Por qué me mudé aquí? Supongo que por el clima.";
SWWM_SUBS_DEFAULT_MAPSTART16 = "Ugh mas vale que no haya plataformas...";
SWWM_SUBS_DEFAULT_MAPSTART17 = "Ya veo que este día va a ser interesante.";
// every time a secret is found
@ -335,7 +335,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.";

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r92 \cu(Sat 4 Jun 01:00:47 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r92 \cu(2022-06-04 01:00:47)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r93 \cu(Sat 4 Jun 22:09:46 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r93 \cu(2022-06-04 22:09:46)\c-";

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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"
{

View file

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -918,9 +918,6 @@ spreadgun/greenfire1 sounds/spreadgun/spread_greenfire1.ogg
spreadgun/greenfire2 sounds/spreadgun/spread_greenfire2.ogg
$random spreadgun/greenfire { spreadgun/greenfire1 spreadgun/greenfire2 }
$limit spreadgun/greenfire 16
spreadgun/whitefire1 sounds/spreadgun/spread_whitefire1.ogg
spreadgun/whitefire2 sounds/spreadgun/spread_whitefire2.ogg
$random spreadgun/whitefire { spreadgun/whitefire1 spreadgun/whitefire2 }
spreadgun/bluefire1 sounds/spreadgun/spread_bluefire1.ogg
spreadgun/bluefire2 sounds/spreadgun/spread_bluefire2.ogg
$random spreadgun/bluefire { spreadgun/bluefire1 spreadgun/bluefire2 }

View file

@ -122,8 +122,8 @@ version "4.8"
#include "zscript/weapons/swwm_tastytreat_fx.zsc"
#include "zscript/weapons/swwm_deathlydeathcannon.zsc"
#include "zscript/weapons/swwm_deathlydeathcannon_fx.zsc"
#include "zscript/weapons/swwm_hud_weapons.zsc"
#include "zscript/weapons/swwm_althud_weapons.zsc"
#include "zscript/weapons/swwm_weapons_hud.zsc"
#include "zscript/weapons/swwm_weapons_althud.zsc"
// monsters
#include "zscript/swwm_monsters.zsc"
// DLC1 - Weapon Set
@ -148,8 +148,8 @@ version "4.8"
#include "zscript/dlc1/swwm_thiccbolts_fx.zsc"
#include "zscript/dlc1/swwm_ultimate.zsc"
#include "zscript/dlc1/swwm_ultimate_fx.zsc"
#include "zscript/dlc1/swwm_hud_weapons_dlc.zsc"
#include "zscript/dlc1/swwm_althud_weapons_dlc.zsc"
#include "zscript/dlc1/swwm_dlcweapons_hud.zsc"
#include "zscript/dlc1/swwm_dlcweapons_althud.zsc"
// DLC2 - Game Set
#include "zscript/dlc2/swwm_demoland.zsc"
#include "zscript/dlc2/swwm_demoshmup.zsc"

View file

@ -57,12 +57,12 @@ extend Class SWWMStatusBar
int tclabel, tcvalue, tcextra, tccompl, tcsucks;
String tclabel_s, tcextra_s;
int AmmoFlash[27]; // flash when new ammo is received
int AmmoOldAmounts[27]; // to detect when to flash
int AmmoMaxFlash[27]; // flash when ammo max amount changes
int AmmoOldMaxAmounts[27]; // to detect when to flash
Class<SWWMAmmo> AmmoSlots[27]; // ammo type on each slot
String AmmoNames[27]; // ammo 4-letter names
int AmmoFlash[26]; // flash when new ammo is received
int AmmoOldAmounts[26]; // to detect when to flash
int AmmoMaxFlash[26]; // flash when ammo max amount changes
int AmmoOldMaxAmounts[26]; // to detect when to flash
Class<SWWMAmmo> AmmoSlots[26]; // ammo type on each slot
String AmmoNames[26]; // ammo 4-letter names
int HealthFlash; // flash when healing
int LastHealth; // to detect when to flash
int LagHealth[10]; // for delayed decay bar
@ -107,7 +107,7 @@ extend Class SWWMStatusBar
for ( int i=9; i>0; i-- )
LagHealth[i] = LagHealth[i-1];
// ammo updates
for ( int i=0; i<27; i++ )
for ( int i=0; i<26; i++ )
{
let a = SWWMAmmo(CPlayer.mo.FindInventory(AmmoSlots[i]));
int amt = 0;
@ -281,63 +281,60 @@ extend Class SWWMStatusBar
for ( int i=0; i<10; i++ ) LagHealth[i] = LastHealth;
AmmoSlots[0] = 'RedShell';
AmmoSlots[1] = 'GreenShell';
AmmoSlots[2] = 'WhiteShell';
AmmoSlots[3] = 'BlueShell';
AmmoSlots[2] = 'BlueShell';
AmmoSlots[3] = 'PurpleShell';
AmmoSlots[4] = 'BlackShell';
AmmoSlots[5] = 'PurpleShell';
AmmoSlots[6] = 'GoldShell';
AmmoSlots[7] = 'SMW05Ammo';
AmmoSlots[8] = 'EvisceratorShell';
AmmoSlots[9] = 'SheenAmmo';
AmmoSlots[10] = 'HellblazerMissiles';
AmmoSlots[11] = 'HellblazerCrackshots';
AmmoSlots[12] = 'HellblazerRavagers';
AmmoSlots[13] = 'HellblazerWarheads';
AmmoSlots[14] = 'QuadravolAmmo';
AmmoSlots[15] = 'SparkUnit';
AmmoSlots[16] = 'SparksterBAmmo';
AmmoSlots[17] = 'SparksterRAmmo';
AmmoSlots[18] = 'SilverBulletAmmo';
AmmoSlots[19] = 'SilverBulletAmmo2';
AmmoSlots[20] = 'RayAmmo';
AmmoSlots[21] = 'CandyGunAmmo';
AmmoSlots[22] = 'CandyGunSpares';
AmmoSlots[23] = 'MisterAmmo';
AmmoSlots[24] = 'MisterGAmmo';
AmmoSlots[25] = 'YnykronAmmo';
AmmoSlots[26] = 'UltimateAmmo';
AmmoSlots[5] = 'GoldShell';
AmmoSlots[6] = 'SMW05Ammo';
AmmoSlots[7] = 'EvisceratorShell';
AmmoSlots[8] = 'SheenAmmo';
AmmoSlots[9] = 'HellblazerMissiles';
AmmoSlots[10] = 'HellblazerCrackshots';
AmmoSlots[11] = 'HellblazerRavagers';
AmmoSlots[12] = 'HellblazerWarheads';
AmmoSlots[13] = 'QuadravolAmmo';
AmmoSlots[14] = 'SparkUnit';
AmmoSlots[15] = 'SparksterBAmmo';
AmmoSlots[16] = 'SparksterRAmmo';
AmmoSlots[17] = 'SilverBulletAmmo';
AmmoSlots[18] = 'SilverBulletAmmo2';
AmmoSlots[19] = 'RayAmmo';
AmmoSlots[20] = 'CandyGunAmmo';
AmmoSlots[21] = 'CandyGunSpares';
AmmoSlots[22] = 'MisterAmmo';
AmmoSlots[23] = 'MisterGAmmo';
AmmoSlots[24] = 'YnykronAmmo';
AmmoSlots[25] = 'UltimateAmmo';
AmmoNames[0] = "SHOT";
AmmoNames[1] = "SLUG";
AmmoNames[2] = "DRGN";
AmmoNames[3] = "SALT";
AmmoNames[2] = "SALT";
AmmoNames[3] = "BALL";
AmmoNames[4] = "FLCH";
AmmoNames[5] = "BALL";
AmmoNames[6] = "GOLD";
AmmoNames[7] = "SCRW";
AmmoNames[8] = "FLAK";
AmmoNames[9] = "MACH";
AmmoNames[10] = "RCKT";
AmmoNames[11] = "CLUS";
AmmoNames[12] = "RAVG";
AmmoNames[13] = "WARH";
AmmoNames[14] = "QUAD";
AmmoNames[15] = "BSPK";
AmmoNames[16] = "KINY";
AmmoNames[17] = "NOKR";
AmmoNames[18] = "RIFL";
AmmoNames[19] = "CHOD";
AmmoNames[20] = "BOLT";
AmmoNames[21] = "CAND";
AmmoNames[22] = "CGUN";
AmmoNames[23] = "MSTR";
AmmoNames[24] = "MGRN";
AmmoNames[25] = "CRYS";
AmmoNames[26] = "ULTI";
for ( int i=0; i<27; i++ )
AmmoNames[5] = "GOLD";
AmmoNames[6] = "SCRW";
AmmoNames[7] = "FLAK";
AmmoNames[8] = "MACH";
AmmoNames[9] = "RCKT";
AmmoNames[10] = "CLUS";
AmmoNames[11] = "RAVG";
AmmoNames[12] = "WARH";
AmmoNames[13] = "QUAD";
AmmoNames[14] = "BSPK";
AmmoNames[15] = "KINY";
AmmoNames[16] = "NOKR";
AmmoNames[17] = "RIFL";
AmmoNames[18] = "CHOD";
AmmoNames[19] = "BOLT";
AmmoNames[20] = "CAND";
AmmoNames[21] = "CGUN";
AmmoNames[22] = "MSTR";
AmmoNames[23] = "MGRN";
AmmoNames[24] = "CRYS";
AmmoNames[25] = "ULTI";
for ( int i=0; i<26; i++ )
{
AmmoFlash[i] = 0;
AmmoOldAmounts[i] = int.min;
if ( i >= 8 ) break;
AmmoMaxFlash[i] = 0;
AmmoOldMaxAmounts[i] = int.min;
}
@ -588,7 +585,7 @@ extend Class SWWMStatusBar
Screen.DrawTexture(AltAmmoTex[2],false,xx,yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
String str;
bool drewammo = false;
for ( int i=0; i<27; i++ )
for ( int i=0; i<26; i++ )
{
let a = AmmoSlots[i];
let cur = Ammo(CPlayer.mo.FindInventory(a));

View file

@ -17,7 +17,7 @@ Class RedShell : SWWMAmmo
Inventory.Amount 1;
Inventory.MaxAmount 30;
Ammo.BackpackAmount 3;
Ammo.BackpackMaxAmount 50;
Ammo.BackpackMaxAmount 60;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -72,7 +72,7 @@ Class GreenShell : SWWMAmmo
Inventory.Amount 1;
Inventory.MaxAmount 25;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 45;
Ammo.BackpackMaxAmount 50;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -112,60 +112,6 @@ Class GreenShell4 : GreenShell
}
}
Class WhiteShell : SWWMAmmo
{
Default
{
//$Title 1x White Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsDragon.png
//$Icon ammo
Tag "$T_WHITESHELL";
SWWMAmmo.PickupTag "WHITESHELL";
Stamina 1000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsDragon.png";
Inventory.Amount 1;
Inventory.MaxAmount 10;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 30;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
Accuracy 70;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class WhiteShell2 : WhiteShell
{
Default
{
//$Title 2x White Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsDragon.png
//$Icon ammo
Inventory.Amount 2;
Radius 6;
}
}
Class WhiteShell4 : WhiteShell
{
Default
{
//$Title 3x White Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsDragon.png
//$Icon ammo
Inventory.Amount 4;
Radius 6;
}
}
Class BlueShell : SWWMAmmo
{
Default
@ -176,12 +122,12 @@ Class BlueShell : SWWMAmmo
//$Icon ammo
Tag "$T_BLUESHELL";
SWWMAmmo.PickupTag "BLUESHELL";
Stamina 2500;
Stamina 1500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsKinylum.png";
Inventory.Amount 1;
Inventory.MaxAmount 15;
Inventory.MaxAmount 20;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 35;
Ammo.BackpackMaxAmount 40;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -221,61 +167,6 @@ Class BlueShell4 : BlueShell
}
}
Class BlackShell : SWWMAmmo
{
Default
{
//$Title 1x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Tag "$T_BLACKSHELL";
SWWMAmmo.PickupTag "BLACKSHELL";
Stamina 4000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsFuck.png";
Inventory.Amount 1;
Inventory.MaxAmount 5;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 25;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
Height 20;
Accuracy 75;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class BlackShell2 : BlackShell
{
Default
{
//$Title 2x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Inventory.Amount 2;
Radius 6;
}
}
Class BlackShell4 : BlackShell
{
Default
{
//$Title 4x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Inventory.Amount 4;
Radius 6;
}
}
Class PurpleShell : SWWMAmmo
{
Default
@ -286,12 +177,12 @@ Class PurpleShell : SWWMAmmo
//$Icon ammo
Tag "$T_PURPLESHELL";
SWWMAmmo.PickupTag "PURPLESHELL";
Stamina 1500;
Stamina 2500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsBall.png";
Inventory.Amount 1;
Inventory.MaxAmount 20;
Inventory.MaxAmount 15;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 40;
Ammo.BackpackMaxAmount 30;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -331,6 +222,61 @@ Class PurpleShell4 : PurpleShell
}
}
Class BlackShell : SWWMAmmo
{
Default
{
//$Title 1x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Tag "$T_BLACKSHELL";
SWWMAmmo.PickupTag "BLACKSHELL";
Stamina 4000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsFuck.png";
Inventory.Amount 1;
Inventory.MaxAmount 10;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 20;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
Height 20;
Accuracy 75;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class BlackShell2 : BlackShell
{
Default
{
//$Title 2x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Inventory.Amount 2;
Radius 6;
}
}
Class BlackShell4 : BlackShell
{
Default
{
//$Title 4x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Inventory.Amount 4;
Radius 6;
}
}
Class GoldShellSparkle : Actor
{
override void PostBeginPlay()
@ -529,7 +475,7 @@ Class HellblazerMissiles : SWWMAmmo
Inventory.Amount 1;
Inventory.MaxAmount 18;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 36;
Ammo.BackpackMaxAmount 48;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -755,7 +701,7 @@ Class SparkUnit : SWWMAmmo
Inventory.Amount 1;
Inventory.MaxAmount 8;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 24;
Ammo.BackpackMaxAmount 20;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;

View file

@ -63,10 +63,10 @@ Class SWWMShellAmmoSmall : SWWMAmmoSpawner
return 'GreenShell';
case 6:
case 7:
return 'PurpleShell';
return 'BlueShell';
}
// case 8-9
return 'BlueShell';
return 'PurpleShell';
}
}
Class SWWMShellAmmoBig : SWWMAmmoSpawner
@ -77,7 +77,7 @@ Class SWWMShellAmmoBig : SWWMAmmoSpawner
{
if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) )
return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BigAmmo';
switch( Random[Replacements](0,17) )
switch( Random[Replacements](0,14) )
{
case 0:
case 1:
@ -92,16 +92,12 @@ Class SWWMShellAmmoBig : SWWMAmmoSpawner
case 8:
case 9:
case 10:
return 'PurpleShell';
return 'BlueShell';
case 11:
case 12:
case 13:
return 'BlueShell';
case 14:
case 15:
return 'WhiteShell';
return 'PurpleShell';
}
// case 16-17
// case 13-14
return 'BlackShell';
}
}

View file

@ -19,11 +19,24 @@ Class ArmorNugget : SWWMArmor
}
Class ArmorNuggetItem : SWWMSpareArmor
{
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 )
@ -40,13 +53,13 @@ Class ArmorNuggetItem : SWWMSpareArmor
//$Icon armour
Tag "$T_NUGGETA";
Stamina 400;
Inventory.Icon "graphics/HUD/Icons/I_ArmorNugget.png";
Inventory.PickupMessage "$T_NUGGETA";
Inventory.MaxAmount 20;
Inventory.InterHubAmount 20;
Inventory.MaxAmount 0;
Inventory.InterHubAmount 0;
Inventory.UseSound "misc/armor_pkup";
SWWMSpareArmor.GiveArmor "ArmorNugget";
+INVENTORY.ALWAYSPICKUP;
-INVENTORY.INVBAR;
Radius 4;
Height 22;
}

View file

@ -970,9 +970,8 @@ Class Chancebox : Actor
else if ( Random[Chancebox](0,1) )
{
Class<Inventory> 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<Inventory> 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) )

View file

@ -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;
}

View file

@ -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");

View file

@ -165,7 +165,7 @@ Class SWWMStats : SWWMStaticThinker
// properly credit some projectiles to their respective gun
else if ( inflictor is 'AirBullet' ) which = 'DeepImpact';
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';

View file

@ -146,28 +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 bool ReportHUDAmmo()
{
static const Class<Ammo> 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<Ammo> 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<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Ammo> 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);
@ -175,8 +174,8 @@ Class Spreadgun : SWWMWeapon
override bool UsesAmmo( Class<Ammo> kind )
{
static const Class<Ammo> 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<Ammo> types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"};
for ( int i=0; i<6; i++ ) if ( kind is types[i] ) return true;
return false;
}
@ -187,11 +186,11 @@ Class Spreadgun : SWWMWeapon
action void A_SelectUnloadState()
{
static const Class<Ammo> 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<Ammo> 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;
@ -207,11 +206,11 @@ Class Spreadgun : SWWMWeapon
action void A_SelectLoadState()
{
static const Class<Ammo> 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<Ammo> 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;
@ -236,11 +235,11 @@ Class Spreadgun : SWWMWeapon
action void A_DropShell()
{
static const Class<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Actor> casetypes[] = {"RedShellCasing","GreenShellCasing","WhiteShellCasing","BlueShellCasing","BlackShellCasing","PurpleShellCasing","GoldShellCasing"};
static const Class<Ammo> types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"};
static const Class<Actor> 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]);
@ -258,7 +257,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;
@ -352,13 +351,13 @@ Class Spreadgun : SWWMWeapon
action void A_FireShell()
{
static const Class<Ammo> 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<Ammo> 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]);
@ -409,35 +408,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);
@ -465,6 +435,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++ )
{
@ -495,32 +491,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();
@ -661,7 +631,7 @@ Class Spreadgun : SWWMWeapon
override void AttachToOwner( Actor other )
{
static const Class<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Ammo> types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"};
if ( !initialized )
{
initialized = true;
@ -669,7 +639,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;
@ -683,9 +653,9 @@ Class Spreadgun : SWWMWeapon
action void A_SwitchAmmoType( bool rev = false )
{
static const Class<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Ammo> 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;
@ -704,7 +674,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;
@ -715,9 +685,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;
@ -765,8 +735,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");
@ -960,12 +928,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;
@ -1006,13 +968,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;
@ -1069,10 +1024,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;
@ -1098,10 +1049,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;
@ -1205,16 +1152,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
{

View file

@ -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<BlockingFloor.Get3DFloorCount(); i++ )
{
if ( !(BlockingFloor.Get3DFloor(i).flags&F3DFloor.FF_SOLID) ) continue;
if ( !(BlockingFloor.Get3DFloor(i).top.ZAtPoint(pos.xy) ~== floorz) ) continue;
ff = BlockingFloor.Get3DFloor(i);
break;
}
if ( ff ) HitNormal = -ff.top.Normal;
else HitNormal = BlockingFloor.floorplane.Normal;
}
else if ( BlockingCeiling )
{
// find closest 3d floor for its normal
for ( int i=0; i<BlockingCeiling.Get3DFloorCount(); i++ )
{
if ( !(BlockingCeiling.Get3DFloor(i).flags&F3DFloor.FF_SOLID) ) continue;
if ( !(BlockingCeiling.Get3DFloor(i).bottom.ZAtPoint(pos.xy) ~== ceilingz) ) continue;
ff = BlockingCeiling.Get3DFloor(i);
break;
}
if ( ff ) HitNormal = -ff.bottom.Normal;
else HitNormal = BlockingCeiling.ceilingplane.Normal;
}
else if ( BlockingLine )
{
HitNormal = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit();
if ( !SWWMUtility.PointOnLineSide(pos.xy,BlockingLine) )
HitNormal *= -1;
}
else if ( BlockingMobj )
{
Vector3 diff = level.Vec3Diff(pos,BlockingMobj.pos);
if ( (pos.x+radius) <= (BlockingMobj.pos.x-BlockingMobj.radius) )
HitNormal = (-1,0,0);
else if ( (pos.x-radius) >= (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; i<numpt; i++ )
{
Vector3 pvel = vel+(FRandom[Spreadgun](-1,1),FRandom[Spreadgun](-1,1),FRandom[Spreadgun](-1,1)).unit()*FRandom[Spreadgun](2,4);
let s2 = Spawn("SWWMSpark",pos);
s2.scale *= .4;
s2.vel = pvel;
}
}
A_CountDown();
}
Wait;
Bounce:
TNT1 A 0 A_HandleBounce();
Goto Spawn;
}
}
Class SaltTracer : LineTracer
{
Actor ignore;

View file

@ -51,22 +51,21 @@ extend Class DualExplodiumGun
// Spreadgun
extend Class Spreadgun
{
ui TextureID AltWeaponBox, AltRoundTex[7];
ui TextureID AltWeaponBox, AltRoundTex[6];
override void DrawWeaponAlt( double TicFrac, double bx, double by, double hs, Vector2 ss )
{
static const Class<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Ammo> types[] = {"RedShell","GreenShell","BlueShell","PurpleShell","BlackShell","GoldShell"};
if ( !AltWeaponBox ) AltWeaponBox = TexMan.CheckForTexture("graphics/AltHUD/SpreadgunDisplay.png",TexMan.Type_Any);
if ( !AltRoundTex[0] ) AltRoundTex[0] = TexMan.CheckForTexture("graphics/AltHUD/ShellRed.png",TexMan.Type_Any);
if ( !AltRoundTex[1] ) AltRoundTex[1] = TexMan.CheckForTexture("graphics/AltHUD/ShellGreen.png",TexMan.Type_Any);
if ( !AltRoundTex[2] ) AltRoundTex[2] = TexMan.CheckForTexture("graphics/AltHUD/ShellWhite.png",TexMan.Type_Any);
if ( !AltRoundTex[3] ) AltRoundTex[3] = TexMan.CheckForTexture("graphics/AltHUD/ShellBlue.png",TexMan.Type_Any);
if ( !AltRoundTex[2] ) AltRoundTex[2] = TexMan.CheckForTexture("graphics/AltHUD/ShellBlue.png",TexMan.Type_Any);
if ( !AltRoundTex[3] ) AltRoundTex[3] = TexMan.CheckForTexture("graphics/AltHUD/ShellPurple.png",TexMan.Type_Any);
if ( !AltRoundTex[4] ) AltRoundTex[4] = TexMan.CheckForTexture("graphics/AltHUD/ShellBlack.png",TexMan.Type_Any);
if ( !AltRoundTex[5] ) AltRoundTex[5] = TexMan.CheckForTexture("graphics/AltHUD/ShellPurple.png",TexMan.Type_Any);
if ( !AltRoundTex[6] ) AltRoundTex[6] = TexMan.CheckForTexture("graphics/AltHUD/ShellGold.png",TexMan.Type_Any);
if ( !AltRoundTex[5] ) AltRoundTex[5] = TexMan.CheckForTexture("graphics/AltHUD/ShellGold.png",TexMan.Type_Any);
Screen.DrawTexture(AltWeaponBox,false,bx-9,by-6,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
if ( !chambered ) return;
for ( int i=0; i<7; i++ )
for ( int i=0; i<6; i++ )
{
if ( loadammo != types[i] ) continue;
Screen.DrawTexture(AltRoundTex[i],false,bx-7,by-4,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,Color(fired?128:0,0,0,0));

View file

@ -49,49 +49,42 @@ extend Class DualExplodiumGun
// Spreadgun
extend Class Spreadgun
{
ui TextureID WeaponBox, AmmoIcon[7], LoadedIcon[7];
ui TextureID WeaponBox, AmmoIcon[6], LoadedIcon[6];
override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss )
{
static const Class<Ammo> types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"};
static const Class<Ammo> 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/WhiteShell.png",TexMan.Type_Any);
AmmoIcon[3] = TexMan.CheckForTexture("graphics/HUD/BlueShell.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/PurpleShell.png",TexMan.Type_Any);
AmmoIcon[6] = TexMan.CheckForTexture("graphics/HUD/GoldShell.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/LoadedWhiteShell.png",TexMan.Type_Any);
LoadedIcon[3] = TexMan.CheckForTexture("graphics/HUD/LoadedBlueShell.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/LoadedPurpleShell.png",TexMan.Type_Any);
LoadedIcon[6] = TexMan.CheckForTexture("graphics/HUD/LoadedGoldShell.png",TexMan.Type_Any);
LoadedIcon[5] = 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);
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<7; i++ )
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 ( i == 3 )
{
oy = 21;
ox = 33;
}
}
if ( !chambered ) return;
for ( int i=0; i<7; i++ )
for ( int i=0; i<6; 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));
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;
}
}