Ynykron initial implementation (not functional).

Removed Chanceboxes completely, they were a dumb idea.
Various itty bitty adjustments.
This commit is contained in:
Mari the Deer 2020-06-14 23:34:47 +02:00
commit aec8a71de6
83 changed files with 841 additions and 1152 deletions

View file

@ -91,7 +91,3 @@ be purchased from the store, they have to be found in maps.
T2 Fabricator | 12000
T3 Fabricator | 150000
T4 Fabricator | 1920000
T1 Chancebox | 1000
T2 Chancebox | 10000
T3 Chancebox | 100000
T4 Chancebox | 1000000

View file

@ -3,7 +3,6 @@ Fundamental things:
- Ynykron Artifact
Not so fundamental things:
- Chanceboxes
- Extra Demolitionist animations (swimming, additional gestures)
Extra things:

View file

@ -1,53 +0,0 @@
HardwareShader Texture "models/Chancebox.png"
{
Shader "shaders/glsl/Shinemask_bright.fp"
Texture "masktex" "models/Chancebox_mask.png"
Texture "envtex" "models/silvermap.png"
Texture "brighttex" "models/Chancebox_bright.png"
}
HardwareShader Texture "models/Chancebox_Tier2.png"
{
Shader "shaders/glsl/Shinemask_bright.fp"
Texture "masktex" "models/Chancebox_mask.png"
Texture "envtex" "models/silvermap.png"
Texture "brighttex" "models/Chancebox_bright.png"
}
HardwareShader Texture "models/Chancebox_Tier3.png"
{
Shader "shaders/glsl/Shinemask_bright.fp"
Texture "masktex" "models/Chancebox_mask.png"
Texture "envtex" "models/silvermap.png"
Texture "brighttex" "models/Chancebox_bright.png"
}
HardwareShader Texture "models/Chancebox_Tier4.png"
{
Shader "shaders/glsl/Shinemask_bright.fp"
Texture "masktex" "models/Chancebox_mask.png"
Texture "envtex" "models/goldmap.png"
Texture "brighttex" "models/Chancebox_bright.png"
}
PointLight CHANCELIGHT
{
Color 1.0 0.7 0.2
Size 50
Offset 0 16 0
Attenuate 1
}
Object DroppedChanceboxTier1
{
Frame "XZW2" { light "CHANCELIGHT" }
}
Object DroppedChanceboxTier2
{
Frame "XZW2" { light "CHANCELIGHT" }
}
Object DroppedChanceboxTier3
{
Frame "XZW2" { light "CHANCELIGHT" }
}
Object DroppedChanceboxTier4
{
Frame "XZW2" { light "CHANCELIGHT" }
}

5
gldefs.ynykron Normal file
View file

@ -0,0 +1,5 @@
HardwareShader Texture "models/YnykronSmoke.png"
{
Shader "shaders/glsl/YnykronSmoke.fp"
Texture "smoketex" "models/YnykronSmokeNoise.png"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

View file

@ -60,10 +60,6 @@ T_FABRICATOR1 = "Ammo Fabricator (Common)";
T_FABRICATOR2 = "Ammo Fabricator (Rare)";
T_FABRICATOR3 = "Ammo Fabricator (Very Rare)";
T_FABRICATOR4 = "Ammo Fabricator (Super Rare)";
T_LOOTBOX1 = "Chancebox (Common)";
T_LOOTBOX2 = "Chancebox (Rare)";
T_LOOTBOX3 = "Chancebox (Very Rare)";
T_LOOTBOX4 = "Chancebox (Super Rare)";
T_GHOSTARTI = "Ghost Artifact";
T_GRAVITYS = "Gravity Suppressor";
T_TETRAHEALTH = "Health Tetrahedron";
@ -659,6 +655,7 @@ SWWM_RQUOTE = "\"";
D_FROGGY1 = "\cjA small price to pay...\c-";
D_FROGGY2 = "\cj... for \cdFroggy Chair\cj.\c-";
D_BARRIER = "The Elemental Coating wore off.";
SWWM_YNYKRONREADY = "Ynykron Artifact ready for firing.";
// boss tags
BT_BRUISERS = "Super Bruiser Bros";
BT_CYBIE = "Shoot It Until It Dies";
@ -718,19 +715,18 @@ SWWM_INTERTIP18 = "All weapons have a quick melee attack available through a ded
SWWM_INTERTIP19 = "With the right combination of dashing, boosting and wall jumping, it is perfectly possible to remain in the air for extended periods of time.";
SWWM_INTERTIP20 = "In multiplayer, any keys you pick up will be immediately shared with other players.";
SWWM_INTERTIP21 = "Aim for a high score! The more enemies you kill the better. Don't forget to put that cash to use at the in-game store when you can.";
SWWM_INTERTIP22 = "Although chance boxes may sound like a terrible idea, there is a high probability of obtaining very valuable items for a much lower cost.";
SWWM_INTERTIP23 = "With proper timing, you can use your quick melee attack to deflect projectiles and bullets. It is even possible to return these to the sender, with increased damage if you're under the effects of a Ragekit.";
SWWM_INTERTIP24 = "Did you know that Saya really hates the UAC?\n\nWhat? You already knew that? Geez, then I have no idea what else to tell you.";
SWWM_INTERTIP25 = "You can dash into enemies to push them out of the way. Some smaller ones may die immediately from the impact and go flying.";
SWWM_INTERTIP26 = "If you do an air dash straight towards the ground, you might land with enough force to cause a shockwave, pushing away most enemies around you.";
SWWM_INTERTIP27 = "You can press switches and open doors by punching them. This can also be done with the Lead Ball ammunition from the Spreadgun, with the exception of exit switches.";
SWWM_INTERTIP28 = "The fire from the Spreadgun's Napalm rounds will spread around to nearby enemies (or yourself). Remember, if you're on fire, stop, drop and roll... or just spin around, it works the same.";
SWWM_INTERTIP29 = "Incendiary ammunition is ineffective underwater, for obvious reasons.";
SWWM_INTERTIP30 = "My girlfriends are really cute. Sorry, I had to say it.";
SWWM_INTERTIP22 = "With proper timing, you can use your quick melee attack to deflect projectiles and bullets. It is even possible to return these to the sender, with increased damage if you're under the effects of a Ragekit.";
SWWM_INTERTIP23 = "Did you know that Saya really hates the UAC?\n\nWhat? You already knew that? Geez, then I have no idea what else to tell you.";
SWWM_INTERTIP24 = "You can dash into enemies to push them out of the way. Some smaller ones may die immediately from the impact and go flying.";
SWWM_INTERTIP25 = "If you do an air dash straight towards the ground, you might land with enough force to cause a shockwave, pushing away most enemies around you.";
SWWM_INTERTIP26 = "You can press switches and open doors by punching them. This can also be done with the Lead Ball ammunition from the Spreadgun, with the exception of exit switches.";
SWWM_INTERTIP27 = "The fire from the Spreadgun's Napalm rounds will spread around to nearby enemies (or yourself). Remember, if you're on fire, stop, drop and roll... or just spin around, it works the same.";
SWWM_INTERTIP28 = "Incendiary ammunition is ineffective underwater, for obvious reasons.";
SWWM_INTERTIP29 = "My girlfriends are really cute. Sorry, I had to say it.";
SWWM_INTERTIP30 = "The Silver Bullet fires with such a force that its bullets leave shockwaves as they rip through the air (and enemies), dealing additional damage.";
// intermission fanart
SWWM_FANART = "Art: ";
SWWM_NFANART = "2";
SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)";
SWWM_FANART2 = "CaptainJ.png;Captain J (@Jho7835)";
// intermission 4komas (TBD)

View file

@ -259,10 +259,6 @@ SWWM_LORETAG_ONOKE = "Onoke Murders";
SWWM_LORETAB_ONOKE = "Lore";
SWWM_LOREREL_ONOKE = "Imanaki;ImanakiT;Kereshnovka;Ashley;Saya";
SWWM_LORETXT_ONOKE = "\cxName:\c-\n\cf Onoke Mansion Murders\c-\n\cxClassification:\c-\n\cf Unsolved murder mystery\c-\n\cxLocation:\c-\n\cf Kereshnovka\c-\n\nIn October of 2003, a fire broke out in the \cfOnoke Mansion\c-, at the outskirts of \cfKereshnovka\c-, during a meeting between the \cfImanaki\c- and \cfOnoke\c- families. When the firefighters arrived, they found everyone dead, all having been murdered in increasingly gruesome ways. The culprit was never found.\n\nThere are many theories about what could have happened. Most point towards this having been the work of \cfHynnykka the Great Witch\c-, a serial killer from centuries ago (or a possible successor), remarking on the fact that her last note could have the potential interpretation of having been directed towards these two powerful families (\"everyone will die\"). This is not only seen as a considerable stretch, but there are clear doubts that something like this could have been done by a single individual.\n\nAnother theory points to ritual suicide, though there would be no clear explanation for why such a thing would be done in the first place. Both families were in quite good standing, and this reunion had been in celebration of the marriage between two of their members, marking the start of a very beneficial partnership.\n\nMany other theories, each increasingly wilder and crazier than the last, mention possibilities such as attacks by cultists, the town's ghouls, or some sort of clearly planned assassination by rival families (of which none are actually known).\n\nTo this day, no one knows exactly what had happened then, and the case remains unsolved. Only one person survived this, \cfTetsuya Imanaki\c-, CEO of \cfImanaki Corp\c-, but solely because he had been absent from the event.\n\n\cxSaya's Notes:\c-\n\cfSome real shit in there, huh? I gotta say it's not as exciting as that one other murder mystery from the 80's, the one that happened here in Japan. Yeah, I still remember that shit, the theorizing and other nonsensical craziness about it took a while to die down. People actually still went on about it when I was a kid. I especially remember the meme about \"small bombs\" or some shit. It was a dumb meme theory but Taro and I thought it was really funny.\c-\n\n\cfOh yeah, that one gal from Ashley-san's band, Mykka, she was also all over it, being a self-professed \"detective\" and all. She was one of the few who pretty much pushed hard for all of it being the work of witches. Yeah, when you're one yourself that's what you'd go with, heh...\c-";
SWWM_LORETAG_LOOTBOX = "Lucky Chancebox";
SWWM_LORETAB_LOOTBOX = "Item";
SWWM_LOREREL_LOOTBOX = "NosKora;Saya";
SWWM_LORETXT_LOOTBOX = "\cxDesignation:\c-\n\cf Lucky Chance Box\c-\n\cxManufacturer:\c-\n\cf Nukritas 1xx\c-\n\cxClassification:\c-\n\cf Surprise Mechanic\c-\n\cxExcitement:\c-\n\cf Guaranteed\c-\n\nCan't afford something but still want it? Then how about you get yourself one of these bad boys? Every single instance of these \cfLucky Chance Boxes\c- is guaranteed, one hundred percent, to drop something worth more than what you've invested in your purchase. The money you spent will certainly not go to waste.\n\nThese boxes are, in addition, divided in several tears, each increasing the chance to obtain even cooler rewards. Be on the lookout, especially, for the \cfLEGENDARY GOLDEN CHANCEBOX\c-, as it may give you absolutely wondrous rewards!\n\n\cxSaya's Notes:\c-\n\cfOK, FUCK THIS SHIT. THIS IS LITERALLY FUCKING GACHA BULLSHIT NOW, IT'S EXACTLY JUST THAT\c-\n\n\cfThese fuckers have brought MOTHERFUCKING LOOTBOXES into real life, are you shitting me? They could have used their cool reality bending powers for anything else they wanted, like... making moth girls real or something, but instead, this shit.\c-\n\n\cfOK yeah maybe the moth girls thing is something that I WOULD want, but you get what I mean.\c-\n\n\cf... god I wish moth girls were real\c-";
SWWM_LORETAG_EVISCERATOR = "Eviscerator";
SWWM_LORETAB_EVISCERATOR = "Item";
SWWM_LOREREL_EVISCERATOR = "BigShot;Hammerspace;Saya";

View file

