diff --git a/FuturePlans.md b/FuturePlans.md index 0d09dc167..079dbd9ac 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -62,7 +62,6 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after * **Official Sunder support *(when the WAD is complete)*** * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** * **Replace all hitscan with *"light projectiles"*** -* **Leaning and a lot of other stuff involving ViewAngles and ViewPos** * **Customized cluster text stuff if that ever gets scriptified** * **Crouch sliding *(+ proper crouch dashing)*** * **More items:** @@ -70,23 +69,10 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Angel of Death *(Total Destruction / SWWM Platinum Ep2)* - Black Matter Armor *(SWWM / UnSX 3)* - Satellite *(Total Destruction)* -* **Additional grenades *(replaces clips)*:** - - Cyrus POW Grenades *(UnSX 4)* - - Z-Bomb *(UnSX 3)* - - Dr. Locke's Burrow Bombs *(SWWM Platinum Ep2 / UnSX 5)* - - Vacuum Bomb *(SWWM Platinum)* - - Cryptek Blast Charge *(Ultra Suite)* - - U-Bomb *(UnSX 4)* -* **Additional ammo types:** - - Yellow shell - Dyratin charge *(Plasma slug)* - - Pink shell - Micro-grenade *(What it says on the tin)* - - Blue rocket - Hellblazer Torturer *(Nail bomb)* - - White rocket - Hellblazer Subjugator *(Stun bomb)* * **Expand third person animations** - 4-directional movement variants - Height-dependent headpats (current animation was designed for dogs on same floor) * **Additional gestures + gesture menu** - - Dab (loud and bassy, alerts monsters) - Airhorn (unlimited range A_AlertMonsters, to unbreak vanilla teleport closets) - Clap - The Bird @@ -95,7 +81,6 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Heart - Shrug - Beckon - - Facepalm * **DLC Gameset:** - Tetris - Pong diff --git a/README.md b/README.md index c5a6a4a7c..32e2a823d 100644 --- a/README.md +++ b/README.md @@ -172,9 +172,9 @@ Little bundles of fun (in hot lead form) found either as single units (sometimes Another signature weapon of the **SWWM** series. This time in its third and far more improved revision. -**Primary fire:** Shoot a hot flaming rocket straight ahead. +**Primary fire:** Shoot a hot flaming rocket straight ahead. Hold to load up to 2 additional rockets, then release for burst fire. -**Secondary fire:** Lob the rocket as a grenade that will bounce around. +**Secondary fire:** Lob the rocket as a grenade that will bounce around. Hold to load up to 2 additional grenades, then release for burst fire. **Tertiary fire (Zoom):** Change the ammo type, there are four options (see ammo section below). diff --git a/graphics/HUD/HellblazerCrackshotLock.png b/graphics/HUD/HellblazerCrackshotLock.png new file mode 100644 index 000000000..ae1d4354b Binary files /dev/null and b/graphics/HUD/HellblazerCrackshotLock.png differ diff --git a/graphics/HUD/HellblazerMissileLock.png b/graphics/HUD/HellblazerMissileLock.png new file mode 100644 index 000000000..d63e7d508 Binary files /dev/null and b/graphics/HUD/HellblazerMissileLock.png differ diff --git a/graphics/HUD/HellblazerRavagerLock.png b/graphics/HUD/HellblazerRavagerLock.png new file mode 100644 index 000000000..bdb603008 Binary files /dev/null and b/graphics/HUD/HellblazerRavagerLock.png differ diff --git a/graphics/HUD/HellblazerWarheadLock.png b/graphics/HUD/HellblazerWarheadLock.png new file mode 100644 index 000000000..9076a69b8 Binary files /dev/null and b/graphics/HUD/HellblazerWarheadLock.png differ diff --git a/language.def_lore b/language.def_lore index 137ae377c..592462b38 100644 --- a/language.def_lore +++ b/language.def_lore @@ -211,7 +211,7 @@ SWWM_LORETXT_HELL4 = "\cxName:\c-\n\cf Hell\c-\n\cxClassification:\c-\n\cf Nethe SWWM_LORETAG_HELLBLAZER = "Hellblazer"; SWWM_LORETAB_HELLBLAZER = "Item"; SWWM_LOREREL_HELLBLAZER = "Imanaki;UAC;Hell;Hammerspace"; -SWWM_LORETXT_HELLBLAZER = "\cxDesignation:\c-\n\cf Hellfire Cannon Mk3 (\"Hellblazer\")\c-\n\cxManufacturer:\c-\n\cf Imanaki Research Corporation (former)\c-\n\cf Tach-Engine Technology Institute (current)\c-\n\cxClassification:\c-\n\cf Mini-Missile Launcher\c-\n\nThe \cfHellblazer\c- is the third incarnation of the \cfHellfire Cannon\c-, one of the many weapons that \cfImanaki Corp\c- had constructed based on their experiments with harnessing what they called \cfArdent Energy\c-, a power source from the depths of \cfHell\c- itself. It is a direct improvement of the Mark 2 model, the \cfHellrazer\c-, being much easier to reload thanks to its simple drum magazine system. It also features many more types of ammunition this time:\n\n\cf\"Blazer\" grenades:\c- The standard ammunition. Highly explosive despite their small size, thanks to the highly condensed Ardent Energy contained within.\n\n\cf\"Crackshot\" cluster grenades:\c- These burst into smaller grenades which will spread on impact, bouncing around for a short time before detonating.\n\n\cf\"Ravager\" incendiary grenades:\c- Ravagers release a wave of unrefined Ardent Energy on detonation, covering a very wide area around themselves. Quite useful in tight spaces, where this scorching hot plasma won't dissipate as quickly, thoroughly roasting any targets within.\n\n\cf\"Slayer\" warheads:\c- A returning favorite from the previous series. These miniature nukes contain within themselves highly enriched Ardent Energy that will cause total devastation in a large radius, bringing swift death to even the highest ranked demons in Hell's armies.\n\nThe Hellblazer was discontinued following the destruction of the Imanaki Corp headquarters in 2009, but the \cfTach-Engine Technology Institute\c- had managed to reproduce this weapon following their demise. Replicated models do not actually employ this \"Ardent Energy\" however, so they are not as destructive as they were meant to be. Rather, they are powered by the highly volatile \cfNokron\c-, one of the two exotic elements involved in the process of Microfusion, as its potential for use in explosives is quite notable.\n\n\cfPrimary Fire:\c- Shoots the loaded ammunition with its propulsion armed and ready.\n\n\cfSecondary Fire:\c- Lobs the loaded ammunition unarmed, as a bouncing grenade.\n\n\cfTertiary Fire:\c- Cycles the ammo type for the next reload.\n\n\cfReloading:\c- During a reload, you may either refill the current mag (quite easy through the \cfHammerspace™\c- container), or swap it out for a different ammo type.\n\n\cfTechniques:\c- The grenades will automatically detonate on proximity to hostile targets, so you may still land the shot even if you merely grazed them. It is unclear how exactly they detect the targets, or know that they are hostile.\n\n\cxSaya's Notes:\c-\n\cf\"Ardent Energy\"? What's that? Energy extracted from a demon's ass after it ate too much curry? Whatever, anything coming from Hell is best left untouched, y'know. Just look at what happened to the fucking UAC, going around sticking their paws where they shouldn't.\c-\n\n\cfActually, making the replicas use Nokron was a pretty clever thing. I had no idea that shit exploded. Really makes you think about all the safety mechanisms that go into Microfusion engines, definitely justified if THAT can happen.\c-"; +SWWM_LORETXT_HELLBLAZER = "\cxDesignation:\c-\n\cf Hellfire Cannon Mk3 (\"Hellblazer\")\c-\n\cxManufacturer:\c-\n\cf Imanaki Research Corporation (former)\c-\n\cf Tach-Engine Technology Institute (current)\c-\n\cxClassification:\c-\n\cf Mini-Missile Launcher\c-\n\nThe \cfHellblazer\c- is the third incarnation of the \cfHellfire Cannon\c-, one of the many weapons that \cfImanaki Corp\c- had constructed based on their experiments with harnessing what they called \cfArdent Energy\c-, a power source from the depths of \cfHell\c- itself. It is a direct improvement of the Mark 2 model, the \cfHellrazer\c-, sporting burst-fire capabilities and a simple drum magazine system for easier reloads. It also features many more types of ammunition this time:\n\n\cf\"Blazer\" grenades:\c- The standard ammunition. Highly explosive despite their small size, thanks to the highly condensed Ardent Energy contained within.\n\n\cf\"Crackshot\" cluster grenades:\c- These burst into smaller grenades which will spread on impact, bouncing around for a short time before detonating.\n\n\cf\"Ravager\" incendiary grenades:\c- Ravagers release a wave of unrefined Ardent Energy on detonation, covering a very wide area around themselves. Quite useful in tight spaces, where this scorching hot plasma won't dissipate as quickly, thoroughly roasting any targets within. For safety reasons this ammunition type cannot be employed in burst-fire.\n\n\cf\"Slayer\" warheads:\c- A returning favorite from the previous series. These miniature nukes contain within themselves highly enriched Ardent Energy that will cause total devastation in a large radius, bringing swift death to even the highest ranked demons in Hell's armies. Cannot operate in burst-fire mode either.\n\nThe Hellblazer was discontinued following the destruction of the Imanaki Corp headquarters in 2009, but the \cfTach-Engine Technology Institute\c- had managed to reproduce this weapon following their demise. Replicated models do not actually employ this \"Ardent Energy\" however, so they are not as destructive as they were meant to be. Rather, they are powered by the highly volatile \cfNokron\c-, one of the two exotic elements involved in the process of Microfusion, as its potential for use in explosives is quite notable.\n\nUnlike its predecessor, which relied on simple proximity detection, this model can instead interface with targeting arrays in order to provide more precise selective target seeking.\n\n\cfPrimary Fire:\c- Shoots the loaded ammunition with its propulsion armed and ready. Tap to fire one missile, hold to preload up to 2 additional missiles (secondary fire cancels this process). While held, the weapon will pick one target for each loaded missile with each tap of tertiary fire. Tapping reload clears all marked targets.\n\n\cfSecondary Fire:\c- Lobs the loaded ammunition unarmed, as a bouncing grenade. Tap to fire one grenade, hold to preload up to 2 additional grenades (primary Fire cancels this process). Target seeking also affects grenades, as they will attempt to steer themselves towards the target on bounce.\n\n\cfTertiary Fire:\c- Cycles the ammo type for the next reload.\n\n\cfReloading:\c- During a reload, you may either refill the current mag (quite easy through the \cfHammerspace™\c- container), or swap it out for a different ammo type.\n\n\cfTechniques:\c- The grenades will automatically detonate on proximity to any hostile targets (unless explicitly seeking one), so you may still land the shot even if you merely grazed them. It is unclear how exactly they detect the targets, or know that they are hostile.\n\n\cxSaya's Notes:\c-\n\cf\"Ardent Energy\"? What's that? Energy extracted from a demon's ass after it ate too much curry? Whatever, anything coming from Hell is best left untouched, y'know. Just look at what happened to the fucking UAC, going around sticking their paws where they shouldn't.\c-\n\n\cfActually, making the replicas use Nokron was a pretty clever thing. I had no idea that shit exploded. Really makes you think about all the safety mechanisms that go into Microfusion engines, definitely justified if THAT can happen.\c-"; SWWM_LORETAG_IBUKI = "Miyamoto, Ibuki"; SWWM_LORETAB_IBUKI = "People"; SWWM_LOREREL_IBUKI = "AkariLabs;WhiteScar;Taro;Saya"; diff --git a/language.es_lore b/language.es_lore index 6aa4d9f9a..96974f8e6 100644 --- a/language.es_lore +++ b/language.es_lore @@ -96,7 +96,7 @@ SWWM_LORETXT_HELL = "\cxNombre:\c-\n\cf Infierno\c-\n\cxClasificación:\c-\n\cf SWWM_LORETXT_HELL2 = "\cxNombre:\c-\n\cf Infierno\c-\n\cxClasificación:\c-\n\cf Inframundo\c-\n\nEl \cfInfierno\c- es un mundo enorme separado del nuestro, pero aún contenido en nuestro universo. En sus inicios, era conocido como \cfKur\c-, un mundo pacífico que los \cfAnarukon\c- que abandonaron \cfNovoskhana\c- siguiendo a \cfNoskas Kurenai\c- buscaban como su \"tierra prometida\" donde vivirían en paz, lejos de la tiranía de la \cfEmperatriz Eterna\c-. La paz duró más de tres mil años, hasta que ocurrió la \cfTraición del Padre Nostros\c- en 10.675 AC, según la cual uno de los descendientes de los \cfNueve Reyes\c- de Kur trajo consigo un ejército casi interminable de criaturas que solo podían ser descritas como \"demonios\" y decidió tomar toda la tierra para sí y sus nuevos \"seguidores\". Desde entonces, la tierra de Kur se ha convertido en lo que solo puede ser descrito como \"Infierno\", bajo el reinado de Nostros como su \"líder supremo\".\n\nEn 149, tras la desaparición del príncipe heredero \cfManakei\c-, quien había sido invocado en la Tierra pero nunca regresó, comenzaron conflictos internos entre los rangos de la realeza del Infierno. Estas luchas por la sucesión al trono, sin embargo, nunca llegaron a escalar mientras Nostros estuviera allí para mantener a los demonios a raya. Hubo muchos intentos de localizar al heredero y traerlo de vuelta, sin éxito.\n\nEn 2145, tras la desaparición repentina del líder supremo del Infierno, dejando solo a su hijo a cargo, el inexperto \cfRey Akusei\c-, los varios archidemonios, generales corruptos de los ejercitos de demonios, tomaron la oportunidad para dar un golpe de estado y derrocar a la familia real principal, forzándolos al exilio. Este evento, desafortunadamente, coincidió con las primeras exploraciones del Infierno de la \cfUAC\c-. Aunque curiosos al principio con estas extrañas criaturas que habían aparecido en su mundo, tomaron la decisión de exterminarlas cuando comenzaron a mostrar interés en explotar sus recursos naturales y además mostrar hostilidad al acercarse. Casi lo consiguieron, pero sus planes de mandar una flota completa a nuestro mundo fueron detenidos junto con su invasión inicial de \cfMars City\c-, y no pudieron continuar hasta mucho después, en 2148, cuando consiguieron tomar los teletransportadores de la UAC en Fobos y Deimos, dominando por completo ambas bases lunares e incluso consiguiendo traer una de las lunas a su mundo. Tras el contraataque de un único soldado, el \cfMarine de Doom\c-, pusieron el punto de mira en la Tierra, trayendo consigo todas sus legiones, bajo el comando de \cfBaramun\c- el Titan del Este, quien recibió el título de \cfIcono del Pecado\c-.\n\nContra todo pronóstico, la humanidad triunfó, y los invasores fueron derrotados, junto con su líder. A pesar de esta gran derrota, los generales demoníacos organizaron otros varios ataques, usando sus fuerzas restantes, pero fallaron de nuevo. Habiéndose dado cuenta de que la humanidad era mucho más fuerte de lo que habían supuesto, abandonaron su lucha.\n\n\cxNotas de Saya:\c-\n\cfOK, lo primero, gracias muchas al abuelete de Ellen-san por toda la info que tenemos de esto. Cytho-sama es como que, nuestro único contacto con el puto sitio ese, y no te vas a creer las cosas que me ha contado.\c-\n\n\cfPor ejemplo, ¿sabías que no todo el mundo ahí es \"la encarnación del mal\"? Obviamente, están todos esos demonios sanguinarios que siguen ciegamente a los generales y están endemoniados (je) con traer muerte y sufrimiento, pero... resulta que también hay un montón de demonios \"civiles\" que solo quieren vivir su vida en paz por ahí. Gente como Cytho-sama, básicamente. La rehostia de gente que está en desacuerdo con toda la mierda que está pasando, pero que no pueden hacer nada al respecto.\c-\n\n\cfAhora, por supuesto, debes de estar pensando: \"¿pero no se supone que los demonios son malos?\" Y mira, el problema ahí, está en el nombre. Las palabras desde luego pueden cambiar como vemos las cosas, sí. Palabras como \"monstruo\" o \"demonio\" te hacen pensar en malos malosos y tal, pero ¿y si no lo son? La peña suelta lo de \"oh son demonios, del Infierno\", y sí, vale, es lo primero que viene en mente de que son malvados porque es lo que nos han hecho creer. Pero aquí está la cosa: eso son nombres que NOSOTROS los humanos les hemos dado, inmediatamente después del primer contacto, solo porque es la impresión que tuvieron todos.\c-\n\n\cfLos habitantes de Kur tienen un nombre diferente para ellos mismos, que no tiene nada que ver con el Infierno ni demonios ni mierdas, son los Kuriste, que significa \"eternamente despreciados\". La historia aquí es que eran criaturas desperdigadas por todo el universo que sufrían la persecución de otros porque los veían como \"monstruos\", y el tal Nostros este básicamente decidió viajar por todo el mundo reuniéndolos a todos bajo su protección. Vale, echó a todo dios cuando volvió a casa, pero era para darles a todos un lugar donde vivir. Pero aun así sigo odiando al tío. Hay que ser JODIDAMENTE incompetente para ir y marcharse así, como si nada, dejando que los más mierders de por ahí tomen el control y hagan TODO esto. Si me encuentro al tío ese alguna vez, es que... voy y le aplasto las tripas a patadas.\c-"; SWWM_LORETXT_HELL3 = "\cxNombre:\c-\n\cf Infierno\c-\n\cxClasificación:\c-\n\cf Inframundo\c-\n\nEl \cfInfierno\c- es un mundo enorme separado del nuestro, pero aún contenido en nuestro universo. En sus inicios, era conocido como \cfKur\c-, un mundo pacífico que los \cfAnarukon\c- que abandonaron \cfNovoskhana\c- siguiendo a \cfNoskas Kurenai\c- buscaban como su \"tierra prometida\" donde vivirían en paz, lejos de la tiranía de la \cfEmperatriz Eterna\c-. La paz duró más de tres mil años, hasta que ocurrió la \cfTraición del Padre Nostros\c- en 10.675 AC, según la cual uno de los descendientes de los \cfNueve Reyes\c- de Kur trajo consigo un ejército casi interminable de criaturas que solo podían ser descritas como \"demonios\" y decidió tomar toda la tierra para sí y sus nuevos \"seguidores\". Desde entonces, la tierra de Kur se ha convertido en lo que solo puede ser descrito como \"Infierno\", bajo el reinado de Nostros como su \"líder supremo\".\n\nEn 149, tras la desaparición del príncipe heredero \cfManakei\c-, quien había sido invocado en la Tierra pero nunca regresó, comenzaron conflictos internos entre los rangos de la realeza del Infierno. Estas luchas por la sucesión al trono, sin embargo, nunca llegaron a escalar mientras Nostros estuviera allí para mantener a los demonios a raya. Hubo muchos intentos de localizar al heredero y traerlo de vuelta, sin éxito.\n\nEn 2145, tras la desaparición repentina del líder supremo del Infierno, dejando solo a su hijo a cargo, el inexperto \cfRey Akusei\c-, los varios archidemonios, generales corruptos de los ejercitos de demonios, tomaron la oportunidad para dar un golpe de estado y derrocar a la familia real principal, forzándolos al exilio. Este evento, desafortunadamente, coincidió con las primeras exploraciones del Infierno de la \cfUAC\c-. Aunque curiosos al principio con estas extrañas criaturas que habían aparecido en su mundo, tomaron la decisión de exterminarlas cuando comenzaron a mostrar interés en explotar sus recursos naturales y además mostrar hostilidad al acercarse. Casi lo consiguieron, pero sus planes de mandar una flota completa a nuestro mundo fueron detenidos junto con su invasión inicial de \cfMars City\c-, y no pudieron continuar hasta mucho después, en 2148, cuando consiguieron tomar los teletransportadores de la UAC en Fobos y Deimos, dominando por completo ambas bases lunares e incluso consiguiendo traer una de las lunas a su mundo. Tras el contraataque de un único soldado, el \cfMarine de Doom\c-, pusieron el punto de mira en la Tierra, trayendo consigo todas sus legiones, bajo el comando de \cfBaramun\c- el Titan del Este, quien recibió el título de \cfIcono del Pecado\c-.\n\nContra todo pronóstico, la humanidad triunfó, y los invasores fueron derrotados, junto con su líder. A pesar de esta gran derrota, los generales demoníacos organizaron otros varios ataques, usando sus fuerzas restantes, pero fallaron de nuevo. Habiéndose dado cuenta de que la humanidad era mucho más fuerte de lo que habían supuesto, abandonaron su lucha. Eso es, hasta Agosto de 2160, cuando dos nigromantes demoníacas, las \cfHermanas Resurrectoras\c-, entraron en escena, y revivieron a todos aquellos que habían caído, haciendo que la UAC trajese de vuelta a su \"solucionador de problemas\", el cual regresó al Infierno, exterminando a los demonios resucitados y eliminando a ambas Hermanas Resurrectoras. Al haber terminado su masacre inicial, envió un último mensaje a la Tierra, jurando que permanecería en el infierno para siempre, para asegurarse de que los demonios nunca jamás intentarían atacar a la humanidad.\n\nEl Marine de Doom pasó sus últimos días luchando contra los ejércitos restantes del Infierno, finalmente derrotando a los últimos comandantes. Viendo que no había forma de detener la matanza de este humano solitario, los generales archidemonios idearon un plan para, en su lugar, \"hacer que se marche\". Cuando el marine se adentró en la ciudad capital de \cfDis\c-, con la clara intención de matarlos, cayó en su trampa. Entonces, \cfErebus\c-, el general mayor, aprovechó esta oportunidad para desterrarlo, lo más lejos posible, fuera incluso de los límites de este universo, para que nunca jamás pudiera regresar.\n\nA pesar de estas grandes pérdidas, junto con el regreso del Padre Nostros, los archidemonios todavía lideran el Infierno, ya que ni él ni la familia real exiliada realmente tienen el poder para derrotarlos y restaurar la paz. Su única esperanza es el regreso de Manakei, el único demonio lo suficientemente fuerte como para sobrepasar a todos los generales archidemonios.\n\n\cxNotas de Saya:\c-\n\cfOK, lo primero, gracias muchas al abuelete de Ellen-san por toda la info que tenemos de esto. Cytho-sama es como que, nuestro único contacto con el puto sitio ese, y no te vas a creer las cosas que me ha contado.\c-\n\n\cfPor ejemplo, ¿sabías que no todo el mundo ahí es \"la encarnación del mal\"? Obviamente, están todos esos demonios sanguinarios que siguen ciegamente a los generales y están endemoniados (je) con traer muerte y sufrimiento, pero... resulta que también hay un montón de demonios \"civiles\" que solo quieren vivir su vida en paz por ahí. Gente como Cytho-sama, básicamente. La rehostia de gente que está en desacuerdo con toda la mierda que está pasando, pero que no pueden hacer nada al respecto.\c-\n\n\cfAhora, por supuesto, debes de estar pensando: \"¿pero no se supone que los demonios son malos?\" Y mira, el problema ahí, está en el nombre. Las palabras desde luego pueden cambiar como vemos las cosas, sí. Palabras como \"monstruo\" o \"demonio\" te hacen pensar en malos malosos y tal, pero ¿y si no lo son? La peña suelta lo de \"oh son demonios, del Infierno\", y sí, vale, es lo primero que viene en mente de que son malvados porque es lo que nos han hecho creer. Pero aquí está la cosa: eso son nombres que NOSOTROS los humanos les hemos dado, inmediatamente después del primer contacto, solo porque es la impresión que tuvieron todos.\c-\n\n\cfLos habitantes de Kur tienen un nombre diferente para ellos mismos, que no tiene nada que ver con el Infierno ni demonios ni mierdas, son los Kuriste, que significa \"eternamente despreciados\". La historia aquí es que eran criaturas desperdigadas por todo el universo que sufrían la persecución de otros porque los veían como \"monstruos\", y el tal Nostros este básicamente decidió viajar por todo el mundo reuniéndolos a todos bajo su protección. Vale, echó a todo dios cuando volvió a casa, pero era para darles a todos un lugar donde vivir. Pero aun así sigo odiando al tío. Hay que ser JODIDAMENTE incompetente para ir y marcharse así, como si nada, dejando que los más mierders de por ahí tomen el control y hagan TODO esto. Si me encuentro al tío ese alguna vez, es que... voy y le aplasto las tripas a patadas.\c-\n\n\cfActualización: Pillé más info del abuelete demonio cuqui de Ellen-san. Cosa que tienes que saber, la mayor parte de lo que has estado leyendo aquí son cosas que no conoce el público y tal, somos los únicos que sabemos todo esto. Así que, esto es lo que voy a hacer: No me voy a quedar aquí sentada haciendo el vago. Voy a ir por ahí a intentar traer de vuelta al tal Manakei este. Quiero ver como esos gordos feos cabrones sufren, oh sí, vaya que sí.\c-"; SWWM_LORETXT_HELL4 = "\cxNombre:\c-\n\cf Infierno\c-\n\cxClasificación:\c-\n\cf Inframundo\c-\n\nEl \cfInfierno\c- es un mundo enorme separado del nuestro, pero aún contenido en nuestro universo. En sus inicios, era conocido como \cfKur\c-, un mundo pacífico que los \cfAnarukon\c- que abandonaron \cfNovoskhana\c- siguiendo a \cfNoskas Kurenai\c- buscaban como su \"tierra prometida\" donde vivirían en paz, lejos de la tiranía de la \cfEmperatriz Eterna\c-. La paz duró más de tres mil años, hasta que ocurrió la \cfTraición del Padre Nostros\c- en 10.675 AC, según la cual uno de los descendientes de los \cfNueve Reyes\c- de Kur trajo consigo un ejército casi interminable de criaturas que solo podían ser descritas como \"demonios\" y decidió tomar toda la tierra para sí y sus nuevos \"seguidores\". Desde entonces, la tierra de Kur se ha convertido en lo que solo puede ser descrito como \"Infierno\", bajo el reinado de Nostros como su \"líder supremo\".\n\nEn 149, tras la desaparición del príncipe heredero \cfManakei\c-, quien había sido invocado en la Tierra pero nunca regresó, comenzaron conflictos internos entre los rangos de la realeza del Infierno. Estas luchas por la sucesión al trono, sin embargo, nunca llegaron a escalar mientras Nostros estuviera allí para mantener a los demonios a raya. Hubo muchos intentos de localizar al heredero y traerlo de vuelta, sin éxito.\n\nEn 2145, tras la desaparición repentina del líder supremo del Infierno, dejando solo a su hijo a cargo, el inexperto \cfRey Akusei\c-, los varios archidemonios, generales corruptos de los ejercitos de demonios, tomaron la oportunidad para dar un golpe de estado y derrocar a la familia real principal, forzándolos al exilio. Este evento, desafortunadamente, coincidió con las primeras exploraciones del Infierno de la \cfUAC\c-. Aunque curiosos al principio con estas extrañas criaturas que habían aparecido en su mundo, tomaron la decisión de exterminarlas cuando comenzaron a mostrar interés en explotar sus recursos naturales y además mostrar hostilidad al acercarse. Casi lo consiguieron, pero sus planes de mandar una flota completa a nuestro mundo fueron detenidos junto con su invasión inicial de \cfMars City\c-, y no pudieron continuar hasta mucho después, en 2148, cuando consiguieron tomar los teletransportadores de la UAC en Fobos y Deimos, dominando por completo ambas bases lunares e incluso consiguiendo traer una de las lunas a su mundo. Tras el contraataque de un único soldado, el \cfMarine de Doom\c-, pusieron el punto de mira en la Tierra, trayendo consigo todas sus legiones, bajo el comando de \cfBaramun\c- el Titan del Este, quien recibió el título de \cfIcono del Pecado\c-.\n\nContra todo pronóstico, la humanidad triunfó, y los invasores fueron derrotados, junto con su líder. A pesar de esta gran derrota, los generales demoníacos organizaron otros varios ataques, usando sus fuerzas restantes, pero fallaron de nuevo. Habiéndose dado cuenta de que la humanidad era mucho más fuerte de lo que habían supuesto, abandonaron su lucha. Eso es, hasta Agosto de 2160, cuando dos nigromantes demoníacas, las \cfHermanas Resurrectoras\c-, entraron en escena, y revivieron a todos aquellos que habían caído, haciendo que la UAC trajese de vuelta a su \"solucionador de problemas\", el cual regresó al Infierno, exterminando a los demonios resucitados y eliminando a ambas Hermanas Resurrectoras. Al haber terminado su masacre inicial, envió un último mensaje a la Tierra, jurando que permanecería en el infierno para siempre, para asegurarse de que los demonios nunca jamás intentarían atacar a la humanidad.\n\nEl Marine de Doom pasó sus últimos días luchando contra los ejércitos restantes del Infierno, finalmente derrotando a los últimos comandantes. Viendo que no había forma de detener la matanza de este humano solitario, los generales archidemonios idearon un plan para, en su lugar, \"hacer que se marche\". Cuando el marine se adentró en la ciudad capital de \cfDis\c-, con la clara intención de matarlos, cayó en su trampa. Entonces, \cfErebus\c-, el general mayor, aprovechó esta oportunidad para desterrarlo, lo más lejos posible, fuera incluso de los límites de este universo, para que nunca jamás pudiera regresar.\n\nA pesar de estas grandes pérdidas, junto con el regreso del Padre Nostros, los archidemonios todavía lideran el Infierno, ya que ni él ni la familia real exiliada realmente tienen el poder para derrotarlos y restaurar la paz. Su única esperanza es el regreso de Manakei, el único demonio lo suficientemente fuerte como para sobrepasar a todos los generales archidemonios.\n\n\cxNotas de Saya:\c-\n\cfOK, lo primero, gracias muchas al abuelete de Ellen-san por toda la info que tenemos de esto. Cytho-sama es como que, nuestro único contacto con el puto sitio ese, y no te vas a creer las cosas que me ha contado.\c-\n\n\cfPor ejemplo, ¿sabías que no todo el mundo ahí es \"la encarnación del mal\"? Obviamente, están todos esos demonios sanguinarios que siguen ciegamente a los generales y están endemoniados (je) con traer muerte y sufrimiento, pero... resulta que también hay un montón de demonios \"civiles\" que solo quieren vivir su vida en paz por ahí. Gente como Cytho-sama, básicamente. La rehostia de gente que está en desacuerdo con toda la mierda que está pasando, pero que no pueden hacer nada al respecto.\c-\n\n\cfAhora, por supuesto, debes de estar pensando: \"¿pero no se supone que los demonios son malos?\" Y mira, el problema ahí, está en el nombre. Las palabras desde luego pueden cambiar como vemos las cosas, sí. Palabras como \"monstruo\" o \"demonio\" te hacen pensar en malos malosos y tal, pero ¿y si no lo son? La peña suelta lo de \"oh son demonios, del Infierno\", y sí, vale, es lo primero que viene en mente de que son malvados porque es lo que nos han hecho creer. Pero aquí está la cosa: eso son nombres que NOSOTROS los humanos les hemos dado, inmediatamente después del primer contacto, solo porque es la impresión que tuvieron todos.\c-\n\n\cfLos habitantes de Kur tienen un nombre diferente para ellos mismos, que no tiene nada que ver con el Infierno ni demonios ni mierdas, son los Kuriste, que significa \"eternamente despreciados\". La historia aquí es que eran criaturas desperdigadas por todo el universo que sufrían la persecución de otros porque los veían como \"monstruos\", y el tal Nostros este básicamente decidió viajar por todo el mundo reuniéndolos a todos bajo su protección. Vale, echó a todo dios cuando volvió a casa, pero era para darles a todos un lugar donde vivir. Pero aun así sigo odiando al tío. Hay que ser JODIDAMENTE incompetente para ir y marcharse así, como si nada, dejando que los más mierders de por ahí tomen el control y hagan TODO esto. Si me encuentro al tío ese alguna vez, es que... voy y le aplasto las tripas a patadas.\c-\n\n\cfActualización: Pillé más info del abuelete demonio cuqui de Ellen-san. Cosa que tienes que saber, la mayor parte de lo que has estado leyendo aquí son cosas que no conoce el público y tal, somos los únicos que sabemos todo esto. Así que, esto es lo que voy a hacer: No me voy a quedar aquí sentada haciendo el vago. Voy a ir por ahí a intentar traer de vuelta al tal Manakei este. Quiero ver como esos gordos feos cabrones sufren, oh sí, vaya que sí.\c-\n\n\cfOtra Actualización: Bueno pues, sabes que vimos al tal Nostros durante la boda, ¿no? Y sí, desde luego que hice justo lo que prometí. Le di de patadas en todo el estómago con todas mis fuerzas, una y otra vez hasta que su mujer me pidió que parase. Sí, ahí está la cosa, su mujer, Azkhan, la \"Matriarca del Infierno\". Tuve una pequeña charla con ella al día siguiente, en privado. Y le alegró mucho conocer mis planes. Sip... señorita cabra feliz. He estado pensando que, si me traigo a Azkhan conmigo cuando empiece a buscar al príncipe ese, puede que sea más fácil traerlo de vuelta. Ya sabes, a lo mejor responde a la llamada de la mami cabra o algo. Nunca se les ocurrió intentar esto, aunque sea... bastante obvio, la verdad.\c-"; -SWWM_LORETXT_HELLBLAZER = "\cxDesignación:\c-\n\cf Cañón de Fuego Infernal Mk3 (\"Hellblazer\")\c-\n\cxFabricante:\c-\n\cf Fundación de Investigación Imanaki (anterior)\c-\n\cf Instituto Tecnológico Tach-Engine (actual)\c-\n\cxClasificación:\c-\n\cf Lanzador de Minimisiles\c-\n\nEl \cfHellblazer\c- es la tercera encarnación del \cfCañón de Fuego Infernal\c-, una de las muchas armas que \cfImanaki Corp\c- había construido basándose en sus experimentos explotando lo que llamaron \cfEnergía Ardiente\c-, una fuente de poder de las profundidades del mismo \cfInfierno\c-. Es una mejora directa del modelo Mark 2, el \cfHellrazer\c-, siendo mucho más fácil de recargar gracias a su sistema de simples cargadores en barril. También posee más tipos de munición esta vez:\n\n\cfGranadas \"Blazer\":\c- La munición estándar. Altamente explosivas a pesar de su diminuto tamaño, gracias a la Energía Ardiente superconcentrada que contienen.\n\n\cfGranadas en clúster \"Crackshot\":\c- Éstas explotan en granadas más pequeñas que se dispersan en el impacto, rebotando durante un tiempo antes de detonar.\n\n\cfGranadas incendiarias \"Ravager\":\c- Las Ravagers liberan una onda de Energía Ardiente sin refinar cuando detonan, cubriendo una zona amplia a su alrededor. Muy útiles en espacios cerrados, donde su plasma abrasador no se disipará tan fácilmente, tostando a conciencia todos los objetivos encontrados.\n\n\cfCabezas nucleares \"Slayer\":\c- Un favorito de la anterior serie. Estas bombas nucleares en miniatura contienen en su interior Energía Ardiente altamente enriquecida que causará una devastación total en un radio masivo, causando la muerte segura de incluso los demonios de mayor rango en los ejércitos del Infierno.\n\nEl Hellblazer fue descontinuado tras la destrucción de las oficinas de Imanaki Corp en 2009, pero el \cfInstituto Tecnológico Tach-Engine\c- ha conseguido reproducir el arma tras su caída. Sin embargo, los modelos replicados no emplean esta \"Energía Ardiente\", así que no son tan destructivos como debían ser. En su lugar, usan el altamente volátil \cfNokron\c-, uno de los dos elementos exóticos empleados en el proceso de Microfusión, ya que su potencial para el uso en explosivos es bastante notable.\n\n\cfFuego Primario:\c- Dispara la munición cargada con su propulsión armada y lista.\n\n\cfFuego Secundario:\c- Lanza la munición cargada sin armar, como una granada.\n\n\cfFuego Terciario:\c- Alterna entre las municiones a usar en la próxima recarga.\n\n\cfRecarga:\c- Durante una recarga, puedes o bien rellenar el cargador actual (fácil a través del contenedor de \cfHammerspace™\c-), o cambiarlo por otro tipo de munición.\n\n\cfTécnicas:\c- Las granadas detonan automáticamente en proximidad a objetivos hostiles, así que todavía puedes alcanzar ese disparo aunque solo los hayas rozado. No está muy claro como detectan los objetivos, o como saben que son hostiles.\n\n\cxNotas de Saya:\c-\n\cf¿\"Energía Ardiente\"? ¿Coño es eso? ¿Energía que le sacan del ano a un demonio después de atiborrarse a curry? Más me da, cualquier cosa salida del Infierno es mejor no tocarla, sabes. Tú mira lo que le pasó a la puta UAC, metiendo las pezuñas donde no los llaman.\c-\n\n\cfAhora que lo miro, lo de que las réplicas usen Nokron fue una buena idea. No sabía yo que esa cosa explotara. Realmente da que pensar sobre todos esos mecanismos de seguridad que tienen los motores de Microfusión, definitivamente justificados si ESO puede pasar.\c-"; +SWWM_LORETXT_HELLBLAZER = "\cxDesignación:\c-\n\cf Cañón de Fuego Infernal Mk3 (\"Hellblazer\")\c-\n\cxFabricante:\c-\n\cf Fundación de Investigación Imanaki (anterior)\c-\n\cf Instituto Tecnológico Tach-Engine (actual)\c-\n\cxClasificación:\c-\n\cf Lanzador de Minimisiles\c-\n\nEl \cfHellblazer\c- es la tercera encarnación del \cfCañón de Fuego Infernal\c-, una de las muchas armas que \cfImanaki Corp\c- había construido basándose en sus experimentos explotando lo que llamaron \cfEnergía Ardiente\c-, una fuente de poder de las profundidades del mismo \cfInfierno\c-. Es una mejora directa del modelo Mark 2, el \cfHellrazer\c-, poseyendo capacidades de fuego en ráfaga y un simple sistema de cargador en barril para facilitar recargas. También posee más tipos de munición esta vez:\n\n\cfGranadas \"Blazer\":\c- La munición estándar. Altamente explosivas a pesar de su diminuto tamaño, gracias a la Energía Ardiente superconcentrada que contienen.\n\n\cfGranadas en clúster \"Crackshot\":\c- Éstas explotan en granadas más pequeñas que se dispersan en el impacto, rebotando durante un tiempo antes de detonar.\n\n\cfGranadas incendiarias \"Ravager\":\c- Las Ravagers liberan una onda de Energía Ardiente sin refinar cuando detonan, cubriendo una zona amplia a su alrededor. Muy útiles en espacios cerrados, donde su plasma abrasador no se disipará tan fácilmente, tostando a conciencia todos los objetivos encontrados. Por razones de seguridad este tipo de munición no se puede usar en ráfaga.\n\n\cfCabezas nucleares \"Slayer\":\c- Un favorito de la anterior serie. Estas bombas nucleares en miniatura contienen en su interior Energía Ardiente altamente enriquecida que causará una devastación total en un radio masivo, causando la muerte segura de incluso los demonios de mayor rango en los ejércitos del Infierno. Tampoco pueden usarse en ráfaga.\n\nEl Hellblazer fue descontinuado tras la destrucción de las oficinas de Imanaki Corp en 2009, pero el \cfInstituto Tecnológico Tach-Engine\c- ha conseguido reproducir el arma tras su caída. Sin embargo, los modelos replicados no emplean esta \"Energía Ardiente\", así que no son tan destructivos como debían ser. En su lugar, usan el altamente volátil \cfNokron\c-, uno de los dos elementos exóticos empleados en el proceso de Microfusión, ya que su potencial para el uso en explosivos es bastante notable.\n\nA diferencia de su predecesor, el cual se basaba en simple detección de proximidad, este modelo en su lugar puede comunicarse con matrices de objetivos para proveer de una búsqueda selectiva de objetivos de mayor precisión.\n\n\cfFuego Primario:\c- Dispara la munición cargada con su propulsión armada y lista. Pulsa para disparar un misil, mantén para precargar 2 misiles adicionales (el fuego secundario cancela este proceso). Mientras se mantenga, el arma podrá marcar un objetivo por cada misil cargado con cada pulsación de fuego terciario. Pulsar recarga borra todos los objetivos marcados.\n\n\cfFuego Secundario:\c- Lanza la munición cargada sin armar, como una granada. Pulsa para disparar una granada, mantén para precargar 2 granadas adicionales (el fuego primario cancela este proceso). La búsqueda de objetivos también afecta a las granadas, ya que intentarán guiarse hacia el objetivo con cada rebote.\n\n\cfFuego Terciario:\c- Alterna entre las municiones a usar en la próxima recarga.\n\n\cfRecarga:\c- Durante una recarga, puedes o bien rellenar el cargador actual (fácil a través del contenedor de \cfHammerspace™\c-), o cambiarlo por otro tipo de munición.\n\n\cfTécnicas:\c- Las granadas detonan automáticamente en proximidad a objetivos hostiles, así que todavía puedes alcanzar ese disparo aunque solo los hayas rozado. No está muy claro como detectan los objetivos, o como saben que son hostiles.\n\n\cxNotas de Saya:\c-\n\cf¿\"Energía Ardiente\"? ¿Coño es eso? ¿Energía que le sacan del ano a un demonio después de atiborrarse a curry? Más me da, cualquier cosa salida del Infierno es mejor no tocarla, sabes. Tú mira lo que le pasó a la puta UAC, metiendo las pezuñas donde no los llaman.\c-\n\n\cfAhora que lo miro, lo de que las réplicas usen Nokron fue una buena idea. No sabía yo que esa cosa explotara. Realmente da que pensar sobre todos esos mecanismos de seguridad que tienen los motores de Microfusión, definitivamente justificados si ESO puede pasar.\c-"; SWWM_LORETXT_IBUKI = "\cxNombre Completo:\c-\n\cf Ibuki Miyamoto\c-\n\cf Oni Rojo (nombre en clave)\c-\n\cxNacionalidad:\c-\n\cf Japonesa\c-\n\cxFecha de Nacimiento:\c-\n\cf 2074-09-09\c-\n\cxTwitter\c-\n\cf @lewd_ibuki (principal)\c-\n\cf @ibuki_tiddy (fotos)\c-\n\n\cfIbuki\c- es el resultado del programa de supersoldado \cfOni Rojo\c-, ideado por \cfSaya Miyamoto\c- de \cfAkari Labs\c-. La existencia de este proyecto se mantuvo en secreto hasta su revelación pública en Junio de 2077. Hubo considerable controversia alrededor del programa Oni Rojo, incluyendo la implicación personal de Saya en él, habiendo aceptado un pago de 40 mil millones de dólares a cambio (lo cual se descubrió tener relación con la anterior venta del estado de Texas a México semanas antes). A pesar de su claro potencial y extraordinarias habilidades de combate, fue enviada demasiado tarde, ya que solo momentos después, la \cfCicatriz Blanca\c- ocurrió, y con ella, la devastación total de los \cfEstados Unidos\c-.\n\nMuchos años después del incidente, Ibuki fue recuperada con éxito del incendiado yermo, habiendo pasado la mayor parte del tiempo como una especie de \"mercenaria ambulante\". Regresó a Japón en Junio de 2091, y una vez instalada, pasó por varios pequeños empleos hasta encontrar su verdadera vocación como modelo de desnudos.\n\nAl haber sido creada desde el ADN de Saya, ha efectivamente heredado la inmortalidad total de la familia Miyamoto, es más, también ha recibido varias mejoras por encima las cuales han aumentado su fuerza y reflejos, junto con hacer que su piel sea a prueba de balas. Saya ha comentado que esto último significa que no necesita llevar ropa.\n\nCitando adicionalmente las \"interesantes\" decisiones de Saya, está el hecho de sus particulares rasgos físicos aparte de su fuerza, incluyendo su obviamente obsceno tamaño de busto, que muchos consideran poco práctico, totalmente en desacuerdo con Saya. Al preguntarle por más detalles, comenzó una extensa diatriba en Twitter centrada sobre \"waifus\".\n\n\cxNotas de Saya:\c-\n\cfOK vale sí, me encantan los pechotes. Pero ¿por que todo dios tiene que soltarme mierda por eso? ¿Acaso hay ALGO malo en eso, eh? Ya, eso pensaba.\c-\n\n\cfVale, Ibuki fue como, mi mayor hornypost en la vida. No me pude aguantar, sabes. Putos... Americanos idiotas que se me acercan con una barbaridad de pasta y me dicen que les haga un supersoldado. Sí, supongo que estuvieron espiando todo el rollo ese que posteé sobre bioingeniería y tal. Madre, si es que estaban desesperados, pues sí... Era realmente patético. PERO, tuve una idea justo entonces. A ver... es que estaba thirsty a más no poder, y pensé... ¿y si.. me hiciera una superfuerte novia tetuda, justo ahí?\c-\n\n\cfY bueno... eso es justo lo que pasó. Pasé tres años con todo eso, criándola en ese tubo. Era mi primera vez haciendo algo así, pero tuve suerte y todo salió de puta madre. Aunque... cuando empezaron a notar lo de la \"anormalidad en el desarrollo de los pechos del sujeto\" me puse nerviosa. ¿Y si lo mandaban todo a la mierda? Acabé admitiendo que era intencionado, soltando no se qué mierda que se me pasó por la cabeza, algo de \"tácticas de distracción\" o así, ya ni me acuerdo. Al final lo dejaron pasar.\c-\n\n\cfOh ya, ¿sabias? Técnicamente, Ibuki es mi clon. Sí, puede que haya habido algún que otro cambio, pero si mi desarrollo no se hubiera parado así porque sí, quien sabe, a lo mejor me habría visto así de sexy algún día. Desde luego da que pensar, vaya...\c-\n\n\cfSí, también me he dado cuenta de que eso significa que en teoría lo estoy haciendo conmigo misma. ¿Y? ¿Acaso es eso un problema también?\c-"; SWWM_LORETXT_IMANAKI = "\cxNombre:\c-\n\cf Fundación de Investigación Imanaki\c-\n\cxClasificación:\c-\n\cf Centro de Investigación de Alto Secreto\c-\n\cxLocalización:\c-\n\cf Kereshnovka, Rusia\c-\n\nLa \cfFundación de Investigación Imanaki\c- fue fundada en 2004 por \cfTetsuya Imanaki\c-, con sus oficinas centrales en el pueblo de \cfKereshnovka\c-, al norte de Siberia.\n\nAunque intentaron mantener todo su trabajo en secreto, mucha información era filtrada regularmente por fuentes anónimas. Es bien sabido que Imanaki Corp se dedicaba a experimentar con viajes interdimensionales, específicamente al mundo del \cfInfierno\c-. Mucho se estudió de ese mundo, y con los conocimientos ganados con la investigación, la fundación entonces comenzó a hacer pruebas con combinar tecnología humana y demoníaca. Al principio no se sabía exactamente como obtuvieron la tecnología para el viaje interdimensional, hasta que documentos de la \cfFacultad de Iluminados Nadies\c- fueron descubiertos a finales de 2099 demostrando su colaboración, y que la mayor parte de su tecnología era de origen \cfXevethan\c-, al igual que la IA \cfLANIR\c-.\n\nTras un incidente en el que algunos de los ghouls locales intentaron atacar las instalaciones, Imanaki Corp contactó con la \cfUAAF\c- para pedir defensa armada. Cuando el hombre que enviaron para negociar su contrato llegó al pueblo, fue asesinado al momento por uno de los ghouls. Esto hizo que la UAAF enviara soldados inmediatamente al área, para exterminar a estas criaturas, ya que resultó que eran mucho más hostiles de lo que habían pensado. Esta \"caza\" de los ghouls comenzó a mediados de 2007, y duró dos años seguidos, mientras todo el pueblo y sus alrededores fueron peinados a conciencia y toda criatura encontrada fue exterminada, excepto una.\n\nEl último ghoul que encontraron probó ser mucho más duro que el resto, llevándose varias vidas por delante mientras causaba incendios masivos en el bosque de Nuskar. Los pueblerinos les habían advertido de que esto no era un monstruo normal, sino algo mucho más poderoso, algo que no podrían derrotar. Llevó varios días debilitar al ghoul, y cuando finalmente se preparaban para el golpe de gracia, un hombre se aproximó a los soldados, y se puso entre ellos y la bestia. Definitivamente no era uno de los lugareños, y hablaba un idioma que no pudo ser identificado por nadie. A pesar de que se le ordenara retroceder, no se movió de su lugar, señalando a los soldados y gritándoles. Al final decidieron abrir fuego. Este fue uno de los mayores errores que la humanidad cometería.\n\nEse hombre no era otro sino el \cfPríncipe Anthon Anderken\c-, uno de los miembros más importantes de la realeza \cfAnarukon\c-, quien, por pura casualidad, había llegado a la Tierra para capturar a ese ghoul específicamente, por razones no determinadas, justo en el momento exacto en que comenzó la caza. Tras recibir los disparos, el ghoul se enfureció, y empleó sus últimas fuerzas para envolver todo en fuego infernal. La fuerza de esta explosión de fuego cegador pudo oírse por todo el mundo. Ningún soldado sobrevivió, siendo todo el bosque reducido a cenizas en un instante. Se desconoce lo que ocurrió con Anthon y el ghoul, pero la mayoría asume que ambos sobrevivieron.\n\nTras este espectacular incidente, Imanki Corp resumió sus operaciones, ahora libre de la amenaza de los ghouls, aunque se enfrentaron a muchas críticas de los lugareños por su decisión de destruir lo que consideraban un \"tesoro nacional\". Esta paz relativa no duró mucho, ya que las consecuencias del ataque a Anthon finalmente los alcanzarían. En Diciembre de 2009, antes de otra expedición rutinaria al Infierno, sus portales fueron redirigidos por un atacante no identificado, y de ellos salió un enjambre de soldados Anarukon, aniquilando a todo aquel que encontraran en las instalaciones y sus alrededores. Las oficinas de Imanaki Corp fueron destruidas completamente, y las fuerzas Anarukon permanecieron en el pueblo durante días, hasta regresar a su mundo una vez satisfechos con la destrucción que habían causado como venganza.\n\nUn tiempo después de estos eventos, un pequeño equipo de reconocimiento consiguió recuperar algunos de los materiales de investigación y otros documentos de entre los escombros, los cuales caerían después en las manos de la \cfUAC\c-.\n\n\cxNotas de Saya:\c-\n\cfYa he hablado de lo de la caza de ghouls en otro artículo, así que no voy a meterme en detalles aquí, pero sí, mira tú. La \"gran y poderosa\" UAC, robando mierdas de esta gente.\c-\n\n\cfSabes, cuando empezaron a hablar de meterse en teletransportes y tal, LO SABÍA. Sabía perfectamente justo entonces que estaban usando toda esa mierda que robaron. Putos bastardos, hasta dijeron ser \"los primeros\", también.\c-"; SWWM_LORETXT_IMANAKIT = "\cxNombre Completo:\c-\n\cf Tetsuya Imanaki\c-\n\cxNacionalidad:\c-\n\cf Indeterminado\c-\n\cxFecha de Nacimiento:\c-\n\cf Indeterminado\c-\n\nEl fundador y CEO de \cfImanaki Corp\c-, y también el único miembro restante de la familia Imanaki tras los \cfAsesinatos de la Mansión Onoke\c- de 2003. \cfTetsuya\c- siempre ha mantenido mucho secretismo acerca de sí mismo, así que no se sabe nada realmente de su vida personal o historia, ni su apariencia física.\n\nDurante los eventos de la \cfCaza de Ghouls\c-, y más tarde el \cfIncidente Hellbound\c-, una vez más evitó la muerte gracias a su ausencia de las instalaciones de Imanaki Corp. Sin embargo, nadie sabe donde se encontraba realmente, y desde entonces ha desaparecido por completo.\n\n\cxNotas de Saya:\c-\n\cfUn artículo corto, lo sé. En serio que no hay nada acerca de este tío. Es como si... nunca hubiera dejado ni un solo rastro aparte de... el hecho de que existió y estaba a cargo de todo eso.\c-"; diff --git a/language.version b/language.version index e27dca337..6d81254bd 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r464 \cu(Sat 8 May 19:26:59 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r464 \cu(2021-05-08 19:26:59)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r465 \cu(Sun 9 May 02:39:34 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r465 \cu(2021-05-09 02:39:34)\c-"; diff --git a/lore/default/hellblazer.txt b/lore/default/hellblazer.txt index c8f6fd342..a4059890e 100644 --- a/lore/default/hellblazer.txt +++ b/lore/default/hellblazer.txt @@ -13,27 +13,29 @@ TXT \cxClassification:\c- \cf Mini-Missile Launcher\c- -The **Hellblazer** is the third incarnation of the **Hellfire Cannon**, one of the many weapons that **Imanaki Corp** had constructed based on their experiments with harnessing what they called **Ardent Energy**, a power source from the depths of **Hell** itself. It is a direct improvement of the Mark 2 model, the **Hellrazer**, being much easier to reload thanks to its simple drum magazine system. It also features many more types of ammunition this time: +The **Hellblazer** is the third incarnation of the **Hellfire Cannon**, one of the many weapons that **Imanaki Corp** had constructed based on their experiments with harnessing what they called **Ardent Energy**, a power source from the depths of **Hell** itself. It is a direct improvement of the Mark 2 model, the **Hellrazer**, sporting burst-fire capabilities and a simple drum magazine system for easier reloads. It also features many more types of ammunition this time: \cf"Blazer" grenades:\c- The standard ammunition. Highly explosive despite their small size, thanks to the highly condensed Ardent Energy contained within. \cf"Crackshot" cluster grenades:\c- These burst into smaller grenades which will spread on impact, bouncing around for a short time before detonating. -\cf"Ravager" incendiary grenades:\c- Ravagers release a wave of unrefined Ardent Energy on detonation, covering a very wide area around themselves. Quite useful in tight spaces, where this scorching hot plasma won't dissipate as quickly, thoroughly roasting any targets within. +\cf"Ravager" incendiary grenades:\c- Ravagers release a wave of unrefined Ardent Energy on detonation, covering a very wide area around themselves. Quite useful in tight spaces, where this scorching hot plasma won't dissipate as quickly, thoroughly roasting any targets within. For safety reasons this ammunition type cannot be employed in burst-fire. -\cf"Slayer" warheads:\c- A returning favorite from the previous series. These miniature nukes contain within themselves highly enriched Ardent Energy that will cause total devastation in a large radius, bringing swift death to even the highest ranked demons in Hell's armies. +\cf"Slayer" warheads:\c- A returning favorite from the previous series. These miniature nukes contain within themselves highly enriched Ardent Energy that will cause total devastation in a large radius, bringing swift death to even the highest ranked demons in Hell's armies. Cannot operate in burst-fire mode either. The Hellblazer was discontinued following the destruction of the Imanaki Corp headquarters in 2009, but the **Tach-Engine Technology Institute** had managed to reproduce this weapon following their demise. Replicated models do not actually employ this "Ardent Energy" however, so they are not as destructive as they were meant to be. Rather, they are powered by the highly volatile **Nokron**, one of the two exotic elements involved in the process of Microfusion, as its potential for use in explosives is quite notable. -\cfPrimary Fire:\c- Shoots the loaded ammunition with its propulsion armed and ready. +Unlike its predecessor, which relied on simple proximity detection, this model can instead interface with targeting arrays in order to provide more precise selective target seeking. -\cfSecondary Fire:\c- Lobs the loaded ammunition unarmed, as a bouncing grenade. +\cfPrimary Fire:\c- Shoots the loaded ammunition with its propulsion armed and ready. Tap to fire one missile, hold to preload up to 2 additional missiles (secondary fire cancels this process). While held, the weapon will pick one target for each loaded missile with each tap of tertiary fire. Tapping reload clears all marked targets. + +\cfSecondary Fire:\c- Lobs the loaded ammunition unarmed, as a bouncing grenade. Tap to fire one grenade, hold to preload up to 2 additional grenades (primary Fire cancels this process). Target seeking also affects grenades, as they will attempt to steer themselves towards the target on bounce. \cfTertiary Fire:\c- Cycles the ammo type for the next reload. \cfReloading:\c- During a reload, you may either refill the current mag (quite easy through the **Hammerspace™** container), or swap it out for a different ammo type. -\cfTechniques:\c- The grenades will automatically detonate on proximity to hostile targets, so you may still land the shot even if you merely grazed them. It is unclear how exactly they detect the targets, or know that they are hostile. +\cfTechniques:\c- The grenades will automatically detonate on proximity to any hostile targets (unless explicitly seeking one), so you may still land the shot even if you merely grazed them. It is unclear how exactly they detect the targets, or know that they are hostile. \cxSaya's Notes:\c- \cf"Ardent Energy"? What's that? Energy extracted from a demon's ass after it ate too much curry? Whatever, anything coming from Hell is best left untouched, y'know. Just look at what happened to the fucking UAC, going around sticking their paws where they shouldn't.\c- diff --git a/lore/es/hellblazer.txt b/lore/es/hellblazer.txt index 54c3aaa0e..52cf7d114 100644 --- a/lore/es/hellblazer.txt +++ b/lore/es/hellblazer.txt @@ -7,21 +7,23 @@ TXT \cxClasificación:\c- \cf Lanzador de Minimisiles\c- -El **Hellblazer** es la tercera encarnación del **Cañón de Fuego Infernal**, una de las muchas armas que **Imanaki Corp** había construido basándose en sus experimentos explotando lo que llamaron **Energía Ardiente**, una fuente de poder de las profundidades del mismo **Infierno**. Es una mejora directa del modelo Mark 2, el **Hellrazer**, siendo mucho más fácil de recargar gracias a su sistema de simples cargadores en barril. También posee más tipos de munición esta vez: +El **Hellblazer** es la tercera encarnación del **Cañón de Fuego Infernal**, una de las muchas armas que **Imanaki Corp** había construido basándose en sus experimentos explotando lo que llamaron **Energía Ardiente**, una fuente de poder de las profundidades del mismo **Infierno**. Es una mejora directa del modelo Mark 2, el **Hellrazer**, poseyendo capacidades de fuego en ráfaga y un simple sistema de cargador en barril para facilitar recargas. También posee más tipos de munición esta vez: \cfGranadas "Blazer":\c- La munición estándar. Altamente explosivas a pesar de su diminuto tamaño, gracias a la Energía Ardiente superconcentrada que contienen. \cfGranadas en clúster "Crackshot":\c- Éstas explotan en granadas más pequeñas que se dispersan en el impacto, rebotando durante un tiempo antes de detonar. -\cfGranadas incendiarias "Ravager":\c- Las Ravagers liberan una onda de Energía Ardiente sin refinar cuando detonan, cubriendo una zona amplia a su alrededor. Muy útiles en espacios cerrados, donde su plasma abrasador no se disipará tan fácilmente, tostando a conciencia todos los objetivos encontrados. +\cfGranadas incendiarias "Ravager":\c- Las Ravagers liberan una onda de Energía Ardiente sin refinar cuando detonan, cubriendo una zona amplia a su alrededor. Muy útiles en espacios cerrados, donde su plasma abrasador no se disipará tan fácilmente, tostando a conciencia todos los objetivos encontrados. Por razones de seguridad este tipo de munición no se puede usar en ráfaga. -\cfCabezas nucleares "Slayer":\c- Un favorito de la anterior serie. Estas bombas nucleares en miniatura contienen en su interior Energía Ardiente altamente enriquecida que causará una devastación total en un radio masivo, causando la muerte segura de incluso los demonios de mayor rango en los ejércitos del Infierno. +\cfCabezas nucleares "Slayer":\c- Un favorito de la anterior serie. Estas bombas nucleares en miniatura contienen en su interior Energía Ardiente altamente enriquecida que causará una devastación total en un radio masivo, causando la muerte segura de incluso los demonios de mayor rango en los ejércitos del Infierno. Tampoco pueden usarse en ráfaga. El Hellblazer fue descontinuado tras la destrucción de las oficinas de Imanaki Corp en 2009, pero el **Instituto Tecnológico Tach-Engine** ha conseguido reproducir el arma tras su caída. Sin embargo, los modelos replicados no emplean esta "Energía Ardiente", así que no son tan destructivos como debían ser. En su lugar, usan el altamente volátil **Nokron**, uno de los dos elementos exóticos empleados en el proceso de Microfusión, ya que su potencial para el uso en explosivos es bastante notable. -\cfFuego Primario:\c- Dispara la munición cargada con su propulsión armada y lista. +A diferencia de su predecesor, el cual se basaba en simple detección de proximidad, este modelo en su lugar puede comunicarse con matrices de objetivos para proveer de una búsqueda selectiva de objetivos de mayor precisión. -\cfFuego Secundario:\c- Lanza la munición cargada sin armar, como una granada. +\cfFuego Primario:\c- Dispara la munición cargada con su propulsión armada y lista. Pulsa para disparar un misil, mantén para precargar 2 misiles adicionales (el fuego secundario cancela este proceso). Mientras se mantenga, el arma podrá marcar un objetivo por cada misil cargado con cada pulsación de fuego terciario. Pulsar recarga borra todos los objetivos marcados. + +\cfFuego Secundario:\c- Lanza la munición cargada sin armar, como una granada. Pulsa para disparar una granada, mantén para precargar 2 granadas adicionales (el fuego primario cancela este proceso). La búsqueda de objetivos también afecta a las granadas, ya que intentarán guiarse hacia el objetivo con cada rebote. \cfFuego Terciario:\c- Alterna entre las municiones a usar en la próxima recarga. diff --git a/sndinfo.txt b/sndinfo.txt index 571268457..4e0f83b52 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -728,6 +728,9 @@ $random hellblazer/hitw { hellblazer/hitw1 hellblazer/hitw2 } $limit hellblazer/hitw 32 hellblazer/bounce sounds/hellblazer/blaze_bounce.ogg hellblazer/fly sounds/hellblazer/blaze_fly.ogg +hellblazer/preload sounds/hellblazer/blaze_preload.ogg +hellblazer/lock sounds/hellblazer/blaze_lock.ogg +hellblazer/clear sounds/hellblazer/blaze_clear.ogg biospark/select sounds/sparkster/spark_select.ogg biospark/deselect sounds/sparkster/spark_deselect.ogg diff --git a/sounds/hellblazer/blaze_clear.ogg b/sounds/hellblazer/blaze_clear.ogg new file mode 100644 index 000000000..f4795e6fa Binary files /dev/null and b/sounds/hellblazer/blaze_clear.ogg differ diff --git a/sounds/hellblazer/blaze_lock.ogg b/sounds/hellblazer/blaze_lock.ogg new file mode 100644 index 000000000..a45d1dc2d Binary files /dev/null and b/sounds/hellblazer/blaze_lock.ogg differ diff --git a/sounds/hellblazer/blaze_preload.ogg b/sounds/hellblazer/blaze_preload.ogg new file mode 100644 index 000000000..b753c9347 Binary files /dev/null and b/sounds/hellblazer/blaze_preload.ogg differ diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index cff037590..7c0d0e560 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -95,11 +95,52 @@ Class Hellblazer : SWWMWeapon ui Class lastammo; int spinskipped; HellblazerXSub pickuprockets[6]; + int preload; // additional loaded missiles (up to 2) + Actor seektarget[3]; + int seekcnt; + int preloadcnt; Property ClipCount : clipcount; - transient ui TextureID WeaponBox, AmmoIcon[4], LoadedIcon[4]; + transient ui TextureID WeaponBox, AmmoIcon[4], LoadedIcon[4], LockIcon[4]; transient ui Font TewiFont; + transient ui SWWMProjectionData projdata; + + override void RenderUnderlay( RenderEvent e ) + { + static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; + if ( !LockIcon[0] ) + { + LockIcon[0] = TexMan.CheckForTexture("graphics/HUD/HellblazerMissileLock.png",TexMan.Type_Any); + LockIcon[1] = TexMan.CheckForTexture("graphics/HUD/HellblazerCrackshotLock.png",TexMan.Type_Any); + LockIcon[2] = TexMan.CheckForTexture("graphics/HUD/HellblazerRavagerLock.png",TexMan.Type_Any); + LockIcon[3] = TexMan.CheckForTexture("graphics/HUD/HellblazerWarheadLock.png",TexMan.Type_Any); + } + int curtype = 0; + for ( int i=0; i<4; i++ ) + { + if ( loadammo != types[i] ) continue; + curtype = i; + break; + } + SWWMUtility.PrepareProjData(projdata,e.ViewPos,e.ViewAngle,e.ViewPitch,e.ViewRoll,players[consoleplayer].fov); + int cliptop = projdata.viewy, clipbottom = projdata.viewy+projdata.viewh, + clipleft = projdata.viewx, clipright = projdata.viewx+projdata.vieww; + Vector2 hs; + if ( swwm_hudscale <= 0 ) hs = StatusBar.GetHUDScale(); + else hs.x = swwm_hudscale; + hs.y = hs.x; + Vector2 ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y); + for ( int i=0; i<3; i++ ) + { + if ( !seektarget[i] ) continue; + Vector3 tpos = seektarget[i].prev*(1.-e.FracTic)+seektarget[i].pos*e.FracTic; + Vector3 ndc = SWWMUtility.ProjectPoint(projdata,e.viewpos+level.Vec3Diff(e.viewpos,tpos+(0,0,seektarget[i].Height/2))); + if ( ndc.z > 1. ) continue; + Vector2 vpos = SWWMUtility.NDCToViewport(projdata,ndc); + Screen.DrawTexture(LockIcon[curtype],false,vpos.x/hs.x,vpos.y/hs.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_CenterOffset,true,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + } + } override void DrawWeapon( double TicFrac, double bx, double by, Vector2 hs, Vector2 ss ) { @@ -148,7 +189,7 @@ Class Hellblazer : SWWMWeapon xx = -54; for ( int i=0; i<6; i++ ) { - Screen.DrawTexture(LoadedIcon[0],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i==magpos)?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + Screen.DrawTexture(LoadedIcon[0],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); xx += 9; } break; @@ -156,7 +197,7 @@ Class Hellblazer : SWWMWeapon xx = -49; for ( int i=0; i<3; i++ ) { - Screen.DrawTexture(LoadedIcon[1],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i==magpos)?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + Screen.DrawTexture(LoadedIcon[1],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); xx += 18; } break; @@ -164,7 +205,7 @@ Class Hellblazer : SWWMWeapon xx = -49; for ( int i=0; i<3; i++ ) { - Screen.DrawTexture(LoadedIcon[2],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i==magpos)?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + Screen.DrawTexture(LoadedIcon[2],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); xx += 18; } break; @@ -172,7 +213,7 @@ Class Hellblazer : SWWMWeapon xx = -45; for ( int i=0; i<2; i++ ) { - Screen.DrawTexture(LoadedIcon[3],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i==magpos)?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); + Screen.DrawTexture(LoadedIcon[3],false,bx+xx,by+yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,((i<=magpos)&&(i>=(magpos-preload)))?magstate[i]?Color(192,0,0,0):Color(0,0,0,0):magstate[i]?Color(224,0,0,0):Color(96,0,0,0),DTA_Desaturate,magstate[i]?192:0); xx += 27; } break; @@ -213,7 +254,7 @@ Class Hellblazer : SWWMWeapon A_BumpFOV(bAlt?.96:.93); A_PlayerFire(); invoker.clipcount = max(0,invoker.clipcount-1); - invoker.magstate[invoker.magpos] = true; + invoker.magstate[invoker.magpos-invoker.preload] = true; invoker.spinskipped++; Vector3 x, y, z, x2, y2, z2, dir, origin; double a, s; @@ -226,6 +267,9 @@ Class Hellblazer : SWWMWeapon dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); let p = Spawn(projs[type+4*bAlt],origin); p.target = self; + int tidx = max(0,invoker.seekcnt-(invoker.preload+1)); + if ( invoker.seektarget[tidx] ) HellblazerMissile(p).seektarget = invoker.seektarget[tidx]; + if ( invoker.preload <= 0 ) for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; p.angle = atan2(dir.y,dir.x); p.pitch = asin(-dir.z); p.vel = dir*p.speed; @@ -373,7 +417,7 @@ Class Hellblazer : SWWMWeapon action void A_ZoomHold() { - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); if ( player.cmd.buttons&BT_ZOOM ) return; player.SetPSPrite(PSP_WEAPON,invoker.FindState("Ready")); } @@ -435,9 +479,14 @@ Class Hellblazer : SWWMWeapon { static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; static const int magcap[] = {6,3,3,2}; + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; for ( int i=0; i<4; i++ ) { if ( invoker.loadammo != types[i] ) continue; + // check preloaded rockets first (note, this theoretically would never go below zero) + invoker.magpos = max(0,invoker.magpos-invoker.preload); + invoker.preload = 0; + // do the spin invoker.magpos = (invoker.magpos+invoker.spinskipped)%magcap[i]; invoker.spinskipped = 0; break; @@ -470,6 +519,70 @@ Class Hellblazer : SWWMWeapon SetState(SpawnState+curtype+1); } + action void A_CheckLockOn() + { + if ( invoker.seekcnt > invoker.preload ) return; + Vector3 x, y, z, x2, y2, z2, dir; + [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); + Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x); + // try to catch target in cone of vision + [x2, y2, z2] = swwm_CoordUtil.GetAxes(pitch,angle,roll); + Array hits; + hits.Clear(); + int rings = 1; + FLineTraceData d; + for ( double i=0; i<.1; i+=.02 ) + { + for ( int j=0; j<360; j+=(360/rings) ) + { + dir = (x2+y2*cos(j)*i+z2*sin(j)*i).unit(); + LineTrace(atan2(dir.y,dir.x),8000.,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); + if ( d.HitType != TRACE_HitActor ) continue; + if ( (d.HitActor == invoker.seektarget[0]) + || (d.HitActor == invoker.seektarget[1]) + || (d.HitActor == invoker.seektarget[2]) ) continue; + if ( !d.HitActor.bISMONSTER && !(d.HitActor is 'BossBrain') && !d.HitActor.player ) + continue; + if ( d.HitActor.IsFriend(self) ) continue; + bool addme = true; + for ( int k=0; k= 10 ) + { + invoker.preloadcnt = 0; + return A_JumpByAmmoType("PreLoad_1","PreLoad_2","PreFire_3","PreFire_4","Ready_G"); + } + return ResolveState(null); + } return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); } + Wait; Fire_1: XZW2 A 1 A_HellblazerFire(0); XZW2 QRSTUVW 2; + XZW2 A 0 + { + // chain-fire + if ( invoker.preload > 0 ) + { + invoker.preload--; + invoker.spinskipped--; + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + } + return ResolveState(null); + } Goto Cycle_1; Fire_2: XZW6 V 1 A_HellblazerFire(1); XZW7 LMNOPQR 2; + XZW6 V 0 + { + // chain-fire + if ( invoker.preload > 0 ) + { + invoker.preload--; + invoker.spinskipped--; + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + } + return ResolveState(null); + } Goto Cycle_2; Fire_3: XZWB T 1 A_HellblazerFire(2); @@ -614,23 +767,63 @@ Class Hellblazer : SWWMWeapon XZWM IJKLMNO 2; Goto Ready_G; // state jump to cycling is done elsewhere AltFire: - XZW2 A 0 + #### # 0 + { + invoker.preloadcnt = 0; + invoker.preload = 0; + } + #### # 1 { if ( invoker.clipcount <= 0 ) { if ( CountInv(invoker.nextammo) <= 0 ) A_PickNextAmmo(); return A_JumpByAmmoType("Unload_1","Unload_2","Unload_3","Unload_4","Unload_G"); } + if ( player.cmd.buttons&BT_ALTATTACK ) + { + if ( (player.cmd.buttons&BT_ATTACK) || (invoker.clipcount < 2) ) + return A_JumpByAmmoType("PreAltFire_1","PreAltFire_2","PreAltFire_3","PreAltFire_4","Ready_G"); + invoker.preloadcnt++; + if ( invoker.preloadcnt >= 10 ) + { + invoker.preloadcnt = 0; + return A_JumpByAmmoType("PreAltLoad_1","PreAltLoad_2","PreAltFire_3","PreAltFire_4","Ready_G"); + } + return ResolveState(null); + } return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); } + Wait; AltFire_1: XZW2 A 1 A_HellblazerFire(0,true); XZW2 XYZ 2; XZW3 ABCD 2; + XZW2 A 0 + { + // chain-fire + if ( invoker.preload > 0 ) + { + invoker.preload--; + invoker.spinskipped--; + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + } + return ResolveState(null); + } Goto Cycle_1; AltFire_2: XZW6 V 1 A_HellblazerFire(1,true); XZW7 STUVWXY 2; + XZW6 V 0 + { + // chain-fire + if ( invoker.preload > 0 ) + { + invoker.preload--; + invoker.spinskipped--; + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + } + return ResolveState(null); + } Goto Cycle_2; AltFire_3: XZWB T 1 A_HellblazerFire(2,true); @@ -644,6 +837,264 @@ Class Hellblazer : SWWMWeapon XZWL S 1; XZWM PQRSTUV 2; Goto Ready_G; // state jump to cycling is done elsewhere + PreLoad_1: + XZW2 A 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP); + XZW2 A 2 + { + invoker.spinskipped--; + invoker.magpos = (invoker.magpos+1)%6; + invoker.preload++; + A_GlassOverlay("Cycle_G1"); + } + XZW3 E 2; + XZW3 FGHI 2; + XZW3 I 0; + XZW3 FE 2; + XZW2 A 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + if ( (player.cmd.buttons&BT_ALTATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) ) + return A_JumpByAmmoType("PreFire_1","PreFire_2","PreFire_3","PreFire_4","Ready_G"); + return ResolveState("PreLoad_1"); + } + Wait; + PreLoad_2: + XZW6 V 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP); + XZW6 V 2 + { + invoker.spinskipped--; + invoker.magpos = (invoker.magpos+1)%3; + invoker.preload++; + A_GlassOverlay("Cycle_G2"); + } + XZW7 Z 2; + XZW8 ABCDEFG 2; + XZW8 G 0; + XZW8 A 2; + XZW7 Z 2; + XZW6 V 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + if ( (player.cmd.buttons&BT_ALTATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) ) + return A_JumpByAmmoType("PreFire_1","PreFire_2","PreFire_3","PreFire_4","Ready_G"); + return ResolveState("PreLoad_2"); + } + Wait; + PreAltLoad_1: + XZW2 A 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP); + XZW2 A 2 + { + invoker.spinskipped--; + invoker.magpos = (invoker.magpos+1)%6; + invoker.preload++; + A_GlassOverlay("Cycle_G1"); + } + XZW3 E 2; + XZW3 FGHI 2; + XZW3 I 0; + XZW3 FE 2; + XZW2 A 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + if ( (player.cmd.buttons&BT_ATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) ) + return A_JumpByAmmoType("PreAltFire_1","PreAltFire_2","PreAltFire_3","PreAltFire_4","Ready_G"); + return ResolveState("PreAltLoad_1"); + } + Wait; + PreAltLoad_2: + XZW6 V 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP); + XZW6 V 2 + { + invoker.spinskipped--; + invoker.magpos = (invoker.magpos+1)%3; + invoker.preload++; + A_GlassOverlay("Cycle_G2"); + } + XZW7 Z 2; + XZW8 ABCDEFG 2; + XZW8 G 0; + XZW8 A 2; + XZW7 Z 2; + XZW6 V 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + if ( (player.cmd.buttons&BT_ATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) ) + return A_JumpByAmmoType("PreAltFire_1","PreAltFire_2","PreAltFire_3","PreAltFire_4","Ready_G"); + return ResolveState("PreAltLoad_2"); + } + Wait; + PreFire_1: + XZW2 A 0 + { + invoker.seekcnt = 0; + } + XZW2 A 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreFire_2: + XZW6 V 0 + { + invoker.seekcnt = 0; + } + XZW6 V 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreFire_3: + XZWB T 0 + { + invoker.seekcnt = 0; + } + XZWB T 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreFire_4: + XZWG R 0 + { + invoker.seekcnt = 0; + } + XZWG R 1 + { + if ( !(player.cmd.buttons&BT_ATTACK) ) + return A_JumpByAmmoType("Fire_1","Fire_2","Fire_3","Fire_4","Fire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreAltFire_1: + XZW2 A 0 + { + invoker.seekcnt = 0; + } + XZW2 A 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreAltFire_2: + XZW6 V 0 + { + invoker.seekcnt = 0; + } + XZW6 V 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreAltFire_3: + XZWB T 0 + { + invoker.seekcnt = 0; + } + XZWB T 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; + PreAltFire_4: + XZWG R 0 + { + invoker.seekcnt = 0; + } + XZWG R 1 + { + if ( !(player.cmd.buttons&BT_ALTATTACK) ) + return A_JumpByAmmoType("AltFire_1","AltFire_2","AltFire_3","AltFire_4","AltFire_G"); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); + if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) ) + A_CheckLockOn(); + if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) ) + { + for ( int i=0; i<3; i++ ) invoker.seektarget[i] = null; + if ( invoker.seekcnt > 0 ) A_StartSound("hellblazer/clear",CHAN_WEAPON,CHANF_OVERLAP); + invoker.seekcnt = 0; + } + return ResolveState(null); + } + Wait; Cycle_1: XZW2 A 2 { @@ -849,7 +1300,7 @@ Class Hellblazer : SWWMWeapon #### # 1 { A_PickNextAmmo(); - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); } #### # 1 A_ZoomHold(); Wait; diff --git a/zscript/weapons/swwm_blazeit_fx.zsc b/zscript/weapons/swwm_blazeit_fx.zsc index 2a12dc361..8f4b3218b 100644 --- a/zscript/weapons/swwm_blazeit_fx.zsc +++ b/zscript/weapons/swwm_blazeit_fx.zsc @@ -236,6 +236,8 @@ Class HellblazerFlare : Actor Class HellblazerMissile : Actor { int deto; + Actor seektarget; + Vector3 InitialDir, Acceleration; Default { @@ -281,12 +283,38 @@ Class HellblazerMissile : Actor let t = Spawn("HellblazerTrail",level.Vec3Offset(pos,-vel.unit()*i+traildir*3)); t.vel = traildir*4.; } + if ( InitialDir.length() < double.epsilon ) InitialDir = vel.unit(); + vel += Acceleration/GameTicRate; + Vector3 dir = vel.unit(); + if ( vel.length() > 50. ) vel = dir*50.; } if ( deto > 1 ) { ExplodeMissile(); return; } + if ( seektarget ) + { + // seek tracer + if ( SWWMUtility.SphereIntersect(seektarget,level.Vec3Offset(pos,vel),bNOGRAVITY?50:90) ) + { + deto++; + tracer = seektarget; + return; + } + if ( bNOGRAVITY ) + { + Vector3 SeekingDir = level.Vec3Diff(pos,seektarget.Vec3Offset(0,0,seektarget.height/2)).unit(); + if ( SeekingDir dot InitialDir > -1 ) + { + double MagnitudeVel = Vel.length(); + SeekingDir = (SeekingDir*.25*MagnitudeVel+Vel).unit(); + Vel = MagnitudeVel*SeekingDir; + Acceleration = 25*SeekingDir; + } + } + return; + } // proximity check let bt = BlockThingsIterator.Create(self,200); while ( bt.Next() ) @@ -781,6 +809,16 @@ Mixin Class HellblazerGrenade rollvel = FRandom[Hellblazer](-16,16); anglevel = FRandom[Hellblazer](-16,16); pitchvel = FRandom[Hellblazer](-16,16); + // steer towards seek target + if ( seektarget ) + { + Vector3 dirto = level.Vec3Diff(pos,seektarget.Vec3Offset(0,0,seektarget.Height/2)); + dirto /= dirto.length(); + dirto.z += .1; + double spd = vel.length(); + vel /= spd; + vel = (vel*.3+dirto*.7)*spd; + } } States { @@ -950,7 +988,7 @@ Class HellblazerClusterMini : HellblazerMissile2 if ( !whomst ) return; Vector3 dirto = level.Vec3Diff(pos,whomst.Vec3Offset(0,0,whomst.Height/2)); dirto /= dirto.length(); - dirto.z += .3; + dirto.z += .1; double spd = vel.length(); vel /= spd; vel = (vel*.3+dirto*.7)*spd; diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 9e7014377..dc643e957 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -761,12 +761,12 @@ Class Spreadgun : SWWMWeapon } if ( invoker.nextammo != types[next] ) A_StartSound("misc/invchange",CHAN_WEAPONEXTRA,CHANF_UI|CHANF_LOCAL); invoker.nextammo = types[next]; - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); } action void A_AltHold() { - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); // tap fire to unload round if ( invoker.chambered && (player.cmd.buttons&BT_ATTACK) ) { diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index 81dda9fd2..dc2b049b4 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -828,11 +828,11 @@ Class SilverBullet : SWWMWeapon else if ( !invoker.fcbselected && ((invoker.Ammo2.Amount > 0) || (CountInv("SilverBullets2") > 0)) ) invoker.fcbselected = (ifempty&&((invoker.Ammo1.Amount>0)||(CountInv("SilverBullets")>0)))?false:true; if ( oldsel != invoker.fcbselected ) A_StartSound("misc/invchange",CHAN_WEAPONEXTRA,CHANF_UI|CHANF_LOCAL); - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); } action void A_AltHold() { - A_WeaponReady(WRF_NOFIRE); + A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH); // tap fire to unload round if ( player.cmd.buttons&BT_ATTACK ) {