diff --git a/Achievements.md b/Achievements.md new file mode 100644 index 000000000..26d6bddb2 --- /dev/null +++ b/Achievements.md @@ -0,0 +1,68 @@ +## List of achievements to be implemented in 0.9.13b + +### Base achievements: + +- **A Little Sandwich, As A Treat**: Use 50 Grilled Cheese Sandwiches. +- **Big Oopsie**: Erase yourself with the Ynykron. +- **Cloak Engaged**: Use 50 Ghost Artifacts. +- **CLONK**: Kill a boss with a Lead Ball crit. +- **Collector**: Obtain 100% items in 30 maps. +- **Conga Line Of Death**: Kill 20 enemies with a single XSB round. +- **Decent Ascent**: Use 50 Gravity Suppressors. +- **Demolitionist Space Program**: Send a single enemy flying over 1000 map units. +- **Errand Boy Bullshit**: Bust every locked door in a map. +- **Fast**: Beat the par time in 30 maps. +- **Firestarter**: Kill 500 enemies with FYS shells. +- **Fuck This Guy In Particular**: Use the Ynykron to kill a single non-boss enemy. +- **Golden Shower**: Use 100 golden shells. +- **Gibbitude**: Overkill 500 enemies. +- **Green Filter**: Use 50 Elemental Coatings. +- **Headstrong**: Kill 20 bosses by dashing into them. +- **Humiliator**: Kill 100 enemies with the Deep Impact primary fire. +- **Hydrogenated**: Consume a total of 1000L of fuel. +- **I Am Very Smart**: Load SWWM GZ and Brutal Doom together. +- **Icarus Dimes**: Blow yourself up with your own explosives. +- **Just A Replica**: Find something the Ynykron can't destroy. +- **Knock Knock**: Kill 50 enemies through walls with the Silver Bullet. +- **Layers Of White**: Summon the White Lady. +- **Lethal Love**: Kill 10 enemies with a blown kiss. +- **Let's Get To Bashing Butts**: Kill 100 enemies by dashing backwards. +- **Makes Me Feel Good**: Bust 100 walls. +- **Mother**: Gather 100 moths. +- **Mx. Worldwide**: Play on all supported IWADs. +- **No Brakes**: Consume all your fuel while dashing 50 times. +- **No Talk Me Angy**: Use 50 Ragekits. +- **Oops I Broke It**: Cause a VM abort. +- **Parry King**: Parry 100 projectiles. +- **Premium Detective**: Obtain 100% secrets in 30 maps. +- **Return to Sender**: Kill 50 enemies with parried projectiles. +- **RIP Headphone Users**: Fire 25 Saltshot rounds simultaneously at close range. +- **Salutations**: Greet another player. +- **Sayonara, Scumbag**: Wave at a dying enemy 20 times. +- **Shameful Display**: Load SWWM GZ and H-Doom together. +- **Sharing Is Caring**: Share items in multiplayer 50 times. +- **Shockmaster**: Perform 50 Biospark combos. +- **Slam Your Balls**: Land 100 Lead Ball crits. +- **Stay Fresh**: Use 50 Refreshers. +- **Steppy**: Stand on a single enemy's head for 30 seconds. +- **Sunny D**: Use 50 Invinciballs. +- **The Ass Was Fat**: Kill 100 enemies by ground pounding. +- **The Demolitionist**: Unlock all achievements. +- **The Full Set**: Obtain all collectables in a single session. +- **The Sledge Method**: Activate 100 switches by punching them. +- **Unchecked Capitalism**: Have ¥1,000,000,000 in bank. +- **Under Pressure**: Kill 200 enemies by standing on them. +- **Verticality**: Walljump 100 times. +- **Well That Was Easy**: Kill 100 enemies with a single Ynykron shot. +- **Where Did Everyone Go?**: Obtain 100% kills in 30 maps. +- **Who's Steve Jobs?**: Kill an endgame boss with the Ynykron. +- **YEET**: Throw a Candygun right into the Icon of Sin's brains. +- **You Can Pet The Dog**: Pet an MBF helper dog. + +### DLC Weaponset achievements: + +- **HAHA DAB**: Gib 100 enemies with the Itamex Hammer. +- **High Noon**: Kill 6 enemies in a single Puntzer Beta reload. +- **Dakka**: Fire the Sheen HMG for 1 minute straight. +- **Gravely Roast**: Perform 30 bayonet combos with the Quadravol. +- **And The Dragons Were No More**: Kill the Death Wyvern using the Rail Carbine. \ No newline at end of file diff --git a/FuturePlans.md b/FuturePlans.md index 7d79673e1..7503789e5 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -1,59 +1,19 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after the first release. -* **DLC Weapon Set 1:** - - Itamex Reinforced Hammer *(UnSX 5)* - - Puntzer Beta *(SWWM Iridium)* - - Puntzer Gamma *(Ultra Suite 2)* - - Quadravol *(UnSX)* - - Blackfire Igniter *(UnSX 5, Ultra Suite 3)* - - Sparkster x3 *(UnSX 2)* - - Rail Carbine *("Tesla Beamer" in Ultra Suite 2 & 3)* - - PROWEL & TADEL *(Ultra Suite 2 & 3)* -* **DLC Weapon Set 2:** - - Sheen HMG *(SWWM Platinum Ep2)* - - Skull Launcher *(Weird Weapons)* - - Cryolance *(SWWM Platinum Ep2)* - - Ray-Khom *(UnSX)* - - Angels of Death *(SWWM Platinum Ep2)* -* **Additional Demolitionist Menu features** - - Radio *(add-on)* - - Minigames *(pong and other stuff)* - - Selling items at the store -* **Achievements** -* **Collectable items *(will recycle Chanceboxes for this)*** - - Saya Miyamoto - My Maid Is A Sex Robot *(Volumes 1/2/3)* - - Mashiro Plushie *(May cause her to appear)* - - The Black Rat's Coven - Walpurgisnacht *(Debut album)* - - Saya Miyamoto - The Akari Project *(Hard cover)* - - Cat Catcher *(Promo poster)* - - Meidobot - Love Signals *(Debut album)* - - Nutatco™ Chocolate Bar *(It's got a savage taste)* - - Hege Cactus *(Appears to absorb all water, causing intense thirst)* - - Froggy Chair *(A small price to pay)* - - Raidemin Action Figure *(A popular Nukuri superhero, "looks a lot like you")* - - Frispy™ Tasty Corn Snack *(Saya's favorite)* - - Hoagie *(Can't eat it, but looks delicious)* - - Lithium - Volume One *(A work of art, one of the finest graphic novels)* - - PISS Whiskey *("Is it actually piss or is that just the brand name? Either way, I don't want to know what's inside")* - - **[Heretic]** Demolitionist Plush *("You're getting famous, Demo-chan")* - - **[Heretic]** Firemace *("What kind of ridiculous weapon is this?")* - - **[Heretic]** Doomguy Action Figure *("Oh, he gets one too?")* - - **[Heretic]** Tyketto's Tome of Power *("I think I heard it talk once")* - - **[Heretic]** Quartz Flask *("Tastes funny")* - - **[Heretic]** Haunted Saya Bean Plush *(Eats your snacks and calls you a horny)* - - **[Hexen]** Lord Vilkreath - Fundamentals of Puzzle Design *("The hell is this crap?")* - - **[Hexen]** Toot Froot™ Peach Juice *("The taste reminds me of Kirin")* - - **[Hexen]** Kirin Plushie *("I don't know who made it but I love it")* - - **[Hexen]** Akkouxhei Milk Bread *(Absolutely delicious, in moderation)* - - **[Hexen]** Obelisk of the Golden Vale *("I puked out my guts when I touched that fucking thing")* - - **[Hexen]** Saya Miyamoto - I Married A Cherry Boy Emperor But It Turns Out He's Really Cute In Lingerie?! *("I wrote this in three days")* - - ... and more as I come up with them -* **4komas on the intermission screen** +* **DLC Weaponset:** + 1. Itamex Reinforced Hammer *(UnSX 5)* + 3. Puntzer Beta *(SWWM Iridium)* + 4. Puntzer Gamma *(Ultra Suite 2)* + 5. Sheen HMG *(SWWM Platinum Ep2)* + 6. Quadravol *(UnSX)* + 7. Blackfire Igniter *(UnSX 5, Ultra Suite 3)* + 8. Rail Carbine *("Tesla Beamer" in Ultra Suite 2 & 3)* + 9. Ray-Khom *(UnSX)* * **Actually make a fancy titlemap** * **Mod trailer** * **Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** * **Character and item images for the library** -* **Full Mashiro model for Lämp easter egg** +* **Mothgirl summon for Lämp easter egg** * **Ibuki companion add-on *(w/ optional "stream friendly" clothing)*** * **Saya model, for scenes or something idk *(or maybe a companion add-on too)*** * **Japanese localization???** diff --git a/PYWHEEL.txt b/PYWHEEL.txt index a6007aa3c..c92902edc 100644 --- a/PYWHEEL.txt +++ b/PYWHEEL.txt @@ -9,19 +9,15 @@ Demolitionist include "Wallbuster"; //include "PuntzerGamma"; include "Eviscerator"; - //include "Quadravol"; //include "HeavyMahSheenGun"; include "Hellblazer"; - //include "BlackfireIgniter"; - //include "SkullLauncher"; + //include "Quadravol"; include "Sparkster"; - //include "ModernSparkster"; + //include "BlackfireIgniter"; include "SilverBullet"; //include "EMPCarbine"; - //include "Cryolance"; include "CandyGun"; //include "PROWELfartsupintheTADEL"; - //include "RayKhom"; include "Ynykron"; //include "AODWeapon"; } diff --git a/PriceTable.md b/PriceTable.md index f881e5b54..d5390f2c3 100644 --- a/PriceTable.md +++ b/PriceTable.md @@ -96,10 +96,6 @@ Other items that can be bought at any moment. **Omnisights** and **Embiggeners** Invinciball | 640000 Ragekit | 500000 Lämp | 70000 - T1 Fabricator | 3000 - T2 Fabricator | 12000 - T3 Fabricator | 150000 - T4 Fabricator | 1920000 ### Collectables diff --git a/README.md b/README.md index 0384aaa13..2af95fabd 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ Coming from the **Doom** modding side of things, this gun really packs a punch, The **Spreadgun** uses 10 gauge ammunition, apparently just for the sake of making it feel more powerful due to the increased recoil. -### 10Ga shells ~ Replaces Clip / Shells, Wand Crystal / Ethereal Arrows, Chaos Device / Banishment Device +### 10Ga shells ~ Replaces Clip / Shells, Wand Crystal / Ethereal Arrows ![](docimg/shells.png) Available in the following types, with varying chances of appearing depending @@ -326,7 +326,7 @@ This powerup is capable of turning you absolutely invisible. However, it does no Lasts 60 seconds once activated. -### Ragekit ~ Replaces Berserk, Tome of Power, Dark Servant, Boots of Speed +### Ragekit ~ Replaces Berserk, Tome of Power, Boots of Speed ![](docimg/ragekit.png) A special item with some... interesting effects. @@ -356,7 +356,7 @@ This thing makes you impervious to pretty much everything excluding the **Ynykro You're fucking invincible for a total of 20 seconds. -### Hammerspace Embiggener ~ Replaces Backpack, Bag of Holding, Porkalator, Dragonskin Bracers +### Hammerspace Embiggener ~ Replaces Backpack, Bag of Holding, Dragonskin Bracers ![](docimg/embiggener.png) Each of these you pick up increase ammo capacity by half of its base value, stacking up to 16 times for a maximum of 900% capacity. They also give you some extra ammo, like a vanilla backpack would (though not for all weapons). diff --git a/Roadmap.md b/Roadmap.md index f8378782a..5e39689f0 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -39,7 +39,6 @@ - Voice acting? Maybe not, I'd need people to re-voice all Strife NPCs. - Oh god I have to do dialogue sprites for all characters. Maybe I can get someone else for the job? - **At this point I'm just making shit up:** - Official comic. diff --git a/TODO.md b/TODO.md index 621582a46..1cd76811f 100644 --- a/TODO.md +++ b/TODO.md @@ -1,37 +1,24 @@ -**Not so fundamental things during first beta:** +**Finishing touches before release:** - - Fun options - - Omnibusting (all weapons can bust walls) - - Infinite fuel - - Confetti gibs - - Keen replacement - - Achievements - - Extra Demolitionist Menu tabs (radio, minigames) + - Radio function - Collectables + - Achievements + - Minigames -**Extra things for later:** +**Extra things after release:** - - More art for custom intermission - - Commission fanart or something idk - - Draw some 4Komas myself - - Titlemap stuff - - A background with a bit more flair than just the fuzz shader - - Some sort of flyby featuring the Demolitionist booting up, closeups of weapons/items etc. - - Japanese localization - - Mod trailer video + - DLC weaponset + - "White Lady" rare Lämp spawn + - More intermission art (shamefully e-begging on Twitter as usual orz) + - Extra localizations (including Japanese) + - Mod trailer video (doubt I'd be able to, I might ask someone instead) - Rewrite the entire Demolitionist Menu code from the ground up to be more easily extensible and adapt to any window size - - Separate Demolitionist models for each weapon (will include DLC weapons too in the future) **Very extra things for the future:** - - DLC - Strife support - Rewrite all the game's dialogue - Rewrite all the shop systems and other things - Rewrite the cutscenes - - Support for additional IWADs beyond the "main four" - - Hacx - - Chex Quest - - Freedoom - - Saya and Ibuki companion add-ons - - Modelled Monster/Decoration replacers for all IWADs done in the style of the mod + - Saya and Ibuki companion add-ons (potentially a Kirin companion too) + - Modelled Monster/Decoration replacers for all IWADs done in the style of the mod (will be very time consuming) diff --git a/credits.txt b/credits.txt index 9ec6e3e7f..49aad1c5c 100644 --- a/credits.txt +++ b/credits.txt @@ -36,3 +36,7 @@ Most of the work here is original, but there are some notable exceptions: * Sgt. Shivers (@Sgt_Shivers_) * Moa Dixøn / Endie (@MoaDixon) - A certain hidden easter egg / meme uses crappified/bassboosted edits of Old Days and the CBT Wikipedia article. + - Extra gib anims for vanilla monsters: + * Ryan Cordell (Demon, Cacodemon, Revenant, Archvile) + * Amuscaria (Baron of Hell, Hell Knight) + - SiFi270 (Less mean-spirited Keen replacement) diff --git a/cvarinfo.txt b/cvarinfo.txt index a4a58615f..3d9eaeddb 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -37,23 +37,22 @@ user bool swwm_shaders = true; // use pp shaders for some effects user bool swwm_earbuster = false; // limits loudness of wallbuster fire sounds server bool swwm_revive = true; // allows the player to do an "emergency reboot" when dying server int swwm_revivecooldown = 60; // cooldown after using a revive, in seconds (0: no limit) -user int swwm_intertype = 1; // 0 - standard bg - // 1 - fanart - // 2 - 4komas +user bool swwm_interart = true; // show fanart on intermissions server bool swwm_balluse = true; // lead ball can "press" switches remotely user bool swwm_bosshealthbars = true; // display large healthbars for vanilla boss encounters server bool swwm_upgradebosses = true; // vanilla bosses will be "upgraded" to be less insta-die prone server bool swwm_extraalert = false; // enables A_AlertMonsters calls for certain things which may be cpu-heavy user bool swwm_accdamage = false; // damage within the same tic is grouped into a single damage number +user int swwm_maxtargetdist = 2000; // maximum distance for target healthbars to be updated user int swwm_maxtargets = 40; // maximum targeter healthbars to display (0 = unlimited) user int swwm_maxscorenums = 0; // maximum score numbers to display (0 = unlimited) user int swwm_maxdamnums = 0; // maximum damage/healing numbers to display (0 = unlimited) user int swwm_hudscale = 0; // HUD scaling (0 = use GZDoom scaling) -user int swwm_barscale = 0; // target healthbar scaling (0 = use GZDoom scaling) -user int swwm_scrscale = 0; // score scaling (0 = use GZDoom scaling) -user int swwm_numscale = 0; // damnum scaling (0 = use GZDoom scaling) -user int swwm_poiscale = 0; // point of interest scaling (0 = use GZDoom scaling) -user int swwm_detscale = 0; // item sense scaling (0 = use GZDoom scaling) +user int swwm_barscale = 2; // target healthbar scaling (0 = use GZDoom scaling) +user int swwm_scrscale = 2; // score scaling (0 = use GZDoom scaling) +user int swwm_numscale = 3; // damnum scaling (0 = use GZDoom scaling) +user int swwm_poiscale = 1; // point of interest scaling (0 = use GZDoom scaling) +user int swwm_detscale = 2; // item sense scaling (0 = use GZDoom scaling) server bool swwm_blood = false; // custom blood/gibbing server int swwm_maxblood = 400; // max blood effects at any time server int swwm_maxgibs = 100; // max gibs at any time @@ -64,7 +63,7 @@ user bool swwm_cbtpause = true; // wallbuster menu pauses the game user noarchive int swwm_cbtmeme = 0; // easter egg, hidden cvar user noarchive bool swwm_cbttime = false; // debug: times how long a reload takes user noarchive int swwm_cbtlast = 0; // last selected ammo for the wallbuster -server bool swwm_cbtall = true; // wallbuster breaks any wall, not just movable ones +server bool swwm_cbtall = false; // wallbuster breaks any wall, not just movable ones server bool swwm_doomfall = false; // monsters take fall damage outside of hexen server bool swwm_capmcrange = false; // cap ynykron chain reaction range server bool swwm_resetscore = true; // reset score back to 0 on pistol starts @@ -72,12 +71,13 @@ server bool swwm_notrack = false; // disables all combat tracking (useful to sp server bool swwm_ynykronalert = false; // caps ynykron alert (so it doesn't wake everyone up) user bool swwm_menupause = true; // pause the game when demolitionist menu is open server noarchive bool swwm_explosiondebug = false; // debug visual aid for DoExplosion -user bool swwm_funtags = true; // replace vanilla monster names with silly ones -//server bool swwm_omnibust = false; // TODO add wallbusting effect to all weapons -//server bool swwm_superfuel = false; // TODO enable unlimited fuel -//server bool swwm_partytime = false; // TODO killed enemies burst into confetti +user bool swwm_funtags = false; // replace vanilla monster names with silly ones +server bool swwm_omnibust = false; // TODO add wallbusting effect to all weapons +server bool swwm_superfuel = false; // TODO enable unlimited fuel +server bool swwm_partytime = false; // TODO killed enemies burst into confetti server bool swwm_simplefog = false; // simplified teleport fogs (useful to speed up slaughterwads) user bool swwm_bigtags = false; // use a bigger font for targeter tags user bool swwm_intermusic = false; // use original intermission music server int swwm_enemydrops = 0; // allow enemies to drop ammo and weapons (-1 - no ammo or weapons, 0 - ammo only, 1 - both) server bool swwm_shotgib = true; // buckshot can gib (some people don't like this for some reason, so it's an option now) +user bool swwm_noscare = false; // disables the Obelisk of the Golden Vale jumpscare diff --git a/filter/game-doomchex/sprites/BSPHH0.png b/filter/game-doomchex/sprites/BSPHH0.png index 6805bc19a..fc7eb0c3c 100644 Binary files a/filter/game-doomchex/sprites/BSPHH0.png and b/filter/game-doomchex/sprites/BSPHH0.png differ diff --git a/filter/game-doomchex/sprites/LVASH0.png b/filter/game-doomchex/sprites/LVASH0.png index 2aedaa8df..e6fbeb9e3 100644 Binary files a/filter/game-doomchex/sprites/LVASH0.png and b/filter/game-doomchex/sprites/LVASH0.png differ diff --git a/filter/game-doomchex/sprites/LVASI0.png b/filter/game-doomchex/sprites/LVASI0.png index 1cdd2ee6d..74a8caccf 100644 Binary files a/filter/game-doomchex/sprites/LVASI0.png and b/filter/game-doomchex/sprites/LVASI0.png differ diff --git a/filter/game-doomchex/sprites/MUDSF0.png b/filter/game-doomchex/sprites/MUDSF0.png index d311b3e37..c8de4089f 100644 Binary files a/filter/game-doomchex/sprites/MUDSF0.png and b/filter/game-doomchex/sprites/MUDSF0.png differ diff --git a/filter/game-doomchex/sprites/MUDSG0.png b/filter/game-doomchex/sprites/MUDSG0.png index cfda705f3..c9ae099a7 100644 Binary files a/filter/game-doomchex/sprites/MUDSG0.png and b/filter/game-doomchex/sprites/MUDSG0.png differ diff --git a/filter/game-doomchex/sprites/MUDSH0.png b/filter/game-doomchex/sprites/MUDSH0.png index 8063d895b..0732c1b21 100644 Binary files a/filter/game-doomchex/sprites/MUDSH0.png and b/filter/game-doomchex/sprites/MUDSH0.png differ diff --git a/filter/game-doomchex/sprites/SLDGG0.png b/filter/game-doomchex/sprites/SLDGG0.png index 055c54a18..4749fe2c2 100644 Binary files a/filter/game-doomchex/sprites/SLDGG0.png and b/filter/game-doomchex/sprites/SLDGG0.png differ diff --git a/filter/game-doomchex/sprites/SLIMG0.png b/filter/game-doomchex/sprites/SLIMG0.png index 64e6f687b..a0fc177b6 100644 Binary files a/filter/game-doomchex/sprites/SLIMG0.png and b/filter/game-doomchex/sprites/SLIMG0.png differ diff --git a/filter/game-doomchex/sprites/SPSHH0.png b/filter/game-doomchex/sprites/SPSHH0.png index ac5461d69..ba932b015 100644 Binary files a/filter/game-doomchex/sprites/SPSHH0.png and b/filter/game-doomchex/sprites/SPSHH0.png differ diff --git a/fonts/MPlus/7432.png b/fonts/MPlus/7432.png index 82df3d853..97be44137 100644 Binary files a/fonts/MPlus/7432.png and b/fonts/MPlus/7432.png differ diff --git a/fonts/MPlusShaded/65B7.png b/fonts/MPlusShaded/65B7.png index 6a2aaf6b7..102f1483f 100644 Binary files a/fonts/MPlusShaded/65B7.png and b/fonts/MPlusShaded/65B7.png differ diff --git a/fonts/MPlusShaded/98DC.png b/fonts/MPlusShaded/98DC.png index bb276acc4..b49050ed1 100644 Binary files a/fonts/MPlusShaded/98DC.png and b/fonts/MPlusShaded/98DC.png differ diff --git a/gldefs.misc b/gldefs.misc index 9656ab5ad..6d6f47517 100644 --- a/gldefs.misc +++ b/gldefs.misc @@ -8,6 +8,11 @@ HardwareShader Texture "graphics/HUD/EnemyBarS.png" Shader "shaders/glsl/Fuzz_GraySmall.fp" Texture "noisetex" "textures/graynoise.png" } +HardwareShader Texture "graphics/HUD/FuelBarS.png" +{ + Shader "shaders/glsl/Fuzz_GraySmall2.fp" + Texture "noisetex" "textures/graynoise.png" +} HardwareShader Texture "graphics/tempbg.png" { Shader "shaders/glsl/Fuzz.fp" @@ -18,3 +23,7 @@ HardwareShader Texture "graphics/SWWMGZLogo.png" Shader "shaders/glsl/LogoAnimated.fp" Texture "LogoTex" "graphics/SWWMGZLogo_Layers.png" } +HardwareShader Sprite "BBRNB0" +{ + Shader "shaders/glsl/Whew.fp" +} diff --git a/gldefs.pp b/gldefs.pp index a4a3c4f57..4e66e61d0 100644 --- a/gldefs.pp +++ b/gldefs.pp @@ -6,6 +6,7 @@ HardwareShader PostProcess beforebloom Texture fluidtex "textures/wetwarp.png" Uniform float dfact Uniform float timer + Uniform vec3 lightcol } HardwareShader PostProcess beforebloom { @@ -15,6 +16,7 @@ HardwareShader PostProcess beforebloom Texture fluidtex "textures/lavawarp.png" Uniform float dfact Uniform float timer + Uniform vec3 lightcol } HardwareShader PostProcess beforebloom { @@ -24,6 +26,7 @@ HardwareShader PostProcess beforebloom Texture fluidtex "textures/slimewarp.png" Uniform float dfact Uniform float timer + Uniform vec3 lightcol } HardwareShader PostProcess beforebloom { @@ -83,3 +86,29 @@ HardwareShader PostProcess scene Uniform float ni Texture NoiseTexture "textures/rgbnoise.png" } + +HardwareShader PostProcess screen +{ + Name "ObPass0" + Shader "shaders/glsl/ObeliskPass0.fp" 330 + Uniform float Timer +} +HardwareShader PostProcess screen +{ + Name "ObPass1" + Shader "shaders/glsl/ObeliskPass1.fp" 330 + Uniform float Timer + Texture NoiseTexture "textures/rgbnoise.png" +} +HardwareShader PostProcess screen +{ + Name "ObPass2" + Shader "shaders/glsl/ObeliskPass2.fp" 330 + Uniform float Timer +} +HardwareShader PostProcess screen +{ + Name "ObPass3" + Shader "shaders/glsl/ObeliskPass3.fp" 330 + Uniform float Timer +} diff --git a/gldefs.shinemaps b/gldefs.shinemaps index b8ddf076c..c93aeafa9 100644 --- a/gldefs.shinemaps +++ b/gldefs.shinemaps @@ -47,3 +47,7 @@ HardwareShader Texture "models/barriermap.png" Shader "shaders/glsl/Shinemap_barrier.fp" Texture "bartex" "models/barrierbar.png" } +HardwareShader Texture "models/errormap.png" +{ + Shader "shaders/glsl/Shinemap_error.fp" +} diff --git a/graphics/Achievements/MxWorldwide.png b/graphics/Achievements/MxWorldwide.png index 5816f7406..5e0035b5b 100644 Binary files a/graphics/Achievements/MxWorldwide.png and b/graphics/Achievements/MxWorldwide.png differ diff --git a/graphics/Decals/WallCrk1.png b/graphics/Decals/WallCrk1.png index 729b88ff0..fad8333a1 100644 Binary files a/graphics/Decals/WallCrk1.png and b/graphics/Decals/WallCrk1.png differ diff --git a/graphics/Decals/WallCrk2.png b/graphics/Decals/WallCrk2.png index ab82d7682..6811653af 100644 Binary files a/graphics/Decals/WallCrk2.png and b/graphics/Decals/WallCrk2.png differ diff --git a/graphics/Decals/impcrack.png b/graphics/Decals/impcrack.png index b1fda221c..d413e9770 100644 Binary files a/graphics/Decals/impcrack.png and b/graphics/Decals/impcrack.png differ diff --git a/graphics/Decals/ripblast.png b/graphics/Decals/ripblast.png index 7aa1f4eb3..2e3381403 100644 Binary files a/graphics/Decals/ripblast.png and b/graphics/Decals/ripblast.png differ diff --git a/graphics/Decals/shockmrk.png b/graphics/Decals/shockmrk.png index 50719f1bd..2bf586369 100644 Binary files a/graphics/Decals/shockmrk.png and b/graphics/Decals/shockmrk.png differ diff --git a/graphics/HUD/BiosparkBar.png b/graphics/HUD/BiosparkBar.png index e995ad14c..91b570367 100644 Binary files a/graphics/HUD/BiosparkBar.png and b/graphics/HUD/BiosparkBar.png differ diff --git a/graphics/HUD/BiosparkBarGray.png b/graphics/HUD/BiosparkBarGray.png index 9dc623728..f01485e00 100644 Binary files a/graphics/HUD/BiosparkBarGray.png and b/graphics/HUD/BiosparkBarGray.png differ diff --git a/graphics/HUD/BiosparkBarRed.png b/graphics/HUD/BiosparkBarRed.png index eec873682..7c05a1557 100644 Binary files a/graphics/HUD/BiosparkBarRed.png and b/graphics/HUD/BiosparkBarRed.png differ diff --git a/graphics/HUD/BiosparkDisplay.png b/graphics/HUD/BiosparkDisplay.png index 3f54d0c8b..cd0b30843 100644 Binary files a/graphics/HUD/BiosparkDisplay.png and b/graphics/HUD/BiosparkDisplay.png differ diff --git a/graphics/HUD/BossHealthBar.png b/graphics/HUD/BossHealthBar.png index 1a64aaf38..1ba37a410 100644 Binary files a/graphics/HUD/BossHealthBar.png and b/graphics/HUD/BossHealthBar.png differ diff --git a/graphics/HUD/BossHealthBarDecay.png b/graphics/HUD/BossHealthBarDecay.png index 48bd5dc9c..cad0ec024 100644 Binary files a/graphics/HUD/BossHealthBarDecay.png and b/graphics/HUD/BossHealthBarDecay.png differ diff --git a/graphics/HUD/ExplodiumDisplay.png b/graphics/HUD/ExplodiumDisplay.png index e53177419..6c595ec53 100644 Binary files a/graphics/HUD/ExplodiumDisplay.png and b/graphics/HUD/ExplodiumDisplay.png differ diff --git a/graphics/HUD/FuelBar.png b/graphics/HUD/FuelBar.png index e710d11ec..92fab99b3 100644 Binary files a/graphics/HUD/FuelBar.png and b/graphics/HUD/FuelBar.png differ diff --git a/graphics/HUD/FuelBarS.png b/graphics/HUD/FuelBarS.png new file mode 100644 index 000000000..a9bc63aa1 Binary files /dev/null and b/graphics/HUD/FuelBarS.png differ diff --git a/graphics/HUD/HealthBar0.png b/graphics/HUD/HealthBar0.png index 9f9e2809f..f8428f436 100644 Binary files a/graphics/HUD/HealthBar0.png and b/graphics/HUD/HealthBar0.png differ diff --git a/graphics/HUD/HealthBar1.png b/graphics/HUD/HealthBar1.png index 69f33e192..3abdfc30b 100644 Binary files a/graphics/HUD/HealthBar1.png and b/graphics/HUD/HealthBar1.png differ diff --git a/graphics/HUD/HealthBar2.png b/graphics/HUD/HealthBar2.png index 59a126f48..2f33f438c 100644 Binary files a/graphics/HUD/HealthBar2.png and b/graphics/HUD/HealthBar2.png differ diff --git a/graphics/HUD/HealthBar3.png b/graphics/HUD/HealthBar3.png index 9e122bf20..9ae091bdb 100644 Binary files a/graphics/HUD/HealthBar3.png and b/graphics/HUD/HealthBar3.png differ diff --git a/graphics/HUD/HealthBarS.png b/graphics/HUD/HealthBarS.png index 97b59a046..7544045bd 100644 Binary files a/graphics/HUD/HealthBarS.png and b/graphics/HUD/HealthBarS.png differ diff --git a/graphics/HUD/Icons/I_ArmorNugget.png b/graphics/HUD/Icons/I_ArmorNugget.png index 7062c1e4f..7f13ff6a3 100644 Binary files a/graphics/HUD/Icons/I_ArmorNugget.png and b/graphics/HUD/Icons/I_ArmorNugget.png differ diff --git a/graphics/HUD/Icons/I_Barrier.png b/graphics/HUD/Icons/I_Barrier.png index ba3304c61..d3530447d 100644 Binary files a/graphics/HUD/Icons/I_Barrier.png and b/graphics/HUD/Icons/I_Barrier.png differ diff --git a/graphics/HUD/Icons/I_Ghost.png b/graphics/HUD/Icons/I_Ghost.png index 66c7883ec..56b2fe23a 100644 Binary files a/graphics/HUD/Icons/I_Ghost.png and b/graphics/HUD/Icons/I_Ghost.png differ diff --git a/graphics/HUD/Icons/I_Gravity.png b/graphics/HUD/Icons/I_Gravity.png index ce91d0623..73f7d0163 100644 Binary files a/graphics/HUD/Icons/I_Gravity.png and b/graphics/HUD/Icons/I_Gravity.png differ diff --git a/graphics/HUD/Icons/I_HealthNugget.png b/graphics/HUD/Icons/I_HealthNugget.png index aaea05534..f234a37d6 100644 Binary files a/graphics/HUD/Icons/I_HealthNugget.png and b/graphics/HUD/Icons/I_HealthNugget.png differ diff --git a/graphics/HUD/Icons/I_HealthTetra.png b/graphics/HUD/Icons/I_HealthTetra.png index 3e21ad0af..cf3be4a99 100644 Binary files a/graphics/HUD/Icons/I_HealthTetra.png and b/graphics/HUD/Icons/I_HealthTetra.png differ diff --git a/graphics/HUD/Icons/I_Invinciball.png b/graphics/HUD/Icons/I_Invinciball.png index d2b5cd99a..9a4799a14 100644 Binary files a/graphics/HUD/Icons/I_Invinciball.png and b/graphics/HUD/Icons/I_Invinciball.png differ diff --git a/graphics/HUD/Icons/I_Ragekit.png b/graphics/HUD/Icons/I_Ragekit.png index e028a47f3..79247e25c 100644 Binary files a/graphics/HUD/Icons/I_Ragekit.png and b/graphics/HUD/Icons/I_Ragekit.png differ diff --git a/graphics/HUD/Icons/I_WarArmor.png b/graphics/HUD/Icons/I_WarArmor.png index c3a3756ed..08f2e5a91 100644 Binary files a/graphics/HUD/Icons/I_WarArmor.png and b/graphics/HUD/Icons/I_WarArmor.png differ diff --git a/graphics/HUD/Icons/W_Eviscerator.png b/graphics/HUD/Icons/W_Eviscerator.png index 2d8727833..f8dbcb485 100644 Binary files a/graphics/HUD/Icons/W_Eviscerator.png and b/graphics/HUD/Icons/W_Eviscerator.png differ diff --git a/graphics/HUD/Icons/W_ExplodiumGun2.png b/graphics/HUD/Icons/W_ExplodiumGun2.png index a361a50e4..673b16cef 100644 Binary files a/graphics/HUD/Icons/W_ExplodiumGun2.png and b/graphics/HUD/Icons/W_ExplodiumGun2.png differ diff --git a/graphics/HUD/PusherBar.png b/graphics/HUD/PusherBar.png index 9f511190d..a4e513f31 100644 Binary files a/graphics/HUD/PusherBar.png and b/graphics/HUD/PusherBar.png differ diff --git a/graphics/HUD/ScoreBoxL.png b/graphics/HUD/ScoreBoxL.png index 079f8ee3c..00839aed6 100644 Binary files a/graphics/HUD/ScoreBoxL.png and b/graphics/HUD/ScoreBoxL.png differ diff --git a/graphics/HUD/SilverBulletDisplay.png b/graphics/HUD/SilverBulletDisplay.png index 964bc1faf..5c62f0452 100644 Binary files a/graphics/HUD/SilverBulletDisplay.png and b/graphics/HUD/SilverBulletDisplay.png differ diff --git a/graphics/HUD/YnykronBarA.png b/graphics/HUD/YnykronBarA.png index ed7ebdbca..b3a69b3ad 100644 Binary files a/graphics/HUD/YnykronBarA.png and b/graphics/HUD/YnykronBarA.png differ diff --git a/graphics/HUD/YnykronBarB.png b/graphics/HUD/YnykronBarB.png index ec55b49fa..143e11b1e 100644 Binary files a/graphics/HUD/YnykronBarB.png and b/graphics/HUD/YnykronBarB.png differ diff --git a/graphics/InterBG.png b/graphics/InterBG.png index f223d67d3..308726d0e 100644 Binary files a/graphics/InterBG.png and b/graphics/InterBG.png differ diff --git a/graphics/KBase/LibraryTabSeparator.png b/graphics/KBase/LibraryTabSeparator.png index 892a95163..614fc728e 100644 Binary files a/graphics/KBase/LibraryTabSeparator.png and b/graphics/KBase/LibraryTabSeparator.png differ diff --git a/graphics/KBase/LibraryTabSeparatorJP.png b/graphics/KBase/LibraryTabSeparatorJP.png index 68509e056..be0670830 100644 Binary files a/graphics/KBase/LibraryTabSeparatorJP.png and b/graphics/KBase/LibraryTabSeparatorJP.png differ diff --git a/graphics/KBase/WindowSeparatorH.png b/graphics/KBase/WindowSeparatorH.png index 4393457e9..76c433582 100644 Binary files a/graphics/KBase/WindowSeparatorH.png and b/graphics/KBase/WindowSeparatorH.png differ diff --git a/graphics/Obelisk/O_SIGHT0.png b/graphics/Obelisk/O_SIGHT0.png new file mode 100644 index 000000000..19e815540 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT0.png differ diff --git a/graphics/Obelisk/O_SIGHT1.png b/graphics/Obelisk/O_SIGHT1.png new file mode 100644 index 000000000..908f23da1 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT1.png differ diff --git a/graphics/Obelisk/O_SIGHT2.png b/graphics/Obelisk/O_SIGHT2.png new file mode 100644 index 000000000..4b130457a Binary files /dev/null and b/graphics/Obelisk/O_SIGHT2.png differ diff --git a/graphics/Obelisk/O_SIGHT3.png b/graphics/Obelisk/O_SIGHT3.png new file mode 100644 index 000000000..94a5fddf7 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT3.png differ diff --git a/graphics/Obelisk/O_SIGHT4.png b/graphics/Obelisk/O_SIGHT4.png new file mode 100644 index 000000000..592b5c358 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT4.png differ diff --git a/graphics/Obelisk/O_SIGHT5.png b/graphics/Obelisk/O_SIGHT5.png new file mode 100644 index 000000000..742327f27 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT5.png differ diff --git a/graphics/Obelisk/O_SIGHT6.png b/graphics/Obelisk/O_SIGHT6.png new file mode 100644 index 000000000..b8554daf0 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT6.png differ diff --git a/graphics/Obelisk/O_SIGHT7.png b/graphics/Obelisk/O_SIGHT7.png new file mode 100644 index 000000000..410900f29 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT7.png differ diff --git a/graphics/Obelisk/O_SIGHT8.png b/graphics/Obelisk/O_SIGHT8.png new file mode 100644 index 000000000..a93e4be69 Binary files /dev/null and b/graphics/Obelisk/O_SIGHT8.png differ diff --git a/graphics/Obelisk/O_SIGHT9.txt b/graphics/Obelisk/O_SIGHT9.txt new file mode 100644 index 000000000..605ae18c5 --- /dev/null +++ b/graphics/Obelisk/O_SIGHT9.txt @@ -0,0 +1,7 @@ +TODO + +composition: full-leveled entity in the back, ser standing in front, in full + lab gear, adjusting glasses. background is nothing but carbonized + mass of what probably used to be a city. dim white light from the + sky above. perspective is from a bit below eye level, pointing + upwards to better show the size of the entity diff --git a/graphics/SWWMGZLogo.png b/graphics/SWWMGZLogo.png index 6019ab9e7..844269daf 100644 Binary files a/graphics/SWWMGZLogo.png and b/graphics/SWWMGZLogo.png differ diff --git a/graphics/SWWMGZLogo_Layers.png b/graphics/SWWMGZLogo_Layers.png index 4ff86c31f..27a98c955 100644 Binary files a/graphics/SWWMGZLogo_Layers.png and b/graphics/SWWMGZLogo_Layers.png differ diff --git a/language.de_base b/language.de_base index c8992490c..cce525f3e 100644 --- a/language.de_base +++ b/language.de_base @@ -14,4 +14,3 @@ // score messages // intermission tips // intermission fanart -// intermission 4komas (TBD) diff --git a/language.def_base b/language.def_base index 0b2ccc7e0..bda5dc572 100644 --- a/language.def_base +++ b/language.def_base @@ -667,11 +667,12 @@ FN_MBOSS_FUN = "Magic Boi"; FN_CBOSS_FUN = "Holy Boi"; FN_HERESIARCH_FUN = "Oh Lawd He Comin'"; // Additional tags -FN_BOSSBRAIN = "John Romero"; -FN_BOSSBRAIN_FUN = "Daikatana"; +FN_BOSSBRAIN = "Marisa Kirisame"; +FN_BOSSBRAIN_FUN = "YOU WERE EXPECTING JOHN ROMERO BUT IT WAS ME, MARISA!"; FN_KEEN = "Commander Keen"; FN_KEEN_FUN = "Ruined by Bethesda"; FN_VOODOO = "Voodoo doll of %s"; +FN_MASHIRO = "White Lady"; // obituaries O_PUSHER = "%k opened some air holes into %o."; O_DEEPIMPACT = "%o was impacted deeply by %k."; @@ -705,12 +706,11 @@ O_DOKIDOKI = "%o was defeated by %k's power of love."; O_MOTH = "%%o was assaulted by %s's moths."; O_MOTH2 = "%o was assaulted by moths."; O_MASHIRO1 = "%o should have kept the lights on."; -O_MASHIRO2 = "%o now belongs to Mashiro."; +O_MASHIRO2 = "%o now belongs to the white lady."; O_MASHIRO3 = "%o made a terrible mistake."; O_MASHIRO4 = "%o mysteriously disappeared."; -O_MASHIRO5 = "%o is now part of a live-action recreation of Layers of White."; -O_MASHIRO6 = "%o angered the wrong moth."; -O_MASHIRO7 = "%o and Mashiro are now TOGETHER FOREVER."; +O_MASHIRO5 = "%o angered the wrong moth."; +O_ENDLEVEL = "Looks like %o will have to pistol start."; // edited vanilla obituaries OB_SUICIDE = "%o commited suikoden."; OB_FALLING = "%o sprained everything."; @@ -815,6 +815,8 @@ 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."; +D_MASHIRO = "\cjShe knows where you are...\c-"; +D_OBELISK = "\cjYou shouldn't have done that...\c-"; SWWM_YNYKRONREADY = "Ynykron Artifact ready for firing."; SWWM_TITLEPRESENTS = "presents"; SWWM_TITLEMODBY = "a mod by \cxMarisa Kirisame"; @@ -824,6 +826,7 @@ SWWM_UNIT_KPH = "km/h"; SWWM_UNIT_LITER = "l"; SWWM_YOURSELF = "Yourself"; SWWM_DOKIDOKI = "The Power of Love™"; +SWWM_GRAVKILL = "Gravity"; // boss tags BT_BRUISERS = "Bruiser Brothers"; BT_CYBIE = "Tyrant of Babel"; @@ -871,6 +874,7 @@ SWWM_LEGPREFIX = "L"; SWWM_SHAMEFUL = "Humiliation"; SWWM_BUTTSLAM = "Buttslam"; SWWM_LOVED = "L\cg♥\c-VE"; +SWWM_LOVED_ALT = "F\cg♥\c-CK NAZIS"; // score messages SWWM_FINDSECRET = "\cf%s\cf found a secret. +%d\c-"; SWWM_FINDKEY = "\cf%s\cf got the %s\cf. +%d\c-"; @@ -880,7 +884,7 @@ SWWM_LASTMONSTER = "\cf%s\cf killed the last monster. +%d\c-"; SWWM_NEWLORE = "New entries have been added to the Library."; SWWM_SELLEXTRA = "\cf%s\cf sold an extra %s\cf. +%d\c-"; // intermission tips -SWWM_NINTERTIP = "40"; +SWWM_NINTERTIP = "50"; SWWM_INTERTIP = "Tip #%d:"; SWWM_INTERTIP1 = "The Demolitionist is immune to drowning, poison and even fall damage (excluding instant kill pits, e.g. in Hexen)."; SWWM_INTERTIP2 = "The Explodium Gun's altfire has an explosive yield proportional to the bullets left in the mag."; @@ -922,6 +926,16 @@ SWWM_INTERTIP37 = "Kinylum saltshot is potent enough to pierce through invulnera SWWM_INTERTIP38 = "Even if you're not interested in reading the lore, it is still useful to check the entries of weapons and other items to learn more about their usage. Of course, you can also simply experiment by yourself."; SWWM_INTERTIP39 = "If you experience slowdowns when many sound effects are playing, it's recommended to disable HRTF in the OpenAL settings, if enabled."; SWWM_INTERTIP40 = "Item Sense can help you detect items that would be otherwise hard to see among the chaos of an after-battle corpse pile. With an Omnisight, you can even see where items are through walls!"; +SWWM_INTERTIP41 = "Spread the love! The \"blow kiss\" gesture isn't just a funny gimmick to stun enemies with. When aimed at allies, it can heal them with each hit. In addition, both effects are also boosted by the Ragekit. Spead that RAGING LOVE!"; +SWWM_INTERTIP42 = "Cacodemons are round and shaped like friends. Unfortunately they may roast you or bite your face off if you try to pet them."; +SWWM_INTERTIP43 = "Saya snacks on whole bags of corn nuts with such frequency that she permanently smells like them despite showering regularly. Some people find that scent pleasant, though."; +SWWM_INTERTIP44 = "Demo-chan's adventures are often livestreamed for the whole world to see. They are quite popular, too."; +SWWM_INTERTIP45 = "This mod may contain politics™. If you are sensitive to politics™ please stop playing right now. I'd also advise you to stay away from the internet, I heard it's also full of politics™."; +SWWM_INTERTIP46 = "Finding (or buying) a second Explodium Gun will allow you to switch to a dual-wield mode. Just for the sake of it (and because someone made fanart featuring this and I HAD to add it)."; +SWWM_INTERTIP47 = "The duration of powerup effects will stack with each use."; +SWWM_INTERTIP48 = "Black lives matter."; +SWWM_INTERTIP49 = "The quick grenade button will allow you to readily throw an Explodium Mag at any given moment, no matter what other weapon you were using."; +SWWM_INTERTIP50 = "Capitalism is a disease, a cancer that will bring this world to its ruin if we don't excise it soon."; // intermission fanart SWWM_FANART = "Art: "; SWWM_NFANART = "5"; @@ -930,4 +944,3 @@ SWWM_FANART2 = "CaptainJ.png;Captain J (@Jho7835)"; SWWM_FANART3 = "RedeadITA.png;Redead-ITA"; SWWM_FANART4 = "Shivers.png;Sgt. Shivers (@Sgt_Shivers_)"; SWWM_FANART5 = "Endie.jpg;Moa Dixøn / Endie (@MoaDixon)"; -// intermission 4komas (TBD) diff --git a/language.def_lore b/language.def_lore index ee29bcba5..4e8016741 100644 --- a/language.def_lore +++ b/language.def_lore @@ -40,6 +40,10 @@ SWWM_LORETAB_DEMOLITIONIST = "People"; SWWM_LOREREL_DEMOLITIONIST = "AkariLabs;Ibuki;Saya;Zanaveth2;Hell;UAC;Nekuratek;Belt;Collar;Propulsor;Hammerspace;Display;Voicebox;Maidbot;EngineTech"; SWWM_LORETXT_DEMOLITIONIST = "\cxFull Name:\c-\n\cf Akari Labs First Generation Autonomous Combat Unit\c-\n\cf Demolitionist (codename)\c-\n\cf Demo Miyamoto (first unit)\c-\n\cxNationality:\c-\n\cf Japanese\c-\n\cxDate of Birth:\c-\n\cf 2148-01-20\c-\n\cxTwitter:\c-\n\cf @demolitionist_bot\c-\n\nThe \cfDemolitionist\c- is one of the crowning achievements of \cfAkari Labs\c- on the field of robotics. An AI-driven combat unit capable of efficiently utilizing any weaponry at its disposition, highly resilient to damage and capable of operating in any environment, including the void of space. It can be seen as the spiritual successor of the \cfRed Oni\c- supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force.\n\nEach unit is equipped with various third-party components of note, such as the \cfJetBurst™ Impulsors\c- on their backs, allowing them to perform rapid mid-air boosts and dashes, a pair of \cfHammerspace™\c- containers, giving them quick access to a wide arsenal, the two being attached to the all-popular \cfSymnatek Magnetic Utility Belt\c-, or the powerful \cfCelestine Microfusion Battery\c-, courtesy of \cfTach-Engine Technology Institute\c-, which provides up to 80 days of autonomy for the unit, at full processing power of its \cfNekuratek IK-349 CPU\c-. More details on the full hardware specifications can be found at the Akari Labs website.\n\nThe AI core of the Demolitionist is built on the same technology as Akari Labs' \cfMaidbots\c-, the \cfNekuronbot AI Framework\c-, which had been provided to \cfSaya Miyamoto\c- herself as a gift of friendship from \cfZanaveth Nekuraku II\c-, the lead AI engineer and current CEO of \cfNekuratek\c-. Thanks to this technology, and combined with many other features such as the \cfCuteEmotion Display\c- that allows the unit to visibly show emotion through a set of simple animated faces or the \cfLoudboi Voicebox\c- that allows it to speak almost naturally, the Demolitionist is barely indistinguishable from a real person in its behaviour and emotional response, making interaction with civilians much more comforting. It can even be said that the Demolitionist has its own little personality, with unique quirks and all.\n\nThe first unit, affectionately known as \cfDemo-chan\c- by Saya, was deployed in June of 2148 on \cfUnion States\c- territory in order to combat the demonic invasion brought upon by the \cfUAC\c-'s interventions on \cfHell\c-.\n\nOf this previously mentioned first unit, there are many details known thanks to a Q&A session that Saya had livestreamed months prior to the deployment. The unit has been acknowledged as being part of the Miyamoto household, having the full name of \cfDemo Miyamoto\c-, and being referred to by Saya as her \"child\". Demo can be described as \"quite chatty\" and fond of joking around to try and put a smile on people's faces, but also very serious and determined in their desire to protect those in need. They are also quite popular within the LGBTQIA+ community due to their fierce support of also protecting the rights of those who face discrimination for their identities, and has even publicly come out themself as non-binary. This didn't really come as a surprise to most due to Saya's own involvements with the collective, however.\n\n\cxSaya's Notes:\c-\n\cfHeh, yeah... that stream was fun. People asked so many questions, and your answers sure caught some of them by surprise, huhu...\c-\n\n\cfBy the way, there is also one more thing that makes you unique. It's that \"lucky collar\" I made for you, you know. Ibuki had one, and it sure helped her, so I thought that it was a good idea to give it to you too. Wish people weren't going all \"wow you gave them that BDSM thing?\", though. IT IS NOT, it has NOTHING to do with that.\c-\n\n\cfAnyway, if you're finished reading about yourself, how about you get back to work? Yes, Demo-chan, I know you are reading this, at this very moment. OoOOoOoOoOooo... spooky, isn't it?\c-\n\n\cfGet back to work, you silly robutt.\c-"; SWWM_LORETXT_DEMOLITIONIST2 = "\cxFull Name:\c-\n\cf Akari Labs First Generation Autonomous Combat Unit\c-\n\cf Demolitionist (codename)\c-\n\cf Demo Miyamoto (first unit)\c-\n\cxNationality:\c-\n\cf Japanese\c-\n\cxDate of Birth:\c-\n\cf 2148-01-20\c-\n\cxTwitter:\c-\n\cf @demolitionist_bot\c-\n\nThe \cfDemolitionist\c- is one of the crowning achievements of \cfAkari Labs\c- on the field of robotics. An AI-driven combat unit capable of efficiently utilizing any weaponry at its disposition, highly resilient to damage and capable of operating in any environment, including the void of space. It can be seen as the spiritual successor of the \cfRed Oni\c- supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force.\n\nEach unit is equipped with various third-party components of note, such as the \cfJetBurst™ Impulsors\c- on their backs, allowing them to perform rapid mid-air boosts and dashes, a pair of \cfHammerspace™\c- containers, giving them quick access to a wide arsenal, the two being attached to the all-popular \cfSymnatek Magnetic Utility Belt\c-, or the powerful \cfCelestine Microfusion Battery\c-, courtesy of \cfTach-Engine Technology Institute\c-, which provides up to 80 days of autonomy for the unit, at full processing power of its \cfNekuratek IK-349 CPU\c-. More details on the full hardware specifications can be found at the Akari Labs website.\n\nThe AI core of the Demolitionist is built on the same technology as Akari Labs' \cfMaidbots\c-, the \cfNekuronbot AI Framework\c-, which had been provided to \cfSaya Miyamoto\c- herself as a gift of friendship from \cfZanaveth Nekuraku II\c-, the lead AI engineer and current CEO of \cfNekuratek\c-. Thanks to this technology, and combined with many other features such as the \cfCuteEmotion Display\c- that allows the unit to visibly show emotion through a set of simple animated faces or the \cfLoudboi Voicebox\c- that allows it to speak almost naturally, the Demolitionist is barely indistinguishable from a real person in its behaviour and emotional response, making interaction with civilians much more comforting. It can even be said that the Demolitionist has its own little personality, with unique quirks and all.\n\nThe first unit, affectionately known as \cfDemo-chan\c- by Saya, was deployed in June of 2148 on \cfUnion States\c- territory in order to combat the demonic invasion brought upon by the \cfUAC\c-'s interventions on \cfHell\c-.\n\nOf this previously mentioned first unit, there are many details known thanks to a Q&A session that Saya had livestreamed months prior to the deployment. The unit has been acknowledged as being part of the Miyamoto household, having the full name of \cfDemo Miyamoto\c-, and being referred to by Saya as her \"child\". Demo can be described as \"quite chatty\" and fond of joking around to try and put a smile on people's faces, but also very serious and determined in their desire to protect those in need. They are also quite popular within the LGBTQIA+ community due to their fierce support of also protecting the rights of those who face discrimination for their identities, and has even publicly come out themself as non-binary. This didn't really come as a surprise to most due to Saya's own involvements with the collective, however.\n\nFollowing their success in fighting off Hell's armies, Saya realized that no other units would ever need to be made, so Demo themself became the \"ultimate weapon\" of Akari Labs, all by their lonesome. Furthermore, they were additionally rewarded with a separate Maidbot frame, which Demo freely makes use of during their free time, and has allowed them to truly express their feelings for Saya, becoming her third partner, together with Maidbot and Ibuki.\n\n\cxSaya's Notes:\c-\n\cfYou're so cute, Demo-chan. I really outdid myself with that Maidbot body, for sure. It seriously caught me by surprise when, as soon as you swapped over to it, you just... jumped in my arms like that and started kissing me all over and... whew~\c-\n\n\cfI'm really happy that you're now part of our little Cutie Club (\c-\cg♥\c-\cf), you know. And yeah, I didn't want to just go around swapping it too so I did make a second collar for you to wear. Hey, come on, I'm still saying it's got nothing to do with some sort of BDSM kink or anything.\c-\n\n\cfAnyway, no more reading about yourself while you're working. Go away, silly.\c-"; +SWWM_LORETAG_HEGECACTUS = "Hege Cactus"; +SWWM_LORETAB_HEGECACTUS = "Item"; +SWWM_LOREREL_HEGECACTUS = "Saya"; +SWWM_LORETXT_HEGECACTUS = "\cxDesignation:\c-\n\cf Hege Cactus\c-\n\cxClassification:\c-\n\cf Potted Plant\c-\n\cxOrigin:\c-\n\cf Finland\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_UNISSIX = "Unissix, Misa A."; SWWM_LORETAB_UNISSIX = "People"; SWWM_LOREREL_UNISSIX = "Devanikna;Nedoshiaan;Zanaveth2;Zanaveth3;Nukuri;Saya;Yui;Taro;Ashley;Ellen;Sankaideriha"; @@ -65,6 +69,14 @@ 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 favourite 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_LORETAG_SAYABEAN = "Saya Bean Plush"; +SWWM_LORETAB_SAYABEAN = "Item"; +SWWM_LOREREL_SAYABEAN = "Saya"; +SWWM_LORETXT_SAYABEAN = "\cxDesignation:\c-\n\cf Haunted Saya Bean Plush\c-\n\cxManufacturer:\c-\n\cf Nukritas 2xx\c-\n\cxClassification:\c-\n\cf Plush Doll\c-\n\cxHaunted:\c-\n\cf Very Yes\c-\n\n\cfHaunted Saya Bean Plush\c- that eats your snacks and calls you a horny.\n\nThis object isn't actually haunted. Or is it...?\n\n\cxSaya's Notes:\c-\n\cfOK, considering who made it, I AM betting this thing's really haunted. And of course I can tell what this is referencing. How the fuck does she even know anyway? It has to be some reality bending nonsense again.\c-\n\n\cfStill, it's beautiful... A work of art, yes. I'm sure you're squeezing it between your arms right now. Oh, I'll know. I will hear it giggle on stream when you do so.\c-"; +SWWM_LORETAG_MILKBREADS = "Milk Breads"; +SWWM_LORETAB_MILKBREADS = "Item"; +SWWM_LOREREL_MILKBREADS = "Kirin"; +SWWM_LORETXT_MILKBREADS = "\cxDesignation:\c-\n\cf Akkouxhei Milk Bread\c-\n\cxManufacturer:\c-\n\cf Sykhai Empire\c-\n\cxClassification:\c-\n\cf Pastry\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_PROPULSOR = "JetBurst Impulsor"; SWWM_LORETAB_PROPULSOR = "Item"; SWWM_LOREREL_PROPULSOR = "Forx;Saya;Ibuki;Unissix"; @@ -73,10 +85,22 @@ SWWM_LORETAG_REFRESHER = "Refresher"; SWWM_LORETAB_REFRESHER = "Item"; SWWM_LOREREL_REFRESHER = "EngineTech"; SWWM_LORETXT_REFRESHER = "\cxDesignation:\c-\n\cf Refresher\c-\n\cxManufacturer:\c-\n\cf Unknown\c-\n\cxClassification:\c-\n\cf Healing Artifact\c-\n\nThese ancient relics were encountered while exploring the ancient alien ruins in Sedna, near the portal to the \cfXathar system\c-. Unlike many other findings in this exploration, these ones in particular gave a potential hint to the origins of all this. The specific shape of the relics, that of the Egyptian Ankh, symbol of life, came as a revelation to the founder of the \cfTach-Engine Technology Institute\c-, who led this expedition. He theorized that these ruins might have been part of a \"staging area\" that his ancestors could have used when they first came to Earth, to found their colony in Egypt.\n\nThis specific artifact, called \cfRefresher\c-, has strong rejuvenating effects, much more potent than those of other similar healing devices previously discovered. Any wounds or afflictions are instantly healed once the artifact is held tightly against someone's chest. Like with the others, the nature of these effects is entirely unknown, and \cfJ.A. Tachmek-Smith\c- himself has dedicated most of his time to research.\n\nOne important, additional characteristic of the Refresher is the fact that it somehow has the ability to \"automatically activate\" its healing effects, should an individual carrying it be in immediate danger of death. Even so, its effect may not be potent enough to prevent such an outcome in all cases.\n\n\cxSaya's Notes:\c-\n\cfAncient Egyptian Aliens™. Cool, neat, fun, good stuff. But these things sure are handy, it's almost like... ah, fuck, I'm going to sound like that nerdo here but yeah, it's like... extra lives, kinda?\c-"; +SWWM_LORETAG_LITHIUMVOL1 = "Lithium Vol.1"; +SWWM_LORETAB_LITHIUMVOL1 = "Item"; +SWWM_LOREREL_LITHIUMVOL1 = ""; +SWWM_LORETXT_LITHIUMVOL1 = "\cxTitle:\c-\n\cf Lithium - Volume One\c-\n\cxAuthor:\c-\n\cf Unknown\c-\n\cxGenre:\c-\n\cf Science Fiction\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; +SWWM_LORETAG_TOMEOFPOWER = "Tome of Power"; +SWWM_LORETAB_TOMEOFPOWER = "Item"; +SWWM_LOREREL_TOMEOFPOWER = "Parthoris"; +SWWM_LORETXT_TOMEOFPOWER = "\cxDesignation:\c-\n\cf Tyketto's Tome of Power\n\cxClassification:\c-\n\cf Grimoire of Weapon Enchantments\c-\n\cxOrigin:\c-\n\cf Parthoris\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_TARO = "Miyamoto, Taro"; SWWM_LORETAB_TARO = "People"; SWWM_LOREREL_TARO = "Nana;Ryuji;Saya;Ellen;Ibuki;WhiteScar;AkariLabs"; SWWM_LORETXT_TARO = "\cxFull Name:\c-\n\cf Taro Miyamoto\c-\n\cxNationality:\c-\n\cf Japanese\c-\n\cxDate of Birth:\c-\n\cf 1985-10-06\c-\n\cxTwitter:\c-\n\cf @AkariTaro\c-\n\nBorn in 1985 to \cfNana\c- and \cfRyuji Miyamoto\c-, \cfTaro\c- is the oldest of three siblings, despite what his looks might show. As a child, he was rather conflictive, but also notably studious. Having finished high school with excellent grades, he went on to study at many prestigious universities across the world, fueled by the desire to expand his knowledge, especially that of computer technology, which he was infatuated with. Alongside \cfSaya\c-, his younger sister, they founded \cfAkari Labs\c-, a company that specializes in Robotics and Artificial Intelligence, among others. There, Taro's specialties are Software Engineering and Design, and he's also in charge of managing public relations, due to Saya not being \"much of a people person\" unlike him.\n\nTaro is a highly skilled programmer, proficient in several languages, and has quite a lot of projects to his name, along with many contributions to notable open source projects, including the \cfLinux Kernel\c-. He's also a self-proclaimed \"culture archivist\", noting that he's basically a walking library when it comes to aspects of popular culture that for most are lost to time, thanks to the immortality inherited from his mother, and his strong memory. He's also quite popular online for his rather comedic anime reviews, under the persona of \cf\"The Waifu Wizard\"\c-.\n\nIn 2091, Taro was chosen to personally retrieve the \cfRed Oni\c-, \cfIbuki Miyamoto\c-, after the events of the \cfWhite Scar\c-. Following the tracking signal of her collar, he easily located her, and was about to take her back to Japan when a young girl approached him. It was \cfElena Yanikov XXI\c-, a scavenger who had befriended Ibuki during her time wandering that scorched wasteland. She asked Taro to bring her along, promising to \"be a good girl\". These words immediately made him accept her proposition.\n\nNot long after that, the two somehow started dating, eventually getting married in 2097.\n\n\cxSaya's Notes:\c-\n\cfHOW IN THE NAME OF FUCK did my absolute loser of a brother get a girlfriend? I just don't understand. God, looking at the article after he's edited it, there's so much in there that's just him showing off, pathetic...\c-\n\n\cfYeah, he's that kinda guy. Acts like he's cool shit but once you get past his \"amazing skills and achievements\", he's just some asshole on the internet. I mean, I admit I kinda am to, a bit, but he's worse. I'd blame it on the fact he spent way too long on shitty forums.\c-\n\n\cfThough, he's also serious af when he wants. And at times like that he basically becomes the Tsukkomi to my Boke. If you don't know what that means you can go look it up, Demo-chan.\c-"; +SWWM_LORETAG_MMIASRVOL2 = "MMiaSR Vol.2"; +SWWM_LORETAB_MMIASRVOL2 = "Item"; +SWWM_LOREREL_MMIASRVOL2 = "Saya;Maidbot"; +SWWM_LORETXT_MMIASRVOL2 = "\cxTitle:\c-\n\cf My Maid Is A Sex Robot - Volume Two\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Comedy, Ecchi, Romance\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_BLACKMANN = "Blackmann Arms"; SWWM_LORETAB_BLACKMANN = "People"; SWWM_LOREREL_BLACKMANN = "BigShot;Wallbuster;Saya;Silverbullet"; @@ -89,6 +113,10 @@ SWWM_LORETAG_SYMNATEK = "Symnatek"; SWWM_LORETAB_SYMNATEK = "People"; SWWM_LOREREL_SYMNATEK = "Mixom;Saya;Nukuri;WhiteScar"; SWWM_LORETXT_SYMNATEK = "\cxName:\c-\n\cf Symnatek\c-\n\cxClassification:\c-\n\cf Industrial Equipment Manufacturer\c-\n\cxLocation:\c-\n\cf Brisbane, Australia\c-\n\n\cfSymnatek\c- was founded in 2040 by \cfJoanna Josephson\c-, initially acting as a local manufacturer of adopted \cfNukuri\c- technology (mainly for industrial purposes). Its nature was additionally signified by chosing a Nukuribaku name for itself: \"Symnaki Tekkanosei\" (Alliance Creations). In less than a year it became the dominant force in industrial manufactory within its home country.\n\nFollowing \cfWorld War 3\c-, and with the \cfWhite Scar Treaty\c- in effect, the company was forced to abandon its usage of Nukuri technology, which pretty much meant closing its doors completely. Rather than give up, they decided to simply have a \"change of direction\", dedicating themselves to technology of human origin instead (going against their very founding principles). As an aside, to better compensate for any potential losses in this shift, the child company of \cfItamex\c- was also founded, serving as a provider of supplies for the military.\n\nAs of this article's writing, Symnatek remains king in its home turf, managing even to fend off the almost-global domination of \cfMixom\c-, making Australia one of the few countries where they have any real competition.\n\n\cxSaya's Notes:\c-\n\cfAh yes, the well known strategy of \"if we're losing money, just contribute to the military\". Works every time, huh?\c-\n\n\cfOh I bet you're going to think: \"But Saya, who are you to talk, when you made Ibuki for the US military?\", and to that I'll respond: \"Who said I made her for them?\"\c-"; +SWWM_LORETAG_LOVESIGNALSCD = "Love Signals"; +SWWM_LORETAB_LOVESIGNALSCD = "Item"; +SWWM_LOREREL_LOVESIGNALSCD = "Maidbot"; +SWWM_LORETXT_LOVESIGNALSCD = "\cxTitle:\c-\n\cf Love Signals\c-\n\cxArtist:\c-\n\cf Meidobot\c-\n\cxYear:\c-\n\cf 2020\c-\n\cxGenre:\c-\n\cf J-Pop\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_NANA = "Miyamoto, Nana"; SWWM_LORETAB_NANA = "People"; SWWM_LOREREL_NANA = "Ryuji;Saya;Gensokyo;Yui;Taro"; @@ -99,10 +127,18 @@ SWWM_LORETAB_YNYKRON = "Item"; SWWM_LOREREL_YNYKRON = "Unissix;Nedoshiaan;Saya"; SWWM_LORETXT_YNYKRON = "\cxDesignation:\c-\n\cf Ynykron Artifact\c-\n\cxManufacturer:\c-\n\cf Nukurines Mei Mess\c-\n\cf Unissix Crafts (current)\c-\n\cxClassification:\c-\n\cf Concentrated Energy Cannon\c-\n\nThe \cfYnykron (Divine Fury)\c- is a high power energy weapon capable of efficiently erasing any living entities struck by its beam shot, both organic or artificial.\n\nIn its original incarnation, built by \cfNukurines Mei Mess\c- during his time serving as lead engineer of \cfNedoshiaan\c-'s empire, it could stand to even destroy the physical bodies of deities. As ammunition, it employed the concentrated energy extracted from slaves who had undergone years of constant torture, their suffering acting as fuel to bring forth this \"Divine Fury\".\n\nWhen it was retrieved from the depths of the dead planet along with the other artifacts, it fell into the hands of the \cfUnissix Clan\c-, and by extension, \cfMisa Unissix\c-.\n\nMisa had a lot of interest in weapons of legend, specifically, in making her own versions of them, so she saw this as a new challenge for her skills. Although at first she hit a wall due to the inability to dismantle and properly reverse engineer it, she eventually managed to get her hands on the original blueprints of the artifact, thanks to her grandfather from her father's side, \cfNekorosen Nerukousei\c-, who was an old friend of Mei Mess.\n\nThe replica Ynykron uses a highly volatile mixture of exotic elements, in stable crystalized form, with considerable destructive power once a simple beam of light is directed through it. Misa sees this as a more \"ethically reasonable\" alternative to the intended ammunition of the original, additionally having the benefit of being easy to manufacture with the right materials and time.\n\nIt should be noted that this weapon's usage is highly restricted. Special permission from a member of the Unissix clan is required.\n\n\cfPrimary Fire:\c- Charges the shot. Once complete, pulling the trigger releases it. The beam's effective range is of approximately 400 meters, after which it will rapidly dissipate. Nothing can stop its advance, walls merely slow it down.\n\n\cfSecondary Fire:\c- Reorients the ammo box, allowing for an alternate fire mode. A \"vortex shot\", a concentrated negative energy void that will pull in everything around itself for a short time, tearing it apart with strong tidal forces. It is generally not recommended to ever use this.\n\n\cfReloading:\c- If the weapon is charging, or ready for shooting, this will be cancelled and no ammunition will be used, but the weapon will have to vent for a while. Otherwise, a new crystal is loaded.\n\n\cxSaya's Notes:\c-\n\cfSometimes I wonder if Misa actually realizes the dangers of the stuff she makes. This thing... it's maybe a bit too much, you know... Even compared to all the other stuff in the arsenal. I still ended up accepting it, anyway, because you know how I am, and how cute Misa is. I can't say no to that face.\c-\n\n\cfSo yeah, here it is, \"God's Cumshot\" in all its glory. A motherfucking blast of blinding whiteness that just... absolutely fucking obliterates everything it's aimed at. Sure is a weapon, huh?\c-\n\n\cfAlso, that alternate mode... I know you'll probably do it anyway out of curiosity. Just... be careful, okay?\c-\n\n\cfOh, and just so you know, this thing is the reason why I make backups of your core before every mission. With any other weapon, I wouldn't be worried 'cause your body's pretty damn resilient, but this fucking thing is on a different level entirely. I gotta say it again, BE VERY CAREFUL. If you get caught in the blast you're gone forever, got it?\c-"; SWWM_LORETXT_YNYKRON2 = "\cxDesignation:\c-\n\cf Ynykron Artifact\c-\n\cxManufacturer:\c-\n\cf Nukurines Mei Mess\c-\n\cf Unissix Crafts (current)\c-\n\cxClassification:\c-\n\cf Concentrated Energy Cannon\c-\n\nThe \cfYnykron (Divine Fury)\c- is a high power energy weapon capable of efficiently erasing any living entities struck by its beam shot, both organic or artificial.\n\nIn its original incarnation, built by \cfNukurines Mei Mess\c- during his time serving as lead engineer of \cfNedoshiaan\c-'s empire, it could stand to even destroy the physical bodies of deities. As ammunition, it employed the concentrated energy extracted from slaves who had undergone years of constant torture, their suffering acting as fuel to bring forth this \"Divine Fury\".\n\nWhen it was retrieved from the depths of the dead planet along with the other artifacts, it fell into the hands of the \cfUnissix Clan\c-, and by extension, \cfMisa Unissix\c-.\n\nMisa had a lot of interest in weapons of legend, specifically, in making her own versions of them, so she saw this as a new challenge for her skills. Although at first she hit a wall due to the inability to dismantle and properly reverse engineer it, she eventually managed to get her hands on the original blueprints of the artifact, thanks to her grandfather from her father's side, \cfNekorosen Nerukousei\c-, who was an old friend of Mei Mess.\n\nThe replica Ynykron uses a highly volatile mixture of exotic elements, in stable crystalized form, with considerable destructive power once a simple beam of light is directed through it. Misa sees this as a more \"ethically reasonable\" alternative to the intended ammunition of the original, additionally having the benefit of being easy to manufacture with the right materials and time.\n\nIt should be noted that this weapon's usage is highly restricted. Special permission from a member of the Unissix clan is required.\n\n\cfPrimary Fire:\c- Charges the shot. Once complete, pulling the trigger releases it. The beam's effective range is of approximately 400 meters, after which it will rapidly dissipate. Nothing can stop its advance, walls merely slow it down.\n\n\cfSecondary Fire:\c- Reorients the ammo box, allowing for an alternate fire mode. A \"vortex shot\", a concentrated negative energy void that will pull in everything around itself for a short time, tearing it apart with strong tidal forces. It is generally not recommended to ever use this.\n\n\cfReloading:\c- If the weapon is charging, or ready for shooting, this will be cancelled and no ammunition will be used, but the weapon will have to vent for a while. Otherwise, a new crystal is loaded.\n\n\cxSaya's Notes:\c-\n\cfSometimes I wonder if Misa actually realizes the dangers of the stuff she makes. This thing... it's maybe a bit too much, you know... Even compared to all the other stuff in the arsenal. I still ended up accepting it, anyway, because you know how I am, and how cute Misa is. I can't say no to that face.\c-\n\n\cfSo yeah, here it is, \"God's Cumshot\" in all its glory. A motherfucking blast of blinding whiteness that just... absolutely fucking obliterates everything it's aimed at. Sure is a weapon, huh?\c-\n\n\cfAlso, that alternate mode... I know you'll probably do it anyway out of curiosity. Just... be careful, okay?\c-\n\n\cfOh, and just so you know, this thing is the reason why I make backups of your core before every mission. With any other weapon, I wouldn't be worried 'cause your body's pretty damn resilient, but this fucking thing is on a different level entirely. I gotta say it again, BE VERY CAREFUL. If you get caught in the blast you're gone forever, got it?\c-\n\n\cfPS: We've confirmed it (well, Misa did, directly), this thing is effective against gods too. Not enough to kill, but it does have some very... notable destructive effects. Pretty crazy story, really. It was the next day after my wedding, Misa just pops up carrying her personal Ynykron and challenges the fucking goddess of war to a duel, right there and then. She ate up the whole damn blast, burned through most of her body leaving bones exposed. After that very painful experience, Misa was declared the second strongest warrior in the fucking universe, just like that. Oh yeah, Erika described the experience as \"being struck by a condensed supernova\". That's metal as fuck.\c-"; +SWWM_LORETAG_EMPCARBINE = "Rail Carbine"; +SWWM_LORETAB_EMPCARBINE = "Item"; +SWWM_LOREREL_EMPCARBINE = "EngineTech"; +SWWM_LORETXT_EMPCARBINE = "\cxDesignation:\c-\n\cf EMP Rail Carbine\c-\n\cxManufacturer:\c-\n\cf Tach-Engine Technology Institute\c-\n\cxClassification:\c-\n\cf Directed Energy Weapon\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_SILVERBULLET = "Silver Bullet JET"; SWWM_LORETAB_SILVERBULLET = "Item"; SWWM_LOREREL_SILVERBULLET = "Blackmann;Forx;Explodium"; SWWM_LORETXT_SILVERBULLET = "\cxDesignation:\c-\n\cf Silver Bullet JET\c-\n\cxManufacturer:\c-\n\cf Blackmann Arms Ltd.\c-\n\cf Forx Aeronautics\c-\n\cxClassification:\c-\n\cf Ultra-High Caliber Sniper Rifle\c-\n\nThe \cfSilver Bullet JET\c- is the 1.150 member of the \cfSilver Bullet\c- series of ultra-high caliber rifles manufactured by \cfBlackmann Arms\c-. It was created as a lighter, more \"reasonable\" alternative to the 1.350 \cfBehemoth\c- model. Weighing 43 kilograms and sporting a total length of 2.4 meters, it is sufficiently compact for non-augmented human use.\n\nThe main ammunition designed for this specific model is the 1.150 \cfXSB (eXplosive Super Burst)\c-. These beastly rounds are partially based on a NATO standard 30x113mm cartridge, and employ a low density \cfExplodium\c- shaped charge as propellant, allowing high velocity while still being safe for use. The bullets themselves are composed of a tungsten carbide core, snugly wrapped in an aluminum jacket, and decorated with a thin silver plating for aesthetic appearance (Silver Bullets are, indeed, NOT really made of silver). XSB rounds can penetrate several targets before eventually stopping, depending on their size, they may also do the same for thin walls.\n\nThe secondary ammunition is the 1.150 \cfFCB (Fat Chode Bomb)\c-. Personally named by the CEO of Blackmann Arms himself, FCBs are quite similar to the standard XSB ammunition, but instead the bullets are full of additional Explodium, which on impact, is released violently, propagating its deadly blast through solid surfaces. Due to the volatility of these bullets, the propellant employed is slightly less potent, which results in a diminished potential for target penetration, but the blast definitely compensates for this. The explosive charge is so powerful that it can break some walls to pieces.\n\nIn order to compensate for its massive recoil, the weapon redirects a part of the gasses from round ignition into a set of jet compensators designed by \cfForx Aeronautics\c-. Although partially cooled in the process, it is still hot enough to cause some damage to users not wearing adequate protection.\n\n\cfPrimary Fire:\c- Shoot the bullet. Any small targets hit by it are pretty much turned to paste. A second press after firing will chamber another round.\n\n\cfSecondary Fire:\c- Switches next reload between XSB and FCB ammunition, if available.\n\n\cfReloading:\c- Reloads the weapon. Each magazine holds 5 rounds. An extra round can also be kept chambered.\n\n\cfZoom:\c- Custom-tailored adjustable telescopic sight, up to 16x. Equipped with a soft foam covering to protect the user's face during scoped fire.\n\n\cfTechniques:\c- When going prone to use the bipod, the recoil compensators will automatically disengage, resulting in increased firepower at the cost of less mobility.\n\n\cxSaya's Notes:\c-\n\cfWhat was that quote again, \"there is no kill like overkill\"? Yeah, sounds about right for this thing.\c-\n\n\cfThe fuck are you even supposed to hunt with it, wild tanks? I suppose... bigass beefy demons could also count, but you're going to just turn them all to fucking paste.\c-"; +SWWM_LORETAG_BLACKFIREIGNITER = "Blackfire Igniter"; +SWWM_LORETAB_BLACKFIREIGNITER = "Item"; +SWWM_LOREREL_BLACKFIREIGNITER = "Sankaideriha;Unissix;Gods;Saya"; +SWWM_LORETXT_BLACKFIREIGNITER = "\cxDesignation:\c-\n\cf Blackfire Igniter\c-\n\cxManufacturer:\c-\n\cf Unissix Crafts\c-\n\cf Design by LS\c-\n\cxClassification:\c-\n\cf Flamethrower\c-\n\nDevised by the primordial god of magic themself, the \cfBlackfire Igniter\c- is rather surprisingly a very cold, dark weapon. Blackfire is a type of magical flame that absorbs heat and light, rather than emitting them.\n\nDuring the height of \cfUnissix Crafts\c-'s fame, the god personally approached \cfMisa Unissix\c- herself with a request for a weapon that would allow just about anyone to readily perform \cfBlackfire Manipulation Magic\c-.\n\nThe Igniter is the perfect blend of magic and technology, weaponized. At your fingertips, you have the power to call forth freezing flames that will turn your enemies into pretty ice statues in mere seconds.\n\n\cfPrimary Fire:\c- Releases a continuous stream of Blackfire, with moderate range. The flames not only rapidly freeze whatever they touch, but also reduce the air temperature, leaving a lingering freeze effect.\n\n\cfSecondary Fire:\c- Concentrated bursts that form spears of supercooled air which can impale small targets, or tear right through them.\n\n\cfReloading:\c- Attach a canister to replenish the weapon's internal dark mana reserves. The canister will remain locked in until it's been emptied, otherwise residual energy could escape it and bring harm to the user. If there is an empty canister attached, a second reload action will detach it. Fresh canisters can still be used even if the tank is full, and they will act as an extra \"buffer\" of mana until depleted.\n\n\cxSaya's Notes:\c-\n\cfSo yeah, Misa-Misa has other toys besides that one bigass gun. Pretty cool that she gets requests and whatnot, lil' cinnamon roll's quite popular there, heheheh...\c-\n\n\cfI heard very little of all this Blackfire stuff from LS-sama, but it sounds like fun. Wonder if it can be used in a spellcard...\c-"; SWWM_LORETAG_BIGSHOT = "Mr. BIG SHOT"; SWWM_LORETAB_BIGSHOT = "People"; SWWM_LOREREL_BIGSHOT = "Blackmann;Saya"; @@ -120,6 +156,10 @@ SWWM_LORETAG_IMANAKIT = "Imanaki, Tetsuya"; SWWM_LORETAB_IMANAKIT = "People"; SWWM_LOREREL_IMANAKIT = "Onoke;Saya;GhoulHunt;Imanaki"; SWWM_LORETXT_IMANAKIT = "\cxFull Name:\c-\n\cf Tetsuya Imanaki\c-\n\cxNationality:\c-\n\cf Undetermined\c-\n\cxDate of Birth:\c-\n\cf Undetermined\c-\n\nThe founder and CEO of \cfImanaki Corp\c-, and also last surviving member of the Imanaki family following the \cfOnoke Mansion Murders\c- of 2003. \cfTetsuya\c- had always been a very secretive individual, so nothing is really known of his personal life or history, nor even his appearance.\n\nDuring the events of the \cfGhoul Hunt\c-, and later the \cfHellbound Incident\c-, he once again avoided death thanks to his absence from the Imanaki Corp installations. However, no one knew where he was exactly, and ever since these events he completely vanished.\n\n\cxSaya's Notes:\c-\n\cfShort article, I know. There really is nothing on this guy, seriously. It's like... he never left any trace of himself other than just... the fact he once existed and was in charge of all that stuff.\c-"; +SWWM_LORETAG_HEAVYMAHSHEENGUN = "Sheen HMG"; +SWWM_LORETAB_HEAVYMAHSHEENGUN = "Item"; +SWWM_LOREREL_HEAVYMAHSHEENGUN = "Cyrus"; +SWWM_LORETXT_HEAVYMAHSHEENGUN = "\cxDesignation:\c-\n\cf \"Sheen\" Heavy Machinegun\c-\n\cxManufacturer:\c-\n\cf Cyrus Enterprises\c-\n\cxClassification:\c-\n\cf Portable Rotary Cannon\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_ZANAVETH2 = "Zanaveth II"; SWWM_LORETAB_ZANAVETH2 = "People"; SWWM_LOREREL_ZANAVETH2 = "Nukuri;Devanikna;Unissix;Nekuratek;Zanaveth3;Kirin;WhiteScar;XAnimen"; @@ -132,11 +172,15 @@ SWWM_LORETXT_FABRICATOR = "\cxDesignation:\c-\n\cf Universal Ammo Fabricator\c-\ SWWM_LORETAG_IMANAKI = "Imanaki Corp"; SWWM_LORETAB_IMANAKI = "People"; SWWM_LOREREL_IMANAKI = "ImanakiT;Kereshnovka;UAC;Hell;GhoulHunt;Saya;SUSAN"; -SWWM_LORETXT_IMANAKI = "\cxName:\c-\n\cf Imanaki Research Corporation\c-\n\cxClassification:\c-\n\cf Top Secret Research Facility\c-\n\cxLocation:\c-\n\cf Kereshnovka, Russia\c-\n\nThe \cfImanaki Research Corporation\c- was founded in 2004 by \cfTetsuya Imanaki\c-, with its main headquarters in the town of \cfKereshnovka\c-, in northern Siberia.\n\nWhile they attempted to keep all their work a well-guarded secret, a lot of information would frequently be leaked by anonymous sources. It is well known that Imanaki Corp engaged in interdimensional travel experiments, specifically to the realm of \cfHell\c-. Much was studied of that world, and with the knowledge gained of their research, the corporation would then delve into the combination of Demon and Human technology. It was not known exactly how they got the technology for interdimensional travel in the first place, until documents from the \cfFaculty of Illuminated Nobodies\c- were discovered in late 2099 showing their collaboration, and that most of this technology was of \cfXevetha\c- origin, just like the \cfSUSAN\c- AI.\n\nFollowing an incident where some of the town's local ghouls attempted to attack the installations, Imanaki Corp contacted the \cfUAAF\c- in order to request armed defense. When the man they sent to negotiate their contract arrived at the town, he was murdered on sight by one of the ghouls. This prompted the UAAF to immediately send soldiers to the area, in order to exterminate those creatures, as it seemed that they maybe were more hostile than they expected. This \"hunt\" for the ghouls started in mid-2007, and lasted for two whole years, as the entirety of the town and its surroundings were thoroughly combed and every single encountered creature was exterminated, except for one.\n\nThe very last ghoul they encountered proved to be much more resilient than all the others, taking many lives with it as it caused an immense fire within the Nuskar forest. The locals had warned them that this was no ordinary monster, but something much more powerful that they could never defeat. It took many days to weaken that lone ghoul, and when finally they attempted to go for the killing blow, a man approached the soldiers, and stood between them and the downed beast. He was definitely not one of the locals, and the language he spoke could not be identified by anyone. Despite being ordered to step aside, he did not move, pointing at the soldiers and shouting at them. They eventually decided to open fire on him. This was one of the biggest mistakes humanity would ever make.\n\nThat man was none other than \cfPrince Anthon Anderken\c-, one of the most important members of \cfAnarukon\c- royalty, who had, by sheer chance, come to Earth in order to seize that one specific ghoul, for undetermined reasons, at the same exact moment the hunt had started. After being shot down, the ghoul became enraged, and used the last of its strength to engulf everyone in blazing fire. The roar of this explosion of blinding flame was heard all over the world. None of the soldiers survived, as the whole forest was reduced to ashes in an instant. It is unknown what happened to Anthon or the ghoul, but most would assume they both survived.\n\nAfter this rather spectacular incident, Imanaki Corp resumed their operations, now freed from the threat of the ghouls, although they faced much criticism from the locals for their decision to destroy what they deemed a \"national treasure\". This relative peace would not last long, however, as the consequences of the attack on Anthon would eventually catch up to them. In December of 2009, before yet another routine expedition to Hell, their portals were hijacked by an unidentified attacker, and from them, a swarm of Anarukon soldiers sprung forth, annihilating everyone they'd find within the installations and their surroundings. The Imanaki Corp building was completely destroyed, and the Anarukon forces remained in the town for many days, before eventually returning to their world, satisfied with the destruction they had caused in retaliation.\n\nSome time after these events, a small recon team managed to salvage some of the research material and other documents from the ruins, which would later fall into the hands of the \cfUAC\c-.\n\n\cxSaya's Notes:\c-\n\cfI've talked about the ghoul hunt stuff in another entry, so I won't go into detail here, but yeah, would you look at that. The \"great and mighty\" UAC, stealing shit from those people.\c\n\n\cfYou know, when they started talking about delving into teleportation tech, I KNEW. I knew right away that they were using all that shit they stole. Fucking bastards, they even claimed to be \"the very first\", too.\c-"; +SWWM_LORETXT_IMANAKI = "\cxName:\c-\n\cf Imanaki Research Corporation\c-\n\cxClassification:\c-\n\cf Top Secret Research Facility\c-\n\cxLocation:\c-\n\cf Kereshnovka, Russia\c-\n\nThe \cfImanaki Research Corporation\c- was founded in 2004 by \cfTetsuya Imanaki\c-, with its main headquarters in the town of \cfKereshnovka\c-, in northern Siberia.\n\nWhile they attempted to keep all their work a well-guarded secret, a lot of information would frequently be leaked by anonymous sources. It is well known that Imanaki Corp engaged in interdimensional travel experiments, specifically to the realm of \cfHell\c-. Much was studied of that world, and with the knowledge gained of their research, the corporation would then delve into the combination of Demon and Human technology. It was not known exactly how they got the technology for interdimensional travel in the first place, until documents from the \cfFaculty of Illuminated Nobodies\c- were discovered in late 2099 showing their collaboration, and that most of this technology was of \cfXevetha\c- origin, just like the \cfSUSAN\c- AI.\n\nFollowing an incident where some of the town's local ghouls attempted to attack the installations, Imanaki Corp contacted the \cfUAAF\c- in order to request armed defense. When the man they sent to negotiate their contract arrived at the town, he was murdered on sight by one of the ghouls. This prompted the UAAF to immediately send soldiers to the area, in order to exterminate those creatures, as it seemed that they maybe were more hostile than they expected. This \"hunt\" for the ghouls started in mid-2007, and lasted for two whole years, as the entirety of the town and its surroundings were thoroughly combed and every single encountered creature was exterminated, except for one.\n\nThe very last ghoul they encountered proved to be much more resilient than all the others, taking many lives with it as it caused an immense fire within the Nuskar forest. The locals had warned them that this was no ordinary monster, but something much more powerful that they could never defeat. It took many days to weaken that lone ghoul, and when finally they attempted to go for the killing blow, a man approached the soldiers, and stood between them and the downed beast. He was definitely not one of the locals, and the language he spoke could not be identified by anyone. Despite being ordered to step aside, he did not move, pointing at the soldiers and shouting at them. They eventually decided to open fire on him. This was one of the biggest mistakes humanity would ever make.\n\nThat man was none other than \cfPrince Anthon Anderken\c-, one of the most important members of \cfAnarukon\c- royalty, who had, by sheer chance, come to Earth in order to seize that one specific ghoul, for undetermined reasons, at the same exact moment the hunt had started. After being shot down, the ghoul became enraged, and used the last of its strength to engulf everyone in blazing fire. The roar of this explosion of blinding flame was heard all over the world. None of the soldiers survived, as the whole forest was reduced to ashes in an instant. It is unknown what happened to Anthon or the ghoul, but most would assume they both survived.\n\nAfter this rather spectacular incident, Imanaki Corp resumed their operations, now freed from the threat of the ghouls, although they faced much criticism from the locals for their decision to destroy what they deemed a \"national treasure\". This relative peace would not last long, however, as the consequences of the attack on Anthon would eventually catch up to them. In December of 2009, before yet another routine expedition to Hell, their portals were hijacked by an unidentified attacker, and from them, a swarm of Anarukon soldiers sprung forth, annihilating everyone they'd find within the installations and their surroundings. The Imanaki Corp building was completely destroyed, and the Anarukon forces remained in the town for many days, before eventually returning to their world, satisfied with the destruction they had caused in retaliation.\n\nSome time after these events, a small recon team managed to salvage some of the research material and other documents from the ruins, which would later fall into the hands of the \cfUAC\c-.\n\n\cxSaya's Notes:\c-\n\cfI've talked about the ghoul hunt stuff in another entry, so I won't go into detail here, but yeah, would you look at that. The \"great and mighty\" UAC, stealing shit from those people.\c-\n\n\cfYou know, when they started talking about delving into teleportation tech, I KNEW. I knew right away that they were using all that shit they stole. Fucking bastards, they even claimed to be \"the very first\", too.\c-"; SWWM_LORETAG_FORX = "Forx Aeronautics"; SWWM_LORETAB_FORX = "People"; SWWM_LOREREL_FORX = "Propulsor;Saya;UAC"; SWWM_LORETXT_FORX = "\cxName:\c-\n\cf Forx Aeronautics\c-\n\cxClassification:\c-\n\cf Propulsion Engine Manufacturer\c-\n\cxLocation:\c-\n\cf Kent, England\c-\n\cxWebsite:\c-\n\cf https://forx.co.uk\c-\n\nFounded in 2029 by \cfHarold Forx\c-, this company is credited with singlehandedly rescuing England from its long fall into economic ruin after \cfBrexit\c- in 2020 and the \cfScottish Independence\c- in 2022. Despite these two mortal blows, \cfForx Aeronautics\c-, having appeared seemingly out of nowhere, founded by a man who, only years prior had been spending his life scavenging around junkyards, managed to pull in enough cash to rescue the whole country only mere months after its foundation.\n\nForx is currently the #1 supplier of propulsion engines for all types of aircraft, be it commercial jet planes, or even spaceships. Their dominance extends all across the eastern side of the Atlantic, as overseas, in America, the \cfUAC\c- still reigns supreme, with their own in-house technologies.\n\nApart from aircraft engines, Forx has also adapted their patented jet propulsion systems for other uses, such as in the \cfJetBurst™ Impulsor\c- series of jetpacks, being the first to be considered \"truly portable\", or in the \cfRapid Jet Compensator\c- recoil dampening system for high caliber firearms, which permits the use of these weapons outside of heavy, unwieldy power armor.\n\n\cxSaya's Notes:\c-\n\cfYeah, yeah, the usual \"rags to riches\" story. Homeless orphan becomes a \"self-made\" millionaire through sheer effort and perseveration, yadda yadda. As if. Bet there's something else to this whole thing that he ain't telling anyone. There HAS to be. No one just up and becomes filthy rich out of the fucking blue like that unless they've got some contacts somewhere, I ain't buying that.\c-\n\n\cfAlso, guy's an asshole, anyway. Like any rich bastard capitalist pig, honestly. Can you believe that the fucker once tried to mow down the orphanage he grew up in? But the thing is, he tried... but failed, and boy was that a sight to see.\c-\n\n\cfAlright, so as it goes, the guy first tried to tell them to fuck off from there and let him bulldoze the whole place to build some shit in there. They didn't even listen. Then, he goes there in person, and THIS is the fun part. After an argument with the director of the orphanage, who personally knew the guy, he got SLAPPED SO FUCKING HARD he did a complete 180 and ran away crying.\c-\n\n\cfI fucking kid you not, Demo-chan, that is exactly what I saw. I've watched the archived footage like a hundred times, since it helps me feel better when I'm in a sour mood, and... every time, the part where he gets fucking backhanded across the face by the old geezer, it never fails. I always lose my shit. It's TOO GOOD.\c-\n\n\cfSeriously, this is what all those people really need. You don't know how many times I wish I could just go and beat the crap out of that bastard manchild Kelliher. I'd surely feel much better, yeah. Fuck him, and the UAC too. \"Eat the rich\" is somehow still relevant, but I really want to popularize \"Beat the rich\".\c-"; +SWWM_LORETAG_KIRINMANGA = "Kirin Manga"; +SWWM_LORETAB_KIRINMANGA = "Item"; +SWWM_LOREREL_KIRINMANGA = "Kirin;Saya"; +SWWM_LORETXT_KIRINMANGA = "\cxTitle:\c-\n\cf I Married A Cherry Boy Emperor But It Turns Out He's Really Cute In Lingerie!?\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Comedy, Ecchi, Romance\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_SANKAIDERIHA = "Sankaideriha"; SWWM_LORETAB_SANKAIDERIHA = "Lore"; SWWM_LOREREL_SANKAIDERIHA = "Nukuri;Saya;Ashley;Gods;Kirin"; @@ -147,6 +191,10 @@ SWWM_LORETAB_DOOMGUY = "People"; SWWM_LOREREL_DOOMGUY = "UAC;Hell;Saya;AkariLabs;Demolitionist"; SWWM_LORETXT_DOOMGUY = "\cxFull Name:\c-\n\cf CLASSIFIED\c-\n\cxOther Names:\c-\n\cf Doom Marine\c-\n\cf The Lone Marine\c-\n\cf Doomguy\c-\n\cxNationality:\c-\n\cf American\c-\n\cxDate of Birth:\c-\n\cf CLASSIFIED\c-\n\nThe \cfDoom Marine\c- is the lone survivor of the demonic invasions on the \cfUAC\c- bases of Phobos and Deimos. Having been transferred to \cfMars City\c- not long before the initial incidents, he was part of the detachment sent to defend the Phobos bases from the invading demons who had somehow hijacked the teleportation systems the UAC was experimenting with. Following this impressive feat of, as a one man army, fighting off the invaders on both Phobos and Deimos, along with taking the fight to \cfHell\c- itself and coming back, he was appointed as the organization's \"problem solver\".\n\nAt the moment of this article's writing, the marine has been tasked with fighting the demon invaders who have appeared on Earth. Most have faith in his success, seeing him as a truly unstoppable demon slaying machine, but others have criticised the UAC's decision to send just one single individual to deal with such a large scale invasion, among them \cfSaya Miyamoto\c- of \cfAkari Labs\c-, who instead opted to place her bets on her own creation, the \cfDemolitionist\c-.\n\n\cxSaya's Notes:\c-\n\cfAlright, IMPORTANT THING: don't get close to this guy, don't say anything to him, do not interact. If you two come across each other, stand back and let him work, or he might just go and start shooting you too.\c-\n\n\cfBy the way, my congratulations to those UAC goons for how well-guarded they keep all the info about him. We don't even know his actual goddamn name, or his history from before all this shit started. Like, what even is this guy like? I haven't heard much of that, but there was some mention of him liking rabbits? Cute bunnies?\c-\n\n\cfWell, maybe then, if you pretend those horns of yours are some bun ears, he might not shoot you on sight, who knows...\c-"; SWWM_LORETXT_DOOMGUY2 = "\cxFull Name:\c-\n\cf CLASSIFIED\c-\n\cxOther Names:\c-\n\cf Doom Marine\c-\n\cf The Lone Marine\c-\n\cf Doomguy\c-\n\cxNationality:\c-\n\cf American\c-\n\cxDate of Birth:\c-\n\cf CLASSIFIED\c-\n\nThe \cfDoom Marine\c- is the lone survivor of the demonic invasions on the \cfUAC\c- bases of Phobos and Deimos. Having been transferred to \cfMars City\c- not long before the initial incidents, he was part of the detachment sent to defend the Phobos bases from the invading demons who had somehow hijacked the teleportation systems the UAC was experimenting with. Following this impressive feat of, as a one man army, fighting off the invaders on both Phobos and Deimos, along with taking the fight to \cfHell\c- itself and coming back, he was appointed as the organization's \"problem solver\".\n\nFollowing his arrival on Earth, the marine was tasked with fighting the demon invaders who had appeared there too. While most had faith in his success, seeing him as a truly unstoppable demon slaying machine, others had criticised the UAC's decision to send just one single individual to deal with such a large scale invasion, among them \cfSaya Miyamoto\c- of \cfAkari Labs\c-, who instead opted to place her bets on her own creation, the \cfDemolitionist\c-, and sure enough, her creation managed to far surpass the marine's abilities, not only swiftly eliminating the invading forces, but also putting an end to the whole invasion by singlehandedly defeating the leader of Hell's armies, the \cfIcon of Sin\c-.\n\nDespite this \"defeat\", the UAC continued to make use of the Doom Marine for many other demon slaying missions. He was eventually decommissioned by the end of 2149, seeing as no further attempts were made by Hell to attack humanity once again. This didn't last forever, though, as in 2160, a new threat was discovered, a \cfMother Demon\c- had risen to power, replacing the Icon of Sin and reviving the armies that were once defeated. The Doom Marine was immediately re-commissioned and sent to put a stop to this. Following his success in defeating the Mother Demon, he sent one last transmission, noting that he would \"stay in Hell to make sure no demon ever comes out again\". Ever since then, no further communication has been possible with him.\n\n\cxSaya's Notes:\c-\n\cfI asked trusty ol' Cytho-sama if he knew what the the dude is up to. Basically, what he knows is that, after making a big fucking mess of Hell, even kicking the asses of some of the lesser Demon Generals (nice), one of the big \"archdemon\" guys, the one that's a fat ugly bastard, poofed him away \"out of this universe\" as soon as he got close.\c-\n\n\cfSo, that's how the story ends. He's just gone, forever, and those fucks are still running Hell. BUT... I was also told that without anyone left to command their legions they're basically losing control of everything, and might be overthrown soon. Good.\c-"; +SWWM_LORETAG_MMIASRVOL3 = "MMiaSR Vol.3"; +SWWM_LORETAB_MMIASRVOL3 = "Item"; +SWWM_LOREREL_MMIASRVOL3 = "Saya;Maidbot"; +SWWM_LORETXT_MMIASRVOL3 = "\cxTitle:\c-\n\cf My Maid Is A Sex Robot - Volume Three\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Comedy, Ecchi, Romance\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_NUGGET = "H/A Nuggets"; SWWM_LORETAB_NUGGET = "Item"; SWWM_LOREREL_NUGGET = "Saya;EngineTech"; @@ -155,6 +203,10 @@ SWWM_LORETAG_MUNCH = "Munch Innovations"; SWWM_LORETAB_MUNCH = "People"; SWWM_LOREREL_MUNCH = "Saya;Explodium;ExplodiumGun"; SWWM_LORETXT_MUNCH = "\cxName:\c-\n\cf Munch Innovations\c-\n\cxClassification:\c-\n\cf Smart Home Appliance Manufacturer\c-\n\cf Arms Manufacturer\c-\n\cxLocation:\c-\n\cf Texas\c-\n\cxWebsite:\c-\n\cf https://munch.home\c-\n\nInitially starting its days producing smart appliances for home use, \cfMunch Innovations\c- suddenly entered the weapons market without a second thought after \cfParker Munch\c-, son of company founder \cfAllen Munch\c- and well-known gun enthusiast, made the decision to acquire all the research material and patents on a new plastic explosive known as \cfExplodium\c-.\n\nFollowing the success of Parker's \cfExplodium Gun\c-, he went on to announce an \"invent as many guns as I can in one week\" challenge on his Twitter, furthermore going through each and every one of the various designs he'd come up with. Not many of those succeeded, although a much more powerful (albeit dangerous) new model of the Explodium Gun did gain some recognition (mainly among people crazy enough to want to use it).\n\nMany of the designs that did succeed would enter the market under the Munch Innovations brand, however, and sell like hotcakes, especially on US territory.\n\n\cxSaya's Notes:\c-\n\cfGotta love how in this day and age, pretty much anyone can start making guns. I mean, for those american idiots, it's not unexpected, but yeah.\c-\n\n\cfAlso is it just me or... that guy's name sounds hella familiar? I swear, I've heard that name before... or something similar, maybe? If my brain wasn't so scrambled from living this long I'd remember it right away, fml.\c-"; +SWWM_LORETAG_BRCDEBUTLP = "Walpurgisnacht"; +SWWM_LORETAB_BRCDEBUTLP = "Item"; +SWWM_LOREREL_BRCDEBUTLP = "Ashley;Saya"; +SWWM_LORETXT_BRCDEBUTLP = "\cxTitle:\c-\n\cf Walpurgisnacht\c-\n\cxArtist:\c-\n\cf The Black Rat's Coven\c-\n\cxYear:\c-\n\cf 2006\c-\n\cxGenre:\c-\n\cf Gothic Rock\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_HAMMERSPACEEMBIGGENER = "Hs. Embiggener"; SWWM_LORETAB_HAMMERSPACEEMBIGGENER = "Item"; SWWM_LOREREL_HAMMERSPACEEMBIGGENER = "Cyrus;Hammerspace;Saya"; @@ -163,6 +215,10 @@ SWWM_LORETAG_BLASTSUIT = "Blast Suit"; SWWM_LORETAB_BLASTSUIT = "Item"; SWWM_LOREREL_BLASTSUIT = "Symnatek;Cyrus"; SWWM_LORETXT_BLASTSUIT = "\cxDesignation:\c-\n\cf Blast Suit\c-\n\cxManufacturer:\c-\n\cf Itamex Military Supplies (a subsidiary of Symnatek)\c-\n\cxClassification:\c-\n\cf Body Armor\c-\n\nA simple, easy to wear vest, designed to protect against explosives. Its main body is made of very elastic nanofabrics, which should provide additional protection against small arms. The heavy plating on the front is made of a highly shock-absorbing proprietary alloy, which is capable of absorbing most of the brunt of force of any explosion near the wearer. The manufacturer advertises that \"it can even block RPGs\", though this has never been put to the test.\n\n\cxAnalysis data:\c-\nThis piece of armor appears to be able to reduce most incoming damage by a factor of 30%, and also completely halve any explosive impact received by the wearer. It can absorb up to 150 \"units of damage\" before it becomes unusable. Furthermore, it can be worn under other other types of armor, allowing for combined protection.\n\n\cxSaya's Notes:\c-\n\cfDon't even ask about it, I seriously don't know what this about \"units of damage\" means. We had that nerdo from Cyrus Enterprises run the tests for us. I swear, he's always acting like everything's a fucking videogame, just like how he also insists on doing the whole thing of scattering equipment around on purpose for you to pick up. BUT I can't really do jack shit about it. He's the one paying the bills... Yeah, all that cash you're piling up? That's him, he calls it your \"score\". Seriously... fucking nerd...\c-"; +SWWM_LORETAG_KIRINCUMMIES = "Peach Juice"; +SWWM_LORETAB_KIRINCUMMIES = "Item"; +SWWM_LOREREL_KIRINCUMMIES = "Kirin"; +SWWM_LORETXT_KIRINCUMMIES = "\cxDesignation:\c-\n\cf Toot Froot™ Peach Juice\c-\n\cxManufacturer:\c-\n\cf Vestal Foods Inc.\c-\n\cxClassification:\c-\n\cf Flavored Milk Beverage\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_RYUJI = "Miyamoto, Ryuji"; SWWM_LORETAB_RYUJI = "People"; SWWM_LOREREL_RYUJI = "Nana;Taro;Saya;Yui;AkariLabs;Gensokyo"; @@ -228,11 +284,23 @@ SWWM_LORETAG_EXPLODIUM = "Explodium"; SWWM_LORETAB_EXPLODIUM = "Lore"; SWWM_LOREREL_EXPLODIUM = "Munch;Saya;ExplodiumGun"; SWWM_LORETXT_EXPLODIUM = "\cxName:\c-\n\cf Explodium\c-\n\cxClassification:\c-\n\cf Highly explosive material\c-\n\n\cfExplodium\c- is a proprietary mixture of highly volatile elements that combusts violently when ignited or struck. What sets it apart from all other high-grade plastic explosives is the obscenely high yield of even a single gram of this material, which is comparable to that of a standard issue hand grenade.\n\nThe material was initially invented by a group of anonymous researchers, then bought by \cfParker Munch\c-, son of the founder of \cfMunch Innovations\c-, who in addition obtained all rights to reproduce and commercialize it. Its first use was in the \cfExplodium Gun\c-, an easily portable \"pocket exploder\" that saw massive commercial success, allowing the company to climb the ranks of the world's top arms manufacturers, despite the fact that, had it not been for Parker's interests in weaponizing it, they would have never even considering entering that market, remaining solely as producers of smart appliances.\n\nThough generally regulated due to the dangers posed by its misuse, it's common knowledge that Explodium is also often sold in black markets, and may have even been employed in the creation of \"small bombs\", used in certain acts of terror and gruesome assassinations.\n\n\cxSaya's Notes:\c-\n\cfFUCKING CALLED IT! And everyone laughed at me, HA!\c-\n\n\cfSee? The \"small bombs\" theory could have been correct! Yeah, who's laughing now, you fuckers? I AM!\c-"; +SWWM_LORETAG_PUNTZERGAMMA = "Puntzer Gamma"; +SWWM_LORETAB_PUNTZERGAMMA = "Item"; +SWWM_LOREREL_PUNTZERGAMMA = "Blackmann"; +SWWM_LORETXT_PUNTZERGAMMA = "\cxDesignation:\c-\n\cf Puntzer \"Gamma\" Assault Carbine\c-\n\cxManufacturer:\c-\n\cf Blackmann Arms Ltd.\c-\n\cxClassification:\c-\n\cf Submachine Gun\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_ANARUKON = "Anarukon"; SWWM_LORETAB_ANARUKON = "Lore"; SWWM_LOREREL_ANARUKON = "Gods;Novoskhana;Hell;Saya;Kirin;Luna;Ashley;UAC;Ellen;Maidbot;Ibuki;Demolitionist"; SWWM_LORETXT_ANARUKON = "\cxName:\c-\n\cf Anarukon (\"Undying\")\c-\n\cxClassification:\c-\n\cf Alien species\c-\n\cxLocation:\c-\n\cf Novoskhana\c-\n\cf Kurukurinishe\c-\n\cf Akkou\c-\n\cf + Various others (including Earth)\c-\n\nThe \cfAnarukon\c- are a race of immortal beings native to a parallel world known as \cfNovoskhana\c-, outside of the bounds of our own Universe. According to their historical records, this world was created by a deity known as \cfNoskas Kurenai\c- (\"Great Father of Eternity\" in their tongue), over 50,000 years ago. Novoskhana is also home to the largest empire ever documented, the \cfEternal Undying Empire of Novoskhana\c-, with an estimated population of 13 billion, relatively sparse considering its actual physical size, as it covers most of the habitable land of this world.\n\nOnly a small part of the total Anarukon population live in Novoskhana, however. Following general displeasure with the empire's policies and controversial position regarding basic civil rights, various groups have seceded from it, one of the largest being the \cfKurenai Kingdom\c-, initially led by none other than the deity himself, who, as it is told in many stories, decided to sacrifice his godhood in order to save his people from the tyranny of the \cfEternal Empress\c-.\n\nThe Anarukon are known as fierce, unstoppable warriors, due to their rapid healing and total immortality, able even to put themselves back together after being decapitated. It is said that once the Empire has set its sights on the conquest of some land, the wisest choice is to immediately surrender, as fighting them will only result in the most painful of deaths, in a completely one-sided battle.\n\nMany people of this race can be found on Earth, a fact that was mostly kept well hidden until humanity's first contact with other species following the \cfLuna Event\c- of 2021. Furthermore, other information later surfaced, concerning the involvement between the Kurenai Kingdom and \cfImanaki Corp\c-, as the kingdom's armies were ultimately responsible for the destruction of their headquarters in \cfKereshnovka\c- in 2009, the so-called \cfHellbound incident\c- brought upon several weeks after the end of the \cfGhoul hunt\c- of 2007. It's said that ever since that incident, the kingdom had declared humanity to be its enemy, but no attempts to retaliate beyond that specific incident were made afterwards.\n\nAmong the many members of this race inhabiting Earth, one name many would recognize would be that of \cfAshley Knox\c-, lead singer and guitarist of \cfThe Black Rat's Coven\c-. The reveal of not being actually human was received with much surprise, though it was not as spectacular as the fact that two other members of the band were literal gods.\n\n\cxSaya's Notes:\c-\n\cfYeah, really cool stuff about parallel worlds and gods and warriors and shit, ain't it? Stuff like this really makes me wish I could just like... travel all over the multiverse finding neat stuff and meeting cool people, you know. Maybe one day, who knows. All the shit that those fucking UAC idiots have done honestly made me rethink ever getting into interdimensional travel. Seriously, it's like every single damn old story about \"opening a portal to hell\" was just a prediction for that. Anyway, I'm getting a bit sidetracked. So, Ashley-san is one of them, that's neat and all, at least Yu-chan gets to have her own immortal girlfriend, huh. Same for Taro nii-san, having that damn prankster gremlin Ellen-san, also one of these people, of course. When the hell is it going to be my turn? I mean, not that I mind, I'm fine with having Maidbot and Ibuki around, and... I guess you too but... *sigh*, makes me damn jealous, you know.\c-"; SWWM_LORETXT_ANARUKON2 = "\cxName:\c-\n\cf Anarukon (\"Undying\")\c-\n\cxClassification:\c-\n\cf Alien species\c-\n\cxLocation:\c-\n\cf Novoskhana\c-\n\cf Kurukurinishe\c-\n\cf Akkou\c-\n\cf + Various others (including Earth)\c-\n\nThe \cfAnarukon\c- are a race of immortal beings native to a parallel world known as \cfNovoskhana\c-, outside of the bounds of our own Universe. According to their historical records, this world was created by a deity known as \cfNoskas Kurenai\c- (\"Great Father of Eternity\" in their tongue), over 50,000 years ago. Novoskhana is also home to the largest empire ever documented, the \cfEternal Undying Empire of Novoskhana\c-, with an estimated population of 13 billion, relatively sparse considering its actual physical size, as it covers most of the habitable land of this world.\n\nOnly a small part of the total Anarukon population live in Novoskhana, however. Following general displeasure with the empire's policies and controversial position regarding basic civil rights, various groups have seceded from it, one of the largest being the \cfKurenai Kingdom\c-, initially led by none other than the deity himself, who, as it is told in many stories, decided to sacrifice his godhood in order to save his people from the tyranny of the \cfEternal Empress\c-.\n\nThe Anarukon are known as fierce, unstoppable warriors, due to their rapid healing and total immortality, able even to put themselves back together after being decapitated. It is said that once the Empire has set its sights on the conquest of some land, the wisest choice is to immediately surrender, as fighting them will only result in the most painful of deaths, in a completely one-sided battle.\n\nMany people of this race can be found on Earth, a fact that was mostly kept well hidden until humanity's first contact with other species following the \cfLuna Event\c- of 2021. Furthermore, other information later surfaced, concerning the involvement between the Kurenai Kingdom and \cfImanaki Corp\c-, as the kingdom's armies were ultimately responsible for the destruction of their headquarters in \cfKereshnovka\c- in 2009, the so-called \cfHellbound incident\c- brought upon several weeks after the end of the \cfGhoul hunt\c- of 2007. It's said that ever since that incident, the kingdom had declared humanity to be its enemy, but no attempts to retaliate beyond that specific incident were made afterwards. This cold hostility lasted until 2171, when \cfSaya Miyamoto\c- married \cfKirin Xanai\c-, leader of their main ally, the \cfSykhai Empire of Akkou\c-, and then befriended \cfQueen Andreki Anderken\c-, current lead of the Kurenai Kingdom.\n\nAmong the many members of this race inhabiting Earth, one name many would recognize would be that of \cfAshley Knox\c-, lead singer and guitarist of \cfThe Black Rat's Coven\c-. The reveal of not being actually human was received with much surprise, though it was not as spectacular as the fact that two other members of the band were literal gods.\n\n\cxSaya's Notes:\c-\n\cfYou know what? I have to say it, I REALLY have to.\c-\n\n\cg♥\c- \caI LOVE YOU KIRIN-KUN!\c- \cg♥\c-\n\n\cfHuhu... seriously. Still can't believe that stuff actually happened. I wished and wished to get my own Anarukon cutie, just like Taro nii-san had Ellen and Yu-chan had Ashley, and bam! There it was. And of course I have to thank Ashley-san for the fucking ultimate blessing, too. Like, as soon as I tell her about the Akari Project she jumps and goes all \"I know of a place you can visit\", and yeah... that's how I met the cute boy. I already told you all this, but hell, I need to write it down here too, just as a reminder. Ain't he the cutest? I remember how much you and Meido were blushing when you first met him. That was so adorable, the sweetest thing, even more than those \"milk breads\" they had at the banquet (good shit btw). And now the four of us are married to him, and life is good.\c-\n\n\cfOh yeah, also meeting that girl, Andreki, that was the biggest embarrassment in my whole fucking life, I swear to fuck. Like, picture this, I'm told to wait up for someone who wants to have a talk with me in private, and... this... fucking... sassy lost child just approaches me, tiny girl, acting all high and mighty, saying stuff like \"I am someone very important\" and \"you should know who I am, Lady Saya\" and I'm like \"sorry kid, I'm waiting for someone here, can't play with you\", and then she fucking EXPLODES at me going all \"HOW DARE YOU\" and \"I AM MUCH OLDER THAN YOU\" and shit, and yeah... I went into full \"thousand apologies\" mode, just slamming onto the floor and everything. Kirin had to run up to us to explain things and get her to calm down because I was just... unable to do anything. Holy fuck, that... At least we got to be friends later, but... at the moment I felt like I had turned myself into the mortal enemy of a whole fucking kingdom.\c-"; +SWWM_LORETAG_QUARTZFLASK = "Quartz Flask"; +SWWM_LORETAB_QUARTZFLASK = "Item"; +SWWM_LOREREL_QUARTZFLASK = "Parthoris"; +SWWM_LORETXT_QUARTZFLASK = "\cxDesignation:\c-\n\cf Quartz Flask\n\cxClassification:\c-\n\cf Healing Potion\c-\n\cxOrigin:\c-\n\cf Parthoris\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; +SWWM_LORETAG_MOTHPLUSHY = "Moth Plushy"; +SWWM_LORETAB_MOTHPLUSHY = "Item"; +SWWM_LOREREL_MOTHPLUSHY = "MothLamp;Saya"; +SWWM_LORETXT_MOTHPLUSHY = "\cxDesignation:\c-\n\cf Mashiro the Moth Girl Plush\c-\n\cxManufacturer:\c-\n\cf Nukritas 2xx\c-\n\cxClassification:\c-\n\cf Plush Doll\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_RAGEKIT = "Ragekit"; SWWM_LORETAB_RAGEKIT = "Item"; SWWM_LOREREL_RAGEKIT = "AkariLabs;Demolitionist;Saya;DecadeMech"; @@ -281,42 +349,86 @@ SWWM_LORETAB_AKARILABS = "People"; SWWM_LOREREL_AKARILABS = "Saya;Taro;Maidbot;Ibuki;WhiteScar;Demolitionist;Mixom;Doomguy"; SWWM_LORETXT_AKARILABS = "\cxName:\c-\n\cf Akari Labs\c-\n\cxClassification:\c-\n\cf Scientific Research Laboratory\c-\n\cf Robotics Factory\c-\n\cf Adoption Service\c-\n\cxLocation:\c-\n\cf Kasukabe, Saitama Prefecture, Japan\c-\n\cxWebsite:\c-\n\cf https://akarilabs.jp\c-\n\n\cfAkari Labs\c-, known popularly as \cfThe Fountain of Innovation\c-, is a R&D company from Kasukabe, Japan, mainly known for their work in the field of robotics. It is one of the largest companies in the country, overshadowed only by other tech giants such as \cfMixom\c-.\n\nThe company was founded in 2010 by \cfSaya Miyamoto\c- and \cfTaro Miyamoto\c-, beginning its days as a small workshop in their garage. Over time, the rise in popularity of their ingenious inventions led to further expansion, and more people coming in to join them. As of 2148, there are around 170 employees, some coming from quite far away, too. Although the main headquarters are large enough to house most of them, some do work remotely, due to varying circumstances.\n\nAmong its many creations, the \cfMaidbots\c-, first introduced in 2017, are the most well known. Life-like humanoid assistant robots that can be freely adopted by any household. Each and every unit has their own unique personality and preferences, and despite their robotic appearance, are very much no different from a real person, having the same rights and being subject to the same laws as one. All Maidbots are trained from birth on all sorts of tasks, from common housework to first aid or even self-defense techniques. Although most are adopted to assist with housework and not much else, there have been many cases of customers dating or even marrying them. The labs' official stance on this is that there is \"nothing wrong\" with such a thing, but one must not forget that despite the fact Maidbots are \"fully equipped for intimate acts\", they cannot bear children.\n\nDuring the \cf2020 Tokyo Olympics\c-, Saya's own personal Maidbot was appointed to sing the national anthem. Her voice captivated millions, and kickstarted her career as an idol.\n\nIn 2074, during the beginnings of \cfWorld War 3\c-, the labs faced some controversy after Saya Miyamoto personally accepted a 40 billion dollar contract from the US military, requesting her services for a classified supersoldier program. She had previously shown interest in delving into bioengineering, and even hinted at the possibility of Akari Labs entering the augmentation market, but once she was approached by them, there was only radio silence for three years. Afterwards, \cfIbuki\c-, the \cfRed Oni\c-, was publicly revealed. Saya's creation proved to be quite effective in combat, despite her odd physical characteristics (most likely arising from her own personal tastes), but despite her success in pushing back the invading forces, there was nothing she could do to prevent the \cfWhite Scar\c-. Following her retrieval from the scorched wastelands several years later, Ibuki redid her life, ultimately becoming a world-famous supermodel due to her rather attractive physique.\n\nFollowing the end of the war, Akari Labs did begin delving into biomechanical enhancements, which helped keep them afloat after the loss of all of their US-based financial backers, at least until the final reformation of the country as the \cfUnion States\c- in 2137.\n\nWhen the incident on the UAC's installations on Mars and its moons was made public, Saya immediately stepped up not just to personally insult CEO \cfIan Kelliher\c- for his company's failures once again, but to also announce that should the invasion they brought upon themselves reach Earth, she would personally \"build the ultimate fighting robot to kick their asses\". As predicted, demon armies from Hell began coming from portals opening near UAC-owned installations all around the world, and then, as promised, Saya deployed her ultimate weapon, the \cfDemolitionist\c-."; SWWM_LORETXT_AKARILABS2 = "\cxName:\c-\n\cf Akari Labs\c-\n\cxClassification:\c-\n\cf Scientific Research Laboratory\c-\n\cf Robotics Factory\c-\n\cf Adoption Service\c-\n\cxLocation:\c-\n\cf Kasukabe, Saitama Prefecture, Japan\c-\n\cxWebsite:\c-\n\cf https://akarilabs.jp\c-\n\n\cfAkari Labs\c-, known popularly as \cfThe Fountain of Innovation\c-, is a R&D company from Kasukabe, Japan, mainly known for their work in the field of robotics. It is one of the largest companies in the country, overshadowed only by other tech giants such as \cfMixom\c-.\n\nThe company was founded in 2010 by \cfSaya Miyamoto\c- and \cfTaro Miyamoto\c-, beginning its days as a small workshop in their garage. Over time, the rise in popularity of their ingenious inventions led to further expansion, and more people coming in to join them. As of 2148, there are around 170 employees, some coming from quite far away, too. Although the main headquarters are large enough to house most of them, some do work remotely, due to varying circumstances.\n\nAmong its many creations, the \cfMaidbots\c-, first introduced in 2017, are the most well known. Life-like humanoid assistant robots that can be freely adopted by any household. Each and every unit has their own unique personality and preferences, and despite their robotic appearance, are very much no different from a real person, having the same rights and being subject to the same laws as one. All Maidbots are trained from birth on all sorts of tasks, from common housework to first aid or even self-defense techniques. Although most are adopted to assist with housework and not much else, there have been many cases of customers dating or even marrying them. The labs' official stance on this is that there is \"nothing wrong\" with such a thing, but one must not forget that despite the fact Maidbots are \"fully equipped for intimate acts\", they cannot bear children.\n\nDuring the \cf2020 Tokyo Olympics\c-, Saya's own personal Maidbot was appointed to sing the national anthem. Her voice captivated millions, and kickstarted her career as an idol.\n\nIn 2074, during the beginnings of \cfWorld War 3\c-, the labs faced some controversy after Saya Miyamoto personally accepted a 40 billion dollar contract from the US military, requesting her services for a classified supersoldier program. She had previously shown interest in delving into bioengineering, and even hinted at the possibility of Akari Labs entering the augmentation market, but once she was approached by them, there was only radio silence for three years. Afterwards, \cfIbuki\c-, the \cfRed Oni\c-, was publicly revealed. Saya's creation proved to be quite effective in combat, despite her odd physical characteristics (most likely arising from her own personal tastes), but despite her success in pushing back the invading forces, there was nothing she could do to prevent the \cfWhite Scar\c-. Following her retrieval from the scorched wastelands several years later, Ibuki redid her life, ultimately becoming a world-famous supermodel due to her rather attractive physique.\n\nFollowing the end of the war, Akari Labs did begin delving into biomechanical enhancements, which helped keep them afloat after the loss of all of their US-based financial backers, at least until the final reformation of the country as the \cfUnion States\c- in 2137.\n\nWhen the incident on the UAC's installations on Mars and its moons was made public, Saya immediately stepped up not just to personally insult CEO \cfIan Kelliher\c- for his company's failures once again, but to also announce that should the invasion they brought upon themselves reach Earth, she would personally \"build the ultimate fighting robot to kick their asses\". As predicted, demon armies from Hell began coming from portals opening near UAC-owned installations all around the world, and then, as promised, Saya deployed her ultimate weapon, the \cfDemolitionist\c-.\n\nThe Demolitionist proved quite effective in combatting the demons, much more than the UAC's own forces were, or their so-called \"problem solver\", the \cfDoom Marine\c-. The Demolitionist was awarded for their impressive act of heroism, having not just completely suppressed the invasion and personally defeated the leader of the demon armies, but also assisted with the evacuation of thousands of survivors.\n\nThe success of the Demolitionist project also further boosted the position of Akari Labs, who, in a mockery of the UAC, announced the involvement in their own personal \"Demon Free\" teleportation technology, known by the codename of \cfAkari Project\c-, named after the sci-fi novel about interdimensional travel that Saya had written in the early 2020's."; +SWWM_LORETAG_EYEOBELISK = "Eye Obelisk"; +SWWM_LORETAB_EYEOBELISK = "Item"; +SWWM_LOREREL_EYEOBELISK = "Parthoris;EngineTech;Saya"; +SWWM_LORETXT_EYEOBELISK = "\cxDesignation:\c-\n\cf Obelisk of the Golden Vale\c-\n\cxClassification:\c-\n\cf Magic Artifact\c-\n\cxOrigin:\c-\n\cf Unknown\c-\n\nUnearthed from the crystal mines of the \cfGolden Vale\c- in the far ends of \cfParthoris\c-, this odd artifact of unknown creator hovers about, waiting for a hand to touch it. Those who have had it on their grasp recall being assaulted by rapidly flashing images, said to be vague glimpses into a grim future. What is shown seems to vary depending on the observer.\n\nFollowing a first discovery, more were later found, deeper into the caverns. Of those, one is in the hands of the \cfTach-Engine Technology Institute\c-, who are currently studying it, in order to ascertain its true nature.\n\n\cxSaya's Notes:\c-\n\cfI puked out my guts when I touched that fucking thing. No, seriously, what even WAS that. I saw all sorts of fucked up shit, straight out of my nightmares, and also people I didn't recognize, in really weird places. Also the screaming, holy fuck the screaming. I can still hear it, even though this was like... days ago.\c-\n\n\cfAnyway, if you're reading this that means you got it out of one of those two's damn \"chanceboxes\". Well, whatever you saw will be neatly recorded in your brain, so we can easily extract it and analyze it later, which is pretty neat. Just... I hope it didn't give you too hard of a scare. You'll get ALL the hugs when the mission's over, I promise.\c-"; SWWM_LORETAG_WHITESCAR = "The White Scar"; SWWM_LORETAB_WHITESCAR = "Lore"; SWWM_LOREREL_WHITESCAR = "Nukuri;NosKora;Saya;Zanaveth2"; SWWM_LORETXT_WHITESCAR = "\cxName:\c-\n\cf The White Scar\c-\n\cxClassification:\c-\n\cf Interplanetary Conflict\c-\n\cxTimeframe:\c-\n\cf 2073-2077\c-\n\nIn June of 2073, the \cfNukuri Seventh World War\c- began. It was one more attempt by the \cfNahkami Liberation Front\c- to put an end to the oppressive rule of the \cfYathai Empire\c-, this time expected to be their final. When the news of this conflict reached Earth, \cfPresident Dick Richardson\c- of the \cfUnited States\c- made some rather noxious comments on social media directed at \cfLedora Yathai\c-, head of the Nukuri empire. As expected, they were not very well received, and an escalation of insults ensued. Many Nukuri who had settled on Earth fled in protest, as the ball kept rolling. At its boiling point, the Nukuri emperor, fed up with all this, officially declared war on the United States, ready to launch a direct attack as \"punishment for their insolent attitude\". Ground units were deployed in September of 2074, and thus the war began.\n\nThere were many losses on both sides, including civilians, in a chaotic confrontation between people who, not long before, had been peacefully allied for half a century. In three years, the vastly superior Nukuri armies neutralized all opposition, and set their sights on the very heart of the country. Wishing to \"slay the beast from within\", a small team managed to locate and capture the president. He was given one last choice, right there and then. He could either surrender and publicly apologize for his affront to the empire, or he could refuse, and watch as the \cfEmperor's Wrath\c- falls down upon him.\n\nHe chose the latter option, and what followed was nothing short of unimaginably despicable and cruel. All Nukuri forces retreated, and they evacuated any remaining civilian Nukuri who still remained. Then, in an instant, a succession of blinding flashes of scorching light reduced the whole United States territory to ashes, coming from the experimental orbital weapon the empire had built many years prior. It was its very first test fire, and the actual scale and effects of it were not yet known. Some say that the apocalyptic effects it had were not truly intended, that the plan was not to put an end to all life, but rather only cause destruction on a more \"technical\" level, inutilizing all electronic devices and machinery. Suffice to say, when the lead designer of this weapon, \cfZanaveth Nekuraku I\c-, saw what had happened, he suffered a severe mental breakdown, and disappeared from the public eye for many years.\n\nWith this attack, the flames of the war against the empire only got stronger. In addition, all the remaining Nukuri on Earth were forced to leave, and with the exception of only two countries, the \cfWhite Scar Treaty\c- was signed, putting an end to half a century of Nukuri contributions to the evolution of our science and technology. Those who had signed had to reject anything made by them, and no longer make any contact with any member of their species. In addition, they were no longer allowed to remain on their Moon colony either, forcing the \cfLuna Research Institute\c- to close its doors after almost four thousand years.\n\nEveryone wanted the emperor's head. Not only had it been a major mistake for humanity to have enraged him, but it had been an even bigger mistake from HIS part to have used that weapon. 30 years into the chaotic seventh war, a member of the Nekuraku family notified one very specific group of what had happened: The \cfUniversity of Nos-Kora\c-. Serving as the embassy of the ancient \cfMishe\c- race, the University had always stayed neutral to the various internal conflicts among the Nukuri, but this time, they stepped in. What the emperor had done, in the eyes of the founding \cfNukritas Brothers\c-, was unforgivable. It was described by them as \"the second most disappointing display of heartless destruction\" they had ever witnessed.\n\n\cfNukritas 1xx\c- would then, by himself, walk all the way down from the northernmost region of Akane to the imperial capital in Vutaki. His advance could not be stopped, he shrugged off any attempts by imperial soldiers, he destroyed their weapons merely by looking at them. Once he reached the imperial palace, he kicked the doors open and made his way to the throne, there, emperor Ledora Yathai, frozen in terror, received a single punch across the gut from the Mishe ambassador, and was sent flying in a straight line out the window, reaching such a velocity that he completely vanished into the void of space. Then, the University made their announcement, the \cfNos-Kora Ultimatum\c-. The Nukuri race was given eight years to resolve their conflicts and make peace. Should they have failed to do so, the University would close its doors forever, and the Mishe would formally leave the \cfX'Animen Coalition\c-, taking their valuable knowledge with them.\n\nThis threat was taken very seriously, as the Mishe were one of the most important members of this interplanetary alliance, and so a massive reform followed. Both sides were now united in their mission to rebuild Nahkami in its entirety as a new nation. In 2108, only halfway through the time limit they had set, the \cfNukuri Unified Government\c- was finally established, with \cfZanata Nekuraku II\c- as \"transitional\" prime minister. Following this, an attempt was made to reestablish relations with Earth, but it was useless, they were completely ignored, save for the two countries who had not signed the treaty: Scotland and Japan.\n\nThese two countries were host to powerful corporations that had been long time partners of Zanata's own company, \cfNekuratek\c-, and were fully aware of the truth of the situation, hence why they had refused to break bonds with them. Of note regarding this were various statements on social media from \cfSaya Miyamoto\c-, head of the Japanese \cfAkari Labs\c-, condemning all those who had signed the treaty for their \"gross generalization\" in seeing the entirety of the Nukuri as an enemy.\n\nNo further attempts have been made ever since to try once again to reestablish the former alliance, not even during many major events that would threaten Earth once again, where they would have gladly come to our aid as they had done in the \cfLuna Event\c- of 2021. Earth was, in addition, barred from the possibility of entering the X'Animen Coalition due to this fierce opposition.\n\n\cxSaya's Notes:\c-\n\cfLo and behold, here it be, the darkest moment in human history (to date). Seriously, it fucks me up thinking again about what had happened, it was some awful shit. Like, not just the whole fucking burnination of an entire country, but also what was going down on the other side too, all the stuff Zana-sama told me about.\c-\n\n\cfI mean, sure, from this one can guess that the Nukuri were anything but peaceful, but that's not even half of it. The empire, the fucking empire, it was all the goddamn stinking bitch-ass piece of shit empire. Fucking, megalomaniacal evil-ass genocidal shithead emperor running the show, doing whatever the fuck he wanted. All those wars, it was all people who wanted him gone, and he'd crush them, over and over, with no remorse. He ran the place, and he could do whatever he wanted to them, like the ugly bastard he was. Yeah, I heard all of it. The mass executions, going as far as to bringing not one, but TWO whole races to extinction, yeah, THAT was sure fucked up. Oh but what about, torturing and massacring people who were seen as \"traitors\" and \"deviants\", huh? Yeah, that shit too. Zana-sama lost a lot of her family because of that. Ugh, I swear, one day I'm going to nail down where that bastard was yeeted to, just so I can kick him into paste. I'll obviously start with the balls, for sure, that one's for the other thing he did, which I'm not going to talk about here because I mean, holy fuck, this got dark (and it gets even darker). I have GOOD reasons to hate someone as fucking disgustingly vile as this motherfucker, hell, \"motherfucker\" is not even close there, considering what he did. Yeah, I think you get the hint now, do you? I bet you'd want to get your hands on him too. God damn if only those crazy guys hadn't yeeted him into space...\c-"; +SWWM_LORETAG_QUADRAVOL = "Quadravol"; +SWWM_LORETAB_QUADRAVOL = "Item"; +SWWM_LOREREL_QUADRAVOL = "Kmonn;Xekke"; +SWWM_LORETXT_QUADRAVOL = "\cxDesignation:\c-\n\cf Quadravol (\"Ardent Cross\")\c-\n\cxManufacturer:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClassification:\c-\n\cf Igneous Projectile Launcher\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; +SWWM_LORETAG_PUNTZERBETA = "Puntzer Beta"; +SWWM_LORETAB_PUNTZERBETA = "Item"; +SWWM_LOREREL_PUNTZERBETA = "Blackmann"; +SWWM_LORETXT_PUNTZERBETA = "\cxDesignation:\c-\n\cf Puntzer \"Beta\" Revolver\c-\n\cxManufacturer:\c-\n\cf Blackmann Arms Ltd.\c-\n\cxClassification:\c-\n\cf Break-Action Revolver\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_WARARMOR = "War Armor"; SWWM_LORETAB_WARARMOR = "Item"; SWWM_LOREREL_WARARMOR = "Unissix;Devanikna;Cyrus"; SWWM_LORETXT_WARARMOR = "\cxDesignation:\c-\n\cf War Armor\c-\n\cxManufacturer:\c-\n\cf Unissix Crafts\c-\n\cxClassification:\c-\n\cf Body Armor\c-\n\nA very robust and durable plate armor made of the finest almasteel in \cfDevanikna\c-. Part of the standard lineup from \cfUnissix Crafts\c-, designed for the skilled adventurer who needs decent protection from the attacks of mighty beasts. It is also imbued with defensive magic that enhances elemental resistances on the wearer. Generally, this chestpiece is also distributed along with other parts comprising a full armor set, but it's not like you can wear all of them, with the body type you have.\n\n\cxAnalysis data:\c-\nThis piece of armor offers a massive reduction to incoming damage of basic elemental nature (i.e.: heat, cold, electricity, etc.), the factor being of 80%. In addition, the plating itself offers a 50% reduction to damages of other natures, plus a 70% absorption of explosive impacts. The total absorption amounts to 250 units of damage before it's entirely worn out. Due to its size, it can easily be worn over lighter armors.\n\n\cxSaya's Notes:\c-\n\cfNerdboi and his \"armor analysis\" once again. This guy, seriously... Life isn't a goddamn videogame, so please PLEASE stop talking in terms like \"damage units\" and \"reduction factors\".\c-\n\n\cfAaaaanyway, Misa makes some pretty nifty stuff. I feel that it's a bit redundant that you're wearing armor made of the same stuff as your chassis. I mean, a robot wearing armor... yeah, why not? Protection is always important, huhu...\c-"; +SWWM_LORETAG_RAYKHOM = "Ray-Khom"; +SWWM_LORETAB_RAYKHOM = "Item"; +SWWM_LOREREL_RAYKHOM = "Kmonn;Xekke"; +SWWM_LORETXT_RAYKHOM = "\cxDesignation:\c-\n\cf Ray-Khom (\"Plasma Gun\")\c-\n\cxManufacturer:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxClassification:\c-\n\cf High-Reactive Plasma Coilgun\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; +SWWM_LORETAG_NUTATCOBAR = "NUTATCO Choco Bar"; +SWWM_LORETAB_NUTATCOBAR = "Item"; +SWWM_LOREREL_NUTATCOBAR = ""; +SWWM_LORETXT_NUTATCOBAR = "\cxDesignation:\c-\n\cf NUTATCO™ Chocolate Bar\c-\n\cxManufacturer:\c-\n\cf Vestal Foods Inc.\c-\n\cxClassification:\c-\n\cf Peanut & Caramel Chocolate Bar\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_GENSOKYO = "Gensokyo"; SWWM_LORETAB_GENSOKYO = "Lore"; SWWM_LOREREL_GENSOKYO = "Saya;Ashley"; SWWM_LORETXT_GENSOKYO = "\cxName:\c-\n\cf Gensokyo\c-\n\cxClassification:\c-\n\cf Isolated Enclave\c-\n\cxLocation:\c-\n\cf Japan\c-\n\n\cfGensokyo\c- is an isolated pocket of space located somewhere in Japan, which has remained completely hidden from the outside world to this day, much like other spaces of the same nature such as the town of \cfKereshnovka\c- in Siberia, \cfNeissvilla\c- in Eastern Europe, or \cfEureka\c- in America. Most of the information we have related to this land came from the research of a young student named \cfSumireko Usami\c-, who had managed to find a way to pass through its barrier safely.\n\nThe land of Gensokyo does not have a clear political structure, although it appears that there are some individuals who hold some power over what goes on in it, known as the \cfSages of Gensokyo\c-. One potential reason for the fact this place is isolated from the rest of the world may be for the protection of the rest of the world from the creatures that inhabit it.\n\nMany attempts have been made to communicate with them following the initial research, with no successes to this day but one sole exception: The \cfMiyamoto family\c-, who initially came from that land, then migrated outside. As reported by \cfSaya Miyamoto\c- on social media, the family often travels across the barrier, in order to visit their distant relative, \cfPrincess Kaguya Houraisan\c-. Following these reports, many have tried to approach members of the Miyamoto family to ask for further information, but they have refused to talk about the subject.\n\n\cxSaya's Notes:\c-\n\cfBoy, people sure are interested in that place, huh? But they just won't fucking understand, that things have to stay like this. Those are the rules, or some shit. Can't have both worlds mixing up together or whatever, it's what that old hag told me once. Yeah, the one that doesn't act her age and goes around with a buncha cosplayers. I'm pretty sure she's related to Ashley-san in some way, they've got the same exact eyes. But like hell am I going to go and ask her, the way she acts around me creeps me out.\c-"; SWWM_LORETAG_DEVANIKNA = "Devanikna"; SWWM_LORETAB_DEVANIKNA = "Lore"; -SWWM_LOREREL_DEVANIKNA = "Unissix;Saya;XAnimen"; -SWWM_LORETXT_DEVANIKNA = "\cxName:\c-\n\cf Devanikna\c-\n\cxClassification:\c-\n\cf Land of warriors\c-\n\cxLocation:\c-\n\cf Ixxeney, Xathar system, X'Animen Coalition\c-\n\n\cfDevanikna\c- is one of the two major nations of \cfIxxeney\c-, the largest planet in the \cfXathar system\c-. It is home to a humanoid race known as the \cfDevanikan\c-, fierce warriors who legends say were brought upon this world by an entity known as the \cfAncestor Dragon\c-, which they worship as their god. In their tongue, the name of \"Devanikan\" means \"Dragonblood\".\n\nDevanikan society is mainly divided in several clans, many of them dating back thousands of years. Currently, the \cfUnissix clan\c- holds the leadership of the whole nation, having been unanimously chosen by the rest of the population following their defeat of the crazed \cfLord Ni'Kai\c-, of the rival \cfDevenko clan\c-, who had previously taken over by force and instated a totalitarian government.\n\nOne of the most notable aspects of the Devanikan race is that fully trained warriors have the ability to transform themselves into dragons. This transformation is entirely magical in nature, as their dragon forms appear to be projections, rather than fully physical bodies. Once in this form, their strength is greatly boosted, and they become more potent conduits for spellcasting, thus giving them the upper hand in most fights. It is, however, quite straining to their bodies, so it's something they only use in exceptional cases.\n\nThe land of Devanikna itself is divided in several cities, most covering the broad forest areas surrounding the Noxan sea, where the capital city of \cfDekhasa\c- is located. The capital is a very popular tourist spot due to its particular geography: massive spires of rock springing forth from the depths, often reaching up to 11 kilometers above sea level. The Devanikan built their homes along the walls of these spires, and pride themselves in the quite impressive durability and stability of their architectural work.\n\nAmong the many clans, there are quite a number of \"heroes of legend\" documented. Warriors whose feats are known and praised by all. Of note are people such as \cfDeva Unissix\c-, son of the clan's founding father, and the one who led his comrades in battle against Ni'Kai, or his granddaughter \cfDeneva Unissix\c-, who singlehandedly defeated the mighty golem \cfMero The Destructor\c-, who for centuries had spread terror across Ixxeney, having even been seen as unbeatable by the powerful titans of the neighbouring nation of \cfXekke\c-.\n\nLesser known facts about the Devanikan include their strong defense of racial purity. When princess \cfDevai Unissix\c-, current head of the clan, announced her marriage to \cfSerwand Nerukousei\c-, a chimera constructed by a wandering archwizard, he started receiving threats from the population, calling him a \"beast in man's form\" and accusing him of corrupting the Unissix bloodline as a means to take control of their nation. These threats extended towards their own children too, who were denoted as \"crossbred abominations\" of mixed Devanikan and chimeric blood. It wasn't until Deneva's first major achievements as a warrior that the persecution they faced eventually stopped. Ever since then, the hostility they faced has been gradually fading, as newer generations became much more accepting of race mixing.\n\n\cxSaya's Notes:\c-\n\cfYeah, Misa's people are cool af. Well, excluding the whole racism part. That's a load of fucking shit, for sure. I heard from Zana-sama that if she hadn't met Misa back then, she would have probably taken her own life from all of that she went through. Fuck... But at least, she's living happily with Zana-sama (lucky devil), and yeah, things are getting better in there now at least.\c-\n\n\cfYou know, all this stuff, it reminds me of this one old JRPG series I played many many years ago, that was also all about people of dragon blood too... can't even remember what it was called, though. Heck, I even had Misa play it once and she kept talking about all the parallels and shit. Oh well, cool dragon warriors, fuck yeah.\c-"; +SWWM_LOREREL_DEVANIKNA = "Unissix;Saya;XAnimen;Xekke;Zanaveth2"; +SWWM_LORETXT_DEVANIKNA = "\cxName:\c-\n\cf Devanikna\c-\n\cxClassification:\c-\n\cf Land of warriors\c-\n\cxLocation:\c-\n\cf Ixxeney, Zenna system, X'Animen Coalition\c-\n\n\cfDevanikna\c- is one of the two major nations of \cfIxxeney\c-, the largest planet in the \cfZenna system\c-. It is home to a humanoid race known as the \cfDevanikan\c-, fierce warriors who legends say were brought upon this world by an entity known as the \cfAncestor Dragon\c-, which they worship as their god. In their tongue, the name of \"Devanikan\" means \"Dragonblood\".\n\nDevanikan society is mainly divided in several clans, many of them dating back thousands of years. Currently, the \cfUnissix clan\c- holds the leadership of the whole nation, having been unanimously chosen by the rest of the population following their defeat of the crazed \cfLord Ni'Kai\c-, of the rival \cfDevenko clan\c-, who had previously taken over by force and instated a totalitarian government.\n\nOne of the most notable aspects of the Devanikan race is that fully trained warriors have the ability to transform themselves into dragons. This transformation is entirely magical in nature, as their dragon forms appear to be projections, rather than fully physical bodies. Once in this form, their strength is greatly boosted, and they become more potent conduits for spellcasting, thus giving them the upper hand in most fights. It is, however, quite straining to their bodies, so it's something they only use in exceptional cases.\n\nThe land of Devanikna itself is divided in several cities, most covering the broad forest areas surrounding the Noxan sea, where the capital city of \cfDekhasa\c- is located. The capital is a very popular tourist spot due to its particular geography: massive spires of rock springing forth from the depths, often reaching up to 11 kilometers above sea level. The Devanikan built their homes along the walls of these spires, and pride themselves in the quite impressive durability and stability of their architectural work.\n\nAmong the many clans, there are quite a number of \"heroes of legend\" documented. Warriors whose feats are known and praised by all. Of note are people such as \cfDeva Unissix\c-, son of the clan's founding father, and the one who led his comrades in battle against Ni'Kai, or his granddaughter \cfDeneva Unissix\c-, who singlehandedly defeated the mighty golem \cfMero The Destructor\c-, who for centuries had spread terror across Ixxeney, having even been seen as unbeatable by the powerful titans of the neighbouring nation of \cfXekke\c-.\n\nLesser known facts about the Devanikan include their strong defense of racial purity. When princess \cfDevai Unissix\c-, current head of the clan, announced her marriage to \cfSerwand Nerukousei\c-, a chimera constructed by a wandering archwizard, he started receiving threats from the population, calling him a \"beast in man's form\" and accusing him of corrupting the Unissix bloodline as a means to take control of their nation. These threats extended towards their own children too, who were denoted as \"crossbred abominations\" of mixed Devanikan and chimeric blood. It wasn't until Deneva's first major achievements as a warrior that the persecution they faced eventually stopped. Ever since then, the hostility they faced has been gradually fading, as newer generations became much more accepting of race mixing.\n\n\cxSaya's Notes:\c-\n\cfYeah, Misa's people are cool af. Well, excluding the whole racism part. That's a load of fucking shit, for sure. I heard from Zana-sama that if she hadn't met Misa back then, she would have probably taken her own life from all of that she went through. Fuck... But at least, she's living happily with Zana-sama (lucky devil), and yeah, things are getting better in there now at least.\c-\n\n\cfYou know, all this stuff, it reminds me of this one old JRPG series I played many many years ago, that was also all about people of dragon blood too... can't even remember what it was called, though. Heck, I even had Misa play it once and she kept talking about all the parallels and shit. Oh well, cool dragon warriors, fuck yeah.\c-"; SWWM_LORETAG_EXPLODIUMGUN = "Explodium Gun"; SWWM_LORETAB_EXPLODIUMGUN = "Item"; SWWM_LOREREL_EXPLODIUMGUN = "Explodium;Munch;Saya;Hammerspace"; SWWM_LORETXT_EXPLODIUMGUN = "\cxDesignation:\c-\n\cf Explodium Gun\c-\n\cxManufacturer:\c-\n\cf Munch Innovations\c-\n\cxClassification:\c-\n\cf \"Pocket Exploder\"\c-\n\nA custom-built semiautomatic handgun designed for proprietary .387 caliber \cfExplodium\c- tipped bullets. One of the crowning achievements of its creator, who had initially only made it as a joke, to later find that thousands of people wanted one. After entering mass production, \cfMunch Innovations\c- became what it is now thanks to the neverending demand for \"pocket exploders\".\n\n\cfPrimary Fire:\c- Steady shooting. A direct hit is often lethal, but the splash damage can deal some fine hurt too. Aim at the feet to send smaller targets flying.\n\n\cfSecondary Fire:\c- Performs what's been commonly named an \"explosive reload\". Each magazine for this weapon has a pin at the bottom, which, when fully pulled, arms it as a grenade, ready to throw at your enemies. The explosive yield of each mag is proportional to the number of bullets left inside. Obviously, this action can only really be performed if you have at least one bullet still left, otherwise nothing will come of it.\n\n\cfReloading:\c- Normal reload, nothing will explode here, as when not armed, the magazines are practically indestructible.\n\n\cfTechniques:\c- If you can get your hands on a second gun, you can switch to a dual-wield mode. In this mode, secondary fire instead shoots the left hand gun.\n\n\cxSaya's Notes:\c-\n\cfThis one's on my main, level three-eighty-seven.\c-\n\n\cfOK I doubt you'll get the reference, but fuck it, I felt like saying it. Anyway, ancient memes aside... I got a deal going with the guy, and you pretty much have an endless supply of ammo for this thing, so feel free to waste away. Just don't be a dummy and put an armed mag back in your Hammerspace, nerdboy will get really fucking pissed if everything blows up, y'know.\c-"; +SWWM_LORETAG_DEMOPLUSH = "Demo Plushie"; +SWWM_LORETAB_DEMOPLUSH = "Item"; +SWWM_LOREREL_DEMOPLUSH = "Demolitionist;NosKora;Saya"; +SWWM_LORETXT_DEMOPLUSH = "\cxDesignation:\c-\n\cf Demolitionist Plushie\c-\n\cxManufacturer:\c-\n\cf Nukritas 2xx\c-\n\cxClassification:\c-\n\cf Plush Doll\c-\n\nA soft and huggable doll of the great hero \cfDemolitionist\c-, savior of Earth, slayer of Demons, exploder of knees. Caringly crafted by \cfNukritas 2xx\c- herself, this plush doll features quite the attention to detail, sporting a self-illuminating face and glowing tags, just like the real thing! (Jetpacks are not functional, however)\n\n\cxSaya's Notes:\c-\n\cfWell look at that, you're getting famous, Demo-chan. Yeah, even abroad, too. Heard those two have been marketing this stuff pretty heavily out there, heh... Bet Zana-sama has one, she'd definitely do, I know she's all about cute cuddly things (like Misa).\c-\n\n\cfBut really... this is so cute, just... wanna squeeze it and kiss it and... God, I hope you finish up this mission soon.\c-"; SWWM_LORETAG_GODS = "Gods"; SWWM_LORETAB_GODS = "Lore"; SWWM_LOREREL_GODS = "Ashley;SUSAN"; SWWM_LORETXT_GODS = "\cxName:\c-\n\cf Gods\c-\n\cxClassification:\c-\n\cf Exactly what it says on the tin\c-\n\cxLocation:\c-\n\cf All over the world\c-\n\nFor as long as man was sapient, religion has always been there. Mankind has always wondered if there is one, or many supreme beings who created it all. The answer to this question may not be exactly what they expected. \cfGods\c- are indeed very real, but they aren't exactly the almighty entities one would usually imagine.\n\nThere are countless individuals all over the known Universe and even beyond, who can be classified as \"Gods\". So many, in fact, that there is a high likelyhood that any one person may have come across a god at least once in their lifetime, without realizing it, as in most cases, they are no different from us in appearance. Gods live among us, hidden in plain sight. Some may even decide to form families with mortals, and from this giving birth to \cfDemigods\c-, who inherit their agelessness, but not their complete immortality.\n\nHumanity's first contact with an actual, physical deity had been initially thought to be that of \cfUruk'Anth\c-, who arrived on Earth in late 2097, and claimed to be the \cfAbrahamic God\c- himself. It was however later found out that this was all a lie, and his deceit was part of his plan to take over the planet and its resources for himself. Following the destruction of the \cfSUSAN\c- rogue AI that he had devised, which additionally resulted in his own death, it was made very clear that he was, indeed, not a god at all. Rather, investigations of his cult, the \cfFaculty of Illuminated Nobodies\c-, revealed that his true identity was that of a member of an alien species known as the \cfXevetha\c-, native to the remote world of \cfUrkai\c-, who dedicate themselves to acts of deception like these, in an attempt to obtain \"artificial godhood\".\n\nInstead, the actual first contact had happened far, far sooner than anyone had known. Back in 2006, following the debut of \cfThe Black Rat's Coven\c-, a Gothic Rock band from England, people were introduced to one rather peculiar member of it, \cfMaruku Sarahabinaku\c-, a gigantic, yellow-skinned woman, who even introduced herself as \"Goddess of Madness\", something which was thought as really just some artistic title of sorts, rather than an actual fact. It wasn't until the previously mentioned incident that she was approached for further questioning and, indeed, confirmed that she was indeed a real god, unlike the man who had come to our planet. Furthermore, \cfMykka Psyann\c-, another member of the band, also revealed herself to be a god. No one had even realized this, for many years.\n\n\cxSaya's Notes:\c-\n\cfYeah, mindblowing stuff, ain't it? First, there was the big reveal of aliens being very real, which sure fucking changed things around for everyone, then came this. Most were all \"oh they're super powerful aliens\" or some shit, really not even trying to believe in the possibility that maybe gods actually ARE real too.\c-\n\n\cfCome the fuck on, with all the shit that's going on out there, you're really not going to believe someone's a god even if they get up in your face and say it? Well, there was that one exception, but still... seriously?\c-\n\n\cfI've actually met those two, personally, y'know. My fave's Mykka-sama, she's real cool and fun to be around, and gives me candies whenever I visit. Then we spend the whole day together with her giving me these cool lore dumps about the \"history of everything\" and all that stuff. I don't really understand most of it but it's still amazing. Like, holy fuck, there's all sorts of things out there, the universe... no, the MULTIVERSE is real fucking huge and super complex and stuff, much more than we could ever imagine... Blows my fucking mind, every single time.\c-"; SWWM_LORETAG_KMONN = "Kmonn, Eushura Jr."; SWWM_LORETAB_KMONN = "People"; -SWWM_LOREREL_KMONN = "XAnimen;EngineTech;Gods"; +SWWM_LOREREL_KMONN = "XAnimen;EngineTech;Gods;Xekke"; SWWM_LORETXT_KMONN = "\cxFull Name:\c-\n\cf Eushura Kmonn Jr.\c-\n\cxNationality:\c-\n\cf Xekkian\c-\n\cxDate of Birth:\c-\n\cf 8731 BC\c-\n\n\cfEushura Kmonn Jr.\c-, son of \cfEushura Kmonn Sr.\c-, is a skilled inventor from the \cfKingdom of Xekke\c-, in the planet of \cfIxxeney\c-. From a young age he was raised to achieve the same grand goals as his father, and it wasn't long until he managed to earn his own fame after years of working under him as an assistant. His creativity and imagination knew no bounds, and he's been credited with a grand total of 279 major achievements in the fields of both offensive and defensive military technology, which has helped strengthen the kingdom's forces, making them one of the most trusted and requested across the \cfX'Animen Coalition\c- for allied defense tasks.\n\nAmong some of his most notable creations, there's the \cfRay-Khom\c-, the standard-issue weapon for Xekkian soldiers, the \cfIsonomic Motor\c-, which powers the FTL engines of all coalition ships and the \cfElemental Coating\c-, a semi-magical protection device for use in extreme environments.\n\nAlongside his father, he was one of the many engineers behind the famous \cfK79-D Metareality Driver\c- project. A weapon of legend whose name is well known by many, but none remember what it did, not even those involved in its creation.\n\n\cxSaya's Notes:\c-\n\cfWow this guy is OLD. I know that those peeps live for thousands of years but, wow, that's even more than the old man from Tach-Engine.\c-\n\n\cfOh yeah, the article mentions the K79-D. Real fucking weird shit there. I actually DO know what happened to it, because Maruku-sama told me, since she was present, and is a god and all that. Apparently the weapon tried to directly violate causality during the test fire, so a \"self-preservation mechanism\" of the universe flipped out and it was erased instantly along with all the info on how it was created (even going as far as doing memory wipes, holy fuck).\c-"; +SWWM_LORETAG_ITAMEXHAMMER = "Itamex Hammer"; +SWWM_LORETAB_ITAMEXHAMMER = "Item"; +SWWM_LOREREL_ITAMEXHAMMER = "Symnatek"; +SWWM_LORETXT_ITAMEXHAMMER = "\cxDesignation:\c-\n\cf Itamex Reinforced Combat Hammer\c-\n\cxManufacturer:\c-\n\cf Itamex Military Supplies (a subsidiary of Symnatek)\c-\n\cxClassification:\c-\n\cf Sledgehammer\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; +SWWM_LORETAG_CATCATCHERPOSTER = "Cat Catcher Poster"; +SWWM_LORETAB_CATCATCHERPOSTER = "Item"; +SWWM_LOREREL_CATCATCHERPOSTER = "AkariLabs;Ibuki;Saya"; +SWWM_LORETXT_CATCATCHERPOSTER = "\cxTitle:\c-\n\cf Cat Catcher\c-\n\cxDeveloper:\c-\n\cf MADCAT Danae\c-\n\cxGenre:\c-\n\cf Arcade\c-\n\cxPlatforms:\c-\n\cf Mobile, PC\c-\n\n\cfCat Catcher\c- puts you in the shoes of a nameless hunter of furry critters. Your objective: Catch all the cats! Big ones, small ones, of all breeds ever known and more! Endless fun guaranteed as you hunt down all the cute cats for your collection. Cat Catcher, catch those cats!\n\n\cxSaya's Notes:\c-\n\cfMan, if there's someone out there crazier about cats than Danae-san I'd love to know, because HOLY FUCK is she the craziest cat lady I've ever seen, on top of being an irl catgirl herself (well, a nekomata, kinda the same thing tbh).\c-\n\n\cfI was really impressed by the whole thing when I first saw it, so well polished and all, and when it got open sourced, one look at the code and I was already spamming her with job offers through all forms of contact I could find. Ye, she works here at the labs, mostly in frontend stuff, though on the side she's working on another game. Hasn't told us anything yet about what it'll be about, gonna be a big surprise she says.\c-\n\n\cfSpeaking of big surprises, the damn lucky bastard ended up on Ibuki's sights and is now one of her girlfriends. I tried to hit on her too and she went at me all \"I like them big and squishy, boss\". If you want to call me flat you can just do it, geez!\c-"; SWWM_LORETAG_CRONOS = "Cronos"; SWWM_LORETAB_CRONOS = "Lore"; SWWM_LOREREL_CRONOS = "SerpentRiders;Saya;Ashley;Parthoris"; SWWM_LORETXT_CRONOS = "\cxName:\c-\n\cf Cronos\c-\n\cxClassification:\c-\n\cf Cluster of interconnected pocket worlds\c-\n\n\cfCronos\c- is a distant small universe composed of small, self-contained worlds, which are all connected together by quantum gates the locals call \cfEthereal Portals\c-. Historical research says that all these small worlds were once part of a much larger whole, but some unknown \"great cataclysm\" happened thousands of years ago, shattering this world and scattering its many fragments, which could only be rejoined through these portals, the creations of a group of powerful sorcerers known as the \cfFour Sages\c-. Of all of them, currently only the \cfSage of Winter\c- remains, and it's said that once he too passes on, the Ethereal Portals will fade away forever, leaving the many lands of Cronos isolated for all of eternity.\n\nWithin this land, there are three major factions at work, the \cfLegion\c-, the \cfArcanum\c-, and the \cfChurch\c- (really just named that). Once constantly fighting among themselves, they are now all under the control of \cfKorax\c-, the second of the \cfSerpent Riders\c-, and were given enhanced power by him. You may have to take on them and their leaders before you can face the Rider himself pulling the strings, but from your experience in previous missions, it's clear that this won't pose a problem.\n\nHowever, what could actually be problematic, is one very special fact about the people from these lands. Their odd obsession with complicated puzzles and other mechanisms, which will test your patience, many times along your journey. Most of these obnoxious time wasters are said to have been devised by a former associate of \cfD'Sparil\c-, a nobleman known as \cfLord Vilkreath\c-, who may have also been behind some of the contraptions you found back in \cfParthoris\c-. There are rumors that him and another old disciple of the Rider have been scheming to resurrect him. This may require further attention eventually.\n\n\cxSaya's Notes:\c-\n\cfYeah yeah, typical dark fantasy stuff here. Especially the whole thing of a \"great cataclysm\" and all, y'know, \"this all used to be a field of daisies before\" and then shit hits the fan. I've heard that story a million times.\c-\n\n\cfAnyway, there is one thing that really sticks out to me here, and it's those \"Ethereal Portals\". That stuff got me curious, it's like the portals Ashley-san makes, but they're like... more \"stable\"? One of these days we gotta visit that sage guy before he croaks, and ask him about it.\c-\n\n\cfOh yeah also... \"puzzles\"? Knowing our audience, chat's going to be flooded with ResidentSleeper every single time, I bet, huhuhuh...\c-"; +SWWM_LORETAG_CHANCEBOX = "Lucky Chancebox"; +SWWM_LORETAB_CHANCEBOX = "Item"; +SWWM_LOREREL_CHANCEBOX = "NosKora;Saya"; +SWWM_LORETXT_CHANCEBOX = "\cxDesignation:\c-\n\cf Lucky Chance Box\c-\n\cxManufacturer:\c-\n\cf Plutoni Incorporated\c-\n\cxClassification:\c-\n\cf Surprise Mechanic\c-\n\cxExcitement:\c-\n\cf Guaranteed\c-\n\nThese wondrous little boxes are full of surprises. Every single one, 100%, is guaranteed to provide you with a most precious treasure, should you first be able to track it down, as they will be strategically hidden throughout your mission, as reward for thorough secret-hunting.\n\nComplete your collection! There are countless treasures to obtain, all quite valuable as you might see, selected personally by us, for you.\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\cfThose two 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_FRISPYCORN = "Frispy Corn Snack"; +SWWM_LORETAB_FRISPYCORN = "Item"; +SWWM_LOREREL_FRISPYCORN = "Saya"; +SWWM_LORETXT_FRISPYCORN = "\cxDesignation:\c-\n\cf Frispy™ Tasty Corn Snack\c-\n\cxManufacturer:\c-\n\cf Vestal Foods Inc.\c-\n\cxClassification:\c-\n\cf Flavored Corn Nuts\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_MIXOM = "Mixom"; SWWM_LORETAB_MIXOM = "People"; SWWM_LOREREL_MIXOM = "UAC;Symnatek;Saya"; SWWM_LORETXT_MIXOM = "\cxName:\c-\n\cf Mixom Tools\c-\n\cxClassification:\c-\n\cf Industrial Equipment Manufacturer\c-\n\cxLocation:\c-\n\cf Japan\c-\n\cxWebsite:\c-\n\cf https://mixom.co.jp\c-\n\n\cfMixom\c- is the world's largest supplier of industrial equipment, with almost worldwide coverage (extending even beyond Earth thanks to their long time partnership and dealings with the \cfUAC\c-, having produced most of their basic equipment and infrastructure). The only ones stopping them from fully dominating the market are the Australian \cfSymnatek\c- and the Scottish \cfTach-Engine Technologies\c-, along with their one direct competitor, \cfMoxim\c-.\n\nThe conflicts between Mixom and Moxim very often make the news, due to their rapidly escalating \"lawsuit wars\" over who delivers the best quality for a certain product.\n\nMixom is, in addition, one of the last bastions of capitalism remaining in the country of Japan since the major reforms done by the \cfJapanese Communist Party\c- in 2048.\n\n\cxSaya's Notes:\c-\n\cfMoney and power, absolute dominance, bullshit capitalism. Disgusting... I hope they all explode.\c-\n\n\cfYou can't take two steps without coming across something made by them, they are FUCKING EVERYWHERE. Like, for example, all the screws in your body? Mixom branded. The liquid cooling? Also Mixom... I could keep going, but it makes me feel gross saying their name so often.\c-"; +SWWM_LORETAG_XEKKE = "Xekke"; +SWWM_LORETAB_XEKKE = "Lore"; +SWWM_LOREREL_XEKKE = "XAnimen;Gods;Devanikna;Saya;Nukuri;Zanaveth2"; +SWWM_LORETXT_XEKKE = "\cxName:\c-\n\cf Xekke\c-\n\cxClassification:\c-\n\cf Land of giants\c-\n\cxLocation:\c-\n\cf Ixxeney, Zenna system, X'Animen Coalition\c-\n\n\cfXekke\c- is the largest nation in \cfIxxeney\c-, itself also the largest planet of the \cfZenna system\c-. Covering the mountainous regions west of the neighbouring nation of \cfDevanikna\c-, it is the home of the \cfXekkian\c-, a race of gigantic humanoids (averaging at 3.87 meters of height).\n\nThe nation is led by the king and queen of Xekke, currently \cfMal Kuratagon\c-, grandson of madness deity \cfMaruku Sarahabinaku\c- and \cfMysu Adasake\c-, youngest daughter of the \cfAdasake Mask Bearers\c-. In addition, the madness deity also serves as patron of the Xekkian people.\n\nAmong the various member civilizations of the \cfX'Animen Coalition\c-, the Xekkian are one of the most technologically advanced, though only a few steps behind the \cfNukuri\c-. They are well known for all their achievements in the military field, and many of their weapons are famous throughout, as well as the strength of the titan armies. As a matter of fact, a majority of the coalition members often hire Xekkian mercenaries for their defense.\n\nStructurally speaking, the whole nation is divided into only five cities, each of them very broadly separated from each other, and located in some strategic spot among the mountains. The smallest of them is the capital city of Adkesa, standing atop the tallest peak of Ixxeney, and from which it's said that the king can clearly see the other four cities. Also in the capital city is the Nukuri embassy, which in 1793 BC had fallen to a terrorist attack in response to general displeasure with the \cfYathai Imperial Family\c-. It would remain in ruins until the fall of the empire, after which it was promptly rebuilt to signify the Xekkian people's approval of the \cfNahkami Liberation Front\c-'s victory.\n\nOf the people themselves, what is first noted is their eloquence. The Xekkas language spoken by all feels rather ominous and potent with each word spoken, well-suited for the intense personalities most of them exude. However, although they may appear to be fierce and imposing, they also know well to show kindness to those who need it, as is taught by their patron deity.\n\n\cxSaya's Notes:\c-\n\cfI've only seen pics of the place, from Zana-sama. It's definitely cool, all those rocky mountains, the sprawling cities around them, the lakes and waterfalls, the volcanic areas with huge rivers of magma and PEOPLE BATHING IN IT (holy shit)...\c-\n\n\cfAnd yeah, that's basically Maruku-sama's home right there. She's got the whole family and everything in there, including her... mom. Oh my fucking god don't even get me started on her mom. I'll just end up curled up in a corner again thinking about THAT one time.\c-\n\n\cfCan't believe a fucking five meter tall hot milf goddess proposed to have sex with me right there and then jesus fuck holy shit why did I have to fucking pass out I could have had THE BEST SEX OF MY FUCKING LIFE WITH THE MOTHERFUCKING GODDESS OF LUST.\c-"; SWWM_LORETAG_BELT = "Utility Belt"; SWWM_LORETAB_BELT = "Item"; SWWM_LOREREL_BELT = "Symnatek;Hammerspace;Keychain"; @@ -331,9 +443,9 @@ SWWM_LOREREL_COLLAR = "Demolitionist;Saya;Ibuki;Yui;Ashley"; SWWM_LORETXT_COLLAR = "\cxDesignation:\c-\n\cf Lucky Collar for Demolitionist\c-\n\cxManufacturer:\c-\n\cf Saya Miyamoto, Ashley Knox\c-\n\cxClassification:\c-\n\cf Fashion Accessory\c-\n\nThis is a very stylish and fashionable accessory, personally crafted by \cfSaya Miyamoto\c-, with much love and care, and additionally infused with protective magical energy by \cfAshley Knox\c-. As long as you wear this, your adventures will become much easier, especially if you're prone to accidentally hitting yourself with your own explosives. It can also absorb most of the damage you receive should you be in REAL danger, potentially allowing you to make an escape. One final detail of note is that no matter what, it will never break.\n\n\cxSaya's Notes:\c-\n\cfFor the last time! It's NOT a BDSM thing, I swear to god. Everyone keeps poking me about it, and every time it's the same. It's just a damn cool thing that I thought would look good on you, and on Ibuki too, but people keep misinterpreting it, *sigh*...\c-\n\n\cfI gotta say, tho, it really does look super cute on both of you. And damn, if Yu-chan's big tiddy goth gf can work some magic in there. I forgot to put it there in the main entry, but there's also another thing about the collar. Ashley-san taught me, that when whoever's wearing it is like... about to die, I can \"recall\" you here at will. So yeah, just so you know, if you go down in there and can't do an emergency reboot, you won't be lost forever, I'll make sure to bring you back and patch you up real nice, I promise.\c-"; SWWM_LORETAG_XANIMEN = "X'Animen"; SWWM_LORETAB_XANIMEN = "Lore"; -SWWM_LOREREL_XANIMEN = "Luna;Nukuri;Saya"; +SWWM_LOREREL_XANIMEN = "Luna;Nukuri;Saya;Xekke;Devanikna;Gods"; SWWM_LORETXT_XANIMEN = "\cxName:\c-\n\cf X'Animen Coalition\c-\n\cxClassification:\c-\n\cf Interplanetary Alliance\c-\n\cxLocation:\c-\n\cf Xathar System\c-\n\cf Zenna System\c-\n\cf Kryudon System\c-\n\cf Mondakan System\c-\n\cf Sumayon System (former)\c-\n\nThe \cfX'Animen Coalition\c- is the name given to an alliance among various planetary systems, comprising several inhabited worlds, all connected through portals located on key planets. The coalition was first formed after the arrival of the \cfKnights of Ix\c- on these worlds, a group of seven ancient deities. They had searched through the vast universe, seeking inhabited planets, with the mission to connect them all together. For this purpose, one among them, \cfIx Xeuriges\c-, constructed warp gates linking the various systems they'd come across, one by one. The knights then settled on each of these systems, watching over their people.\n\nThe current systems and planets that comprise the coalition are as follows:\n\n\cxXathar:\c-\nA system located within the Andromeda galaxy, and the most populated, despite only having four habitable planets.\n\n\cfJunifh:\c- Closest to its parent star. A scorching hot planet with many underground communities. This is the planet chosen by \cfIx Konro\c- as his home, and in it, he brought into existence the \cfOnkou\c- race.\n\n\cfHebeku:\c- A warm, mountainous planet, somewhat akin to Earth, but with less water. This is the home of the \cfVotrexxian\c- race, almost once brought to the brink of extinction following a conflict with their immediate neighbours, the \cfNukuri\c-, inhabiting the planet's lone moon of \cfNahkami\c-. Hebeku also hosts a gate connecting to the human solar system, specifically, to the dwarf planet \cfSedna\c-.\n\n\cfKarnanaiahma:\c- A world of large oceans, and the homeworld of the \cfQurensniv\c-, a race almost indistinguishable from humans. Some of its inhabitants fled to Earth in 130 BC, forming the town of \cfKereshnovka\c-.\n\n\cfBuran:\c- A formerly lush planet teeming with wildlife, which is now entirely covered by a matryoshka brain superstructure known as the \cfBleaknet\c-. It is the homeworld of the \cfBurakan\c- race, of which only one surviving member remains: the lead engineer of the Bleaknet project. This oddly named structure in addition serves as a nexus of information for the entire coalition, linking together their various networks through complex space-time distortion technology.\n\n\cxZenna:\c-\nThe second most populated system, and with the most inhabited planetary bodies. It is located within the Triangulum galaxy.\n\n\cfDhetis:\c- The most racially diverse planet within the coalition (to an almost comedic level, by some accounts), host to the following: \cfDerkoi\c- (human-like, but characterised by having odd blackened beak-like noses), \cfMetlei\c- (elvish race characterised by a wide size range and their long, pointy noses), \cfNamaneku\c- (humanoids of small stature and frame, but of considerable strength, noticeable for their dark, beady eyes and sharp teeth), \cfNekkesa\c- (similar in appearance to dark elves of fantasy works), \cfNokretin\c- (almost indistinguishable from humans, except for the fact they all appear to have the same hairstyle: six \"spikes\" of hair), \cfSalman\c- (towering humanoid giants. all men are bald and have mustaches), \cfSxjyanjn\c- (a species of human-shaped jelly/slime creatures, notable for having a language that's impossible to speak by anyone but themselves), \cfOdmorian\c- (yet another race with an elvish appearance, notable for their specific shiny dark brown skin and silvery white hair), \cfRixa\c- (a race of dwarvish humanoids notable for the fact every single member of it is technically a king in their society), \cfUvixa\c- (also known as \cfNeba\c-, a race of pint-sized humanoids), \cfVik\c- (almost identical to humans, appearing even to be an exact imitation of caricature vikings). The ridiculous level of diversity in this planet, along with the notably odd characteristics of each, has been the subject of much study, often being cited as \"the work of either a very bored or very creative god (or both)\".\n\n\cfIxxeney:\c- A large planet orbited by the fastest known moon. It is home to the \cfXekkian\c-, fierce titan warriors, and the \cfDevanikan\c-, warriors of dragon blood.\n\n\cfNekemekya:\c- A semi-artificial planet covered by a large metallic shell. It is home to \cfIx Nemeke\c-, and the \cfMekyon\c-, a race of mechanical beings he had created.\n\n\cfXeryuga:\c- A highly hostile magma-filled hellscape planet, inhabited by the unfairly adorable bunny-like \cfXeura\c- race, along with \cfIx Xeuriges\c-, their creator.\n\n\cfUnukugoshuenike:\c- A gigantic planet of glass and gemstone, and home of the \cfGoshun\c-, a race of semi-humanoid gemstone creatures.\n\n\cfUnuenishe:\c- Former homeworld of the \cfMishe\c- race, destroyed thousands of years ago during a war against the Goshun.\n\n\cxKryudon:\c-\nThe third most populated system in the coalition. Like Xathar, it is also located within Andromeda.\n\n\cfLok:\c- A dark planet shrouded in fog and rain. It is home to the \cfLokan\c- and the \cfRokana\c- races.\n\n\cfKayo:\c- An overpopulated city-planet, and homeworld of the \cfKyon\c-.\n\n\cfKantharo:\c- A small planet rich in fossil fuels. Home of the \cfKanethe\c- and \cfAldabura\c-, and also to \cfIx Pyskou\c-.\n\n\cfKruon:\c- Ash-covered volcanic planet. Home of the \cfKruniin\c-, and ruled by \cfDread Overlord Nuoma\c-.\n\n\cxMondakan:\c-\nThis system is not located within the observable universe.\n\n\cfMon:\c- A planet with odd similarities to Earth. It is home to its namesake race, the \cfMon\c-, plus many others. Also serves as home to \cfIx Xekkene\c-.\n\n\cfKuranite:\c- Rocky planet, home of various species, such as the \cfForozen\c-, \cfKuranit\c- and \cfOkonova\c-.\n\n\cfNedoshiaan:\c- Formerly a member of the coalition before the protector god of the native \cfIzuna\c- race was driven mad, and then subsequently assassinated by his own followers, resulting in the planet being almost entirely destroyed.\n\n\cxSumayon:\c-\nA system from our own galaxy, used to house one lone planet, until a great cataclysm happened.\n\n\cfSenekeye Keinukyenei Bhekeyuni:\c- Homeworld of the \cfKeinun\c- and former home of \cfIx Sumai\c-. Was shattered to a thousand pieces and pushed out of its orbit after a great cataclysm.\n\nIn addition, two other systems were considered for joining the coalition. Negotiations fell apart for one of them due to hostilities towards another member of the coalition, and another is currently being studied, as it seems its one civilized inhabiting species has not yet evolved enough to join, though there is great interest in their homeworld due to its precious mineral resources.\n\n\cxSaya's Notes:\c-\n\cf\"Negotiations fell apart\" is one way to put it. God, imagine... just IMAGINE for a moment that things had gone better. We would be part of a huge interplanetary alliance! That stuff is like... straight out of some sci-fi novel or something.\c-\n\n\cfBy the way, I don't know if you've just skimmed through it or actually read the whole thing, but did you SEE the entry on that one planet? What the fuck is up with that??? It's like some crazy overly creative elementary schooler came up with all that shit. Fucking hell. Did a god really do that? Or... is it just the most ridiculous fucking coincidence imaginable...?\c-\n\n\cfI don't even know, Demo-chan... at this point, anything could be, from what I've seen out there.\c-"; -SWWM_LORETXT_XANIMEN2 = "\cxName:\c-\n\cf X'Animen Coalition\c-\n\cxClassification:\c-\n\cf Interplanetary Alliance\c-\n\cxLocation:\c-\n\cf Xathar System\c-\n\cf Zenna System\c-\n\cf Kryudon System\c-\n\cf Mondakan System\c-\n\cf Sumayon System (former)\c-\n\nThe \cfX'Animen Coalition\c- is the name given to an alliance among various planetary systems, comprising several inhabited worlds, all connected through portals located on key planets. The coalition was first formed after the arrival of the \cfWarriors of Ix\c- on these worlds, a group of seven ancient deities. They had searched through the vast universe, seeking inhabited planets, with the mission to connect them all together. For this purpose, one among them, \cfIx Xeuriges\c-, constructed warp gates linking the various systems they'd come across, one by one. The knights then settled on each of these systems, watching over their people.\n\nThe current systems and planets that comprise the coalition are as follows:\n\n\cxXathar:\c-\nA system located within the Andromeda galaxy, and the most populated, despite only having four habitable planets.\n\n\cfJunifh:\c- Closest to its parent star. A scorching hot planet with many underground communities. This is the planet chosen by \cfIx Konro\c- as his home, and in it, he brought into existence the \cfOnkou\c- race.\n\n\cfHebeku:\c- A warm, mountainous planet, somewhat akin to Earth, but with less water. This is the home of the \cfVotrexxian\c- race, almost once brought to the brink of extinction following a conflict with their immediate neighbours, the \cfNukuri\c-, inhabiting the planet's lone moon of \cfNahkami\c-. Hebeku also hosts a gate connecting to the human solar system, specifically, to the dwarf planet \cfSedna\c-.\n\n\cfKarnanaiahma:\c- A world of large oceans, and the homeworld of the \cfQurensniv\c-, a race almost indistinguishable from humans. Some of its inhabitants fled to Earth in 130 BC, forming the town of \cfKereshnovka\c-.\n\n\cfBuran:\c- A formerly lush planet teeming with wildlife, which is now entirely covered by a matryoshka brain superstructure known as the \cfBleaknet\c-. It is the homeworld of the \cfBurakan\c- race, of which only one surviving member remains: the lead engineer of the Bleaknet project. This oddly named structure in addition serves as a nexus of information for the entire coalition, linking together their various networks through complex space-time distortion technology.\n\n\cxZenna:\c-\nThe second most populated system, and with the most inhabited planetary bodies. It is located within the Triangulum galaxy.\n\n\cfDhetis:\c- The most racially diverse planet within the coalition (to an almost comedic level, by some accounts), host to the following: \cfDerkoi\c- (human-like, but characterised by having odd blackened beak-like noses), \cfMetlei\c- (elvish race characterised by a wide size range and their long, pointy noses), \cfNamaneku\c- (humanoids of small stature and frame, but of considerable strength, noticeable for their dark, beady eyes and sharp teeth), \cfNekkesa\c- (similar in appearance to dark elves of fantasy works), \cfNokretin\c- (almost indistinguishable from humans, except for the fact they all appear to have the same hairstyle: six \"spikes\" of hair), \cfSalman\c- (towering humanoid giants. all men are bald and have mustaches), \cfSxjyanjn\c- (a species of human-shaped jelly/slime creatures, notable for having a language that's impossible to speak by anyone but themselves), \cfOdmorian\c- (yet another race with an elvish appearance, notable for their specific shiny dark brown skin and silvery white hair), \cfRixa\c- (a race of dwarvish humanoids notable for the fact every single member of it is technically a king in their society), \cfUvixa\c- (also known as \cfNeba\c-, a race of pint-sized humanoids), \cfVik\c- (almost identical to humans, appearing even to be an exact imitation of caricature vikings). The ridiculous level of diversity in this planet, along with the notably odd characteristics of each, has been the subject of much study, often being cited as \"the work of either a very bored or very creative god (or both)\".\n\n\cfIxxeney:\c- A large planet orbited by the fastest known moon. It is home to the \cfXekkian\c-, fierce titan warriors, and the \cfDevanikan\c-, warriors of dragon blood.\n\n\cfNekemekya:\c- A semi-artificial planet covered by a large metallic shell. It is home to \cfIx Nemeke\c-, and the \cfMekyon\c-, a race of mechanical beings he had created.\n\n\cfXeryuga:\c- A highly hostile magma-filled hellscape planet, inhabited by the unfairly adorable bunny-like \cfXeura\c- race, along with \cfIx Xeuriges\c-, their creator.\n\n\cfUnukugoshuenike:\c- A gigantic planet of glass and gemstone, and home of the \cfGoshun\c-, a race of semi-humanoid gemstone creatures.\n\n\cfUnuenishe:\c- Former homeworld of the \cfMishe\c- race, destroyed thousands of years ago during a war against the Goshun.\n\n\cxKryudon:\c-\nThe third most populated system in the coalition. Like Xathar, it is also located within Andromeda.\n\n\cfLok:\c- A dark planet shrouded in fog and rain. It is home to the \cfLokan\c- and the \cfRokana\c- races.\n\n\cfKayo:\c- An overpopulated city-planet, and homeworld of the \cfKyon\c-.\n\n\cfKantharo:\c- A small planet rich in fossil fuels. Home of the \cfKanethe\c- and \cfAldabura\c-, and also to \cfIx Pyskou\c-.\n\n\cfKruon:\c- Ash-covered volcanic planet. Home of the \cfKruniin\c-, and ruled by \cfDread Overlord Nuoma\c-.\n\n\cxMondakan:\c-\nThis system is not located within the observable universe.\n\n\cfMon:\c- A planet with odd similarities to Earth. It is home to its namesake race, the \cfMon\c-, plus many others. Also serves as home to \cfIx Xekkene\c-.\n\n\cfKuranite:\c- Rocky planet, home of various species, such as the \cfForozen\c-, \cfKuranit\c- and \cfOkonova\c-.\n\n\cfNedoshiaan:\c- Formerly a member of the coalition before the protector god of the native \cfIzuna\c- race was driven mad, and then subsequently assassinated by his own followers, resulting in the planet being almost entirely destroyed.\n\n\cxSumayon:\c-\nA system from our own galaxy, used to house one lone planet, until a great cataclysm happened.\n\n\cfSenekeye Keinukyenei Bhekeyuni:\c- Homeworld of the \cfKeinum\c- and former home of \cfIx Sumai\c-. Was shattered to a thousand pieces and pushed out of its orbit after a great cataclysm.\n\nIn addition, two other systems were considered for joining the system. Negotiations fell apart for one of them due to hostilities towards another member of the coalition, and another is currently being studied, as it seems its one civilized inhabiting species has not yet evolved enough to join, though there is great interest in their homeworld due to its precious mineral resources.\n\n\cxSaya's Notes:\c-\n\cf\"Negotiations fell apart\" is one way to put it. God, imagine... just IMAGINE for a moment that things had gone better. We would be part of a huge interplanetary alliance! That stuff is like... straight out of some sci-fi novel or something.\c-\n\n\cfBy the way, I don't know if you've just skimmed through it or actually read the whole thing, but did you SEE the entry on that one planet? What the fuck is up with that??? It's like some crazy overly creative elementary schooler came up with all that shit. Fucking hell. Did a god really do that? Or... is it just the most ridiculous fucking coincidence imaginable...?\c-\n\n\cfI don't even know, Demo-chan... at this point, anything could be, from what I've seen out there.\c-\n\n\cfOh, now that I'm revising this one, there it is. The planet that Nuoma is running. So it's in there, huh? \"Dread Overlord Nuoma\", heh... if only they knew.\c-"; +SWWM_LORETXT_XANIMEN2 = "\cxName:\c-\n\cf X'Animen Coalition\c-\n\cxClassification:\c-\n\cf Interplanetary Alliance\c-\n\cxLocation:\c-\n\cf Xathar System\c-\n\cf Zenna System\c-\n\cf Kryudon System\c-\n\cf Mondakan System\c-\n\cf Sumayon System (former)\c-\n\nThe \cfX'Animen Coalition\c- is the name given to an alliance among various planetary systems, comprising several inhabited worlds, all connected through portals located on key planets. The coalition was first formed after the arrival of the \cfWarriors of Ix\c- on these worlds, a group of seven ancient deities. They had searched through the vast universe, seeking inhabited planets, with the mission to connect them all together. For this purpose, one among them, \cfIx Xeuriges\c-, constructed warp gates linking the various systems they'd come across, one by one. The knights then settled on each of these systems, watching over their people.\n\nThe current systems and planets that comprise the coalition are as follows:\n\n\cxXathar:\c-\nA system located within the Andromeda galaxy, and the most populated, despite only having four habitable planets.\n\n\cfJunifh:\c- Closest to its parent star. A scorching hot planet with many underground communities. This is the planet chosen by \cfIx Konro\c- as his home, and in it, he brought into existence the \cfOnkou\c- race.\n\n\cfHebeku:\c- A warm, mountainous planet, somewhat akin to Earth, but with less water. This is the home of the \cfVotrexxian\c- race, almost once brought to the brink of extinction following a conflict with their immediate neighbours, the \cfNukuri\c-, inhabiting the planet's lone moon of \cfNahkami\c-. Hebeku also hosts a gate connecting to the human solar system, specifically, to the dwarf planet \cfSedna\c-.\n\n\cfKarnanaiahma:\c- A world of large oceans, and the homeworld of the \cfQurensniv\c-, a race almost indistinguishable from humans. Some of its inhabitants fled to Earth in 130 BC, forming the town of \cfKereshnovka\c-.\n\n\cfBuran:\c- A formerly lush planet teeming with wildlife, which is now entirely covered by a matryoshka brain superstructure known as the \cfBleaknet\c-. It is the homeworld of the \cfBurakan\c- race, of which only one surviving member remains: the lead engineer of the Bleaknet project. This oddly named structure in addition serves as a nexus of information for the entire coalition, linking together their various networks through complex space-time distortion technology.\n\n\cxZenna:\c-\nThe second most populated system, and with the most inhabited planetary bodies. It is located within the Triangulum galaxy.\n\n\cfDhetis:\c- The most racially diverse planet within the coalition (to an almost comedic level, by some accounts), host to the following: \cfDerkoi\c- (human-like, but characterised by having odd blackened beak-like noses), \cfMetlei\c- (elvish race characterised by a wide size range and their long, pointy noses), \cfNamaneku\c- (humanoids of small stature and frame, but of considerable strength, noticeable for their dark, beady eyes and sharp teeth), \cfNekkesa\c- (similar in appearance to dark elves of fantasy works), \cfNokretin\c- (almost indistinguishable from humans, except for the fact they all appear to have the same hairstyle: six \"spikes\" of hair), \cfSalman\c- (towering humanoid giants. all men are bald and have mustaches), \cfSxjyanjn\c- (a species of human-shaped jelly/slime creatures, notable for having a language that's impossible to speak by anyone but themselves), \cfOdmorian\c- (yet another race with an elvish appearance, notable for their specific shiny dark brown skin and silvery white hair), \cfRixa\c- (a race of dwarvish humanoids notable for the fact every single member of it is technically a king in their society), \cfUvixa\c- (also known as \cfNeba\c-, a race of pint-sized humanoids), \cfVik\c- (almost identical to humans, appearing even to be an exact imitation of caricature vikings). The ridiculous level of diversity in this planet, along with the notably odd characteristics of each, has been the subject of much study, often being cited as \"the work of either a very bored or very creative god (or both)\".\n\n\cfIxxeney:\c- A large planet orbited by the fastest known moon. It is home to the \cfXekkian\c-, fierce titan warriors, and the \cfDevanikan\c-, warriors of dragon blood.\n\n\cfNekemekya:\c- A semi-artificial planet covered by a large metallic shell. It is home to \cfIx Nemeke\c-, and the \cfMekyon\c-, a race of mechanical beings he had created.\n\n\cfXeryuga:\c- A highly hostile magma-filled hellscape planet, inhabited by the unfairly adorable bunny-like \cfXeura\c- race, along with \cfIx Xeuriges\c-, their creator.\n\n\cfUnukugoshuenike:\c- A gigantic planet of glass and gemstone, and home of the \cfGoshun\c-, a race of semi-humanoid gemstone creatures.\n\n\cfUnuenishe:\c- Former homeworld of the \cfMishe\c- race, destroyed thousands of years ago during a war against the Goshun.\n\n\cxKryudon:\c-\nThe third most populated system in the coalition. Like Xathar, it is also located within Andromeda.\n\n\cfLok:\c- A dark planet shrouded in fog and rain. It is home to the \cfLokan\c- and the \cfRokana\c- races.\n\n\cfKayo:\c- An overpopulated city-planet, and homeworld of the \cfKyon\c-.\n\n\cfKantharo:\c- A small planet rich in fossil fuels. Home of the \cfKanethe\c- and \cfAldabura\c-, and also to \cfIx Pyskou\c-.\n\n\cfKruon:\c- Ash-covered volcanic planet. Home of the \cfKruniin\c-, and ruled by \cfDread Overlord Nuoma\c-.\n\n\cxMondakan:\c-\nThis system is not located within the observable universe.\n\n\cfMon:\c- A planet with odd similarities to Earth. It is home to its namesake race, the \cfMon\c-, plus many others. Also serves as home to \cfIx Xekkene\c-.\n\n\cfKuranite:\c- Rocky planet, home of various species, such as the \cfForozen\c-, \cfKuranit\c- and \cfOkonova\c-.\n\n\cfNedoshiaan:\c- Formerly a member of the coalition before the protector god of the native \cfIzuna\c- race was driven mad, and then subsequently assassinated by his own followers, resulting in the planet being almost entirely destroyed.\n\n\cxSumayon:\c-\nA system from our own galaxy, used to house one lone planet, until a great cataclysm happened.\n\n\cfSenekeye Keinukyenei Bhekeyuni:\c- Homeworld of the \cfKeinun\c- and former home of \cfIx Sumai\c-. Was shattered to a thousand pieces and pushed out of its orbit after a great cataclysm.\n\nIn addition, two other systems were considered for joining the system. Negotiations fell apart for one of them due to hostilities towards another member of the coalition, and another is currently being studied, as it seems its one civilized inhabiting species has not yet evolved enough to join, though there is great interest in their homeworld due to its precious mineral resources.\n\n\cxSaya's Notes:\c-\n\cf\"Negotiations fell apart\" is one way to put it. God, imagine... just IMAGINE for a moment that things had gone better. We would be part of a huge interplanetary alliance! That stuff is like... straight out of some sci-fi novel or something.\c-\n\n\cfBy the way, I don't know if you've just skimmed through it or actually read the whole thing, but did you SEE the entry on that one planet? What the fuck is up with that??? It's like some crazy overly creative elementary schooler came up with all that shit. Fucking hell. Did a god really do that? Or... is it just the most ridiculous fucking coincidence imaginable...?\c-\n\n\cfI don't even know, Demo-chan... at this point, anything could be, from what I've seen out there.\c-\n\n\cfOh, now that I'm revising this one, there it is. The planet that Nuoma is running. So it's in there, huh? \"Dread Overlord Nuoma\", heh... if only they knew.\c-"; SWWM_LORETAG_DEEPIMPACT = "Deep Impact"; SWWM_LORETAB_DEEPIMPACT = "Item"; SWWM_LOREREL_DEEPIMPACT = "Locke"; @@ -343,6 +455,10 @@ SWWM_LORETAB_UAC = "People"; SWWM_LOREREL_UAC = "Doomguy;Saya;Hell"; SWWM_LORETXT_UAC = "\cxName:\c-\n\cf Union Aerospace Corporation\c-\n\cxClassification:\c-\n\cf Scientific and Military Research Conglomerate\c-\n\cxLocation:\c-\n\cf Earth, Mars and Jupiter\c-\n\cxWebsite:\c-\n\cf https://ua-corp.com\c-\n\nFounded in 2015 by \cfThomas Kelliher\c- as a shell company of the \cfUnion Aerospace Armed Forces (UAAF)\c-, the \cfUAC\c-'s rise to power began in 2025 with its famous \cfJoint Mars Expeditions\c-. After which their current headquarters, a vast complex known as \cfMars City\c-, were built on the red planet, along with several posts on the moons of \cfPhobos\c- and \cfDeimos\c-. There is quite a lot of controversy surrounding this megacorporation, who not only is known to delve into all sorts of experimentation that has quite blatant potential for disaster (not to mention most of it having military applications), but also faces countless accusations of workers' rights violations.\n\nFollowing the events of the \cfWhite Scar\c- in 2077, the UAC was one of the main bodies involved in the reconstruction of the fallen \cfUnited States\c-, eventually securing their position of power in the reformed \cfUnion States\c-, as not just the largest military body on Earth, but also one with vast economic and political control.\n\nIn recent years, the UAC has been involved in teleportation technology experiments. Through these, they eventually found a way to travel to other worlds. Specifically, to \cfHell\c-. Despite the clearly dangerous implications of such a thing, much was researched of that world ever since the first contact in 2144, and although hostility had been witnessed from the natives, it didn't seem that there was any sign of these creatures becoming a major threat... until a year had passed.\n\nThis arrival on Hell from the UAC had unfortunately coincided with a period of major political unrest, which in 2145 reached its boiling point, as the archdemon generals staged a coup, overthrowing the \cfKuriste Royal Family\c-, and setting themselves up as the new rulers. Mad with power, they set their sights on war and conquest, and it just so happened that humans were there, so we became their first target.\n\nHaving turned a member of the UAC's science team to their side, he assisted them with the first incursion on Mars City, which served as a first test of their newly built armies. However, they were defeated, having severely underestimated the abilities of humans, and their superior firepower. Their initial plans had to be revised, their armies needed to be stronger, larger. Humanity would be overwhelmed by numbers alone. During the time until their next attack, it's estimated that the population of Hell grew from 370 million to 9.3 billion, thanks to an obscene expansion of their spawning grounds, and improvements on demonic biosynthesis.\n\nIn early 2148, with the UAC not having learned their lesson, teleportation experiments resumed, this time limited entirely to short-scale travels between the outposts on Phobos and Deimos. Over time, volunteers who had gone through the portals began to suffer hideous mutations, in some cases being said to result in eventual \"full body explosion\". It wasn't long until they realized what was happening: their portal was being hijacked. Soon enough, demon invaders began warping in from both sides, in vast numbers. Both moon bases eventually fell, and a detachment from Mars City was sent to investigate this \"radio silence\" that had so suddenly happened.\n\nWhat happened then was the beginning of what's been called the \cfDoom Episodes\c-. As was told by the UAC following these events, one lone marine managed to, by his lonesome, defeat all the invading forces, taking the fight even to Hell itself. However, the exploits of the so-called \cfDoom Marine\c- only served to enrage the archdemon generals even more, and that's when the invasion of Earth began. Although most have seen this as \"the end of the world as we know it\", the UAC still sends a message of hope to all, saying that all will be resolved.\n\n\cxSaya's Note:\c-\n\cfOh, the \"great and mighty\" UAC, bunch of shit-eating capitalist pigs, that's what they are. Look right here, this is what unchecked capitalism does to you, y'all. Yeah, you can guess by now that I fucking hate these people.\c-\n\n\cfSo... Illegal military experiments? Check. Fucking around with interdimensional travel? Check. Potentially causing the end of the world? Also check. These fuckers really ARE a stereotypical evil megacorp, fucking hell...\c-\n\n\cfBut you know what? I'm not going to sit on my ass and wait for their supposed \"problem fixer\" legendary hero soldier boy to fix it all up. As if THAT is going to happen. No, this is precisely why YOU are here, Demo-chan. This is what you are destined to change (wow ok I'm starting to sound a bit uhhhh, cliche-y here). But yeah, we've prepared you for it, you are the ultimate combat robot, the pride of Akari Labs and all that jazz, you CAN save the world, I'm sure of it.\c-"; SWWM_LORETXT_UAC2 = "\cxName:\c-\n\cf Union Aerospace Corporation\c-\n\cxClassification:\c-\n\cf Scientific and Military Research Conglomerate\c-\n\cxLocation:\c-\n\cf Earth, Mars and Jupiter\c-\n\cxWebsite:\c-\n\cf https://ua-corp.com\c-\n\nFounded in 2015 by \cfThomas Kelliher\c- as a shell company of the \cfUnion Aerospace Armed Forces (UAAF)\c-, the \cfUAC\c-'s rise to power began in 2025 with its famous \cfJoint Mars Expeditions\c-. After which their current headquarters, a vast complex known as \cfMars City\c-, were built on the red planet, along with several posts on the moons of \cfPhobos\c- and \cfDeimos\c-. There is quite a lot of controversy surrounding this megacorporation, who not only is known to delve into all sorts of experimentation that has quite blatant potential for disaster (not to mention most of it having military applications), but also faces countless accusations of workers' rights violations.\n\nFollowing the events of the \cfWhite Scar\c- in 2077, the UAC was one of the main bodies involved in the reconstruction of the fallen \cfUnited States\c-, eventually securing their position of power in the reformed \cfUnion States\c-, as not just the largest military body on Earth, but also one with vast economic and political control.\n\nIn recent years, the UAC has been involved in teleportation technology experiments. Through these, they eventually found a way to travel to other worlds. Specifically, to \cfHell\c-. Despite the clearly dangerous implications of such a thing, much was researched of that world ever since the first contact in 2144, and although hostility had been witnessed from the natives, it didn't seem that there was any sign of these creatures becoming a major threat... until a year had passed.\n\nThis arrival on Hell from the UAC had unfortunately coincided with a period of major political unrest, which in 2145 reached its boiling point, as the archdemon generals staged a coup, overthrowing the \cfKuriste Royal Family\c-, and setting themselves up as the new rulers. Mad with power, they set their sights on war and conquest, and it just so happened that humans were there, so we became their first target.\n\nHaving turned a member of the UAC's science team to their side, he assisted them with the first incursion on Mars City, which served as a first test of their newly built armies. However, they were defeated, having severely underestimated the abilities of humans, and their superior firepower. Their initial plans had to be revised, their armies needed to be stronger, larger. Humanity would be overwhelmed by numbers alone. During the time until their next attack, it's estimated that the population of Hell grew from 370 million to 9.3 billion, thanks to an obscene expansion of their spawning grounds, and improvements on demonic biosynthesis.\n\nIn early 2148, with the UAC not having learned their lesson, teleportation experiments resumed, this time limited entirely to short-scale travels between the outposts on Phobos and Deimos. Over time, volunteers who had gone through the portals began to suffer hideous mutations, in some cases being said to result in eventual \"full body explosion\". It wasn't long until they realized what was happening: their portal was being hijacked. Soon enough, demon invaders began warping in from both sides, in vast numbers. Both moon bases eventually fell, and a detachment from Mars City was sent to investigate this \"radio silence\" that had so suddenly happened.\n\nWhat happened then was the beginning of what's been called the \cfDoom Episodes\c-. As was told by the UAC following these events, one lone marine managed to, by his lonesome, defeat all the invading forces, taking the fight even to Hell itself. However, the exploits of the so-called \cfDoom Marine\c- only served to enrage the archdemon generals even more, and that's when the invasion of Earth began. And, as soon as it did, it was quickly brought to an end. The \cfDemolitionist\c-, a collaborative effort of \cfAkari Labs\c- and its many associates, singlehandedly put an end to the invasion, efficiently eliminating every single demon that had come out from the portals, and after that, making their way through Hell itself, much like the Doom Marine, and defeating the \cfIcon of Sin\c-, who commanded the invading armies.\n\nFollowing this event, the UAC suffered a major restructuring, as most of its board of directors had been lost during the invasions. Now free from its control, the US government tightly supervised their actions, ensuring that they would no longer become a liability. Despite this, three other incidents happened, despite much tighter security protocols. Within one of their bases on Io, yet again they continued their teleportation experiments, this time being prepared for anything. As predicted, a small group of demons came through, but they were swiftly dealt with. What they did NOT predict, however, was that this had merely been a distraction. An unidentified ship had suddenly approached the base, initially assumed to be the usual yearly supply drop. This ship was of demonic construction, imitating the very technology the UAC had. An overwhelming amount of demons were unleashed onto the base, and most were quickly killed or possessed. However, the Doom Marine was also there, and as expected, he once again did what he does best.\n\nOne other incident soon followed, within a research facility of undisclosed location. There, the UAC had been working on one way to actively prevent these invasions from ever happening, through something they called \cfQuantum Accelerator Devices\c-. These machines would allegedly serve to close any gates the demons could produce to enter our world, and they did, at first. One gate spawned within the facility, and although some demons managed to make their way in, it was promptly closed and these scarce invaders were gunned down. It seemed then that the experiment was a success, but the demons quickly caught on, and the next day, seven gates opened simultaneously throughout the facility. It took one hour for six of them to be closed, but at that point the invading forces had become overwhelming in numbers, and soon enough everything fell into chaos again. And sure enough, once again, the UAC decided to send their formidable errand boy to deal with it, and so he did, again, as usual. \cf[ed. note: Saya, your sarcasm is showing]\c-\n\nWith one final strike to the \cf\"Gatekeeper\"\c-, the titanic demon responsible for the creation of these gateways, it seemed that the invasions would finally be stopped for good. Sure enough, for many years, all was quiet, and no more incidents were reported. The Doom Episodes were then archived, and the Doom Marine was decomissioned.\n\nIn 2150, the company finally closed off all of its teleportation experiments, and in a public announcement, CEO \cfIan Kelliher\c- states that the company will now shift its main focus into repairing all the damages that their actions had brought to Earth. Something which, according to initial estimates, may take over fifty years.\n\nTen years after this announcement, some worrying news soon reached Earth. Demonic forces had been sighted on several abandoned UAC bases, which were previously thought to all having been thoroughly wiped by radiation bombings. Something had managed to survive there, and was steadily reviving the decayed corpses of the countless fallen demons. Seeing no other choice, the Doom Episodes are reopened, and the very disgruntled Doom Marine was re-commissioned and sent there, this time, after his eventual success, making the decision to stay in Hell, forever, to make sure the demons never attempt an attack ever again. Ever since then, no contact could be made with him.\n\nWhat little information could be recovered from the other side of all this, that of Hell itself, is that his rampage was unstoppable. He defeated the remaining demon commanders. Tens of thousands of demons, in their mindless rage, all marched towards their deaths by his hand. There was hope among the civilian population that this one human, now rebaptized by the title of \cfDoom Slayer\c-, would put an end to the tyranny of the archdemon generals, but they had their plans for him. They were fully aware that should he make his way to the capital city of \cfDis\c- once again, they would not be able to stop him. So a trap was set, and he fell right into it. It was then that \cfErebus\c-, the leading general, banished him, far away, beyond the confines of this universe, so that he may never be able to return to this world.\n\n\cxSaya's Notes:\c-\n\cfCrazy stuff, all because of the UAC being shit and bad. I'm happy though, because I got to see that pathetic brat's fall from glory, that idiot, who once claimed to be the \"most important man in the world\", now turned into the US government's personal lap dog. It's so hilarious my sides have gone into orbit, I swear.\c-\n\n\cfOh yeah, that little bit at the end of the \"other side's account\" on things? Yeah, you can thank my \"special source\" for that. Cytho-sama has a lot of contacts in Hell, that's for sure. He never told me about it, but I'm guessing he was someone important back in the day, before he came to Earth and \"reformed\". Oh well. Here ends the story of these Dumb Epistles or whatever, one of the shining examples of the consequences of unchecked capitalism™.\c-"; +SWWM_LORETAG_MMIASRVOL1 = "MMiaSR Vol.1"; +SWWM_LORETAB_MMIASRVOL1 = "Item"; +SWWM_LOREREL_MMIASRVOL1 = "Saya;Maidbot"; +SWWM_LORETXT_MMIASRVOL1 = "\cxTitle:\c-\n\cf My Maid Is A Sex Robot - Volume One\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Comedy, Ecchi, Romance\c-\n\n\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c-"; SWWM_LORETAG_ENGINETECH = "Tach-Engine"; SWWM_LORETAB_ENGINETECH = "People"; SWWM_LOREREL_ENGINETECH = "UAC;Nukuri;DecadeMech;Saya;Nekuratek;WhiteScar"; @@ -359,6 +475,12 @@ SWWM_LORETAG_VOICEBOX = "Loudboi Voicebox"; SWWM_LORETAB_VOICEBOX = "Item"; SWWM_LOREREL_VOICEBOX = "AkariLabs;Ibuki;Demolitionist"; SWWM_LORETXT_VOICEBOX = "\cxDesignation:\c-\n\cf Loudboi Voicebox\c-\n\cxManufacturer:\c-\n\cf Akari Labs\c-\n\cxClassification:\c-\n\cf Voice Synthesizer\c-\n\nThe \cfLoudboi\c- is a simple and lightweight device for AI units. Easy to install and program, perfect for those building on a budget. There are a wide variety of options for the voice type, along with multiple language support, including Japanese. Those who are rather displeased with the uncannily \"too human\" default voice synthesis also have the option of enabling a built-in \"robot voice\" filter.\n\nThe \cfAkari Labs\c- community offers a variety of custom-made voice packs for this device, too. Please visit our forums for more information.\n\n\cxSaya's Notes:\c-\n\cfHeh... Ibuki's so amused that I programmed your voicebox to sound exactly like her. I mean, it fits, a lil' bit, being her little sister in a way, but what amuses ME is that you've somehow picked up all her little mannerisms and stuff. It's like you're a smol Ibuki at times, just without the tiddy.\c-"; +SWWM_LORETAG_AKARIPROJECT = "Akari Project"; +SWWM_LORETAB_AKARIPROJECT = "Item"; +SWWM_LOREREL_AKARIPROJECT = "Saya;Luna;Nukuri;UAC;Hell;Kirin"; +SWWM_LORETXT_AKARIPROJECT = "\cxTitle:\c-\n\cf The Akari Project\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Science Fiction\c-\n\n\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project.\n\n\cfThe Akari Project\c- is \cfSaya Miyamoto\c-'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the \cfLuna Event\c-. It was advertised as a possible look into the future that the \cfNukuri\c- alliance would provide, though nowadays it's seen more as an unfortunately \"too optimistic\" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond.\n\n\cxSaya's Notes:\c-\n\cfYeah... I was really dumb back then, thinking everything would turn out so well and all, but instead look at where we are, with humankind's first interdimensional travel experiments opening a goddamn portal to Hell of all places (fuck the UAC). And let's not get started on all those \"advances\" in science I fantasized about. Most of those are way far for us, even though all the others have them (or even better stuff). We're just lagging behind because of all the stupid shit people keep doing and all the work those capitalist trashlords do to set everything back (fuck 'em).\c-\n\n\cfBut yeah, I totally want to make this real now, since I've got the know-how to do all this, mainly thanks to Zana-sama and her contacts. Well, I know the basics, at least, so I'll have to figure out the rest myself.\c-"; +SWWM_LORETXT_AKARIPROJECT2 = "\cxTitle:\c-\n\cf The Akari Project\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Science Fiction\c-\n\n\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project.\n\n\cfThe Akari Project\c- is \cfSaya Miyamoto\c-'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the \cfLuna Event\c-. It was advertised as a possible look into the future that the \cfNukuri\c- alliance would provide, though nowadays it's seen more as an unfortunately \"too optimistic\" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond.\n\n\cxSaya's Notes:\c-\n\cf... And then it all came true, in a way. Good shit that I ended up making the Akari Project become real. Heh, the UAC got SOOOOOOOOOOOO fucking salty over this, it was absolutely delicious. The whole goddamn multiverse is open to us now, and it's all safe and free from pesky demon intervention (unless we use it to actually go to Hell, obviously).\c-\n\n\cfOh this really is the good shit. I look back at the novel now and I'm left wondering if that romantic subplot will ever come true too. You know, when Doctor Kirishima meets Princess Ikana, and they fall in love and... *sigh*\c-"; +SWWM_LORETXT_AKARIPROJECT3 = "\cxTitle:\c-\n\cf The Akari Project\c-\n\cxAuthor:\c-\n\cf Saya Miyamoto\c-\n\cxGenre:\c-\n\cf Science Fiction\c-\n\n\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project.\n\n\cfThe Akari Project\c- is \cfSaya Miyamoto\c-'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the \cfLuna Event\c-. It was advertised as a possible look into the future that the \cfNukuri\c- alliance would provide, though nowadays it's seen more as an unfortunately \"too optimistic\" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond.\n\n\cxSaya's Notes:\c-\n\cf... And then it all came true, in a way. Good shit that I ended up making the Akari Project become real. Heh, the UAC got SOOOOOOOOOOOO fucking salty over this, it was absolutely delicious. The whole goddamn multiverse is open to us now, and it's all safe and free from pesky demon intervention (unless we use it to actually go to Hell, obviously).\c-\n\n\cfOh also, remember the romance subplot? Kirishima and Ikana, yeah... huuuuuge parallels with me and Kirin-kun there, just with the genders swapped. Didn't play out exactly the same way, tho. Wonder if he'd enjoy reading this...\c-"; SWWM_LORETAG_LOCKE = "Dr. Locke"; SWWM_LORETAB_LOCKE = "People"; SWWM_LOREREL_LOCKE = "Kereshnovka;Saya"; diff --git a/language.def_menu b/language.def_menu index 6dab1dd57..ed20ea930 100644 --- a/language.def_menu +++ b/language.def_menu @@ -45,6 +45,9 @@ SWWM_SVAMMOUSE = "Enforce Fabricator Auto-Use"; SWWM_MCREDS = "SWWM GZ Credits"; SWWM_CLEAD = "Development Lead:"; SWWM_CASSETS = "Additional Assets:"; +SWWM_ASSBARONS = "XDeath Sprites for Hell Nobles"; +SWWM_ASSOTHER = "XDeath Sprites for Demon, Cacodemon, Revenant, Archvile"; +SWWM_ASSKEEN = "Less Mean-Spirited Keen Replacement"; SWWM_CMUSIC = "Music Tracks Used:"; SWWM_CFANART = "Intermission Fanart:"; SWWM_CPATRON = "Patreon Backers:"; @@ -54,7 +57,8 @@ SWWM_CLUCY2 = "(For the Tewi font, which I've used for many many years)"; SWWM_CKEKS2 = "(For libeye, assistance with exception handling code)"; SWWM_CZN2 = "(For slope alignment code)"; SWWM_CVAL2 = "(For the custom Nashgore footprints, and for being kawaii)"; -SWWM_CSLEDGE2 = "(For lore reasons that encouraged me to take part in the Doom modiverse)"; +SWWM_CSLEDGE2 = "(For being a great bud)"; +SWWM_CSLEDGE3 = "(And also for lore reasons that encouraged me to take part in the Doom modiverse)" SWWM_CSPY2 = "(For being so enthusiastic about everything in this mod)"; SWWM_CINSP1 = "Combine Kegan, HyperUltra64, TerminusEst13, Yholl and friends"; SWWM_CINSP2 = "(For inspiration and also for being really cool people)"; @@ -82,16 +86,14 @@ SWWM_REVIVE = "Emergency Reboot System"; SWWM_REVIVECOOLDOWN = "Reboot Cooldown"; SWWM_UNLIMITED = "Unlimited"; SWWM_NONE = "None"; -SWWM_INTERTYPE = "Intermission Art"; -SWWM_INTERDEF = "N/A"; -SWWM_INTERART = "Fanart"; -SWWM_INTER4KOMA = "4Koma"; +SWWM_INTERART = "Intermission Art"; SWWM_BALLUSE = "Lead Balls can Activate Switches"; SWWM_BOSSBAR = "Show Boss Healthbars"; SWWM_BTITLE = "Balance Options"; SWWM_BOSSENHANCE = "Enhance Vanilla Bosses"; SWWM_EXTRAALERT = "Extra Noise Alerts"; SWWM_ACCDAMAGE = "Cumulative Damage Numbers"; +SWWM_MAXTARGETDIST = "Max. Healthbar Distance"; SWWM_MAXTARGETS = "Max. Displayed Healthbars"; SWWM_MAXDAMNUMS = "Max. Displayed Damage/Heal Numbers"; SWWM_MAXSCORENUMS = "Max. Displayed Score Numbers"; @@ -129,6 +131,7 @@ SWWM_DROPS_NONE = "Disabled"; SWWM_DROPS_AMMO = "Ammo Only"; SWWM_DROPS_WEAPONS = "Ammo And Weapons"; SWWM_SHOTGIB = "Buckshot can Gib"; +SWWM_NOSCARE = "Disable Eye Obelisk Jumpscare"; TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player."; TOOLTIP_SWWM_MUTEVOICE = "Control what gets muted, if you'd rather have a more silent protagonist."; TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you."; @@ -158,12 +161,13 @@ TOOLTIP_SWWM_SHADERS = "Use postprocess shaders for things like powerups and the TOOLTIP_SWWM_OTHERVOICE = "Allows you to hear other player's voice lines, provided you're close enough."; TOOLTIP_SWWM_REVIVE = "Allows the player to get back up after dying by pressing Fire. Has a configurable cooldown."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Time in seconds of downtime after using a reboot, where if you die again, you can't get back up. Set to 0 to allow unlimited reboots."; -TOOLTIP_SWWM_INTERTYPE = "Choose what to display in the background during intermissions."; +TOOLTIP_SWWM_INTERART = "If enabled, displays randomly selected fanart during intermissions."; TOOLTIP_SWWM_BALLUSE = "Lead Ball projectiles can remotely activate use switches (excluding exits). Potentially OP."; TOOLTIP_SWWM_BOSSHEALTHBARS = "Show a healthbar for vanilla boss encounters at the bottom of the screen. Just like Dark Souls™!"; TOOLTIP_SWWM_UPGRADEBOSSES = "Buffs the health of vanilla bosses in order to make the fights more \"fair\" with this mod, and less prone to instant wins."; TOOLTIP_SWWM_EXTRAALERT = "Allows monsters to hear things such as bouncing projectiles, ricocheting bullets, and more. Due to the recursive nature of the A_AlertMonsters function, this has a MASSIVE performance hit on very complex maps."; TOOLTIP_SWWM_ACCDAMAGE = "Damage dealt to a target within the same tic will be grouped into a single damage number, which may make the screen less cluttered in most cases."; +TOOLTIP_SWWM_MAXTARGETDIST = "Limit the farthest distance at which healthbars for hostile targets are shown. Note that player healthbars in co-op will always show regardless of distance. Non-hostiles are always shown at one quarter of this distance."; TOOLTIP_SWWM_MAXTARGETS = "Limit the amount of healthbars to display on-screen. Helps keep the screen less cluttered."; TOOLTIP_SWWM_MAXDAMNUMS = "Limit the amount of damage/healing numbers to display on-screen. Helps keep the screen less cluttered."; TOOLTIP_SWWM_MAXSCORENUMS = "Limit the amount of score numbers to display on-screen. Helps keep the screen less cluttered."; @@ -184,9 +188,9 @@ TOOLTIP_SWWM_NOTRACK = "Completely disables combat tracking (responsible for hea TOOLTIP_SWWM_YNYKRONALERT = "By default the Ynykron wakes all monsters in the map. This may sometimes cause issues (and would destroy your framerate with huge monstercounts)."; TOOLTIP_SWWM_MENUPAUSE = "In single player, the Demolitionist Menu by default will pause everything. You can disable this if you want a more Souls-like experience (or if you want to have a read while actively waiting for some looooooooong elevator or other timed event)."; TOOLTIP_SWWM_FUNTAGS = "Replaces the names of various vanilla monsters with funny alternatives."; -TOOLTIP_SWWM_OMNIBUST = "Allows any weapon to potentially bust walls."; +TOOLTIP_SWWM_OMNIBUST = "Allows any weapon to potentially bust walls. This is obviously broken as fuck."; TOOLTIP_SWWM_SUPERFUEL = "Your fuel never runs out."; -TOOLTIP_SWWM_PARTYTIME = "Killed enemies shoot out a cloud of confetti."; +TOOLTIP_SWWM_PARTYTIME = "When something dies, it shoots out a cloud of confetti."; TOOLTIP_SWWM_SIMPLEFOG = "Replaces particle-based teleport fogs with simple sprites. Useful if they cause performance issues."; TOOLTIP_SWWM_BIGTAGS = "By default name labels on healthbars are shown with a small, compact font. Enabling this will use a bigger one."; TOOLTIP_SWWM_INTERMUSIC = "If enabled, intermission screens will use the original music from the current IWAD or map pack."; @@ -196,6 +200,7 @@ TOOLTIP_SWWM_MAXCASINGS = "Caps the maximum amount of casings and spent magazine TOOLTIP_SWWM_MAXDEBRIS = "Caps the maximum amount of rubble from explosions and others. Surpassing this limit will cause the excess to fade out."; TOOLTIP_SWWM_ENEMYDROPS = "By default, enemies only drop ammo for a better progression. In maps with excessive amounts of enemies, it's recommended to disable this entirely."; TOOLTIP_SWWM_SHOTGIB = "Some people don't like this for some reason, so here it is as an option."; +TOOLTIP_SWWM_NOSCARE = "The Eye Obelisk collectable plays a loud jumpscare with rapidly flashing images, which may be potentially harmful for some people."; // knowledge base SWWM_COMINGSOON = "(coming soon)"; SWWM_MISSTAB = "Mission"; diff --git a/language.es_base b/language.es_base index 5e1ed055a..032259b20 100644 --- a/language.es_base +++ b/language.es_base @@ -623,8 +623,10 @@ FN_MBOSS_FUN = "Tío Mágico"; FN_CBOSS_FUN = "Tío Santurrón"; FN_HERESIARCH_FUN = "Hostia Puta"; // Additional tags +FN_BOSSBRAIN_FUN = "¡ESPERABAS A JOHN ROMERO PERO ERA YO, MARISA!"; FN_KEEN_FUN = "Arruinado por Bethesda"; FN_VOODOO = "Muñeco Vudú de %s"; +FN_MASHIRO = "Dama Blanca"; // obituaries O_PUSHER = "%k le abrió unos agujeros de ventilación a %o."; O_DEEPIMPACT = "%o fue impactad@[ao_esp] profundamente por %k."; @@ -658,12 +660,11 @@ O_DOKIDOKI = "%o fue derrotad@[ao_esp] por el poder del amor de %k."; O_MOTH = "%%o fue asaltad@[ao_esp] por las polillas de %s."; O_MOTH2 = "%o fue asaltad@[ao_esp] por polillas."; O_MASHIRO1 = "%o debería haber dejado la luz encendida."; -O_MASHIRO2 = "%o ahora pertenece a Mashiro."; +O_MASHIRO2 = "%o ahora pertenece a la Dama Blanca."; O_MASHIRO3 = "%o ha cometido un error terrible."; O_MASHIRO4 = "%o desapareció misteriosamente."; -O_MASHIRO5 = "%o es ahora parte de una recreación en vivo de Layers of White."; -O_MASHIRO6 = "%o enfureció a la polilla equivocada."; -O_MASHIRO7 = "%o y Mashiro están ahora junt@[ao_esp]s PARA SIEMPRE."; +O_MASHIRO5 = "%o enfureció a la polilla equivocada."; +O_ENDLEVEL = "Parece que a %o le toca hacer pistol start."; // edited vanilla obituaries OB_SUICIDE = "%o se hizo un sudoku."; OB_FALLING = "%o se partió las patas."; @@ -766,11 +767,14 @@ 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."; +D_MASHIRO = "\cjSabe donde estás...\c-"; +D_OBELISK = "\cjNo deberías haber hecho eso...\c-"; SWWM_YNYKRONREADY = "Artefacto Ynykron listo para disparar."; SWWM_TITLEPRESENTS = "presenta"; SWWM_TITLEMODBY = "un mod de \cxMarisa Kirisame"; SWWM_YOURSELF = "Tú"; SWWM_DOKIDOKI = "El Poder del Amor™"; +SWWM_GRAVKILL = "Gravedad"; // boss tags BT_BRUISERS = "Hermanos de Guerra"; BT_CYBIE = "Tirano de Babel"; @@ -862,6 +866,15 @@ SWWM_INTERTIP37 = "Los perdigones de sal de Kinylum son suficientemente potentes SWWM_INTERTIP38 = "Aunque no te interese leer el lore, sigue siendo util comprobar las entradas de armas y otros items para aprender más sobre su uso. Por supuesto, tambien puedes simplemente experimentar por tu cuenta."; SWWM_INTERTIP39 = "Si notas bajones cuando hay muchos efectos de sonido activos, se recomienda desactivar el HRTF en las opciones de OpenAL, si está activado."; SWWM_INTERTIP40 = "El Sensor de Items puede ayudar a detectar items que de otro modo serían difíciles de ver entre el caos de pilas de cuerpos tras una batalla. ¡Con una Omnivisión, puedes incluso ver donde hay items a través de las paredes!"; +SWWM_INTERTIP41 = "¡Comparte amor! El gesto de \"soplar beso\" no es solo un truquillo gracioso para aturdir enemigos. Apuntado a aliados, tiene efectos curativos con cada impacto. Además, ambos efectos son potenciados por el Ragekit. ¡Comparte ese AMOR FURIOSO!"; +SWWM_INTERTIP42 = "Los Cacodemonios son redondos y con forma de amigo. Desafortunadamente puede que te tuesten o te coman la cara si intentas acariciarlos."; +SWWM_INTERTIP43 = "Saya se zampa bolsas enteras de maíz frito con tal frecuencia que tiene permanentemente su aroma a pesar de ducharse con regularidad. Aun así, hay quien encuentra agradable este olor."; +SWWM_INTERTIP44 = "Las aventuras de Demo-chan se muestran en directo para todo el mundo. Son bastante populares, tambien."; +SWWM_INTERTIP45 = "Este mod puede contener política™. Si eres sensible a la política™ por favor deja de jugar ahora mismo. Tambien sugiero alejarse de internet, ya que tengo entendido que está también lleno de política™."; +SWWM_INTERTIP46 = "Al encontrar (o comprar) una segunda Pistola de Explodium podrás alternar a un modo dual. Solo por que sí (y porque alguien hizo fanart con esto y TENÍA que añadirlo)."; +SWWM_INTERTIP47 = "La duración de los efectos de powerup se va apilando con cada uso."; +SWWM_INTERTIP48 = "Las vidas negras importan."; +SWWM_INTERTIP49 = "El botón de granada rápida te permitirá lanzar un Cargador de Explodium en cualquier momento, sin importar qué otra arma estés usando."; +SWWM_INTERTIP50 = "El capitalismo es una enfermedad, un cáncer que conducirá este mundo a la ruina si no lo eliminamos pronto."; // intermission fanart SWWM_FANART = "Arte: "; -// intermission 4komas (TBD) diff --git a/language.es_lore b/language.es_lore index 038029356..e7c5033b5 100644 --- a/language.es_lore +++ b/language.es_lore @@ -10,7 +10,7 @@ SWWM_LORETXT_EXPLODIUMGUN = "\cxDesignación:\c-\n\cf Pistola de Explódium\c-\n SWWM_LORETXT_UAC = "\cxNombre:\c-\n\cf Union Aerospace Corporation\c-\n\cxClasificación:\c-\n\cf Corporación de Investigación Científica y Militar\c-\n\cxLocalización:\c-\n\cf Tierra, Marte y Júpiter\c-\n\cxPágina Web:\c-\n\cf https://ua-corp.com\c-\n\nFundada en 2015 por \cfThomas Kelliher\c- como una compañía pariente de la \cfUnion Aerospace Armed Forces (UAAF)\c-, la llegada al poder de la \cfUAC\c- comenzó en 2025 con sus famosas \cfExpediciones Conjuntas a Marte\c-. Tras las cuales sus actuales oficinas, un vasto complejo conocido como \cfMars City\c-, se construyeron en el planeta rojo, junto con varios otros puestos en las lunas de \cfFobos\c- y \cfDeimos\c-. Mucha controversia rodea a esta megacorporación, la cual es no solo conocida por realizar toda clase de experimentos con un potencial claro para el desastre (no sin mencionar la mayoría de ellos teniendo aplicaciones militares), sino también por incontables acusaciones de violar los derechos del trabajdor.\n\nTras los eventos de la \cfCicatriz Blanca\c- en 2077, la UAC fue uno de los cuerpos principales encargados de la reconstrucción de los antíguos \cfEstados Unidos\c-, finalmente asegurando su posición de poder en la reformada \cfUnión de Estados\c-, no solo como el mayor cuerpo militar de la Tierra, sino también como uno con vasto control económico y político.\n\nEn años recientes, la UAC se ha dedicado a experimentos de teletransporte. A partir de éstos, encontraron finalmente la forma de viajar a otros mundos. Específicamente, al \cfInfierno\c-. A pesar de las claras implicaciones peligrosas de algo así, mucho se investigó sobre ese mundo desde el primer contacto en 2144, y aunque se ha notado cierta hostilidad de los nativos, no pareció que hubiera signos de que estas criaturas se conviriesen en una amenaza mayor... hasta el año siguiente.\n\nEsta llegada al Infierno de la UAC había coincidido desafortunadamente con un periodo de gran desorden político, el cual en 2145 llegó a su punto álgido, cuando los archidemonios generales dieron un golpe de estado, derrocando a la \cfFamilia Real Kuriste\c-, y asentándose como los nuevos líderes. Enloquecidos por el poder, se centraron en la guerra y conquista, y justo ocurrió que los humanos estaban ahí, así que nos convertimos en su primer objetivo.\n\nHabiendo puesto de su parte a un miembro del equipo científico de la UAC, los ayudó con su primera incursión en Mars City, la cual sirvió como una primera prueba de sus recien formados ejércitos. Sin embargo, fueron derrotados, habiendo subestimado severamente las habilidades de los humanos, y su potencia de fuego superior. Sus planes iniciales tuvieron que ser revisados, sus ejercitos necesitaben ser más fuertes, más grandes. La humanidad sería aplastada por sus números. Durante el tiempo de preparación de su ataque, se estima que la población del infierno creció de 370 millones a 9.3 mil millones, gracias a una obscena expansión de sus terrenos de cría, y avances en biosíntesis demoníaca.\n\nA principios de 2148, y con la UAC no habiendo aprendido su lección, los experimentos de teletransporte continuaron, esta vez limitados sólo a viajes a pequeña escala entre los puestos de Fobos y Deimos. Con el tiempo, los voluntarios que atravesaban los portales comenzaron a sufrir horribles mutaciones, en algunos casos llegando a resultar en una \"explosión de cuerpo entero\". No faltó mucho hasta que se dieron cuenta de lo que estaba pasando: su portal estaba siendo manipulado. Pronto, demonios invasores comenzaron a aparecer por ambos lados, en gran cantidad. Ambas bases lunares finalmente cayeron, y un destacamiento de Mars City fue enviado a investigar este \"silencio repentino\".\n\nLo que ocurrió después fue el principio de lo que se ha llamado \cfEpisodios de Doom\c-. Tal y como relató la UAC tras estos eventos, un único marine logró, por su cuenta, derrotar a todas las fuerzas invasoras, llevando su lucha hasta el mismísimo Infierno. Sin embargo, las hazañas del tal \cfMarine de Doom\c- solo sirvieron para enfurecer más a los archidemonios generales, y entonces fue cuando comenzó la invasión de la Tierra. Aunque muchos han visto esto como \"el fin del mundo tal y como lo conocemos\", la UAC sigue enviando un mensaje de esperanza para todos, jurando que todo será resuelto.\n\n\cxNotas de Saya:\c-\n\cfOh, la \"gran y poderosa\" UAC, puñado de cerdos capitalistas comemierdas, eso es lo que son. Fijaos bien todos, esto es lo que os hace el capitalismo desenfrenado. Sí, creo que ya te has enterado bien de que odio a esta puta chusma.\c-\n\n\cfA ver... ¿Experimentos militares ilegales? Sí. ¿Andar jodiendo con viajes interdimensionales? También. ¿Potencialmente causando el fin del mundo? Pues eso también. Si es que los muy hijos de puta estos REALMENTE son una jodida megacorporación malvada, hostia puta...\c-\n\n\cf¿Pero sabes que? No me voy a quedar aquí con el culo plantado esperando a que el supuesto \"solucionador de problemas\" este, su soldadito héroe legendario vaya y lo arregle todo. Como si ESO fuera a pasar. No, esta es precisamente la razón de que TÚ estés aquí, Demo-chan. Esto es lo que estás destinada a cambiar (buah, vale, ya estoy empezando a sonar tope de cliché). Pero sí, te hemos preparado para esto, eres el robot de combate definitivo, el orgullo de Akari Labs y todo ese rollo, tú PUEDES salvar el mundo, estoy segurísima.\c-"; SWWM_LORETXT_UAC2 = "\cxNombre:\c-\n\cf Union Aerospace Corporation\c-\n\cxClasificación:\c-\n\cf Corporación de Investigación Científica y Militar\c-\n\cxLocalización:\c-\n\cf Tierra, Marte y Júpiter\c-\n\cxPágina Web:\c-\n\cf https://ua-corp.com\c-\n\nFundada en 2015 por \cfThomas Kelliher\c- como una compañía pariente de la \cfUnion Aerospace Armed Forces (UAAF)\c-, la llegada al poder de la \cfUAC\c- comenzó en 2025 con sus famosas \cfExpediciones Conjuntas a Marte\c-. Tras las cuales sus actuales oficinas, un vasto complejo conocido como \cfMars City\c-, se construyeron en el planeta rojo, junto con varios otros puestos en las lunas de \cfFobos\c- y \cfDeimos\c-. Mucha controversia rodea a esta megacorporación, la cual es no solo conocida por realizar toda clase de experimentos con un potencial claro para el desastre (no sin mencionar la mayoría de ellos teniendo aplicaciones militares), sino también por incontables acusaciones de violar los derechos del trabajdor.\n\nTras los eventos de la \cfCicatriz Blanca\c- en 2077, la UAC fue uno de los cuerpos principales encargados de la reconstrucción de los antíguos \cfEstados Unidos\c-, finalmente asegurando su posición de poder en la reformada \cfUnión de Estados\c-, no solo como el mayor cuerpo militar de la Tierra, sino también como uno con vasto control económico y político.\n\nEn años recientes, la UAC se ha dedicado a experimentos de teletransporte. A partir de éstos, encontraron finalmente la forma de viajar a otros mundos. Específicamente, al \cfInfierno\c-. A pesar de las claras implicaciones peligrosas de algo así, mucho se investigó sobre ese mundo desde el primer contacto en 2144, y aunque se ha notado cierta hostilidad de los nativos, no pareció que hubiera signos de que estas criaturas se conviriesen en una amenaza mayor... hasta el año siguiente.\n\nEsta llegada al Infierno de la UAC había coincidido desafortunadamente con un periodo de gran desorden político, el cual en 2145 llegó a su punto álgido, cuando los archidemonios generales dieron un golpe de estado, derrocando a la \cfFamilia Real Kuriste\c-, y asentándose como los nuevos líderes. Enloquecidos por el poder, se centraron en la guerra y conquista, y justo ocurrió que los humanos estaban ahí, así que nos convertimos en su primer objetivo.\n\nHabiendo puesto de su parte a un miembro del equipo científico de la UAC, los ayudó con su primera incursión en Mars City, la cual sirvió como una primera prueba de sus recien formados ejércitos. Sin embargo, fueron derrotados, habiendo subestimado severamente las habilidades de los humanos, y su potencia de fuego superior. Sus planes iniciales tuvieron que ser revisados, sus ejercitos necesitaben ser más fuertes, más grandes. La humanidad sería aplastada por sus números. Durante el tiempo de preparación de su ataque, se estima que la población del infierno creció de 370 millones a 9.3 mil millones, gracias a una obscena expansión de sus terrenos de cría, y avances en biosíntesis demoníaca.\n\nA principios de 2148, y con la UAC no habiendo aprendido su lección, los experimentos de teletransporte continuaron, esta vez limitados sólo a viajes a pequeña escala entre los puestos de Fobos y Deimos. Con el tiempo, los voluntarios que atravesaban los portales comenzaron a sufrir horribles mutaciones, en algunos casos llegando a resultar en una \"explosión de cuerpo entero\". No faltó mucho hasta que se dieron cuenta de lo que estaba pasando: su portal estaba siendo manipulado. Pronto, demonios invasores comenzaron a aparecer por ambos lados, en gran cantidad. Ambas bases lunares finalmente cayeron, y un destacamiento de Mars City fue enviado a investigar este \"silencio repentino\".\n\nLo que ocurrió después fue el principio de lo que se ha llamado \cfEpisodios de Doom\c-. Tal y como relató la UAC tras estos eventos, un único marine logró, por su cuenta, derrotar a todas las fuerzas invasoras, llevando su lucha hasta el mismísimo Infierno. Sin embargo, las hazañas del tal \cfMarine de Doom\c- solo sirvieron para enfurecer más a los archidemonios generales, y entonces fue cuando comenzó la invasión de la Tierra. Y tan rápido como empezó, fue igualmente terminada. El \cfDemolicionista\c-, una obra colaborativa de \cfAkari Labs\c- y sus muchos socios, por su propia cuenta, puso fin a la invasión, eliminando eficientemente a todo demonio que había salido de los portales, y después de eso, adentrándose hasta el mismo Infierno, al igual que el Marine de Doom, y derrotando al \cfIcono del Pecado\c-, quien comandaba los ejércitos invasores.\n\nTras este evento, la UAC sufrió una gran reconstrucción, ya que la mayor parte de su junta directiva falleció durante la invasión. Libre ahora de su control, el gobierno de la Unión de Estados supervisaba estrictamente sus acciones, asegurándose de nunca más fuesen un problema. Aun así, otros tres incidentes ocurrieron, a pesar de tener mejores protocolos de seguridad. En una de sus bases en Io, continuaron de nuevo los experimentos de teletransporte, esta vez preparados para cualquier cosa. Como fue previsto, un pequeño grupo de demonios apareció, pero fue eliminado rápidamente. Lo que NO habían previsto, sin embargo, fue que esto había sido solo una distracción. Una nave no identificada se había aproximado repentinamente a la base, aunque inicialmente se asumió que era el típico reparto de provisiones anuales. Esta nave era de construcción demoníaca, imitando la misma tecnología de la UAC. Una cantidad descomunal de demonios fueron desatados sobre la base, y muchos murieron rápidamente o fueron poseídos. Sin embargo, el Marine de Doom también estaba allí, y como fue de esperar, una vez más hizo lo que mejor sabía hacer.\n\nOtro incidente más acabó sucediendo, en una instalación de investigación de posición desconocida. Allí, la UAC estaba trabajando en una forma de prevenir activamente que estas invasiones ocurriesen, a través de unos \cfDispositivos Aceleración Cuántica\c-. Estas máquinas supiestamente servirían para cerrar cualquier portal que los demonios pudieran producir para entrar en nuestro mundo, y eso hicieron, al principio. Un portal apareció en la instalación, y aunque algunos demonios consiguieron entrar, fue cerrado inmediatamente y esta pequeña invasión fue suprimida. Pareció entonces que el experimento fue un éxito, pero los demonios rápidamente se dieron cuenta de lo que estaba pasando, y al día siguiente, siete portales se abrieron simultáneamente por toda la instalación. Llevó una hora cerrar seis de ellos, pero llegado ese punto las fuerzas invasoras los superaban en número, y rápidamente cayó todo en el caos de nuevo. Y ciertamente, una vez más, la UAC decidió enviar a su formidable recadero para arreglarlo, y eso hizo, otra vez, como siempre. \cf[nota de ed.: Saya, se te ve el sarcasmo]\c-\n\nCon un último golpe al \cf\"Portero\"\c-, el titánico demonio responsable de la creación de estos portales, pareció que las invasiones por fin terminarían para siempre. Y ciertamente, durante muchos años, reinó la tranquilidad, y no se reportaron más incidentes. Los Episodios de Doom fueron entonces archivados, y el Marine de Doom fue retirado de servicio.\n\nEn 2150, la compañía finalmente clausuró todos sus experimentos de teletransporte, y en un anuncio público, el CEO \cfIan Kelliher\c- declaró que la compañía ahora desviaría su atención principal a reparar todos los daños que sus actos trajeron a la Tierra. Algo que, segun estimaciones iniciales, tardaría más de cincuenta años.\n\nDiez años después de este anuncio, unas noticias preocupantes llegaron a la Tierra. Se habían detectado fuerzas demoníacas en varias bases abandonadas de la UAC, las cuales se creyeron completamente limpiadas por un barrido de radiación. Algo, de alguna forma, sobrevivió allí, y estaba reviviendo uno por uno los cuerpos descompuestos de incontables demonios caídos. Viendo que no había otra elección, los Episodios de Doom fueron reabiertos, y el muy malhumorado Marine de Doom fue puesto en marcha de nuevo y enviado allí, esta vez, tras su eventual éxito, tomando la decisión de permanecer en el Infierno, para siempre, para asegurarse de que los demonios nunca jamás intenten atacar. Desde entonces, no se ha podido contactar con él.\n\nDe la poca información que se pudo recuperar del otro lado de todo esto, del propio Infierno, se sabe que su matanza fue imparable. Derrotó a los demonios comandantes que quedaban. Decenas de miles de demonios, en su furia ciega, marcharon todos hacia su propia muerte por su mano. Hubo esperanza entre la población civil de que este humano solitario, ahora rebautizado con el título de \cfDoom Slayer\c-, pondría fin a la tiranía de los archidemonios generales, pero ellos tenían sus propios planes para él. Sabían bien que si llegaba a la capital de \cfDis\c- una vez más, no podrían detenerlo. Así que una trampa fue preparada, y cayó en ella. Fue entonces que \cfErebus\c-, el líder de los generales, lo hizo desaparecer, muy lejos, más allá de los confines de este universo, para que nunca jamás pudiese volver a este mundo.\n\n\cxNotas de Saya:\c-\n\cfUn lío muy gordo, todo por que la UAC es una mierda y el mal. Aunque me alegro, porque pude ver como la caída del niñato patético ese, puto idiota, que se creía el \"hombre más importante del mundo\", y ahora es el perrito faldero del gobierno de la Unión de Estados. Es que me muero de la risa, oye.\c-\n\n\cfOh ya, ¿la parte esa del final, de \"la historia del otro lado\"? Sí, puedes darle las gracias a mi \"fuente especial\". Cytho-sama tiene un monte de contactos en el Infierno, eso seguro. Nunca me ha hablado del tema, pero supongo que fue alguien importante hace tiempo, antes de venir a la Tierra y \"reformarse\". Oh bueno. Aquí acaba la historia de la Epístolas de Dumbo estas o lo que sea, uno de los mayores ejemplos de las consecuencias del capitalismo desenfrenado™.\c-"; SWWM_LORETXT_MAIDBOT = "\cxNombre Completo:\c-\n\cf Maidbot \"Meido\" Miyamoto\c-\n\cf Meidobot (nombre artístico)\c-\n\cxNacionalidad:\c-\n\cf Japonesa\c-\n\cxFecha de Nacimiento:\c-\n\cf 2017-07-07\c-\n\cxTwitter:\c-\n\cf @meidobot\c-\n\nSiendo el primer proyecto de IA de \cfSaya Miyamoto\c-, \cfMaidbot\c- inicialmente era poca cosa, sirviendo principalmente como un robot de limpieza con una inteligencia muy limitada, mayormente capaz de recibir órdenes simples. Con el tiempo, Saya expandiría sus habilidades, permitiendo una interactividad más compleja, pero aún limitada. Saya siempre sentía que a pesar de sus esfuezos, a pesar de lo mucho que Maidbot gradualmente parecía más \"real\", nunca era suficiente. Al final, era \"śolo una máquina\".\n\nNotablemente, se ha de mencionar el intento de Saya de hacerla cantante, algo que tuvo un éxito inesperado, realmente. Tras su debut inicial, más y más artistas compondrían canciones para que Maidbot las interpretara. En 2020, Maidbot se había convertido en una completa \"Idol Artificial\", suficientemente famosa como par tomar parte en los Juegos Olímpicos de Tokyo, cantando el himno nacional.\n\nTras el \cfEvento Luna\c- de 2021, Saya recibió la visita de \cfZanaveth Nekuraku II\c-, jefa de investigación de IA en \cfNekuratek\c-, el mayor gigante tecnológico \cfNukuri\c-. Curiosa por la cultura humana, decidió conocerla, ya que tenían intereses similares. Zanaveth quedó bastante impresionada por todo lo que \cfAkari Labs\c- había logrado, y mostró un interés especial por Maidbot, también.\n\nHabiendo entablado amistad rápidamente con Saya llegado este punto, se ofreció a mejorar la IA de Maidbot con la tecnología más avanzada que tenían: El \cfFramework de IA Nekuronbot\c-. Habiendo aceptado esta oferta, Maidbot \"renació\" de su anterior forma limitada. Era ahora completamente capaz de pensamiento individual, libre albedrío y, más importantemente, emociones.\n\nNo es sorpresa que Saya siempre sintió algo por ella, al mismo tiempo que era completamente consciente de la imposibilidad de que ella correspondiera a su amor, pero ahora, todo había cambiado. Maidbot lo sabía, y confesó que en su nueva forma, ella podía \"sentir algo\" también. Con el tiempo, logró comprender mejor estos sentimientos, y se convertiría en la primera novia de Saya.\n\nTras estos eventos, Maidbot pasó a formar parte de la familia, adoptando el apellido Miyamoto. Mucho después, y con la ayuda de Zanaveth, Saya comenzaría la creación de más maidbots, deseando que todo el mundo pudiera tener a su propia Maidbot. Se estableció un servicio de adopción en 2023, donde las maidbots, quienes eran criadas y preparadas en Akari Labs, podrían entrevistarse con adoptadores en potencia, permitiendo tener la decisión final sobre con quién vivir. Este servicio fue completamente gratuíto, ya que la compañía tenía más que suficientes fondos con sus otros servicios, lo cual incrementó su popularidad aun más. Todos querían tener su propia Maidbot, y las Maidbots en sí eran felices de tener una familia con la que vivir.\n\n\cxNotas de Saya:\c-\n\cfMeido-chan es tan dulce~ Y su voz es tan bonita~\c-\n\n\cfSeguro que las dos os haréis muy amigas algún día, eso va a molar. Las robotitas cuquis deberían estar unidas.\c-\n\n\cfAh, Zana-sama, bendita seas tú y tus skills tope de guays, haciendo realidad mis sueños. Recuerdo que siempre soñaba que Meido-chan se volviera consciente y me confesara su amor, y pensaba que eso era TOTALMENTE imposible. Ja... tonta de mí.\c-\n\n\cfJeje... Desde luego me alegro mucho de hacerla \"completa\", por cierto... Mejor decisión de mi vida. Deja que te diga, cuando hacemos \"cositas\" las dos... es como estar en el cielo~\c- \cg♥\c-"; -SWWM_LORETXT_DEVANIKNA = "\cxNombre:\c-\n\cf Devanikna\c-\n\cxClasificación:\c-\n\cf Tierra de guerreros\c-\n\cxLocalización:\c-\n\cf Ixxeney, sistema Xathar, Coalición X'Animen\c-\n\n\cfDevanikna\c- es una de las dos mayores naciones de \cfIxxeney\c-, el mayor planeta del \cfsistema Xathar\c-. Es el hogar de una raza humanoide conocida como los \cfDevanikan\c-, guerreros fieros que las leyendas dicen que fueron traídos a este mundo por una entidad conocida como el \cfDragón Ancestro\c-, a quien adoran como su dios. En su lengua, el nombre de \"Devanikan\" significa \"Sangre de Dragón\".\n\nLa socieda Devanikan está dividida principalmente en varios clanes, muchos de ellos existiendo desde hace miles de años. Actualmente, el \cfClan Unissix\c- posee el liderazgo de toda la nación, habiendo sido elegidos de forma unánime por el resto de la población tras su derrota del demente \cfLord Ni'Kai\c-, del rival \cfClan Devenko\c-, quien anteriormente había tomado el mando por la fuerza e instaurado un gobierno totalitario.\n\nUno de los aspectos más notables de la raza Devanikan es que los guerreros entrenados tienen la habilidad de transformarse en dragones. Esta transformación es completamente mágica en su naturaleza, ya que sus cuerpos de dragón parecen ser proyecciones, en lugar de cuerpos físicos completos. Una vez en esta forma, su fuerza aumenta considerablemente, y se convierten en potentes conductos para hechizos, dándoles una mayor ventaja en la mayoría de combates. Sin embargo, es también muy agotador para sus cuerpos, así que es algo que solo usan en casos excepcionales.\n\nLa tierra de Devanikna en sí está dividida en varias ciudades, la mayoría cubriendo las vastas áreas boscosas que rodean el mar Noxan, donde se encuentra la ciudad capital de \cfDekhasa\c-. La capital es un destino turístico muy popular dada su particular geografía: grandes pilares de roca saliendo de las profundidades, a veces alcanzando alturas de hasta 11 kilómetros sobre el nivel del mar. Los Devanikan construyeron sus casas alrededor de las paredes de estos pilares, y se enorgullecen de la impresionante durabilidad y estabilidad de su trabajo arquitectónico.\n\nEntre los varios clanes, hay un número considerable de \"héroes de leyenda\" documentados. Guerreros cuyas hazañas son conocidas y alabadas por todos. Notables son gente como \cfDeva Unissix\c-, hijo del padre fundador del clan, y quien llevó a sus camaradas a la batalla contra Ni'Kai, o su nieta \cfDeneva Unissix\c-, la cual en solitario consiguió derrotar al gran golem \cfMero El Destructor\c-, quien durante siglos había propagado el terror sobre Ixxeney, habiendo incluso sido considerado invencible por los poderosos titanes de la nación vecina de \cfXekke\c-.\n\nUno de los rasgos poco conocidos de los Devanikan es su fuerte defensa de la pureza racial. Cuando la princesa \cfDevai Unissix\c-, actual jefa del clan, anunció su enlace con \cfSerwand Nerukousei\c-, una quimera construida por un mago errante, su marido comenzó a recibir amenazas de la población, llamándolo \"bestia con forma de hombre\" y acusándolo de corromper el linaje Unissix con el propósito de tomar el control de la nación. Estas amenazas se extendieron tambien a sus hijos, los cuales fueron denotados como \"abominaciones cruzadas\" de sangre Devanikan y quimérica. No fue hasta los primeros grandes logros como guerrera de Deneva que la persecución que sufrieron terminó. Desde entonces, la hostilidad a la que se enfrentaban ha disminuido gradualmente, a medida que nuevas generaciones fueron aceptando la mezcla de razas.\n\n\cxNotas de Saya:\c-\n\cfSí, la gente de Misa mola mucho. Bueno, menos por lo del racismo. Eso sí que es una mierda muy grande, desde luego. Oí de Zana-sama que si no hubiera conocido a Misa entonces, probablemente se habría quitado la vida por todo lo que estaba pasando. Joder... Pero al menos, ahora vive feliz con Zana-sama (suertuda), y sí, las cosas van mejorando comparadads con como eran antes.\c-\n\n\cfSabes, todo este tema, me recuerda a una vieja serie de JRPGs a la que jugaba hace un porrón de años, que iba también de gente con sangre de dragón... pero ya ni me acuerdo de como se llamaba. Coño, si hasta puse a Misa a jugarlos y no paraba de hablar de todas las similtudes y cosas así. Oh bueno, guerreros molones de dragones, fuck yeah.\c-"; +SWWM_LORETXT_DEVANIKNA = "\cxNombre:\c-\n\cf Devanikna\c-\n\cxClasificación:\c-\n\cf Tierra de guerreros\c-\n\cxLocalización:\c-\n\cf Ixxeney, sistema Zenna, Coalición X'Animen\c-\n\n\cfDevanikna\c- es una de las dos mayores naciones de \cfIxxeney\c-, el mayor planeta del \cfsistema Zenna\c-. Es el hogar de una raza humanoide conocida como los \cfDevanikan\c-, guerreros fieros que las leyendas dicen que fueron traídos a este mundo por una entidad conocida como el \cfDragón Ancestro\c-, a quien adoran como su dios. En su lengua, el nombre de \"Devanikan\" significa \"Sangre de Dragón\".\n\nLa socieda Devanikan está dividida principalmente en varios clanes, muchos de ellos existiendo desde hace miles de años. Actualmente, el \cfClan Unissix\c- posee el liderazgo de toda la nación, habiendo sido elegidos de forma unánime por el resto de la población tras su derrota del demente \cfLord Ni'Kai\c-, del rival \cfClan Devenko\c-, quien anteriormente había tomado el mando por la fuerza e instaurado un gobierno totalitario.\n\nUno de los aspectos más notables de la raza Devanikan es que los guerreros entrenados tienen la habilidad de transformarse en dragones. Esta transformación es completamente mágica en su naturaleza, ya que sus cuerpos de dragón parecen ser proyecciones, en lugar de cuerpos físicos completos. Una vez en esta forma, su fuerza aumenta considerablemente, y se convierten en potentes conductos para hechizos, dándoles una mayor ventaja en la mayoría de combates. Sin embargo, es también muy agotador para sus cuerpos, así que es algo que solo usan en casos excepcionales.\n\nLa tierra de Devanikna en sí está dividida en varias ciudades, la mayoría cubriendo las vastas áreas boscosas que rodean el mar Noxan, donde se encuentra la ciudad capital de \cfDekhasa\c-. La capital es un destino turístico muy popular dada su particular geografía: grandes pilares de roca saliendo de las profundidades, a veces alcanzando alturas de hasta 11 kilómetros sobre el nivel del mar. Los Devanikan construyeron sus casas alrededor de las paredes de estos pilares, y se enorgullecen de la impresionante durabilidad y estabilidad de su trabajo arquitectónico.\n\nEntre los varios clanes, hay un número considerable de \"héroes de leyenda\" documentados. Guerreros cuyas hazañas son conocidas y alabadas por todos. Notables son gente como \cfDeva Unissix\c-, hijo del padre fundador del clan, y quien llevó a sus camaradas a la batalla contra Ni'Kai, o su nieta \cfDeneva Unissix\c-, la cual en solitario consiguió derrotar al gran golem \cfMero El Destructor\c-, quien durante siglos había propagado el terror sobre Ixxeney, habiendo incluso sido considerado invencible por los poderosos titanes de la nación vecina de \cfXekke\c-.\n\nUno de los rasgos poco conocidos de los Devanikan es su fuerte defensa de la pureza racial. Cuando la princesa \cfDevai Unissix\c-, actual jefa del clan, anunció su enlace con \cfSerwand Nerukousei\c-, una quimera construida por un mago errante, su marido comenzó a recibir amenazas de la población, llamándolo \"bestia con forma de hombre\" y acusándolo de corromper el linaje Unissix con el propósito de tomar el control de la nación. Estas amenazas se extendieron tambien a sus hijos, los cuales fueron denotados como \"abominaciones cruzadas\" de sangre Devanikan y quimérica. No fue hasta los primeros grandes logros como guerrera de Deneva que la persecución que sufrieron terminó. Desde entonces, la hostilidad a la que se enfrentaban ha disminuido gradualmente, a medida que nuevas generaciones fueron aceptando la mezcla de razas.\n\n\cxNotas de Saya:\c-\n\cfSí, la gente de Misa mola mucho. Bueno, menos por lo del racismo. Eso sí que es una mierda muy grande, desde luego. Oí de Zana-sama que si no hubiera conocido a Misa entonces, probablemente se habría quitado la vida por todo lo que estaba pasando. Joder... Pero al menos, ahora vive feliz con Zana-sama (suertuda), y sí, las cosas van mejorando comparadads con como eran antes.\c-\n\n\cfSabes, todo este tema, me recuerda a una vieja serie de JRPGs a la que jugaba hace un porrón de años, que iba también de gente con sangre de dragón... pero ya ni me acuerdo de como se llamaba. Coño, si hasta puse a Misa a jugarlos y no paraba de hablar de todas las similtudes y cosas así. Oh bueno, guerreros molones de dragones, fuck yeah.\c-"; SWWM_LORETXT_CRONOS = "\cxNombre:\c-\n\cf Cronos\c-\n\cxClasificación:\c-\n\cf Clúster de pequeños mundos interconectados\c-\n\n\cfCronos\c- es un lejano universo en miniatura compuesto de pequeños mundos autocontenidos, los cuales están conectados entre ellos por puertas cuánticas que los lugareños llaman \cfPortales Etéreos\c-. Investigaciones históricas demuestran que todos estos pequeños mundos fueron una vez parte de uno mayor y único, pero un \"cataclismo\" no especificado ocurrió hace miles de años, partiendo este mundo en fragmentos desperdigados, los cuales solo pudieron ser reunidos a través de estos portales, creaciones de un grupo de poderosos hechiceros conocidos como los \cfCuatro Sabios\c-. De todos ellos, actualmente solo queda el \cfSabio de Invierno\c-, y se dice que cuando él también muera, los Portales Etéreos desparecerán para siempre, dejando a los varios mundos de Cronos aislados para toda la eternidad.\n\nEn estas tierras, hay tres facciones mayores, la \cfLegión\c-, el \cfArcanum\c-, y la \cfIglesia\c- (realmente llamada así). Anteriormente peleando constantemente entre ellos, ahora están todos bajo el control de \cfKorax\c-, el segundo de los \cfJinetes de Serpiente\c-, y recibieron un gran poder de él. Puede que tengas que combatir con ellos y sus líderes antes de poder enfrentarte al Jinete moviendo los hilos, pero viendo tu experiencia en misiones anteriores, está claro que esto no será un problema.\n\nSin embargo, lo que sí puede que sea problemático, es un rasgo específico de la gente de estas tierras. Su extraña obsesión con complicados puzzles y otros mecanismos, que pondrán a prueba tu paciencia, varias veces durante tu misión. Se dice que la mayoría de estas detestables pérdidas de tiempo fueron ideadas por un antiguo socio de \cfD'Sparil\c-, un noble conocido como \cfLord Vilkreath\c-, quien también pudo estar detrás de algunos de los mecanismos encontrados anteriormente en \cfParthoris\c-. Corren rumores de que él y otro viejo discípulo del Jinete han estado planeando resucitarlo. Esto puede requerir cierta atención en un futuro.\n\n\cxNotas de Saya:\c-\n\cfSí sí, típica historia de fantasía oscura aquí. Especialmente todo eso del \"gran cataclismo\" y tal, ya sabes, \"todo esto antes era campo\" y luego a la mierda todo. He oido esa historia un millón de veces.\c-\n\n\cfEn fin, hay una cosa muy curiosa aquí, los \"Portales Etéreos\" esos. Mira que me pica la curiosidad con eso, son como los portales de Ashley-san, pero son así como... ¿más \"estables\"? Un día de estos tenemos que visitar al tal sabio ese antes de que la palme, y hacerle unas preguntas.\c-\n\n\cfOh ya y... ¿\"puzzles\"? Conociendo nuestra audiencia, seguro que el chat se va a llenar todo de ResidentSleeper cada vez que aparezca uno, jujuju...\c-"; SWWM_LORETAG_BELT = "Cinturón Útil"; SWWM_LORETXT_BELT = "\cxDesignación:\c-\n\cf Cinturón Útil Magnético Adaptable\c-\n\cxFabricante:\c-\n\cf Symnatek\c-\n\cxClasificación:\c-\n\cf Accesorio de Utilidad\c-\n\nUn simple cinturón magnético, adaptable a cualquier tamaño de cintura al desacoplar y acoplar segmentos. La fuerza magnética localizada de cada uno de los segmentos del cinturón es lo suficientemente fuerte como para mantener objetos sujetos firmemente sin importar lo mucho que se mueva el usuario. Es por lo tanto ideal para ti.\n\nNo importa la situación. no importa lo intensa que sea la batalla, nunca perderás tus pertenencias más importantes, como tu llavero o tus contenedores de \cfHammerspace™\c- a cada lado, con tus armas, munición y otros. Aparte de todo esto, el cinturón es también muy útil para facilitar el proceso de recarga de varias armas (al menos aquellas con partes metálicas en sus cargadores).\n\n\cxNotas de Saya:\c-\n\cfNUNCA te pilles los dedos con esto, duele un huevo.\c-"; @@ -26,6 +26,7 @@ SWWM_LORETXT_WHITESCAR = "\cxNombre:\c-\n\cf La Cicatriz Blanca\c-\n\cxClasifica SWWM_LORETXT_ASHLEY = "\cxNombre Completo:\c-\n\cf Ashley Knox\c-\n\cf Axaleyu Yanikov (nombre Anarukon)\c-\n\cxNacionalidad:\c-\n\cf Británica\c-\n\cxFecha de Nacimiento:\c-\n\cf 1964-10-31 (antes de revelación)\c-\n\cf 1887-10-31 (real)\c-\n\cxTwitter:\c-\n\cf @ashley_da_witch (principal)\c-\n\cf @stylish_witch (arte)\c-\n\nNacida en Londres en 1887, hija de \cfYrikha Yanikov\c- y \cfMaxwell A. Knox\c-, \cfAshley\c- es la mayor de tres hijos, los otros siendo \cfAdrian Knox\c-, veterano de la Primera y Segunda Guerras Mundiales, y \cfViola Knox\c-, una bruja en prácticas (todavía hasta la fecha actual de 2148). Pasó la mayor parte de su infancia en Cornualles, despues de que su madre tuviera que darse a la fuga por acusaciones de brujería (las cuales no eran exactamente falsas).\n\nEn 1983, se casó con \cfFredrik Steiner\c-, teniendo los dos un único hijo, \cfChristopher Knox\c-, en 1989. Sin embargo, tras descubrir que era una bruja se divorció de ella, dejándola sola al cuidado de su hijo. A pesar de las dificultades a las que se enfrentaron, Christopher creció y se convirtió en uno de las mentes más prodigiosas de la ciencia de principios del siglo XXI.\n\nAshley nunca destacó mucho hasta principios de los años 2000, cuando, tras varios años de práctica para convertirse en guitarrista, formó su propia banda con un grupo de amigos (algunos de los cuales había conocido durante su estancia en la ciudad mágica de \cfSankaideriha\c- donde estudió brujería).\n\nSu banda, \cfThe Black Rat's Coven\c- (El Aquelarre de la Rata Negra), hizo su debut en 2006, inicialmente compuesto de \cfAshley\c-, \cfPy Kisun\c- (novia de su hermano), \cfWilliam Dusk\c- (pareja de Ashley en aquel entonces), y, notablemente, la diosa de la locura \cfMaruku Sarahabinaku\c-, con la cual Ashley de alguna forma consiguió entablar amistad. Juntos, se popularizaron por su particular mezcla de Rock Gótico, que muchos bien llamaron \"Música de Brujas\".\n\nEn 2027, tras un incidente indeterminado entre ella y William, se separaron, y abandonó la banda. No contento con solo irse, decidió causar mayor daño anunciando que había estado engañándola con su propia nieta, \cfLyra Knox\c-. William fue reemplazado por \cfMykka Psyann\c-, la diosa del lore.\n\nMeses despues de su ruptura, durante un concierto en Japón, Ashley conoció a \cfYui Miyamoto\c-, una gran fan de su banda desde hace años. Las dos comenzaron a salir juntas poco despues, y tras solo unos días, se casaron. Según declaraciones de Ashley durante una entrevista, estaba arrepentida de no haberse dado cuenta antes de que es mucho más feliz con mujeres.\n\n\cxNotas de Saya:\c-\n\cfAhhhhh tía... Bendita sea esta lesbiana, amén.\c- \cg♥\c-\n\n\cfEn serio es que, Ashley-san mola muchísimo, me encanta su música, me encanta su... todo. Y joder es que estoy TAAAAAAAAAAAN celosa de Yu-chan, que puede disfrutar de esos suaves pechotes de bruja cuando le da la gana, mientras que yo solo puedo pedir abrazos y a veces me dice que no y... coño. Pero venga joder, es solo un abrazo, yo solo quiero poder sentir la suavidad™, ¿que problema hay con eso?\c-\n\n\cfBueno, cachondismo aparte, las otras gentes de la banda, molan también, sí. Buen colegueo con todas, bueno, excepto la grandota, Maruku, la tía... ¿el tío?.. ni idea, en serio. Casi no habla, mete miedo... Prefiero no acercarme. Pero Mykka... jo tía, todo un encanto. La verdad es que aprendí la mayoría de lo que sé de dioses y cosas de ella. Siempre le gusta hablar durante horas y horas de \"lore\", y me enseña cosas tope molonas que puede hacer con sus poderes (puede hacer aparecer caramelos de la nada, cosa fina).\c-\n\n\cfY bueno, supongo que también está la otra, la pequeñaja rosa. Puede que tal vez en cierto modo no estemos muy en buenos términos por unos comentarios estúpidos que hice que, sinceramente, ojalá no hubiera hecho. Mira, en mi defensa, no lo sabía y sabes que soy muy MUY directa con las mierdas que suelto a veces, no puedo evitarlo. Y sí, a veces puede que casualmente si alguien me pone voy y le pido que \"mande nudes\" y tal pero... ah, mierda joder.\c-\n\n\cfSí, estoy en su lista de \"indeseables que me han pedido fotopolla\".\c-"; SWWM_LORETAG_EXPLODIUM = "Explódium"; SWWM_LORETXT_EXPLODIUM = "\cxNombre:\c-\n\cf Explódium\c-\n\cxClasificación:\c-\n\cf Material áltamente explosivo\c-\n\nEl \cfExplódium\c- es una mezcla propietaria de elementos áltamente volátiles que explota de forma violenta al ser quemada o golpeada. A diferencia de otros explosivos plásticos de alta gama, su carga explosiva es descomunal, con un gramo del material teniendo el mismo efecto que una típica granada de mano.\n\nEl material fue inventado inicialmente por un grupo anónimo de investigadores, y luego comprado por \cfParker Munch\c-, hijo del fundador de \cfInnovaciones Munch\c-, quien además obtuvo plenos derechos para su reproducción y comercialización. Su primer uso fue en la \cfPistola de Explódium\c-, un \"reventador de bolsillos\" fácil de llevar que se convirtió en un gran éxito de ventas, permitiendo a la compañía escalar a la cima de los mejores fabricantes de armas del mundo, a pesar de que, si no hubiera sido por los intereses de Parker en hacer armas, nunca habrían considerado entrar en ese mercado, permaneciendo como simples productores de aparatos inteligentes.\n\nAunque está generalmente regularizado dados los peligros de su mal uso, es conocimiento de todos que el Explódium se suele vender a menudo en mercados negros, y puede haber sido empleado en la creación de \"pequeñas bombas\", usadas en ciertos actos de terrorismo y brutales asesinatos.\n\n\cxNotas de Saya:\c-\n\cf¡SI ES QUE LO SABÍA! Y todos se reían de mí, ¡JA!\c-\n\n\cf¿Ves? ¡La teoría de las \"pequeñas bombas\" podría haber sido correcta! Sí, ¿quien se rie ahora, cabrones? ¡YO!\c-"; +SWWM_LORETXT_XEKKE = "\cxNombre:\c-\n\cf Xekke\c-\n\cxClasificación:\c-\n\cf Tierra de gigantes\c-\n\cxLocalización:\c-\n\cf Ixxeney, sistema Zenna, Coalición X'Animen\c-\n\n\cfXekke\c- es la mayor nación de \cfIxxeney\c-, el cual es también el mayor planeta del \cfsistema Zenna\c-. Cubriendo las regiones montañosas al oeste de la nación vecina de \cfDevanikna\c-, es el hogar de los \cfXekkian\c-, una raza de humanoides gigantes (con una altura media de 3.87 metros).\n\nLa nación es liderada por el rey y la reina de Xekke, actualmente \cfMal Kuratagon\c-, nieto de la deidad de la locura \cfMaruku Sarahabinaku\c- y \cfMysu Adasake\c-, hija menor de los \cfEnmascarados de Adasake\c-. Adicionalmente, la deidad de la locura también tiene el papel de patrón de los Xekkian.\n\nEntre las muchas civilizaciones miembro de la \cfCoalición X'Animen\c-, los Xekkian son una de las más avanzadas tecnológicamente, aunque sea solo a pocos pasos por detrás de los \cfNukuri\c-. Son bien conocidos por todos sus logros en el campo militar, y muchas de sus armas tienen fama por doquier, tanto como la fuerza de sus ejércitos de titanes. De hecho, la mayoría de miembros de la coalición suelen contratar mercenarios Xekkian para su defensa.\n\nEn cuanto a estructura, toda la nación se divide en sólo cinco ciudades, cada una de ellas separadas lejanamente de las otras, y localizadas en puntos estratégicos entre las montañas. La más pequeña de estas es la ciudad capital de Adkesa, alzada sobre la mayor cima de Ixxeney, y desde la cual se dice que el rey puede observar con claridad las otras cuatro ciudades. También en la capital se encuentra la embajada Nukuri, la cual en 1793 AC fue víctima de un ataque terrorista en respuesta al descontento general con la \cfFamilia Imperal Yathai\c-. Permanecería en ruinas hasta la caída del imperio, tras la cual fue reconstruída immediatamente para demostrar la aprobación por parte de los Xekkian de la victoria del \cfFrente de Liberación de Nahkami\c-.\n\nSobre la gente en sí, lo primero que se hace notar es su elocuencia. El idioma Xekkas hablado por todos es percibido como siniestro y potente con cada palabra pronunciada, bastante adecuado para las intensas personalidades que muchos destilan. Sin embargo, aunque parezcan fieros e imponentes, también saben bien como mostrar su bondad a aquellos que lo necesiten, tal y como enseña su deidad patrón.\n\n\cxNotas de Saya:\c-\n\cfSolo he visto fotos del sitio este, de Zana-sama. Definitivamente mola, todas esas montañas rocosas, las ciudades expandiéndose alrededor, los lagos y cataratas, las zonas volcánicas con ríos enormes de magma y GENTE BAÑÁNDOSE EN ELLA (madre de dios)...\c-\n\n\cfY sí, ese es justo básicamente el hogar de Maruku-sama. Tiene ahí a toda la familia y todo, incluyendo a su... madre. Oh dios mío joder no hagas que empiece con su madre. Si es que voy a acabar otra vez encogida en un rincón pensando en AQUELLA vez.\c-\n\n\cfEs que no me lo creo una puñetera diosa milf de cinco metros todo buenorra va y me ofrece sexo justo ahí y entonces y luego puta joder me cago en todo por que tuve que ir y desmayarme joder es que podría haber tenido EL MEJOR SEXO DE MI PUTA VIDA CON LA PUTA DIOSA DE LA LUJURIA.\c-"; SWWM_LORETAG_FROGGYCHAIR = "Silla Rana"; SWWM_LORETXT_FROGGYCHAIR = "\cxDesignación:\c-\n\cf Silla Rana\c-\n\cxClasificación:\c-\n\cf Mueble\c-\n\cxPrecio:\c-\n\cf 1440 Campanas\c-\n\nUn pequeño precio a pagar...\n\n...por una \cdSilla Rana\c-.\n\n\cxNotas de Saya:\c-\n\cf¿Que puñetas es esto?\c-"; SWWM_LORETXT_MIXOM = "\cxNombre:\c-\n\cf Herramientas Mixom\c-\n\cxClasificación:\c-\n\cf Fabricante de Material Industrial\c-\n\cxLocalización:\c-\n\cf Japón\c-\n\cxPágina Web:\c-\n\cf https://mixom.co.jp\c-\n\n\cfMixom\c- es el mayor proveedor de material industrial del mundo, con cobertura casi global (extendiéndose más allá de la Tierra gracias a su asociación y negocios con la \cfUAC\c-, habiendo producido la mayoría de su equipamiento básico e infraestructura). Los únicos que han podido evitar su dominio completo del mercado son la Australiana \cfSymnatek\c- y la Escodesa \cfTecnologías Tach-Engine\c-, junto con su único competidor directo, \cfMoxim\c-.\n\nLos conflictos entre Mixom y Moxim muchas veces son noticia, dadas sus rápidamente incrementales \"guerras de demandas\" sobre quien provee de la mejor calidad en cierto producto.\n\nMixom es, además, uno de los últimos bastiones del capitalismo restantes en el país de Japón desde las grandes reformas del \cfPartido Comunista de Japón\c- en 2048.\n\n\cxNotas de Saya:\c-\n\cfDinero y poder, dominio absoluto, mierda de capitalismo. Asco grande... Ojalá exploten todos.\c-\n\n\cfNo puedes dar dos pasos sin cruzarte con algo que han hecho, estan EN PUTAS TODAS PARTES. Como, por ejemplo, ¿todos los tornillos en tu cuerpo? Marca Mixom. ¿La refrigeración líquida? También Mixom... Seguiría, pero es que me da todo el asco decir su nombre tanto.\c-"; diff --git a/language.es_menu b/language.es_menu index 5ebbb4f6e..790ecdb4d 100644 --- a/language.es_menu +++ b/language.es_menu @@ -45,6 +45,9 @@ SWWM_SVAMMOUSE = "Forzar Auto-Uso de Fabricadores"; SWWM_MCREDS = "Créditos de SWWM GZ"; SWWM_CLEAD = "Desarrollo Principal:"; SWWM_CASSETS = "Assets Adicionales:"; +SWWM_ASSBARONS = "Sprites de XDeath para Nobles del Infierno"; +SWWM_ASSOTHER = "Sprites de XDeath para Demonio, Cacodemonio, Renacido, Archvile"; +SWWM_ASSKEEN = "Reemplazo Menos Vil de Keen"; SWWM_CMUSIC = "Música Usada:"; SWWM_CFANART = "Fanart de Intermisión:"; SWWM_CPATRON = "Mecenas de Patreon:"; @@ -54,7 +57,8 @@ SWWM_CLUCY2 = "(Por la fuente Tewi, que he seguido usando todos estos años)"; SWWM_CKEKS2 = "(Por libeye, asistencia con el código de manejo de excepciones)"; SWWM_CZN2 = "(Por el código para alineación con superficies inclinadas)"; SWWM_CVAL2 = "(Por las huellas personalizadas para Nashgore, y por ser kawaii)"; -SWWM_CSLEDGE2 = "(Por razones de lore que me animaron a tomar parte en el modiverso de Doom)"; +SWWM_CSLEDGE2 = "(Por ser un gran colega)"; +SWWM_CSLEDGE3 = "(Y también por razones de lore que me animaron a tomar parte en el modiverso de Doom)"; SWWM_CSPY2 = "(Por el nivel de entusiasmo mostrado por todo en este mod)"; SWWM_CINSP1 = "Combine Kegan, HyperUltra64, TerminusEst13, Yholl y amigos"; SWWM_CINSP2 = "(Por servir de inspiración y por ser gente muy molona)"; @@ -82,13 +86,14 @@ SWWM_REVIVE = "Sistema de Reinicio de Emergencia"; SWWM_REVIVECOOLDOWN = "Tiempo de recarga de Reinicio"; SWWM_UNLIMITED = "Ilimitado"; SWWM_NONE = "Ninguno"; -SWWM_INTERTYPE = "Arte de Intermisión"; +SWWM_INTERART = "Arte de Intermisión"; SWWM_BALLUSE = "Las Bolas de Plomo Activan Botones"; SWWM_BOSSBAR = "Mostrar Barras de Salud de Bosses"; SWWM_BTITLE = "Opciones de Balance"; SWWM_BOSSENHANCE = "Mejorar Bosses Vanilla"; SWWM_EXTRAALERT = "Alertas de Ruído Extra"; SWWM_ACCDAMAGE = "Números de Daño Acumulativos"; +SWWM_MAXTARGETDIST = "Máx. Distancia de Barras de Salud"; SWWM_MAXTARGETS = "Máx. Barras de Salud en Pantalla"; SWWM_MAXDAMNUMS = "Máx. Números de Daño/Cura en Pantalla"; SWWM_MAXSCORENUMS = "Máx. Números de Puntuación en Pantalla"; @@ -126,6 +131,7 @@ SWWM_DROPS_NONE = "Desactivado"; SWWM_DROPS_AMMO = "Solo Munición"; SWWM_DROPS_WEAPONS = "Munición y Armas"; SWWM_SHOTGIB = "Los Perdigones pueden Desviscerar"; +SWWM_NOSCARE = "Deshabilitar Jumpscare de Obelisco Ocular"; TOOLTIP_SWWM_VOICETYPE = "Selecciona el pack de voz para el jugador."; TOOLTIP_SWWM_MUTEVOICE = "Controla lo que se mutea, si prefieres tener un protagonista más silencioso."; TOOLTIP_SWWM_FLASHSTRENGTH = "Los destellos en pantalla suelen ocurrir al disparar algunas armas, puedes reducirlo si este tipo de effectos te causan malestar."; @@ -155,12 +161,13 @@ TOOLTIP_SWWM_SHADERS = "Usa shaders de postprocesado para cosas como powerups y TOOLTIP_SWWM_OTHERVOICE = "Te permite oír los comentarios de voz de otros jugadores, si estás lo suficientemente cerca."; TOOLTIP_SWWM_REVIVE = "Permite al jugador volver a levantarse tras morir pulsando Fuego. Tiene un cooldown configurable."; TOOLTIP_SWWM_REVIVECOOLDOWN = "Tiempo en segundos tras reiniciar, durante el cual si mueres otra vez, no puedes volver a levantarte. Pon a 0 para permitir reinicios ilimitados."; -TOOLTIP_SWWM_INTERTYPE = "Elige qué mostrar de fondo durante intermisiones."; +TOOLTIP_SWWM_INTERART = "Si está activado, muestra fanart aleatorio durante intermisiones."; TOOLTIP_SWWM_BALLUSE = "Los proyectiles de Bola de Plomo pueden activar botones usables remotamente (excluyendo salidas). Potencialmente roto."; TOOLTIP_SWWM_BOSSHEALTHBARS = "Muestra una barra de vida para bosses vanilla en la parte inferior de la pantalla. ¡Es justo como Dark Souls™!"; TOOLTIP_SWWM_UPGRADEBOSSES = "Incrementa la salud de bosses vanilla para hacer que las peleas sean más \"justas\" con este mod, y no tan propensas a ganarse al instante."; TOOLTIP_SWWM_EXTRAALERT = "Permite a los enemigos oir cosas como proyectiles y balas rebotando, entre otros. Debido a la naturaleza recursiva de la función A_AlertMonsters, esto puede tener un impacto MASIVO en el rendimiento en mapas muy complejos."; TOOLTIP_SWWM_ACCDAMAGE = "El daño hecho a un objetivo en el mismo tic será agrupado en un único número, lo cual resultará en una pantalla más despejada en la mayoría de casos."; +TOOLTIP_SWWM_MAXTARGETDIST = "Limita la distancia máxima a la que se muestran las barras de salud de enemigos hostiles. Ten en cuenta que las barras de vida para jugadores en cooperativo se mostrarán siempre sin importar la distancia. Los objetivos no hostiles se muestran siempre a un cuarto de esta distancia."; TOOLTIP_SWWM_MAXTARGETS = "Limita la cantidad de barras de salud a mostrar en pantalla. Ayuda a mantener la pantalla más despejada."; TOOLTIP_SWWM_MAXDAMNUMS = "Limita la cantidad de números de daño/curación a mostrar en pantalla. Ayuda a mantener la pantalla más despejada."; TOOLTIP_SWWM_MAXSCORENUMS = "Limita la cantidad de números de puntuación a mostrar en pantalla. Ayuda a mantener la pantalla más despejada."; @@ -181,9 +188,9 @@ TOOLTIP_SWWM_NOTRACK = "Desactiva completamente el rastreo de combate (responsab TOOLTIP_SWWM_YNYKRONALERT = "Por defecto el Ynykron alerta a todos los monstruos en el mapa. Esto puede causar problemas a veces (o destruir tus frames con números enormes de monstruos)."; TOOLTIP_SWWM_MENUPAUSE = "En modo de un jugador, el Menú de Demolicionista por defecto paus a todo. Puedes desactivar esto si quieres una experiencia más Souls-like (o si quieres leer un poco mientras esperas activamente algun ascensor leeeeeeento o algún otro evento temporizado)." TOOLTIP_SWWM_FUNTAGS = "Reemplaza los nombres de monstruos vanilla por alternativas graciosas."; -TOOLTIP_SWWM_OMNIBUST = "Permite que cualquier arma puede potencialmente reventar paredes."; +TOOLTIP_SWWM_OMNIBUST = "Permite que cualquier arma puede potencialmente reventar paredes. Esto está obviamente rotísimo."; TOOLTIP_SWWM_SUPERFUEL = "Tu combustible no se agota nunca."; -TOOLTIP_SWWM_PARTYTIME = "Los enemigos expulsan una nube de confetti al morir."; +TOOLTIP_SWWM_PARTYTIME = "Cuando algo muere, expulsa una nube de confetti."; TOOLTIP_SWWM_SIMPLEFOG = "Reemplaza los efectos de teletransporte basados en partículas con simples sprites. Útil si causan problemas de rendimiento."; TOOLTIP_SWWM_BIGTAGS = "Por defecto los nombres de las barras de vida usan una fuente pequeña. Activando esta opción, se cambiará por una mayor."; TOOLTIP_SWWM_INTERMUSIC = "Al activar, las pantallas de intermisión usan la música original del IWAD o pack de mapas usado."; @@ -193,6 +200,7 @@ TOOLTIP_SWWM_MAXCASINGS = "Limita la cantidad máxima de casquillos y cargadores TOOLTIP_SWWM_MAXDEBRIS = "Limita la cantidad máxima de escombros por explosiones y otros. Sobrepasar este límite causará que el exceso se desvanezca."; TOOLTIP_SWWM_ENEMYDROPS = "Por defecto, los enemigos solo dropean munición para una mejor progresión. En mapas con enemigos excesivos, se recomienda desactivar los drops por completo."; TOOLTIP_SWWM_SHOTGIB = "Hay gente a la que no le gusta esto por alguna razón, así que aquí está como opción."; +TOOLTIP_SWWM_NOSCARE = "El Obelisco Ocular coleccionable muestra un jumpscare estridente con destellos de imagen rápidos, lo cual puede ser potencialmente perjudicial para algunas personas."; // knowledge base SWWM_COMINGSOON = "(próximamente)"; SWWM_MISSTAB = "Misión"; diff --git a/language.fr_base b/language.fr_base index 0a8b5707a..36f490440 100644 --- a/language.fr_base +++ b/language.fr_base @@ -14,4 +14,3 @@ // score messages // intermission tips // intermission fanart -// intermission 4komas (TBD) diff --git a/language.it_base b/language.it_base index 0b4135b31..f75dd92ee 100644 --- a/language.it_base +++ b/language.it_base @@ -14,4 +14,3 @@ // score messages // intermission tips // intermission fanart -// intermission 4komas (TBD) diff --git a/language.jp_base b/language.jp_base index 05f5c969b..512523bcf 100644 --- a/language.jp_base +++ b/language.jp_base @@ -14,4 +14,3 @@ // score messages // intermission tips // intermission fanart -// intermission 4komas (TBD) diff --git a/language.pl_base b/language.pl_base index 977daf8eb..b2292833f 100644 --- a/language.pl_base +++ b/language.pl_base @@ -14,4 +14,3 @@ // score messages // intermission tips // intermission fanart -// intermission 4komas (TBD) diff --git a/language.version b/language.version index 582324591..453358f7c 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.9b r558 \cu(Thu 24 Sep 21:14:06 CEST 2020)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.10b r560 \cu(Mon 5 Oct 23:29:28 CEST 2020)"; diff --git a/lore/default/akariproject.txt b/lore/default/akariproject.txt index 830ea2316..3b124002d 100644 --- a/lore/default/akariproject.txt +++ b/lore/default/akariproject.txt @@ -3,7 +3,7 @@ Akari Project TAB Item REL -Saya;LunaEvent;Nukuri;UAC;Hell +Saya;Luna;Nukuri;UAC;Hell;Kirin TXT \cxTitle:\c- \cf The Akari Project\c- @@ -20,3 +20,35 @@ TXT \cfYeah... I was really dumb back then, thinking everything would turn out so well and all, but instead look at where we are, with humankind's first interdimensional travel experiments opening a goddamn portal to Hell of all places (fuck the UAC). And let's not get started on all those "advances" in science I fantasized about. Most of those are way far for us, even though all the others have them (or even better stuff). We're just lagging behind because of all the stupid shit people keep doing and all the work those capitalist trashlords do to set everything back (fuck 'em).\c- \cfBut yeah, I totally want to make this real now, since I've got the know-how to do all this, mainly thanks to Zana-sama and her contacts. Well, I know the basics, at least, so I'll have to figure out the rest myself.\c- +TXT +\cxTitle:\c- +\cf The Akari Project\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Science Fiction\c- + +\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project. + +**The Akari Project** is **Saya Miyamoto**'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the **Luna Event**. It was advertised as a possible look into the future that the **Nukuri** alliance would provide, though nowadays it's seen more as an unfortunately "too optimistic" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond. + +\cxSaya's Notes:\c- +\cf... And then it all came true, in a way. Good shit that I ended up making the Akari Project become real. Heh, the UAC got SOOOOOOOOOOOO fucking salty over this, it was absolutely delicious. The whole goddamn multiverse is open to us now, and it's all safe and free from pesky demon intervention (unless we use it to actually go to Hell, obviously).\c- + +\cfOh this really is the good shit. I look back at the novel now and I'm left wondering if that romantic subplot will ever come true too. You know, when Doctor Kirishima meets Princess Ikana, and they fall in love and... *sigh*\c- +TXT +\cxTitle:\c- +\cf The Akari Project\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Science Fiction\c- + +\cfSynopsis:\c- In the year 2040, human science has evolved to levels never before seen. Mankind has explored not just their nearest planets, but those of neighboring suns too, and yet, there is more they wish, to go farther, to step beyond even the confines of their galaxy, and have every corner of the universe at the reach of their fingertips. It is then, that the greatest minds from all around the world are reunited, with one purpose, one mission: The Akari Project. + +**The Akari Project** is **Saya Miyamoto**'s first foray into sci-fi novel writing, all the way back in 2021, when humanity had only just made its first alien contact through the **Luna Event**. It was advertised as a possible look into the future that the **Nukuri** alliance would provide, though nowadays it's seen more as an unfortunately "too optimistic" vision of said future. Nevertheless, its main premise still stands to become a reality, with Saya herself promising to spearhead a real Akari Project someday, for humanity to create its own gates into the farthest corners of the universe and beyond. + +\cxSaya's Notes:\c- +\cf... And then it all came true, in a way. Good shit that I ended up making the Akari Project become real. Heh, the UAC got SOOOOOOOOOOOO fucking salty over this, it was absolutely delicious. The whole goddamn multiverse is open to us now, and it's all safe and free from pesky demon intervention (unless we use it to actually go to Hell, obviously).\c- + +\cfOh also, remember the romance subplot? Kirishima and Ikana, yeah... huuuuuge parallels with me and Kirin-kun there, just with the genders swapped. Didn't play out exactly the same way, tho. Wonder if he'd enjoy reading this...\c- diff --git a/lore/default/blackfireigniter.txt b/lore/default/blackfireigniter.txt new file mode 100644 index 000000000..921a3632c --- /dev/null +++ b/lore/default/blackfireigniter.txt @@ -0,0 +1,31 @@ +TAG +Blackfire Igniter +TAB +Item +REL +Sankaideriha;Unissix;Gods;Saya +TXT +\cxDesignation:\c- +\cf Blackfire Igniter\c- +\cxManufacturer:\c- +\cf Unissix Crafts\c- +\cf Design by LS\c- +\cxClassification:\c- +\cf Flamethrower\c- + +Devised by the primordial god of magic themself, the **Blackfire Igniter** is rather surprisingly a very cold, dark weapon. Blackfire is a type of magical flame that absorbs heat and light, rather than emitting them. + +During the height of **Unissix Crafts**'s fame, the god personally approached **Misa Unissix** herself with a request for a weapon that would allow just about anyone to readily perform **Blackfire Manipulation Magic**. + +The Igniter is the perfect blend of magic and technology, weaponized. At your fingertips, you have the power to call forth freezing flames that will turn your enemies into pretty ice statues in mere seconds. + +\cfPrimary Fire:\c- Releases a continuous stream of Blackfire, with moderate range. The flames not only rapidly freeze whatever they touch, but also reduce the air temperature, leaving a lingering freeze effect. + +\cfSecondary Fire:\c- Concentrated bursts that form spears of supercooled air which can impale small targets, or tear right through them. + +\cfReloading:\c- Attach a canister to replenish the weapon's internal dark mana reserves. The canister will remain locked in until it's been emptied, otherwise residual energy could escape it and bring harm to the user. If there is an empty canister attached, a second reload action will detach it. Fresh canisters can still be used even if the tank is full, and they will act as an extra "buffer" of mana until depleted. + +\cxSaya's Notes:\c- +\cfSo yeah, Misa-Misa has other toys besides that one bigass gun. Pretty cool that she gets requests and whatnot, lil' cinnamon roll's quite popular there, heheheh...\c- + +\cfI heard very little of all this Blackfire stuff from LS-sama, but it sounds like fun. Wonder if it can be used in a spellcard...\c- diff --git a/lore/default/brcdebutlp.txt b/lore/default/brcdebutlp.txt index e69de29bb..ecbc80fdc 100644 --- a/lore/default/brcdebutlp.txt +++ b/lore/default/brcdebutlp.txt @@ -0,0 +1,17 @@ +TAG +Walpurgisnacht +TAB +Item +REL +Ashley;Saya +TXT +\cxTitle:\c- +\cf Walpurgisnacht\c- +\cxArtist:\c- +\cf The Black Rat's Coven\c- +\cxYear:\c- +\cf 2006\c- +\cxGenre:\c- +\cf Gothic Rock\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/catcatcherposter.txt b/lore/default/catcatcherposter.txt index e69de29bb..df1dc5945 100644 --- a/lore/default/catcatcherposter.txt +++ b/lore/default/catcatcherposter.txt @@ -0,0 +1,24 @@ +TAG +Cat Catcher Poster +TAB +Item +REL +AkariLabs;Ibuki;Saya +TXT +\cxTitle:\c- +\cf Cat Catcher\c- +\cxDeveloper:\c- +\cf MADCAT Danae\c- +\cxGenre:\c- +\cf Arcade\c- +\cxPlatforms:\c- +\cf Mobile, PC\c- + +**Cat Catcher** puts you in the shoes of a nameless hunter of furry critters. Your objective: Catch all the cats! Big ones, small ones, of all breeds ever known and more! Endless fun guaranteed as you hunt down all the cute cats for your collection. Cat Catcher, catch those cats! + +\cxSaya's Notes:\c- +\cfMan, if there's someone out there crazier about cats than Danae-san I'd love to know, because HOLY FUCK is she the craziest cat lady I've ever seen, on top of being an irl catgirl herself (well, a nekomata, kinda the same thing tbh).\c- + +\cfI was really impressed by the whole thing when I first saw it, so well polished and all, and when it got open sourced, one look at the code and I was already spamming her with job offers through all forms of contact I could find. Ye, she works here at the labs, mostly in frontend stuff, though on the side she's working on another game. Hasn't told us anything yet about what it'll be about, gonna be a big surprise she says.\c- + +\cfSpeaking of big surprises, the damn lucky bastard ended up on Ibuki's sights and is now one of her girlfriends. I tried to hit on her too and she went at me all "I like them big and squishy, boss". If you want to call me flat you can just do it, geez!\c- diff --git a/lore/default/chancebox.txt b/lore/default/chancebox.txt new file mode 100644 index 000000000..182e3346b --- /dev/null +++ b/lore/default/chancebox.txt @@ -0,0 +1,28 @@ +TAG +Lucky Chancebox +TAB +Item +REL +NosKora;Saya +TXT +\cxDesignation:\c- +\cf Lucky Chance Box\c- +\cxManufacturer:\c- +\cf Plutoni Incorporated\c- +\cxClassification:\c- +\cf Surprise Mechanic\c- +\cxExcitement:\c- +\cf Guaranteed\c- + +These wondrous little boxes are full of surprises. Every single one, 100%, is guaranteed to provide you with a most precious treasure, should you first be able to track it down, as they will be strategically hidden throughout your mission, as reward for thorough secret-hunting. + +Complete your collection! There are countless treasures to obtain, all quite valuable as you might see, selected personally by us, for you. + +\cxSaya's Notes:\c- +\cfOK, FUCK THIS SHIT. THIS IS LITERALLY FUCKING GACHA BULLSHIT NOW, IT'S EXACTLY JUST THAT\c- + +\cfThose two 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/default/demoplush.txt b/lore/default/demoplush.txt index e69de29bb..61ff6b33d 100644 --- a/lore/default/demoplush.txt +++ b/lore/default/demoplush.txt @@ -0,0 +1,20 @@ +TAG +Demo Plushie +TAB +Item +REL +Demolitionist;NosKora;Saya +TXT +\cxDesignation:\c- +\cf Demolitionist Plushie\c- +\cxManufacturer:\c- +\cf Nukritas 2xx\c- +\cxClassification:\c- +\cf Plush Doll\c- + +A soft and huggable doll of the great hero **Demolitionist**, savior of Earth, slayer of Demons, exploder of knees. Caringly crafted by **Nukritas 2xx** herself, this plush doll features quite the attention to detail, sporting a self-illuminating face and glowing tags, just like the real thing! (Jetpacks are not functional, however) + +\cxSaya's Notes:\c- +\cfWell look at that, you're getting famous, Demo-chan. Yeah, even abroad, too. Heard those two have been marketing this stuff pretty heavily out there, heh... Bet Zana-sama has one, she'd definitely do, I know she's all about cute cuddly things (like Misa).\c- + +\cfBut really... this is so cute, just... wanna squeeze it and kiss it and... God, I hope you finish up this mission soon.\c- diff --git a/lore/default/devanikna.txt b/lore/default/devanikna.txt index 85c224881..438a3c036 100644 --- a/lore/default/devanikna.txt +++ b/lore/default/devanikna.txt @@ -3,16 +3,16 @@ Devanikna TAB Lore REL -Unissix;Saya;XAnimen +Unissix;Saya;XAnimen;Xekke;Zanaveth2 TXT \cxName:\c- \cf Devanikna\c- \cxClassification:\c- \cf Land of warriors\c- \cxLocation:\c- -\cf Ixxeney, Xathar system, X'Animen Coalition\c- +\cf Ixxeney, Zenna system, X'Animen Coalition\c- -**Devanikna** is one of the two major nations of **Ixxeney**, the largest planet in the **Xathar system**. It is home to a humanoid race known as the **Devanikan**, fierce warriors who legends say were brought upon this world by an entity known as the **Ancestor Dragon**, which they worship as their god. In their tongue, the name of "Devanikan" means "Dragonblood". +**Devanikna** is one of the two major nations of **Ixxeney**, the largest planet in the **Zenna system**. It is home to a humanoid race known as the **Devanikan**, fierce warriors who legends say were brought upon this world by an entity known as the **Ancestor Dragon**, which they worship as their god. In their tongue, the name of "Devanikan" means "Dragonblood". Devanikan society is mainly divided in several clans, many of them dating back thousands of years. Currently, the **Unissix clan** holds the leadership of the whole nation, having been unanimously chosen by the rest of the population following their defeat of the crazed **Lord Ni'Kai**, of the rival **Devenko clan**, who had previously taken over by force and instated a totalitarian government. diff --git a/lore/default/doomguyfig.txt b/lore/default/doomguyfig.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/empcarbine.txt b/lore/default/empcarbine.txt new file mode 100644 index 000000000..61d3c562d --- /dev/null +++ b/lore/default/empcarbine.txt @@ -0,0 +1,15 @@ +TAG +Rail Carbine +TAB +Item +REL +EngineTech +TXT +\cxDesignation:\c- +\cf EMP Rail Carbine\c- +\cxManufacturer:\c- +\cf Tach-Engine Technology Institute\c- +\cxClassification:\c- +\cf Directed Energy Weapon\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/eyeobelisk.txt b/lore/default/eyeobelisk.txt index e69de29bb..298fc0ddf 100644 --- a/lore/default/eyeobelisk.txt +++ b/lore/default/eyeobelisk.txt @@ -0,0 +1,22 @@ +TAG +Eye Obelisk +TAB +Item +REL +Parthoris;EngineTech;Saya +TXT +\cxDesignation:\c- +\cf Obelisk of the Golden Vale\c- +\cxClassification:\c- +\cf Magic Artifact\c- +\cxOrigin:\c- +\cf Unknown\c- + +Unearthed from the crystal mines of the **Golden Vale** in the far ends of **Parthoris**, this odd artifact of unknown creator hovers about, waiting for a hand to touch it. Those who have had it on their grasp recall being assaulted by rapidly flashing images, said to be vague glimpses into a grim future. What is shown seems to vary depending on the observer. + +Following a first discovery, more were later found, deeper into the caverns. Of those, one is in the hands of the **Tach-Engine Technology Institute**, who are currently studying it, in order to ascertain its true nature. + +\cxSaya's Notes:\c- +\cfI puked out my guts when I touched that fucking thing. No, seriously, what even WAS that. I saw all sorts of fucked up shit, straight out of my nightmares, and also people I didn't recognize, in really weird places. Also the screaming, holy fuck the screaming. I can still hear it, even though this was like... days ago.\c- + +\cfAnyway, if you're reading this that means you got it out of one of those two's damn "chanceboxes". Well, whatever you saw will be neatly recorded in your brain, so we can easily extract it and analyze it later, which is pretty neat. Just... I hope it didn't give you too hard of a scare. You'll get ALL the hugs when the mission's over, I promise.\c- diff --git a/lore/default/firemace.txt b/lore/default/firemace.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/frispycorn.txt b/lore/default/frispycorn.txt index e69de29bb..7ffc0af92 100644 --- a/lore/default/frispycorn.txt +++ b/lore/default/frispycorn.txt @@ -0,0 +1,15 @@ +TAG +Frispy Corn Snack +TAB +Item +REL +Saya +TXT +\cxDesignation:\c- +\cf Frispy™ Tasty Corn Snack\c- +\cxManufacturer:\c- +\cf Vestal Foods Inc.\c- +\cxClassification:\c- +\cf Flavored Corn Nuts\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/heavymahsheengun.txt b/lore/default/heavymahsheengun.txt new file mode 100644 index 000000000..bf11586c4 --- /dev/null +++ b/lore/default/heavymahsheengun.txt @@ -0,0 +1,15 @@ +TAG +Sheen HMG +TAB +Item +REL +Cyrus +TXT +\cxDesignation:\c- +\cf "Sheen" Heavy Machinegun\c- +\cxManufacturer:\c- +\cf Cyrus Enterprises\c- +\cxClassification:\c- +\cf Portable Rotary Cannon\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/hegecactus.txt b/lore/default/hegecactus.txt index e69de29bb..3538452b1 100644 --- a/lore/default/hegecactus.txt +++ b/lore/default/hegecactus.txt @@ -0,0 +1,15 @@ +TAG +Hege Cactus +TAB +Item +REL +Saya +TXT +\cxDesignation:\c- +\cf Hege Cactus\c- +\cxClassification:\c- +\cf Potted Plant\c- +\cxOrigin:\c- +\cf Finland\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/hoagie.txt b/lore/default/hoagie.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/imanaki.txt b/lore/default/imanaki.txt index c143fce82..3d4da4629 100644 --- a/lore/default/imanaki.txt +++ b/lore/default/imanaki.txt @@ -27,6 +27,6 @@ After this rather spectacular incident, Imanaki Corp resumed their operations, n Some time after these events, a small recon team managed to salvage some of the research material and other documents from the ruins, which would later fall into the hands of the **UAC**. \cxSaya's Notes:\c- -\cfI've talked about the ghoul hunt stuff in another entry, so I won't go into detail here, but yeah, would you look at that. The "great and mighty" UAC, stealing shit from those people.\c +\cfI've talked about the ghoul hunt stuff in another entry, so I won't go into detail here, but yeah, would you look at that. The "great and mighty" UAC, stealing shit from those people.\c- \cfYou know, when they started talking about delving into teleportation tech, I KNEW. I knew right away that they were using all that shit they stole. Fucking bastards, they even claimed to be "the very first", too.\c- diff --git a/lore/default/itamexhammer.txt b/lore/default/itamexhammer.txt new file mode 100644 index 000000000..ab4394945 --- /dev/null +++ b/lore/default/itamexhammer.txt @@ -0,0 +1,15 @@ +TAG +Itamex Hammer +TAB +Item +REL +Symnatek +TXT +\cxDesignation:\c- +\cf Itamex Reinforced Combat Hammer\c- +\cxManufacturer:\c- +\cf Itamex Military Supplies (a subsidiary of Symnatek)\c- +\cxClassification:\c- +\cf Sledgehammer\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/kirincummies.txt b/lore/default/kirincummies.txt index e69de29bb..f2f09ab19 100644 --- a/lore/default/kirincummies.txt +++ b/lore/default/kirincummies.txt @@ -0,0 +1,15 @@ +TAG +Peach Juice +TAB +Item +REL +Kirin +TXT +\cxDesignation:\c- +\cf Toot Froot™ Peach Juice\c- +\cxManufacturer:\c- +\cf Vestal Foods Inc.\c- +\cxClassification:\c- +\cf Flavored Milk Beverage\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/kirinmanga.txt b/lore/default/kirinmanga.txt index e69de29bb..2319644b9 100644 --- a/lore/default/kirinmanga.txt +++ b/lore/default/kirinmanga.txt @@ -0,0 +1,15 @@ +TAG +Kirin Manga +TAB +Item +REL +Kirin;Saya +TXT +\cxTitle:\c- +\cf I Married A Cherry Boy Emperor But It Turns Out He's Really Cute In Lingerie!?\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Comedy, Ecchi, Romance\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/kmonn.txt b/lore/default/kmonn.txt index 4f109da79..0de6410f2 100644 --- a/lore/default/kmonn.txt +++ b/lore/default/kmonn.txt @@ -3,7 +3,7 @@ Kmonn, Eushura Jr. TAB People REL -XAnimen;EngineTech;Gods +XAnimen;EngineTech;Gods;Xekke TXT \cxFull Name:\c- \cf Eushura Kmonn Jr.\c- diff --git a/lore/default/lithiumvol1.txt b/lore/default/lithiumvol1.txt index e69de29bb..38a9bb987 100644 --- a/lore/default/lithiumvol1.txt +++ b/lore/default/lithiumvol1.txt @@ -0,0 +1,15 @@ +TAG +Lithium Vol.1 +TAB +Item +REL + +TXT +\cxTitle:\c- +\cf Lithium - Volume One\c- +\cxAuthor:\c- +\cf Unknown\c- +\cxGenre:\c- +\cf Science Fiction\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/lovesignalscd.txt b/lore/default/lovesignalscd.txt index e69de29bb..1f3f9b96a 100644 --- a/lore/default/lovesignalscd.txt +++ b/lore/default/lovesignalscd.txt @@ -0,0 +1,17 @@ +TAG +Love Signals +TAB +Item +REL +Maidbot +TXT +\cxTitle:\c- +\cf Love Signals\c- +\cxArtist:\c- +\cf Meidobot\c- +\cxYear:\c- +\cf 2020\c- +\cxGenre:\c- +\cf J-Pop\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/meetthesniper.txt b/lore/default/meetthesniper.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/milkbreads.txt b/lore/default/milkbreads.txt index e69de29bb..45f237754 100644 --- a/lore/default/milkbreads.txt +++ b/lore/default/milkbreads.txt @@ -0,0 +1,15 @@ +TAG +Milk Breads +TAB +Item +REL +Kirin +TXT +\cxDesignation:\c- +\cf Akkouxhei Milk Bread\c- +\cxManufacturer:\c- +\cf Sykhai Empire\c- +\cxClassification:\c- +\cf Pastry\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/mmiasrvol1.txt b/lore/default/mmiasrvol1.txt index e69de29bb..fe838d394 100644 --- a/lore/default/mmiasrvol1.txt +++ b/lore/default/mmiasrvol1.txt @@ -0,0 +1,15 @@ +TAG +MMiaSR Vol.1 +TAB +Item +REL +Saya;Maidbot +TXT +\cxTitle:\c- +\cf My Maid Is A Sex Robot - Volume One\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Comedy, Ecchi, Romance\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/mmiasrvol2.txt b/lore/default/mmiasrvol2.txt index e69de29bb..04f4d1c90 100644 --- a/lore/default/mmiasrvol2.txt +++ b/lore/default/mmiasrvol2.txt @@ -0,0 +1,15 @@ +TAG +MMiaSR Vol.2 +TAB +Item +REL +Saya;Maidbot +TXT +\cxTitle:\c- +\cf My Maid Is A Sex Robot - Volume Two\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Comedy, Ecchi, Romance\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/mmiasrvol3.txt b/lore/default/mmiasrvol3.txt index e69de29bb..fdb9a45be 100644 --- a/lore/default/mmiasrvol3.txt +++ b/lore/default/mmiasrvol3.txt @@ -0,0 +1,15 @@ +TAG +MMiaSR Vol.3 +TAB +Item +REL +Saya;Maidbot +TXT +\cxTitle:\c- +\cf My Maid Is A Sex Robot - Volume Three\c- +\cxAuthor:\c- +\cf Saya Miyamoto\c- +\cxGenre:\c- +\cf Comedy, Ecchi, Romance\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/mothplushy.txt b/lore/default/mothplushy.txt index e69de29bb..63696fbb4 100644 --- a/lore/default/mothplushy.txt +++ b/lore/default/mothplushy.txt @@ -0,0 +1,15 @@ +TAG +Moth Plushy +TAB +Item +REL +MothLamp;Saya +TXT +\cxDesignation:\c- +\cf Mashiro the Moth Girl Plush\c- +\cxManufacturer:\c- +\cf Nukritas 2xx\c- +\cxClassification:\c- +\cf Plush Doll\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/nutatcobar.txt b/lore/default/nutatcobar.txt index e69de29bb..419f9ad93 100644 --- a/lore/default/nutatcobar.txt +++ b/lore/default/nutatcobar.txt @@ -0,0 +1,15 @@ +TAG +NUTATCO Choco Bar +TAB +Item +REL + +TXT +\cxDesignation:\c- +\cf NUTATCO™ Chocolate Bar\c- +\cxManufacturer:\c- +\cf Vestal Foods Inc.\c- +\cxClassification:\c- +\cf Peanut & Caramel Chocolate Bar\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/puntzerbeta.txt b/lore/default/puntzerbeta.txt new file mode 100644 index 000000000..5215d1272 --- /dev/null +++ b/lore/default/puntzerbeta.txt @@ -0,0 +1,15 @@ +TAG +Puntzer Beta +TAB +Item +REL +Blackmann +TXT +\cxDesignation:\c- +\cf Puntzer "Beta" Revolver\c- +\cxManufacturer:\c- +\cf Blackmann Arms Ltd.\c- +\cxClassification:\c- +\cf Break-Action Revolver\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/puntzergamma.txt b/lore/default/puntzergamma.txt new file mode 100644 index 000000000..e4662b0a5 --- /dev/null +++ b/lore/default/puntzergamma.txt @@ -0,0 +1,15 @@ +TAG +Puntzer Gamma +TAB +Item +REL +Blackmann +TXT +\cxDesignation:\c- +\cf Puntzer "Gamma" Assault Carbine\c- +\cxManufacturer:\c- +\cf Blackmann Arms Ltd.\c- +\cxClassification:\c- +\cf Submachine Gun\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/puzzledesignbook.txt b/lore/default/puzzledesignbook.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/quadravol.txt b/lore/default/quadravol.txt new file mode 100644 index 000000000..41a6d8f78 --- /dev/null +++ b/lore/default/quadravol.txt @@ -0,0 +1,15 @@ +TAG +Quadravol +TAB +Item +REL +Kmonn;Xekke +TXT +\cxDesignation:\c- +\cf Quadravol ("Ardent Cross")\c- +\cxManufacturer:\c- +\cf Eushura Kmonn Jr.\c- +\cxClassification:\c- +\cf Igneous Projectile Launcher\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/quartzflask.txt b/lore/default/quartzflask.txt index e69de29bb..baead1b63 100644 --- a/lore/default/quartzflask.txt +++ b/lore/default/quartzflask.txt @@ -0,0 +1,15 @@ +TAG +Quartz Flask +TAB +Item +REL +Parthoris +TXT +\cxDesignation:\c- +\cf Quartz Flask +\cxClassification:\c- +\cf Healing Potion\c- +\cxOrigin:\c- +\cf Parthoris\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/raideminfig.txt b/lore/default/raideminfig.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/lore/default/raykhom.txt b/lore/default/raykhom.txt new file mode 100644 index 000000000..8f62199e4 --- /dev/null +++ b/lore/default/raykhom.txt @@ -0,0 +1,15 @@ +TAG +Ray-Khom +TAB +Item +REL +Kmonn;Xekke +TXT +\cxDesignation:\c- +\cf Ray-Khom ("Plasma Gun")\c- +\cxManufacturer:\c- +\cf Eushura Kmonn Jr.\c- +\cxClassification:\c- +\cf High-Reactive Plasma Coilgun\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/sayabean.txt b/lore/default/sayabean.txt index e69de29bb..42e74c867 100644 --- a/lore/default/sayabean.txt +++ b/lore/default/sayabean.txt @@ -0,0 +1,24 @@ +TAG +Saya Bean Plush +TAB +Item +REL +Saya +TXT +\cxDesignation:\c- +\cf Haunted Saya Bean Plush\c- +\cxManufacturer:\c- +\cf Nukritas 2xx\c- +\cxClassification:\c- +\cf Plush Doll\c- +\cxHaunted:\c- +\cf Very Yes\c- + +**Haunted Saya Bean Plush** that eats your snacks and calls you a horny. + +This object isn't actually haunted. Or is it...? + +\cxSaya's Notes:\c- +\cfOK, considering who made it, I AM betting this thing's really haunted. And of course I can tell what this is referencing. How the fuck does she even know anyway? It has to be some reality bending nonsense again.\c- + +\cfStill, it's beautiful... A work of art, yes. I'm sure you're squeezing it between your arms right now. Oh, I'll know. I will hear it giggle on stream when you do so.\c- diff --git a/lore/default/tomeofpower.txt b/lore/default/tomeofpower.txt index e69de29bb..6d976006a 100644 --- a/lore/default/tomeofpower.txt +++ b/lore/default/tomeofpower.txt @@ -0,0 +1,15 @@ +TAG +Tome of Power +TAB +Item +REL +Parthoris +TXT +\cxDesignation:\c- +\cf Tyketto's Tome of Power +\cxClassification:\c- +\cf Grimoire of Weapon Enchantments\c- +\cxOrigin:\c- +\cf Parthoris\c- + +\ck[THIS ARTICLE IS A STUB - FURTHER WORK IS REQUIRED]\c- diff --git a/lore/default/xanimen.txt b/lore/default/xanimen.txt index e207acbd3..3bf8739c7 100644 --- a/lore/default/xanimen.txt +++ b/lore/default/xanimen.txt @@ -3,7 +3,7 @@ X'Animen TAB Lore REL -Luna;Nukuri;Saya +Luna;Nukuri;Saya;Xekke;Devanikna;Gods TXT \cxName:\c- \cf X'Animen Coalition\c- @@ -144,7 +144,7 @@ This system is not located within the observable universe. \cxSumayon:\c- A system from our own galaxy, used to house one lone planet, until a great cataclysm happened. -\cfSenekeye Keinukyenei Bhekeyuni:\c- Homeworld of the **Keinum** and former home of **Ix Sumai**. Was shattered to a thousand pieces and pushed out of its orbit after a great cataclysm. +\cfSenekeye Keinukyenei Bhekeyuni:\c- Homeworld of the **Keinun** and former home of **Ix Sumai**. Was shattered to a thousand pieces and pushed out of its orbit after a great cataclysm. In addition, two other systems were considered for joining the system. Negotiations fell apart for one of them due to hostilities towards another member of the coalition, and another is currently being studied, as it seems its one civilized inhabiting species has not yet evolved enough to join, though there is great interest in their homeworld due to its precious mineral resources. diff --git a/lore/default/xekke.txt b/lore/default/xekke.txt new file mode 100644 index 000000000..2fe9e14df --- /dev/null +++ b/lore/default/xekke.txt @@ -0,0 +1,30 @@ +TAG +Xekke +TAB +Lore +REL +XAnimen;Gods;Devanikna;Saya;Nukuri;Zanaveth2 +TXT +\cxName:\c- +\cf Xekke\c- +\cxClassification:\c- +\cf Land of giants\c- +\cxLocation:\c- +\cf Ixxeney, Zenna system, X'Animen Coalition\c- + +**Xekke** is the largest nation in **Ixxeney**, itself also the largest planet of the **Zenna system**. Covering the mountainous regions west of the neighbouring nation of **Devanikna**, it is the home of the **Xekkian**, a race of gigantic humanoids (averaging at 3.87 meters of height). + +The nation is led by the king and queen of Xekke, currently **Mal Kuratagon**, grandson of madness deity **Maruku Sarahabinaku** and **Mysu Adasake**, youngest daughter of the **Adasake Mask Bearers**. In addition, the madness deity also serves as patron of the Xekkian people. + +Among the various member civilizations of the **X'Animen Coalition**, the Xekkian are one of the most technologically advanced, though only a few steps behind the **Nukuri**. They are well known for all their achievements in the military field, and many of their weapons are famous throughout, as well as the strength of the titan armies. As a matter of fact, a majority of the coalition members often hire Xekkian mercenaries for their defense. + +Structurally speaking, the whole nation is divided into only five cities, each of them very broadly separated from each other, and located in some strategic spot among the mountains. The smallest of them is the capital city of Adkesa, standing atop the tallest peak of Ixxeney, and from which it's said that the king can clearly see the other four cities. Also in the capital city is the Nukuri embassy, which in 1793 BC had fallen to a terrorist attack in response to general displeasure with the **Yathai Imperial Family**. It would remain in ruins until the fall of the empire, after which it was promptly rebuilt to signify the Xekkian people's approval of the **Nahkami Liberation Front**'s victory. + +Of the people themselves, what is first noted is their eloquence. The Xekkas language spoken by all feels rather ominous and potent with each word spoken, well-suited for the intense personalities most of them exude. However, although they may appear to be fierce and imposing, they also know well to show kindness to those who need it, as is taught by their patron deity. + +\cxSaya's Notes:\c- +\cfI've only seen pics of the place, from Zana-sama. It's definitely cool, all those rocky mountains, the sprawling cities around them, the lakes and waterfalls, the volcanic areas with huge rivers of magma and PEOPLE BATHING IN IT (holy shit)...\c- + +\cfAnd yeah, that's basically Maruku-sama's home right there. She's got the whole family and everything in there, including her... mom. Oh my fucking god don't even get me started on her mom. I'll just end up curled up in a corner again thinking about THAT one time.\c- + +\cfCan't believe a fucking five meter tall hot milf goddess proposed to have sex with me right there and then jesus fuck holy shit why did I have to fucking pass out I could have had THE BEST SEX OF MY FUCKING LIFE WITH THE MOTHERFUCKING GODDESS OF LUST.\c- diff --git a/lore/es/devanikna.txt b/lore/es/devanikna.txt index 092938784..6d78ffa17 100644 --- a/lore/es/devanikna.txt +++ b/lore/es/devanikna.txt @@ -4,9 +4,9 @@ TXT \cxClasificación:\c- \cf Tierra de guerreros\c- \cxLocalización:\c- -\cf Ixxeney, sistema Xathar, Coalición X'Animen\c- +\cf Ixxeney, sistema Zenna, Coalición X'Animen\c- -**Devanikna** es una de las dos mayores naciones de **Ixxeney**, el mayor planeta del **sistema Xathar**. Es el hogar de una raza humanoide conocida como los **Devanikan**, guerreros fieros que las leyendas dicen que fueron traídos a este mundo por una entidad conocida como el **Dragón Ancestro**, a quien adoran como su dios. En su lengua, el nombre de "Devanikan" significa "Sangre de Dragón". +**Devanikna** es una de las dos mayores naciones de **Ixxeney**, el mayor planeta del **sistema Zenna**. Es el hogar de una raza humanoide conocida como los **Devanikan**, guerreros fieros que las leyendas dicen que fueron traídos a este mundo por una entidad conocida como el **Dragón Ancestro**, a quien adoran como su dios. En su lengua, el nombre de "Devanikan" significa "Sangre de Dragón". La socieda Devanikan está dividida principalmente en varios clanes, muchos de ellos existiendo desde hace miles de años. Actualmente, el **Clan Unissix** posee el liderazgo de toda la nación, habiendo sido elegidos de forma unánime por el resto de la población tras su derrota del demente **Lord Ni'Kai**, del rival **Clan Devenko**, quien anteriormente había tomado el mando por la fuerza e instaurado un gobierno totalitario. diff --git a/lore/es/xekke.txt b/lore/es/xekke.txt new file mode 100644 index 000000000..6eb2065d3 --- /dev/null +++ b/lore/es/xekke.txt @@ -0,0 +1,24 @@ +TXT +\cxNombre:\c- +\cf Xekke\c- +\cxClasificación:\c- +\cf Tierra de gigantes\c- +\cxLocalización:\c- +\cf Ixxeney, sistema Zenna, Coalición X'Animen\c- + +**Xekke** es la mayor nación de **Ixxeney**, el cual es también el mayor planeta del **sistema Zenna**. Cubriendo las regiones montañosas al oeste de la nación vecina de **Devanikna**, es el hogar de los **Xekkian**, una raza de humanoides gigantes (con una altura media de 3.87 metros). + +La nación es liderada por el rey y la reina de Xekke, actualmente **Mal Kuratagon**, nieto de la deidad de la locura **Maruku Sarahabinaku** y **Mysu Adasake**, hija menor de los **Enmascarados de Adasake**. Adicionalmente, la deidad de la locura también tiene el papel de patrón de los Xekkian. + +Entre las muchas civilizaciones miembro de la **Coalición X'Animen**, los Xekkian son una de las más avanzadas tecnológicamente, aunque sea solo a pocos pasos por detrás de los **Nukuri**. Son bien conocidos por todos sus logros en el campo militar, y muchas de sus armas tienen fama por doquier, tanto como la fuerza de sus ejércitos de titanes. De hecho, la mayoría de miembros de la coalición suelen contratar mercenarios Xekkian para su defensa. + +En cuanto a estructura, toda la nación se divide en sólo cinco ciudades, cada una de ellas separadas lejanamente de las otras, y localizadas en puntos estratégicos entre las montañas. La más pequeña de estas es la ciudad capital de Adkesa, alzada sobre la mayor cima de Ixxeney, y desde la cual se dice que el rey puede observar con claridad las otras cuatro ciudades. También en la capital se encuentra la embajada Nukuri, la cual en 1793 AC fue víctima de un ataque terrorista en respuesta al descontento general con la **Familia Imperal Yathai**. Permanecería en ruinas hasta la caída del imperio, tras la cual fue reconstruída immediatamente para demostrar la aprobación por parte de los Xekkian de la victoria del **Frente de Liberación de Nahkami**. + +Sobre la gente en sí, lo primero que se hace notar es su elocuencia. El idioma Xekkas hablado por todos es percibido como siniestro y potente con cada palabra pronunciada, bastante adecuado para las intensas personalidades que muchos destilan. Sin embargo, aunque parezcan fieros e imponentes, también saben bien como mostrar su bondad a aquellos que lo necesiten, tal y como enseña su deidad patrón. + +\cxNotas de Saya:\c- +\cfSolo he visto fotos del sitio este, de Zana-sama. Definitivamente mola, todas esas montañas rocosas, las ciudades expandiéndose alrededor, los lagos y cataratas, las zonas volcánicas con ríos enormes de magma y GENTE BAÑÁNDOSE EN ELLA (madre de dios)...\c- + +\cfY sí, ese es justo básicamente el hogar de Maruku-sama. Tiene ahí a toda la familia y todo, incluyendo a su... madre. Oh dios mío joder no hagas que empiece con su madre. Si es que voy a acabar otra vez encogida en un rincón pensando en AQUELLA vez.\c- + +\cfEs que no me lo creo una puñetera diosa milf de cinco metros todo buenorra va y me ofrece sexo justo ahí y entonces y luego puta joder me cago en todo por que tuve que ir y desmayarme joder es que podría haber tenido EL MEJOR SEXO DE MI PUTA VIDA CON LA PUTA DIOSA DE LA LUJURIA.\c- diff --git a/menudef.txt b/menudef.txt index f98c157c8..a4b5ee6dc 100644 --- a/menudef.txt +++ b/menudef.txt @@ -12,12 +12,6 @@ OptionValue "SWWMEnforce" 0, "$SWWM_USERSET" 1, "$SWWM_FORCEENABLE" } -OptionValue "SWWMInterType" -{ - 0, "$SWWM_INTERDEF" - 1, "$SWWM_INTERART" - //2, "$SWWM_INTER4KOMA" -} OptionValue "SWWMEnemyDropType" { -1, "$SWWM_DROPS_NONE" @@ -60,6 +54,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SCORENUMS", "swwm_scorenums", "YesNo" Option "$SWWM_SCOREBONUS", "swwm_scorebonus", "YesNo" Option "$SWWM_POIS", "swwm_pois", "YesNo" + ScaleSlider "$SWWM_MAXTARGETDIST", "swwm_maxtargetdist", 0, 6000, 100, "$SWWM_UNLIMITED" ScaleSlider "$SWWM_MAXTARGETS", "swwm_maxtargets", 0, 1000, 1, "$SWWM_UNLIMITED" ScaleSlider "$SWWM_MAXDAMNUMS", "swwm_maxdamnums", 0, 1000, 1, "$SWWM_UNLIMITED" ScaleSlider "$SWWM_MAXSCORENUMS", "swwm_maxscorenums", 0, 1000, 1, "$SWWM_UNLIMITED" @@ -70,15 +65,15 @@ OptionMenu "SWWMOptionMenu" ScaleSlider "$SWWM_POISCALE", "swwm_poiscale", 0, 8, 1, "$SWWM_GZSCALE" ScaleSlider "$SWWM_DETSCALE", "swwm_detscale", 0, 8, 1, "$SWWM_GZSCALE" Option "$SWWM_SHADERS", "swwm_shaders", "YesNo" - Option "$SWWM_INTERTYPE", "swwm_intertype", "SWWMInterType" + Option "$SWWM_INTERART", "swwm_interart", "YesNo" Option "$SWWM_INTERMUSIC", "swwm_intermusic", "YesNo" Option "$SWWM_FUZZ", "swwm_fuzz", "YesNo" StaticText " " StaticText "$SWWM_FTITLE", "Gold" Option "$SWWM_FUNTAGS", "swwm_funtags", "YesNo" - //Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" - //Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" - //Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" + Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" + Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" + Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" StaticText " " StaticText "$SWWM_BTITLE", "Gold" Option "$SWWM_ENEMYDROPS", "swwm_enemydrops", "SWWMEnemyDropType" @@ -100,6 +95,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_AMMOUSE", "swwm_autouseammo", "YesNo" Option "$SWWM_EARBUSTER", "swwm_earbuster", "YesNo" Option "$SWWM_BUSTERPAUSE", "swwm_cbtpause", "YesNo" + Option "$SWWM_NOSCARE", "swwm_noscare", "YesNo" StaticText " " StaticText "$SWWM_CTITLE", "Gold" Option "$SWWM_SKEYS", "swwm_sharekeys", "YesNo" @@ -146,6 +142,15 @@ OptionMenu "SWWMCreditsMenu" StaticText "Dark Souls II", "White" StaticText "Dark Souls III", "White" StaticText " " + StaticText "Amuscaria", "Gold" + StaticText "$SWWM_ASSBARONS", "White" + StaticText " " + StaticText "Ryan Cordell", "Gold" + StaticText "$SWWM_ASSOTHERS", "White" + StaticText " " + StaticText "SiFi270", "Gold" + StaticText "$SWWM_ASSKEEN", "White" + StaticText " " StaticText "$SWWM_CMUSIC", "Red" StaticText " " StaticText "Teque", "Gold" @@ -205,6 +210,7 @@ OptionMenu "SWWMCreditsMenu" StaticText " " StaticText "CptSledge", "Gold" StaticText "$SWWM_CSLEDGE2", "White" + StaticText "$SWWM_CSLEDGE3", "White" StaticText " " StaticText "a1337spy", "Gold" StaticText "$SWWM_CSPY2", "White" diff --git a/modeldef.demolitionist b/modeldef.demolitionist index 16bc4e525..bf60ba1c5 100644 --- a/modeldef.demolitionist +++ b/modeldef.demolitionist @@ -416,112 +416,120 @@ Model "Demolitionist" FrameIndex XZWD V 0 360 FrameIndex XZWD W 0 361 // Float - FrameIndex XZWD W 0 363 - FrameIndex XZWD X 0 364 - FrameIndex XZWD Y 0 365 - FrameIndex XZWD Z 0 366 - FrameIndex XZWE A 0 367 - FrameIndex XZWE B 0 368 - FrameIndex XZWE C 0 369 - FrameIndex XZWE D 0 370 - FrameIndex XZWE E 0 371 - FrameIndex XZWE F 0 372 - FrameIndex XZWE G 0 373 - FrameIndex XZWE H 0 374 + FrameIndex XZWD X 0 363 + FrameIndex XZWD Y 0 364 + FrameIndex XZWD Z 0 365 + FrameIndex XZWE A 0 366 + FrameIndex XZWE B 0 367 + FrameIndex XZWE C 0 368 + FrameIndex XZWE D 0 369 + FrameIndex XZWE E 0 370 + FrameIndex XZWE F 0 371 + FrameIndex XZWE G 0 372 + FrameIndex XZWE H 0 373 + FrameIndex XZWE I 0 374 // Swim Start - FrameIndex XZWE I 0 376 - FrameIndex XZWE J 0 377 - FrameIndex XZWE K 0 378 + FrameIndex XZWE J 0 376 + FrameIndex XZWE K 0 377 + FrameIndex XZWE L 0 378 // Swim - FrameIndex XZWE L 0 379 - FrameIndex XZWE M 0 380 - FrameIndex XZWE N 0 381 - FrameIndex XZWE O 0 382 - FrameIndex XZWE P 0 383 - FrameIndex XZWE Q 0 384 - FrameIndex XZWE R 0 385 - FrameIndex XZWE S 0 386 - FrameIndex XZWE T 0 387 - FrameIndex XZWE U 0 388 - FrameIndex XZWE V 0 389 - FrameIndex XZWE W 0 390 + FrameIndex XZWE M 0 379 + FrameIndex XZWE N 0 380 + FrameIndex XZWE O 0 381 + FrameIndex XZWE P 0 382 + FrameIndex XZWE Q 0 383 + FrameIndex XZWE R 0 384 + FrameIndex XZWE S 0 385 + FrameIndex XZWE T 0 386 + FrameIndex XZWE U 0 387 + FrameIndex XZWE V 0 388 + FrameIndex XZWE W 0 389 + FrameIndex XZWE X 0 390 // Swim End - FrameIndex XZWE X 0 392 - FrameIndex XZWE Y 0 393 + FrameIndex XZWE Y 0 392 + FrameIndex XZWE Z 0 393 // Crouched Wave - FrameIndex XZWE Z 0 397 - FrameIndex XZWF A 0 398 - FrameIndex XZWF B 0 399 - FrameIndex XZWF C 0 400 - FrameIndex XZWF D 0 401 - FrameIndex XZWF E 0 402 - FrameIndex XZWF F 0 403 - FrameIndex XZWF G 0 404 - FrameIndex XZWF H 0 405 - FrameIndex XZWF I 0 406 - FrameIndex XZWF J 0 407 - FrameIndex XZWF K 0 408 - FrameIndex XZWF L 0 409 - FrameIndex XZWF M 0 410 - FrameIndex XZWF N 0 411 + FrameIndex XZWF A 0 397 + FrameIndex XZWF B 0 398 + FrameIndex XZWF C 0 399 + FrameIndex XZWF D 0 400 + FrameIndex XZWF E 0 401 + FrameIndex XZWF F 0 402 + FrameIndex XZWF G 0 403 + FrameIndex XZWF H 0 404 + FrameIndex XZWF I 0 405 + FrameIndex XZWF J 0 406 + FrameIndex XZWF K 0 407 + FrameIndex XZWF L 0 408 + FrameIndex XZWF M 0 409 + FrameIndex XZWF N 0 410 + FrameIndex XZWF O 0 411 // Crouched Thumbs Up - FrameIndex XZWF O 0 413 - FrameIndex XZWF P 0 414 - FrameIndex XZWF Q 0 415 - FrameIndex XZWF R 0 416 - FrameIndex XZWF S 0 417 - FrameIndex XZWF T 0 418 - FrameIndex XZWF U 0 419 - FrameIndex XZWF V 0 420 - FrameIndex XZWF W 0 421 - FrameIndex XZWF X 0 422 - FrameIndex XZWF Y 0 423 - FrameIndex XZWF Z 0 424 - FrameIndex XZWG A 0 425 - FrameIndex XZWG B 0 426 - FrameIndex XZWG C 0 427 - FrameIndex XZWG D 0 428 - FrameIndex XZWG E 0 429 + FrameIndex XZWF P 0 413 + FrameIndex XZWF Q 0 414 + FrameIndex XZWF R 0 415 + FrameIndex XZWF S 0 416 + FrameIndex XZWF T 0 417 + SurfaceSkin 0 1 "DemoFace_Grin.png" + FrameIndex XZWF U 0 418 + FrameIndex XZWF V 0 419 + FrameIndex XZWF W 0 420 + FrameIndex XZWF X 0 421 + FrameIndex XZWF Y 0 422 + FrameIndex XZWF Z 0 423 + FrameIndex XZWG A 0 424 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZWG B 0 425 + FrameIndex XZWG C 0 426 + FrameIndex XZWG D 0 427 + FrameIndex XZWG E 0 428 + FrameIndex XZWG F 0 429 // Crouched Victory - FrameIndex XZWG F 0 431 - FrameIndex XZWG G 0 432 - FrameIndex XZWG H 0 433 - FrameIndex XZWG I 0 434 - FrameIndex XZWG J 0 435 - FrameIndex XZWG K 0 436 - FrameIndex XZWG L 0 437 - FrameIndex XZWG M 0 438 - FrameIndex XZWG N 0 439 - FrameIndex XZWG O 0 440 - FrameIndex XZWG P 0 441 - FrameIndex XZWG Q 0 442 - FrameIndex XZWG R 0 443 - FrameIndex XZWG S 0 444 - FrameIndex XZWG T 0 445 - FrameIndex XZWG U 0 446 - FrameIndex XZWG V 0 447 - FrameIndex XZWG W 0 448 - FrameIndex XZWG X 0 449 + FrameIndex XZWG G 0 431 + FrameIndex XZWG H 0 432 + FrameIndex XZWG I 0 433 + FrameIndex XZWG J 0 434 + SurfaceSkin 0 1 "DemoFace_Grin.png" + FrameIndex XZWG K 0 435 + FrameIndex XZWG L 0 436 + FrameIndex XZWG M 0 437 + FrameIndex XZWG N 0 438 + FrameIndex XZWG O 0 439 + FrameIndex XZWG P 0 440 + FrameIndex XZWG Q 0 441 + FrameIndex XZWG R 0 442 + FrameIndex XZWG S 0 443 + FrameIndex XZWG T 0 444 + FrameIndex XZWG U 0 445 + FrameIndex XZWG V 0 446 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZWG W 0 447 + FrameIndex XZWG X 0 448 + FrameIndex XZWG Y 0 449 // Crouched Blow Kiss - FrameIndex XZWG Y 0 451 - FrameIndex XZWG Z 0 452 - FrameIndex XZWH A 0 453 - FrameIndex XZWH B 0 454 - FrameIndex XZWH C 0 455 - FrameIndex XZWH D 0 456 - FrameIndex XZWH E 0 457 - FrameIndex XZWH F 0 458 - FrameIndex XZWH G 0 459 - FrameIndex XZWH H 0 460 - FrameIndex XZWH I 0 461 - FrameIndex XZWH J 0 462 - FrameIndex XZWH K 0 463 - FrameIndex XZWH L 0 464 - FrameIndex XZWH M 0 465 - FrameIndex XZWH N 0 466 - FrameIndex XZWH O 0 467 - FrameIndex XZWH P 0 468 - FrameIndex XZWH Q 0 469 + FrameIndex XZWG Z 0 451 + FrameIndex XZWH A 0 452 + FrameIndex XZWH B 0 453 + FrameIndex XZWH C 0 454 + SurfaceSkin 0 1 "DemoFace_Blink.png" + FrameIndex XZWH D 0 455 + FrameIndex XZWH E 0 456 + FrameIndex XZWH F 0 457 + FrameIndex XZWH G 0 458 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZWH H 0 459 + FrameIndex XZWH I 0 460 + FrameIndex XZWH J 0 461 + SurfaceSkin 0 1 "DemoFace_Wink.png" + FrameIndex XZWH K 0 462 + FrameIndex XZWH L 0 463 + FrameIndex XZWH M 0 464 + FrameIndex XZWH N 0 465 + FrameIndex XZWH O 0 466 + FrameIndex XZWH P 0 467 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZWH Q 0 468 + FrameIndex XZWH R 0 469 } // Voodoo Doll diff --git a/modeldef.funstuff b/modeldef.funstuff index 9d4d3dc5a..03c3dee0a 100644 --- a/modeldef.funstuff +++ b/modeldef.funstuff @@ -11,3 +11,264 @@ Model "FroggyChair" FrameIndex XZW1 A 0 0 } +// placeholders +Model "MMiaSRVol1" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MMiaSRVol2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MMiaSRVol3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MothPlushy" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "BRCDebutLP" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "AkariProject" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "CatCatcherPoster" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "LoveSignalsCD" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "NutatcoBar" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "HegeCactus" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "FrispyCorn" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "LithiumVol1" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "DemoPlush" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "TomeOfPower" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "QuartzFlask" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SayaBean" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "KirinCummies" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "MilkBreads" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "EyeObelisk" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "KirinManga" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.misc b/modeldef.misc index 6aadafa9d..20cada309 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -1,3 +1,12 @@ +Model "Unknown" +{ + Model 0 "models/extra/IAmError_d.3d" + Skin 0 "models/errormap.png" + Scale 0.0625 0.0625 0.0625 + ZOffset 32 + FrameIndex UNKN A 0 0 +} + Model "FancyConfetti" { Model 0 "models/extra/Flat_d.3d" diff --git a/models/ASmallPriceToPay.png b/models/ASmallPriceToPay.png index 193df97fe..cbc194db5 100644 Binary files a/models/ASmallPriceToPay.png and b/models/ASmallPriceToPay.png differ diff --git a/models/BooletExplodium.png b/models/BooletExplodium.png index ba7635e5e..5f7b73dc4 100644 Binary files a/models/BooletExplodium.png and b/models/BooletExplodium.png differ diff --git a/models/CandyGun.png b/models/CandyGun.png index 025427d88..383955f94 100644 Binary files a/models/CandyGun.png and b/models/CandyGun.png differ diff --git a/models/CandyGun_EmptyMag.png b/models/CandyGun_EmptyMag.png index 2e14117d0..6f6f95382 100644 Binary files a/models/CandyGun_EmptyMag.png and b/models/CandyGun_EmptyMag.png differ diff --git a/models/Chancebox.png b/models/Chancebox.png index b8cc4efd7..e6c8a73bf 100644 Binary files a/models/Chancebox.png and b/models/Chancebox.png differ diff --git a/models/Chunky.png b/models/Chunky.png index 2e5ffb7cc..f55673388 100644 Binary files a/models/Chunky.png and b/models/Chunky.png differ diff --git a/models/CubeHealth_mask.png b/models/CubeHealth_mask.png index aade999c8..ada1d6728 100644 Binary files a/models/CubeHealth_mask.png and b/models/CubeHealth_mask.png differ diff --git a/models/DeepImpact.png b/models/DeepImpact.png index 6ac89a9c1..3bda34373 100644 Binary files a/models/DeepImpact.png and b/models/DeepImpact.png differ diff --git a/models/DemoBody.png b/models/DemoBody.png index b7f66dbcb..3a046b419 100644 Binary files a/models/DemoBody.png and b/models/DemoBody.png differ diff --git a/models/DemoFace_Hurt.png b/models/DemoFace_Hurt.png index 09483e7e2..52cfae024 100644 Binary files a/models/DemoFace_Hurt.png and b/models/DemoFace_Hurt.png differ diff --git a/models/DemoHead.png b/models/DemoHead.png index e9f1927aa..0662e72a7 100644 Binary files a/models/DemoHead.png and b/models/DemoHead.png differ diff --git a/models/DemoLegs.png b/models/DemoLegs.png index 511918113..dbb74412f 100644 Binary files a/models/DemoLegs.png and b/models/DemoLegs.png differ diff --git a/models/DemoMisc.png b/models/DemoMisc.png index c7989248a..81d6a44cc 100644 Binary files a/models/DemoMisc.png and b/models/DemoMisc.png differ diff --git a/models/DemoSoft.png b/models/DemoSoft.png index 8c7a32438..042e94ec6 100644 Binary files a/models/DemoSoft.png and b/models/DemoSoft.png differ diff --git a/models/DemoTags.png b/models/DemoTags.png index ed23ea9d1..8e8eec7a2 100644 Binary files a/models/DemoTags.png and b/models/DemoTags.png differ diff --git a/models/DemoTags_bright.png b/models/DemoTags_bright.png index 1c8ebcfaf..1412af298 100644 Binary files a/models/DemoTags_bright.png and b/models/DemoTags_bright.png differ diff --git a/models/Eviscerator.png b/models/Eviscerator.png index d2bc40a6d..37ccfe4b1 100644 Binary files a/models/Eviscerator.png and b/models/Eviscerator.png differ diff --git a/models/ExplodiumGun.png b/models/ExplodiumGun.png index 1c643acb1..2b67f22c3 100644 Binary files a/models/ExplodiumGun.png and b/models/ExplodiumGun.png differ diff --git a/models/ExplodiumGun_EmptyMag.png b/models/ExplodiumGun_EmptyMag.png index dd8a0ab79..47f796919 100644 Binary files a/models/ExplodiumGun_EmptyMag.png and b/models/ExplodiumGun_EmptyMag.png differ diff --git a/models/Fabricator_Tier2.png b/models/Fabricator_Tier2.png index 92ce71002..1a2811e4f 100644 Binary files a/models/Fabricator_Tier2.png and b/models/Fabricator_Tier2.png differ diff --git a/models/GhostArtifact.png b/models/GhostArtifact.png index 0ed6b975d..73559860a 100644 Binary files a/models/GhostArtifact.png and b/models/GhostArtifact.png differ diff --git a/models/Gravity.png b/models/Gravity.png index 6626c58e6..557c07bb5 100644 Binary files a/models/Gravity.png and b/models/Gravity.png differ diff --git a/models/Hellblazer.png b/models/Hellblazer.png index e9647fe03..0dd11e59e 100644 Binary files a/models/Hellblazer.png and b/models/Hellblazer.png differ diff --git a/models/HellblazerAmmo_Fire.png b/models/HellblazerAmmo_Fire.png index c7ff72c29..282afe6d8 100644 Binary files a/models/HellblazerAmmo_Fire.png and b/models/HellblazerAmmo_Fire.png differ diff --git a/models/Invinciball.png b/models/Invinciball.png index dadb5f299..f8add6b15 100644 Binary files a/models/Invinciball.png and b/models/Invinciball.png differ diff --git a/models/Lamp_off.png b/models/Lamp_off.png index bad6905ce..4c0c91cd5 100644 Binary files a/models/Lamp_off.png and b/models/Lamp_off.png differ diff --git a/models/Nugget_mask.png b/models/Nugget_mask.png index 86daf52cf..e02df9a52 100644 Binary files a/models/Nugget_mask.png and b/models/Nugget_mask.png differ diff --git a/models/Omnisight.png b/models/Omnisight.png index 01b85eddc..1b9377c90 100644 Binary files a/models/Omnisight.png and b/models/Omnisight.png differ diff --git a/models/Refresher.png b/models/Refresher.png index cfa44414e..341bfe397 100644 Binary files a/models/Refresher.png and b/models/Refresher.png differ diff --git a/models/Shell_Ball_Used.png b/models/Shell_Ball_Used.png index 81bdae305..d44658d45 100644 Binary files a/models/Shell_Ball_Used.png and b/models/Shell_Ball_Used.png differ diff --git a/models/Shell_Fuck.png b/models/Shell_Fuck.png index 995bbfdf4..a8f034e73 100644 Binary files a/models/Shell_Fuck.png and b/models/Shell_Fuck.png differ diff --git a/models/Shell_Fuck_Used.png b/models/Shell_Fuck_Used.png index d7ded4d5f..5407b103a 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 bbba28d51..3def959d9 100644 Binary files a/models/Shell_Gold_Used.png and b/models/Shell_Gold_Used.png differ diff --git a/models/Shell_Kinylum.png b/models/Shell_Kinylum.png index a2a199c27..f821782aa 100644 Binary files a/models/Shell_Kinylum.png and b/models/Shell_Kinylum.png differ diff --git a/models/Shell_Kinylum_Used.png b/models/Shell_Kinylum_Used.png index ff2bbe413..515fa3d6b 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 48fb24f8d..8ef9274f2 100644 Binary files a/models/Shell_Normal_Used.png and b/models/Shell_Normal_Used.png differ diff --git a/models/Shell_Slug.png b/models/Shell_Slug.png index 3a49b3cab..164241a4a 100644 Binary files a/models/Shell_Slug.png and b/models/Shell_Slug.png differ diff --git a/models/Shell_Slug_Used.png b/models/Shell_Slug_Used.png index 0b1be26e6..b51cb5f75 100644 Binary files a/models/Shell_Slug_Used.png and b/models/Shell_Slug_Used.png differ diff --git a/models/Silverbullet.png b/models/Silverbullet.png index a9843e57c..fe139a65f 100644 Binary files a/models/Silverbullet.png and b/models/Silverbullet.png differ diff --git a/models/SilverbulletAmmo_EmptyMag.png b/models/SilverbulletAmmo_EmptyMag.png index 2c50e7d47..bdbd85ad7 100644 Binary files a/models/SilverbulletAmmo_EmptyMag.png and b/models/SilverbulletAmmo_EmptyMag.png differ diff --git a/models/SilverbulletBullet.png b/models/SilverbulletBullet.png index 4b9d427ad..8c70257cc 100644 Binary files a/models/SilverbulletBullet.png and b/models/SilverbulletBullet.png differ diff --git a/models/SilverbulletBullet_FCB.png b/models/SilverbulletBullet_FCB.png index 4dbda5900..b02a78386 100644 Binary files a/models/SilverbulletBullet_FCB.png and b/models/SilverbulletBullet_FCB.png differ diff --git a/models/SilverbulletJetNoise.png b/models/SilverbulletJetNoise.png index c6a3b4b22..d9fde0298 100644 Binary files a/models/SilverbulletJetNoise.png and b/models/SilverbulletJetNoise.png differ diff --git a/models/SilverbulletJetSmoke.png b/models/SilverbulletJetSmoke.png index f6c3704e4..82b0685ea 100644 Binary files a/models/SilverbulletJetSmoke.png and b/models/SilverbulletJetSmoke.png differ diff --git a/models/Sparkster.png b/models/Sparkster.png index 871511a81..5f4ffccaa 100644 Binary files a/models/Sparkster.png and b/models/Sparkster.png differ diff --git a/models/SparksterAmmo.png b/models/SparksterAmmo.png index 84423637e..0df6721b6 100644 Binary files a/models/SparksterAmmo.png and b/models/SparksterAmmo.png differ diff --git a/models/SparksterBall.png b/models/SparksterBall.png index 4f9f2d0f3..c24b70e59 100644 Binary files a/models/SparksterBall.png and b/models/SparksterBall.png differ diff --git a/models/Spreadgun.png b/models/Spreadgun.png index 544d9ab19..836dc12a9 100644 Binary files a/models/Spreadgun.png and b/models/Spreadgun.png differ diff --git a/models/Wallbuster.png b/models/Wallbuster.png index 2ffce081f..45c049f41 100644 Binary files a/models/Wallbuster.png and b/models/Wallbuster.png differ diff --git a/models/YnykronSmoke.png b/models/YnykronSmoke.png index 600e8e5cc..ddaac39bc 100644 Binary files a/models/YnykronSmoke.png and b/models/YnykronSmoke.png differ diff --git a/models/errormap.png b/models/errormap.png new file mode 100644 index 000000000..28cee07f2 Binary files /dev/null and b/models/errormap.png differ diff --git a/models/extra/BaseCube_a.3d b/models/extra/BaseCube_a.3d new file mode 100644 index 000000000..66aa09c1c Binary files /dev/null and b/models/extra/BaseCube_a.3d differ diff --git a/models/extra/BaseCube_d.3d b/models/extra/BaseCube_d.3d new file mode 100644 index 000000000..7acfc5e01 Binary files /dev/null and b/models/extra/BaseCube_d.3d differ diff --git a/models/extra/BloodDrop2.png b/models/extra/BloodDrop2.png index 01b4ca7a2..d4ecf2292 100644 Binary files a/models/extra/BloodDrop2.png and b/models/extra/BloodDrop2.png differ diff --git a/models/extra/BloodDrop4.png b/models/extra/BloodDrop4.png index 71f7c2f69..c638400d5 100644 Binary files a/models/extra/BloodDrop4.png and b/models/extra/BloodDrop4.png differ diff --git a/models/extra/CandyTrail.png b/models/extra/CandyTrail.png index b0215ee0e..a5fc3a6b5 100644 Binary files a/models/extra/CandyTrail.png and b/models/extra/CandyTrail.png differ diff --git a/models/extra/DarkRaysEnd.png b/models/extra/DarkRaysEnd.png index c13227d40..01fdcda69 100644 Binary files a/models/extra/DarkRaysEnd.png and b/models/extra/DarkRaysEnd.png differ diff --git a/models/extra/DarkRaysStart.png b/models/extra/DarkRaysStart.png index 1db98fbd3..b2b5255db 100644 Binary files a/models/extra/DarkRaysStart.png and b/models/extra/DarkRaysStart.png differ diff --git a/models/extra/DarkRaysStartEnd.png b/models/extra/DarkRaysStartEnd.png index 51794dafa..f015934ae 100644 Binary files a/models/extra/DarkRaysStartEnd.png and b/models/extra/DarkRaysStartEnd.png differ diff --git a/models/extra/EvisceratorMuz3.png b/models/extra/EvisceratorMuz3.png index a3164ed61..2527649e2 100644 Binary files a/models/extra/EvisceratorMuz3.png and b/models/extra/EvisceratorMuz3.png differ diff --git a/models/extra/IAmError_a.3d b/models/extra/IAmError_a.3d new file mode 100644 index 000000000..66411f64d Binary files /dev/null and b/models/extra/IAmError_a.3d differ diff --git a/models/extra/IAmError_d.3d b/models/extra/IAmError_d.3d new file mode 100644 index 000000000..3eaceff91 Binary files /dev/null and b/models/extra/IAmError_d.3d differ diff --git a/models/extra/MCBeam.png b/models/extra/MCBeam.png index 3b30e0202..9e9a1b790 100644 Binary files a/models/extra/MCBeam.png and b/models/extra/MCBeam.png differ diff --git a/models/extra/MCBeamS.png b/models/extra/MCBeamS.png index 1113b90ca..2e9051135 100644 Binary files a/models/extra/MCBeamS.png and b/models/extra/MCBeamS.png differ diff --git a/models/extra/SaltBeamS.png b/models/extra/SaltBeamS.png index c7052cdf9..5aa716d7c 100644 Binary files a/models/extra/SaltBeamS.png and b/models/extra/SaltBeamS.png differ diff --git a/models/extra/SparksterMuz.png b/models/extra/SparksterMuz.png index 7f09cd7c5..96423b1d7 100644 Binary files a/models/extra/SparksterMuz.png and b/models/extra/SparksterMuz.png differ diff --git a/models/extra/VentSmoke11.png b/models/extra/VentSmoke11.png index bcec6d4a2..70643d715 100644 Binary files a/models/extra/VentSmoke11.png and b/models/extra/VentSmoke11.png differ diff --git a/models/extra/VentSmoke12.png b/models/extra/VentSmoke12.png index cd3d0ec64..4f1c7166d 100644 Binary files a/models/extra/VentSmoke12.png and b/models/extra/VentSmoke12.png differ diff --git a/models/extra/VentSmoke13.png b/models/extra/VentSmoke13.png index 84865b517..9f4f4835f 100644 Binary files a/models/extra/VentSmoke13.png and b/models/extra/VentSmoke13.png differ diff --git a/models/extra/VentSmoke14.png b/models/extra/VentSmoke14.png index 1e808d800..6b26cb619 100644 Binary files a/models/extra/VentSmoke14.png and b/models/extra/VentSmoke14.png differ diff --git a/models/extra/VentSmoke15.png b/models/extra/VentSmoke15.png index 1432b795e..ba10ce709 100644 Binary files a/models/extra/VentSmoke15.png and b/models/extra/VentSmoke15.png differ diff --git a/models/extra/VentSmoke16.png b/models/extra/VentSmoke16.png index 8f36d3f70..7ffecf1b2 100644 Binary files a/models/extra/VentSmoke16.png and b/models/extra/VentSmoke16.png differ diff --git a/models/extra/VentSmoke17.png b/models/extra/VentSmoke17.png index a1dbc9dee..b82a5087c 100644 Binary files a/models/extra/VentSmoke17.png and b/models/extra/VentSmoke17.png differ diff --git a/models/extra/VentSmoke18.png b/models/extra/VentSmoke18.png index c56db4551..f5dba4055 100644 Binary files a/models/extra/VentSmoke18.png and b/models/extra/VentSmoke18.png differ diff --git a/models/extra/VentSmoke19.png b/models/extra/VentSmoke19.png index 61e81ca5d..50235488d 100644 Binary files a/models/extra/VentSmoke19.png and b/models/extra/VentSmoke19.png differ diff --git a/models/ragemap.png b/models/ragemap.png index fbbcf6036..53f9d4773 100644 Binary files a/models/ragemap.png and b/models/ragemap.png differ diff --git a/patches/castdemo_0001.png b/patches/castdemo_0001.png index 958c03b9b..b5a5a0a2a 100644 Binary files a/patches/castdemo_0001.png and b/patches/castdemo_0001.png differ diff --git a/patches/castdemo_0002.png b/patches/castdemo_0002.png index b8a168701..8cc9e2eb6 100644 Binary files a/patches/castdemo_0002.png and b/patches/castdemo_0002.png differ diff --git a/patches/castdemo_0003.png b/patches/castdemo_0003.png index a962a2007..937a2974a 100644 Binary files a/patches/castdemo_0003.png and b/patches/castdemo_0003.png differ diff --git a/patches/castdemo_0004.png b/patches/castdemo_0004.png index 656f34d89..2851ba08d 100644 Binary files a/patches/castdemo_0004.png and b/patches/castdemo_0004.png differ diff --git a/patches/castdemo_0005.png b/patches/castdemo_0005.png index 42a3859a5..e9faf4daa 100644 Binary files a/patches/castdemo_0005.png and b/patches/castdemo_0005.png differ diff --git a/patches/castdemo_0006.png b/patches/castdemo_0006.png index 55b53c1c8..9afa52b0c 100644 Binary files a/patches/castdemo_0006.png and b/patches/castdemo_0006.png differ diff --git a/patches/castdemo_0007.png b/patches/castdemo_0007.png index adab85088..c38906a46 100644 Binary files a/patches/castdemo_0007.png and b/patches/castdemo_0007.png differ diff --git a/patches/castdemo_0008.png b/patches/castdemo_0008.png index c27cf14b0..2c6650c9f 100644 Binary files a/patches/castdemo_0008.png and b/patches/castdemo_0008.png differ diff --git a/patches/castdemo_0009.png b/patches/castdemo_0009.png index ce9661f3d..55a9c2d8f 100644 Binary files a/patches/castdemo_0009.png and b/patches/castdemo_0009.png differ diff --git a/patches/castdemo_0010.png b/patches/castdemo_0010.png index 8b7da9fb9..20e605069 100644 Binary files a/patches/castdemo_0010.png and b/patches/castdemo_0010.png differ diff --git a/patches/castdemo_0011.png b/patches/castdemo_0011.png index 4346649ab..ee44398dd 100644 Binary files a/patches/castdemo_0011.png and b/patches/castdemo_0011.png differ diff --git a/patches/castdemo_0012.png b/patches/castdemo_0012.png index 5440a958d..0636ab027 100644 Binary files a/patches/castdemo_0012.png and b/patches/castdemo_0012.png differ diff --git a/patches/castdemo_0013.png b/patches/castdemo_0013.png index cd49cb3b0..f51bdfe6e 100644 Binary files a/patches/castdemo_0013.png and b/patches/castdemo_0013.png differ diff --git a/patches/castdemo_0014.png b/patches/castdemo_0014.png index dbf0206de..0e1800817 100644 Binary files a/patches/castdemo_0014.png and b/patches/castdemo_0014.png differ diff --git a/patches/castdemo_0015.png b/patches/castdemo_0015.png index 8da329e87..45400c3a3 100644 Binary files a/patches/castdemo_0015.png and b/patches/castdemo_0015.png differ diff --git a/patches/castdemo_0016.png b/patches/castdemo_0016.png index 86d2bf84d..e40e9ea55 100644 Binary files a/patches/castdemo_0016.png and b/patches/castdemo_0016.png differ diff --git a/patches/castdemo_0048.png b/patches/castdemo_0048.png index d22f90cb4..8944fd6dd 100644 Binary files a/patches/castdemo_0048.png and b/patches/castdemo_0048.png differ diff --git a/patches/castdemo_0049.png b/patches/castdemo_0049.png index 63c118931..26311776f 100644 Binary files a/patches/castdemo_0049.png and b/patches/castdemo_0049.png differ diff --git a/patches/castdemo_0050.png b/patches/castdemo_0050.png index cb081afa6..fd4557253 100644 Binary files a/patches/castdemo_0050.png and b/patches/castdemo_0050.png differ diff --git a/patches/castdemo_0051.png b/patches/castdemo_0051.png index c59a3401d..ec62fac56 100644 Binary files a/patches/castdemo_0051.png and b/patches/castdemo_0051.png differ diff --git a/patches/castdemo_0054.png b/patches/castdemo_0054.png index 48776a5c4..aae911298 100644 Binary files a/patches/castdemo_0054.png and b/patches/castdemo_0054.png differ diff --git a/patches/castdemo_0166.png b/patches/castdemo_0166.png index 58b2b12c3..9a7288ab4 100644 Binary files a/patches/castdemo_0166.png and b/patches/castdemo_0166.png differ diff --git a/patches/castdemo_0167.png b/patches/castdemo_0167.png index a9ee67bfa..2f95ebd3e 100644 Binary files a/patches/castdemo_0167.png and b/patches/castdemo_0167.png differ diff --git a/patches/castdemo_0168.png b/patches/castdemo_0168.png index 1c882628a..a5873bac8 100644 Binary files a/patches/castdemo_0168.png and b/patches/castdemo_0168.png differ diff --git a/patches/castdemo_0169.png b/patches/castdemo_0169.png index cd2f8f46a..23125c5cb 100644 Binary files a/patches/castdemo_0169.png and b/patches/castdemo_0169.png differ diff --git a/patches/castdemo_0170.png b/patches/castdemo_0170.png index 298619e81..87aaad02e 100644 Binary files a/patches/castdemo_0170.png and b/patches/castdemo_0170.png differ diff --git a/patches/castdemo_0171.png b/patches/castdemo_0171.png index 6640948d4..5a3354b2a 100644 Binary files a/patches/castdemo_0171.png and b/patches/castdemo_0171.png differ diff --git a/shaders/glsl/Fuzz_GraySmall2.fp b/shaders/glsl/Fuzz_GraySmall2.fp new file mode 100644 index 000000000..f1b82fe1d --- /dev/null +++ b/shaders/glsl/Fuzz_GraySmall2.fp @@ -0,0 +1,40 @@ +float rnd( in vec2 sd ) +{ + //return cos(sd.y*3874.8674+sd.x*6783.5325)*2737.8474; + // use noise tex instead of trig-based PRNG, much better and doesn't break on intel + return texelFetch(noisetex,ivec2(mod(sd.x,256.),mod(sd.y,256.)),0).x; +} + +// haha are you telling me I can't declare arrays like in C? +// what the fuck even is this insane syntax? +const vec3 layers[3] = +vec3[]( + vec3(1.01,1.07,1.05), + vec3(1.06,1.04,1.03), + vec3(1.05,1.03,1.01) +); +const float speed[3] = +float[]( + .5526, + .7843, + .3725 +); +const float zoom[3] = +float[]( + 1., + 2., + 3. +); + +vec4 ProcessTexel() +{ + vec2 coord; + vec3 col = vec3(1.); + for ( int i=0; i<3; i++ ) + { + coord = floor(vTexCoord.st*vec2(120.,3.)/zoom[i]); + col *= layers[i]*2.0*abs(fract(rnd(coord)+timer*speed[i])-0.5); + } + col += getTexel(vTexCoord.st).rgb; + return vec4(col,1.); +} diff --git a/shaders/glsl/Glitch.fp b/shaders/glsl/Glitch.fp index c180c0b5b..3694e6568 100644 --- a/shaders/glsl/Glitch.fp +++ b/shaders/glsl/Glitch.fp @@ -1,3 +1,7 @@ +const float thr1 = 6.4; +const float thr2 = 8.6; +const float thr3 = 19.3; + float rnd2( in vec2 sd ) { return fract(cos(dot(sd*floor(Timer*15.0),vec2(145.34,142.55)))*2745.84); @@ -13,7 +17,7 @@ void main() vec2 uv_c[3] = vec2[3](coord,coord,coord); vec2 blka = floor(coord*vec2(22.0,12.0)); vec2 blkb = floor(coord*vec2(6.0,9.0)); - float noiz = pow(rnd2(blka),6.4)*pow(rnd2(blkb),8.6)-pow(rnd(4.53),19.3)*str2; + float noiz = pow(rnd2(blka),thr1)*pow(rnd2(blkb),thr2)-pow(rnd(4.53),thr3)*str2; uv_c[0].x += str1*noiz*(rnd(3.35)-0.5); uv_c[1].x += str1*noiz*(rnd(4.63)-0.5); uv_c[2].x += str1*noiz*(rnd(5.62)-0.5); diff --git a/shaders/glsl/Grain.fp b/shaders/glsl/Grain.fp index 1456e7aff..43fa816e8 100644 --- a/shaders/glsl/Grain.fp +++ b/shaders/glsl/Grain.fp @@ -2,46 +2,46 @@ Complex grain shader ported over from MariENB (C)2012-2018 Marisa Kirisame */ -const float nf = 0.00001; +const float nf = .000005; const vec3 nm1 = vec3(2.05,3.11,2.22); -const float nk = 0.04; +const float nk = .04; const vec3 nm2 = vec3(4.25,9.42,6.29); -const float ns = -0.28; -const float np = 2.1; -const float bnp = 0.7; +const float ns = -.08; +const float np = 3.95; +const float bnp = 1.7; -#define darkmask(a,b) (a>0.5)?(2.0*a*(0.5+b)):(1.0-2.0*(1.0-a)*(1.0-((0.5+b)))) +#define darkmask(a,b) (a>.5)?(2.*a*(.5+b)):(1.-2.*(1.-a)*(1.-((.5+b)))) vec3 grain( in vec3 res, in vec2 coord ) { float ts = Timer*nf; - vec2 s1 = coord+vec2(0.0,ts); - vec2 s2 = coord+vec2(ts,0.0); + vec2 s1 = coord+vec2(0.,ts); + vec2 s2 = coord+vec2(ts,0.); vec2 s3 = coord+vec2(ts,ts); float n1, n2, n3; vec2 nr = textureSize(NoiseTexture,0); - s1 = mod(s1*nm1.x*nr,1.0); - s2 = mod(s2*nm1.y*nr,1.0); - s3 = mod(s3*nm1.z*nr,1.0); + s1 = mod(s1*nm1.x*nr,1.); + s2 = mod(s2*nm1.y*nr,1.); + s3 = mod(s3*nm1.z*nr,1.); n1 = texture(NoiseTexture,s1).r; n2 = texture(NoiseTexture,s2).g; n3 = texture(NoiseTexture,s3).b; s1 = coord+vec2(ts+n1*nk,n2*nk); s2 = coord+vec2(n2,ts+n3*nk); s3 = coord+vec2(ts+n3*nk,ts+n1*nk); - s1 = mod(s1*nm2.x*nr,1.0); - s2 = mod(s2*nm2.y*nr,1.0); - s3 = mod(s3*nm2.z*nr,1.0); + s1 = mod(s1*nm2.x*nr,1.); + s2 = mod(s2*nm2.y*nr,1.); + s3 = mod(s3*nm2.z*nr,1.); n1 = texture(NoiseTexture,s1).r; n2 = texture(NoiseTexture,s2).g; n3 = texture(NoiseTexture,s3).b; float n4 = (n1+n2+n3)/3.0; vec3 ng = vec3(n4); vec3 nc = vec3(n1,n2,n3); - vec3 nt = pow(clamp(mix(ng,nc,ns),0.0,1.0),vec3(np)); - float bn = 1.0-clamp((res.r+res.g+res.b)/3.0,0.0,1.0); + vec3 nt = pow(clamp(mix(ng,nc,ns),0.,1.),vec3(np)); + float bn = 1.-clamp((res.r+res.g+res.b)/3.,0.,1.); bn = pow(bn,bnp); - vec3 nn = clamp(nt*bn,vec3(0.0),vec3(1.0)); + vec3 nn = clamp(nt*bn,vec3(0.),vec3(1.)); res.r = darkmask(res.r,(nn.r*ni)); res.g = darkmask(res.g,(nn.g*ni)); res.b = darkmask(res.b,(nn.b*ni)); @@ -52,7 +52,7 @@ void main() { vec2 coord = TexCoord; vec4 res = texture(InputTexture,coord); - vec2 sfact = max(vec2(640.0,400.0),textureSize(InputTexture,0)*0.5); + vec2 sfact = max(vec2(640.,400.),textureSize(InputTexture,0)*.5); coord = floor(coord*sfact)/sfact; res.rgb = grain(res.rgb,coord); FragColor = res; diff --git a/shaders/glsl/LavaWarp.fp b/shaders/glsl/LavaWarp.fp index fccdf44ff..6047b18cb 100644 --- a/shaders/glsl/LavaWarp.fp +++ b/shaders/glsl/LavaWarp.fp @@ -18,9 +18,9 @@ void main() float p = distance(uv,vec2(.5)); uv = (uv-.5)*(1.-dfact*.07)+.5; vec4 res = texture(InputTexture,uv); - vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.01)); - res.rgb += flood.rgb*dfact*.4; - flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.03,timer*.04)); - res.rgb += flood.rgb*dfact*.6; + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.01))*.4 + +texture(fluidtex,uv*sr*2.+vec2(-timer*.03,timer*.04))*.6; + flood.rgb *= lightcol; + res.rgb += flood.rgb*dfact; FragColor = vec4(res.rgb,1.); } diff --git a/shaders/glsl/ObeliskPass0.fp b/shaders/glsl/ObeliskPass0.fp new file mode 100644 index 000000000..02703a7b6 --- /dev/null +++ b/shaders/glsl/ObeliskPass0.fp @@ -0,0 +1,18 @@ +float rnd2( in vec2 sd ) +{ + float rnv = sin(sd.x*3436.351)*cos(sd.y*1235.734)*6734.342; + rnv = float(int(rnv)%256)/256.; + return rnv; +} +float rnd( in float sd ) +{ + return rnd2(vec2(sd,1.)); +} +void main() +{ + vec2 coord = TexCoord; + vec4 res = texture(InputTexture,coord+.02*vec2(rnd(Timer*.4536),rnd(Timer*.7835))); + res += texture(InputTexture,coord-.02*vec2(rnd(Timer*.6735),rnd(Timer*.4335))); + res = .6*texture(InputTexture,coord)+.4*res; + FragColor = res; +} diff --git a/shaders/glsl/ObeliskPass1.fp b/shaders/glsl/ObeliskPass1.fp new file mode 100644 index 000000000..45ff28356 --- /dev/null +++ b/shaders/glsl/ObeliskPass1.fp @@ -0,0 +1,59 @@ +/* + Complex grain shader ported over from MariENB + (C)2012-2018 Marisa Kirisame +*/ + +const float ni = .35; +const float nf = .000005; +const vec3 nm1 = vec3(2.05,3.11,2.22); +const float nk = .04; +const vec3 nm2 = vec3(4.25,9.42,6.29); +const float ns = -.08; +const float np = 2.95; +const float bnp = 1.7; + +#define darkmask(a,b) (a>.5)?(2.*a*(.5+b)):(1.-2.*(1.-a)*(1.-((.5+b)))) + +vec3 grain( in vec3 res, in vec2 coord ) +{ + float ts = Timer*nf; + vec2 s1 = coord+vec2(0.,ts); + vec2 s2 = coord+vec2(ts,0.); + vec2 s3 = coord+vec2(ts,ts); + float n1, n2, n3; + vec2 nr = textureSize(NoiseTexture,0); + s1 = mod(s1*nm1.x*nr,1.); + s2 = mod(s2*nm1.y*nr,1.); + s3 = mod(s3*nm1.z*nr,1.); + n1 = texture(NoiseTexture,s1).r; + n2 = texture(NoiseTexture,s2).g; + n3 = texture(NoiseTexture,s3).b; + s1 = coord+vec2(ts+n1*nk,n2*nk); + s2 = coord+vec2(n2,ts+n3*nk); + s3 = coord+vec2(ts+n3*nk,ts+n1*nk); + s1 = mod(s1*nm2.x*nr,1.); + s2 = mod(s2*nm2.y*nr,1.); + s3 = mod(s3*nm2.z*nr,1.); + n1 = texture(NoiseTexture,s1).r; + n2 = texture(NoiseTexture,s2).g; + n3 = texture(NoiseTexture,s3).b; + float n4 = (n1+n2+n3)/3.0; + vec3 ng = vec3(n4); + vec3 nc = vec3(n1,n2,n3); + vec3 nt = pow(clamp(mix(ng,nc,ns),0.,1.),vec3(np)); + float bn = 1.-clamp((res.r+res.g+res.b)/3.,0.,1.); + bn = pow(bn,bnp); + vec3 nn = clamp(nt*bn,vec3(0.),vec3(1.)); + res.r = darkmask(res.r,(nn.r*ni)); + res.g = darkmask(res.g,(nn.g*ni)); + res.b = darkmask(res.b,(nn.b*ni)); + return res; +} + +void main() +{ + vec2 coord = TexCoord; + vec4 res = texture(InputTexture,coord); + res.rgb = grain(res.rgb,coord); + FragColor = res; +} diff --git a/shaders/glsl/ObeliskPass2.fp b/shaders/glsl/ObeliskPass2.fp new file mode 100644 index 000000000..1be95e257 --- /dev/null +++ b/shaders/glsl/ObeliskPass2.fp @@ -0,0 +1,23 @@ +void main() +{ + vec2 coord = TexCoord; + vec4 res = texture(InputTexture,coord)*16.; + float cnt = 16.; + vec2 px = 1./textureSize(InputTexture,0); + vec2 nc; + int i, j; + for ( j=-2; j<=2; j++ ) for ( i=-2; i<=2; i++ ) + { + nc = coord+px*vec2(i,j); + res += texture(InputTexture,nc); + cnt += 1.; + } + res /= cnt; + res.rgb *= vec3(1.19,.94,.87); + res.rgb = pow(res.rgb,vec3(.81,.99,1.17)); + vec2 uv = TexCoord.xy*(1.-TexCoord.yx)*4.; + float dist = 1.-(uv.x*uv.y); + dist = clamp(pow(dist,1.5)*1.2-.3,0.,1.); + res.rgb = mix(res.rgb,vec3(0.),dist); + FragColor = res; +} diff --git a/shaders/glsl/ObeliskPass3.fp b/shaders/glsl/ObeliskPass3.fp new file mode 100644 index 000000000..8b486341f --- /dev/null +++ b/shaders/glsl/ObeliskPass3.fp @@ -0,0 +1,35 @@ +const float str1 = .05; +const float str2 = 7.0; +const float thr1 = 6.4; +const float thr2 = 8.6; +const float thr3 = 19.3; + +float rnd2( in vec2 sd ) +{ + return fract(cos(dot(sd*floor(Timer*15.),vec2(145.34,142.55)))*2745.84); +} +float rnd( in float sd ) +{ + return rnd2(vec2(sd,1.0)); +} + +void main() +{ + vec2 coord = TexCoord; + vec2 uv_c[3] = vec2[3](coord,coord,coord); + vec2 blka = floor(coord*vec2(22.,12.)); + vec2 blkb = floor(coord*vec2(6.,9.)); + float noiz = pow(rnd2(blka),thr1)*pow(rnd2(blkb),thr2)-pow(rnd(4.53),thr3)*str2; + uv_c[0].x += str1*noiz*(rnd(3.35)-.5); + uv_c[1].x += str1*noiz*(rnd(4.63)-.5); + uv_c[2].x += str1*noiz*(rnd(5.62)-.5); + uv_c[0].y += str1*noiz*(rnd(4.55)-.5); + uv_c[1].y += str1*noiz*(rnd(3.67)-.5); + uv_c[2].y += str1*noiz*(rnd(5.54)-.5); + vec4 res; + res.r = texture(InputTexture,uv_c[0]).r; + res.g = texture(InputTexture,uv_c[1]).g; + res.b = texture(InputTexture,uv_c[2]).b; + res.a = 1.; + FragColor = res; +} diff --git a/shaders/glsl/Shinemap_error.fp b/shaders/glsl/Shinemap_error.fp new file mode 100644 index 000000000..6bf4ccafd --- /dev/null +++ b/shaders/glsl/Shinemap_error.fp @@ -0,0 +1,11 @@ +vec4 ProcessLight( vec4 color ) +{ + float glow = .75+.25*sin(timer*8); + return vec4(vec3(glow),color.a); +} + +vec4 ProcessTexel() +{ + vec3 rnorm = normalize(vEyeNormal.xyz)*(1,-1,1); + return getTexel(rnorm.xy*.49+.5); +} diff --git a/shaders/glsl/SlimeWarp.fp b/shaders/glsl/SlimeWarp.fp index 4ff66b18c..da68dec6f 100644 --- a/shaders/glsl/SlimeWarp.fp +++ b/shaders/glsl/SlimeWarp.fp @@ -18,9 +18,9 @@ void main() float p = distance(uv,vec2(.5)); uv = (uv-.5)*(1.-dfact*.11)+.5; vec4 res = texture(InputTexture,uv); - vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.05)); - res.rgb += flood.rgb*dfact*.3; - flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08)); - res.rgb += flood.rgb*dfact*.4; + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.05))*.3 + +texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08))*.4; + flood.rgb *= lightcol; + res.rgb += flood.rgb*dfact; FragColor = vec4(res.rgb,1.); } diff --git a/shaders/glsl/WaterWarp.fp b/shaders/glsl/WaterWarp.fp index 027240e39..b9e809ba5 100644 --- a/shaders/glsl/WaterWarp.fp +++ b/shaders/glsl/WaterWarp.fp @@ -18,9 +18,9 @@ void main() float p = distance(uv,vec2(.5)); uv = (uv-.5)*(1.-dfact*.12)+.5; vec4 res = texture(InputTexture,uv); - vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.01,timer*.02)); - res.rgb += flood.rgb*dfact*.3; - flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08)); - res.rgb += flood.rgb*dfact*.2; + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.01,timer*.02))*.3 + +texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08))*.2; + flood.rgb *= lightcol; + res.rgb += flood.rgb*dfact; FragColor = vec4(res.rgb,1.); } diff --git a/shaders/glsl/Whew.fp b/shaders/glsl/Whew.fp new file mode 100644 index 000000000..d35cf8c35 --- /dev/null +++ b/shaders/glsl/Whew.fp @@ -0,0 +1,8 @@ +vec4 ProcessTexel() +{ + vec4 base = getTexel(vTexCoord.st); + base.r = .5+.5*sin(base.r*5.+10.8*timer); + base.g = .5+.5*sin(base.g*5.+11.6*timer); + base.b = .5+.5*sin(base.b*5.+12.1*timer); + return base; +} diff --git a/sndinfo.txt b/sndinfo.txt index 8700706ad..294974c4e 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -612,7 +612,20 @@ eviscerator/hit5 sounds/eviscerator/visc_hit5.ogg eviscerator/hit6 sounds/eviscerator/visc_hit6.ogg $random eviscerator/hit { eviscerator/hit1 eviscerator/hit2 eviscerator/hit3 eviscerator/hit4 eviscerator/hit5 eviscerator/hit6 } $limit eviscerator/hit 32 -eviscerator/hitf sounds/eviscerator/visc_hitf.ogg +eviscerator/hith1 sounds/eviscerator/visc_hith1.ogg +eviscerator/hith2 sounds/eviscerator/visc_hith2.ogg +eviscerator/hith3 sounds/eviscerator/visc_hith3.ogg +eviscerator/hith4 sounds/eviscerator/visc_hith4.ogg +eviscerator/hith5 sounds/eviscerator/visc_hith5.ogg +eviscerator/hith6 sounds/eviscerator/visc_hith6.ogg +eviscerator/hith7 sounds/eviscerator/visc_hith7.ogg +eviscerator/hith8 sounds/eviscerator/visc_hith8.ogg +$random eviscerator/hith { eviscerator/hith1 eviscerator/hith2 eviscerator/hith3 eviscerator/hith4 eviscerator/hith5 eviscerator/hith6 eviscerator/hith7 eviscerator/hith8 } +$limit eviscerator/hith 32 +eviscerator/hitf1 sounds/eviscerator/visc_hitf1.ogg +eviscerator/hitf2 sounds/eviscerator/visc_hitf2.ogg +eviscerator/hitf3 sounds/eviscerator/visc_hitf3.ogg +$random eviscerator/hitf { eviscerator/hitf1 eviscerator/hitf2 eviscerator/hitf3 } $limit eviscerator/hitf 32 eviscerator/shell1 sounds/eviscerator/visc_shell1.ogg eviscerator/shell2 sounds/eviscerator/visc_shell2.ogg @@ -926,6 +939,7 @@ lamp/off sounds/items/lampoff.ogg lamp/appear sounds/items/lampappear.ogg lamp/disappear sounds/items/lampdisappear.ogg // maybe eventually +mashiro/giggle sounds/mashiro/moth_giggle.ogg //mashiro/see (some sort of creepy yandere girl giggling I guess) //mashiro/active (more creepy giggles?) //mashiro/attack (clawing) @@ -948,6 +962,10 @@ chancebox/explode2 sounds/items/lootexpl2.ogg chancebox/explode3 sounds/items/lootexpl3.ogg $random chancebox/explode { chancebox/explode1 chancebox/explode2 chancebox/explode3 } +obelisk/idle sounds/items/eyeamb1.ogg +obelisk/flash sounds/items/bopflash.ogg +obelisk/sight sounds/items/screamer.ogg + menu/activate sounds/hmenu/hmenu1.ogg menu/backup sounds/hmenu/hmenu2.ogg menu/prompt sounds/hmenu/hmenu1.ogg diff --git a/sounds/eviscerator/visc_hitf.ogg b/sounds/eviscerator/visc_hitf.ogg deleted file mode 100644 index fd426b3a6..000000000 Binary files a/sounds/eviscerator/visc_hitf.ogg and /dev/null differ diff --git a/sounds/eviscerator/visc_hitf1.ogg b/sounds/eviscerator/visc_hitf1.ogg new file mode 100644 index 000000000..9453528f6 Binary files /dev/null and b/sounds/eviscerator/visc_hitf1.ogg differ diff --git a/sounds/eviscerator/visc_hitf2.ogg b/sounds/eviscerator/visc_hitf2.ogg new file mode 100644 index 000000000..3699f7039 Binary files /dev/null and b/sounds/eviscerator/visc_hitf2.ogg differ diff --git a/sounds/eviscerator/visc_hitf3.ogg b/sounds/eviscerator/visc_hitf3.ogg new file mode 100644 index 000000000..35ba9ab8e Binary files /dev/null and b/sounds/eviscerator/visc_hitf3.ogg differ diff --git a/sounds/eviscerator/visc_hith1.ogg b/sounds/eviscerator/visc_hith1.ogg new file mode 100644 index 000000000..d3ad991c3 Binary files /dev/null and b/sounds/eviscerator/visc_hith1.ogg differ diff --git a/sounds/eviscerator/visc_hith2.ogg b/sounds/eviscerator/visc_hith2.ogg new file mode 100644 index 000000000..c08942139 Binary files /dev/null and b/sounds/eviscerator/visc_hith2.ogg differ diff --git a/sounds/eviscerator/visc_hith3.ogg b/sounds/eviscerator/visc_hith3.ogg new file mode 100644 index 000000000..4e1a0f323 Binary files /dev/null and b/sounds/eviscerator/visc_hith3.ogg differ diff --git a/sounds/eviscerator/visc_hith4.ogg b/sounds/eviscerator/visc_hith4.ogg new file mode 100644 index 000000000..ec3da2fca Binary files /dev/null and b/sounds/eviscerator/visc_hith4.ogg differ diff --git a/sounds/eviscerator/visc_hith5.ogg b/sounds/eviscerator/visc_hith5.ogg new file mode 100644 index 000000000..b8ce21c4c Binary files /dev/null and b/sounds/eviscerator/visc_hith5.ogg differ diff --git a/sounds/eviscerator/visc_hith6.ogg b/sounds/eviscerator/visc_hith6.ogg new file mode 100644 index 000000000..28f63fb10 Binary files /dev/null and b/sounds/eviscerator/visc_hith6.ogg differ diff --git a/sounds/eviscerator/visc_hith7.ogg b/sounds/eviscerator/visc_hith7.ogg new file mode 100644 index 000000000..ff95c8465 Binary files /dev/null and b/sounds/eviscerator/visc_hith7.ogg differ diff --git a/sounds/eviscerator/visc_hith8.ogg b/sounds/eviscerator/visc_hith8.ogg new file mode 100644 index 000000000..85859d51d Binary files /dev/null and b/sounds/eviscerator/visc_hith8.ogg differ diff --git a/sounds/items/eyeamb1.ogg b/sounds/items/eyeamb1.ogg new file mode 100644 index 000000000..9fe6436aa Binary files /dev/null and b/sounds/items/eyeamb1.ogg differ diff --git a/sounds/items/screamer.ogg b/sounds/items/screamer.ogg new file mode 100644 index 000000000..967ca86df Binary files /dev/null and b/sounds/items/screamer.ogg differ diff --git a/sounds/mashiro/moth_giggle.ogg b/sounds/mashiro/moth_giggle.ogg new file mode 100644 index 000000000..939a539a6 Binary files /dev/null and b/sounds/mashiro/moth_giggle.ogg differ diff --git a/sprites/BSMKA0.png b/sprites/BSMKA0.png index 5df22614b..99a794f3a 100644 Binary files a/sprites/BSMKA0.png and b/sprites/BSMKA0.png differ diff --git a/sprites/BSMKB0.png b/sprites/BSMKB0.png index 818beb80d..97f9ff2b7 100644 Binary files a/sprites/BSMKB0.png and b/sprites/BSMKB0.png differ diff --git a/sprites/BSMKC0.png b/sprites/BSMKC0.png index 35ef123a2..c3912b3ac 100644 Binary files a/sprites/BSMKC0.png and b/sprites/BSMKC0.png differ diff --git a/sprites/BSMKD0.png b/sprites/BSMKD0.png index 43d22644e..eb53cb46c 100644 Binary files a/sprites/BSMKD0.png and b/sprites/BSMKD0.png differ diff --git a/sprites/BSMKE0.png b/sprites/BSMKE0.png index 4fa3fcdd4..824983752 100644 Binary files a/sprites/BSMKE0.png and b/sprites/BSMKE0.png differ diff --git a/sprites/BSMKF0.png b/sprites/BSMKF0.png index e447ad029..4baaeb2a6 100644 Binary files a/sprites/BSMKF0.png and b/sprites/BSMKF0.png differ diff --git a/sprites/BSMKG0.png b/sprites/BSMKG0.png index ed908f416..ae9a8f2e2 100644 Binary files a/sprites/BSMKG0.png and b/sprites/BSMKG0.png differ diff --git a/sprites/BSMKH0.png b/sprites/BSMKH0.png index c486ad70b..0ff0c5450 100644 Binary files a/sprites/BSMKH0.png and b/sprites/BSMKH0.png differ diff --git a/sprites/BSMKI0.png b/sprites/BSMKI0.png index 609894cc2..39e69f687 100644 Binary files a/sprites/BSMKI0.png and b/sprites/BSMKI0.png differ diff --git a/sprites/BSMKJ0.png b/sprites/BSMKJ0.png index ee6119a5a..12db7fe60 100644 Binary files a/sprites/BSMKJ0.png and b/sprites/BSMKJ0.png differ diff --git a/sprites/BSMKK0.png b/sprites/BSMKK0.png index 87cbaa4e3..b598fa8ea 100644 Binary files a/sprites/BSMKK0.png and b/sprites/BSMKK0.png differ diff --git a/sprites/BSMKL0.png b/sprites/BSMKL0.png index bfa9b4585..12fee6318 100644 Binary files a/sprites/BSMKL0.png and b/sprites/BSMKL0.png differ diff --git a/sprites/BSMKM0.png b/sprites/BSMKM0.png index 6766ab99d..b10cd6798 100644 Binary files a/sprites/BSMKM0.png and b/sprites/BSMKM0.png differ diff --git a/sprites/BSMKN0.png b/sprites/BSMKN0.png index d301d725e..c72c3a4c3 100644 Binary files a/sprites/BSMKN0.png and b/sprites/BSMKN0.png differ diff --git a/sprites/BSMKO0.png b/sprites/BSMKO0.png index 519aa7641..82d2ae2a9 100644 Binary files a/sprites/BSMKO0.png and b/sprites/BSMKO0.png differ diff --git a/sprites/BSMKP0.png b/sprites/BSMKP0.png index 68e05862f..47adb69df 100644 Binary files a/sprites/BSMKP0.png and b/sprites/BSMKP0.png differ diff --git a/sprites/BSMKQ0.png b/sprites/BSMKQ0.png index 220474f9b..e7b70816b 100644 Binary files a/sprites/BSMKQ0.png and b/sprites/BSMKQ0.png differ diff --git a/sprites/BSMKR0.png b/sprites/BSMKR0.png index eb40756a9..82fe50a8f 100644 Binary files a/sprites/BSMKR0.png and b/sprites/BSMKR0.png differ diff --git a/sprites/BSMKS0.png b/sprites/BSMKS0.png index 2cab78b5e..9b97e383a 100644 Binary files a/sprites/BSMKS0.png and b/sprites/BSMKS0.png differ diff --git a/sprites/BSMKT0.png b/sprites/BSMKT0.png index fa1e4e4a2..84214a07b 100644 Binary files a/sprites/BSMKT0.png and b/sprites/BSMKT0.png differ diff --git a/sprites/DUSTF0.png b/sprites/DUSTF0.png index a2655c200..b64a1ab84 100644 Binary files a/sprites/DUSTF0.png and b/sprites/DUSTF0.png differ diff --git a/sprites/DUSTG0.png b/sprites/DUSTG0.png index adf908a5d..c49fd41fe 100644 Binary files a/sprites/DUSTG0.png and b/sprites/DUSTG0.png differ diff --git a/sprites/DUSTH0.png b/sprites/DUSTH0.png index 805b53adf..622f776c3 100644 Binary files a/sprites/DUSTH0.png and b/sprites/DUSTH0.png differ diff --git a/sprites/DUSTI0.png b/sprites/DUSTI0.png index 7c3577fec..2717cc507 100644 Binary files a/sprites/DUSTI0.png and b/sprites/DUSTI0.png differ diff --git a/sprites/DUSTL0.png b/sprites/DUSTL0.png index 15a70e890..d7f431098 100644 Binary files a/sprites/DUSTL0.png and b/sprites/DUSTL0.png differ diff --git a/sprites/DUSTS0.png b/sprites/DUSTS0.png index 100ba3e3e..40b5ae2a2 100644 Binary files a/sprites/DUSTS0.png and b/sprites/DUSTS0.png differ diff --git a/sprites/DUSTT0.png b/sprites/DUSTT0.png index 227673b29..aca6066b4 100644 Binary files a/sprites/DUSTT0.png and b/sprites/DUSTT0.png differ diff --git a/sprites/HEXPE0.png b/sprites/HEXPE0.png index 28da7d87e..5b636cfae 100644 Binary files a/sprites/HEXPE0.png and b/sprites/HEXPE0.png differ diff --git a/sprites/HEXPJ0.png b/sprites/HEXPJ0.png index 6aa47a4ec..d3485d9c2 100644 Binary files a/sprites/HEXPJ0.png and b/sprites/HEXPJ0.png differ diff --git a/sprites/HEXPK0.png b/sprites/HEXPK0.png index 0eb174b5d..53e01affa 100644 Binary files a/sprites/HEXPK0.png and b/sprites/HEXPK0.png differ diff --git a/sprites/HEXPO0.png b/sprites/HEXPO0.png index dad4dabd7..bd50f90b9 100644 Binary files a/sprites/HEXPO0.png and b/sprites/HEXPO0.png differ diff --git a/sprites/HEXPR0.png b/sprites/HEXPR0.png index 83fc27267..807a4be46 100644 Binary files a/sprites/HEXPR0.png and b/sprites/HEXPR0.png differ diff --git a/sprites/HFLRA0.png b/sprites/HFLRA0.png index 129b693f4..0b9884231 100644 Binary files a/sprites/HFLRA0.png and b/sprites/HFLRA0.png differ diff --git a/sprites/HFLRB0.png b/sprites/HFLRB0.png index 2e96589de..dee083f89 100644 Binary files a/sprites/HFLRB0.png and b/sprites/HFLRB0.png differ diff --git a/sprites/HFLRC0.png b/sprites/HFLRC0.png index c7bf6fbc7..ea62645e9 100644 Binary files a/sprites/HFLRC0.png and b/sprites/HFLRC0.png differ diff --git a/sprites/HFLRD0.png b/sprites/HFLRD0.png index d25911339..ac5edda33 100644 Binary files a/sprites/HFLRD0.png and b/sprites/HFLRD0.png differ diff --git a/sprites/KSX1J0.png b/sprites/KSX1J0.png index 2af2dd74b..57b088be3 100644 Binary files a/sprites/KSX1J0.png and b/sprites/KSX1J0.png differ diff --git a/sprites/KSX1W0.png b/sprites/KSX1W0.png index 5ad17cd39..eecc37c78 100644 Binary files a/sprites/KSX1W0.png and b/sprites/KSX1W0.png differ diff --git a/sprites/KSX2U0.png b/sprites/KSX2U0.png index 002a60555..1ba1f5406 100644 Binary files a/sprites/KSX2U0.png and b/sprites/KSX2U0.png differ diff --git a/sprites/KSX2V0.png b/sprites/KSX2V0.png index 34cd2c30f..ae57204f8 100644 Binary files a/sprites/KSX2V0.png and b/sprites/KSX2V0.png differ diff --git a/sprites/KSX2W0.png b/sprites/KSX2W0.png index 1e465d42d..52e70df93 100644 Binary files a/sprites/KSX2W0.png and b/sprites/KSX2W0.png differ diff --git a/sprites/KSX2X0.png b/sprites/KSX2X0.png index 5bf736842..a4fe9b9d7 100644 Binary files a/sprites/KSX2X0.png and b/sprites/KSX2X0.png differ diff --git a/sprites/KSX2Y0.png b/sprites/KSX2Y0.png index 0bbec42cf..51c20d6c7 100644 Binary files a/sprites/KSX2Y0.png and b/sprites/KSX2Y0.png differ diff --git a/sprites/KSX2[0.png b/sprites/KSX2[0.png index b86e50243..735f20eaf 100644 Binary files a/sprites/KSX2[0.png and b/sprites/KSX2[0.png differ diff --git a/sprites/KSX3A0.png b/sprites/KSX3A0.png index 7377f56ab..863cb748e 100644 Binary files a/sprites/KSX3A0.png and b/sprites/KSX3A0.png differ diff --git a/sprites/KSX3W0.png b/sprites/KSX3W0.png index cf25b7397..73ec3912d 100644 Binary files a/sprites/KSX3W0.png and b/sprites/KSX3W0.png differ diff --git a/sprites/KSX3X0.png b/sprites/KSX3X0.png index 2ad335c43..ca0f8a3e1 100644 Binary files a/sprites/KSX3X0.png and b/sprites/KSX3X0.png differ diff --git a/sprites/KSX3Y0.png b/sprites/KSX3Y0.png index c0565e556..fe152cf03 100644 Binary files a/sprites/KSX3Y0.png and b/sprites/KSX3Y0.png differ diff --git a/sprites/MOXPX0.png b/sprites/MOXPX0.png index 68d236fb1..d6d7f1824 100644 Binary files a/sprites/MOXPX0.png and b/sprites/MOXPX0.png differ diff --git a/sprites/MOXPZ0.png b/sprites/MOXPZ0.png index 19e5178a9..07fa86389 100644 Binary files a/sprites/MOXPZ0.png and b/sprites/MOXPZ0.png differ diff --git a/sprites/MOXP[0.png b/sprites/MOXP[0.png index a6421cb02..5d858ed82 100644 Binary files a/sprites/MOXP[0.png and b/sprites/MOXP[0.png differ diff --git a/sprites/MOXP^0.png b/sprites/MOXP^0.png index c54ddbba1..707f6c47e 100644 Binary files a/sprites/MOXP^0.png and b/sprites/MOXP^0.png differ diff --git a/sprites/QSM6C0.png b/sprites/QSM6C0.png index be4099771..4c95ed810 100644 Binary files a/sprites/QSM6C0.png and b/sprites/QSM6C0.png differ diff --git a/sprites/QSM6E0.png b/sprites/QSM6E0.png index 462e68bbc..e6106129a 100644 Binary files a/sprites/QSM6E0.png and b/sprites/QSM6E0.png differ diff --git a/sprites/QSM6G0.png b/sprites/QSM6G0.png index 9ad91947f..abd95a27a 100644 Binary files a/sprites/QSM6G0.png and b/sprites/QSM6G0.png differ diff --git a/sprites/QSM6H0.png b/sprites/QSM6H0.png index 341f261d1..921f50f08 100644 Binary files a/sprites/QSM6H0.png and b/sprites/QSM6H0.png differ diff --git a/sprites/QSM6J0.png b/sprites/QSM6J0.png index 289025c84..2fbf51e87 100644 Binary files a/sprites/QSM6J0.png and b/sprites/QSM6J0.png differ diff --git a/sprites/QSM6K0.png b/sprites/QSM6K0.png index 8ceaae969..37620a3c0 100644 Binary files a/sprites/QSM6K0.png and b/sprites/QSM6K0.png differ diff --git a/sprites/QSM6L0.png b/sprites/QSM6L0.png index 584423790..ceaee70bf 100644 Binary files a/sprites/QSM6L0.png and b/sprites/QSM6L0.png differ diff --git a/sprites/QSM6M0.png b/sprites/QSM6M0.png index 41bfaefc0..9132800c3 100644 Binary files a/sprites/QSM6M0.png and b/sprites/QSM6M0.png differ diff --git a/sprites/QSM6N0.png b/sprites/QSM6N0.png index 4874c1ff5..2297539b6 100644 Binary files a/sprites/QSM6N0.png and b/sprites/QSM6N0.png differ diff --git a/sprites/QSM6O0.png b/sprites/QSM6O0.png index 9dabe294d..2fd5ac232 100644 Binary files a/sprites/QSM6O0.png and b/sprites/QSM6O0.png differ diff --git a/sprites/QSM6P0.png b/sprites/QSM6P0.png index 794bb317c..6a14c6c62 100644 Binary files a/sprites/QSM6P0.png and b/sprites/QSM6P0.png differ diff --git a/sprites/QSM6Q0.png b/sprites/QSM6Q0.png index 4b8f57c78..5dc41d245 100644 Binary files a/sprites/QSM6Q0.png and b/sprites/QSM6Q0.png differ diff --git a/sprites/RFLMB0.png b/sprites/RFLMB0.png index 26cb05db8..6e7817fb5 100644 Binary files a/sprites/RFLMB0.png and b/sprites/RFLMB0.png differ diff --git a/sprites/RFLMG0.png b/sprites/RFLMG0.png index 673d3c2d0..9f0a7b407 100644 Binary files a/sprites/RFLMG0.png and b/sprites/RFLMG0.png differ diff --git a/sprites/RFLMK0.png b/sprites/RFLMK0.png index 2fa387c60..2255f8e80 100644 Binary files a/sprites/RFLMK0.png and b/sprites/RFLMK0.png differ diff --git a/sprites/SBLDA0.png b/sprites/SBLDA0.png index d6d0ad4d3..c12cf57a7 100644 Binary files a/sprites/SBLDA0.png and b/sprites/SBLDA0.png differ diff --git a/sprites/SBLDB0.png b/sprites/SBLDB0.png index 862b48266..728ddafb8 100644 Binary files a/sprites/SBLDB0.png and b/sprites/SBLDB0.png differ diff --git a/sprites/SBLDC0.png b/sprites/SBLDC0.png index 3759603ad..7b0fa3a20 100644 Binary files a/sprites/SBLDC0.png and b/sprites/SBLDC0.png differ diff --git a/sprites/SBLDD0.png b/sprites/SBLDD0.png index f439b8e17..cd658778d 100644 Binary files a/sprites/SBLDD0.png and b/sprites/SBLDD0.png differ diff --git a/sprites/SBLDE0.png b/sprites/SBLDE0.png index f1ce30bb9..dddb89d7c 100644 Binary files a/sprites/SBLDE0.png and b/sprites/SBLDE0.png differ diff --git a/sprites/SPEXX0.png b/sprites/SPEXX0.png index 8d99e9fce..c303c18a7 100644 Binary files a/sprites/SPEXX0.png and b/sprites/SPEXX0.png differ diff --git a/sprites/SPEXY0.png b/sprites/SPEXY0.png index 59d6ae51d..36a40842e 100644 Binary files a/sprites/SPEXY0.png and b/sprites/SPEXY0.png differ diff --git a/sprites/SPEXZ0.png b/sprites/SPEXZ0.png index a30c19c12..a0310e7f7 100644 Binary files a/sprites/SPEXZ0.png and b/sprites/SPEXZ0.png differ diff --git a/sprites/SPEX[0.png b/sprites/SPEX[0.png index 88a285b70..23f65e7d1 100644 Binary files a/sprites/SPEX[0.png and b/sprites/SPEX[0.png differ diff --git a/sprites/XBUBJ0.png b/sprites/XBUBJ0.png index e3dd89dc9..84a6b1d3c 100644 Binary files a/sprites/XBUBJ0.png and b/sprites/XBUBJ0.png differ diff --git a/sprites/XEX4H0.png b/sprites/XEX4H0.png index cb0c8874d..311e4b81b 100644 Binary files a/sprites/XEX4H0.png and b/sprites/XEX4H0.png differ diff --git a/sprites/XFLMB0.png b/sprites/XFLMB0.png index 3096ee36a..4d67478e7 100644 Binary files a/sprites/XFLMB0.png and b/sprites/XFLMB0.png differ diff --git a/sprites/XFLMH0.png b/sprites/XFLMH0.png index 59e458283..89ca6b505 100644 Binary files a/sprites/XFLMH0.png and b/sprites/XFLMH0.png differ diff --git a/sprites/XFLMI0.png b/sprites/XFLMI0.png index 1edc74163..e0a4aa65b 100644 Binary files a/sprites/XFLMI0.png and b/sprites/XFLMI0.png differ diff --git a/sprites/XFLMK0.png b/sprites/XFLMK0.png index 8f54f380b..f96001d6e 100644 Binary files a/sprites/XFLMK0.png and b/sprites/XFLMK0.png differ diff --git a/sprites/XFLMM0.png b/sprites/XFLMM0.png index 1d187155e..8248690d0 100644 Binary files a/sprites/XFLMM0.png and b/sprites/XFLMM0.png differ diff --git a/sprites/XFLMO0.png b/sprites/XFLMO0.png index ef4885160..58b97896c 100644 Binary files a/sprites/XFLMO0.png and b/sprites/XFLMO0.png differ diff --git a/sprites/XFLMP0.png b/sprites/XFLMP0.png index 4878644ca..bf4ede219 100644 Binary files a/sprites/XFLMP0.png and b/sprites/XFLMP0.png differ diff --git a/sprites/XFLMQ0.png b/sprites/XFLMQ0.png index 168e4a873..6ce53365d 100644 Binary files a/sprites/XFLMQ0.png and b/sprites/XFLMQ0.png differ diff --git a/sprites/XFLMR0.png b/sprites/XFLMR0.png index f302cc9fe..342a1a262 100644 Binary files a/sprites/XFLMR0.png and b/sprites/XFLMR0.png differ diff --git a/sprites/XFLMS0.png b/sprites/XFLMS0.png index 73d04fda7..51ccc0cf1 100644 Binary files a/sprites/XFLMS0.png and b/sprites/XFLMS0.png differ diff --git a/sprites/XRG1A0.png b/sprites/XRG1A0.png index 38d2f57e4..bde6b6e05 100644 Binary files a/sprites/XRG1A0.png and b/sprites/XRG1A0.png differ diff --git a/sprites/XRG1Q0.png b/sprites/XRG1Q0.png index 66d6a78d4..4bfcc5971 100644 Binary files a/sprites/XRG1Q0.png and b/sprites/XRG1Q0.png differ diff --git a/sprites/XRG2S0.png b/sprites/XRG2S0.png index f2e8070b9..e3b5428c4 100644 Binary files a/sprites/XRG2S0.png and b/sprites/XRG2S0.png differ diff --git a/sprites/XRG4K0.png b/sprites/XRG4K0.png index 48f816bda..17ceae8b8 100644 Binary files a/sprites/XRG4K0.png and b/sprites/XRG4K0.png differ diff --git a/sprites/XRG4W0.png b/sprites/XRG4W0.png index 25705c984..c452840f7 100644 Binary files a/sprites/XRG4W0.png and b/sprites/XRG4W0.png differ diff --git a/sprites/XRG5P0.png b/sprites/XRG5P0.png index 24d7a2a5f..28d7c682f 100644 Binary files a/sprites/XRG5P0.png and b/sprites/XRG5P0.png differ diff --git a/sprites/XSEXA0.png b/sprites/XSEXA0.png index 2576dc866..8991c3d59 100644 Binary files a/sprites/XSEXA0.png and b/sprites/XSEXA0.png differ diff --git a/sprites/XSEXE0.png b/sprites/XSEXE0.png index 89c1cee14..179396657 100644 Binary files a/sprites/XSEXE0.png and b/sprites/XSEXE0.png differ diff --git a/sprites/XSEXF0.png b/sprites/XSEXF0.png index d802148a1..6e2abc35d 100644 Binary files a/sprites/XSEXF0.png and b/sprites/XSEXF0.png differ diff --git a/sprites/XSEXH0.png b/sprites/XSEXH0.png index 671c1883e..1bf11abb9 100644 Binary files a/sprites/XSEXH0.png and b/sprites/XSEXH0.png differ diff --git a/sprites/XSEXI0.png b/sprites/XSEXI0.png index 4b8c75ae8..c5a712183 100644 Binary files a/sprites/XSEXI0.png and b/sprites/XSEXI0.png differ diff --git a/sprites/XSEXL0.png b/sprites/XSEXL0.png index 2558935b1..734a17f01 100644 Binary files a/sprites/XSEXL0.png and b/sprites/XSEXL0.png differ diff --git a/sprites/XSMKS0.png b/sprites/XSMKS0.png index df9f6cfd6..fe62c2a6a 100644 Binary files a/sprites/XSMKS0.png and b/sprites/XSMKS0.png differ diff --git a/sprites/bossbrain/BBRNA0.png b/sprites/bossbrain/BBRNA0.png new file mode 100644 index 000000000..3af9fdb85 Binary files /dev/null and b/sprites/bossbrain/BBRNA0.png differ diff --git a/sprites/bossbrain/BBRNB0.png b/sprites/bossbrain/BBRNB0.png new file mode 100644 index 000000000..3af9fdb85 Binary files /dev/null and b/sprites/bossbrain/BBRNB0.png differ diff --git a/sprites/keen/KEE2A0.png b/sprites/keen/KEE2A0.png new file mode 100644 index 000000000..53c050870 Binary files /dev/null and b/sprites/keen/KEE2A0.png differ diff --git a/sprites/keen/KEE2B0.png b/sprites/keen/KEE2B0.png new file mode 100644 index 000000000..ac37410ec Binary files /dev/null and b/sprites/keen/KEE2B0.png differ diff --git a/sprites/keen/KEE2C0.png b/sprites/keen/KEE2C0.png new file mode 100644 index 000000000..378b46f75 Binary files /dev/null and b/sprites/keen/KEE2C0.png differ diff --git a/sprites/keen/KEE2D0.png b/sprites/keen/KEE2D0.png new file mode 100644 index 000000000..0e122dda0 Binary files /dev/null and b/sprites/keen/KEE2D0.png differ diff --git a/sprites/keen/KEE2E0.png b/sprites/keen/KEE2E0.png new file mode 100644 index 000000000..eecb3062c Binary files /dev/null and b/sprites/keen/KEE2E0.png differ diff --git a/sprites/keen/KEE2F0.png b/sprites/keen/KEE2F0.png new file mode 100644 index 000000000..280194737 Binary files /dev/null and b/sprites/keen/KEE2F0.png differ diff --git a/sprites/keen/KEE2G0.png b/sprites/keen/KEE2G0.png new file mode 100644 index 000000000..eb4b878bd Binary files /dev/null and b/sprites/keen/KEE2G0.png differ diff --git a/sprites/keen/KEE3A0.png b/sprites/keen/KEE3A0.png new file mode 100644 index 000000000..7f40be7a0 Binary files /dev/null and b/sprites/keen/KEE3A0.png differ diff --git a/sprites/keen/KEE3B0.png b/sprites/keen/KEE3B0.png new file mode 100644 index 000000000..08820690c Binary files /dev/null and b/sprites/keen/KEE3B0.png differ diff --git a/sprites/xdeaths/BO2XA0.png b/sprites/xdeaths/BO2XA0.png new file mode 100644 index 000000000..21e3c816f Binary files /dev/null and b/sprites/xdeaths/BO2XA0.png differ diff --git a/sprites/xdeaths/BO2XB0.png b/sprites/xdeaths/BO2XB0.png new file mode 100644 index 000000000..214ff3014 Binary files /dev/null and b/sprites/xdeaths/BO2XB0.png differ diff --git a/sprites/xdeaths/BO2XC0.png b/sprites/xdeaths/BO2XC0.png new file mode 100644 index 000000000..fe944a2ea Binary files /dev/null and b/sprites/xdeaths/BO2XC0.png differ diff --git a/sprites/xdeaths/BO2XD0.png b/sprites/xdeaths/BO2XD0.png new file mode 100644 index 000000000..c710ff2e5 Binary files /dev/null and b/sprites/xdeaths/BO2XD0.png differ diff --git a/sprites/xdeaths/BO2XE0.png b/sprites/xdeaths/BO2XE0.png new file mode 100644 index 000000000..640e28bc3 Binary files /dev/null and b/sprites/xdeaths/BO2XE0.png differ diff --git a/sprites/xdeaths/BO2XF0.png b/sprites/xdeaths/BO2XF0.png new file mode 100644 index 000000000..dab39d8f0 Binary files /dev/null and b/sprites/xdeaths/BO2XF0.png differ diff --git a/sprites/xdeaths/BO2XG0.png b/sprites/xdeaths/BO2XG0.png new file mode 100644 index 000000000..b7093112b Binary files /dev/null and b/sprites/xdeaths/BO2XG0.png differ diff --git a/sprites/xdeaths/BO2XH0.png b/sprites/xdeaths/BO2XH0.png new file mode 100644 index 000000000..fc23972c6 Binary files /dev/null and b/sprites/xdeaths/BO2XH0.png differ diff --git a/sprites/xdeaths/BO2XI0.png b/sprites/xdeaths/BO2XI0.png new file mode 100644 index 000000000..89555a032 Binary files /dev/null and b/sprites/xdeaths/BO2XI0.png differ diff --git a/sprites/xdeaths/BOSXA0.png b/sprites/xdeaths/BOSXA0.png new file mode 100644 index 000000000..473844906 Binary files /dev/null and b/sprites/xdeaths/BOSXA0.png differ diff --git a/sprites/xdeaths/BOSXB0.png b/sprites/xdeaths/BOSXB0.png new file mode 100644 index 000000000..c22ede126 Binary files /dev/null and b/sprites/xdeaths/BOSXB0.png differ diff --git a/sprites/xdeaths/BOSXC0.png b/sprites/xdeaths/BOSXC0.png new file mode 100644 index 000000000..964984915 Binary files /dev/null and b/sprites/xdeaths/BOSXC0.png differ diff --git a/sprites/xdeaths/BOSXD0.png b/sprites/xdeaths/BOSXD0.png new file mode 100644 index 000000000..dde892a31 Binary files /dev/null and b/sprites/xdeaths/BOSXD0.png differ diff --git a/sprites/xdeaths/BOSXE0.png b/sprites/xdeaths/BOSXE0.png new file mode 100644 index 000000000..08d4726eb Binary files /dev/null and b/sprites/xdeaths/BOSXE0.png differ diff --git a/sprites/xdeaths/BOSXF0.png b/sprites/xdeaths/BOSXF0.png new file mode 100644 index 000000000..5e505946a Binary files /dev/null and b/sprites/xdeaths/BOSXF0.png differ diff --git a/sprites/xdeaths/BOSXG0.png b/sprites/xdeaths/BOSXG0.png new file mode 100644 index 000000000..3d395df42 Binary files /dev/null and b/sprites/xdeaths/BOSXG0.png differ diff --git a/sprites/xdeaths/BOSXH0.png b/sprites/xdeaths/BOSXH0.png new file mode 100644 index 000000000..1c446fdb9 Binary files /dev/null and b/sprites/xdeaths/BOSXH0.png differ diff --git a/sprites/xdeaths/BOSXI0.png b/sprites/xdeaths/BOSXI0.png new file mode 100644 index 000000000..5f7ba7e51 Binary files /dev/null and b/sprites/xdeaths/BOSXI0.png differ diff --git a/sprites/xdeaths/CACXA0.png b/sprites/xdeaths/CACXA0.png new file mode 100644 index 000000000..761385572 Binary files /dev/null and b/sprites/xdeaths/CACXA0.png differ diff --git a/sprites/xdeaths/CACXB0.png b/sprites/xdeaths/CACXB0.png new file mode 100644 index 000000000..b5b733adb Binary files /dev/null and b/sprites/xdeaths/CACXB0.png differ diff --git a/sprites/xdeaths/CACXC0.png b/sprites/xdeaths/CACXC0.png new file mode 100644 index 000000000..a73fd80ae Binary files /dev/null and b/sprites/xdeaths/CACXC0.png differ diff --git a/sprites/xdeaths/CACXD0.png b/sprites/xdeaths/CACXD0.png new file mode 100644 index 000000000..7d81c80b8 Binary files /dev/null and b/sprites/xdeaths/CACXD0.png differ diff --git a/sprites/xdeaths/CACXE0.png b/sprites/xdeaths/CACXE0.png new file mode 100644 index 000000000..f2113f930 Binary files /dev/null and b/sprites/xdeaths/CACXE0.png differ diff --git a/sprites/xdeaths/CACXF0.png b/sprites/xdeaths/CACXF0.png new file mode 100644 index 000000000..ce105e798 Binary files /dev/null and b/sprites/xdeaths/CACXF0.png differ diff --git a/sprites/xdeaths/CACXG0.png b/sprites/xdeaths/CACXG0.png new file mode 100644 index 000000000..bcbf20ca5 Binary files /dev/null and b/sprites/xdeaths/CACXG0.png differ diff --git a/sprites/xdeaths/CACXH0.png b/sprites/xdeaths/CACXH0.png new file mode 100644 index 000000000..003a0b625 Binary files /dev/null and b/sprites/xdeaths/CACXH0.png differ diff --git a/sprites/xdeaths/REVXA0.png b/sprites/xdeaths/REVXA0.png new file mode 100644 index 000000000..863c43872 Binary files /dev/null and b/sprites/xdeaths/REVXA0.png differ diff --git a/sprites/xdeaths/REVXB0.png b/sprites/xdeaths/REVXB0.png new file mode 100644 index 000000000..c38b9be14 Binary files /dev/null and b/sprites/xdeaths/REVXB0.png differ diff --git a/sprites/xdeaths/REVXC0.png b/sprites/xdeaths/REVXC0.png new file mode 100644 index 000000000..56dde65f8 Binary files /dev/null and b/sprites/xdeaths/REVXC0.png differ diff --git a/sprites/xdeaths/REVXD0.png b/sprites/xdeaths/REVXD0.png new file mode 100644 index 000000000..e6b25a616 Binary files /dev/null and b/sprites/xdeaths/REVXD0.png differ diff --git a/sprites/xdeaths/REVXE0.png b/sprites/xdeaths/REVXE0.png new file mode 100644 index 000000000..ef851aef7 Binary files /dev/null and b/sprites/xdeaths/REVXE0.png differ diff --git a/sprites/xdeaths/REVXF0.png b/sprites/xdeaths/REVXF0.png new file mode 100644 index 000000000..1d011439e Binary files /dev/null and b/sprites/xdeaths/REVXF0.png differ diff --git a/sprites/xdeaths/SARXA0.png b/sprites/xdeaths/SARXA0.png new file mode 100644 index 000000000..d9fa2b115 Binary files /dev/null and b/sprites/xdeaths/SARXA0.png differ diff --git a/sprites/xdeaths/SARXB0.png b/sprites/xdeaths/SARXB0.png new file mode 100644 index 000000000..fdffc9cca Binary files /dev/null and b/sprites/xdeaths/SARXB0.png differ diff --git a/sprites/xdeaths/SARXC0.png b/sprites/xdeaths/SARXC0.png new file mode 100644 index 000000000..725935771 Binary files /dev/null and b/sprites/xdeaths/SARXC0.png differ diff --git a/sprites/xdeaths/SARXD0.png b/sprites/xdeaths/SARXD0.png new file mode 100644 index 000000000..d2767c630 Binary files /dev/null and b/sprites/xdeaths/SARXD0.png differ diff --git a/sprites/xdeaths/SARXE0.png b/sprites/xdeaths/SARXE0.png new file mode 100644 index 000000000..5ba640f25 Binary files /dev/null and b/sprites/xdeaths/SARXE0.png differ diff --git a/sprites/xdeaths/SARXF0.png b/sprites/xdeaths/SARXF0.png new file mode 100644 index 000000000..1ad6a389c Binary files /dev/null and b/sprites/xdeaths/SARXF0.png differ diff --git a/sprites/xdeaths/SARXG0.png b/sprites/xdeaths/SARXG0.png new file mode 100644 index 000000000..cf4661332 Binary files /dev/null and b/sprites/xdeaths/SARXG0.png differ diff --git a/sprites/xdeaths/VILXA0.png b/sprites/xdeaths/VILXA0.png new file mode 100644 index 000000000..553040b0a Binary files /dev/null and b/sprites/xdeaths/VILXA0.png differ diff --git a/sprites/xdeaths/VILXB0.png b/sprites/xdeaths/VILXB0.png new file mode 100644 index 000000000..b19c65d47 Binary files /dev/null and b/sprites/xdeaths/VILXB0.png differ diff --git a/sprites/xdeaths/VILXC0.png b/sprites/xdeaths/VILXC0.png new file mode 100644 index 000000000..98b1f6674 Binary files /dev/null and b/sprites/xdeaths/VILXC0.png differ diff --git a/sprites/xdeaths/VILXD0.png b/sprites/xdeaths/VILXD0.png new file mode 100644 index 000000000..266a5df4f Binary files /dev/null and b/sprites/xdeaths/VILXD0.png differ diff --git a/sprites/xdeaths/VILXE0.png b/sprites/xdeaths/VILXE0.png new file mode 100644 index 000000000..5d65b92cd Binary files /dev/null and b/sprites/xdeaths/VILXE0.png differ diff --git a/sprites/xdeaths/VILXF0.png b/sprites/xdeaths/VILXF0.png new file mode 100644 index 000000000..fabeec087 Binary files /dev/null and b/sprites/xdeaths/VILXF0.png differ diff --git a/sprites/xdeaths/VILXG0.png b/sprites/xdeaths/VILXG0.png new file mode 100644 index 000000000..601adc855 Binary files /dev/null and b/sprites/xdeaths/VILXG0.png differ diff --git a/textures/-noflat-.png b/textures/-noflat-.png index e6574f047..0441b26d9 100644 Binary files a/textures/-noflat-.png and b/textures/-noflat-.png differ diff --git a/textures/graynoise.png b/textures/graynoise.png index 415a31d48..8c4796010 100644 Binary files a/textures/graynoise.png and b/textures/graynoise.png differ diff --git a/textures/heattex.png b/textures/heattex.png index ec563e6e4..00a39ee86 100644 Binary files a/textures/heattex.png and b/textures/heattex.png differ diff --git a/textures/kinstile.png b/textures/kinstile.png index 0625f7266..c3af54a54 100644 Binary files a/textures/kinstile.png and b/textures/kinstile.png differ diff --git a/textures/lavawarp.png b/textures/lavawarp.png index da1013b8c..b3bba7127 100644 Binary files a/textures/lavawarp.png and b/textures/lavawarp.png differ diff --git a/textures/ragewarp.png b/textures/ragewarp.png index c87b3e809..3d9e275e3 100644 Binary files a/textures/ragewarp.png and b/textures/ragewarp.png differ diff --git a/textures/wetwarp.png b/textures/wetwarp.png index fea9858be..d78719f97 100644 Binary files a/textures/wetwarp.png and b/textures/wetwarp.png differ diff --git a/zmapinfo.txt b/zmapinfo.txt index d4fb15c70..a7a6f6216 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -1,6 +1,6 @@ GameInfo { - AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHDoomHandler", "SWWMVanillaBossHandler", "SWWMHandler", "SWWMGoreHandler", "CBTHandler", "SWWMPreloader", "SWWMReadThisHijacker" + AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHDoomHandler", "SWWMVanillaBossHandler", "SWWMHandler", "SWWMGoreHandler", "CBTHandler", "SWWMPreloader", "SWWMReadThisHijacker", "EyeObeliskFlash" PlayerClasses = "Demolitionist" StatusBarClass = "SWWMStatusBar" BackpackType = "HammerspaceEmbiggener" @@ -41,6 +41,12 @@ Map TITLEMAP "SWWM GZ - Title Map" EventHandlers = "SWWMTitleStuff" } +DamageType EndLevel +{ + NoArmor + Obituary = "$O_ENDLEVEL" +} + // edited Doom 2 cast to show the Demolitionist at the end Intermission Doom2Cast { diff --git a/zscript/dlc1/swwm_blackfire.zsc b/zscript/dlc/swwm_blackfire.zsc similarity index 72% rename from zscript/dlc1/swwm_blackfire.zsc rename to zscript/dlc/swwm_blackfire.zsc index 347640e7e..8855b3504 100644 --- a/zscript/dlc1/swwm_blackfire.zsc +++ b/zscript/dlc/swwm_blackfire.zsc @@ -1,5 +1,5 @@ // Unissix Crafts Blackfire Igniter (from UnSX 4, cut from initial SWWM GZ release) -// Slot 6, spawns shared with Hellblazer +// Slot 7, spawns shared with Biospark Carbine Class BlackfireIgniter : SWWMWeapon { diff --git a/zscript/dlc1/swwm_dlc1ammo.zsc b/zscript/dlc/swwm_dlcammo.zsc similarity index 61% rename from zscript/dlc1/swwm_dlc1ammo.zsc rename to zscript/dlc/swwm_dlcammo.zsc index 4375872ae..b54e10489 100644 --- a/zscript/dlc1/swwm_dlc1ammo.zsc +++ b/zscript/dlc/swwm_dlcammo.zsc @@ -12,6 +12,18 @@ Class SMW05BigAmmo : SMW05Ammo { } +Class SheenAmmo : Ammo +{ +} + +Class SheenSmallAmmo: SheenAmmo +{ +} + +Class SheenBigAmmo : SheenAmmo +{ +} + Class QuadravolAmmo : Ammo { } @@ -24,22 +36,18 @@ Class DarkCanister : Ammo { } -Class LargeDarkCanister : DarkCanister -{ -} - -Class KinylumUnit : Ammo -{ -} - -Class NokronUnit : Ammo -{ -} - Class EMPCore : Ammo { } -Class MadCore : Ammo +Class EMPCoreBundleSpawn : Actor +{ +} + +Class RayBolt : MagAmmo +{ +} + +Class RayAmmo : Ammo { } diff --git a/zscript/dlc1/swwm_hammertime.zsc b/zscript/dlc/swwm_hammertime.zsc similarity index 100% rename from zscript/dlc1/swwm_hammertime.zsc rename to zscript/dlc/swwm_hammertime.zsc diff --git a/zscript/dlc2/swwm_heavymahsheengun.zsc b/zscript/dlc/swwm_heavymahsheengun.zsc similarity index 100% rename from zscript/dlc2/swwm_heavymahsheengun.zsc rename to zscript/dlc/swwm_heavymahsheengun.zsc diff --git a/zscript/dlc1/swwm_notashotgun.zsc b/zscript/dlc/swwm_notashotgun.zsc similarity index 72% rename from zscript/dlc1/swwm_notashotgun.zsc rename to zscript/dlc/swwm_notashotgun.zsc index a090b129c..80ce2d315 100644 --- a/zscript/dlc1/swwm_notashotgun.zsc +++ b/zscript/dlc/swwm_notashotgun.zsc @@ -1,5 +1,5 @@ // Kmonn Shuna Quadravol (from UnSX series, not a Quadshot reskin anymore) -// Slot 5, spawns shared with Eviscerator +// Slot 6, spawns shared with Hellblazer Class Quadravol : SWWMWeapon { diff --git a/zscript/dlc1/swwm_rebolber.zsc b/zscript/dlc/swwm_rebolber.zsc similarity index 100% rename from zscript/dlc1/swwm_rebolber.zsc rename to zscript/dlc/swwm_rebolber.zsc diff --git a/zscript/dlc1/swwm_supermarioworld.zsc b/zscript/dlc/swwm_supermarioworld.zsc similarity index 100% rename from zscript/dlc1/swwm_supermarioworld.zsc rename to zscript/dlc/swwm_supermarioworld.zsc diff --git a/zscript/dlc2/swwm_thiccbolts.zsc b/zscript/dlc/swwm_thiccbolts.zsc similarity index 100% rename from zscript/dlc2/swwm_thiccbolts.zsc rename to zscript/dlc/swwm_thiccbolts.zsc diff --git a/zscript/dlc1/swwm_veryveryfrightening.zsc b/zscript/dlc/swwm_veryveryfrightening.zsc similarity index 100% rename from zscript/dlc1/swwm_veryveryfrightening.zsc rename to zscript/dlc/swwm_veryveryfrightening.zsc diff --git a/zscript/dlc1/swwm_prowelfartsupinthetadel.zsc b/zscript/dlc1/swwm_prowelfartsupinthetadel.zsc deleted file mode 100644 index 9cd1e9534..000000000 --- a/zscript/dlc1/swwm_prowelfartsupinthetadel.zsc +++ /dev/null @@ -1,6 +0,0 @@ -// PROWEL and TADEL artifacts, by Nukritas 2xx of the University of Nos-Kora (from UnSX series, based on nonsensical gibberish) -// Slot 9, spawns shared with Candy Gun - -Class PROWELfartsupintheTADEL : SWWMWeapon -{ -} diff --git a/zscript/dlc1/swwm_sparkety.zsc b/zscript/dlc1/swwm_sparkety.zsc deleted file mode 100644 index 9c2a27b3f..000000000 --- a/zscript/dlc1/swwm_sparkety.zsc +++ /dev/null @@ -1,6 +0,0 @@ -// Tach-Engine Technologies Series x3 Sparkster Carbine (UnSX 2) -// Slot 7, spawns shared with Legacy Sparkster - -Class ModernSparkster : SWWMWeapon -{ -} diff --git a/zscript/dlc2/swwm_dlc2ammo.zsc b/zscript/dlc2/swwm_dlc2ammo.zsc deleted file mode 100644 index 4fd45b16b..000000000 --- a/zscript/dlc2/swwm_dlc2ammo.zsc +++ /dev/null @@ -1,37 +0,0 @@ -// All DLC weapon ammo pickups - -Class SheenAmmo : Ammo -{ -} - -Class SheenBigAmmo : SheenAmmo -{ -} - -Class SkullAmmo : Ammo -{ -} - -Class SkullPack : SkullAmmo -{ -} - -Class CryoMag : Ammo -{ -} - -Class CryoBullet : MagAmmo -{ -} - -Class RayAmmo : Ammo -{ -} - -Class RayBundle : RayAmmo -{ -} - -Class AODAmmo : Ammo -{ -} diff --git a/zscript/dlc2/swwm_popsicles.zsc b/zscript/dlc2/swwm_popsicles.zsc deleted file mode 100644 index d5f9a7f0c..000000000 --- a/zscript/dlc2/swwm_popsicles.zsc +++ /dev/null @@ -1,6 +0,0 @@ -// Nuutek Cryolance (from SWWM Platinum Expansion Pack 2) -// Slot 8, spawns shared with Silver Bullet JET - -Class Cryolance : SWWMWeapon -{ -} diff --git a/zscript/dlc2/swwm_spookyscaryskeletons.zsc b/zscript/dlc2/swwm_spookyscaryskeletons.zsc deleted file mode 100644 index 3db9f88da..000000000 --- a/zscript/dlc2/swwm_spookyscaryskeletons.zsc +++ /dev/null @@ -1,6 +0,0 @@ -// Dr. Locke's Spooky Scary Skeleton Shooter aka "Skull Launcher" (from unreleased "Weird Weapons" UT minimod) -// Slot 6, spawns shared with Hellblazer - -Class SkullLauncher : SWWMWeapon -{ -} diff --git a/zscript/dlc2/swwm_zombigoastsleavethisplace.zsc b/zscript/dlc2/swwm_zombigoastsleavethisplace.zsc deleted file mode 100644 index 8230382ab..000000000 --- a/zscript/dlc2/swwm_zombigoastsleavethisplace.zsc +++ /dev/null @@ -1,6 +0,0 @@ -// Angels of Death (from SWWM Platinum Expansion Pack 2) -// Slot 0, spawns shared with Ynykron - -Class AODWeapon : SWWMWeapon -{ -} diff --git a/zscript/swwm_ammo.zsc b/zscript/swwm_ammo.zsc index 3f14c46c5..32f53a1c8 100644 --- a/zscript/swwm_ammo.zsc +++ b/zscript/swwm_ammo.zsc @@ -160,6 +160,11 @@ Mixin Class SWWMAmmo } return Super.HandlePickup(item); } + + default + { + +INVENTORY.IGNORESKILL; + } } // Common code for individual bullets @@ -1248,7 +1253,7 @@ Class AmmoFabricator : Inventory abstract int maxb = ib?ib.MaxAmount:GetDefaultByType(b).Amount; double facta = cnta/double(maxa); double factb = cntb/double(maxb); - return (facta > factb); + return (facta >= factb); } private int partition_fabammo( Array > a, int l, int h ) @@ -1293,7 +1298,7 @@ Class AmmoFabricator : Inventory abstract if ( !(def.Stamina) || (def.Stamina > maxunitprice) ) continue; available.Push(a); } - // sort by "need weight" (prioritize ammo that the player lacks over ammo that te player has plenty of + // sort by "need weight" (prioritize ammo that the player lacks over ammo that the player has plenty of qsort_fabammo(available,0,available.Size()-1); // loop through until we fill the inventory or run out of budget bool given = false; @@ -1381,7 +1386,6 @@ Class FabricatorTier1 : AmmoFabricator AmmoFabricator.Budget 5000; AmmoFabricator.PerType 2; AmmoFabricator.MaxUnitPrice 2500; - Stamina 3000; } } Class FabricatorTier2 : AmmoFabricator @@ -1397,7 +1401,6 @@ Class FabricatorTier2 : AmmoFabricator AmmoFabricator.Budget 15000; AmmoFabricator.PerType 4; AmmoFabricator.MaxUnitPrice 10000; - Stamina 12000; } } Class FabricatorTier3 : AmmoFabricator @@ -1413,7 +1416,6 @@ Class FabricatorTier3 : AmmoFabricator AmmoFabricator.Budget 150000; AmmoFabricator.PerType 8; AmmoFabricator.MaxUnitPrice 80000; - Stamina 150000; } } Class FabricatorTier4 : AmmoFabricator @@ -1428,7 +1430,6 @@ Class FabricatorTier4 : AmmoFabricator AmmoFabricator.PerType int.max; AmmoFabricator.MaxUnitPrice int.max; -INVENTORY.AUTOACTIVATE; - Stamina 1920000; } } diff --git a/zscript/swwm_blazeit.zsc b/zscript/swwm_blazeit.zsc index 5b9846a34..ab125a510 100644 --- a/zscript/swwm_blazeit.zsc +++ b/zscript/swwm_blazeit.zsc @@ -331,6 +331,7 @@ Class HellblazerMissile : Actor s.scale *= FRandom[Hellblazer](0.9,1.8); } Spawn("HellblazerRing",pos); + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,350,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } void A_SubExpl( double xscale = 1. ) @@ -438,6 +439,7 @@ Class HellblazerCrackshot : HellblazerMissile c.target = target; c.ReactionTime += Random[Hellblazer](-10,10); } + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,300,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } States @@ -496,6 +498,7 @@ Class HellblazerRavager : HellblazerMissile s.scale *= FRandom[Hellblazer](0.9,1.8); } Spawn("HellblazerRing",pos); + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,400,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } void A_RavagerSub() @@ -574,6 +577,7 @@ Class HellblazerWarhead : HellblazerMissile s.scale *= FRandom[Hellblazer](0.9,1.8); } Spawn("HellblazerRing2",pos); + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,2000,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } void A_WarheadSub() diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 1ecafea2a..d1303ead0 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -584,6 +584,81 @@ Class PurpleBloodReference : Actor } } +// bare actor used for extra gib deaths +Class ExtraGibDeaths : Actor +{ + StateLabel gibstate; + + static void GibThis( Actor a, Statelabel st ) + { + if ( !a ) return; + let g = ExtraGibDeaths(Spawn("ExtraGibDeaths")); + g.master = a; + g.gibstate = st; + } + + void A_DoGib() + { + if ( !master ) return; + master.SetState(FindState(gibstate)); + } + + States + { + Spawn: + TNT1 A 1 NoDelay; + TNT1 A 1 A_DoGib(); + Stop; + DemonXDeath: + SARX A 5; + SARX B 5 A_XScream(); + SARX C 5 A_NoBlocking(); + SARX DEF 5; + SARX G -1; + Stop; + KnightXDeath: + BO2X A 5; + BO2X B 5 A_XScream(); + BO2X C 5; + BO2X D 5 A_NoBlocking(); + BO2X EFGH 5; + BO2X I -1; + Stop; + BaronXDeath: + BOSX A 5; + BOSX B 5 A_XScream(); + BOSX C 5; + BOSX D 5 A_NoBlocking(); + BOSX EFGH 5; + BOSX I -1 A_BossDeath(); + Stop; + CacoXDeath: + CACX A 5; + CACX B 5 A_XScream(); + CACX C 5 A_NoBlocking(); + CACX D 4; + CACX E 3; + CACX F 4; + CACX G 5; + CACX H -1; + Stop; + BonerXDeath: + REVX A 3; + REVX B 4 A_XScream(); + REVX C 5 A_NoBlocking(); + REVX DE 5; + REVX F -1; + Stop; + VileXDeath: + VILX A 5; + VILX B 5 A_XScream(); + VILX C 5 A_NoBlocking(); + VILX DEF 5; + VILX G -1; + Stop; + } +} + // corpse thump handler Class CorpseFallTracker : Thinker { @@ -749,6 +824,28 @@ Class SWWMGoreHandler : EventHandler e.Thing.CopyBloodColor(pb); pb.Destroy(); } + else if ( e.Thing.GetClass() == "LostSoul" ) + e.Thing.bNOBLOOD = true; + } + + override void WorldThingDied( WorldEvent e ) + { + // force insert gib animations on some vanilla Doom monsters + int gibhealth = e.Thing.GetGibHealth(); + bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); + if ( !gotgibbed ) return; + if ( (e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") ) + ExtraGibDeaths.GibThis(e.Thing,"DemonXDeath"); + else if ( e.Thing.GetClass() == "HellKnight" ) + ExtraGibDeaths.GibThis(e.Thing,"KnightXDeath"); + else if ( e.Thing.GetClass() == "BaronOfHell" ) + ExtraGibDeaths.GibThis(e.Thing,"BaronXDeath"); + else if ( e.Thing.GetClass() == "Cacodemon" ) + ExtraGibDeaths.GibThis(e.Thing,"CacoXDeath"); + else if ( e.Thing.GetClass() == "Revenant" ) + ExtraGibDeaths.GibThis(e.Thing,"BonerXDeath"); + else if ( e.Thing.GetClass() == "Archvile" ) + ExtraGibDeaths.GibThis(e.Thing,"VileXDeath"); } override void WorldThingDamaged( WorldEvent e ) @@ -756,6 +853,14 @@ Class SWWMGoreHandler : EventHandler if ( e.Thing.Health > 0 ) return; // no gib if it was erased if ( e.DamageType == 'Ynykron' ) return; + int gibhealth = e.Thing.GetGibHealth(); + bool gotgibbed = (!e.Thing.bDONTGIB && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH)); + bool forcegibbed = false; + // force gib availability for some vanilla Doom monsters + if ( gotgibbed && ((e.Thing.GetClass() == "Demon") || (e.Thing.GetClass() == "Spectre") || (e.Thing.GetClass() == "HellKnight") || (e.Thing.GetClass() == "BaronOfHell") || (e.Thing.GetClass() == "Cacodemon") || (e.Thing.GetClass() == "Revenant") || (e.Thing.GetClass() == "Archvile")) ) + forcegibbed = true; + if ( !e.Thing.FindState("XDeath",true) && !e.Thing.FindState("Death.Extreme",true) && !forcegibbed ) + gotgibbed = false; // only do special handling if they use our blood if ( (e.Thing.GetBloodType(0) != "mkBlood") || e.Thing.bNOBLOOD ) return; @@ -782,8 +887,7 @@ Class SWWMGoreHandler : EventHandler return; } // override gibbing - int gibhealth = e.Thing.GetGibHealth(); - if ( !e.Thing.bDONTGIB && (e.Thing.FindState("XDeath",true) || e.Thing.FindState("Death.Extreme",true)) && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageSource && e.DamageSource.bEXTREMEDEATH) || (e.DamageType == 'Extreme') || (e.Thing.Health < gibhealth)) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) && (!e.DamageSource || !e.DamageSource.bNOEXTREMEDEATH) ) + if ( gotgibbed ) { [b,a] = e.Thing.A_SpawnItemEx("mkGibber",flags:SXF_USEBLOODCOLOR); if ( !b ) return; diff --git a/zscript/swwm_cbt.zsc b/zscript/swwm_cbt.zsc index a6c04043f..e12d25e34 100644 --- a/zscript/swwm_cbt.zsc +++ b/zscript/swwm_cbt.zsc @@ -429,6 +429,7 @@ Class BustedQuake : Actor if ( special1 < 3 ) A_StartSound("wallbuster/smallbust",CHAN_VOICE,CHANF_OVERLAP,min(1.,special1*.32),1./max(1.,special1*.35),1.-special1*.05); else A_StartSound("wallbuster/bigbust",CHAN_VOICE,CHANF_OVERLAP,min(1.,special1*.16),1./max(1.,special1*.35),1.-special1*.03); A_QuakeEx(special1,special1,special1,20+special1*5,0,300+special1*90,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:special1*.1); + A_AlertMonsters(2500); } override void Tick() { @@ -453,7 +454,7 @@ Class BusterWall : Thinker int hitplane; bool busted; Vector3 bustdir; - int busttics; + int busttics, delay; double cutheight; // cached Vector3 boundsmin, boundsmax, step; @@ -472,7 +473,12 @@ Class BusterWall : Thinker return; } // fade out damage - accdamage = int(accdamage*.9-10); + if ( delay > 0 ) + { + delay--; + return; + } + accdamage = int(accdamage*.9-5); if ( accdamage <= 0 ) { Destroy(); @@ -522,13 +528,17 @@ Class BusterWall : Thinker private static bool IsIOSWall( Line l ) { - TextureID facetex[5]; + TextureID facetex[9]; facetex[0] = TexMan.CheckForTexture("ZZZFACE1",TexMan.Type_Wall); facetex[1] = TexMan.CheckForTexture("ZZZFACE2",TexMan.Type_Wall); facetex[2] = TexMan.CheckForTexture("ZZZFACE3",TexMan.Type_Wall); facetex[3] = TexMan.CheckForTexture("ZZZFACE4",TexMan.Type_Wall); facetex[4] = TexMan.CheckForTexture("ZZZFACE5",TexMan.Type_Wall); - for ( int i=0; i<5; i++ ) + facetex[5] = TexMan.CheckForTexture("DBRAIN1",TexMan.Type_Wall); + facetex[6] = TexMan.CheckForTexture("DBRAIN2",TexMan.Type_Wall); + facetex[7] = TexMan.CheckForTexture("DBRAIN3",TexMan.Type_Wall); + facetex[8] = TexMan.CheckForTexture("DBRAIN4",TexMan.Type_Wall); + for ( int i=0; i<9; i++ ) { for ( int j=0; j<3; j++ ) { @@ -539,6 +549,88 @@ Class BusterWall : Thinker return false; } + static bool ProjectileBust( Actor a, int accdamage, Vector3 x ) + { + LineTracer faketracer = new("LineTracer"); + F3DFloor ff; + Vector3 HitNormal; + if ( a.BlockingFloor ) + { + // find closest 3d floor for its normal + for ( int i=0; i= ceil ) faketracer.Results.Tier = TIER_Upper; + else if ( (a.pos.z+a.Height) <= flor ) faketracer.Results.Tier = TIER_Lower; + } + } + else if ( a.BlockingMobj ) + { + Vector3 diff = level.Vec3Diff(a.BlockingMobj.Vec3Offset(0,0,a.BlockingMobj.Height/2),a.pos); + HitNormal = diff.unit(); + faketracer.Results.HitType = TRACE_HitActor; + } + return Bust(faketracer.Results,accdamage,a.target,x,a.pos.z+a.Height/2.); + } + + static bool BustLinetrace( FLineTraceData d, int accdamage, Actor instigator, Vector3 x, double hitz ) + { + LineTracer faketracer = new("LineTracer"); + faketracer.Results.HitType = d.HitType; + faketracer.Results.HitSector = d.HitSector; + faketracer.Results.HitLine = d.HitLine; + faketracer.Results.ffloor = d.Hit3DFloor; + faketracer.Results.Side = d.LineSide; + faketracer.Results.Tier = (d.LinePart==Side.Top)?TIER_UPPER:(d.LinePart==Side.Bottom)?TIER_LOWER:TIER_Middle; + return Bust(faketracer.Results,accdamage,instigator,x,hitz); + } + static bool Bust( TraceResults d, int accdamage, Actor instigator, Vector3 x, double hitz ) { // we can't blow up 3D floors (yet) @@ -586,6 +678,7 @@ Class BusterWall : Thinker bust.bustdir = x; mnew = true; } + bust.delay = max(bust.delay,5+min(20,accdamage>>4)); bust.accdamage += accdamage; bust.acchits.Push(accdamage); bust.bustdir = (bust.bustdir+x)*.5; @@ -614,7 +707,7 @@ Class BusterWall : Thinker // skip if already busted if ( bust.busted ) return true; // not enough total damage - if ( bust.accdamage < 1000 ) return false; + if ( bust.accdamage < 100 ) return false; // estimate sector volume Vector2 a = (32767,32767), b = (-32768,-32768); for ( int i=0; i impact = "SpreadImpact", int bc = 1, bool large = false ) + action void ProcessTraceHit( SpreadgunTracer t, Vector3 origin, Vector3 dir, int dmg, double mm, Class impact = "SpreadImpact", int bc = 1, bool large = false, bool bust = false ) { // Wall busting - int bustdmg = dmg; - if ( t is 'SpreadSlugTracer' ) bustdmg = int(SpreadSlugTracer(t).penetration); - BusterWall.Bust(t.Results,bustdmg,self,t.Results.HitVector,t.Results.HitPos.z); + if ( bust ) + { + int bustdmg = dmg; + if ( t is 'SpreadSlugTracer' ) bustdmg = int(SpreadSlugTracer(t).penetration); + BusterWall.Bust(t.Results,bustdmg,self,t.Results.HitVector,t.Results.HitPos.z); + } for ( int i=0; i1)); for ( int i=0; i<(3-howmany/10); i++ ) { let s = Spawn("SWWMViewSmoke",origin); @@ -1202,7 +1298,7 @@ Class Wallbuster : SWWMWeapon b.pitch = asin(-x2.z); b.Stamina += howmany*16; b.Accuracy += 2+howmany/5; - b.Args[1] = 1; // came from wallbuster + b.Args[1] = (howmany>1)?2:1; // came from wallbuster } for ( int i=0; i<(9-howmany/3); i++ ) { @@ -1240,7 +1336,7 @@ Class Wallbuster : SWWMWeapon p.angle = atan2(dir.y,dir.x); p.pitch = asin(-dir.z); p.vel = dir*p.speed*1.25; - p.special1 = 1; // came from wallbuster + p.special1 = (howmany>1)?2:1; // came from wallbuster for ( int i=0; i<(4-howmany/8); i++ ) { let s = Spawn("SWWMViewSmoke",origin); @@ -1283,7 +1379,7 @@ Class Wallbuster : SWWMWeapon st.shootthroughlist.Clear(); st.waterhitlist.Clear(); st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,TRACE_HitSky); - ProcessTraceHit(st,origin,dir,individualdmg,7000,bc:5+howmany/6); + ProcessTraceHit(st,origin,dir,individualdmg,7000,bc:5+howmany/6,false,(howmany>1)); } for ( int i=0; i<(9-howmany/3); i++ ) { diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index d74eecc1d..680fdfdf9 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -18,10 +18,117 @@ enum ESWWMGZChannels // Future planning, will be filled out with AI stuff and whatnot someday Class SWWMMonster : Actor { + // integrated fun tags virtual clearscope String GetFunTag( String defstr = "" ) { return GetTag(defstr); } + + // the function that should be overriden in subclasses + virtual int HandleLocationalDamage( Actor inflictor, Actor source, int damage, Name mod, Vector3 HitLocation, int flags = 0, double angle = 0 ) + { + return damage; + } + + // locational damage support, akin to UE1, but hitlocation will be treated as a relative offset, to make things easier + // this one should be called directly by everything in this mod, when possible + int LocationalDamageMobj( Actor inflictor, Actor source, int damage, Name mod, Vector3 HitLocation, int flags = 0, double angle = 0 ) + { + damage = HandleLocationalDamage(inflictor,source,damage,mod,HitLocation,flags,angle); + return Super.DamageMobj(inflictor,source,damage,mod,flags,angle); + } + + // "estimated" locational damage for the vanilla DamageMobj + override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) + { + Vector3 guesspos = (0,0,Height/2.); + // use inflictor if available, as it may be a projectile or hitscan puff + // if damage comes from an item, use owner + // all of this could be done better (or implemented as an engine feature), but whatever + Actor whomst = inflictor?inflictor:source; + if ( whomst is 'Inventory' ) whomst = Inventory(whomst).Owner; + if ( whomst ) + { + if ( whomst.bMISSILE || (flags&DMG_INFLICTOR_IS_PUFF) ) + guesspos = level.Vec3Diff(pos,whomst.pos); + else guesspos = level.Vec3Diff(pos,whomst.Vec3Offset(0,0,whomst.Height/2)); + guesspos.x = clamp(guesspos.x,-radius,radius); + guesspos.y = clamp(guesspos.y,-radius,radius); + guesspos.z = clamp(guesspos.z,0,height); + } + return LocationalDamageMobj(inflictor,source,damage,mod,guesspos,flags,angle); + } +} + +// Less mean-spirited Keen +Class SWWMHangingKeen : Actor +{ + action void A_DropKeen() + { + Spawn("SWWMDroppedKeen",Vec3Offset(0,0,8)); + } + Default + { + Tag "$FN_KEEN"; + Health 100; + Radius 10; + Height 54; + Mass int.max; + PainChance 256; + +SOLID; + +SPAWNCEILING; + +NOGRAVITY; + +SHOOTABLE; + +NOICEDEATH; + +DONTFALL; + +NOBLOOD; + +DONTTHRUST; + PainSound "keen/pain"; + DeathSound "keen/death"; + } + States + { + Spawn: + KEE2 A -1; + Stop; + Death: + KEE2 A 6; + KEE2 B 6 A_DropKeen(); + KEE2 C 6 A_Scream(); + KEE2 DE 6; + KEE2 F 30; + KEE2 F -1 A_KeenDie(); + Stop; + Pain: + KEE2 G 4; + KEE2 G 8 A_Pain(); + Goto Spawn; + } +} +Class SWWMDroppedKeen : Actor +{ + Default + { + Radius 10; + Height 32; + Gravity .5; + +NOBLOCKMAP; + } + States + { + Spawn: + KEE3 A 1 A_JumpIf(pos.z<=floorz,1); + Wait; + KEE3 B 1 { vel.z = 4; } + KEE3 B 1 A_JumpIf(pos.z<=floorz,1); + Wait; + KEE3 B 1 { vel.z = 2; } + KEE3 B 1 A_JumpIf(pos.z<=floorz,1); + Wait; + KEE3 B 12; + TNT1 A 1 { Spawn("TeleportFog",pos,ALLOW_REPLACE); } + Stop; + } } // imitates UE1 light type LT_TexturePaletteOnce/LT_TexturePaletteLoop diff --git a/zscript/swwm_danmaku.zsc b/zscript/swwm_danmaku.zsc index 684a6942e..8d8d9265d 100644 --- a/zscript/swwm_danmaku.zsc +++ b/zscript/swwm_danmaku.zsc @@ -228,6 +228,7 @@ Class EvisceratorChunk : Actor Vector3 diff = level.Vec3Diff(BlockingMobj.Vec3Offset(0,0,BlockingMobj.Height/2),pos); HitNormal = diff.unit(); } + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,GetMissileDamage(0,0),oldvel.unit()); // undo the bounce, we need to hook in our own vel = oldvel; // re-do the bounce with our formula @@ -241,6 +242,7 @@ Class EvisceratorChunk : Actor let l = Spawn("ChunkImpact",pos); l.angle = atan2(HitNormal.y,HitNormal.x); l.pitch = asin(-HitNormal.z); + A_StartSound("eviscerator/hith",CHAN_WEAPON,CHANF_OVERLAP); } A_Gravity(); gravity = .35; @@ -263,14 +265,14 @@ Class EvisceratorChunk : Actor if ( !target.bNOBLOOD && !target.bINVULNERABLE ) { target.SpawnBlood(pos,AngleTo(target),damage); - A_StartSound("eviscerator/hitf",CHAN_WEAPON,CHANF_OVERLAP,.1); + A_StartSound("eviscerator/hitf",CHAN_WEAPON,CHANF_OVERLAP,.2); } else { let l = Spawn("ChunkImpact",pos); l.angle = angle+180; l.pitch = -pitch; - A_StartSound("eviscerator/hit",CHAN_WEAPON,CHANF_OVERLAP,.1); + A_StartSound("eviscerator/hith",CHAN_WEAPON,CHANF_OVERLAP,.2); } if ( swwm_extraalert || !Random[Eviscerator](0,3) ) A_AlertMonsters(900); return -1; @@ -298,14 +300,14 @@ Class EvisceratorChunk : Actor if ( !victim.bNOBLOOD && !victim.bINVULNERABLE ) { victim.SpawnBlood(pos,AngleTo(victim),damage); - A_StartSound("eviscerator/hitf",CHAN_WEAPON,CHANF_OVERLAP,.1); + A_StartSound("eviscerator/hitf",CHAN_WEAPON,CHANF_OVERLAP,.2); } else { let l = Spawn("ChunkImpact",pos); l.angle = angle+180; l.pitch = -pitch; - A_StartSound("eviscerator/hit",CHAN_WEAPON,CHANF_OVERLAP,.1); + A_StartSound("eviscerator/hith",CHAN_WEAPON,CHANF_OVERLAP,.2); } } vel *= .65; // reduce velocity as it rips @@ -458,6 +460,7 @@ Class EvisceratorProj : Actor s.scale *= FRandom[Eviscerator](0.9,1.8); } Spawn("EvisceratorRing",pos); + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,150,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } action void A_SubExpl() { diff --git a/zscript/swwm_deathlydeathcannon.zsc b/zscript/swwm_deathlydeathcannon.zsc index 260a8fb1a..64a9d74e5 100644 --- a/zscript/swwm_deathlydeathcannon.zsc +++ b/zscript/swwm_deathlydeathcannon.zsc @@ -645,6 +645,7 @@ Class YnykronBeam : Actor b.pitch = asin(-norm.z); b.A_SprayDecal("YnykronBlast",-172); if ( YnykronShot(master) ) YnykronShot(master).blastcount++; + if ( swwm_omnibust ) BusterWall.Bust(t.Results,int.max,target,t.Results.HitVector,t.Results.HitPos.z); // find exit point int maxdist = (25600-special1); int i; @@ -893,6 +894,7 @@ Class DelayedWallBeam : Actor } else at.Results.HitLine.Activate(tracer,at.Results.Side,SPAC_Impact); } + if ( swwm_omnibust ) BusterWall.Bust(at.Results,int.max,target,-at.Results.HitVector,at.Results.HitPos.z); Destroy(); } } @@ -1549,6 +1551,7 @@ Class YnykronLightningArc : Actor s.target = target; s.angle = atan2(normal.y,normal.x); s.pitch = asin(-normal.z); + if ( swwm_omnibust ) BusterWall.Bust(t.Results,GetMissileDamage(0,0),target,t.Results.HitVector,t.Results.HitPos.z); } invoker.nextpos = t.Results.HitPos; bAMBUSH = true; @@ -2278,15 +2281,7 @@ Class YnykronSingularity : Actor { // force use the sandwich, warp to safe spot let gc = GrilledCheeseSandwich(a.FindInventory("GrilledCheeseSandwich")); - Spawn("SWWMItemFog",a.Vec3Offset(0,0,a.Height/2)); - Vector3 safepos; - int safeangle; - if ( deathmatch ) [safepos, safeangle] = level.PickDeathmatchStart(); - else [safepos, safeangle] = level.PickPlayerStart(a.PlayerNumber()); - a.vel *= 0.; - a.SetOrigin(safepos,false); - a.angle = safeangle; - a.pitch = 0; + gc.SafeTeleport(true); a.A_StartSound(gc.UseSound,CHAN_ITEMEXTRA); gc.DoTheThing(true); gc.Amount--; diff --git a/zscript/swwm_deepdarkimpact.zsc b/zscript/swwm_deepdarkimpact.zsc index 6495ec474..d7befd4b1 100644 --- a/zscript/swwm_deepdarkimpact.zsc +++ b/zscript/swwm_deepdarkimpact.zsc @@ -31,7 +31,9 @@ Class AirBullet : FastProjectile if ( target == lasthit ) return 0; lasthit = target; } - SWWMUtility.DoKnockback(target,vel.unit(),10000); + Vector3 dirto = level.Vec3Offset(pos,target.Vec3Offset(0,0,target.Height/2.)); + dirto /= dirto.length(); + SWWMUtility.DoKnockback(target,vel.unit()*.6+dirto*.4,60000); return damage; } override void Effect() @@ -54,7 +56,7 @@ Class AirBullet : FastProjectile s.alpha *= .2; } bAMBUSH = true; - SWWMUtility.DoExplosion(self,GetMissileDamage(0,0),0,50,ignoreme:target); + SWWMUtility.DoExplosion(self,GetMissileDamage(0,0),0,60,ignoreme:target); bAMBUSH = false; tcnt++; if ( tcnt < 2 ) return; @@ -104,6 +106,7 @@ Class AirBullet : FastProjectile let s = Spawn("SWWMChip",pos); s.vel = pvel; } + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,100,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch))); } States { @@ -303,14 +306,14 @@ Class DeepImpact : SWWMWeapon int wallhits = 0; Vector3 hitnormal; Vector3 wnorm = (0,0,0); - for ( double i=0; i<1.; i+=.05 ) + for ( double i=0; i<.35; i+=.05 ) { for ( int j=0; j<360; j+=(360/rings) ) { dir = (x+y*cos(j)*i+z*sin(j)*i).unit(); t.hitlist.Clear(); t.hitdist.Clear(); - t.Trace(origin,level.PointInSector(origin.xy),dir,150-i*50,0); + t.Trace(origin,level.PointInSector(origin.xy),dir,150-i*120,0); for ( int i=0; i 0 ) + return StringTable.Localize(PickupMsg)..String.Format(" \cj(\cg¥\cf%d\cj)\c-",Stamina); + return Super.PickupMessage(); } override void AttachToOwner( Actor other ) { Super.AttachToOwner(other); + // we're only attaching to the other players + if ( propagated ) + return; // give credit - if ( other.player ) + if ( other.player && (Stamina > 0) ) { SWWMScoreObj.Spawn(Stamina,other.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+other.Height/2),Font.CR_GOLD); SWWMCredits.Give(other.player,Stamina); } + // send to all other players + for ( int i=0; i 0 ) cdown--; + cdown--; } } @@ -109,12 +140,33 @@ Class MMiaSRVol3 : SWWMCollectable } Class MothPlushy : SWWMCollectable { + int cdown; + Default { Tag "$T_MOTHPLUSH"; Inventory.PickupMessage "$T_MOTHPLUSH"; Stamina 5000; } + override void AttachToOwner( Actor other ) + { + Super.AttachToOwner(other); + if ( !propagated ) + cdown = 175; + } + override void DoEffect() + { + Super.DoEffect(); + if ( cdown <= 0 ) return; + if ( Owner && Owner.CheckLocalView() ) + { + if ( cdown == 105 ) + A_StartSound("mashiro/giggle",CHAN_ITEMEXTRA,CHANF_OVERLAP|CHANF_UI,1.,0.); + if ( cdown == 35 ) + Console.MidPrint(newsmallfont,"$D_MASHIRO"); + } + cdown--; + } } Class BRCDebutLP : SWWMCollectable { @@ -170,15 +222,6 @@ Class HegeCactus : SWWMCollectable Stamina 8000; } } -Class RaideminFig : SWWMCollectable -{ - Default - { - Tag "$T_RAIDEMIN"; - Inventory.PickupMessage "$T_RAIDEMIN"; - Stamina 9000; - } -} Class FrispyCorn : SWWMCollectable { Default @@ -188,15 +231,6 @@ Class FrispyCorn : SWWMCollectable Stamina 500; } } -Class Hoagie : SWWMCollectable -{ - Default - { - Tag "$T_HOAGIE"; - Inventory.PickupMessage "$T_HOAGIE"; - Stamina 800; - } -} Class LithiumVol1 : SWWMCollectable { Default @@ -206,15 +240,6 @@ Class LithiumVol1 : SWWMCollectable Stamina 3500; } } -Class MeetTheSniper : SWWMCollectable -{ - Default - { - Tag "$T_PISS"; - Inventory.PickupMessage "$T_PISS"; - Stamina 1200; - } -} // Heretic Class DemoPlush : SWWMCollectable { @@ -226,26 +251,6 @@ Class DemoPlush : SWWMCollectable Stamina 6400; } } -Class Firemace : SWWMCollectable -{ - Default - { - Tag "$T_FIREMACE"; - Inventory.PickupMessage "$T_FIREMACE"; - SWWMCollectable.Availability AVAIL_Heretic; - Stamina 10000; - } -} -Class DoomguyFig : SWWMCollectable -{ - Default - { - Tag "$T_DOOMFIG"; - Inventory.PickupMessage "$T_DOOMFIG"; - SWWMCollectable.Availability AVAIL_Heretic; - Stamina 9000; - } -} Class TomeOfPower : SWWMCollectable { Default @@ -268,6 +273,8 @@ Class QuartzFlask : SWWMCollectable } Class SayaBean : SWWMCollectable { + int cdown; + Default { Tag "$T_SAYABEAN"; @@ -275,18 +282,25 @@ Class SayaBean : SWWMCollectable SWWMCollectable.Availability AVAIL_Heretic; Stamina 12000; } -} -// Hexen -Class PuzzleDesignBook : SWWMCollectable -{ - Default + override void AttachToOwner( Actor other ) { - Tag "$T_PUZZLEBOOK"; - Inventory.PickupMessage "$T_PUZZLEBOOK"; - SWWMCollectable.Availability AVAIL_Hexen; - Stamina 2500; + Super.AttachToOwner(other); + if ( !propagated ) + cdown = 70; + } + override void DoEffect() + { + Super.DoEffect(); + if ( cdown <= 0 ) return; + if ( Owner && Owner.CheckLocalView() ) + { + if ( cdown == 35 ) + A_StartSound("saya/giggle",CHAN_ITEMEXTRA,CHANF_OVERLAP|CHANF_UI,1.,0.); + } + cdown--; } } +// Hexen Class KirinCummies : SWWMCollectable { Default @@ -309,6 +323,8 @@ Class MilkBreads : SWWMCollectable } Class EyeObelisk : SWWMCollectable { + int cdown; + Default { Tag "$T_OBELISK"; @@ -316,6 +332,20 @@ Class EyeObelisk : SWWMCollectable SWWMCollectable.Availability AVAIL_Hexen; Stamina 24000; } + override void PostBeginPlay() + { + if ( InStateSequence(CurState,FindState("Spawn")) ) + A_StartSound("obelisk/idle",CHAN_BODY,CHANF_LOOPING); + } + override void AttachToOwner( Actor other ) + { + Super.AttachToOwner(other); + if ( propagated ) return; + // nauseatingly fast trip through images of the future + if ( other.player != players[consoleplayer] ) return; + let hnd = EyeObeliskFlash(StaticEventHandler.Find("EyeObeliskFlash")); + if ( hnd ) hnd.doit = true; + } } Class KirinManga : SWWMCollectable { @@ -328,6 +358,96 @@ Class KirinManga : SWWMCollectable } } +Class EyeObeliskFlash : StaticEventHandler +{ + bool doit; + int cd; + ui bool doit_ui; + ui int timeme; + ui TextureID ftex[29]; + + override void UiTick() + { + if ( !doit && !doit_ui ) + { + timeme = 0; + return; + } + if ( timeme == 0 ) + { + // do not trigger if the user doesn't want this + if ( CVar.GetCVar('swwm_noscare',players[consoleplayer]).GetBool() ) + return; + doit_ui = true; + for ( int i=0; i<29; i++ ) + ftex[i] = TexMan.CheckForTexture(String.Format("graphics/obelisk/O_SIGHT%d.png",i),TexMan.Type_Any); + S_StartSound("obelisk/sight",CHAN_VOICE,CHANF_UI|CHANF_NOPAUSE,1.,0.); + } + if ( timeme == 210 ) Console.MidPrint(newsmallfont,"$D_OBELISK"); + if ( timeme == 240 ) doit_ui = false; + timeme++; + } + override void WorldTick() + { + if ( !doit ) return; + cd++; + if ( cd < 1 ) return; + cd = 0; + doit = false; + } + override void RenderOverlay( RenderEvent e ) + { + if ( !doit_ui ) return; + double secs = (timeme+e.FracTic)/Thinker.TICRATE; + PlayerInfo p = players[consoleplayer]; + if ( secs < .25 ) Screen.Dim("White",(secs*4.)**2.,0,0,Screen.GetWidth(),Screen.GetHeight()); + else if ( secs < 2.25 ) + { + Shader.SetEnabled(p,"ObPass0",true); + Shader.SetEnabled(p,"ObPass1",true); + Shader.SetEnabled(p,"ObPass2",true); + Shader.SetEnabled(p,"ObPass3",true); + Shader.SetUniform1f(p,"ObPass0","Timer",(timeme+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"ObPass1","Timer",(timeme+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"ObPass2","Timer",(timeme+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"ObPass3","Timer",(timeme+e.FracTic)/Thinker.TICRATE); + secs -= .25; + Screen.Dim("Black",1.,0,0,Screen.GetWidth(),Screen.GetHeight()); + // flash images: + // 0. mirror man (thievery at the forsaken manor redux) + // 1. viridescent lord (hexmas) + // 2. nightmare lord (spooktober) + // 3. dreadful lady (strife 25th anniversary project) + // 4. shinnovre (unsx 6) + // 5. hiikya (the hiikyan war) + // 6. rebirth of azadeku (project abyss dlc1: forgotten times) + // 7. heart of assimilation (project abyss dlc2: the void lords) + // 8. sage of blue (project abyss dlc3: assault on blue tower) + // 9. ser (project convergence) + int whichimg = clamp(int((10.*secs)/2.),0,9); + if ( !ftex[whichimg] ) return; + double ar = Screen.GetAspectRatio(); + Vector2 tsize = TexMan.GetScaledSize(ftex[whichimg]); + double sar = tsize.x/tsize.y; + Vector2 vsize; + if ( sar > ar ) vsize = (tsize.x,tsize.x/ar); + else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y); + else vsize = tsize; + vsize *= .75; + Screen.DrawTexture(ftex[whichimg],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true); + } + else if ( secs < 6.25 ) + { + Shader.SetEnabled(p,"ObPass0",false); + Shader.SetEnabled(p,"ObPass1",false); + Shader.SetEnabled(p,"ObPass2",false); + Shader.SetEnabled(p,"ObPass3",false); + secs -= 2.25; + Screen.Dim("White",(1.-secs*.25)**1.5,0,0,Screen.GetWidth(),Screen.GetHeight()); + } + } +} + // yay! Class FancyConfetti : Actor { @@ -397,6 +517,97 @@ Class FancyConfetti : Actor Stop; } } +Class PartyTime : Actor +{ + bool ignite; + + Default + { + Radius .1; + Height 0.; + +NOBLOCKMAP; + +NOTELEPORT; + +DONTSPLASH; + +NOINTERACTION; + } + override void PostBeginPlay() + { + if ( target ) specialf1 = target.Height/2.; + else specialf1 = 16.; + } + override void Tick() + { + if ( ignite ) + { + // wait for the sound to stop + if ( !IsActorPlayingSound(CHAN_ITEM) ) + Destroy(); + return; + } + if ( !target || (target.tics == -1) ) + { + // burst into treats! + ignite = true; + A_Confetti(); + return; + } + SetOrigin(target.pos,false); + } + action void A_Confetti() + { + A_StartSound("misc/tada",CHAN_ITEM); + double ang, pt; + int numpt = Random[ExploS](100,120); + for ( int i=0; i)(AllActorClasses[i]); + if ( !c || (c == 'SWWMCollectable') ) continue; + let def = GetDefaultByType(c); + // check that we can collect it in this IWAD + if ( !(gameinfo.gametype&def.avail) ) continue; + numcol++; + } + let ti = ThinkerIterator.Create("SWWMCollectable"); + while ( ti.Next() ) numcol--; + ti = ThinkerIterator.Create("Chancebox"); + while ( ti.Next() ) numcol--; + if ( numcol <= 0 ) + { + // can't spawn a box, everything's been collected + Destroy(); + return; + } + let b = Spawn("Chancebox",pos); + // copy all our stuff + b.spawnangle = spawnangle; + b.angle = angle; + b.pitch = pitch; + b.roll = roll; + b.spawnpoint = spawnpoint; + b.special = special; + for ( int i=0; i<5; i++ ) + b.Args[i] = Args[i]; + b.spawnflags = spawnflags&~MTF_SECRET; + b.HandleSpawnFlags(); + b.bCOUNTSECRET = spawnflags&MTF_SECRET; + b.ChangeTid(tid); + } +} // Collectable box (recycling of discarded "chance box" item) Class Chancebox : Actor @@ -424,14 +635,21 @@ Class Chancebox : Actor SWWMCollectable c; while ( c = SWWMCollectable(ti.Next()) ) { - int f = candidates.Find(inv.GetClass()); + int f = candidates.Find(c.GetClass()); if ( f < candidates.Size() ) candidates.Delete(f); } if ( candidates.Size() <= 0 ) { - // TODO no candidates? just spawn some random loot - Console.Printf("\cg// TODO spawn random loot\c-"); + // no candidates? just burst into treats + for ( int i=0; i<=30; i++ ) + { + let a = Spawn((i==0)?"RefresherItem":(i%3)?"HealthNuggetItem":"ArmorNuggetItem",pos); + a.bDROPPED = true; + a.bNOGRAVITY = false; + a.vel.z = FRandom[Chancebox](2,4); + if ( i > 0 ) a.vel.xy = (cos(i*12),sin(i*12))*FRandom[Chancebox](4,12); + } } else { @@ -469,7 +687,19 @@ Class Chancebox : Actor override bool Used( Actor user ) { if ( CurState != FindState("Spawn") ) return false; - SetStateLabel("Active"); + if ( bCountSecret ) + { + user.GiveSecret(); + bCountSecret = false; + } + if ( special ) + { + user.A_CallSpecial(special,args[0],args[1],args[2],args[3],args[4]); + special = 0; + } + SWWMLoreLibrary.Add(user.player,"Chancebox"); + specialf2 = AngleTo(user); + SetStateLabel("PreActive"); return true; } Default @@ -479,6 +709,7 @@ Class Chancebox : Actor +MOVEWITHSECTOR; +ROLLSPRITE; +SOLID; + +INTERPOLATEANGLES; Species "Chancebox"; } States @@ -486,14 +717,26 @@ Class Chancebox : Actor Spawn: XZW1 A -1; Stop; + PreActive: + XZW1 A 1 + { + double delta = deltaangle(angle,specialf2); + int sign = (delta>=0.)?1:-1; + delta = clamp(abs(delta)*.15,.1,10.)*sign; + angle += delta; + return A_JumpIf(abs(deltaangle(angle,specialf2))<1.,"Active"); + } + Wait; Active: XZW1 A 1 { + angle = specialf2; specialf1 = angle; A_StartSound("misc/drumroll",CHAN_WEAPON); } XZW1 A 1 { + bINTERPOLATEANGLES = false; angle = specialf1+FRandom[Chancebox](-5,5); pitch = FRandom[Chancebox](-5,5); roll = FRandom[Chancebox](-5,5); diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index a6d7356be..375f6c5d8 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -862,6 +862,11 @@ Class SWWMHandler : EventHandler let t = new("UglyBoyGetsFuckedUp"); t.ChangeStatNum(Thinker.STAT_USER); } + if ( swwm_partytime ) + { + let pt = Actor.Spawn("PartyTime",e.Thing.pos); + pt.target = e.Thing; + } } override void WorldThingDamaged( WorldEvent e ) @@ -935,6 +940,9 @@ Class SWWMHandler : EventHandler } } if ( (e.Thing.Health > 0) || e.Thing.bKilled || e.Thing.bCorpse ) return; + // romero hax + if ( (e.Thing is 'BossBrain') && (e.DamageType == 'Telefrag') ) + e.DamageSource.DamageMobj(null,null,Actor.TELEFRAG_DAMAGE,'EndLevel'); if ( !e.Thing.player && !e.Thing.bIsMonster && !e.Thing.bCountKill && !(e.Thing is 'ScriptedMarine') ) return; if ( (e.DamageSource && e.DamageSource.player && (e.DamageSource != e.Thing)) ) { @@ -942,7 +950,7 @@ Class SWWMHandler : EventHandler if ( s ) { s.kills++; - s.AddWeaponKill(e.Inflictor,e.Thing); + s.AddWeaponKill(e.Inflictor,e.Thing,e.DamageType); } if ( e.DamageSource == players[consoleplayer].mo ) { @@ -1000,7 +1008,7 @@ Class SWWMHandler : EventHandler { scr.xscore[ofs] = 0; scr.xtcolor[ofs] = Font.FindFontColor('BlushPink'); - scr.xstr[ofs] = StringTable.Localize("$SWWM_LOVED"); + scr.xstr[ofs] = StringTable.Localize((e.Thing is 'WolfensteinSS')?"$SWWM_LOVED_ALT":"$SWWM_LOVED"); scr.xcnt = ++ofs; } } @@ -1125,12 +1133,12 @@ Class SWWMHandler : EventHandler DoKeyTagFix(e.Thing); SWWMInterest.Spawn(thekey:Key(e.Thing)); } - else if ( e.Thing is 'BossBrain' ) + else if ( e.Thing.GetClass() == 'BossBrain' ) { e.Thing.SetTag("$FN_BOSSBRAIN"); - e.Thing.A_SetSize(20,70); + e.Thing.A_SetSize(20,40); + e.Thing.bNOBLOOD = true; } - else if ( e.Thing is 'CommanderKeen' ) e.Thing.SetTag("$FN_KEEN"); if ( !swwm_notrack && (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER) && !(e.Thing is 'LampMoth') && !(e.Thing is 'CompanionLamp') ) SWWMCombatTracker.Spawn(e.Thing); } @@ -1238,6 +1246,8 @@ Class SWWMHandler : EventHandler { if ( e.Replacement is 'DSparilHax' ) e.Replacee = 'Sorcerer2'; + if ( e.Replacement is 'SWWMHangingKeen' ) + e.Replacee = 'CommanderKeen'; } override void CheckReplacement( ReplaceEvent e ) @@ -1253,6 +1263,17 @@ Class SWWMHandler : EventHandler static const Class blackpool[] = {"BlackShell","BlackShell2"}; if ( e.Replacee is 'ItemFog' ) e.Replacement = 'SWWMItemFog'; if ( e.Replacee is 'TeleportFog' ) e.Replacement = 'SWWMTeleportFog'; + if ( (e.Replacee is 'CommanderKeen') && (!e.Replacement || (e.Replacement == 'CommanderKeen')) ) + { + let def = GetDefaultByType(e.Replacee); + bool dehackery = false; + for ( State s=def.SpawnState; s; s=s.NextState ) + { + if ( s.bDEHACKED ) dehackery = true; + if ( s.NextState == s ) break; + } + if ( !dehackery ) e.Replacement = 'SWWMHangingKeen'; + } else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = 'PusherWeapon'; else if ( (e.Replacee is 'Fist') || (e.Replacee is 'Staff') ) e.Replacement = 'DeepImpact'; else if ( (e.Replacee is 'Pistol') || (e.Replacee is 'GoldWand') || (e.Replacee is 'FWeapFist') || (e.Replacee is 'CWeapMace') || (e.Replacee is 'MWeapWand') ) e.Replacement = 'ExplodiumGun'; @@ -1433,11 +1454,6 @@ Class SWWMHandler : EventHandler else if ( !Random[Replacements](0,3) ) e.Replacement = 'CandyGunBullets'; else e.Replacement = Random[Replacements](0,2)?'SilverBullets':'SilverBullets2'; } - else if ( (e.Replacee == 'ArtiTeleport') || (e.Replacee == 'ArtiTeleportOther') ) - { - if ( Random[Replacements](0,3) ) e.Replacement = 'SWWMNothing'; - else e.Replacement = 'GoldShell'; - } else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') ) { if ( !Random[Replacements](0,2) ) @@ -1452,7 +1468,7 @@ Class SWWMHandler : EventHandler else if ( e.Replacee == 'Mana2' ) e.Replacement = 'FabricatorTier2'; else if ( e.Replacee == 'Mana3' ) e.Replacement = 'FabricatorTier3'; else if ( e.Replacee == 'ArtiBoostMana' ) e.Replacement = 'FabricatorTier4'; - else if ( (e.Replacee == 'Backpack') || (e.Replacee == 'BagOfHolding') || (e.Replacee == 'ArtiPork') || (e.Replacee == 'ArtiBoostArmor') ) e.Replacement = 'HammerspaceEmbiggener'; + else if ( (e.Replacee == 'Backpack') || (e.Replacee == 'BagOfHolding') || (e.Replacee == 'ArtiBoostArmor') ) e.Replacement = 'HammerspaceEmbiggener'; else if ( (e.Replacee == 'FWeaponPiece1') || (e.Replacee == 'FWeaponPiece2') || (e.Replacee == 'CWeaponPiece1') || (e.Replacee == 'CWeaponPiece3') || (e.Replacee == 'MWeaponPiece2') || (e.Replacee == 'MWeaponPiece3') ) @@ -1481,11 +1497,12 @@ Class SWWMHandler : EventHandler else if ( e.Replacee == 'Radsuit' ) e.Replacement = 'EBarrier'; else if ( (e.Replacee == 'ArtiFly') ) e.Replacement = 'GravitySuppressor'; else if ( (e.Replacee == 'InvulnerabilitySphere') || (e.Replacee == 'ArtiInvulnerability') || (e.Replacee == 'ArtiInvulnerability2') ) e.Replacement = 'FuckingInvinciball'; - else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiDarkServant') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = 'Ragekit'; + else if ( (e.Replacee == 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = 'Ragekit'; else if ( (e.Replacee == 'AllMap') || (e.Replacee == 'SuperMap') ) e.Replacement = 'Omnisight'; else if ( (e.Replacee == 'Infrared') || (e.Replacee == 'ArtiTorch') ) e.Replacement = 'SWWMLamp'; else if ( (e.Replacee == 'GreenArmor') || (e.Replacee == 'SilverShield') || (e.Replacee == 'MeshArmor') ) e.Replacement = 'BlastSuitItem'; else if ( (e.Replacee == 'BlueArmor') || (e.Replacee == 'FalconShield') || (e.Replacee == 'EnchantedShield') ) e.Replacement = 'WarArmorItem'; + else if ( (e.Replacee == 'ArtiPork') || (e.Replacee == 'ArtiDarkServant') || (e.Replacee == 'ArtiTeleport') || (e.Replacee == 'ArtiTeleportOther') ) e.Replacement = 'SWWMNothing'/*'Chancebox'*/; } override void NetworkProcess( ConsoleEvent e ) @@ -1785,6 +1802,8 @@ Class SWWMHandler : EventHandler Shader.SetEnabled(p,"WaterWarp",true); Shader.SetUniform1f(p,"WaterWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); Shader.SetUniform1f(p,"WaterWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"WaterWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); + } else Shader.SetEnabled(p,"WaterWarp",false); if ( demo.lastunder == Demolitionist.UNDER_LAVA ) @@ -1792,6 +1811,7 @@ Class SWWMHandler : EventHandler Shader.SetEnabled(p,"LavaWarp",true); Shader.SetUniform1f(p,"LavaWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); Shader.SetUniform1f(p,"LavaWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"LavaWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); } else Shader.SetEnabled(p,"LavaWarp",false); if ( demo.lastunder == Demolitionist.UNDER_SLIME ) @@ -1799,6 +1819,7 @@ Class SWWMHandler : EventHandler Shader.SetEnabled(p,"SlimeWarp",true); Shader.SetUniform1f(p,"SlimeWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); Shader.SetUniform1f(p,"SlimeWarp","dfact",coat?.25:1.); + Shader.SetUniform3f(p,"SlimeWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.)); } else Shader.SetEnabled(p,"SlimeWarp",false); int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80); diff --git a/zscript/swwm_health.zsc b/zscript/swwm_health.zsc index 3c02f753e..c7f9d79f8 100644 --- a/zscript/swwm_health.zsc +++ b/zscript/swwm_health.zsc @@ -33,19 +33,6 @@ Class RefresherHealth : Health Inventory.Amount 100; Inventory.MaxAmount 500; } - override bool TryPickup( in out Actor other ) - { - PrevHealth = other.player?other.player.health:other.health; - if ( other.GiveBody(Amount,MaxAmount) ) - { - GoAwayAndDie(); - let p = Powerup(other.FindInventory("RefresherRegen")); - if ( p ) p.EffectTics = p.default.EffectTics; - else other.GiveInventory("RefresherRegen",1); - return true; - } - return false; - } } Class RefresherRegen : Powerup { @@ -54,6 +41,7 @@ Class RefresherRegen : Powerup Inventory.Icon "graphics/HUD/Icons/I_Refresher.png"; Powerup.Duration -50; Powerup.Strength 10; + +INVENTORY.ADDITIVETIME; } override void EndEffect() @@ -172,7 +160,7 @@ Class RefresherItem : SWWMHealth override void AutoUseExtra() { let p = Powerup(Owner.FindInventory("RefresherRegen")); - if ( p ) p.EffectTics = p.default.EffectTics; + if ( p ) p.EffectTics += p.default.EffectTics; else Owner.GiveInventory("RefresherRegen",1); SWWMHandler.DoFlash(Owner,Color(80,224,128,255),20); } diff --git a/zscript/swwm_hud.zsc b/zscript/swwm_hud.zsc index 6d385d02f..45d42630b 100644 --- a/zscript/swwm_hud.zsc +++ b/zscript/swwm_hud.zsc @@ -9,7 +9,7 @@ Class MsgLine Class SWWMStatusBar : BaseStatusBar { TextureID StatusTex, WeaponTex, ScoreTex[3], InventoryTex, ChatTex[6], - HealthTex[5], FuelTex, DashTex, EnemyBTex, EnemyHTex[5], GenericAmmoTex[3]; + HealthTex[5], FuelTex[2], DashTex, EnemyBTex, EnemyHTex[5], GenericAmmoTex[3]; HUDFont mTewiFont, mMiniwiFont, mMPlusFont, mk6x8Font; // "Full History" contains all messages since session start, nothing is flushed @@ -28,7 +28,7 @@ Class SWWMStatusBar : BaseStatusBar SWWMVanillaBossHandler bosshnd; // client cvars - transient CVar safezone, maxchat[2], maxpick, chatduration, msgduration, pickduration, chatcol, teamcol, obitcol, critcol, pickcol, targetter, healthnums, scorenums, scorebonus, pois, targettag, lang, maxtarg, maxscore, maxdamns, hscale, bscale, nscale, sscale, iscale, dscale, midcol, midbcol, midduration, bigtags; + transient CVar safezone, maxchat[2], maxpick, chatduration, msgduration, pickduration, chatcol, teamcol, obitcol, critcol, pickcol, targetter, healthnums, scorenums, scorebonus, pois, targettag, lang, maxtarg, maxscore, maxdamns, hscale, bscale, nscale, sscale, iscale, dscale, midcol, midbcol, midduration, bigtags, showitems, showmaplabel, showmonsters, showsecrets, showtime, showtotaltime; // shared stuff Vector2 ss, hs; @@ -598,7 +598,8 @@ Class SWWMStatusBar : BaseStatusBar SetSize(0,640,360); StatusTex = TexMan.CheckForTexture("graphics/HUD/StatusBox.png",TexMan.Type_Any); DashTex = TexMan.CheckForTexture("graphics/HUD/DashBar.png",TexMan.Type_Any); - FuelTex = TexMan.CheckForTexture("graphics/HUD/FuelBar.png",TexMan.Type_Any); + FuelTex[0] = TexMan.CheckForTexture("graphics/HUD/FuelBar.png",TexMan.Type_Any); + FuelTex[1] = TexMan.CheckForTexture("graphics/HUD/FuelBarS.png",TexMan.Type_Any); HealthTex[0] = TexMan.CheckForTexture("graphics/HUD/HealthBar0.png",TexMan.Type_Any); HealthTex[1] = TexMan.CheckForTexture("graphics/HUD/HealthBar1.png",TexMan.Type_Any); HealthTex[2] = TexMan.CheckForTexture("graphics/HUD/HealthBar2.png",TexMan.Type_Any); @@ -864,40 +865,54 @@ Class SWWMStatusBar : BaseStatusBar int yy = margin+19; if ( automapactive ) { + if ( !showitems ) showitems = CVar.GetCVar('am_showitems',players[consoleplayer]); + if ( !showmaplabel ) showmaplabel = CVar.GetCVar('am_showmaplabel',players[consoleplayer]); + if ( !showmonsters ) showmonsters = CVar.GetCVar('am_showmonsters',players[consoleplayer]); + if ( !showsecrets ) showsecrets = CVar.GetCVar('am_showsecrets',players[consoleplayer]); + if ( !showtime ) showtime = CVar.GetCVar('am_showtime',players[consoleplayer]); + if ( !showtotaltime ) showtotaltime = CVar.GetCVar('am_showtotaltime',players[consoleplayer]); int xx = int(ss.x-(margin+2)); String str; - if ( level.clusterflags&level.CLUSTER_HUB ) str = level.levelname; + int label = showmaplabel.GetInt(); + if ( !label || ((level.clusterflags&level.CLUSTER_HUB) && (label == 2)) ) str = level.levelname; else str = String.Format("%s - %s",level.mapname.MakeUpper(),level.levelname); let fnt = LangFont(mTewiFont); Screen.DrawText(fnt,Font.CR_FIRE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += fnt.GetHeight(); fnt = LangFont(mMiniwiFont); - if ( level.total_monsters > 0 ) + if ( (level.total_monsters > 0) && showmonsters.GetBool() ) { str = String.Format("\cxK \c-%d\cu/\c-%d",level.killed_monsters,level.total_monsters); - Screen.DrawText(fnt,Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt,(level.killed_monsters>=level.total_monsters)?Font.CR_GOLD:Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += fnt.GetHeight(); } - if ( level.total_items > 0 ) + if ( (level.total_items > 0) && showitems.GetBool() ) { str = String.Format("\cxI \c-%d\cu/\c-%d",level.found_items,level.total_items); - Screen.DrawText(fnt,Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt,(level.found_items>=level.total_items)?Font.CR_GOLD:Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += fnt.GetHeight(); } - if ( level.total_secrets > 0 ) + if ( (level.total_secrets > 0) && showsecrets.GetBool() ) { str = String.Format("\cxS \c-%d\cu/\c-%d",level.found_secrets,level.total_secrets); + Screen.DrawText(fnt,(level.found_secrets>=level.total_secrets)?Font.CR_GOLD:Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + yy += fnt.GetHeight(); + } + int sec; + if ( showtime.GetBool() ) + { + sec = Thinker.Tics2Seconds(level.maptime); + str = String.Format("\cxT \c-%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); + Screen.DrawText(fnt,(sec>3600)?Font.CR_RED:(sec<=level.partime)?Font.CR_GOLD:Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + yy += fnt.GetHeight(); + } + if ( showtotaltime.GetBool() ) + { + sec = Thinker.Tics2Seconds(level.totaltime); + str = String.Format("\cxTT \c-%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); Screen.DrawText(fnt,Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += fnt.GetHeight(); } - int sec = Thinker.Tics2Seconds(level.maptime); - str = String.Format("\cxT \c-%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); - Screen.DrawText(fnt,Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - yy += fnt.GetHeight(); - sec = Thinker.Tics2Seconds(level.totaltime); - str = String.Format("\cxTT \c-%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); - Screen.DrawText(fnt,Font.CR_WHITE,xx-fnt.StringWidth(str),yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - yy += fnt.GetHeight(); yy += 3; } // in doom/heretic (draw key icons) @@ -1111,7 +1126,7 @@ Class SWWMStatusBar : BaseStatusBar if ( !d || (d.dashfuel > 20) || ((gametic%10) < 5) ) alph = 1.; Screen.DrawTexture(DashTex,false,margin+2,ss.y-(margin+20),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,dw,DTA_Alpha,alph); double fw = FuelInter.GetValue()/2.; - Screen.DrawTexture(FuelTex,false,margin+2,ss.y-(margin+24),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,fw); + Screen.DrawTexture(FuelTex[swwm_superfuel],false,margin+2,ss.y-(margin+24),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,fw); double ht = clamp(HealthInter.GetValue(),0,10000); double hw = min(ht,100); if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") ) diff --git a/zscript/swwm_inter.zsc b/zscript/swwm_inter.zsc index 56a4d99da..a1a6fb416 100644 --- a/zscript/swwm_inter.zsc +++ b/zscript/swwm_inter.zsc @@ -10,7 +10,7 @@ Class SWWMStatScreen : StatusScreen abstract transient TextureID bgtex, arttex; transient Font TewiFont, MPlusFont; int whichart, whichtip; - transient CVar intertype, lang, origmus; + transient CVar interart, lang, origmus; double hs, hs2; Vector2 ss, ss2, origin, origin2; double bgfade; @@ -30,68 +30,38 @@ Class SWWMStatScreen : StatusScreen abstract } private void drawSWWMBg() { - if ( !intertype ) intertype = CVar.GetCVar('swwm_intertype',players[consoleplayer]); + if ( !interart ) interart = CVar.GetCVar('swwm_interart',players[consoleplayer]); let pdata = SWWMStatScreenData(ThinkerIterator.Create("SWWMStatScreenData",Thinker.STAT_STATIC).Next()); if ( !pdata ) { pdata = new("SWWMStatScreenData"); pdata.ChangeStatNum(Thinker.STAT_STATIC); } - if ( !whichart ) + if ( !whichart && interart.GetBool() ) { - int no = 0; - if ( intertype.GetInt() == 1 ) + int no = StringTable.Localize("$SWWM_NFANART").ToInt(); + Array ents; + ents.Clear(); + for ( int i=1; i<=no; i++ ) + ents.Push(i); + if ( pdata.lastart.Size() >= no ) { - no = StringTable.Localize("$SWWM_NFANART").ToInt(); - Array ents; - ents.Clear(); - for ( int i=1; i<=no; i++ ) - ents.Push(i); - if ( pdata.lastart.Size() >= no ) - { - // exclude last one, start over - int excludeme = pdata.lastart[pdata.lastart.Size()-1]; - ents.Delete(excludeme-1); - pdata.lastart.Clear(); - } - else - { - for ( int i=0; i ents; - ents.Clear(); - for ( int i=1; i<=no; i++ ) - ents.Push(i); - if ( pdata.last4koma.Size() >= no ) + for ( int i=0; i 80) ) continue; + if ( !((a.bMISSILE && !a.IsZeroDamage() && (a.target != master)) || a.bSKULLFLY) || a.bTHRUACTORS || (level.Vec3Diff(a.pos,pos).length() > 80) ) continue; Vector3 vdir = a.vel; Vector3 dir = level.Vec3Diff(master.Vec2OffsetZ(0,0,pos.z),a.pos).unit(); if ( a.bMISSILE ) @@ -1133,8 +1131,6 @@ Class SWWMWeapon : Weapon abstract } action void A_Melee( int dmg = 40, String hitsound = "", double rangemul = 1. ) { - // temporarily disable parry field so we can trace through - if ( invoker.pfield ) invoker.pfield.bSHOOTABLE = false; // check for usables let ut = new("UseLineTracer"); ut.uses.Clear(); @@ -1165,12 +1161,8 @@ Class SWWMWeapon : Weapon abstract for ( int i=0; i longest ) longest = len; } @@ -1363,6 +1365,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { if ( !invlist[i] ) continue; str = invlist[i].GetTag(); + if ( invlist[i] is 'SWWMCollectable' ) + str.AppendFormat(" (¥%d)",invlist[i].default.Stamina); len = fnt.StringWidth(str); if ( len > longest ) longest = len; } @@ -1528,6 +1532,142 @@ Class SWWMKnowledgeBaseMenu : GenericMenu else if ( (b is 'Health') || (b is 'HealthPickup') || (b is 'SWWMHealth') ) tb = -2; else if ( (b is 'Armor') || (b is 'SWWMSpareArmor') ) tb = -1; else if ( b is 'PuzzleItem' ) tb = 1; + if ( ta == tb ) + { + if ( a is 'Weapon' ) + { + bool dummy; + int slota, slotb; + [dummy, slota] = players[consoleplayer].weapons.LocateWeapon(Weapon(a).GetClass()); + if ( slota == 0 ) slota = 10; + [dummy, slotb] = players[consoleplayer].weapons.LocateWeapon(Weapon(b).GetClass()); + if ( slotb == 0 ) slotb = 10; + if ( slota == slotb ) + return (Weapon(a).SlotPriority <= Weapon(b).SlotPriority); + return slota > slotb; + } + else if ( a is 'Ammo' ) + { + Class usesa, usesb; + for ( int i=0; i)(AllActorClasses[i]); + if ( !w ) continue; + let def = GetDefaultByType(w); + if ( w is 'SWWMWeapon' ) + { + if ( SWWMWeapon(def).UsesAmmo(Ammo(a).GetClass()) ) + usesa = w; + if ( SWWMWeapon(def).UsesAmmo(Ammo(b).GetClass()) ) + usesb = w; + } + else + { + if ( (def.AmmoType1 == Ammo(a).GetClass()) || (def.AmmoType2 == Ammo(a).GetClass()) ) + usesa = w; + if ( (def.AmmoType1 == Ammo(b).GetClass()) || (def.AmmoType2 == Ammo(b).GetClass()) ) + usesb = w; + } + if ( usesa && usesb ) + break; + } + if ( usesa && usesb ) + { + bool dummy; + int slota, slotb; + [dummy, slota] = players[consoleplayer].weapons.LocateWeapon(usesa); + if ( slota == 0 ) slota = 10; + [dummy, slotb] = players[consoleplayer].weapons.LocateWeapon(usesb); + if ( slotb == 0 ) slotb = 10; + if ( slota == slotb ) + { + // sort by unit value + // (special, those with zero value go last) + int vala = a.default.Stamina; + if ( vala == 0 ) vala = int.max; + int valb = b.default.Stamina; + if ( valb == 0 ) valb = int.max; + if ( vala == valb ) + { + // sort alphabetically + return a.GetTag() > b.GetTag(); + } + return vala > valb; + } + return slota > slotb; + } + } + else if ( a is 'MagAmmo' ) + { + // oh boy this one gets complicated + Class pamoa, pamob; + pamoa = MagAmmo(a).ParentAmmo; + pamob = MagAmmo(b).ParentAmmo; + Class usesa, usesb; + for ( int i=0; i)(AllActorClasses[i]); + if ( !w ) continue; + let def = GetDefaultByType(w); + if ( w is 'SWWMWeapon' ) + { + if ( SWWMWeapon(def).UsesAmmo(pamoa) ) + usesa = w; + if ( SWWMWeapon(def).UsesAmmo(pamob) ) + usesb = w; + } + else + { + if ( (def.AmmoType1 == pamoa) || (def.AmmoType2 == pamoa) ) + usesa = w; + if ( (def.AmmoType1 == pamob) || (def.AmmoType2 == pamob) ) + usesb = w; + } + if ( usesa && usesb ) + break; + } + if ( usesa && usesb ) + { + bool dummy; + int slota, slotb; + [dummy, slota] = players[consoleplayer].weapons.LocateWeapon(usesa); + if ( slota == 0 ) slota = 10; + [dummy, slotb] = players[consoleplayer].weapons.LocateWeapon(usesb); + if ( slotb == 0 ) slotb = 10; + if ( slota == slotb ) + { + // sort by unit value + // (special, those with zero value go last) + int vala = GetDefaultByType(pamoa).Stamina; + if ( vala == 0 ) vala = int.max; + int valb = GetDefaultByType(pamob).Stamina; + if ( valb == 0 ) valb = int.max; + if ( vala == valb ) + { + // sort alphabetically + return a.GetTag() > b.GetTag(); + } + return vala > valb; + } + return slota > slotb; + } + } + else + { + // sort by unit value + // (special, those with zero value go last) + int vala = a.default.Stamina; + if ( vala == 0 ) vala = int.max; + int valb = b.default.Stamina; + if ( valb == 0 ) valb = int.max; + if ( vala == valb ) + { + // sort alphabetically + return a.GetTag() > b.GetTag(); + } + return vala > valb; + } + } return ta > tb; } @@ -1538,15 +1678,25 @@ Class SWWMKnowledgeBaseMenu : GenericMenu let db = GetDefaultByType(b); if ( a is 'Weapon' ) ta = 2; else if ( a is 'Ammo' ) ta = 1; - else if ( (a is 'PowerupGiver') || (a is 'AmmoFabricator') || da.bBIGPOWERUP ) ta = 3; + else if ( (a is 'PowerupGiver') || da.bBIGPOWERUP ) ta = 3; else if ( (a is 'Health') || (a is 'HealthPickup') || (a is 'SWWMHealth') ) ta = 5; else if ( (a is 'Armor') || (a is 'SWWMSpareArmor') ) ta = 4; if ( b is 'Weapon' ) tb = 2; else if ( b is 'Ammo' ) tb = 1; - else if ( (b is 'PowerupGiver') || (b is 'AmmoFabricator') || db.bBIGPOWERUP ) tb = 3; + else if ( (b is 'PowerupGiver') || db.bBIGPOWERUP ) tb = 3; else if ( (b is 'Health') || (b is 'HealthPickup') || (b is 'SWWMHealth') ) tb = 5; else if ( (b is 'Armor') || (b is 'SWWMSpareArmor') ) tb = 4; - return ta <= tb; + if ( ta == tb ) + { + // sort by unit price + if ( da.Stamina == db.Stamina ) + { + // sort alphabetically + return da.GetTag() > db.GetTag(); + } + return da.Stamina > db.Stamina; + } + return ta < tb; } private int partition_inventory( Array a, int l, int h ) @@ -1609,13 +1759,37 @@ Class SWWMKnowledgeBaseMenu : GenericMenu qsort_store(a,b,p+1,h); } + private bool CmpMonsterKill( MonsterKill a, MonsterKill b ) + { + if ( a.kills == b.kills ) + { + // sort by name instead + String taga, tagb; + taga = GetDefaultByType(a.m).GetTag(); + tagb = GetDefaultByType(b.m).GetTag(); + // beautify if there's no tag + if ( taga == FallbackTag ) + { + taga = a.m.GetClassName(); + SWWMUtility.BeautifyClassName(taga); + } + if ( tagb == FallbackTag ) + { + tagb = a.m.GetClassName(); + SWWMUtility.BeautifyClassName(tagb); + } + return taga > tagb; + } + return a.kills < b.kills; + } + private int partition_mstats( Array a, int l, int h ) { MonsterKill pv = a[h]; int i = (l-1); for ( int j=l; j<=(h-1); j++ ) { - if ( pv.kills < a[j].kills ) + if ( CmpMonsterKill(pv,a[j]) ) { i++; MonsterKill tmp = a[j]; @@ -1663,6 +1837,44 @@ Class SWWMKnowledgeBaseMenu : GenericMenu qsort_lore(a,p+1,h); } + private bool CmpCollectable( Inventory a, Inventory b ) + { + if ( a.Stamina == b.Stamina ) + { + // alphabetic + return a.GetTag() > b.GetTag(); + } + // descending value + return a.default.Stamina < b.default.Stamina; + } + + private int partition_collectable( Array a, int l, int h ) + { + Inventory pv = a[h]; + int i = (l-1); + for ( int j=l; j<=(h-1); j++ ) + { + if ( CmpCollectable(pv,a[j]) ) + { + i++; + Inventory tmp = a[j]; + a[j] = a[i]; + a[i] = tmp; + } + } + Inventory tmp = a[h]; + a[h] = a[i+1]; + a[i+1] = tmp; + return i+1; + } + private void qsort_collectable( Array a, int l, int h ) + { + if ( l >= h ) return; + int p = partition_collectable(a,l,h); + qsort_collectable(a,l,p-1); + qsort_collectable(a,p+1,h); + } + override void Ticker() { Super.Ticker(); @@ -1696,7 +1908,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu // alphabetically sorted inventory for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv ) { - if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue; + if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') || (inv is 'SWWMCollectable') ) continue; // no hidden weapons if ( (inv is 'SWWMWeapon') && SWWMWeapon(inv).bHIDEINMENU ) continue; String tag = inv.GetTag(); @@ -1732,6 +1944,15 @@ Class SWWMKnowledgeBaseMenu : GenericMenu let k = Key(players[consoleplayer].mo.FindInventory(Key.GetKeyType(i))); if ( k ) invlist.Push(k); } + // collectables, sorted by name + Array cols; + for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv ) + { + if ( inv is 'SWWMCollectable' ) + cols.Push(inv); + } + qsort_collectable(cols,0,cols.Size()-1); + invlist.Append(cols); // crop selection if ( sel0 >= invlist.Size() ) sel0 = max(0,invlist.Size()-1); } @@ -1746,8 +1967,6 @@ Class SWWMKnowledgeBaseMenu : GenericMenu if ( !type ) continue; // no collectables if ( type is 'SWWMCollectable' ) continue; - // no fabricators before hexen - if ( !(gameinfo.gametype&(GAME_Hexen|GAME_Strife)) && (type is 'AmmoFabricator') ) continue; // skip maxed items let cur = players[consoleplayer].mo.FindInventory(type); if ( cur && (cur.Amount >= cur.MaxAmount) ) continue; @@ -1962,6 +2181,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu if ( stats.favweapon == -1 ) str = str.."N/A"; else if ( stats.wstats[stats.favweapon].w == 'SWWMWeapon' ) str = str..StringTable.Localize("$SWWM_YOURSELF"); else if ( stats.wstats[stats.favweapon].w == 'SWWMGesture' ) str = str..StringTable.Localize("$SWWM_DOKIDOKI"); + else if ( stats.wstats[stats.favweapon].w == 'Weapon' ) str = str..StringTable.Localize("$SWWM_GRAVKILL"); else { let def = GetDefaultByType(stats.wstats[stats.favweapon].w); @@ -2362,19 +2582,19 @@ Class SWWMKnowledgeBaseMenu : GenericMenu int ox = ((cnt>22)?623:631); int sec = Thinker.Tics2Seconds(stats.lstats[i].time); str = String.Format("%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); - Screen.DrawText(fnt2,Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt2,(sec>=3600)?Font.CR_RED:(sec<=stats.lstats[i].par)?Font.CR_GOLD:Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); Screen.DrawText(fnt2,Font.CR_FIRE,origin.x+ox-maxlen[0],origin.y+yy,"T",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); ox -= maxlen[0]+8; str = String.Format("%d\cu/\c-%d",stats.lstats[i].scount,stats.lstats[i].stotal); - Screen.DrawText(fnt2,Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt2,(stats.lstats[i].scount>=stats.lstats[i].stotal)?Font.CR_GOLD:Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); Screen.DrawText(fnt2,Font.CR_FIRE,origin.x+ox-maxlen[1],origin.y+yy,"S",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); ox -= maxlen[1]+8; str = String.Format("%d\cu/\c-%d",stats.lstats[i].icount,stats.lstats[i].itotal); - Screen.DrawText(fnt2,Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt2,(stats.lstats[i].icount>=stats.lstats[i].itotal)?Font.CR_GOLD:Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); Screen.DrawText(fnt2,Font.CR_FIRE,origin.x+ox-maxlen[2],origin.y+yy,"I",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); ox -= maxlen[2]+8; str = String.Format("%d\cu/\c-%d",stats.lstats[i].kcount,stats.lstats[i].ktotal); - Screen.DrawText(fnt2,Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + Screen.DrawText(fnt2,(stats.lstats[i].kcount>=stats.lstats[i].ktotal)?Font.CR_GOLD:Font.CR_WHITE,origin.x+ox-fnt2.StringWidth(str),origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); Screen.DrawText(fnt2,Font.CR_FIRE,origin.x+ox-maxlen[3],origin.y+yy,"K",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); yy += 14; } @@ -2472,6 +2692,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { if ( !invlist[i] ) continue; str = invlist[i].GetTag(); + if ( invlist[i] is 'SWWMCollectable' ) + str.AppendFormat(" (¥%d)",invlist[i].default.Stamina); len = fnt.StringWidth(str); if ( len > longest ) longest = len; } @@ -2482,7 +2704,9 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { if ( !invlist[i] ) continue; str = invlist[i].GetTag(); - Screen.DrawText(fnt,Font.CR_UNTRANSLATED,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); + if ( invlist[i] is 'SWWMCollectable' ) + str.AppendFormat(" \cj(\cg¥\cf%d\cj)\c-",invlist[i].default.Stamina); + Screen.DrawText(fnt,(invlist[i] is 'SWWMCollectable')?Font.CR_PURPLE:Font.CR_UNTRANSLATED,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); yy += 16; if ( yy >= 370 ) { @@ -2615,7 +2839,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu int clscol = Font.CR_WHITE; if ( storelist[i] is 'Weapon' ) clscol = Font.CR_GOLD; else if ( storelist[i] is 'Ammo' ) clscol = Font.CR_BROWN; - else if ( (storelist[i] is 'PowerupGiver') || (storelist[i] is 'AmmoFabricator') || def.bBIGPOWERUP ) clscol = Font.CR_PURPLE; + else if ( (storelist[i] is 'PowerupGiver') || def.bBIGPOWERUP ) clscol = Font.CR_PURPLE; else if ( (storelist[i] is 'Health') || (storelist[i] is 'HealthPickup') || (storelist[i] is 'SWWMHealth') ) clscol = Font.CR_RED; else if ( (storelist[i] is 'Armor') || (storelist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN; Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index d52e16239..195c747bd 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -43,6 +43,7 @@ Class Demolitionist : PlayerPawn }; int lastunder; + Color undercol; int deadtimer; transient int revivefail; @@ -75,10 +76,9 @@ Class Demolitionist : PlayerPawn Player.AirCapacity 0; Player.GruntSpeed 20; Player.SoundClass "demolitionist"; - DamageFactor "Drowning", 0.0; - DamageFactor "Poison", 0.0; - DamageFactor "PoisonCloud", 0.0; - DamageFactor "Falling", 0.0; + DamageFactor "Drowning", 0.; + DamageFactor "Poison", 0.; + DamageFactor "PoisonCloud", 0.; Demolitionist.DashFuel 240.; +NOBLOOD; +DONTGIB; @@ -162,6 +162,12 @@ Class Demolitionist : PlayerPawn if ( !type || (type == 'SWWMArmor') ) continue; if ( GetReplacement(type) == type ) { + let owned = FindInventory(type); + if ( owned ) + { + owned.Amount = owned.MaxAmount; + continue; + } let item = Inventory(Spawn(type)); item.ClearCounters(); // don't increase item counts item.Amount = item.MaxAmount; @@ -175,6 +181,12 @@ Class Demolitionist : PlayerPawn if ( !type || (type == 'SWWMSpareArmor') ) continue; if ( GetReplacement(type) == type ) { + let owned = FindInventory(type); + if ( owned ) + { + owned.Amount = owned.MaxAmount; + continue; + } let item = Inventory(Spawn(type)); item.ClearCounters(); // don't increase item counts item.Amount = item.MaxAmount; @@ -262,6 +274,19 @@ Class Demolitionist : PlayerPawn } if ( !giveall ) return; } + if ( (giveall == ALL_YESYES) || (name ~== "collectables") ) + { + for ( int i=0; i)(AllActorClasses[i]); + if ( !type || (type == 'SWWMCollectable') ) continue; + let def = GetDefaultByType(type); + // check that we can collect it in this IWAD + if ( !(gameinfo.gametype&def.avail) ) continue; + let item = Inventory(Spawn(AllActorClasses[i])); + if ( !item.CallTryPickup(self) ) item.Destroy(); + } + } if ( giveall ) return; let type = name; if ( !type ) @@ -319,7 +344,7 @@ Class Demolitionist : PlayerPawn dashboost *= (player.cmd.buttons&BT_USER2)?.9:.1; } mystats.fuelusage += dashfuel-max(0.,dashfuel-dashboost); - dashfuel = max(0.,dashfuel-dashboost); + if ( !swwm_superfuel ) dashfuel = max(0.,dashfuel-dashboost); dashcooldown = min(40,max(10,int(dashcooldown*1.4))); fuelcooldown = max(30,fuelcooldown); if ( (dashfuel <= 0.) || (dashboost <= 0.) ) @@ -337,7 +362,7 @@ Class Demolitionist : PlayerPawn last_boost = level.maptime+1; } mystats.fuelusage += dashfuel-max(0.,dashfuel-dashboost); - dashfuel = max(0.,dashfuel-dashboost); + if ( !swwm_superfuel ) dashfuel = max(0.,dashfuel-dashboost); if ( ((dashfuel <= 0.) || (dashboost <= 0.)) ) { if ( !initial ) @@ -416,6 +441,7 @@ Class Demolitionist : PlayerPawn curunder = UNDER_WATER; break; } + undercol = headregion.ColorMap.LightColor; } if ( (curunder != lastunder) || restore ) { @@ -567,7 +593,7 @@ Class Demolitionist : PlayerPawn if ( vel.length() > mystats.topspeed ) mystats.topspeed = vel.length(); if ( !myvoice ) myvoice = CVar.GetCVar('swwm_voicetype',player); if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player); - if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) && (health > 0) ) + if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) ) { // bump down weapon bumpdown = true; @@ -589,7 +615,7 @@ Class Demolitionist : PlayerPawn mystats.stompcount++; } if ( lastvelz < -10 ) A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP); - if ( (player == players[consoleplayer]) && (lastvelz < -gruntspeed) && (mute.GetInt() < 4) ) + if ( (player == players[consoleplayer]) && (lastvelz < -gruntspeed) && (mute.GetInt() < 4) && (health > 0) ) A_StartSound(String.Format("voice/%s/grunt",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP); if ( lastvelz < -1 ) A_Footstep(0,true,clamp(-lastvelz*0.05,0.0,1.0)); @@ -702,6 +728,7 @@ Class Demolitionist : PlayerPawn if ( a.bACTLIKEBRIDGE && (diff.z <= -a.Height) ) continue; // don't bump bridges if hit by above // 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_AlertMonsters(800); A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); a.A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); bumptic = gametic+int(20+spd/4.); @@ -776,11 +803,12 @@ Class Demolitionist : PlayerPawn if ( dir dot ceilnorm < -.6 ) { bool busted = false; - if ( raging ) + if ( raging || swwm_omnibust ) { // see if we can bust it let tempme = new("LineTracer"); // gross hack to pass needed data - int dmg = int(128+spd*20); + int dmg = int(15+spd*2.5); + if ( raging ) dmg *= 8; bool buttslam = false; // BUTTSLAM if ( dir dot viewdir < -.3 ) @@ -794,13 +822,16 @@ Class Demolitionist : PlayerPawn if ( BusterWall.Bust(tempme.Results,dmg,self,dir,pos.z+Height) ) { // busted through - let ps = Spawn("BigPunchSplash",Vec3Offset(0,0,Height)); - ps.damagetype = buttslam?'Buttslam':'Dash'; - ps.target = self; - ps.special1 = int(15+spd*2.5); + if ( raging ) + { + let ps = Spawn("BigPunchSplash",Vec3Offset(0,0,Height)); + ps.damagetype = buttslam?'Buttslam':'Dash'; + ps.target = self; + ps.special1 = int(15+spd*2.5); + raging.DoHitFX(); + } A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); busted = true; - raging.DoHitFX(); if ( buttslam ) { A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); @@ -810,13 +841,14 @@ Class Demolitionist : PlayerPawn } } } - if ( !busted ) + if ( !busted || !raging ) { // headbump bumped = true; A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); bumptic = gametic+int(20+spd/4.); A_QuakeEx(8,8,8,16,0,128,"",QF_RELATIVE|QF_SCALEDOWN); + A_AlertMonsters(800); vel *= .2; vel -= dir*(10+(spd*30/mass)); vel.z += 5+(spd*(10/mass)); @@ -853,11 +885,12 @@ Class Demolitionist : PlayerPawn // don't bump if we're only grazing it if ( dir dot wallnorm > -.6 ) continue; - if ( raging ) + if ( raging || swwm_omnibust ) { // see if we can bust it let tempme = new("LineTracer"); // gross hack to pass needed data - int dmg = int(128+spd*20); + int dmg = int(15+spd*2.5); + if ( raging ) dmg *= 8; bool buttslam = false; // BUTTSLAM if ( dir dot viewdir < -.3 ) @@ -881,12 +914,15 @@ Class Demolitionist : PlayerPawn if ( BusterWall.Bust(tempme.Results,dmg,self,dir,pos.z+Height/2) ) { // busted through - let ps = Spawn("BigPunchSplash",Vec3Offset(dir.x*radius,dir.y*radius,(tempme.Results.Tier==TIER_UPPER)?Height:(tempme.Results.Tier==TIER_LOWER)?0:(Height/2))); - ps.damagetype = buttslam?'Buttslam':'Dash'; - ps.target = self; - ps.special1 = int(15+spd*2.5); + if ( raging ) + { + let ps = Spawn("BigPunchSplash",Vec3Offset(dir.x*radius,dir.y*radius,(tempme.Results.Tier==TIER_UPPER)?Height:(tempme.Results.Tier==TIER_LOWER)?0:(Height/2))); + ps.damagetype = buttslam?'Buttslam':'Dash'; + ps.target = self; + ps.special1 = int(15+spd*2.5); + raging.DoHitFX(); + } A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); - raging.DoHitFX(); if ( buttslam ) { A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); @@ -894,7 +930,7 @@ Class Demolitionist : PlayerPawn A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); mystats.buttslams++; } - continue; + if ( raging ) continue; // don't stop } } // wallbump @@ -902,6 +938,7 @@ Class Demolitionist : PlayerPawn A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); bumptic = gametic+int(20+spd/4.); A_QuakeEx(8,8,8,16,0,128,"",QF_RELATIVE|QF_SCALEDOWN); + A_AlertMonsters(800); vel *= .2; vel -= dir*(10+(spd*30/mass)); vel += wallnorm*(10+(spd*50/mass)); @@ -940,6 +977,9 @@ Class Demolitionist : PlayerPawn } override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) { + // completely nullify non-lethal fall damage + if ( (mod == 'Falling') && (damage < TELEFRAG_DAMAGE) ) + damage = 0; if ( damage <= 0 ) { lastdamage = 0; @@ -2105,22 +2145,21 @@ Class Demolitionist : PlayerPawn Loop; CrouchWave: #### # 3; - XZWE Z 3; - XZWF ABCDEFGHIJKLMN 3; + XZWF ABCDEFGHIJKLMNO 3; Goto Crouch+1; CrouchApprove: #### # 3; - XZWF OPQRSTUVWXYZ 3; - XZWG ABCDE 3; + XZWF PQRSTUVWXYZ 3; + XZWG ABCDEF 3; Goto Crouch+1; CrouchVictory: #### # 3; - XZWG FGHIJKLMNOPQRSTUVWX 3; + XZWG GHIJKLMNOPQRSTUVWXY 3; Goto Crouch+1; CrouchBlowKiss: #### # 3; - XZWG YZ 3; - XZWH ABCDEFGHIJKLMNOPQ 3; + XZWG Z 3; + XZWH ABCDEFGHIJKLMNOPQR 3; Goto Crouch+1; CrouchMissile: XZW7 M 2; @@ -2168,23 +2207,23 @@ Class Demolitionist : PlayerPawn Goto Spawn+1; Float: #### # 3; - XZWD WXYZ 3; - XZWE ABCDEFGH 3; + XZWD XYZ 3; + XZWE ABCDEFGHI 3; Goto Float+1; Swim: #### # 2; - XZWE IJK 2; + XZWE JKL 2; Goto SwimLoop; SwimLoop: - XZWE LMN 2; - XZWE O 0 A_StartSound("demolitionist/runstart",CHAN_FOOTSTEP,CHANF_OVERLAP,.2); - XZWE OPQRST 2; - XZWE U 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2); - XZWE UVW 2; + XZWE MNO 2; + XZWE P 0 A_StartSound("demolitionist/runstart",CHAN_FOOTSTEP,CHANF_OVERLAP,.2); + XZWE PQRSTU 2; + XZWE V 0 A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP,.2); + XZWE VWX 2; Loop; SwimEnd: #### # 2; - XZWE LXY 2; + XZWE MYZ 2; Goto Float+1; VoodooSpawn: XZWZ A -1; @@ -2443,11 +2482,12 @@ Class DemolitionistShockwave : Actor s.vel = pvel; } let raging = RagekitPower(target.FindInventory("RagekitPower")); - if ( raging ) + if ( raging || swwm_omnibust ) { // bust the floor if we can let tempme = new("LineTracer"); // gross hack to pass needed data - int dmg = (40+min(special1,120))*8; + int dmg = 40+min(special1,120); + if ( raging ) dmg *= 8; F3DFloor ff; for ( int i=0; i 0) ) { + if ( (damageType == 'Falling') || (damageType == 'InstantDeath') ) + SafeTeleport(); // get out of pits newdamage = 0; if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); DoTheThing(true); Amount--; } } + void SafeTeleport( bool tostart = false ) + { + Spawn("SWWMItemFog",Owner.Vec3Offset(0,0,Owner.Height/2)); + Vector3 safepos; + double safeangle; + if ( tostart || !lastsafevalid ) + { + if ( deathmatch ) [safepos, safeangle] = level.PickDeathmatchStart(); + else [safepos, safeangle] = level.PickPlayerStart(Owner.PlayerNumber()); + } + else + { + safepos = lastsafepos[4]; + safeangle = lastsafeangle[4]; + } + Owner.Teleport(safepos,safeangle,TF_TELEFRAG|TF_FORCED|TF_USESPOTZ|TF_NOFOG); + } override void DoEffect() { Super.DoEffect(); - if ( Amount <= 0 ) DepleteOrDestroy(); + if ( dteleport > 0 ) + { + dteleport--; + if ( dteleport <= 0 ) dteleport = -1; + } + else if ( dteleport == -1 ) + { + dteleport = 0; + SafeTeleport(); + } + // check safe spot + if ( Owner && !(Owner.CurSector.flags&Sector.SECF_ENDLEVEL) && (Owner.CurSector.DamageAmount <= 0) && (Owner.waterlevel < 2) && (Owner.GetFloorTerrain().DamageAmount <= 0) && (Owner.pos.z <= Owner.floorz) ) + { + if ( safetic == 0 ) + { + if ( lastsafevalid ) + { + for ( int i=4; i>0; i-- ) + { + lastsafepos[i] = lastsafepos[i-1]; + lastsafeangle[i] = lastsafeangle[i-1]; + } + lastsafepos[0] = Owner.pos; + lastsafeangle[0] = Owner.angle; + } + else + { + lastsafevalid = true; + for ( int i=0; i<5; i++ ) + { + lastsafepos[i] = Owner.pos; + lastsafeangle[i] = Owner.angle; + } + } + } + safetic = (safetic+1)%35; + } + else safetic = 1; + if ( (Amount <= 0) && (dteleport == 0) ) DepleteOrDestroy(); } override void AttachToOwner( Actor other ) { @@ -190,6 +255,7 @@ Class GhostPower : PowerInvisibility Powerup.Strength 100; Powerup.Mode "Translucent"; Powerup.Color "F0E0FF", 0.1; + +INVENTORY.ADDITIVETIME; } override void InitEffect() @@ -291,7 +357,7 @@ Class GhostArtifact : Inventory if ( pickup && !deathmatch ) return false; if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); let g = GhostPower(Owner.FindInventory("GhostPower")); - if ( g ) g.EffectTics = g.default.EffectTics; + if ( g ) g.EffectTics += g.default.EffectTics; else Owner.GiveInventory("GhostPower",1); return true; } @@ -362,6 +428,7 @@ Class GravityPower : Powerup { Inventory.Icon "graphics/HUD/Icons/I_Gravity.png"; Powerup.Duration -60; + +INVENTORY.ADDITIVETIME; } override void InitEffect() @@ -417,7 +484,7 @@ Class GravitySuppressor : Inventory if ( pickup && !deathmatch ) return false; if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); let g = GravityPower(Owner.FindInventory("GravityPower")); - if ( g ) g.EffectTics = g.default.EffectTics; + if ( g ) g.EffectTics += g.default.EffectTics; else Owner.GiveInventory("GravityPower",1); return true; } @@ -529,6 +596,7 @@ Class InvinciballPower : Powerup Powerup.Duration -30; Inventory.Icon "graphics/HUD/Icons/I_Invinciball.png"; Powerup.Color "FF3000", 0.1; + +INVENTORY.ADDITIVETIME; } override void InitEffect() @@ -638,7 +706,7 @@ Class FuckingInvinciball : Inventory let i = InvinciballPower(Owner.FindInventory("InvinciballPower")); if ( i ) { - i.EffectTics = i.default.EffectTics; + i.EffectTics += i.default.EffectTics; i.lastpulse = max(i.lastpulse,gametic+35); SWWMHandler.DoFlash(Owner,Color(96,255,64,0),20); } @@ -759,6 +827,7 @@ Class RagekitPower : Powerup Powerup.Duration -30; Inventory.Icon "graphics/HUD/Icons/I_Ragekit.png"; Powerup.Color "FF0000", 0.2; + +INVENTORY.ADDITIVETIME; } override void InitEffect() @@ -793,6 +862,8 @@ Class RagekitPower : Powerup if ( !(level.maptime%30) ) { SWWMHandler.DoFlash(Owner,Color(16,255,0,0),5); + if ( Owner.GiveBody(1,100) ) + SWWMScoreObj.Spawn(1,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_BLUE); Owner.A_AlertMonsters(2000); if ( (Owner.player == players[consoleplayer]) && (gametic > lastrage) && (CVar.GetCVar('swwm_mutevoice',players[consoleplayer]).GetInt() < 2) ) lastrage = SWWMHandler.AddOneliner("ragekit",2,5)+40; @@ -845,6 +916,8 @@ Class RagekitPower : Powerup void DoHitFX() { if ( level.maptime <= lasteffect+5 ) return; + if ( Owner.GiveBody(5,100) ) + SWWMScoreObj.Spawn(5,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_BLUE); Owner.A_AlertMonsters(5000); SWWMHandler.DoFlash(Owner,Color(64,255,0,0),10); Owner.A_QuakeEx(8,8,8,Random[Rage](3,8),0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); @@ -883,11 +956,12 @@ Class Ragekit : Inventory { if ( pickup && !deathmatch ) return false; if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); - Owner.GiveBody(-100); // full base health + if ( Owner.GiveBody(100,100) ) + SWWMScoreObj.Spawn(100,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_BLUE); let r = RagekitPower(Owner.FindInventory("RagekitPower")); if ( r ) { - r.EffectTics = r.default.EffectTics; + r.EffectTics += r.default.EffectTics; SWWMHandler.DoFlash(Owner,Color(64,255,0,0),30); Owner.A_QuakeEx(8,8,8,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); r.lastpulse = max(r.lastpulse,gametic+35); @@ -1267,6 +1341,8 @@ Class LampMashiro : Actor abstract // ⢅⢇⢘⢕⢍⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣎⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠛⠛⠛⠉⠁⠀⢀⢜⢕⢅⠕⣡⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠐⡫⡠⠜⣡⣾⣿⣿⡿⠟⠫⠦⠪⠊ // ⢕⢕⢸⣵⣷⣾⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣦⣤⡩⣉⣉⡩⣉⣉⠉⠉⠈⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠀⠀⣤⢔⢗⢕⠕⣰⣿⣿⣿⣿⣿⣿⣿⣿⡿⢋⢔⢕⠕⣓⠏⣊⠰⠻⠟⠛⣉⠅⢄⠂⡪⡪⡪⠨ // +// ~it actually won't be her, but one can dream~ +// } Class CompanionLamp : Actor @@ -1695,6 +1771,7 @@ Class BarrierPower : PowerIronFeet Inventory.Icon "graphics/HUD/Icons/I_Barrier.png"; Powerup.Duration -60; Powerup.Color "20FF00", 0.1; + +INVENTORY.ADDITIVETIME; } override void AbsorbDamage( int damage, Name damageType, out int newdamage ) @@ -1741,7 +1818,7 @@ Class EBarrier : Inventory if ( pickup && !deathmatch ) return false; if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); let b = BarrierPower(Owner.FindInventory("BarrierPower")); - if ( b ) b.EffectTics = b.default.EffectTics; + if ( b ) b.EffectTics += b.default.EffectTics; else Owner.GiveInventory("BarrierPower",1); return true; } diff --git a/zscript/swwm_shot.zsc b/zscript/swwm_shot.zsc index ea20dbe96..924ad90eb 100644 --- a/zscript/swwm_shot.zsc +++ b/zscript/swwm_shot.zsc @@ -493,7 +493,7 @@ Class SaltImpact : Actor } override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { - if ( args[0] == 1 ) return StringTable.Localize("$O_WALLBUSTER_BLUE"); + if ( args[0] >= 1 ) return StringTable.Localize("$O_WALLBUSTER_BLUE"); return Super.GetObituary(victim,inflictor,mod,playerattack); } override void PostBeginPlay() @@ -584,7 +584,7 @@ Class SaltBeam : Actor override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { - if ( args[1] == 1 ) return StringTable.Localize("$O_WALLBUSTER_BLUE"); + if ( args[1] >= 1 ) return StringTable.Localize("$O_WALLBUSTER_BLUE"); return Super.GetObituary(victim,inflictor,mod,playerattack); } void SpreadOut() @@ -618,7 +618,7 @@ Class SaltBeam : Actor } if ( t.Results.HitType != TRACE_HitNone ) { - if ( args[1] ) BusterWall.Bust(t.Results,85+Accuracy*10,target,x,t.Results.HitPos.z); + if ( (args[1] == 2) || swwm_omnibust ) BusterWall.Bust(t.Results,85+Accuracy*10,target,x,t.Results.HitPos.z); if ( t.Results.HitType == TRACE_HitActor ) { SWWMUtility.DoKnockback(t.Results.HitActor,x,25000); @@ -1329,7 +1329,7 @@ Class TheBall : Actor } override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) { - if ( special1 == 1 ) return StringTable.Localize("$O_WALLBUSTER_PURPLE"); + if ( special1 >= 1 ) return StringTable.Localize("$O_WALLBUSTER_PURPLE"); return Super.GetObituary(victim,inflictor,mod,playerattack); } override int SpecialMissileHit( Actor victim ) @@ -1451,7 +1451,6 @@ Class TheBall : Actor lasthit = null; Vector3 HitNormal = -vel.unit(); F3DFloor ff; - LineTracer faketracer = new("LineTracer"); if ( BlockingFloor ) { // find closest 3d floor for its normal @@ -1462,14 +1461,8 @@ Class TheBall : Actor ff = BlockingFloor.Get3DFloor(i); break; } - if ( ff ) - { - faketracer.Results.ffloor = ff; - HitNormal = -ff.top.Normal; - } + if ( ff ) HitNormal = -ff.top.Normal; else HitNormal = BlockingFloor.floorplane.Normal; - faketracer.Results.HitType = TRACE_HitFloor; - faketracer.Results.HitSector = BlockingFloor; } else if ( BlockingCeiling ) { @@ -1481,14 +1474,8 @@ Class TheBall : Actor ff = BlockingCeiling.Get3DFloor(i); break; } - if ( ff ) - { - faketracer.Results.ffloor = ff; - HitNormal = -ff.bottom.Normal; - } + if ( ff ) HitNormal = -ff.bottom.Normal; else HitNormal = BlockingCeiling.ceilingplane.Normal; - faketracer.Results.HitType = TRACE_HitCeiling; - faketracer.Results.HitSector = BlockingCeiling; } else if ( BlockingLine ) { @@ -1502,30 +1489,17 @@ Class TheBall : Actor if ( (!locknum || (target && target.CheckKeys(locknum,false,true))) && !SWWMUtility.IsExitLine(BlockingLine) ) BlockingLine.RemoteActivate(target,wside,SPAC_Use,pos); } - faketracer.Results.HitType = TRACE_HitWall; - faketracer.Results.HitLine = BlockingLine; - faketracer.Results.Side = wside; - faketracer.Results.Tier = TIER_Middle; - // guess the tier hit - if ( BlockingLine.sidedef[1] ) - { - double ceil = BlockingLine.sidedef[!wside].sector.ceilingplane.ZAtPoint(pos.xy); - double flor = BlockingLine.sidedef[!wside].sector.floorplane.ZAtPoint(pos.xy); - if ( pos.z >= ceil ) faketracer.Results.Tier = TIER_Upper; - else if ( (pos.z+Height) <= flor ) faketracer.Results.Tier = TIER_Lower; - } } else if ( BlockingMobj ) { Vector3 diff = level.Vec3Diff(BlockingMobj.Vec3Offset(0,0,BlockingMobj.Height/2),pos); HitNormal = diff.unit(); - faketracer.Results.HitType = TRACE_HitActor; } // send the needed data for a bust - if ( special1 == 1 ) + if ( (special1 == 2) || swwm_omnibust ) { int dmg = int(oldvel.length()*4.2+heat*80); - BusterWall.Bust(faketracer.Results,dmg,target,oldvel.unit(),pos.z+Height/2.); + BusterWall.ProjectileBust(self,dmg,oldvel.unit()); } // undo the bounce, we need to hook in our own vel = oldvel; @@ -2100,6 +2074,13 @@ Class Spreadgun : SWWMWeapon action void ProcessTraceHit( SpreadgunTracer t, Vector3 origin, Vector3 dir, int dmg, double mm, Class impact = "SpreadImpact", int bc = 1, bool large = false ) { + if ( swwm_omnibust ) + { + // Wall busting + int bustdmg = dmg; + if ( t is 'SpreadSlugTracer' ) bustdmg = int(SpreadSlugTracer(t).penetration); + BusterWall.Bust(t.Results,bustdmg,self,t.Results.HitVector,t.Results.HitPos.z); + } for ( int i=0; i 4. ) SWWMUtility.DoKnockback(t,-dirto,clamp(120.-dist,0.,120.)*100); } } - Health -= 2; + Health -= 3; if ( Health <= 0 ) ExplodeMissile(); } @@ -276,7 +276,7 @@ Class BigBiospark : Actor { A_StopSound(CHAN_VOICE); A_AlertMonsters(15000); - SWWMUtility.DoExplosion(self,450,200000,300,100); + SWWMUtility.DoExplosion(self,250,200000,250,100); A_QuakeEx(9,9,9,30,0,1400,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollIntensity:1.5); A_StartSound("biospark/bighit",CHAN_ITEM,attenuation:.4); A_StartSound("biospark/bighit",CHAN_WEAPON,attenuation:.3); @@ -330,7 +330,7 @@ Class BigBiospark : Actor if ( special1 > 40 ) return; double factor = (40-special1)/40.; double invfct = 1.-factor; - SWWMUtility.DoExplosion(self,150*factor,0.,250*invfct); + SWWMUtility.DoExplosion(self,80*factor,0.,250*invfct); SWWMUtility.DoExplosion(self,0,-8000*factor,500*invfct); int numpt = int(Random[ExploS](16,32)*factor); for ( int i=0; i 30 ) return; double factor = (30-special1)/30.; double invfct = 1.-factor; - SWWMUtility.DoExplosion(self,20*factor,0.,150*invfct); + SWWMUtility.DoExplosion(self,10*factor,0.,150*invfct); SWWMUtility.DoExplosion(self,0,-5000*factor,300*invfct); int numpt = int(Random[ExploS](16,32)*factor); for ( int i=0; i mx ) return; double factor = (mx-special1)/mx; double invfct = 1.-factor; - SWWMUtility.DoExplosion(self,(bAMBUSH?(400+Args[0]*40):100)*factor,0.,(bAMBUSH?900.:300.)*invfct); - SWWMUtility.DoExplosion(self,0.,-12000*factor,(bAMBUSH?1500:500)*invfct); + SWWMUtility.DoExplosion(self,(bAMBUSH?(80+Args[0]*10):50)*factor,0.,(bAMBUSH?600.:400.)*invfct); + SWWMUtility.DoExplosion(self,0.,-12000*factor,(bAMBUSH?800:600)*invfct); int numpt = int(Random[ExploS](8,16)*factor); for ( int i=0; i mx) || !(special2%2) ) return; int numpt = Random[Sparkster](0,mx-special2); double ang, pt; - double mul = bAMBUSH?8:3; + double mul = bAMBUSH?9:5; for ( int i=0; i10)?"CandyBeam":"TinyCandyBeam",pos); + let s = Spawn((frame<10)?"CandyBeam":"TinyCandyBeam",pos); s.target = target; s.angle = ang; s.pitch = pt; @@ -698,6 +699,7 @@ Class CandyMagProj : Actor } Spawn("CandyLight2",pos); Spawn("CandyRing2",pos); + if ( swwm_omnibust ) BusterWall.ProjectileBust(self,1000+900*special1,cvel); } States { @@ -1024,6 +1026,7 @@ Class CandyGun : SWWMWeapon b.angle = atan2(hitnormal.y,hitnormal.x); b.pitch = asin(-hitnormal.z); b.target = self; + if ( swwm_omnibust ) BusterWall.BustLinetrace(d,1700,self,d.HitDir,d.HitLocation.z); } for ( int i=0; i<6; i++ ) { diff --git a/zscript/swwm_thiccboolet.zsc b/zscript/swwm_thiccboolet.zsc index a0f551fc5..e450f2016 100644 --- a/zscript/swwm_thiccboolet.zsc +++ b/zscript/swwm_thiccboolet.zsc @@ -161,9 +161,11 @@ Class SilverImpact : Actor Class WallPenetrate { - Vector3 hitpos, hitdir, hitnormal; + Vector3 hitpos, hitdir, hitnormal, bustdir; + int hitside, hittier, hittype, penetration; Line hitline; - int hitside; + Sector hitsector; + F3DFloor hitffloor; } Class AuxiliarySilverBulletTracer : LineTracer @@ -237,25 +239,38 @@ Class SilverBulletTracer : SpreadSlugTracer Vector3 ofs = level.Vec3Offset(Results.HitPos,Results.HitVector*i); if ( level.IsPointInLevel(ofs) ) { - penetration = max(0,penetration-i*4); let wp = new("WallPenetrate"); + wp.hittype = Results.HitType; wp.hitline = Results.HitLine; wp.hitside = Results.Side; + wp.hittier = Results.Tier; + wp.hitsector = Results.HitSector; + wp.hitffloor = Results.ffloor; wp.hitpos = Results.HitPos; wp.hitdir = Results.HitVector; + wp.bustdir = Results.HitVector; + wp.penetration = int(penetration); wp.hitnormal = (-Results.HitLine.delta.y,Results.HitLine.delta.x,0).unit(); if ( !Results.Side ) wp.hitnormal *= -1; WallPenetrateList.Push(wp); + penetration = max(0,penetration-i*4); // trace backwards to find exit surface let at = new("AuxiliarySilverBulletTracer"); at.Trace(ofs,level.PointInSector(ofs.xy),-Results.HitVector,2.,TRACE_NoSky); if ( at.Results.HitType != TRACE_HitNone ) { let wp2 = new("WallPenetrate"); + wp2.hittype = at.Results.HitType; wp2.hitline = at.Results.HitLine; wp2.hitside = at.Results.Side; + wp2.hittier = at.Results.Tier; + wp2.hitsector = at.Results.HitSector; + wp2.hitffloor = at.Results.ffloor; + wp2.hitside = at.Results.Side; wp2.hitpos = at.Results.HitPos; wp2.hitdir = at.Results.HitVector; + wp2.bustdir = -at.Results.HitVector; + wp2.penetration = int(penetration); if ( at.Results.HitType == TRACE_HitWall ) { wp2.hitnormal = (-at.Results.HitLine.delta.y,at.Results.HitLine.delta.x,0).unit(); @@ -284,12 +299,17 @@ Class SilverBulletTracer : SpreadSlugTracer Vector3 ofs = level.Vec3Offset(Results.HitPos,Results.HitVector*i); if ( level.IsPointInLevel(ofs) ) { - penetration = max(0,penetration-i*4); let wp = new("WallPenetrate"); + wp.hittype = Results.HitType; wp.hitline = Results.HitLine; wp.hitside = Results.Side; + wp.hittier = Results.Tier; + wp.hitsector = Results.HitSector; + wp.hitffloor = Results.ffloor; wp.hitpos = Results.HitPos; wp.hitdir = Results.HitVector; + wp.bustdir = Results.HitVector; + wp.penetration = int(penetration); if ( Results.HitType == TRACE_HitWall ) { wp.hitnormal = (-Results.HitLine.delta.y,Results.HitLine.delta.x,0).unit(); @@ -301,16 +321,24 @@ Class SilverBulletTracer : SpreadSlugTracer else if ( Results.HitType == TRACE_HitFloor ) wp.hitnormal = Results.HitSector.floorplane.Normal; WallPenetrateList.Push(wp); + penetration = max(0,penetration-i*4); // trace backwards to find exit surface let at = new("AuxiliarySilverBulletTracer"); at.Trace(ofs,level.PointInSector(ofs.xy),-Results.HitVector,2.,TRACE_NoSky); if ( at.Results.HitType != TRACE_HitNone ) { let wp2 = new("WallPenetrate"); + wp2.hittype = at.Results.HitType; wp2.hitline = at.Results.HitLine; wp2.hitside = at.Results.Side; + wp2.hittier = at.Results.Tier; + wp2.hitsector = at.Results.HitSector; + wp2.hitffloor = at.Results.ffloor; + wp2.hitside = at.Results.Side; wp2.hitpos = at.Results.HitPos; wp2.hitdir = at.Results.HitVector; + wp2.bustdir = -at.Results.HitVector; + wp2.penetration = int(penetration); if ( at.Results.HitType == TRACE_HitWall ) { wp2.hitnormal = (-at.Results.HitLine.delta.y,at.Results.HitLine.delta.x,0).unit(); @@ -776,6 +804,7 @@ Class SilverBullet : SWWMWeapon p.target = self; } } + LineTracer faketracer = new("LineTracer"); for ( int i=0; i 0) && (mytarget.target.player == players[consoleplayer]) && (mytarget.Vec3To(mytarget.target).length() < 2000) && mytarget.CheckSight(mytarget.target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime+70; + int mxdist = maxdist.GetInt(); + // enemies within a set distance that have us as target + if ( !straifu && mytarget.target && (mytarget.target.Health > 0) && (mytarget.target.player == players[consoleplayer]) && ((mxdist <= 0) || (mytarget.Vec3To(mytarget.target).length() < mxdist)) && mytarget.CheckSight(mytarget.target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime+70; // players (but not voodoo dolls), always visible in sp/coop if ( !deathmatch && mytarget.player && (mytarget.player.mo == mytarget) ) updated = level.maptime+35; - // any visible enemies within 600mu - if ( (mytarget.Vec3To(players[consoleplayer].mo).length() < 600) && players[consoleplayer].mo.CheckSight(mytarget,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime; + // any visible enemies within one quarter of the set distance + if ( ((mxdist <= 0) || (mytarget.Vec3To(players[consoleplayer].mo).length() < (mxdist/4))) && players[consoleplayer].mo.CheckSight(mytarget,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime; } - else if ( mytarget is 'BossBrain' ) + else if ( (mytarget is 'BossBrain') || (mytarget is 'SWWMHangingKeen') ) { - // teh romero, only if visible - if ( (mytarget.Vec3To(players[consoleplayer].mo).length() < 600) && players[consoleplayer].mo.CheckSight(mytarget,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime; + int mxdist = maxdist.GetInt(); + // special stuff, only if visible + if ( ((mxdist <= 0) || (mytarget.Vec3To(players[consoleplayer].mo).length() < (mxdist/4))) && players[consoleplayer].mo.CheckSight(mytarget,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) updated = level.maptime; } } } diff --git a/zscript/swwm_utility.zsc b/zscript/swwm_utility.zsc index 0ff9aff26..77308b723 100644 --- a/zscript/swwm_utility.zsc +++ b/zscript/swwm_utility.zsc @@ -474,6 +474,7 @@ Class SWWMUtility basetag = "WOLFSS"; break; case 'CommanderKeen': + case 'SWWMHangingKeen': basetag = "KEEN"; break; case 'MBFHelperDog':