@ -55,10 +55,6 @@ T_FABRICATOR1 = "Fabricador de Munición (Común)";
T_FABRICATOR2 = "Fabricador de Munición (Raro)";
T_FABRICATOR3 = "Fabricador de Munición (Muy Raro)";
T_FABRICATOR4 = "Fabricador de Munición (Super Raro)";
T_LOOTBOX1 = "Caja Afortunada (Común)";
T_LOOTBOX2 = "Caja Afortunada (Rara)";
T_LOOTBOX3 = "Caja Afortunada (Muy Rara)";
T_LOOTBOX4 = "Caja Afortunada (Super Rara)";
T_GHOSTARTI = "Artefacto Fantasma";
T_GRAVITYS = "Supresor de Gravedad";
T_TETRAHEALTH = "Tetraedro de Salud";
@ -648,6 +644,7 @@ D_REFAIL = "El Sistema de Reinicio de Emergencia se ha recargado completamente."
D_FROGGY1 = "\cjUn pequeño precio a pagar...\c-";
D_FROGGY2 = "\cj... por una \cdSilla Rana\cj.\c-";
D_BARRIER = "El Revestimiento Elemental se ha desvanecido.";
SWWM_YNYKRONREADY = "Artefacto Ynykron listo para disparar.";
// boss tags
BT_CYBIE = "Dispara Hasta Que Muera";
BT_SPIDER = "Cerebrito Idiota";
@ -702,15 +699,15 @@ SWWM_INTERTIP18 = "Todas las armas tienen un ataque rápido a melé disponible a
SWWM_INTERTIP19 = "Con la combinación adecuada de esprintar, impulsar, y saltar por las paredes, es perfectamente posible mantenerse en el aire durante largos periodos de tiempo.";
SWWM_INTERTIP20 = "En multijugador, cualquier llave que recojas será compartida inmediatemente con otros jugadores.";
SWWM_INTERTIP21 = "¡Aumenta tu puntuación! Cuantos más enemigos elimines, mejor. No te olvides de hacer uso de esos puntos en la tienda in-game cuando puedas.";
SWWM_INTERTIP22 = "Aunque las cajas afortunadas no suenen a muy buena idea, hay muchas probabilidades de que te toquen items muy valiosos a un coste mucho más reducido.";
SWWM_INTERTIP23 = "Con el ritmo adecuado, puedes usar el ataque rápido a melé para desviar proyectiles y balas. Incluso es posible mandarlas de vuelta a su dueño, con daño incrementado si te encuentras bajo los efectos de un Ragekit.";
SWWM_INTERTIP24 = "¿Sabías que Saya realmente odia la UAC?\n\n¿Que? ¿Ya sabías eso? Vaya, pues entonces ya no se me ocurre que otra cosa contarte.";
SWWM_INTERTIP25 = "Puedes esprintar contra enemigos para empujarlos fuera de tu camino. Los más débiles puede que mueran inmediatamente por el impacto y salgan volando.";
SWWM_INTERTIP26 = "Si haces un sprint en el aire apuntando directamente al suelo, puede que aterrices con la fuerca suficiente para causar una onda de choque, apartando a la mayoría de enemigos a tu alrededor.";
SWWM_INTERTIP27 = "Puedes activar objetos y abrir puertas a puñetazos. Esto también se puede hacer con la munición de Bola de Plomo del Trabuco, a excepción de los botones de salida.";
SWWM_INTERTIP28 = "Las llamas de los cartuchos de Napalm del Trabuco se extenderán a otros enemigos cercanos (o a ti). Recuerda, si estás ardiendo, tírate al suelo y rueda... o ponte a dar vueltas, funciona igual.";
SWWM_INTERTIP29 = "La munición incendiaria es inefectiva bajo el agua, por razones obvias.";
SWWM_INTERTIP30 = "Mis novias son muy cuquis. Lo siento, es que tenía que decirlo.";
SWWM_INTERTIP22 = "Con el ritmo adecuado, puedes usar el ataque rápido a melé para desviar proyectiles y balas. Incluso es posible mandarlas de vuelta a su dueño, con daño incrementado si te encuentras bajo los efectos de un Ragekit.";
SWWM_INTERTIP23 = "¿Sabías que Saya realmente odia la UAC?\n\n¿Que? ¿Ya sabías eso? Vaya, pues entonces ya no se me ocurre que otra cosa contarte.";
SWWM_INTERTIP24 = "Puedes esprintar contra enemigos para empujarlos fuera de tu camino. Los más débiles puede que mueran inmediatamente por el impacto y salgan volando.";
SWWM_INTERTIP25 = "Si haces un sprint en el aire apuntando directamente al suelo, puede que aterrices con la fuerca suficiente para causar una onda de choque, apartando a la mayoría de enemigos a tu alrededor.";
SWWM_INTERTIP26 = "Puedes activar objetos y abrir puertas a puñetazos. Esto también se puede hacer con la munición de Bola de Plomo del Trabuco, a excepción de los botones de salida.";
SWWM_INTERTIP27 = "Las llamas de los cartuchos de Napalm del Trabuco se extenderán a otros enemigos cercanos (o a ti). Recuerda, si estás ardiendo, tírate al suelo y rueda... o ponte a dar vueltas, funciona igual.";
SWWM_INTERTIP28 = "La munición incendiaria es inefectiva bajo el agua, por razones obvias.";
SWWM_INTERTIP29 = "Mis novias son muy cuquis. Lo siento, es que tenía que decirlo.";
SWWM_INTERTIP30 = "El Silver Bullet dispara con una fuerza tal que sus balas liberan ondas de choque al atravesar el aire (y los enemigos), causando daño adicional.";
// intermission fanart
SWWM_FANART = "Arte: ";
// intermission 4komas (TBD)

View file

@ -71,8 +71,6 @@ SWWM_LORETXT_SIDHE = "\cxNombre:\c-\n\cf Sidhe\c-\n\cxClasificación:\c-\n\cf Ra
SWWM_LORETXT_BLACKMANN = "\cxNombre:\c-\n\cf Blackmann Arms S.L.\c-\n\cxClasificación:\c-\n\cf Fabricante y Diseñador de Armas\c-\n\cxLocalización:\c-\n\cf Colonia, Alemania\c-\n\cxPágina Web:\c-\n\cf https://blackmannarms.de\c-\n\n\cfBlackmann Arms\c- fue fundada en 1924 por \cfDaniel Ischer\c-, inicialmente bajo el nombre de \cfSchwartzmann Exotischwaffen\c-, como un taller de \"armas exóticas\" en Colonia, Alemania. Cuando la familia emigró a América en 1933, en los comienzos de la \cfDictadura Nazi\c-, la tienda se \"americanizó\" bajo su nombre actual, y alcanzó la fama rápidamente diseñando toda clase de ingeniosas armas para las fuerzas aliadas, y aceptando toda clase de peticiones de diseños originales, su eslogan era \"si puedes imaginarlo, podemos crearlo\".\n\nBlackmann se popularizó no solo por la rapidez en diseñar toda clase de curiosas armas que sus clientes pedían, sino también por sus propios inventos originales, como la serie \cfSilver Bullet\c- de rifles de francotirador de calibre ultra-alto, o la serie \cfPuntzer\c- de armas diseñadas para \"penetrar cualquier material, sin importar su resistencia\", gracias a su patentado diseño de bala \cfSpin Motion Wedge (SMW)\c-.\n\nA partir de 2148, la compañía está a cargo de \cfHermann E. Ischer\c- tataranieto de su fundador, quien ha hecho su objetivo personal que toda arma creada en sus fábricas capaz de tener más de una bala cargada debe tener la habilidad de dispararlo todo a la vez, o lo más rápido posible. El hombre es también popular en redes sociales dado su estatus por tener el record mundial de \"mayores cejas\", frecuentemente presumiendo de ellas o hablando en detalle de su mantenimiento.\n\nUna gran parte de los fondos de la compañía proviene de \cfDon BIG SHOT\c-, quien, segun reportajes del propio Hermann, regularmente encarga toda clase de descabellados diseños de escopetas que ningun hombre en su sano juicio pensaría usar. De estos muchos diseños estrictamente privados, una sola arma fue hecha pública, la \cfWallbuster\c-, una escopeta revólver de 25 cañones, del calibre 10, supuestamente capaz de \"abrir una brecha a través de una barrera de puro plomo con medio metro de grosor\".\n\n\cxNotas de Saya:\c-\n\cfSí, sí. Armas que molan mucho y tal. Algunas hasta tuvieron la bendición del mismísimo Gun Jesus (dios como lo echo de menos). Pero, sí... Me di cuenta de una cosa cuando rebuscaba cosas para escribir aquí. Es por el nombre de la empresa y tal. Seguro que es una referencia a algo, sí... algo grande... y negro... ¿lo pillas? Sí, eso es. Por supuesto que es un puto chiste de penes, POR... SUPUESTO... QUE SÍ. ¿¿¿El puto tío en serio quería que toda la gente pensara en su POLLA cada vez que vieran sus enormes armas??? ¡¡¡PUTO ASCO!!!\c-";
SWWM_LORETXT_RYUJI = "\cxNombre Completo:\c-\n\cf Ryuji Miyamoto\c-\n\cxNacionalidad:\c-\n\cf Japonés\c-\n\cxFecha de Nacimiento:\c-\n\cf 1956-03-12\c-\n\cxFecha de Defunción:\c-\n\cf 2054-06-22\c-\n\n\cfRyuji\c- nació en \cfGensokyo\c- en 1956, pasando la mayor parte de su vida en la \cfAldea Humana\c-, el único asentamiento de la región habitado completamente por humanos, en lugar de Youkai. Durante su adolescencia, se volvió bastante rebelde, deseando abandonar la aldea y tener \"aventuras\". Un día, escapó, y se perdió en el bosque de bambú rodeando \cfEientei\c-. Ahí, se cruzó con \cfNana\c-, la hija de \cfKaguya Houraisan\c-, y los dós se hicieron amigos. Después de ella lo guiara de vuelta a la aldea, Ryuji le prometió que regresaría un día, para casarse con ella, y llevarla con él a ver el mundo exterior.\n\nRyuji y Nana realizaron su \"fuga\" en 1973, y se asentaron en la ciudad de Kasukabe, donde los dos formaron una familia, comenzando con su primer hijo, \cfTaro\c- en 1985, quien sería seguido luego de \cfSaya\c- en 1993 y \cfYui\c- en 2009.\n\nMientras trabajaba como un típico oficinista para mantener a la familia, Ryuji tambíen se dedicaría a un hobby importante aparte, como \"inventor\". Frecuentemente se le ocurrían toda clase de herramientas y máquinas para ayudar con las tareas de la casa, y recibiría un dinero extra vendiendo algunas a sus vecinos. Sus habilidades mejoraron gradualmente, cada año dando un paso más en complejidad y escala. Ganando así fama en toda la ciudad.\n\nUno de sus logros más importantes es la propia casa en la que vive la familia Miyamoto. A partir de 2015, su antigua casa fue reconstruída completamente como una instalación subterranea de alta seguridad, que mantendría a la familia a salvo de cualquier catástrofe que pudiese ocurrir en el mundo. Este hogar subterraneo fue expandido luego, a medida que la compañía formada por Saya y Taro, \cfAkari Labs\c-, crecía. Y al tiempo de escribirse este artículo, es lo suficientemente grande como para albergar a la mayor parte de los empleados de la compañía.\n\nEn 2035, viendo que Akari Labs ganaba más dinero que el que él mismo podría jamás, decidió jubilarse prematuramente y quedarse a ver como sus hijos trabajaban.\n\nDesafortunadamente, Ryuji falleció en 2054, tras no pode recuperarse de un infarto que sufrió durante una carrera diaria. Esto tomó a muchos por sorpresa, ya que se conocía que gozaba de buena salud, a pesar de tener entonces 98 años, en palabras suyas, habiendo llegado a tal edad gracias a \"seguir un estilo de vida saludable y feliz\". Tras un largo periodo de luto, Nana llevó sus cenizas a Gensokyo y las esparció en el bosque de bambú rodeando Eientei, donde se conocieron por primera vez.\n\n\cxNotas de Saya:\c-\n\cfEra el mejor papá, y aprendí tanto de él, y estaba tan superfeliz de ver como me interesaba por inventar cosas como él. Realmente estaba orgulloso de nosotros, y trabajó muchísimo para que pudiéramos llegar a donde estamos ahora. Akari Labs... nunca habría existido si no fuera por papá.\c-\n\n\cfUgh, pensar otra vez en aquellos tiempos, no es bueno, para nada. Todos lo sabíamos, que no era inmortal como nosotros y lo perderíamos un día, pero realmente no estábamos preparados, sobre todo mamá. Fue muy, muy doloroso...\c-\n\n\cfNo estoy llorando, de verdad.\c-";
SWWM_LORETXT_NOSKORA = "\cxNombre:\c-\n\cf Universidad de Nos-Kora\c-\n\cxClasificación:\c-\n\cf La fuente más poco ortodoxa de conocimiento del mundo\c-\n\cxLocalización:\c-\n\cf Embajada Mishe, Provincia de Akai, Nahkami\c-\n\cxPágina Web:\c-\n\cf ubn://nkr/noskora.kv\c-\n\nLa \cfUniversidad de Nos-Kora\c- fue fundada en 1308 por los hermanos \cfNukritas 1xx\c- y \cfNukritas 2xx\c-, embajadores solitarios en \cfNahkami\c- de la misteriosa raza \cfMishe\c-. Este peculiar centro de estudio es conocido mundialmente por dar lugar a toda clase de cursos exóticos, algunos incluso prometiendo proveer a estudiantes con conocimientos ocultos que ninguna otra institución en todo el universo podría ofrecer.\n\nAl ser parte de los Mishe, los dos hermanos poseen lo que solo puede ser descrito como poderes de \"manipulación de la realidad\". Sin embargo, esto solo ha sido presenciado en raras ocasiones, como por ejemplo los momentos finales de la \cfSéptima Guerra Mundial Nukuri\c-, donde uno de ellos consiguió poner fin al comflicto por su cuenta, ignorando los ataques de soldados imperiales mientras se acercaba al trono, y al alcanzarlo, mandar al emperador \cfLedora Yathai\c- volando fuera de su asiento de un puñetazo, lanzándolo a través de la sala en una línea recta hasta una ventana cercana, y enviándolo al espacio exterior. Su cuerpo nunca fue recuperado, y se supone muerto.\n\nLa popularidad de la universidad se disparó tras este éxito en desmantelar todo un imperio y finalmente traer consigo la creación del \cfGobierno Unificado Nukuri\c-. Mucha gente desea aprender lo que estas extrañas entidades ofrecen enseñar, aunque muchos de los cursos son bastante difíciles para la mayoría de personas.\n\nAlgunos de los cursos más populares que uno puede estudiar en la Universidad de Nos-Kora son:\n\n\cfMecánicas de la Verdad:\c- Un curso especial sobre la teoría fundamental unificada de la existencia, que se dice es la base sobre la que todo el conocimiento y habilidad de los Mishe fueron construidos.\n\n\cfIngeniería de Tortitas:\c- Un curso con un extraño nombre sobre los principios de las tres capas de la realidad y sus interacciones, junto con métodos para \"doblegarlas a tu voluntad\". Este curso tiene una de las mayores tasas de abandono, ya que la mayoría de estudiantes acaban volviéndose locos durante los primeros años.\n\n\cfFundamentos de Ingeniería Astronómica:\c- Un curso sobre las bases de la creación de planetas. También cubre temas de bioingeniería. Este está generalmente solo abierto a deidades, u otras especies capables de algo así.\n\n\cfHistoria Esencial:\c- Recomendado a quien busque conocer todos los detalles del desarrollo y evolución del universo, aunque es mejor pertenecer a una especie que vive lo suficiente como para sobrevivir este curso de 730 años. Aunque los hermanos han dicho que esto es todo lo necesario para cubrir \"lo esencial\" de la historia.\n\nA un lado, la universidad y sus dos fundadores también manejan su pequeña tienda, \cfPlutoni Incorporated\c-, donde muchos artefactos extraños y servicios de los propios fundadores y de sus más exitosos alumnos están disponibles para ser comprados.\n\n\cxNotas de Saya:\c-\n\cfTengo que decirlo, estos tíos están chiflados, vamos, MUY chiflados, todos los tornillos fuera. Pero es algo bueno, más o menos, en cuanto te acostumbras (me llevó su tiempo). Pasando de la locura total, te sueltan toda clase de conocimientos prohibidos... o datos random sobre gansos, como aquella vez... (pero creo que eso era la forma suya de evitar responder preguntas sensibles).\c-\n\n\cfMucha enhorabuena tambien por acabar una puta guerra (y acabar con un puto emperador también) así de repente. Puto... saliendo disparado el tío ahí en órbita, guau. Desde luego mejor no meterse con estos dos cuando se ponen serios, la rehostia.\c-";
SWWM_LORETAG_LOOTBOX = "Caja Afortunada";
SWWM_LORETXT_LOOTBOX = "\cxDesignación:\c-\n\cf Caja Afortunada\c-\n\cxFabricante:\c-\n\cf Nukritas 1xx\c-\n\cxClasificación:\c-\n\cf Mecánica de Sorpresa\c-\n\cxEmoción:\c-\n\cf Garantizada\c-\n\n¿No puedes permitierte algo pero aun lo deseas? Entonces ¿por que no pillarte uno de estos chicos malos? Cada instancia de estas \cfCajas Afortunadas\c- está garantizada, al cien por ciento, de dropear algo más valioso de lo que hayas invertido en tu compra. El dinero que hayas usado ciertamente no se malgastará.\n\nEstas cajas, adicionalmente, están divididas en varios tiers, cada uno incrementando la probabilidad de obtener recompensas más molonas. Presta atención, especialmente, a la \cfCAJA DORADA LEGENDARIA\c-, ya que ¡puede ofrecerte recompensas absolutamente maravillantes!\n\n\cxNotas de Saya:\c-\n\cfOK, A LA MIERDA TODO. ESTO ES LITERALMENTE PUTA BASURA DE GACHA, ES EXACTAMENTE ESO\c-\n\n\cfEstos capullos acaban de traer PUTAS LOOTBOXES a la vida real, ¿estás de coña? Podrían haber usado sus poderes de alterar la realidad para cualquier otra cosa más molona que quisieran, como... hacer que las chicas polilla sean reales o algo, pero en vez de eso, esta mierda.\c-\n\n\cfOK sí vale a lo mejor lo de las chicas polilla es algo que YO quiero, pero ya sabes a lo que me refiero.\c-\n\n\cf... dios ojalá las chicas polilla fueran reales\c-";
SWWM_LORETAG_MUNCH = "Innovaciones Munch";
SWWM_LORETXT_MUNCH = "\cxNombre:\c-\n\cf Innovaciones Munch\c-\n\cxClasificación:\c-\n\cf Fabricante de Aparatos del Hogar Inteligentes\c-\n\cf Fabricante de Armas\c-\n\cxLocalización:\c-\n\cf Texas\c-\n\cxPágina Web:\c-\n\cf https://munch.home\c-\n\nInicialmente siendo un productor de aparatos inteligentes para el hogar, \cfInnovaciones Munch\c- entró repentinamente en el mercado de armas sin pensarlo dos veces después de que \cfParker Munch\c-, hijo del fundador \cfAllen Munch\c-, y un bien conocido entusiasta de las armas, tomara la decisión de obtener todo el material de investigación y patentes sobre un nuevo explosivo plástico conocido como \cfExplódium\c-.\n\nTras el éxito de la \cfPistola de Explódium\c- de Parker, decidió anunciar un reto de \"inventar todas las armas que pueda en una semana\" en su Twitter, consiguientemente posteando sobre todos y cada uno de los diseños que se le iban ocurriendo. No muchos de estos fueron exitosos, aunque un modelo más poderoso (y peligroso) de Pistola de Explódium sí ganó cierto reconocimiento (principalmente entre gente lo suficientemente loca como para querer usarlo).\n\nSin embargo, los muchos diseños que sí llegaron a tener éxito entrarían al mercado bajo la marca de Innovaciones Munch, y se venderían como roscas, especialmente en el territorio de la Unión de Estados.\n\n\cxNotas de Saya:\c-\n\cfMe encanta como en estos tiempos que corren, cualquier tío puede ir y empezar a hacer armas. A ver, con los idiotas americanos, no es una sorpresa, pero ya.\c-\n\n\cfAh y ¿es cosa mía o... el nombre del tío ese suena jodidamente familiar? Lo juro, es que yo he oído ese nombre antes... o algo parecido, ¿creo? Si mi cerebro no estuviera tan revuelto de haber vivido tanto lo recordaría al momento, asco de vida.\c-";
SWWM_LORETXT_NANA = "\cxNombre Completo:\c-\n\cf Nana Miyamoto\c-\n\cxNacionalidad:\c-\n\cf Japonesa\c-\n\cxFecha de Nacimiento:\c-\n\cf 1907-07-07\c-\n\n\cfNana\c- es la hija única de \cfKaguya Houraisan\c-, la princesa \cfLunar\c- exiliada que hizo de \cfGensokyo\c- su hogar. Habiendo sido criada y educada completamente dentro de los confines de \cfEientei\c- no sabía mucho del mundo exterior, y habría pasado el resto de su vida eterna ahí, de no haber sido por un encuentro inesperado con \cfRyuji Miyamoto\c- en los años 60. Habiendo huido de la \cfAldea Humana\c-, se cruzó con Nana. Los dos entablaron una amistad cercana, y el joven chico hizo la promesa de casarse con ella cuando creciera, y llevarla al exterior, para que pudiese \"ver el mundo\". Esto ocurriría en 1973, con los dos dejando atrás Gensokyo para formar una familia.\n\nSiendo parte de la realeza, Nana ha ganado bastante fama en Japón, apareciendo incluso en varios programas de entrevistas. También es bien conocida por sus habilidades en varias artes marciales, y ha ganado varios torneos durante años. Otros de sus hobbies también incluyen la pintura y talla de madera, y es una cocinera muy hábil.\n\nNana tiene tres hijos, los cuales, como ella, han heredado la sangre inmortal de la princesa lunar: \cfTaro\c-, \cfSaya\c- y \cfYui\c-. Cada uno de ellos ha tenido un gran éxito en sus propias hazañas, algo de lo que Nana habla en gran detalle, muy orgullosa.\n\n\cxNotas de Saya:\c-\n\cfLa más mejor mamá del mundo, no voy a mentir. Puede que sea estricta a veces, o se enfade conmigo por estar despierta hasta muy tarde (si es que se da cuenta, je), pero realmente es la mejor. Aun no la has conocido, Demo-chan, pero seguro que le vas a caer muy bien. Te aseguro que es muy maja a pesar del miedo que da la pinta que tiene a veces. No es para nada como Kaguya obaa-san, que juro que siempre tiene ese aura que es como... normal que los tíos le tengan miedo, siempre con un miedo constante a que les haga CBT en cualquier momento.\c-";

