diff --git a/PriceTable.md b/PriceTable.md index 5d69813c9..c481fcb0c 100644 --- a/PriceTable.md +++ b/PriceTable.md @@ -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 diff --git a/TODO.md b/TODO.md index 7bc56fc9a..2d6ee3074 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ Fundamental things: - Ynykron Artifact Not so fundamental things: - - Chanceboxes - Extra Demolitionist animations (swimming, additional gestures) Extra things: diff --git a/gldefs.chancebox b/gldefs.chancebox deleted file mode 100644 index 68b305119..000000000 --- a/gldefs.chancebox +++ /dev/null @@ -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" } -} \ No newline at end of file diff --git a/gldefs.ynykron b/gldefs.ynykron new file mode 100644 index 000000000..8fd44c213 --- /dev/null +++ b/gldefs.ynykron @@ -0,0 +1,5 @@ +HardwareShader Texture "models/YnykronSmoke.png" +{ + Shader "shaders/glsl/YnykronSmoke.fp" + Texture "smoketex" "models/YnykronSmokeNoise.png" +} diff --git a/graphics/HUD/Icons/I_Chancebox1.png b/graphics/HUD/Icons/I_Chancebox1.png deleted file mode 100644 index df07583ac..000000000 Binary files a/graphics/HUD/Icons/I_Chancebox1.png and /dev/null differ diff --git a/graphics/HUD/Icons/I_Chancebox2.png b/graphics/HUD/Icons/I_Chancebox2.png deleted file mode 100644 index 086a99825..000000000 Binary files a/graphics/HUD/Icons/I_Chancebox2.png and /dev/null differ diff --git a/graphics/HUD/Icons/I_Chancebox3.png b/graphics/HUD/Icons/I_Chancebox3.png deleted file mode 100644 index 352b69c60..000000000 Binary files a/graphics/HUD/Icons/I_Chancebox3.png and /dev/null differ diff --git a/graphics/HUD/Icons/I_Chancebox4.png b/graphics/HUD/Icons/I_Chancebox4.png deleted file mode 100644 index 14807c492..000000000 Binary files a/graphics/HUD/Icons/I_Chancebox4.png and /dev/null differ diff --git a/graphics/HUD/YnykronBarA.png b/graphics/HUD/YnykronBarA.png new file mode 100644 index 000000000..84c5323c8 Binary files /dev/null and b/graphics/HUD/YnykronBarA.png differ diff --git a/graphics/HUD/YnykronBarB.png b/graphics/HUD/YnykronBarB.png new file mode 100644 index 000000000..2c83154d6 Binary files /dev/null and b/graphics/HUD/YnykronBarB.png differ diff --git a/graphics/HUD/YnykronDisplay.png b/graphics/HUD/YnykronDisplay.png new file mode 100644 index 000000000..6b02b56c5 Binary files /dev/null and b/graphics/HUD/YnykronDisplay.png differ diff --git a/graphics/HUD/YnykronSideA.png b/graphics/HUD/YnykronSideA.png new file mode 100644 index 000000000..0a54b13dc Binary files /dev/null and b/graphics/HUD/YnykronSideA.png differ diff --git a/graphics/HUD/YnykronSideB.png b/graphics/HUD/YnykronSideB.png new file mode 100644 index 000000000..2bb6e9f38 Binary files /dev/null and b/graphics/HUD/YnykronSideB.png differ diff --git a/language.def_base b/language.def_base index 9be903a2b..20b4ebab6 100644 --- a/language.def_base +++ b/language.def_base @@ -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) - diff --git a/language.def_lore b/language.def_lore index 13d49c68d..56210132c 100644 --- a/language.def_lore +++ b/language.def_lore @@ -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"; diff --git a/language.es_base b/language.es_base index da664ba35..3cd838358 100644 --- a/language.es_base +++ b/language.es_base @@ -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) diff --git a/language.es_lore b/language.es_lore index 1afbf4200..224bff91f 100644 --- a/language.es_lore +++ b/language.es_lore @@ -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-"; diff --git a/language.esm_lore b/language.esm_lore new file mode 100644 index 000000000..c7df0d924 --- /dev/null +++ b/language.esm_lore @@ -0,0 +1,2 @@ +// this file was generated by mklang, do not edit directly +[esm] diff --git a/language.ru_base b/language.ru_base index b6b0373c6..fb73ae662 100644 --- a/language.ru_base +++ b/language.ru_base @@ -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)"; diff --git a/language.ru_lore b/language.ru_lore index a8a101398..3e0bc6ba9 100644 --- a/language.ru_lore +++ b/language.ru_lore @@ -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 = "Ключи"; diff --git a/language.version b/language.version index 04dd3f6a4..f759460eb 100644 --- a/language.version +++ b/language.version @@ -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)"; diff --git a/lore/default/lootbox.txt b/lore/default/lootbox.txt deleted file mode 100644 index 446cff4e6..000000000 --- a/lore/default/lootbox.txt +++ /dev/null @@ -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- diff --git a/lore/es/lootbox.txt b/lore/es/lootbox.txt deleted file mode 100644 index d5db68365..000000000 --- a/lore/es/lootbox.txt +++ /dev/null @@ -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- diff --git a/modeldef.ammo b/modeldef.ammo index 6c0a0c9e0..bf52f0014 100644 --- a/modeldef.ammo +++ b/modeldef.ammo @@ -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 diff --git a/modeldef.chancebox b/modeldef.chancebox deleted file mode 100644 index 22efb7bba..000000000 --- a/modeldef.chancebox +++ /dev/null @@ -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 -} diff --git a/modeldef.misc b/modeldef.misc index 9b305bc25..a98a0cb98 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -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" diff --git a/modeldef.silverbullet b/modeldef.silverbullet index 2d3596d4c..e7014e3a1 100644 --- a/modeldef.silverbullet +++ b/modeldef.silverbullet @@ -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 diff --git a/modeldef.wallbuster b/modeldef.wallbuster index d2edb74fc..27e8cc5e0 100644 --- a/modeldef.wallbuster +++ b/modeldef.wallbuster @@ -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 diff --git a/modeldef.ynykron b/modeldef.ynykron index 6d0a802df..b8e2153d8 100644 --- a/modeldef.ynykron +++ b/modeldef.ynykron @@ -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 +} diff --git a/models/Chancebox.png b/models/Chancebox.png deleted file mode 100644 index a4c59646c..000000000 Binary files a/models/Chancebox.png and /dev/null differ diff --git a/models/Chancebox_Side_a.3d b/models/Chancebox_Side_a.3d deleted file mode 100644 index e5aacfd97..000000000 Binary files a/models/Chancebox_Side_a.3d and /dev/null differ diff --git a/models/Chancebox_Side_d.3d b/models/Chancebox_Side_d.3d deleted file mode 100644 index 085fc0d61..000000000 Binary files a/models/Chancebox_Side_d.3d and /dev/null differ diff --git a/models/Chancebox_Tier2.png b/models/Chancebox_Tier2.png deleted file mode 100644 index f6a87fa5a..000000000 Binary files a/models/Chancebox_Tier2.png and /dev/null differ diff --git a/models/Chancebox_Tier3.png b/models/Chancebox_Tier3.png deleted file mode 100644 index fadc64d93..000000000 Binary files a/models/Chancebox_Tier3.png and /dev/null differ diff --git a/models/Chancebox_Tier4.png b/models/Chancebox_Tier4.png deleted file mode 100644 index 6ca4a4f86..000000000 Binary files a/models/Chancebox_Tier4.png and /dev/null differ diff --git a/models/Chancebox_Top_a.3d b/models/Chancebox_Top_a.3d deleted file mode 100644 index 6f4f91b1a..000000000 Binary files a/models/Chancebox_Top_a.3d and /dev/null differ diff --git a/models/Chancebox_Top_d.3d b/models/Chancebox_Top_d.3d deleted file mode 100644 index ce1081bdf..000000000 Binary files a/models/Chancebox_Top_d.3d and /dev/null differ diff --git a/models/Chancebox_a.3d b/models/Chancebox_a.3d deleted file mode 100644 index d3de061dc..000000000 Binary files a/models/Chancebox_a.3d and /dev/null differ diff --git a/models/Chancebox_bright.png b/models/Chancebox_bright.png deleted file mode 100644 index 9ab85cf2a..000000000 Binary files a/models/Chancebox_bright.png and /dev/null differ diff --git a/models/Chancebox_d.3d b/models/Chancebox_d.3d deleted file mode 100644 index e5dba32b6..000000000 Binary files a/models/Chancebox_d.3d and /dev/null differ diff --git a/models/Chancebox_mask.png b/models/Chancebox_mask.png deleted file mode 100644 index 430daa7ad..000000000 Binary files a/models/Chancebox_mask.png and /dev/null differ diff --git a/models/Lootbox.blend b/models/Lootbox.blend deleted file mode 100644 index 7ce387322..000000000 Binary files a/models/Lootbox.blend and /dev/null differ diff --git a/models/ModelNotes.txt b/models/ModelNotes.txt index 7da507ac6..df1ee65a8 100644 --- a/models/ModelNotes.txt +++ b/models/ModelNotes.txt @@ -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 diff --git a/models/Shell_Ball_Used.png b/models/Shell_Ball_Used.png index 32aebbe72..457a95564 100644 Binary files a/models/Shell_Ball_Used.png and b/models/Shell_Ball_Used.png differ diff --git a/models/Shell_Dragon_Used.png b/models/Shell_Dragon_Used.png index a6a5c6777..98a7f7b89 100644 Binary files a/models/Shell_Dragon_Used.png and b/models/Shell_Dragon_Used.png differ diff --git a/models/Shell_Fuck_Used.png b/models/Shell_Fuck_Used.png index aa08fb1c2..d7ded4d5f 100644 Binary files a/models/Shell_Fuck_Used.png and b/models/Shell_Fuck_Used.png differ diff --git a/models/Shell_Gold_Used.png b/models/Shell_Gold_Used.png index a3be9c27b..24d242fd1 100644 Binary files a/models/Shell_Gold_Used.png and b/models/Shell_Gold_Used.png differ diff --git a/models/Shell_Kinylum_Used.png b/models/Shell_Kinylum_Used.png index 18caab8ed..960a49af8 100644 Binary files a/models/Shell_Kinylum_Used.png and b/models/Shell_Kinylum_Used.png differ diff --git a/models/Shell_Normal_Used.png b/models/Shell_Normal_Used.png index 9c521f015..b8bbeb3d8 100644 Binary files a/models/Shell_Normal_Used.png and b/models/Shell_Normal_Used.png differ diff --git a/models/Shell_Slug_Used.png b/models/Shell_Slug_Used.png index 8e3f4ceaf..0a87d55d0 100644 Binary files a/models/Shell_Slug_Used.png and b/models/Shell_Slug_Used.png differ diff --git a/models/Ynykron1st.blend b/models/Ynykron1st.blend index 9266bb735..3dcde391b 100644 Binary files a/models/Ynykron1st.blend and b/models/Ynykron1st.blend differ diff --git a/models/Ynykron1st_a.3d b/models/Ynykron1st_a.3d index ce7268305..532d87b30 100644 Binary files a/models/Ynykron1st_a.3d and b/models/Ynykron1st_a.3d differ diff --git a/models/Ynykron1st_d.3d b/models/Ynykron1st_d.3d index 964a992fe..06fb2966a 100644 Binary files a/models/Ynykron1st_d.3d and b/models/Ynykron1st_d.3d differ diff --git a/models/YnykronSmoke.png b/models/YnykronSmoke.png new file mode 100644 index 000000000..f07343e6c Binary files /dev/null and b/models/YnykronSmoke.png differ diff --git a/models/YnykronSmokeNoise.png b/models/YnykronSmokeNoise.png new file mode 100644 index 000000000..141ae239b Binary files /dev/null and b/models/YnykronSmokeNoise.png differ diff --git a/shaders/glsl/YnykronSmoke.fp b/shaders/glsl/YnykronSmoke.fp new file mode 100644 index 000000000..a0b7c1bfc --- /dev/null +++ b/shaders/glsl/YnykronSmoke.fp @@ -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.); +} diff --git a/sndinfo.txt b/sndinfo.txt index ebad0d4e0..a8fdc9161 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -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 diff --git a/sounds/items/lootexpl1.ogg b/sounds/items/lootexpl1.ogg deleted file mode 100644 index 712ce12ce..000000000 Binary files a/sounds/items/lootexpl1.ogg and /dev/null differ diff --git a/sounds/items/lootexpl2.ogg b/sounds/items/lootexpl2.ogg deleted file mode 100644 index cdc9493e1..000000000 Binary files a/sounds/items/lootexpl2.ogg and /dev/null differ diff --git a/sounds/items/lootexpl3.ogg b/sounds/items/lootexpl3.ogg deleted file mode 100644 index 9b9b240de..000000000 Binary files a/sounds/items/lootexpl3.ogg and /dev/null differ diff --git a/sounds/items/lootland1.ogg b/sounds/items/lootland1.ogg deleted file mode 100644 index b3874fa61..000000000 Binary files a/sounds/items/lootland1.ogg and /dev/null differ diff --git a/sounds/items/lootland2.ogg b/sounds/items/lootland2.ogg deleted file mode 100644 index 93566e339..000000000 Binary files a/sounds/items/lootland2.ogg and /dev/null differ diff --git a/sounds/items/lootland3.ogg b/sounds/items/lootland3.ogg deleted file mode 100644 index a2dd90806..000000000 Binary files a/sounds/items/lootland3.ogg and /dev/null differ diff --git a/sounds/ynykron/mc_checkout.ogg b/sounds/ynykron/mc_checkout.ogg new file mode 100644 index 000000000..c31492054 Binary files /dev/null and b/sounds/ynykron/mc_checkout.ogg differ diff --git a/sounds/ynykron/mc_deselect.ogg b/sounds/ynykron/mc_deselect.ogg new file mode 100644 index 000000000..cb81b1038 Binary files /dev/null and b/sounds/ynykron/mc_deselect.ogg differ diff --git a/sounds/ynykron/mc_idle.ogg b/sounds/ynykron/mc_idle.ogg new file mode 100644 index 000000000..7682bcdf8 Binary files /dev/null and b/sounds/ynykron/mc_idle.ogg differ diff --git a/sounds/ynykron/mc_meleeend.ogg b/sounds/ynykron/mc_meleeend.ogg new file mode 100644 index 000000000..1f3bc42d5 Binary files /dev/null and b/sounds/ynykron/mc_meleeend.ogg differ diff --git a/sounds/ynykron/mc_meleestart.ogg b/sounds/ynykron/mc_meleestart.ogg new file mode 100644 index 000000000..1269704cb Binary files /dev/null and b/sounds/ynykron/mc_meleestart.ogg differ diff --git a/sounds/ynykron/mc_ready.ogg b/sounds/ynykron/mc_ready.ogg new file mode 100644 index 000000000..c3d312767 Binary files /dev/null and b/sounds/ynykron/mc_ready.ogg differ diff --git a/sounds/ynykron/mc_select.ogg b/sounds/ynykron/mc_select.ogg new file mode 100644 index 000000000..9c049818c Binary files /dev/null and b/sounds/ynykron/mc_select.ogg differ diff --git a/zscript.txt b/zscript.txt index e8ed7818f..8cf74a19d 100644 --- a/zscript.txt +++ b/zscript.txt @@ -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" diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 013171d64..84e97bc87 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -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 diff --git a/zscript/swwm_cbt.zsc b/zscript/swwm_cbt.zsc index cb4ec0c65..c4996c603 100644 --- a/zscript/swwm_cbt.zsc +++ b/zscript/swwm_cbt.zsc @@ -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) ) diff --git a/zscript/swwm_chancebox.zsc b/zscript/swwm_chancebox.zsc deleted file mode 100644 index fb1853c53..000000000 --- a/zscript/swwm_chancebox.zsc +++ /dev/null @@ -1,516 +0,0 @@ -// gacha nonsense - -Class Chancebox : Inventory abstract -{ - Class 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 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; i40,"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; - } -} diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index cd6ea98e0..3171ca298 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -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 diff --git a/zscript/swwm_deathlydeathcannon.zsc b/zscript/swwm_deathlydeathcannon.zsc index b25a9ceef..e71d8f878 100644 --- a/zscript/swwm_deathlydeathcannon.zsc +++ b/zscript/swwm_deathlydeathcannon.zsc @@ -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; } } diff --git a/zscript/swwm_deepdarkimpact.zsc b/zscript/swwm_deepdarkimpact.zsc index 93ee77643..3f61216a6 100644 --- a/zscript/swwm_deepdarkimpact.zsc +++ b/zscript/swwm_deepdarkimpact.zsc @@ -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); } diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index 588ccbd51..477213907 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -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(); diff --git a/zscript/swwm_jackhammer.zsc b/zscript/swwm_jackhammer.zsc index 71e0d7255..e85a100a1 100644 --- a/zscript/swwm_jackhammer.zsc +++ b/zscript/swwm_jackhammer.zsc @@ -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 diff --git a/zscript/swwm_menu.zsc b/zscript/swwm_menu.zsc index 7724a906c..04362ac95 100644 --- a/zscript/swwm_menu.zsc +++ b/zscript/swwm_menu.zsc @@ -1518,8 +1518,6 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { let type = (Class)(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 diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index f7d2c7f3c..27acdce25 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -218,7 +218,6 @@ Class Demolitionist : PlayerPawn { let type = (class)(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; diff --git a/zscript/swwm_shot.zsc b/zscript/swwm_shot.zsc index 81a37c3dc..9ea8f6f09 100644 --- a/zscript/swwm_shot.zsc +++ b/zscript/swwm_shot.zsc @@ -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) ) diff --git a/zscript/swwm_thiccboolet.zsc b/zscript/swwm_thiccboolet.zsc index f1f9eaca7..45338d03b 100644 --- a/zscript/swwm_thiccboolet.zsc +++ b/zscript/swwm_thiccboolet.zsc @@ -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 {