2
language.esm_lore Normal file
View file

@ -0,0 +1,2 @@
// this file was generated by mklang, do not edit directly
[esm]

View file

@ -60,10 +60,6 @@ T_FABRICATOR1 = "Фабрикатор боеприпасов (Обычный)";
T_FABRICATOR2 = "Фабрикатор боеприпасов (Редкий)";
T_FABRICATOR3 = "Фабрикатор боеприпасов (Очень редкий)";
T_FABRICATOR4 = "Фабрикатор боеприпасов (Супер редкий)";
T_LOOTBOX1 = "Коробка Удачи (Обычный)";
T_LOOTBOX2 = "Коробка Удачи (Редкий)";
T_LOOTBOX3 = "Коробка Удачи (Очень редкий)";
T_LOOTBOX4 = "Коробка Удачи (Супер редкий)";
T_GHOSTARTI = "Призрачный Артефакт";
T_GRAVITYS = "Подавитель силы тяжести";
T_TETRAHEALTH = "Тетраэдр здоровья";
@ -533,15 +529,14 @@ SWWM_INTERTIP18 = "У всего оружия есть быстрая рукоп
SWWM_INTERTIP19 = "С правильной комбинацией рывка, полёта и прыжков от стен, вполне возможно оставаться в воздухе в течение длительных периодов времени.";
SWWM_INTERTIP20 = "В мультиплеере любые ключи, которые вы выбираете, будут немедленно переданы другим игрокам.";
SWWM_INTERTIP21 = "Стремитесь к высокому счёту! Чем больше врагов вы убьёте, тем лучше. Не забудьте положить эти деньги в игровой магазин, когда сможете.";
SWWM_INTERTIP22 = "Хотя коробки удачи могут показаться ужасной идеей, существует высокая вероятность получения очень ценных предметов за гораздо меньшую стоимость.";
SWWM_INTERTIP23 = "При правильном времени вы можете использовать свою быструю рукопашную атаку для отражения снарядов и пуль. Можно даже вернуть их отправителю с увеличенным уроном, если вы находитесь под воздействием набора ярости.";
SWWM_INTERTIP24 = "Знаете ли вы, что Сая действительно ненавидит ОАК?\n\nЧто? Вы уже знали это? Чёрт возьми, тогда я понятия не имею, что ещё тебе сказать.";
SWWM_INTERTIP25 = "Вы можете броситься на врагов, чтобы оттолкнуть их с дороги. Некоторые более мелкие могут немедленно умереть от удара и улететь.";
SWWM_INTERTIP26 = "Если вы нанесёте воздушный удар прямо по земле, вы можете приземлиться с достаточной силой, чтобы вызвать ударную волну, отталкивая большинство врагов вокруг вас.";
SWWM_INTERTIP27 = "Вы можете нажать выключатели и открыть двери, ударяя кулаком их. Это также можно сделать с помощью Свинцовых шаров из Распылителя, за исключением переключателей выхода.";
SWWM_INTERTIP28 = "Огонь от патронов Напалма Распылителя будет распространяться на ближайших врагов (или вас самих). Помните, если вы в огне, остановитесь, бросьте всё и катитесь... или просто вращаетесь, это работает так же.";
SWWM_INTERTIP29 = "Зажигательные боеприпасы малоэффективны под водой по понятным причинам.";
SWWM_INTERTIP30 = "Мои девушки самые милые. Извините, я должен был это сказать.";
SWWM_INTERTIP22 = "При правильном времени вы можете использовать свою быструю рукопашную атаку для отражения снарядов и пуль. Можно даже вернуть их отправителю с увеличенным уроном, если вы находитесь под воздействием набора ярости.";
SWWM_INTERTIP23 = "Знаете ли вы, что Сая действительно ненавидит ОАК?\n\nЧто? Вы уже знали это? Чёрт возьми, тогда я понятия не имею, что ещё тебе сказать.";
SWWM_INTERTIP24 = "Вы можете броситься на врагов, чтобы оттолкнуть их с дороги. Некоторые более мелкие могут немедленно умереть от удара и улететь.";
SWWM_INTERTIP25 = "Если вы нанесёте воздушный удар прямо по земле, вы можете приземлиться с достаточной силой, чтобы вызвать ударную волну, отталкивая большинство врагов вокруг вас.";
SWWM_INTERTIP26 = "Вы можете нажать выключатели и открыть двери, ударяя кулаком их. Это также можно сделать с помощью Свинцовых шаров из Распылителя, за исключением переключателей выхода.";
SWWM_INTERTIP27 = "Огонь от патронов Напалма Распылителя будет распространяться на ближайших врагов (или вас самих). Помните, если вы в огне, остановитесь, бросьте всё и катитесь... или просто вращаетесь, это работает так же.";
SWWM_INTERTIP28 = "Зажигательные боеприпасы малоэффективны под водой по понятным причинам.";
SWWM_INTERTIP29 = "Мои девушки самые милые. Извините, я должен был это сказать.";
// intermission fanart
SWWM_FANART = "Арт: ";
SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)";

View file

@ -138,8 +138,6 @@ SWWM_LORETAG_GHOSTARTIFACT = "Призрачный Артефакт";
SWWM_LORETXT_GHOSTARTIFACT = "\cxНазначение:\c-\n\cf Призрачный Артефакт\c-\n\cxПроизводитель:\c-\n\cf Механика Десятилетия (бывший)\c-\n\cf Тахомоторный технологический институт (текущий)\c-\n\cxКлассификация:\c-\n\cf Маскировочное устройство\c-\n\nОдно из множества устройств из разрушенных объектом \cfМеханики Десятилетия\c- на \cfСунказе\c-. Успешно воспроизведено \cfТахомоторными технологиями\c-, на основе восстановленных чертежей. Так называемые \cfПризрачный Артефакт\c-, после активации генерирует пузырь искажения вокруг пользователя, который перенаправляет исходящие фотоны, делая их полностью невидимыми. После его активации отключить его невозможно. Скорее, нужно дождаться полного разряда внутренней батареи.\n\n\cxПримечание Сайи:\c-\n\cfВы можете стать невидимым, но вы знаете, что они всё ещё услышат вас, верно? Это может быть не очень полезно, учитывая, насколько шумно ваше тело (прости меня). Ну, вообще-то, может быть полезно в НЕКОТОРЫХ ситуациях, наверное. Просто... постарайся подавить шум, если хочешь пробраться мимо злодеев.\c-";
SWWM_LORETAG_ONOKE = "Убийцы Оноке";
SWWM_LORETXT_ONOKE = "\cxНазвание:\c-\n\cf Убийцы Особняка Оноке\c-\n\cxКлассификация:\c-\n\cf Нераскрытая тайна убийства\c-\n\cxМестонахождение:\c-\n\cf Керешновка\c-\n\nВ октябре 2003 года в \cfОсобняке Оноке\c-, на окраине \cfКерешновки\c-, во время встречи между семьями \cfИманаки\c- и \cfОноке\c-. Когда прибыли пожарные, они обнаружили, что все погибли, все были убиты самыми ужасными способами. Виновник так и не был найден.\n\nЕсть много теорий о том, что могло бы произойти. Большинство указывает на то, что это работа \cfВеликой Ведьмы Гинныкка\c-, серийный убийца веков назад (или возможный преёмник), отмечая тот факт, что её последняя заметка может иметь потенциальную интерпретацию того, что она была направлена на эти две влиятельные семьи (\"все умрут\"). Это не только воспринимается как значительный этап, но есть явные сомнения в том, что нечто подобное могло бы сделать один человек.\n\nДругая теория указывает на ритуальное самоубийство, хотя не было бы четкого объяснения, почему такая вещь была бы сделана в первую очередь. Обе семьи были в довольно хорошем положении, и это воссоединение состоялось в праздновании брака между двумя их членами, что ознаменовало начало очень выгодного партнерства.\n\nВо многих других теориях, каждая из которых становится все более дикой и безумной, чем предыдущая, упоминаются такие возможности, как нападения культистов, гули в городе или какое-то четко спланированное убийство конкурирующих семей (о которых на самом деле ничего не известно).\n\nПо сей день никто точно не знает, что произошло тогда, и дело остается нерешенным. Только один человек пережил это, \cfТецуя Иманаки\c-, генеральный директор \cfИманаки Корп\c-, но только потому, что он отсутствовал на мероприятии.\n\n\cxПримечание Сайи:\c-\n\cfТам какое-то настоящее дерьмо творится, да? Должна сказать, что это не так увлекательно, как ещё одна загадка убийства из 80-х, та, которая произошла здесь, в Японии. Да, я до сих пор помню, это дерьмо, теоретизирование и другие бессмысленные сумасшествия об этом заняли некоторое время, чтобы умереть. Люди на самом деле всё ещё продолжали об этом, когда я была ребенком. Я особенно помню мем о \"маленьких бомбах\" или что-то типо того. Это была глупая теория мемов, но мы с Таро подумали, что это действительно смешно.\c-\n\n\cfАх да, та девушка из группы Эшли-сан, Мукка, она тоже была повсюду, будучи самообъявленным \"детективом\" и всё. Она была одной из немногих, кто в значительной степени настаивал на том, что всё это работа ведьм. Да, когда ты одна, это то, на что вы пошли бы, хе...\c-";
SWWM_LORETAG_LOOTBOX = "Счастливая Коробка Удачи";
SWWM_LORETXT_LOOTBOX = "\cxНазначение:\c-\n\cf Счастливая Коробка Удачи\c-\n\cxПроизводитель:\c-\n\cf Нукритас 1xx\c-\n\cxКлассификация:\c-\n\cf Сюрприз Механик\c-\n\cxАзарт:\c-\n\cf Гарантированный\c-\n\nНе можете позволить себе что-то, но всё ещё хотите это? Тогда как насчет того, чтобы ты оказался одним из этих плохих парней? Каждый экземпляр этих \cfСчастливых Коробок Удачи\c- гарантированно, на сто процентов, выпадет что-то, что стоит больше, чем вы вложили в покупку. Деньги, которые вы потратили, наверняка не пропадут.\n\nЭти коробки, кроме того, разделены на несколько уровней, каждый из которых увеличивает шанс получить ещё более крутые награды. Будьте начеку, особенно, для \cfЛЕГЕНДАРНАЯ ЗОЛОТАЯ КОРОБКА УДАЧИ\c-, так как он может дать вам совершенно удивительные награды!\n\n\cxПримечание Сайи:\c-\n\cfОК, ЧЕРТ ВОЗЬМИ, ЭТО ДЕРЬМО. ЭТО ГРАЧНО ГРУША БУДЕТ СЕЙЧАС, ЭТО ТОЛЬКО ТОЛЬКО ЧТО\c-\n\n\cfЭти придурки принесли в реальную жизнь БЛЯДСКИЕ ЛУУТБОКСЫ, вы издеваетесь? Они могли бы использовать свою крутую силу изгиба реальности для чего-то ещё, что они хотели, например... сделать моль-девочек настоящими или что-то в этом роде, но вместо этого это дерьмо.\c-\n\n\cfОкей, да, может быть, моль-девочки это слишком, но ВЫ понимаете, о чем я.\c-\n\n\cf... боже, как бы мне хотелось, чтобы девочки-моли были настоящими\c-";
SWWM_LORETAG_EVISCERATOR = "Потрошитель";
SWWM_LORETXT_EVISCERATOR = "\cxНазначение:\c-\n\cf Стрелковая пушка флашшета высокой загрузки \"Потрошитель\"\c-\n\cxПроизводитель:\c-\n\cf Мр. БОЛЬШОЙ ВЫСТРЕЛ\c-\n\cxКлассификация:\c-\n\cf Переносная артиллерия\c-\n\nЗверское оружие, разработанное одним-единственным \cfМр. БОЛЬШОЙ ВЫСТРЕЛ\c-, чтобы \"разнести горячий дымящийся металл\" на большие группы врагов, превращая их в прекрасный красный туман в простые мгновения. Это было описано как \"ребенок-ублюдок из дробовика и гранатомета\" кем-то.\n\nЕго владение и использование было запрещено во многих странах не только из-за ужасного воздействия, которое оно оказывало на цели, но и из-за опасности, которую оно представляло даже для своего собственного пользователя. Однако в начале демонического вторжения в 2148 году запрет на это оружие был снят и считался оправданным для использования против вторгающихся сил.\n\nВ отличие от другого оружия аналогичной операции, \cfПотрошитель\c- не требует перезарядки благодаря совместимости с контейнерами \cfХаммерспейс™\c-, позволяя своему внутреннему магазину пополнять при необходимости запасы патронов оператора.\n\n\cfОсновной огонь:\c- Взрывает патрон напрямую, распределяя горячий дымящийся металл перед пользователем.\n\n\cfВторичный огонь:\c- Обстреливает снаряд гранатой, которая детонирует при ударе о любую поверхность или объект и освобождает полезную нагрузку в направлении, в котором она находилась при первоначальном выстреле.\n\n\cfТретичный огонь:\c- Переключение между двумя режимами разброса для основного огня. Допускается либо широкий выстрел с более широким охватом толпы с близкого расстояния, либо более узкий, который может быть полезен для поражения целей на средних и дальних дистанциях. Переключение на расширенный ствол также имеет дополнительное преимущество увеличения дальности вторичного огня.\n\n\cfТехники:\c- Металлические осколки, выпущенные этим оружием, рикошетят повсюду, что делает его очень эффективным для стрельбы по углам и поражения целей вне поля зрения или для сокрытия за укрытием.\n\n\cxПримечание Сайи:\c-\n\cfПочему там лицо \"owo\" на каждом патроне? Кто это сделал? Я хочу знать!\c-";
SWWM_LORETAG_KEYCHAIN = "Ключи";

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\cxSWWM GZ\c- r345 (Sat 13 Jun 23:51:31 CEST 2020)";
SWWM_MODVER="\cxSWWM GZ\c- r346 (Sun 14 Jun 23:34:47 CEST 2020)";

View file

@ -1,28 +0,0 @@
TAG
Lucky Chancebox
TAB
Item
REL
NosKora;Saya
TXT
\cxDesignation:\c-
\cf Lucky Chance Box\c-
\cxManufacturer:\c-
\cf Nukritas 1xx\c-
\cxClassification:\c-
\cf Surprise Mechanic\c-
\cxExcitement:\c-
\cf Guaranteed\c-
Can't afford something but still want it? Then how about you get yourself one of these bad boys? Every single instance of these **Lucky Chance Boxes** is guaranteed, one hundred percent, to drop something worth more than what you've invested in your purchase. The money you spent will certainly not go to waste.
These boxes are, in addition, divided in several tears, each increasing the chance to obtain even cooler rewards. Be on the lookout, especially, for the **LEGENDARY GOLDEN CHANCEBOX**, as it may give you absolutely wondrous rewards!
\cxSaya's Notes:\c-
\cfOK, FUCK THIS SHIT. THIS IS LITERALLY FUCKING GACHA BULLSHIT NOW, IT'S EXACTLY JUST THAT\c-
\cfThese fuckers have brought MOTHERFUCKING LOOTBOXES into real life, are you shitting me? They could have used their cool reality bending powers for anything else they wanted, like... making moth girls real or something, but instead, this shit.\c-
\cfOK yeah maybe the moth girls thing is something that I WOULD want, but you get what I mean.\c-
\cf... god I wish moth girls were real\c-

View file

@ -1,24 +0,0 @@
TAG
Caja Afortunada
TXT
\cxDesignación:\c-
\cf Caja Afortunada\c-
\cxFabricante:\c-
\cf Nukritas 1xx\c-
\cxClasificación:\c-
\cf Mecánica de Sorpresa\c-
\cxEmoción:\c-
\cf Garantizada\c-
¿No puedes permitierte algo pero aun lo deseas? Entonces ¿por que no pillarte uno de estos chicos malos? Cada instancia de estas **Cajas Afortunadas** está garantizada, al cien por ciento, de dropear algo más valioso de lo que hayas invertido en tu compra. El dinero que hayas usado ciertamente no se malgastará.
Estas cajas, adicionalmente, están divididas en varios tiers, cada uno incrementando la probabilidad de obtener recompensas más molonas. Presta atención, especialmente, a la **CAJA DORADA LEGENDARIA**, ya que ¡puede ofrecerte recompensas absolutamente maravillantes!
\cxNotas de Saya:\c-
\cfOK, A LA MIERDA TODO. ESTO ES LITERALMENTE PUTA BASURA DE GACHA, ES EXACTAMENTE ESO\c-
\cfEstos capullos acaban de traer PUTAS LOOTBOXES a la vida real, ¿estás de coña? Podrían haber usado sus poderes de alterar la realidad para cualquier otra cosa más molona que quisieran, como... hacer que las chicas polilla sean reales o algo, pero en vez de eso, esta mierda.\c-
\cfOK sí vale a lo mejor lo de las chicas polilla es algo que YO quiero, pero ya sabes a lo que me refiero.\c-
\cf... dios ojalá las chicas polilla fueran reales\c-

View file

@ -509,7 +509,7 @@ Model "SilverBulletAmmo"
Model 0 "SilverbulletMag_d.3d"
Skin 0 "SilverbulletAmmo.png"
Scale 0.24 0.24 0.24
Scale 0.25 0.25 0.25
PitchOffset 30
ZOffset 16
ROTATING
@ -537,7 +537,7 @@ Model "YnykronAmmo"
Model 0 "YnykronAmmo_d.3d"
Skin 0 "YnykronAmmo.png"
Scale 0.24 0.24 0.24
Scale 0.18 0.18 0.18
PitchOffset 30
ZOffset 16
ROTATING

View file

@ -1,321 +0,0 @@
Model "FancyConfetti"
{
Model 0 "models/extra/Flat_d.3d"
Scale 0.003 0.003 0.003
ZOffset 1
USEACTORPITCH
USEACTORROLL
Skin 0 "models/goldmap.png"
FrameIndex XZW1 A 0 0
Skin 0 "models/blumap.png"
FrameIndex XZW1 B 0 0
Skin 0 "models/darkmap.png"
FrameIndex XZW1 C 0 0
Skin 0 "models/greenmap.png"
FrameIndex XZW1 D 0 0
Skin 0 "models/invincimap.png"
FrameIndex XZW1 E 0 0
Skin 0 "models/pinkmap.png"
FrameIndex XZW1 F 0 0
Skin 0 "models/purpmap.png"
FrameIndex XZW1 G 0 0
Skin 0 "models/ragemap.png"
FrameIndex XZW1 H 0 0
Skin 0 "models/redmap.png"
FrameIndex XZW1 I 0 0
Skin 0 "models/silvermap.png"
FrameIndex XZW1 J 0 0
}
Model "ChanceboxTier1"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0
}
Model "ChanceboxTier2"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier2.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0
}
Model "ChanceboxTier3"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier3.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0
}
Model "ChanceboxTier4"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier4.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0
}
Model "ChanceTopTier1"
{
Path "models"
Model 0 "Chancebox_Top_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 4
FrameIndex XZW1 A 0 0
}
Model "ChanceTopTier2"
{
Path "models"
Model 0 "Chancebox_Top_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 4
FrameIndex XZW1 A 0 0
}
Model "ChanceTopTier3"
{
Path "models"
Model 0 "Chancebox_Top_d.3d"
Skin 0 "Chancebox_Tier3.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 4
FrameIndex XZW1 A 0 0
}
Model "ChanceTopTier4"
{
Path "models"
Model 0 "Chancebox_Top_d.3d"
Skin 0 "Chancebox_Tier4.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 4
FrameIndex XZW1 A 0 0
}
Model "ChanceSideTier1"
{
Path "models"
Model 0 "Chancebox_Side_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
FrameIndex XZW1 A 0 0
}
Model "ChanceSideTier2"
{
Path "models"
Model 0 "Chancebox_Side_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
FrameIndex XZW1 A 0 0
}
Model "ChanceSideTier3"
{
Path "models"
Model 0 "Chancebox_Side_d.3d"
Skin 0 "Chancebox_Tier3.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
FrameIndex XZW1 A 0 0
}
Model "ChanceSideTier4"
{
Path "models"
Model 0 "Chancebox_Side_d.3d"
Skin 0 "Chancebox_Tier4.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
FrameIndex XZW1 A 0 0
}
Model "DroppedChanceboxTier1"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
// shake
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
// deploy
FrameIndex XZW2 A 0 8
FrameIndex XZW2 B 0 9
FrameIndex XZW2 C 0 10
FrameIndex XZW2 D 0 11
FrameIndex XZW2 E 0 12
FrameIndex XZW2 F 0 13
FrameIndex XZW2 G 0 14
FrameIndex XZW2 H 0 15
FrameIndex XZW2 I 0 16
FrameIndex XZW2 J 0 17
FrameIndex XZW2 K 0 18
FrameIndex XZW2 L 0 19
FrameIndex XZW2 M 0 20
FrameIndex XZW2 N 0 21
FrameIndex XZW2 O 0 22
FrameIndex XZW2 P 0 23
FrameIndex XZW2 Q 0 24
}
Model "DroppedChanceboxTier2"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier2.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
// shake
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
// deploy
FrameIndex XZW2 A 0 8
FrameIndex XZW2 B 0 9
FrameIndex XZW2 C 0 10
FrameIndex XZW2 D 0 11
FrameIndex XZW2 E 0 12
FrameIndex XZW2 F 0 13
FrameIndex XZW2 G 0 14
FrameIndex XZW2 H 0 15
FrameIndex XZW2 I 0 16
FrameIndex XZW2 J 0 17
FrameIndex XZW2 K 0 18
FrameIndex XZW2 L 0 19
FrameIndex XZW2 M 0 20
FrameIndex XZW2 N 0 21
FrameIndex XZW2 O 0 22
FrameIndex XZW2 P 0 23
FrameIndex XZW2 Q 0 24
}
Model "DroppedChanceboxTier3"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier3.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
// shake
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
// deploy
FrameIndex XZW2 A 0 8
FrameIndex XZW2 B 0 9
FrameIndex XZW2 C 0 10
FrameIndex XZW2 D 0 11
FrameIndex XZW2 E 0 12
FrameIndex XZW2 F 0 13
FrameIndex XZW2 G 0 14
FrameIndex XZW2 H 0 15
FrameIndex XZW2 I 0 16
FrameIndex XZW2 J 0 17
FrameIndex XZW2 K 0 18
FrameIndex XZW2 L 0 19
FrameIndex XZW2 M 0 20
FrameIndex XZW2 N 0 21
FrameIndex XZW2 O 0 22
FrameIndex XZW2 P 0 23
FrameIndex XZW2 Q 0 24
}
Model "DroppedChanceboxTier4"
{
Path "models"
Model 0 "Chancebox_d.3d"
Skin 0 "Chancebox_Tier4.png"
Scale 0.25 0.25 0.25
AngleOffset -90
ZOffset 16
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
// shake
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
// deploy
FrameIndex XZW2 A 0 8
FrameIndex XZW2 B 0 9
FrameIndex XZW2 C 0 10
FrameIndex XZW2 D 0 11
FrameIndex XZW2 E 0 12
FrameIndex XZW2 F 0 13
FrameIndex XZW2 G 0 14
FrameIndex XZW2 H 0 15
FrameIndex XZW2 I 0 16
FrameIndex XZW2 J 0 17
FrameIndex XZW2 K 0 18
FrameIndex XZW2 L 0 19
FrameIndex XZW2 M 0 20
FrameIndex XZW2 N 0 21
FrameIndex XZW2 O 0 22
FrameIndex XZW2 P 0 23
FrameIndex XZW2 Q 0 24
}

View file

@ -1,3 +1,33 @@
Model "FancyConfetti"
{
Model 0 "models/extra/Flat_d.3d"
Scale 0.003 0.003 0.003
ZOffset 1
USEACTORPITCH
USEACTORROLL
Skin 0 "models/goldmap.png"
FrameIndex XZW1 A 0 0
Skin 0 "models/blumap.png"
FrameIndex XZW1 B 0 0
Skin 0 "models/darkmap.png"
FrameIndex XZW1 C 0 0
Skin 0 "models/greenmap.png"
FrameIndex XZW1 D 0 0
Skin 0 "models/invincimap.png"
FrameIndex XZW1 E 0 0
Skin 0 "models/pinkmap.png"
FrameIndex XZW1 F 0 0
Skin 0 "models/purpmap.png"
FrameIndex XZW1 G 0 0
Skin 0 "models/ragemap.png"
FrameIndex XZW1 H 0 0
Skin 0 "models/redmap.png"
FrameIndex XZW1 I 0 0
Skin 0 "models/silvermap.png"
FrameIndex XZW1 J 0 0
}
Model "ReflectedBullet"
{
Path "models"

View file

@ -44,9 +44,9 @@ Model "SilverBullet"
Model 0 "SilverbulletPickup_d.3d"
SurfaceSkin 0 0 "Silverbullet.png"
SurfaceSkin 0 1 "SilverbulletAmmo.png"
Scale 0.24 0.24 0.24
Scale 0.25 0.25 0.25
AngleOffset 180
ZOffset 20
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0

View file

@ -4,7 +4,7 @@ Model "Wallbuster"
Model 0 "WallbusterPickup_d.3d"
Skin 0 "Wallbuster.png"
Scale 0.2 0.2 0.2
Scale 0.18 0.18 0.18
AngleOffset 180
ZOffset 28
ROTATING

View file

@ -5,10 +5,310 @@ Model "Ynykron"
Model 0 "YnykronPickup_d.3d"
SurfaceSkin 0 0 "Ynykron.png"
SurfaceSkin 0 1 "YnykronAmmo.png"
Scale 0.24 0.24 0.24
Scale 0.18 0.18 0.18
AngleOffset 180
ZOffset 24
ROTATING
FrameIndex XZW1 A 0 0
}
Model "Ynykron"
{
Path "models/extra"
Model 3 "Flat_d.3d"
Skin 3 "MortalMuz.png"
RollOffset 90
AngleOffset 90
Scale 0.3 0.3 0.3
Offset 32 -90 -8
FrameIndex XZWZ A 3 0
}
Model "Ynykron"
{
Path "models"
Model 2 "Ynykron1st_d.3d"
SurfaceSkin 2 5 "YnykronSmoke.png"
AngleOffset -90
Scale -0.005 0.0025 0.005
DONTCULLBACKFACES
// FireVent
FrameIndex XZWA J 2 36
FrameIndex XZWA K 2 37
FrameIndex XZWA L 2 38
FrameIndex XZWA M 2 39
FrameIndex XZWA N 2 40
FrameIndex XZWA O 2 41
FrameIndex XZWA P 2 42
FrameIndex XZWA Q 2 43
FrameIndex XZWA R 2 44
FrameIndex XZWA S 2 45
// DischargeVent
FrameIndex XZWA T 2 152
FrameIndex XZWA U 2 153
FrameIndex XZWA V 2 154
FrameIndex XZWA W 2 155
FrameIndex XZWA X 2 156
FrameIndex XZWA Y 2 157
FrameIndex XZWA Z 2 158 // DischargeVentStill / DischargeVentEnd
FrameIndex XZWB A 2 159
FrameIndex XZWB B 2 160
FrameIndex XZWB C 2 161
// ReadyVent
FrameIndex XZWB D 2 216
FrameIndex XZWB E 2 217
FrameIndex XZWB F 2 218
FrameIndex XZWB G 2 219
FrameIndex XZWB H 2 220
FrameIndex XZWB I 2 221
FrameIndex XZWB J 2 222
FrameIndex XZWB K 2 223
FrameIndex XZWB L 2 224
FrameIndex XZWB M 2 225
}
Model "Ynykron"
{
Path "models"
Model 1 "Ynykron1st_d.3d"
SurfaceSkin 1 0 "DemoTags.png"
SurfaceSkin 1 1 "DemoArms.png"
SurfaceSkin 1 2 "DemoSoft.png"
SurfaceSkin 1 3 "Ynykron.png"
SurfaceSkin 1 4 "YnykronAmmo.png"
AngleOffset -90
Scale -0.005 0.0025 0.005
// Still / Deselect
FrameIndex XZW2 A 1 0
FrameIndex XZW2 B 1 1
FrameIndex XZW2 C 1 2
FrameIndex XZW2 D 1 3
FrameIndex XZW2 E 1 4
FrameIndex XZW2 F 1 5
FrameIndex XZW2 G 1 6
FrameIndex XZW2 H 1 7
FrameIndex XZW2 I 1 8
FrameIndex XZW2 J 1 9
FrameIndex XZW2 K 1 10
FrameIndex XZW2 L 1 11 // Select
FrameIndex XZW2 M 1 12
FrameIndex XZW2 N 1 13
FrameIndex XZW2 O 1 14
FrameIndex XZW2 P 1 15
FrameIndex XZW2 Q 1 16
FrameIndex XZW2 R 1 17
FrameIndex XZW2 S 1 18
FrameIndex XZW2 T 1 19
FrameIndex XZW2 U 1 20
FrameIndex XZW2 V 1 21
FrameIndex XZW2 W 1 22
FrameIndex XZW2 X 1 23
FrameIndex XZW2 Y 1 24
FrameIndex XZW2 Z 1 25
FrameIndex XZW3 A 1 26
// Prepare
FrameIndex XZW3 B 1 28
FrameIndex XZW3 C 1 29
FrameIndex XZW3 D 1 30
FrameIndex XZW3 E 1 31
FrameIndex XZW3 F 1 32
FrameIndex XZW3 G 1 33
FrameIndex XZW3 H 1 34
FrameIndex XZW3 I 1 35
// Fire
FrameIndex XZW3 J 1 37
FrameIndex XZW3 K 1 38
FrameIndex XZW3 L 1 39
FrameIndex XZW3 M 1 40
FrameIndex XZW3 N 1 41
FrameIndex XZW3 O 1 42
FrameIndex XZW3 P 1 43
FrameIndex XZW3 Q 1 44
FrameIndex XZW3 R 1 45
// Unload Normal
FrameIndex XZW3 S 1 47
FrameIndex XZW3 T 1 48
FrameIndex XZW3 U 1 49
FrameIndex XZW3 V 1 50
FrameIndex XZW3 W 1 51
FrameIndex XZW3 X 1 52
FrameIndex XZW3 Y 1 53
FrameIndex XZW3 Z 1 54
FrameIndex XZW4 A 1 55
FrameIndex XZW4 B 1 56
FrameIndex XZW4 C 1 57
FrameIndex XZW4 D 1 58
FrameIndex XZW4 E 1 59
FrameIndex XZW4 F 1 60
FrameIndex XZW4 G 1 61
FrameIndex XZW4 H 1 62
FrameIndex XZW4 I 1 63
FrameIndex XZW4 J 1 64
FrameIndex XZW4 K 1 65
FrameIndex XZW4 L 1 66
FrameIndex XZW4 M 1 67
FrameIndex XZW4 N 1 68
FrameIndex XZW4 O 1 69
FrameIndex XZW4 P 1 70 // Load Normal
FrameIndex XZW4 Q 1 71
FrameIndex XZW4 R 1 72
FrameIndex XZW4 S 1 73
FrameIndex XZW4 T 1 74
FrameIndex XZW4 U 1 75
FrameIndex XZW4 V 1 76
FrameIndex XZW4 W 1 77
FrameIndex XZW4 X 1 78
FrameIndex XZW4 Y 1 79
FrameIndex XZW4 Z 1 80
FrameIndex XZW5 A 1 81
FrameIndex XZW5 B 1 82
FrameIndex XZW5 C 1 83
FrameIndex XZW5 D 1 84
FrameIndex XZW5 E 1 85
FrameIndex XZW5 F 1 86
FrameIndex XZW5 G 1 87
FrameIndex XZW5 H 1 88
FrameIndex XZW5 I 1 89
FrameIndex XZW5 J 1 90
FrameIndex XZW5 K 1 91
FrameIndex XZW5 L 1 92
FrameIndex XZW5 M 1 93
FrameIndex XZW5 N 1 94
FrameIndex XZW5 O 1 95
// Unload Flipped
FrameIndex XZW5 P 1 97 // Flip Still (for jump cut)
FrameIndex XZW5 Q 1 98
FrameIndex XZW5 R 1 99
FrameIndex XZW5 S 1 100
FrameIndex XZW5 T 1 101
FrameIndex XZW5 U 1 102
FrameIndex XZW5 V 1 103
FrameIndex XZW5 W 1 104
FrameIndex XZW5 X 1 105
FrameIndex XZW5 Y 1 106
FrameIndex XZW5 Z 1 107
FrameIndex XZW6 A 1 108
FrameIndex XZW6 B 1 109
FrameIndex XZW6 C 1 110
FrameIndex XZW6 D 1 111
FrameIndex XZW6 E 1 112
FrameIndex XZW6 F 1 113
FrameIndex XZW6 G 1 114
FrameIndex XZW6 H 1 115
FrameIndex XZW6 I 1 116
FrameIndex XZW6 J 1 117
FrameIndex XZW6 K 1 118
FrameIndex XZW6 L 1 119
FrameIndex XZW6 M 1 120
FrameIndex XZW6 N 1 121 // Load Flipped
FrameIndex XZW6 O 1 122
FrameIndex XZW6 P 1 123
FrameIndex XZW6 Q 1 124
FrameIndex XZW6 R 1 125
FrameIndex XZW6 S 1 126
FrameIndex XZW6 T 1 127
FrameIndex XZW6 U 1 128
FrameIndex XZW6 V 1 129
FrameIndex XZW6 W 1 130
FrameIndex XZW6 X 1 131
FrameIndex XZW6 Y 1 132
FrameIndex XZW6 Z 1 133
FrameIndex XZW7 A 1 134
FrameIndex XZW7 B 1 135
FrameIndex XZW7 C 1 136
FrameIndex XZW7 D 1 137
FrameIndex XZW7 E 1 138
FrameIndex XZW7 F 1 139
FrameIndex XZW7 G 1 140
FrameIndex XZW7 H 1 141
FrameIndex XZW7 I 1 142
FrameIndex XZW7 J 1 143
FrameIndex XZW7 K 1 144
FrameIndex XZW7 L 1 145
FrameIndex XZW7 M 1 146
// Discharge
FrameIndex XZW7 N 1 149
FrameIndex XZW7 O 1 150
FrameIndex XZW7 P 1 151
FrameIndex XZW7 Q 1 152
FrameIndex XZW7 R 1 153
FrameIndex XZW7 S 1 154
FrameIndex XZW7 T 1 155
FrameIndex XZW7 U 1 156
FrameIndex XZW7 V 1 157
FrameIndex XZW7 W 1 158 // DischargeStill / DischargeEnd
FrameIndex XZW7 X 1 159
FrameIndex XZW7 Y 1 160
FrameIndex XZW7 Z 1 161
// Idle
FrameIndex XZW8 A 1 163
FrameIndex XZW8 B 1 164
FrameIndex XZW8 C 1 165
FrameIndex XZW8 D 1 166
FrameIndex XZW8 E 1 167
FrameIndex XZW8 F 1 168
FrameIndex XZW8 G 1 169
FrameIndex XZW8 H 1 170
FrameIndex XZW8 I 1 171
FrameIndex XZW8 J 1 172
FrameIndex XZW8 K 1 173
FrameIndex XZW8 L 1 174
FrameIndex XZW8 M 1 175
FrameIndex XZW8 N 1 176
FrameIndex XZW8 O 1 177
FrameIndex XZW8 P 1 178
FrameIndex XZW8 Q 1 179
FrameIndex XZW8 R 1 180
FrameIndex XZW8 S 1 181
FrameIndex XZW8 T 1 182
FrameIndex XZW8 U 1 183
FrameIndex XZW8 V 1 184
FrameIndex XZW8 W 1 185
FrameIndex XZW8 X 1 186
// Melee
FrameIndex XZW8 Y 1 188
FrameIndex XZW8 Z 1 189
FrameIndex XZW9 A 1 190
FrameIndex XZW9 B 1 191
FrameIndex XZW9 C 1 192
FrameIndex XZW9 D 1 193
FrameIndex XZW9 E 1 194
FrameIndex XZW9 F 1 195
FrameIndex XZW9 G 1 196
FrameIndex XZW9 H 1 197
FrameIndex XZW9 I 1 198
FrameIndex XZW9 J 1 199
FrameIndex XZW9 K 1 200
FrameIndex XZW9 L 1 201
FrameIndex XZW9 M 1 202
FrameIndex XZW9 N 1 203
FrameIndex XZW9 O 1 204
FrameIndex XZW9 P 1 205
FrameIndex XZW9 Q 1 206
FrameIndex XZW9 R 1 207
FrameIndex XZW9 S 1 208
FrameIndex XZW9 T 1 209
FrameIndex XZW9 U 1 210
FrameIndex XZW9 V 1 211
FrameIndex XZW9 W 1 212
FrameIndex XZW9 X 1 213
FrameIndex XZW9 Y 1 214
FrameIndex XZW9 Z 1 215
// Ready
FrameIndex XZWA A 1 217
FrameIndex XZWA B 1 218
FrameIndex XZWA C 1 219
FrameIndex XZWA D 1 220
FrameIndex XZWA E 1 221
FrameIndex XZWA F 1 222
FrameIndex XZWA G 1 223
FrameIndex XZWA H 1 224
FrameIndex XZWA I 1 225
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

View file

@ -1,100 +1,3 @@
Explodium Gun / Candy Gun:
X down/select
X fire anim
X reload
X cock
X explosive reload
X "check the chamber" idle anim
X "spin" idle anim
X "check out gun" idle anim
X melee punch
X candygun tertiary
Deep Impact:
X down/select
X fire anim
X altfire anim
X pump
X "check out gun" idle anim
X melee bash
Pusher:
X down/select
X fire anim
X altfire anim
X altfire slip
X "check out gun" idle anim
X melee bash
Spreadgun:
X down/select
X fire anim
X reload
X "check out gun" idle anim
X melee punch
Wallbuster:
X down/select
X fire anim
X altfire anim
X tertiary fire anim
X reload
X melee bash
Eviscerator:
X down/select
X fire anim
X altfire anim
X toggle spread
X "check out gun" idle anim
X melee bash
Hellblazer:
X down/select
X fire anim
X altfire anim
X reload
X "wipe glass" idle anim
X melee bash
Sparkster:
X down/select
X fire anim
X altfire anim
X tertiary fire anim
X reload
X melee bash
X "check out gun" idle anim
Silver bullet:
X down/select
X fire anim
X cock
X zoom
X reload
X "check out gun" idle anim
X melee bash
Ynykron:
X down/select
X charge anim
X fire anim
X flip anim
X reload
X discharge/vent anims
X "check out gun" idle anim
X melee bash
Demolitionist:
- titlemap animations
@ -105,7 +8,3 @@ Demolitionist:
- more gestures
- blow kiss
- dedicated swim animation set
X extra weapon animations
X melee
X reload
X check gun

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/YnykronSmoke.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View file

@ -0,0 +1,9 @@
vec4 ProcessTexel()
{
vec3 base = getTexel(vTexCoord.st).rgb;
vec2 scroll = vTexCoord.st*.5+vec2(.03,2.5)*timer;
float smk = texture(smoketex,scroll).x;
scroll = vTexCoord.st*.9+vec2(-.03,2.4)*timer;
smk *= texture(smoketex,scroll).x;
return vec4(base*smk,1.);
}

View file

@ -766,16 +766,24 @@ $limit candygun/hit 32
$limit candygun/maghit 32
$limit candygun/gunhit 32
chancebox/explode1 sounds/items/lootexpl1.ogg
chancebox/explode2 sounds/items/lootexpl2.ogg
chancebox/explode3 sounds/items/lootexpl3.ogg
$random chancebox/explode { chancebox/explode1 chancebox/explode2 chancebox/explode3 }
chancebox/land1 sounds/items/lootland1.ogg
chancebox/land2 sounds/items/lootland2.ogg
chancebox/land3 sounds/items/lootland3.ogg
$random chancebox/land { chancebox/land1 chancebox/land2 chancebox/land3 }
chancebox/drumroll sounds/DRUMROLL.ogg
chancebox/tada sounds/TADA.ogg
ynykron/select sounds/ynykron/mc_select.ogg
ynykron/deselect sounds/ynykron/mc_deselect.ogg
ynykron/idle sounds/ynykron/mc_idle.ogg
ynykron/ready sounds/ynykron/mc_ready.ogg
ynykron/latch sounds/ynykron/mc_latch.ogg
ynykron/ventopen sounds/ynykron/mc_ventopen.ogg
ynykron/ventclose sounds/ynykron/mc_ventclose.ogg
ynykron/puff sounds/ynykron/mc_puff.ogg
ynykron/puffstart sounds/ynykron/mc_puffstart.ogg
ynykron/puffing sounds/ynykron/mc_puffing.ogg
ynykron/puffend sounds/ynykron/mc_puffend.ogg
ynykron/meleestart sounds/ynykron/mc_meleestart.ogg
ynykron/meleeend sounds/ynykron/mc_meleeend.ogg
ynykron/checkout sounds/ynykron/mc_checkout.ogg
ynykron/fire sounds/ynykron/mc_fire.ogg
ynykron/altfire sounds/ynykron/mc_altfire.ogg
ynykron/unload sounds/ynykron/mc_unload.ogg
ynykron/load sounds/ynykron/mc_load.ogg
misc/secret sounds/menu/findsecret.ogg
misc/keytry sounds/menu/failuse.ogg
@ -793,6 +801,8 @@ misc/chat2 sounds/menu/chatsnd.ogg
Chat sounds/menu/chatsnd.ogg // hexen what the fuck
misc/sundowner sounds/SUNDOWNER.ogg
misc/emone sounds/EMONE.ogg
misc/drumroll sounds/DRUMROLL.ogg
misc/tada sounds/TADA.ogg
misc/gibber1 sounds/general/Gib1.ogg
misc/gibber2 sounds/general/Gib2.ogg
misc/gibber3 sounds/general/Gib3.ogg

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sounds/ynykron/mc_idle.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
sounds/ynykron/mc_ready.ogg Normal file

Binary file not shown.

Binary file not shown.

View file

@ -32,7 +32,6 @@ version "4.4"
#include "zscript/swwm_armor.zsc"
#include "zscript/swwm_powerup.zsc"
#include "zscript/swwm_ammo.zsc"
#include "zscript/swwm_chancebox.zsc"
#include "zscript/swwm_jackhammer.zsc"
#include "zscript/swwm_deepdarkimpact.zsc"
#include "zscript/swwm_splode.zsc"

View file

@ -460,7 +460,7 @@ Class CorpseFallTracker : Thinker
// play fall thumps
bool isflying = ((mybody.pos.z>mybody.floorz)&&mybody.TestMobjZ());
if ( wasflying && !isflying && (lastvelz < -10) )
mybody.A_StartSound("misc/bodythump",CHAN_FOOTSTEP,CHANF_OVERLAP);
mybody.A_StartSound("misc/bodythump",CHAN_DAMAGE,CHANF_OVERLAP);
wasflying = isflying;
lastvelz = mybody.vel.z;
// wait until body is dead on floor and at the last state of animation

View file

@ -637,8 +637,8 @@ Class Wallbuster : SWWMWeapon
{
t.HitList[i].HitActor.TraceBleed(realdmg,self);
t.HitList[i].HitActor.SpawnBlood(t.HitList[i].HitLocation,atan2(t.HitList[i].x.y,t.HitList[i].x.x)+180,realdmg);
if ( large ) t.HitList[i].HitActor.A_StartSound("spreadgun/slugf",CHAN_FOOTSTEP,CHANF_OVERLAP,1.,2.);
else t.HitList[i].HitActor.A_StartSound("spreadgun/pelletf",CHAN_FOOTSTEP,CHANF_OVERLAP,.4,4.);
if ( large ) t.HitList[i].HitActor.A_StartSound("spreadgun/slugf",CHAN_DAMAGE,CHANF_OVERLAP,1.,2.);
else t.HitList[i].HitActor.A_StartSound("spreadgun/pelletf",CHAN_DAMAGE,CHANF_OVERLAP,.4,4.);
}
}
if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HasHitSky) && (t.Results.HitType != TRACE_HitActor) )

View file

@ -1,516 +0,0 @@
// gacha nonsense
Class Chancebox : Inventory abstract
{
Class<Actor> dropclass;
Property DropClass : dropclass;
override Inventory CreateCopy( Actor other )
{
// additional lore
SWWMLoreLibrary.Add(other.player,"Lootbox");
return Super.CreateCopy(other);
}
override bool Use( bool pickup )
{
if ( pickup ) return false;
Console.Printf("\cgTHESE ITEMS ARE NOT YET FULLY IMPLEMENTED\c-");
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(Owner.pitch,Owner.angle,Owner.roll);
Vector3 origin = level.Vec3Offset(Owner.Vec2OffsetZ(0,0,Owner.player.viewz),x*20-z*8);
if ( !level.IsPointInLevel(origin) ) return false;
let b = Spawn(dropclass,origin);
if ( !b ) return false;
if ( !b.TestMobjLocation() )
{
b.Destroy();
return false;
}
b.angle = Owner.angle-180;
b.vel = x*10;
b.vel.z += 2.;
return true;
}
Default
{
+INVENTORY.INVBAR;
+FLOATBOB;
Inventory.MaxAmount 32;
Inventory.InterHubAmount 32;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
// top side of chancebox, shoots upwards
Class ChanceTop : Actor abstract
{
Default
{
Radius 16;
Height 4;
PROJECTILE;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
vel = (0,0,20);
}
States
{
Spawn:
XZW1 A 1
{
double magvel = vel.length();
if ( magvel > 0. )
{
magvel = min(60,magvel*1.2);
vel = vel.unit()*magvel;
}
}
Wait;
Death:
TNT1 A 1 A_SpawnItemEx("ExplodiumBulletImpact");
Stop;
}
}
// left/right side of chancebox, shoots forward
Class ChanceSide : Actor abstract
{
Default
{
Radius 16;
Height 32;
PROJECTILE;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
vel = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch))*20;
}
States
{
Spawn:
XZW1 A 1
{
double magvel = vel.length();
if ( magvel > 0. )
{
magvel = min(60,magvel*1.2);
vel = vel.unit()*magvel;
}
}
Wait;
Death:
TNT1 A 1 A_SpawnItemEx("ExplodiumBulletImpact");
Stop;
}
}
Class ChanceTopTier1 : ChanceTop {}
Class ChanceTopTier2 : ChanceTop {}
Class ChanceTopTier3 : ChanceTop {}
Class ChanceTopTier4 : ChanceTop {}
Class ChanceSideTier1 : ChanceSide {}
Class ChanceSideTier2 : ChanceSide {}
Class ChanceSideTier3 : ChanceSide {}
Class ChanceSideTier4 : ChanceSide {}
Class DroppedChancebox : Actor abstract
{
Class<Actor> topclass, sideclass;
Property TopClass : topclass;
Property SideClass : sideclass;
double rang;
action void A_DropSomething()
{
int num = 0;
// first pass, count up the max rng number
for ( DropItem d=GetDropItems(); d; d=d.Next )
num += d.Probability;
// second pass, pick the item
int choice = Random[Chancebox](0,num);
int num2 = 0;
for ( DropItem d=GetDropItems(); d; d=d.Next )
{
num2 += d.Probability;
if ( num2 < choice ) continue;
let thedrop = Spawn(d.Name,pos);
thedrop.angle = angle;
break;
}
int numpt = Random[ExploS](16,32);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](.3,8);
let s = Spawn("SWWMSmoke",Vec3Offset(0,0,16));
s.vel = pvel;
s.SetShade(FillColor*Random[ExploS](64,85));
s.special1 = Random[ExploS](1,4);
s.alpha *= .4;
s.scale *= 2.4;
}
}
action void A_Confetti()
{
A_StartSound("chancebox/tada",CHAN_ITEM);
double ang, pt;
int numpt = Random[ExploS](64,128);
for ( int i=0; i<numpt; i++ )
{
ang = FRandom[ExploS](0,360);
pt = FRandom[ExploS](-90,30);
let c = Spawn("FancyConfetti",Vec3Offset(0,0,16));
c.vel = (cos(pt)*cos(ang),cos(pt)*sin(ang),-sin(pt))*FRandom[ExploS](2,8);
}
}
Default
{
Radius 16;
Height 32;
Gravity .7;
+CANNOTPUSH;
+MOVEWITHSECTOR;
+BLOCKASPLAYER;
+ROLLSPRITE;
}
States
{
Spawn:
XZW1 A 1 A_JumpIf(pos.z<=floorz,1);
Wait;
XZW1 A 35
{
A_Stop();
A_StartSound("chancebox/land",CHAN_BODY);
rang = angle;
}
XZW1 A 0 A_StartSound("chancebox/drumroll",CHAN_WEAPON);
XZW1 A 1
{
angle = rang+FRandom[Chancebox](-5,5);
pitch = FRandom[Chancebox](-5,5);
roll = FRandom[Chancebox](-5,5);
special1++;
return A_JumpIf(special1>40,"BlowUp");
}
Wait;
BlowUp:
XZW2 A 1
{
A_QuakeEx(2,2,2,9,0,500,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollIntensity:.2);
A_StartSound("chancebox/explode",CHAN_VOICE);
angle = rang;
pitch = roll = 0;
let t = Spawn(TopClass,Vec3Offset(0,0,32));
t.angle = angle;
let s1 = Spawn(SideClass,level.Vec3Offset(pos,(RotateVector((16,0),angle+90),0)));
s1.angle = angle+90;
let s2 = Spawn(SideClass,level.Vec3Offset(pos,(RotateVector((16,0),angle-90),0)));
s2.angle = angle-90;
A_DropSomething();
}
XZW2 BCDEFGHIJKLMNO 1;
XZW2 P -1 A_Confetti();
Stop;
Dummy:
XZW1 BCDEFG -1; // these won't actually be used, found a better way
Stop;
}
}
Class DroppedChanceboxTier1 : DroppedChancebox
{
Default
{
DroppedChancebox.TopClass "ChanceTopTier1";
DroppedChancebox.SideClass "ChanceSideTier1";
StencilColor "01 01 03";
DropItem "ChanceDropShells1", 6;
DropItem "ChanceDropShells2", 6;
DropItem "ChanceDropShells3", 5;
DropItem "ChanceDropShells4", 4;
DropItem "ChanceDropShells5", 3;
DropItem "ChanceDropShells6", 2;
}
}
Class DroppedChanceboxTier2 : DroppedChancebox
{
Default
{
DroppedChancebox.TopClass "ChanceTopTier2";
DroppedChancebox.SideClass "ChanceSideTier2";
StencilColor "01 03 01";
}
}
Class DroppedChanceboxTier3 : DroppedChancebox
{
Default
{
DroppedChancebox.TopClass "ChanceTopTier3";
DroppedChancebox.SideClass "ChanceSideTier3";
StencilColor "03 01 01";
}
}
Class DroppedChanceboxTier4 : DroppedChancebox
{
Default
{
DroppedChancebox.TopClass "ChanceTopTier4";
DroppedChancebox.SideClass "ChanceSideTier4";
StencilColor "03 03 01";
}
}
Class ChanceboxTier1 : Chancebox
{
Default
{
Tag "$T_LOOTBOX1";
Inventory.PickupMessage "$T_LOOTBOX1";
Inventory.Icon "graphics/HUD/Icons/I_Chancebox1.png";
Stamina 1500;
Chancebox.DropClass "DroppedChanceboxTier1";
}
}
Class ChanceboxTier2 : Chancebox
{
Default
{
Tag "$T_LOOTBOX2";
Inventory.PickupMessage "$T_LOOTBOX2";
Inventory.Icon "graphics/HUD/Icons/I_Chancebox2.png";
Stamina 9000;
Chancebox.DropClass "DroppedChanceboxTier2";
}
}
Class ChanceboxTier3 : Chancebox
{
Default
{
Tag "$T_LOOTBOX3";
Inventory.PickupMessage "$T_LOOTBOX3";
Inventory.Icon "graphics/HUD/Icons/I_Chancebox3.png";
Stamina 60000;
Chancebox.DropClass "DroppedChanceboxTier3";
}
}
Class ChanceboxTier4 : Chancebox
{
Default
{
Tag "$T_LOOTBOX4";
Inventory.PickupMessage "$T_LOOTBOX4";
Inventory.Icon "graphics/HUD/Icons/I_Chancebox4.png";
Stamina 1500000;
Chancebox.DropClass "DroppedChanceboxTier4";
}
}
Class FancyConfetti : Actor
{
int deadtimer;
double anglevel, pitchvel, rollvel;
Default
{
Radius 2;
Height 2;
+NOBLOCKMAP;
+DROPOFF;
+MOVEWITHSECTOR;
+THRUACTORS;
+NOTELEPORT;
+DONTSPLASH;
+INTERPOLATEANGLES;
+ROLLSPRITE;
+ROLLCENTER;
+SLIDESONWALLS;
Gravity 0.05;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
deadtimer = 0;
anglevel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
pitchvel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
rollvel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
if ( bAMBUSH ) frame = 0;
else frame = Random[Junk](0,9);
scale *= Frandom[Junk](0.8,1.2);
}
override void Tick()
{
Super.Tick();
if ( isFrozen() ) return;
vel.xy *= 0.98;
if ( vel.z > 0 ) vel.z *= 0.98;
if ( InStateSequence(CurState,ResolveState("Death")) )
{
deadtimer++;
if ( deadtimer > 300 ) A_FadeOut(0.05);
return;
}
}
States
{
Spawn:
XZW1 # 1
{
angle += anglevel;
pitch += pitchvel;
roll += rollvel;
return A_JumpIf(pos.z<=floorz,"Death");
}
Loop;
Death:
XZW1 # -1
{
A_Stop();
pitch = roll = 0;
}
Stop;
Dummy:
XZW1 ABCDEFGHIJ -1;
Stop;
}
}
// Chancebox drops
Class ChanceDrop : Actor abstract
{
Default
{
StencilColor "03 03 03";
+NOBLOCKMAP;
+NOGRAVITY;
}
action void A_DropTheGoods()
{
int num = 0;
for ( DropItem d=GetDropItems(); d; d=d.Next )
{
if ( Random[Chancebox](0,255) > d.Probability ) continue;
Actor i = Spawn(d.Name,pos);
i.bDROPPED = true;
i.bNOGRAVITY = false;
i.vel.z = FRandom[Chancebox](2,4);
switch ( num )
{
case 0:
i.vel.xy = (0,0);
break;
case 1:
i.vel.xy = RotateVector((FRandom[Chancebox](3,6),0),angle);
break;
case 2:
i.vel.xy = RotateVector((FRandom[Chancebox](3,6),0),angle+90);
break;
case 3:
i.vel.xy = RotateVector((FRandom[Chancebox](3,6),0),angle-90);
break;
case 4:
i.vel.xy = RotateVector((FRandom[Chancebox](3,6),0),angle+180);
break;
default:
i.vel.xy = RotateVector((FRandom[Chancebox](3,6),0),FRandom[Chancebox](0,360));
break;
}
num++;
if ( i is 'Inventory' ) Inventory(i).bTOSSED = true;
}
}
States
{
Spawn:
TNT1 A 1 NoDelay A_DropTheGoods();
Stop;
}
}
Class ChanceDropShells1 : ChanceDrop
{
Default
{
DropItem "RedShell2", 256;
DropItem "RedShell4", 224;
DropItem "RedShell4", 224;
DropItem "RedShell8", 192;
DropItem "RedShell8", 192;
}
}
Class ChanceDropShells2 : ChanceDrop
{
Default
{
DropItem "GreenShell2", 256;
DropItem "GreenShell4", 192;
DropItem "GreenShell4", 192;
DropItem "GreenShell8", 160;
DropItem "GreenShell8", 160;
}
}
Class ChanceDropShells3 : ChanceDrop
{
Default
{
DropItem "BlueShell2", 256;
DropItem "BlueShell4", 160;
DropItem "BlueShell4", 160;
DropItem "BlueShell8", 128;
DropItem "BlueShell8", 128;
}
}
Class ChanceDropShells4 : ChanceDrop
{
Default
{
DropItem "PurpleShell2", 256;
DropItem "PurpleShell2", 128;
DropItem "PurpleShell2", 128;
DropItem "PurpleShell4", 96;
DropItem "PurpleShell4", 96;
}
}
Class ChanceDropShells5 : ChanceDrop
{
Default
{
DropItem "WhiteShell", 256;
DropItem "WhiteShell", 128;
DropItem "WhiteShell", 128;
DropItem "WhiteShell2", 96;
DropItem "WhiteShell2", 96;
}
}
Class ChanceDropShells6 : ChanceDrop
{
Default
{
DropItem "BlackShell", 256;
DropItem "BlackShell", 64;
DropItem "BlackShell", 64;
}
}
Class ChanceDropShells7 : ChanceDrop
{
Default
{
DropItem "GoldShell", 256;
}
}

View file

@ -2,14 +2,16 @@
enum ESWWMGZChannels
{
CHAN_YOUDONEFUCKEDUP = 63200, // exception handler
CHAN_DEMOVOICE = 63201, // demolitionist voices
CHAN_FOOTSTEP = 63202, // footstep sounds and others
CHAN_DEMOVOICE = 63201, // demolitionist voices
CHAN_FOOTSTEP = 63202, // footstep sounds and others
CHAN_WEAPONEXTRA = 63203, // additional weapon sounds (usually loops)
CHAN_POWERUP = 63204, // powerup sounds
CHAN_POWERUP = 63204, // powerup sounds
CHAN_POWERUPEXTRA = 63205, // additional powerup sounds
CHAN_JETPACK = 63206, // jetpack sound
CHAN_ITEMEXTRA = 63207, // additional item sounds
CHAN_AMBEXTRA = 63208 // player ambience when submerged
CHAN_JETPACK = 63206, // jetpack sound
CHAN_ITEMEXTRA = 63207, // additional item sounds
CHAN_WEAPONEXTRA2 = 63208, // additional weapon sound slot
CHAN_DAMAGE = 63209, // used for impact/hit sounds
CHAN_AMBEXTRA = 63210 // player ambience when submerged
};
// Misc. Utility code
@ -1419,6 +1421,75 @@ Class SWWMChip : Actor
}
}
Class FancyConfetti : Actor
{
int deadtimer;
double anglevel, pitchvel, rollvel;
Default
{
Radius 2;
Height 2;
+NOBLOCKMAP;
+DROPOFF;
+MOVEWITHSECTOR;
+THRUACTORS;
+NOTELEPORT;
+DONTSPLASH;
+INTERPOLATEANGLES;
+ROLLSPRITE;
+ROLLCENTER;
+SLIDESONWALLS;
Gravity 0.05;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
deadtimer = 0;
anglevel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
pitchvel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
rollvel = FRandom[Junk](3,12)*RandomPick[Junk](-1,1);
if ( bAMBUSH ) frame = 0;
else frame = Random[Junk](0,9);
scale *= Frandom[Junk](0.8,1.2);
}
override void Tick()
{
Super.Tick();
if ( isFrozen() ) return;
vel.xy *= 0.98;
if ( vel.z > 0 ) vel.z *= 0.98;
if ( InStateSequence(CurState,ResolveState("Death")) )
{
deadtimer++;
if ( deadtimer > 300 ) A_FadeOut(0.05);
return;
}
}
States
{
Spawn:
XZW1 # 1
{
angle += anglevel;
pitch += pitchvel;
roll += rollvel;
return A_JumpIf(pos.z<=floorz,"Death");
}
Loop;
Death:
XZW1 # -1
{
A_Stop();
pitch = roll = 0;
}
Stop;
Dummy:
XZW1 ABCDEFGHIJ -1;
Stop;
}
}
Class SWWMNothing : Actor
{
States

View file

@ -3,24 +3,122 @@
Class Ynykron : SWWMWeapon
{
transient ui TextureID WeaponBox, ChargeBar[2], BoxSide[2];
transient ui Font TewiFont;
transient ui DynamicValueInterpolator ChargeInter;
enum EChargeState
{
CS_IDLE,
CS_CHARGING,
CS_READY,
CS_DISCHARGING
};
int chargestate;
double chargelevel;
bool inverted;
double ventalpha, ventfade;
int ventcooldown;
int clipcount;
Property ClipCount : clipcount;
// leave these while it's still unimplemented
override void DrawWeapon( double TicFrac, double bx, double by, Vector2 hs, Vector2 ss )
{
if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/YnykronDisplay.png",TexMan.Type_Any);
if ( !ChargeBar[0] ) ChargeBar[0] = TexMan.CheckForTexture("graphics/HUD/YnykronBarA.png",TexMan.Type_Any);
if ( !ChargeBar[1] ) ChargeBar[1] = TexMan.CheckForTexture("graphics/HUD/YnykronBarB.png",TexMan.Type_Any);
if ( !BoxSide[0] ) BoxSide[0] = TexMan.CheckForTexture("graphics/HUD/YnykronSideA.png",TexMan.Type_Any);
if ( !BoxSide[1] ) BoxSide[1] = TexMan.CheckForTexture("graphics/HUD/YnykronSideB.png",TexMan.Type_Any);
if ( !TewiFont ) TewiFont = Font.GetFont('TewiShaded');
Screen.DrawTexture(WeaponBox,false,bx-33,by-44,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
int chg = clamp(ChargeInter?ChargeInter.GetValue():int(chargelevel*10),0,400);
int ct = int(((by-2)-chg/10.)*hs.y);
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-30,by-16,String.Format("%d",Ammo1.Amount),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
Screen.DrawTexture(BoxSide[inverted],false,bx-23,by-31,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,clipcount?Color(0,0,0,0):Color(128,0,0,0));
Screen.DrawTexture(ChargeBar[inverted],false,bx-6,by-42,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(chargestate==CS_READY)?Color(int(clamp(sin((level.maptime+TicFrac)*8)*40+24,0.,64.)),255,255,255):Color(0,0,0,0),DTA_ClipTop,ct);
}
override void HudTick()
{
if ( !ChargeInter ) ChargeInter = DynamicValueInterpolator.Create(int(chargelevel*10),.5,1,400);
ChargeInter.Update(int(chargelevel*10));
}
override bool ReportHUDAmmo()
{
return false;
if ( clipcount > 0 ) return true;
return Super.ReportHUDAmmo();
}
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return false;
if ( sv_infiniteammo || Owner.FindInventory('PowerInfiniteAmmo',true) ) return true;
if ( (fireMode == PrimaryFire) || (fireMode == AltFire) )
return ((clipcount > 0) || (Ammo1.Amount > 0));
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
}
override void AttachToOwner( Actor other )
override void Travelled()
{
Super.AttachToOwner(other);
if ( other.player == players[consoleplayer] )
Console.Printf("\cgYNYKRON ARTIFACT NOT IMPLEMENTED\c-");
Super.Travelled();
if ( Owner.player && (Owner.player.Readyweapon == self) )
{
Owner.A_StartSound("ynykron/idle",CHAN_WEAPONEXTRA,CHANF_LOOPING,.3,4.);
if ( chargestate > CS_IDLE )
Owner.A_StartSound("ynykron/ready",CHAN_WEAPONEXTRA2,CHANF_LOOPING,(.025*chargelevel)**3.,2.);
}
}
action void A_YnykronFire()
{
A_StopSound(CHAN_WEAPONEXTRA2);
A_SWWMFlash();
A_Overlay(PSP_WEAPON+1,"FireSmoke");
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
A_OverlayAlpha(PSP_WEAPON+1,0.);
invoker.chargestate = CS_IDLE;
invoker.clipcount = 0;
}
override void DoEffect()
{
Super.DoEffect();
if ( chargestate == CS_IDLE ) chargelevel = 0.;
else if ( chargestate == CS_CHARGING )
{
chargelevel = min(chargelevel*0.997+.16,40.);
if ( chargelevel >= 40. )
{
if ( (Owner.player.ReadyWeapon != self) && (Owner.player == players[consoleplayer]) )
Console.Printf(StringTable.Localize("$SWWM_YNYKRONREADY"));
chargestate = CS_READY;
ventcooldown = 0;
}
if ( Owner.player.ReadyWeapon == self )
Owner.A_SoundVolume(CHAN_WEAPONEXTRA2,(.025*chargelevel)**3.);
}
if ( Owner.player.ReadyWeapon != self ) return;
let pspm = Owner.player.FindPSprite(PSP_WEAPON);
if ( pspm )
{
double shiver = (chargelevel*.025)**2.;
pspm.x = FRandom[Shivers](-1.,1.)*shiver;
pspm.y = 32+FRandom[Shivers](-1.,1.)*shiver;
}
let psp = Owner.player.FindPSprite(PSP_WEAPON+1);
if ( !psp ) return;
ventalpha = clamp(ventalpha+ventfade,0.,1.);
psp.alpha = ventalpha;
if ( chargestate == CS_DISCHARGING )
{
chargelevel = max(chargelevel*1.005-.24,0.);
if ( chargelevel <= 0. ) chargestate = CS_IDLE;
if ( Owner.player.ReadyWeapon == self )
Owner.A_SoundVolume(CHAN_WEAPONEXTRA2,(.025*chargelevel)**3.);
}
}
Default
@ -30,6 +128,7 @@ Class Ynykron : SWWMWeapon
Obituary "$O_YNYKRON";
Weapon.SlotNumber 0;
Weapon.SelectionOrder 1000;
Weapon.UpSound "ynykron/select";
Stamina 5000000;
Weapon.AmmoType1 "YnykronAmmo";
Weapon.AmmoGive1 1;
@ -43,20 +142,247 @@ Class Ynykron : SWWMWeapon
XZW1 A -1;
Stop;
Select:
TNT1 A 1
XZW2 L 2
{
Console.Printf("\cgYNYKRON ARTIFACT NOT IMPLEMENTED\c-");
if ( player == players[consoleplayer] )
Console.Printf("\cgYNYKRON NOT YET FULLY IMPLEMENTED\c-");
invoker.ventcooldown = Random[Ynykron](6,15);
A_StartSound("ynykron/idle",CHAN_WEAPONEXTRA,CHANF_LOOPING,.3,4.);
if ( invoker.chargelevel > 0. )
A_StartSound("ynykron/ready",CHAN_WEAPONEXTRA2,CHANF_LOOPING,(.025*invoker.chargelevel)**3.,2.);
A_FullRaise();
}
XZW2 MNOPQRSTUVWXYZ 2;
XZW3 A 2;
Goto Ready;
Ready:
TNT1 A 1 A_WeaponReady();
XZW2 A 1
{
if ( invoker.chargestate == CS_DISCHARGING )
return ResolveState("Discharge");
int flg = WRF_ALLOWZOOM|WRF_ALLOWUSER1;
if ( (invoker.chargestate > CS_IDLE) || ((invoker.clipcount <= 0) && ((invoker.Ammo1.Amount > 1) || sv_infiniteammo || FindInventory('PowerInfiniteAmmo',true))) )
flg |= WRF_ALLOWRELOAD;
if ( (invoker.clipcount <= 0) || (invoker.chargestate > CS_IDLE) )
flg |= WRF_NOSECONDARY;
if ( invoker.chargestate == CS_CHARGING )
flg |= WRF_NOPRIMARY;
A_WeaponReady(flg);
if ( invoker.chargelevel >= 40. )
{
invoker.ventcooldown--;
if ( invoker.ventcooldown <= 0 )
return ResolveState("ReadyVent");
}
return ResolveState(null);
}
Wait;
ReadyVent:
XZW2 A 1
{
invoker.ventcooldown = Random[Ynykron](6,15)*5;
A_Overlay(PSP_WEAPON+1,"ReadyVentSmoke");
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
A_OverlayAlpha(PSP_WEAPON+1,0.);
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
}
XZWA ABCDEFGHI 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
Goto Ready;
ReadyVentSmoke:
XZWB D 1
{
invoker.ventfade = .3;
}
XZWB EF 2;
XZWB G 2
{
invoker.ventfade = -.1;
}
XZWB HIJKLM 2;
Stop;
Fire:
TNT1 A 1;
XZW2 A 1
{
if ( (invoker.clipcount <= 0) && ((invoker.Ammo1.Amount > 1) || sv_infiniteammo || FindInventory('PowerInfiniteAmmo',true)) )
return ResolveState("Reload");
if ( invoker.chargestate == CS_IDLE )
return ResolveState("Charge");
A_YnykronFire();
return ResolveState(null);
}
XZW3 JK 2;
XZW3 LMNOPQR 3;
Goto Ready;
FireSmoke:
XZWA J 1
{
invoker.ventfade = .3;
}
XZWA KLMNO 2;
XZWA P 3
{
invoker.ventfade = -.1;
}
XZWA QRS 3;
Stop;
AltFire:
XZW2 A 2
{
A_StartSound("ynykron/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
return A_JumpIf(invoker.inverted,"TakeInverted");
}
TakeNormal:
XZW3 STUVWXYZ 2;
XZW4 ABCDEFGHIJKLMNO 2;
XZW4 P 0
{
invoker.inverted = true;
}
Goto PutInverted;
TakeInverted:
XZW5 PQRSTUVWXYZ 2;
XZW6 ABCDEFGHIJKLM 2;
XZW6 N 0
{
invoker.inverted = false;
}
Goto PutNormal;
PutNormal:
XZW4 PQRSTUVWXYZ 2;
XZW5 A 2 A_StartSound("ynykron/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 BCDEFGHIJK 2;
XZW5 L 4;
Goto Ready;
PutInverted:
XZW6 NOPQRSTUVWXY 2;
XZW6 Z 2 A_StartSound("ynykron/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW7 ABCDEFGHIJ 2;
XZW7 K 4;
XZW5 P 0;
Goto Ready;
Discharge:
XZW2 A 2;
XZW7 NOP 2;
XZW7 Q 2
{
invoker.chargestate = CS_DISCHARGING;
A_Overlay(PSP_WEAPON+1,"DischargeSmoke");
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
A_OverlayAlpha(PSP_WEAPON+1,0.);
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
}
XZW7 RSTUV 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
XZW7 W 2
{
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
return A_JumpIf(invoker.chargestate==CS_IDLE,1);
}
Wait;
XZW7 W 3 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
XZW7 XYZ 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
Goto Ready;
DischargeSmoke:
XZWA T 2
{
invoker.ventfade = .3;
}
XZWA UVWXY 2;
XZWA Z 2 A_JumpIf(invoker.chargestate==CS_IDLE,1);
Wait;
XZWA Z 3
{
invoker.ventfade = -.1;
}
XZWB ABCD 2;
Stop;
Charge:
XZW2 A 2;
XZW3 BCDEFGHI 2;
XZW2 A 0
{
invoker.chargestate = CS_CHARGING;
A_StartSound("ynykron/ready",CHAN_WEAPONEXTRA2,CHANF_LOOPING,.01,2.);
}
Goto Ready;
Reload:
XZW2 A 2
{
if ( invoker.chargestate>CS_IDLE ) return ResolveState("Discharge");
if ( invoker.inverted ) return ResolveState("UnloadInverted");
A_StartSound("ynykron/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
return ResolveState(null);
}
UnloadNormal:
XZW3 STUVWXYZ 2;
XZW4 ABCDEFGHIJKLMNO 2;
XZW4 P 0
{
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
invoker.Ammo1.Amount = max(invoker.Ammo1.Amount-1,0);
invoker.clipcount = 1;
invoker.inverted = false;
}
Goto PutNormal;
UnloadInverted:
XZW5 PQRSTUVWXYZ 2;
XZW6 ABCDEFGHIJKLM 2;
XZW6 N 0
{
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
invoker.Ammo1.Amount = max(invoker.Ammo1.Amount-1,0);
invoker.clipcount = 1;
invoker.inverted = false;
}
Goto PutNormal;
Zoom:
XZW2 A 2
{
invoker.ventcooldown = Random[Ynykron](6,15);
A_StartSound("ynykron/checkout",CHAN_WEAPON,CHANF_OVERLAP);
}
XZW8 ABCDEFGHIJKLMNOPQRSTUVW 2;
XZW8 X 4; // smoothen more
Goto Ready;
User1:
XZW2 A 2
{
invoker.ventcooldown = Random[Ynykron](6,15);
A_StartSound("ynykron/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerMelee();
}
XZW8 YZ 2;
XZW9 AB 2;
XZW9 C 1 A_Parry(9);
XZW9 DE 1;
XZW9 F 1 A_Melee(100,"demolitionist/whitl",1.5);
XZW9 GHIJK 1;
XZW9 LMNO 2;
XZW9 P 2 A_StartSound("ynykron/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW9 QRSTUVWXYZ 2;
Goto Ready;
Deselect:
TNT1 A -1 A_FullLower();
XZW2 A 2 A_StartSound("ynykron/deselect",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 BCDEFGHIJK 2;
XZW2 L -1
{
A_StopSound(CHAN_WEAPONEXTRA);
A_StopSound(CHAN_WEAPONEXTRA2);
A_FullLower();
}
Stop;
Flash:
XZWZ A 2 Bright
{
let l = Spawn("SWWMWeaponLight",pos);
l.args[0] = 255;
l.args[1] = 255;
l.args[2] = 255;
l.args[3] = 500;
l.target = self;
}
Stop;
}
}

View file

@ -214,7 +214,7 @@ Class DeepImpact : SWWMWeapon
if ( !AmmoBar ) AmmoBar = TexMan.CheckForTexture("graphics/HUD/DeepImpactBar.png",TexMan.Type_Any);
Screen.DrawTexture(WeaponBox,false,bx-36,by-54,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
int chg = clamp(ChargeInter?ChargeInter.GetValue():clipcount,0,100);
int ct = int(((by-3)-(chg*50./100.))*hs.y);
int ct = int(((by-2)-(chg*50./100.))*hs.y);
Screen.DrawTexture(AmmoBar,false,bx-7,by-52,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ClipTop,ct);
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-35,by-13,String.Format("%3d%%",chg),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}

View file

@ -951,6 +951,7 @@ Class SWWMWeapon : Weapon abstract
{
Owner.A_StopSound(CHAN_WEAPON);
Owner.A_StopSound(CHAN_WEAPONEXTRA);
Owner.A_StopSound(CHAN_WEAPONEXTRA2);
Super.DetachFromOwner();
}
override void OwnerDied()
@ -959,6 +960,7 @@ Class SWWMWeapon : Weapon abstract
{
Owner.A_StopSound(CHAN_WEAPON);
Owner.A_StopSound(CHAN_WEAPONEXTRA);
Owner.A_StopSound(CHAN_WEAPONEXTRA2);
}
A_ClearRefire();
Super.OwnerDied();

View file

@ -392,7 +392,7 @@ Class PusherWeapon : SWWMWeapon
{
d.HitActor.TraceBleed(dmg,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
d.HitActor.A_StartSound("pusher/meat",CHAN_FOOTSTEP,CHANF_OVERLAP);
d.HitActor.A_StartSound("pusher/meat",CHAN_DAMAGE,CHANF_OVERLAP);
}
// move towards target
bJUSTATTACKED = true;
@ -477,7 +477,7 @@ Class PusherWeapon : SWWMWeapon
{
d.HitActor.TraceBleed(dmg,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
d.HitActor.A_StartSound("pusher/altmeat",CHAN_FOOTSTEP,CHANF_OVERLAP);
d.HitActor.A_StartSound("pusher/altmeat",CHAN_DAMAGE,CHANF_OVERLAP);
}
}
else

View file

@ -1518,8 +1518,6 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
{
let type = (Class<Inventory>)(AllActorClasses[i]);
if ( !type ) continue;
// skip chanceboxes, since they're not yet implemented
if ( type is 'Chancebox' ) continue;
// no fabricators outside of hexen
if ( !(gameinfo.gametype&GAME_Hexen) && (type is 'AmmoFabricator') ) continue;
// skip maxed items

View file

@ -218,7 +218,6 @@ Class Demolitionist : PlayerPawn
{
let type = (class<Inventory>)(AllActorClasses[i]);
if ( !type ) continue;
if ( type is 'Chancebox' ) continue; // do not give these until they're fully implemented
if ( !(gameinfo.gametype&GAME_Hexen) && (type is 'AmmoFabricator') ) continue; // no fabricators outside of hexen
let def = GetDefaultByType (type);
if ( def.Icon.isValid() &&
@ -603,8 +602,8 @@ Class Demolitionist : PlayerPawn
if ( !CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
// large monsters will stop the player (unless hit from above if we're going at ground pound speed)
A_QuakeEx(4,4,4,10,0,128,"",QF_RELATIVE|QF_SCALEDOWN);
A_StartSound("demolitionist/bump",CHAN_FOOTSTEP,CHANF_OVERLAP);
a.A_StartSound("demolitionist/bump",CHAN_FOOTSTEP,CHANF_OVERLAP);
A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP);
a.A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP);
if ( (diff.z < a.height) && (lastvelz >= -25) && (a.bDONTTHRUST || (a.Mass >= Mass*1.5)) )
{
if ( bumped ) continue;

View file

@ -1352,9 +1352,9 @@ Class TheBall : Actor
int whichclonk = Random[Spreadgun](1,11);
String snd = String.Format("misc/clonk%d",whichclonk);
A_AlertMonsters(2500);
A_StartSound(snd,CHAN_FOOTSTEP,CHANF_OVERLAP,1.,.2);
A_StartSound(snd,CHAN_VOICE,CHANF_OVERLAP,1.,.2);
victim.A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.);
victim.A_StartSound(snd,CHAN_FOOTSTEP,CHANF_OVERLAP,1.,.2);
victim.A_StartSound(snd,CHAN_DAMAGE,CHANF_OVERLAP,1.,.2);
slamforce *= 4;
dmg *= 4;
vel *= 1.1;
@ -1379,7 +1379,7 @@ Class TheBall : Actor
A_StartSound("spreadgun/ballf",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/30.)**.5);
if ( victim )
{
victim.A_StartSound("spreadgun/ballf",CHAN_FOOTSTEP,CHANF_OVERLAP,(vel.length()/30.)**.5);
victim.A_StartSound("spreadgun/ballf",CHAN_DAMAGE,CHANF_OVERLAP,(vel.length()/30.)**.5);
victim.TraceBleed(dmg,self);
victim.SpawnBlood(pos,atan2(dir.y,dir.x),dmg);
}
@ -1387,7 +1387,7 @@ Class TheBall : Actor
else
{
A_StartSound("spreadgun/ball",CHAN_VOICE,CHANF_OVERLAP,(vel.length()/30.)**.5);
if ( victim ) victim.A_StartSound("spreadgun/ball",CHAN_FOOTSTEP,CHANF_OVERLAP,(vel.length()/30.)**.5);
if ( victim ) victim.A_StartSound("spreadgun/ball",CHAN_DAMAGE,CHANF_OVERLAP,(vel.length()/30.)**.5);
if ( vel.length() > 15. )
{
let s = Spawn("BallImpact",pos);
@ -2056,8 +2056,8 @@ Class Spreadgun : SWWMWeapon
{
t.HitList[i].HitActor.TraceBleed(realdmg,self);
t.HitList[i].HitActor.SpawnBlood(t.HitList[i].HitLocation,atan2(t.HitList[i].x.y,t.HitList[i].x.x)+180,realdmg);
if ( large ) t.HitList[i].HitActor.A_StartSound("spreadgun/slugf",CHAN_FOOTSTEP,CHANF_OVERLAP,1.,2.);
else t.HitList[i].HitActor.A_StartSound("spreadgun/pelletf",CHAN_FOOTSTEP,CHANF_OVERLAP,.4,4.);
if ( large ) t.HitList[i].HitActor.A_StartSound("spreadgun/slugf",CHAN_DAMAGE,CHANF_OVERLAP,1.,2.);
else t.HitList[i].HitActor.A_StartSound("spreadgun/pelletf",CHAN_DAMAGE,CHANF_OVERLAP,.4,4.);
}
}
if ( (t.Results.HitType != TRACE_HitNone) && (t.Results.HitType != TRACE_HasHitSky) && (t.Results.HitType != TRACE_HitActor) )

View file

@ -178,8 +178,13 @@ Class SilverBullet : SWWMWeapon
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
if ( sv_infiniteammo || Owner.FindInventory('PowerInfiniteAmmo',true) ) return true;
if ( fireMode == PrimaryFire ) return ((chambered && !fired) || (clipcount > 0) || (Ammo1.Amount > 0));
if ( fireMode == AltFire ) return true; // it's just a zoom
if ( (fireMode == PrimaryFire) || (fireMode == AltFire) )
{
// allow player to still use the zoom even if there's no ammo left
// (should work fine, assuming I've correctly interpreted the execution chain of all this stuff)
if ( autoswitch && (fireMode == AltFire) ) return true;
return ((chambered && !fired) || (clipcount > 0) || (Ammo1.Amount > 0));
}
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
}
override void AttachToOwner( Actor other )
@ -257,7 +262,7 @@ Class SilverBullet : SWWMWeapon
{
t.HitList[i].HitActor.TraceBleed(realdmg,self);
t.HitList[i].HitActor.SpawnBlood(t.HitList[i].HitLocation,atan2(t.HitList[i].x.y,t.HitList[i].x.x)+180,realdmg);
t.HitList[i].HitActor.A_StartSound("silverbullet/flesh",CHAN_FOOTSTEP,CHANF_OVERLAP,1.,2.);
t.HitList[i].HitActor.A_StartSound("silverbullet/flesh",CHAN_DAMAGE,CHANF_OVERLAP,1.,2.);
let p = Spawn("SilverImpact",t.HitList[i].HitLocation);
p.special1 = 1;
p.target = self;
@ -410,6 +415,7 @@ Class SilverBullet : SWWMWeapon
SilverBullet.ClipCount 5;
+SWWMWEAPON.NOFIRSTGIVE;
+WEAPON.NO_AUTO_SWITCH;
+WEAPON.ALT_AMMO_OPTIONAL;
}
States
{