diff --git a/FuturePlans.md b/FuturePlans.md index f11e2d551..28029c790 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -1,4 +1,18 @@ -This is just a bit of *"future planning"* for stuff that I ***might*** add after the first release. +This is just a bit of *"future planning"* for stuff that I ***might*** add later on. + +## 1.2 update *(A Needed Change)*: + +I REALLY need to do this, it's starting to become very problematic to maintain the Demolitionist Menu as-is. + +* **Demolitionist Menu Refactor:** + - Non 16:10 ratio support + - Smooth scrolling, better mouse input + - Much cleaner code, easier maintenance and extension + - Modular design, add-on tab support + +## 1.3 update *(The Second Batch)*: + +More weapons, because we need 'em. * **DLC Weaponset:** - [1] Itamex Reinforced Hammer *(UnSX 5)* @@ -21,15 +35,25 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - The Most Silent Takedown *(Kill 30 enemies with the Ray-Khom primary without alerting them)* - [0] Grand Lance *(SWWM Iridium)* - Penetrator *(Strike through 20 enemies in a row with a single Grand Lance secondary)* + +## 1.4 update *(Arsenal Appendix)*: + +A couple extra weapons, not enough for a full batch, but still worthy additions. + * **DLC Weaponset 2:** - [1] Hand of Divine *(Total Madness)* - Facepunching Extraordinaire *(Kill 300 enemies with the Hand of Divine)* - [6] Sparkster x3 *(UnSX 2)* - - A Fine Sparking *(Kill 50 enemies at once with a Sparkster Rifle combo shot)* + - A Fine Sparking *(Kill 30 enemies at once with a Sparkster Rifle combo shot)* - [9] Mortal Rifle *(UnSX 2)* - - Railed Hard *(Shoot through 30 enemies with a single Mortal Rifle overpressure shot)* + - Railed Hard *(Shoot through 16 enemies with a single Mortal Rifle overpressure shot)* - [0] Rafan-Kos *(UnSX 4)* - Blasting Ropes *(Melt a grand total of 1000 enemies with the Rafan-Kos)* + +## 1.5 update *(The Final Stage)*: + +All the hard stuff *(some of these aren't guaranteed)*. + * **DLC Gameset:** - Tetris - Pong @@ -37,70 +61,6 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - **[Doom]** Demo Land Adventure *(platformer with shooty gameplay)* - **[Heretic]** Interstellar Demolitionist *(a somewhat simple vertical SHMUP, kinda Touhou styled)* - **[Hexen]** Demolition Quest *(a JRPG, kinda like early FF / BoF)* -* **More collectibles (some of which were initially planned but didn't make it in time):** - - [Doom] Moth Plushy *("She loves a good lämp")* - - [Doom] AA-12 *("Ibuki's favorite shotgun. It's just a collectible model, so it doesn't actually shoot")* - - [Doom] Hege Cactus *("Appears to absorb all water, causing intense thirst")* - - [Doom] Hoagie *("Can't eat it, but looks delicious")* - - [Doom] Red Oni Milk *("It's a bit too obvious, isn't it?")* - - [Doom] Black Rat's Coven - Counter-Inquisition *("Man is this some good music")* - - [Heretic] Manarock *("A delicacy for gods, but instantly deadly for mortals")* - - [Heretic] Lithium - Volume One *("A work of art, one of the finest graphic novels")* - - [Hexen] Psykkonovexx *("Some crazy-ass Anarukon instrument, sounds amazing though")* -* **More items:** - - [Heretic/Hexen] Safety Tether *(Original)* - - Sneaky Retreat *(Use 10 Safety Tethers)* - - Devastation Sigil *(SWWM)* - - Deva Station *(Use 10 Devastation Sigils)* - - Divine Sprite *(SWWM Platinum)* - - Divine Delight *(Use 10 Divine Sprites)* -* **More achievements:** - - Piece of Candy *(Collect 1000 nuggets)* - - Kaboom *(Kill 30 enemies with planted Explodium Mags)* - - Pacifist *(Finish a map without dealing damage)* - - Untouchable *(Finish a map without taking damage)* - - Under Pressure *(Break a crusher)* - - The Longest Journey *(Walk a total of 1000km)* - - Mishe Trickery *(Successfully input a cheat code)* - - ...And a Dream *(Kill 10 enemies while having only 1 HP)* - - In a Hurry *(Beat a map with 0% kills, items and secrets)* - - Deadeye *(Land 7 consecutive Explodium Gun shots without missing)* - - Thorough Tenderizing *(Kill 100 enemies with the Pusher)* - - [Doom] Graffiti Master *(Doodle mustaches on 20 demon faces)* - - [Doom] Goodbye Franchise *(Rescue Commander Keen)* - - [Doom] Taking out the Trash *(Kill all Nazis in the Doom 2 secret maps)* - - [Doom] Environmental Disaster *(Destroy 1000 barrels)* - - [Doom] Cyberbullying *(Kill a Cyberdemon with its own rocket)* - - [Doom] Oh That's a Baseball *(Perfect parry a Lost Soul with the Silver Bullet)* - - [Doom] Dynamic Duo *(Defeat the Bruiser Brothers)* - - [Doom] Huge Guts *(Defeat the Tyrant of Babel)* - - [Doom] All Brain *(Defeat the Spider Mastermind)* - - [Doom] More Brain *(Defeat the Spider Sibling)* - - [Doom] Final Cleanup *(Complete Baphomet's Challenge)* - - [Doom] Simply Dead *(Defeat the Demonic Biomech Squad)* - - [Doom] Titan's Fall *(Defeat the Icon of Sin)* - - [Doom] Shot Until Dead *(Defeat the Last Tyrant)* - - [Doom] Evil Eternal *(Defeat the Archangelus)* - - [Doom] A Gazebo Most Insane *(Conquer the Sundered Realms)* - - [Heretic] What The Fuck? *(Punch a tornado???)* - - [Heretic] Crazy Heads *(Defeat the Iron Liches)* - - [Heretic] A Load of Bull *(Defeat the Maulotaur Servants)* - - [Heretic] Abracadabra I Win *(Defeat D'Sparil)* - - [Heretic] What's So Funny? *(Defeat the Iron Liches... again)* - - [Heretic] Big Mooscles *(Defeat the Maulotaur Servants... again)* - - [Hexen] Even Kirin is Upset *(Solve 20 "puzzles")* - - [Hexen] Extreme Kancho *(Break a stone spike)* - - [Hexen] It Just Works *(Defeat the Death Wyvern)* - - [Hexen] Magic Shmagic *(Defeat the Heresiarch)* - - [Hexen] You Again? *(Defeat another Heresiarch)* - - [Hexen] Domination *(Defeat Zedek)* - - [Hexen] Excommunication *(Defeat Traductus)* - - [Hexen] I Hate Puzzles *(Defeat Menelkir)* - - [Hexen] Worship This *(Defeat Korax)* - - [Hexen] Another One *(Defeat yet another Heresiarch)* - - [Hexen] And Another One *(Defeat... yup, one more Heresiarch)* - - [Hexen] The Last One *(Defeat the last Heresiarch)* - - [Hexen] Didn't I Kick Your Ass Before? *(Defeat the Deathkings)* * **Mothgirl summon for Lämp easter egg** - Layers of White *(Summon the White Lady)* * **Replace all hitscan with *"light projectiles"*** @@ -116,28 +76,51 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Giggle - Shrug - Beckon +* **Photo Mode** + - Dedicated poses + - Stickers +* **Virtual Training Map** + - Featuring Maidbot as assistant + +## Unspecified + +Things that I'm unsure whether or not they'll be made. + * **Japanese localization???** * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** * **Customized cluster text stuff if that ever gets scriptified** * **Official Sunder support *(when the WAD is complete)*** -* **Photo Mode** - - Dedicated poses - - Stickers +* **Original English Voice Acting** + +## Other Projects + +Add-ons and other related stuff. + * **Monster/decoration replacements add-on:** - Potentially standalone, usable with other mods - Balanced for this mod - Unique bosses - Some extra enemy variants - - Coverage for all supported IWADs *(oof)* -* **Original English Voice Acting:** - - Demolitionist - - Ibuki - - Saya - - Kirin -* **Ibuki sub-mod *(Red Oni)*** -* **Saya sub-mod *(Red-Eyed Rampage)*** -* **Kirin sub-mod *(Red Star of Innocence)*** -* **Hardcore Mode sub-mod:** + - Coverage for all supported WADs *(oof)* +* **Ibuki side mod *(Red Oni):*** + - A more *"mundane"* arsenal + - Featuring a very big girl with very big... Assets + - Possibly will have its own DLC Weaponset too + - Featuring a toggleable companion + - Nudity, in a Doom mod? Wow, never seen that one before + - This one's surprisingly meant to be more of a power trip than SWWM GZ +* **Saya side mod *(Red-Eyed Rampage)*** + - The first mod where you play as a mere squishy person + - Spellcasting! + - A more interesting take on "infinite lives" + - Featuring the Pancor Jackhammer *(lol)* +* **[Hexen]** **Kirin side mod *(Red Star of Innocence)*** + - Finally, you get to play as the precious femboy emperor + - Designed entirely for Hexen's funky gameplay™ + - Watch as our boy complains about *"puzzles"* + - Some unique touches to spice things up + - Basically a lite version of what you could expect in **UNDEATH** +* ***(Maybe)* Hardcore Mode sub-mod:** - Featuring Demolitionist on Maidbot frame - More complex game mechanics - Manual Hammerspace management diff --git a/README.md b/README.md index 2b311bfbb..dd4649158 100644 --- a/README.md +++ b/README.md @@ -405,13 +405,32 @@ A floating lamp companion, may attract moths. The moths will disperse and attack Reveals the entire layout of the map and shows key locations in the HUD. Also allows you to highlight pickups through walls when holding the **Item Sense** button. -### Mykradvo Artifact ~ May randomly replace Ghost Artifact, Ragekit or Invinciball +### Safety Tether ~ Replaces Chaos Device +![](docimg/tether.png) + +On use, teleports you back to the start of the map. Basically acts exactly the same as a Chaos Device, although it also resets you to max health should you be under the weather. Additionally it also generates shockwaves on both ends, making your escape more dramatic. + +### Mykradvo Artifact ~ May randomly replace Ghost Artifact or Invinciball ![](docimg/mykradvo.png) When used, bursts into plasma tendrils that will seek all visible hostiles within 100m and fry them good. If there are no hostiles around, the artifact will simply not ignite. Has a chance to spawn in place of other items, but only one may spawn per map. Cannot be bought due to its rarity. +### Divine Sprite ~ May randomly replace Grilled Cheese Sandwich +![](docimg/sprite.png) + +Rapidly boosts your health dramatically, for 50 seconds. Its effects will obviously fade afterwards. Your HUD can't exactly report your actual health, but it's assumed this goes way beyond the one thousand cap, somehow. + +Only one may spawn per map, and you can't buy these either. If you manage to fetch one, use it wisely. + +### Devastation Sigil ~ May randomly replace Ragekit +![](docimg/deva.png) + +50 seconds of absolute destructive potential for any damage you may deal, including to yourself (so be careful). + +Same conditions as the other two. Make sure you find the perfect chance to unleash this beast. + ## The Collectibles ![](docimg/chancebox.png) @@ -449,6 +468,11 @@ A perfectly generic cube. It is exactly 128mm across each side, sports a pure gr Eats your snacks and calls you a horny. Emits a giggle when you squeeze it. Yet another of Nukritas 2xx's little handcrafted dolls. May or may not be really haunted. +### Mashiro Plush +![](docimg/mothplushy.png) + +A cute plush doll of Saya's favorite moth girl. Apparently the Nukritas brothers give her one of these every time they piss her off, so she's got an entire pile in her bedroom. It appears that this one bears with it some sort of "contract", whatever that means. + ### Demolitionist Plush (Heretic) ![](docimg/demoplush.png) diff --git a/Roadmap.md b/Roadmap.md deleted file mode 100644 index 37bf5b1a2..000000000 --- a/Roadmap.md +++ /dev/null @@ -1,50 +0,0 @@ -~~**Swimming in Jizz:**~~ - - - ~~This is where I make all the stuff before beta.~~ - - ~~It's been over nine months already, still a shorter dev time than my previous projects.~~ - -~~**Icarus pls play:**~~ - - - ~~Beta release.~~ - - ~~Finetuning the basics, rebalances, etc.~~ - - ~~See if I can add those damn swimming anims.~~ - - ~~Beg more artists for intermission fanart.~~ - - ~~Stuff to maybe add during this stage: Explodium Guns akimbo, Quick grenade.~~ - - ~~Collectibles. Froggy Chair was only the beginning.~~ - -**Cutie Robutt Adventures:** - - - Going Gold™. - - Think about the future. There are lots of things I could do now *(see FuturePlans.md)*. - -**Extra Funtimes:** - - - Extra Collectibles and Achievements. - - DLC weaponset. - - DLC minigame set. - -**LODS OF LORE:** - - - Finish writing all those damn side stories. - - Make 'em fancy, maybe add some lil' art to them. - -**Funny Fellas:** - - - Monster/decoration replacement packs. All of it modeled and tweaked to fit the style and theme of the mod. Expect enhanced enemy behavior, not gonna keep it "vanilla". - - Ibuki, Saya and Kirin companions. - - Porting weapons to Hideous Destructor as a meme: - - Explodium Gun - - Wallbuster - - Biospark Carbine - - Silver Bullet JET - -**A Vast New World (2.0):** - - - Hardcore mode (separate mod). - - DLC weaponset 2. - - DLC itemset. - - Official mapset. - -**At this point I'm just making shit up:** - - - Official comic. diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 563372c63..000000000 --- a/TODO.md +++ /dev/null @@ -1,21 +0,0 @@ -**Extra things after release:** - - - DLC weaponset - - Additional collectibles not added due to time constraints - - Additional achievements - - "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 - - Figure out what needs to be changed in player code to not desync in mp with prediction enabled - - Hexen key and puzzle item models? - - DLC itemset - - DLC gameset - -**Very extra things for the future:** - - - Modeled Monster/Decoration replacers for all IWADs done in the style of the mod (will be very time consuming) - - Another DLC weaponset - - Official DM map pack - - Official IWAD diff --git a/achievements.lst b/achievements.lst index c5a82e919..4766191dd 100644 --- a/achievements.lst +++ b/achievements.lst @@ -8,47 +8,38 @@ # gametype: the game this belongs to (any, doom, heretic, hexen, raven, etc.) acid,50,yes,any allcoll,-1,no,any -allitems,30,yes,any -allkills,30,yes,any +allitems,30,yes,nothexen +allkills,30,yes,nothexen allsecrets,30,yes,nothexen anom,10,yes,any anone,0,no,any balls,10,yes,any -#barrel,1000,yes,doom +barrel,1000,yes,doom barrier,20,yes,doom -#baseball,0,no,doom +baseball,0,no,doom +blaze,0,no,nothexen bonk,300,yes,any bossdash,5,yes,any brake,10,yes,any bune,500,yes,any bustin,50,yes,any butts,100,yes,any -#candy,1000,yes,any -#cheat,0,no,any +candy,1000,yes,any +cheat,0,no,any cliffyb,0,no,nothexen clonk,0,no,any conga,10,yes,any -#crush,0,no,any -#cybully,0,no,doom +crush,0,no,any +cybully,0,no,doom #cum,1000,yes,any #dab,200,yes,any #dakka,60,no,any -#deadeye,7,yes,any -#deva,10,yes,any +deadeye,7,yes,any +deva,10,yes,any dime,0,no,any -#divine,10,yes,any -#doodle,20,yes,doom +divine,10,yes,any +doodle,20,yes,doom dosh,1000000000,no,any -#doomboss1,0,no,doom -#doomboss2,0,no,doom -#doomboss3,0,no,doom -#doomboss4,0,no,doom -#doomboss5,0,no,doom -#doomboss6,0,no,doom -#doomboss7,0,no,doom -#doomboss8,0,no,doom -#doomboss9,0,no,doom -#doomboss10,0,no,doom everything,0,no,any ezkill,50,yes,any #fisto,300,yes,any @@ -62,29 +53,13 @@ ghost,30,yes,any gib,1500,yes,any golden,24,yes,any gravity,10,yes,raven -#grenade,30,yes,any -#hereticboss1,0,no,heretic -#hereticboss2,0,no,heretic -#hereticboss3,0,no,heretic -#hereticboss4,0,no,heretic -#hereticboss5,0,no,heretic -#hexenboss1,0,no,hexen -#hexenboss2,0,no,hexen -#hexenboss3,0,no,hexen -#hexenboss4,0,no,hexen -#hexenboss5,0,no,hexen -#hexenboss6,0,no,hexen -#hexenboss7,0,no,hexen -#hexenboss8,0,no,hexen -#hexenboss9,0,no,hexen -#hexenboss10,0,no,hexen -#hexenboss11,0,no,hexen +grenade,30,yes,any #hnd,6,yes,any -#hurry,0,no,any +hurry,0,no,any #ice,40,yes,any jump,150,yes,any -#kancho,0,no,hexen -#keen,0,no,doom +kancho,0,no,hexen +keen,0,no,doom lead,1500,yes,any #lightning,0,no,any ligma,0,no,any @@ -93,20 +68,20 @@ love,10,yes,any mbf,0,no,doom mega,10000,yes,any moth,50,yes,any -nice,0,no,any +nice,0,no,nothexen oneguy,0,no,any -#onehp,10,yes,any -onestanding,0,no,any +onehp,10,yes,any +onestanding,0,no,nothexen oopsie,0,no,any par,15,yes,nothexen parry,200,yes,any -#peace,0,no,any +peace,0,no,nothexen #pene,20,yes,any #plasma,50,yes,any plush,10,yes,any -#puzzle,20,yes,hexen +puzzle,0,no,hexen rage,20,yes,any -#rail,30,yes,any +#rail,16,yes,any reflect,20,yes,any refresh,30,yes,any #roast,50,yes,any @@ -117,20 +92,20 @@ shame,0,no,any shock,30,yes,any slayer,40,yes,any slemg,100,yes,any -#sneaky,10,yes,raven +sneaky,10,yes,raven sneeze,20,yes,any -#spark,50,yes,any +#spark,30,yes,any step,30,yes,any stomp,50,yes,any sunny,15,yes,any tele,0,no,any -#tender,100,yes,any +tender,100,yes,any thicc,100,yes,any thruwall,20,yes,any -#tornado,0,no,heretic -#trash,0,no,doom -#travel,1000,yes,any -#untouchable,0,no,any +tornado,0,no,heretic +trash,0,no,doom +travel,1000,yes,any +untouchable,0,no,nothexen wantdie,0,no,any wave,0,no,any yeet,0,no,doom diff --git a/credits.txt b/credits.txt index a48269c8d..2f4a401ed 100644 --- a/credits.txt +++ b/credits.txt @@ -16,6 +16,7 @@ Most of the work here is original, but there are some notable exceptions: * Dark Souls * Dark Souls 2 * Dark Souls 3 + - In addition, a whole lot of stock sounds and internet meme sounds have also been used. - Some sprites and sounds are taken from (shareware) Wolfenstein 3D. - This mod uses Gutamatics, by Gutawer. Big thanks. - Title theme, "Traumatic State", by Teque (which a lot of people just know as "the AS-Golgotha music"). diff --git a/cvarinfo.achievements b/cvarinfo.achievements index 845283c8e..3e38b75af 100644 --- a/cvarinfo.achievements +++ b/cvarinfo.achievements @@ -3,8 +3,6 @@ // cross-session achievement cvars (0: locked, 1: unlocked, 2: notified) nosave int swwm_achievement_acid = 0; nosave int swwm_achievement_allcoll = 0; -nosave int swwm_achievement_allitems = 0; -nosave int swwm_achievement_allkills = 0; nosave int swwm_achievement_anom = 0; nosave int swwm_achievement_anone = 0; nosave int swwm_achievement_balls = 0; @@ -51,13 +49,10 @@ nosave int swwm_achievement_love = 0; nosave int swwm_achievement_mashiro = 0; nosave int swwm_achievement_mega = 0; nosave int swwm_achievement_moth = 0; -nosave int swwm_achievement_nice = 0; nosave int swwm_achievement_oneguy = 0; nosave int swwm_achievement_onehp = 0; -nosave int swwm_achievement_onestanding = 0; nosave int swwm_achievement_oopsie = 0; nosave int swwm_achievement_parry = 0; -nosave int swwm_achievement_peace = 0; nosave int swwm_achievement_pene = 0; nosave int swwm_achievement_plasma = 0; nosave int swwm_achievement_plush = 0; @@ -83,14 +78,11 @@ nosave int swwm_achievement_tender = 0; nosave int swwm_achievement_thicc = 0; nosave int swwm_achievement_thruwall = 0; nosave int swwm_achievement_travel = 0; -nosave int swwm_achievement_untouchable = 0; nosave int swwm_achievement_wantdie = 0; nosave int swwm_achievement_wave = 0; // cross-session progress cvars nosave int swwm_progress_acid = 0; nosave int swwm_progress_allcoll = 0; -nosave int swwm_progress_allitems = 0; -nosave int swwm_progress_allkills = 0; nosave int swwm_progress_anom = 0; nosave int swwm_progress_balls = 0; nosave int swwm_progress_bonk = 0; diff --git a/cvarinfo.base b/cvarinfo.base index 1372be601..fbe60dc3e 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -1,6 +1,5 @@ // main mod cvars user string swwm_voicetype = "default"; // voice for your demolitionist -//user color swwm_tagcolor = "40 FF 00"; // color of your model tags, not available due to engine dickery nosave float swwm_flashstrength = 1.0; // strength of screen flashes nosave int swwm_hudmargin = 10; // margin around fullscreen hud elements nosave int swwm_maxshown = 4; // max messages to show normally @@ -53,7 +52,7 @@ nosave int swwm_scrscale = 2; // score scaling (0 = use GZDoom scaling) nosave int swwm_numscale = 3; // damnum scaling (0 = use GZDoom scaling) nosave int swwm_poiscale = 1; // point of interest scaling (0 = use GZDoom scaling) nosave int swwm_detscale = 2; // item sense scaling (0 = use GZDoom scaling) -server bool swwm_blood = false; // custom blood/gibbing +server bool swwm_blood = true; // custom blood/gibbing server int swwm_maxblood = 400; // max blood effects at any time server int swwm_maxgibs = 100; // max gibs at any time server int swwm_maxcasings = 200; // max casings and spent mags at any time @@ -69,7 +68,7 @@ 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) nosave bool swwm_menupause = true; // pause the game when demolitionist menu is open nosave noarchive bool swwm_debugblast = false; // debug visual aid for DoExplosion -nosave bool swwm_funtags = false; // replace vanilla monster names with silly ones +nosave bool swwm_funtags = true; // replace vanilla monster names with silly ones server bool swwm_omnibust = false; // add wallbusting effect to all weapons server bool swwm_superfuel = false; // enable unlimited fuel server bool swwm_partytime = false; // killed enemies burst into confetti @@ -87,10 +86,10 @@ nosave bool swwm_camhud = false; // keep full hud visible when operating camera server bool swwm_uncapalert = false; // all noise alerts have infinite range nosave int swwm_damagetarget = 1; // conditional healthbar hiding (1 - hide until damage is first taken, 2 - hide if at full health) server int swwm_strictuntouchable = 0; // untouchable bonus ends... (1 - even if your armor absorbed all the damage, 2 - if you get hit by anything PERIOD) -server bool swwm_silencemap = false; // silences the map when all kills/items/secrets are achieved +server bool swwm_silencemap = true; // silences the map when all kills/items/secrets are achieved nosave int swwm_shadowdist = 2000; // max distance beyond which blob shadows are no longer rendered, helps performance server bool swwm_swapweapons = true; // [DLC1] allows carrying only one weapon in each slot (excluding starter melee) -nosave int swwm_forcestats = 0; // always shows level stats on the HUD, not just when the automap is open (2 - also show map name, otherwise only stats) +nosave int swwm_forcestats = 1; // always shows level stats on the HUD, not just when the automap is open (2 - also show map name, otherwise only stats) user int swwm_funtrails = 0; // recolors trails of eviscerator chunks and sheen bullets server int swwm_pistolstart = 0; // enforces pistol start for all maps (excluding hubs) [2 - only between clusters] nosave int swwm_numcolor_scr = 5; // font color for score numbers (default: gold) @@ -99,8 +98,8 @@ nosave int swwm_numcolor_dmg = 6; // font color for damage numbers (default: re nosave int swwm_numcolor_hp = 7; // font color for health numbers (default: blue) nosave int swwm_numcolor_ap = 3; // font color for armor numbers (default: green) server int swwm_drlaskill = 3; // [DRLA Monsters] skill setting for monster spawns -nosave bool swwm_itemsparkles = false; // visual aid for low visibility items -nosave bool swwm_itemglows = false; // distant items glow +nosave bool swwm_itemsparkles = true; // visual aid for low visibility items +nosave bool swwm_itemglows = true; // distant items glow server bool swwm_singlefirst = false; // single weapons are selected before dual ones, has to be a server cvar due to limitations nosave bool swwm_uniqstats = false; // only list stats from the same map once, rather than for each single visit nosave int swwm_filterachievements = 1; // filter for achievements at 0%: 0 - no filter, 1 - obscure text, 2 - don't show @@ -108,14 +107,18 @@ nosave noarchive bool swwm_debugview = false; // debug visual aid for various th nosave noarchive bool swwm_oldcheat = false; // set to true if you used a SWWM Platinum cheat, so the easter egg only appears once per session server bool swwm_selflight = true; // player emits light server bool swwm_usetopickup = false; // allow item pickup only by pressing use -server bool swwm_meleepickup = false; // allow picking up items through melee +server bool swwm_meleepickup = true; // allow picking up items through melee nosave bool swwm_buttsfx = true; // buttslam homerun SFX nosave int swwm_sewercount = 0; // I'm sorry Civvie -server bool swwm_ondemandammo = false; // don't spawn ammo for unavailable weapons +server bool swwm_ondemandammo = true; // don't spawn ammo for unavailable weapons user float swwm_bumpstrength = 1.0; // intensity of fov bumping server bool swwm_nomagdrop = true; // does not drop spent magazines (the "environmentally conscious" option) user bool swwm_autousebarrier = true; // auto-use elemental coating when standing on damaging floors server int swwm_enforceautousebarrier = 0; // enforced auto-use for coating +nosave bool swwm_nomapmsg = false; // disables special map dialogue messages +nosave bool swwm_weapontooltips = true; // shows a tooltip on weapon operation when first selected +nosave string swwm_tooltipshown = ""; // which weapons have already had their tooltips displayed +nosave noarchive bool swwm_tooltipnote = false; // set if the note on how to disable tooltips was already displayed // minimap settings nosave bool swwm_mm_enable = true; // show a minimap below the score counter diff --git a/docimg/deva.png b/docimg/deva.png new file mode 100644 index 000000000..c0cfc715c Binary files /dev/null and b/docimg/deva.png differ diff --git a/docimg/mothplushy.png b/docimg/mothplushy.png new file mode 100644 index 000000000..3699d1415 Binary files /dev/null and b/docimg/mothplushy.png differ diff --git a/docimg/sprite.png b/docimg/sprite.png new file mode 100644 index 000000000..4f4d6cad1 Binary files /dev/null and b/docimg/sprite.png differ diff --git a/docimg/tether.png b/docimg/tether.png new file mode 100644 index 000000000..4dfcdb1f6 Binary files /dev/null and b/docimg/tether.png differ diff --git a/filter/game-doom/cvarinfo.doomachievements b/filter/game-doom/cvarinfo.doomachievements index ab0b3f845..762a47dd0 100644 --- a/filter/game-doom/cvarinfo.doomachievements +++ b/filter/game-doom/cvarinfo.doomachievements @@ -1,29 +1,28 @@ // doom-exclusive achievements // cross-session achievement cvars (0: locked, 1: unlocked, 2: notified) +nosave int swwm_achievement_allitems = 0; +nosave int swwm_achievement_allkills = 0; nosave int swwm_achievement_allsecrets = 0; nosave int swwm_achievement_barrel = 0; nosave int swwm_achievement_barrier = 0; nosave int swwm_achievement_baseball = 0; +nosave int swwm_achievement_blaze = 0; nosave int swwm_achievement_cliffyb = 0; nosave int swwm_achievement_cybully = 0; nosave int swwm_achievement_doodle = 0; -nosave int swwm_achievement_doomboss1 = 0; -nosave int swwm_achievement_doomboss2 = 0; -nosave int swwm_achievement_doomboss3 = 0; -nosave int swwm_achievement_doomboss4 = 0; -nosave int swwm_achievement_doomboss5 = 0; -nosave int swwm_achievement_doomboss6 = 0; -nosave int swwm_achievement_doomboss7 = 0; -nosave int swwm_achievement_doomboss8 = 0; -nosave int swwm_achievement_doomboss9 = 0; -nosave int swwm_achievement_doomboss10 = 0; nosave int swwm_achievement_keen = 0; nosave int swwm_achievement_mbf = 0; +nosave int swwm_achievement_nice = 0; +nosave int swwm_achievement_onestanding = 0; nosave int swwm_achievement_par = 0; +nosave int swwm_achievement_peace = 0; nosave int swwm_achievement_trash = 0; +nosave int swwm_achievement_untouchable = 0; nosave int swwm_achievement_yeet = 0; // cross-session progress cvars +nosave int swwm_progress_allitems = 0; +nosave int swwm_progress_allkills = 0; nosave int swwm_progress_allsecrets = 0; nosave int swwm_progress_barrel = 0; nosave int swwm_progress_barrier = 0; diff --git a/filter/game-heretic/cvarinfo.hereticachievements b/filter/game-heretic/cvarinfo.hereticachievements index ae5922ac9..1627939dd 100644 --- a/filter/game-heretic/cvarinfo.hereticachievements +++ b/filter/game-heretic/cvarinfo.hereticachievements @@ -1,17 +1,21 @@ // heretic-exclusive achievements // cross-session achievement cvars (0: locked, 1: unlocked, 2: notified) +nosave int swwm_achievement_allitems = 0; +nosave int swwm_achievement_allkills = 0; nosave int swwm_achievement_allsecrets = 0; +nosave int swwm_achievement_blaze = 0; nosave int swwm_achievement_cliffyb = 0; nosave int swwm_achievement_gravity = 0; -nosave int swwm_achievement_hereticboss1 = 0; -nosave int swwm_achievement_hereticboss2 = 0; -nosave int swwm_achievement_hereticboss3 = 0; -nosave int swwm_achievement_hereticboss4 = 0; -nosave int swwm_achievement_hereticboss5 = 0; +nosave int swwm_achievement_nice = 0; +nosave int swwm_achievement_onestanding = 0; +nosave int swwm_achievement_peace = 0; nosave int swwm_achievement_sneaky = 0; nosave int swwm_achievement_tornado = 0; +nosave int swwm_achievement_untouchable = 0; // cross-session progress cvars +nosave int swwm_progress_allitems = 0; +nosave int swwm_progress_allkills = 0; nosave int swwm_progress_allsecrets = 0; nosave int swwm_progress_gravity = 0; nosave int swwm_progress_sneaky = 0; diff --git a/filter/game-hexen/cvarinfo.hexenachievements b/filter/game-hexen/cvarinfo.hexenachievements index c6af258ce..170bd8b9c 100644 --- a/filter/game-hexen/cvarinfo.hexenachievements +++ b/filter/game-hexen/cvarinfo.hexenachievements @@ -2,21 +2,9 @@ // cross-session achievement cvars (0: locked, 1: unlocked, 2: notified) nosave int swwm_achievement_gravity = 0; -nosave int swwm_achievement_hexenboss1 = 0; -nosave int swwm_achievement_hexenboss2 = 0; -nosave int swwm_achievement_hexenboss3 = 0; -nosave int swwm_achievement_hexenboss4 = 0; -nosave int swwm_achievement_hexenboss5 = 0; -nosave int swwm_achievement_hexenboss6 = 0; -nosave int swwm_achievement_hexenboss7 = 0; -nosave int swwm_achievement_hexenboss8 = 0; -nosave int swwm_achievement_hexenboss9 = 0; -nosave int swwm_achievement_hexenboss10 = 0; -nosave int swwm_achievement_hexenboss11 = 0; nosave int swwm_achievement_kancho = 0; nosave int swwm_achievement_puzzle = 0; nosave int swwm_achievement_sneaky = 0; // cross-session progress cvars nosave int swwm_progress_gravity = 0; -nosave int swwm_progress_puzzle = 0; nosave int swwm_progress_sneaky = 0; diff --git a/gldefs.funstuff b/gldefs.funstuff index 142d6025f..c1778f04f 100644 --- a/gldefs.funstuff +++ b/gldefs.funstuff @@ -10,6 +10,10 @@ HardwareShader Texture "models/PerfectlyGeneric.png" { Shader "shaders/glsl/PerfectlyGeneric.fp" } +Brightmap Texture "models/MothPlush.png" +{ + Map "models/MothPlush_bright.png" +} Brightmap Texture "models/Chancebox.png" { map "models/Chancebox_bright.png" diff --git a/gldefs.misc b/gldefs.misc index e29c3df8c..3df446f30 100644 --- a/gldefs.misc +++ b/gldefs.misc @@ -13,6 +13,16 @@ HardwareShader Texture "graphics/HUD/FuelBarS.png" Shader "shaders/glsl/Fuzz_GraySmall2.fp" Texture "noisetex" "textures/graynoise.png" } +HardwareShader Texture "graphics/HUD/HealthBarD.png" +{ + Shader "shaders/glsl/HealthBarD.fp" + Texture "noisetex" "textures/graynoise.png" +} +HardwareShader Texture "graphics/HUD/EnemyBarD.png" +{ + Shader "shaders/glsl/HealthBarD.fp" + Texture "noisetex" "textures/graynoise.png" +} HardwareShader Texture "graphics/tempbg.png" { Shader "shaders/glsl/Fuzz.fp" @@ -72,6 +82,10 @@ HardwareShader Texture "graphics/Fanart/Marisa6.jpg" { Shader "shaders/glsl/Bilinear.fp" } +HardwareShader Texture "graphics/Fanart/Marisa7.jpg" +{ + Shader "shaders/glsl/Bilinear.fp" +} HardwareShader Texture "graphics/Fanart/RedeadITA.png" { Shader "shaders/glsl/Oversample.fp" diff --git a/gldefs.pickups b/gldefs.pickups index 9b25a8287..0b7dfd17a 100644 --- a/gldefs.pickups +++ b/gldefs.pickups @@ -98,6 +98,45 @@ HardwareShader Texture "models/extra/AnomRingies.png" Shader "shaders/glsl/Mykradvo2.fp" Texture "warptex" "textures/heattex.png" } +HardwareShader Sprite "DVSPA0" +{ + Shader "shaders/glsl/Divine.fp" + Texture "snoisetex" "textures/softnoise.png" +} +HardwareShader Texture "models/DivineSprite.png" +{ + Shader "shaders/glsl/Shinemask.fp" + Texture "masktex" "models/DivineSprite_mask.png" + Texture "envtex" "models/matcap/pearlmap.png" +} +Brightmap Texture "models/DivineSprite.png" +{ + map "models/DivineSprite_mask.png" + DisableFullbright +} +HardwareShader Texture "models/DevaSigil.png" +{ + Shader "shaders/glsl/Shinemask.fp" + Texture "masktex" "models/DevaSigil_mask.png" + Texture "envtex" "models/matcap/dekamap.png" +} +Brightmap Texture "models/SafetyTether.png" +{ + map "models/SafetyTether_bright.png" + DisableFullbright +} +HardwareShader Texture "models/SafetyTether.png" +{ + Shader "shaders/glsl/Shinemask.fp" + Texture "masktex" "models/SafetyTether_mask.png" + Texture "envtex" "models/matcap/silvermap.png" +} +HardwareShader Texture "models/SafetyTether_off.png" +{ + Shader "shaders/glsl/Shinemask.fp" + Texture "masktex" "models/SafetyTether_mask.png" + Texture "envtex" "models/matcap/silvermap.png" +} PointLight ARMORNUGGETLIGHT { @@ -271,3 +310,39 @@ Object MykradvoX2 Frame "XZW1B" { light "MYKRADVOLIGHT3" } } +PointLight DIVINESLIGHT +{ + Color 0.6 0.9 1.0 + Size 90 + Attenuate 1 +} + +Object DivineSpriteX +{ + Frame "DVSP" { light "DIVINESLIGHT" } +} + +PointLight DEVASLIGHT +{ + Color 0.7 0.9 1.0 + Size 90 + Attenuate 1 + Subtractive 1 +} + +Object AngerySigilX +{ + Frame "BLPS" { light "DEVASLIGHT" } +} + +PointLight SAFETYLIGHT +{ + Color 0.2 1.0 0.3 + Size 50 + Attenuate 1 +} + +Object SafetyTether +{ + Frame "XZW1B" { light "SAFETYLIGHT" } +} diff --git a/gldefs.pp b/gldefs.pp index 2f67773de..7cf061c5b 100644 --- a/gldefs.pp +++ b/gldefs.pp @@ -70,6 +70,29 @@ HardwareShader PostProcess scene Uniform float xtrastr } +HardwareShader PostProcess scene +{ + Name "DevastationShader" + Shader "shaders/pp/Devascreen.fp" 330 + Texture BumpTex "textures/heattex.png" + Texture WarpTex1 "textures/devawarp1.png" + Texture WarpTex2 "textures/devawarp2.png" + Texture NoiseTex "textures/graynoise.png" + Uniform float timer + Uniform float xtrastr +} + +HardwareShader PostProcess scene +{ + Name "DivineShader" + Shader "shaders/pp/Diviscreen.fp" 330 + Texture BumpTex "textures/frosttex.png" + Texture WarpTex "textures/smoketex.png" + Texture NoiseTex "textures/graynoise.png" + Uniform float timer + Uniform float str +} + HardwareShader PostProcess scene { Name "Glitch" diff --git a/gldefs.shinemaps b/gldefs.shinemaps index 7e6c3fbab..e483cde52 100644 --- a/gldefs.shinemaps +++ b/gldefs.shinemaps @@ -63,3 +63,19 @@ HardwareShader Texture "models/matcap/glassmap.png" { Shader "shaders/glsl/Shinemap.fp" } +HardwareShader Texture "models/matcap/kinymap.png" +{ + Shader "shaders/glsl/Shinemap.fp" +} +HardwareShader Texture "models/matcap/nkrknmap.png" +{ + Shader "shaders/glsl/Shinemap.fp" +} +HardwareShader Texture "models/matcap/nokromap.png" +{ + Shader "shaders/glsl/Shinemap.fp" +} +HardwareShader Texture "models/matcap/pearlmap.png" +{ + Shader "shaders/glsl/Shinemap.fp" +} diff --git a/graphics/Achievements/AchievementBarrel.png b/graphics/Achievements/AchievementBarrel.png new file mode 100644 index 000000000..e2f9a3003 Binary files /dev/null and b/graphics/Achievements/AchievementBarrel.png differ diff --git a/graphics/Achievements/AchievementBaseball.png b/graphics/Achievements/AchievementBaseball.png new file mode 100644 index 000000000..3bd0a43d1 Binary files /dev/null and b/graphics/Achievements/AchievementBaseball.png differ diff --git a/graphics/Achievements/AchievementBlaze.png b/graphics/Achievements/AchievementBlaze.png new file mode 100644 index 000000000..6b43c77a2 Binary files /dev/null and b/graphics/Achievements/AchievementBlaze.png differ diff --git a/graphics/Achievements/AchievementCandy.png b/graphics/Achievements/AchievementCandy.png new file mode 100644 index 000000000..2f81bce56 Binary files /dev/null and b/graphics/Achievements/AchievementCandy.png differ diff --git a/graphics/Achievements/AchievementCheat.png b/graphics/Achievements/AchievementCheat.png new file mode 100644 index 000000000..eee41f503 Binary files /dev/null and b/graphics/Achievements/AchievementCheat.png differ diff --git a/graphics/Achievements/AchievementCrush.png b/graphics/Achievements/AchievementCrush.png new file mode 100644 index 000000000..f64d1c5a6 Binary files /dev/null and b/graphics/Achievements/AchievementCrush.png differ diff --git a/graphics/Achievements/AchievementCybully.png b/graphics/Achievements/AchievementCybully.png new file mode 100644 index 000000000..0bec60999 Binary files /dev/null and b/graphics/Achievements/AchievementCybully.png differ diff --git a/graphics/Achievements/AchievementDeadeye.png b/graphics/Achievements/AchievementDeadeye.png new file mode 100644 index 000000000..d07dd40a0 Binary files /dev/null and b/graphics/Achievements/AchievementDeadeye.png differ diff --git a/graphics/Achievements/AchievementDeva.png b/graphics/Achievements/AchievementDeva.png new file mode 100644 index 000000000..26169ca09 Binary files /dev/null and b/graphics/Achievements/AchievementDeva.png differ diff --git a/graphics/Achievements/AchievementDivine.png b/graphics/Achievements/AchievementDivine.png new file mode 100644 index 000000000..f2f63f83d Binary files /dev/null and b/graphics/Achievements/AchievementDivine.png differ diff --git a/graphics/Achievements/AchievementDoodle.png b/graphics/Achievements/AchievementDoodle.png new file mode 100644 index 000000000..03d790b85 Binary files /dev/null and b/graphics/Achievements/AchievementDoodle.png differ diff --git a/graphics/Achievements/AchievementGrenade.png b/graphics/Achievements/AchievementGrenade.png new file mode 100644 index 000000000..645a6efa1 Binary files /dev/null and b/graphics/Achievements/AchievementGrenade.png differ diff --git a/graphics/Achievements/AchievementHurry.png b/graphics/Achievements/AchievementHurry.png new file mode 100644 index 000000000..9ce74b866 Binary files /dev/null and b/graphics/Achievements/AchievementHurry.png differ diff --git a/graphics/Achievements/AchievementKancho.png b/graphics/Achievements/AchievementKancho.png new file mode 100644 index 000000000..1cf6f158c Binary files /dev/null and b/graphics/Achievements/AchievementKancho.png differ diff --git a/graphics/Achievements/AchievementKeen.png b/graphics/Achievements/AchievementKeen.png new file mode 100644 index 000000000..3c6a8bddd Binary files /dev/null and b/graphics/Achievements/AchievementKeen.png differ diff --git a/graphics/Achievements/AchievementOneHP.png b/graphics/Achievements/AchievementOneHP.png new file mode 100644 index 000000000..8076506c2 Binary files /dev/null and b/graphics/Achievements/AchievementOneHP.png differ diff --git a/graphics/Achievements/AchievementPeace.png b/graphics/Achievements/AchievementPeace.png new file mode 100644 index 000000000..cb46a37c8 Binary files /dev/null and b/graphics/Achievements/AchievementPeace.png differ diff --git a/graphics/Achievements/AchievementPuzzle.png b/graphics/Achievements/AchievementPuzzle.png new file mode 100644 index 000000000..6be08659a Binary files /dev/null and b/graphics/Achievements/AchievementPuzzle.png differ diff --git a/graphics/Achievements/AchievementSneaky.png b/graphics/Achievements/AchievementSneaky.png new file mode 100644 index 000000000..197f554bd Binary files /dev/null and b/graphics/Achievements/AchievementSneaky.png differ diff --git a/graphics/Achievements/AchievementTender.png b/graphics/Achievements/AchievementTender.png new file mode 100644 index 000000000..f2b171e99 Binary files /dev/null and b/graphics/Achievements/AchievementTender.png differ diff --git a/graphics/Achievements/AchievementTornado.png b/graphics/Achievements/AchievementTornado.png new file mode 100644 index 000000000..c744cff27 Binary files /dev/null and b/graphics/Achievements/AchievementTornado.png differ diff --git a/graphics/Achievements/AchievementTrash.png b/graphics/Achievements/AchievementTrash.png new file mode 100644 index 000000000..2a2f34535 Binary files /dev/null and b/graphics/Achievements/AchievementTrash.png differ diff --git a/graphics/Achievements/AchievementTravel.png b/graphics/Achievements/AchievementTravel.png new file mode 100644 index 000000000..d9ec8cdcf Binary files /dev/null and b/graphics/Achievements/AchievementTravel.png differ diff --git a/graphics/Achievements/AchievementUntouchable.png b/graphics/Achievements/AchievementUntouchable.png new file mode 100644 index 000000000..e21f7d639 Binary files /dev/null and b/graphics/Achievements/AchievementUntouchable.png differ diff --git a/graphics/Fanart/Marisa7.jpg b/graphics/Fanart/Marisa7.jpg new file mode 100644 index 000000000..2c8840876 Binary files /dev/null and b/graphics/Fanart/Marisa7.jpg differ diff --git a/graphics/HUD/DM/CythoAvatar.png b/graphics/HUD/DM/CythoAvatar.png new file mode 100644 index 000000000..61c9b290a Binary files /dev/null and b/graphics/HUD/DM/CythoAvatar.png differ diff --git a/graphics/HUD/DM/CythoAvatarBG.png b/graphics/HUD/DM/CythoAvatarBG.png new file mode 100644 index 000000000..b9b0edce8 Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarBG.png differ diff --git a/graphics/HUD/DM/CythoAvatarBlink0.png b/graphics/HUD/DM/CythoAvatarBlink0.png new file mode 100644 index 000000000..bbeeda21c Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarBlink0.png differ diff --git a/graphics/HUD/DM/CythoAvatarBlink1.png b/graphics/HUD/DM/CythoAvatarBlink1.png new file mode 100644 index 000000000..ad3ca50bc Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarBlink1.png differ diff --git a/graphics/HUD/DM/CythoAvatarTalk0.png b/graphics/HUD/DM/CythoAvatarTalk0.png new file mode 100644 index 000000000..24d4fe4bd Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarTalk0.png differ diff --git a/graphics/HUD/DM/CythoAvatarTalk1.png b/graphics/HUD/DM/CythoAvatarTalk1.png new file mode 100644 index 000000000..be9c4888d Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarTalk1.png differ diff --git a/graphics/HUD/DM/CythoAvatarTalk2.png b/graphics/HUD/DM/CythoAvatarTalk2.png new file mode 100644 index 000000000..034892998 Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarTalk2.png differ diff --git a/graphics/HUD/DM/CythoAvatarTalk3.png b/graphics/HUD/DM/CythoAvatarTalk3.png new file mode 100644 index 000000000..1818380db Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarTalk3.png differ diff --git a/graphics/HUD/DM/CythoAvatarTalk4.png b/graphics/HUD/DM/CythoAvatarTalk4.png new file mode 100644 index 000000000..1cac526e1 Binary files /dev/null and b/graphics/HUD/DM/CythoAvatarTalk4.png differ diff --git a/graphics/HUD/ZnvMessageBox.png b/graphics/HUD/DM/DirectMessageBox.png similarity index 100% rename from graphics/HUD/ZnvMessageBox.png rename to graphics/HUD/DM/DirectMessageBox.png diff --git a/graphics/HUD/ZnvStatic0.png b/graphics/HUD/DM/DirectMessageStatic0.png similarity index 100% rename from graphics/HUD/ZnvStatic0.png rename to graphics/HUD/DM/DirectMessageStatic0.png diff --git a/graphics/HUD/ZnvStatic1.png b/graphics/HUD/DM/DirectMessageStatic1.png similarity index 100% rename from graphics/HUD/ZnvStatic1.png rename to graphics/HUD/DM/DirectMessageStatic1.png diff --git a/graphics/HUD/ZnvStatic2.png b/graphics/HUD/DM/DirectMessageStatic2.png similarity index 100% rename from graphics/HUD/ZnvStatic2.png rename to graphics/HUD/DM/DirectMessageStatic2.png diff --git a/graphics/HUD/ZnvStatic3.png b/graphics/HUD/DM/DirectMessageStatic3.png similarity index 100% rename from graphics/HUD/ZnvStatic3.png rename to graphics/HUD/DM/DirectMessageStatic3.png diff --git a/graphics/HUD/DM/IbukiAvatar.png b/graphics/HUD/DM/IbukiAvatar.png new file mode 100644 index 000000000..fbc9c5bd4 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatar.png differ diff --git a/graphics/HUD/DM/IbukiAvatarBG.png b/graphics/HUD/DM/IbukiAvatarBG.png new file mode 100644 index 000000000..61cf7c42f Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarBG.png differ diff --git a/graphics/HUD/DM/IbukiAvatarBlink0.png b/graphics/HUD/DM/IbukiAvatarBlink0.png new file mode 100644 index 000000000..d71cb90f8 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarBlink0.png differ diff --git a/graphics/HUD/DM/IbukiAvatarBlink1.png b/graphics/HUD/DM/IbukiAvatarBlink1.png new file mode 100644 index 000000000..9a8a9b848 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarBlink1.png differ diff --git a/graphics/HUD/DM/IbukiAvatarTalk0.png b/graphics/HUD/DM/IbukiAvatarTalk0.png new file mode 100644 index 000000000..9330e3c3e Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarTalk0.png differ diff --git a/graphics/HUD/DM/IbukiAvatarTalk1.png b/graphics/HUD/DM/IbukiAvatarTalk1.png new file mode 100644 index 000000000..05ade7123 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarTalk1.png differ diff --git a/graphics/HUD/DM/IbukiAvatarTalk2.png b/graphics/HUD/DM/IbukiAvatarTalk2.png new file mode 100644 index 000000000..2708500f0 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarTalk2.png differ diff --git a/graphics/HUD/DM/IbukiAvatarTalk3.png b/graphics/HUD/DM/IbukiAvatarTalk3.png new file mode 100644 index 000000000..75a683553 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarTalk3.png differ diff --git a/graphics/HUD/DM/IbukiAvatarTalk4.png b/graphics/HUD/DM/IbukiAvatarTalk4.png new file mode 100644 index 000000000..e5a403c81 Binary files /dev/null and b/graphics/HUD/DM/IbukiAvatarTalk4.png differ diff --git a/graphics/HUD/DM/KirinAvatar.png b/graphics/HUD/DM/KirinAvatar.png new file mode 100644 index 000000000..2ed8f2ce3 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatar.png differ diff --git a/graphics/HUD/DM/KirinAvatarBG.png b/graphics/HUD/DM/KirinAvatarBG.png new file mode 100644 index 000000000..23e648315 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarBG.png differ diff --git a/graphics/HUD/DM/KirinAvatarBlink0.png b/graphics/HUD/DM/KirinAvatarBlink0.png new file mode 100644 index 000000000..37daa47de Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarBlink0.png differ diff --git a/graphics/HUD/DM/KirinAvatarBlink1.png b/graphics/HUD/DM/KirinAvatarBlink1.png new file mode 100644 index 000000000..d2b983e63 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarBlink1.png differ diff --git a/graphics/HUD/DM/KirinAvatarTalk0.png b/graphics/HUD/DM/KirinAvatarTalk0.png new file mode 100644 index 000000000..39d94a863 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarTalk0.png differ diff --git a/graphics/HUD/DM/KirinAvatarTalk1.png b/graphics/HUD/DM/KirinAvatarTalk1.png new file mode 100644 index 000000000..d67fa3bae Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarTalk1.png differ diff --git a/graphics/HUD/DM/KirinAvatarTalk2.png b/graphics/HUD/DM/KirinAvatarTalk2.png new file mode 100644 index 000000000..3d3cca42f Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarTalk2.png differ diff --git a/graphics/HUD/DM/KirinAvatarTalk3.png b/graphics/HUD/DM/KirinAvatarTalk3.png new file mode 100644 index 000000000..8d0bc4952 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarTalk3.png differ diff --git a/graphics/HUD/DM/KirinAvatarTalk4.png b/graphics/HUD/DM/KirinAvatarTalk4.png new file mode 100644 index 000000000..61cd0dbd8 Binary files /dev/null and b/graphics/HUD/DM/KirinAvatarTalk4.png differ diff --git a/graphics/HUD/DM/SayaAvatar.png b/graphics/HUD/DM/SayaAvatar.png new file mode 100644 index 000000000..1f1d1f324 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatar.png differ diff --git a/graphics/HUD/DM/SayaAvatarBG.png b/graphics/HUD/DM/SayaAvatarBG.png new file mode 100644 index 000000000..af4e1c7fa Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarBG.png differ diff --git a/graphics/HUD/DM/SayaAvatarBlink0.png b/graphics/HUD/DM/SayaAvatarBlink0.png new file mode 100644 index 000000000..98a99dbc1 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarBlink0.png differ diff --git a/graphics/HUD/DM/SayaAvatarBlink1.png b/graphics/HUD/DM/SayaAvatarBlink1.png new file mode 100644 index 000000000..5c5232562 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarBlink1.png differ diff --git a/graphics/HUD/DM/SayaAvatarTalk0.png b/graphics/HUD/DM/SayaAvatarTalk0.png new file mode 100644 index 000000000..7c7eef3b0 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarTalk0.png differ diff --git a/graphics/HUD/DM/SayaAvatarTalk1.png b/graphics/HUD/DM/SayaAvatarTalk1.png new file mode 100644 index 000000000..734416bb1 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarTalk1.png differ diff --git a/graphics/HUD/DM/SayaAvatarTalk2.png b/graphics/HUD/DM/SayaAvatarTalk2.png new file mode 100644 index 000000000..9c38980e9 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarTalk2.png differ diff --git a/graphics/HUD/DM/SayaAvatarTalk3.png b/graphics/HUD/DM/SayaAvatarTalk3.png new file mode 100644 index 000000000..9571785d2 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarTalk3.png differ diff --git a/graphics/HUD/DM/SayaAvatarTalk4.png b/graphics/HUD/DM/SayaAvatarTalk4.png new file mode 100644 index 000000000..9255ddc99 Binary files /dev/null and b/graphics/HUD/DM/SayaAvatarTalk4.png differ diff --git a/graphics/HUD/ZnvAvatar.png b/graphics/HUD/DM/ZnvAvatar.png similarity index 100% rename from graphics/HUD/ZnvAvatar.png rename to graphics/HUD/DM/ZnvAvatar.png diff --git a/graphics/HUD/ZnvAvatarBG.png b/graphics/HUD/DM/ZnvAvatarBG.png similarity index 100% rename from graphics/HUD/ZnvAvatarBG.png rename to graphics/HUD/DM/ZnvAvatarBG.png diff --git a/graphics/HUD/ZnvAvatarBlink0.png b/graphics/HUD/DM/ZnvAvatarBlink0.png similarity index 100% rename from graphics/HUD/ZnvAvatarBlink0.png rename to graphics/HUD/DM/ZnvAvatarBlink0.png diff --git a/graphics/HUD/ZnvAvatarBlink1.png b/graphics/HUD/DM/ZnvAvatarBlink1.png similarity index 100% rename from graphics/HUD/ZnvAvatarBlink1.png rename to graphics/HUD/DM/ZnvAvatarBlink1.png diff --git a/graphics/HUD/ZnvAvatarTalk0.png b/graphics/HUD/DM/ZnvAvatarTalk0.png similarity index 100% rename from graphics/HUD/ZnvAvatarTalk0.png rename to graphics/HUD/DM/ZnvAvatarTalk0.png diff --git a/graphics/HUD/ZnvAvatarTalk1.png b/graphics/HUD/DM/ZnvAvatarTalk1.png similarity index 100% rename from graphics/HUD/ZnvAvatarTalk1.png rename to graphics/HUD/DM/ZnvAvatarTalk1.png diff --git a/graphics/HUD/ZnvAvatarTalk2.png b/graphics/HUD/DM/ZnvAvatarTalk2.png similarity index 100% rename from graphics/HUD/ZnvAvatarTalk2.png rename to graphics/HUD/DM/ZnvAvatarTalk2.png diff --git a/graphics/HUD/ZnvAvatarTalk3.png b/graphics/HUD/DM/ZnvAvatarTalk3.png similarity index 100% rename from graphics/HUD/ZnvAvatarTalk3.png rename to graphics/HUD/DM/ZnvAvatarTalk3.png diff --git a/graphics/HUD/ZnvAvatarTalk4.png b/graphics/HUD/DM/ZnvAvatarTalk4.png similarity index 100% rename from graphics/HUD/ZnvAvatarTalk4.png rename to graphics/HUD/DM/ZnvAvatarTalk4.png diff --git a/graphics/HUD/EnemyBarD.png b/graphics/HUD/EnemyBarD.png new file mode 100644 index 000000000..a41939815 Binary files /dev/null and b/graphics/HUD/EnemyBarD.png differ diff --git a/graphics/HUD/HealthBarD.png b/graphics/HUD/HealthBarD.png new file mode 100644 index 000000000..a84068c4c Binary files /dev/null and b/graphics/HUD/HealthBarD.png differ diff --git a/graphics/HUD/Icons/I_Devastation.png b/graphics/HUD/Icons/I_Devastation.png index 7b43c4c2f..c25f643b6 100644 Binary files a/graphics/HUD/Icons/I_Devastation.png and b/graphics/HUD/Icons/I_Devastation.png differ diff --git a/graphics/HUD/Icons/I_Divine.png b/graphics/HUD/Icons/I_Divine.png index 7b43c4c2f..fc51f8862 100644 Binary files a/graphics/HUD/Icons/I_Divine.png and b/graphics/HUD/Icons/I_Divine.png differ diff --git a/graphics/HUD/Icons/I_Safety.png b/graphics/HUD/Icons/I_Safety.png index 7b43c4c2f..4c3ab3dbc 100644 Binary files a/graphics/HUD/Icons/I_Safety.png and b/graphics/HUD/Icons/I_Safety.png differ diff --git a/graphics/HUD/Icons/I_SafetyNo.png b/graphics/HUD/Icons/I_SafetyNo.png new file mode 100644 index 000000000..de478f1c0 Binary files /dev/null and b/graphics/HUD/Icons/I_SafetyNo.png differ diff --git a/graphics/HUD/Icons/I_SafetyOn.png b/graphics/HUD/Icons/I_SafetyOn.png new file mode 100644 index 000000000..30b1ed93c Binary files /dev/null and b/graphics/HUD/Icons/I_SafetyOn.png differ diff --git a/graphics/HUD/Icons/I_SafetyYes.png b/graphics/HUD/Icons/I_SafetyYes.png new file mode 100644 index 000000000..c4b933d1d Binary files /dev/null and b/graphics/HUD/Icons/I_SafetyYes.png differ diff --git a/language.def_base b/language.def_base index d8ac0a477..290100c51 100644 --- a/language.def_base +++ b/language.def_base @@ -59,47 +59,76 @@ T_GOLDSHELL = "Golden Shell"; T_GOLDSHELLS = "Golden Shells"; T_EVISHELL = "Eviscerator Shell"; T_EVISHELLS = "Eviscerator Shells"; +I_EVISHELLCLIP2 = "Eviscerator Duo Clip"; +I_EVISHELLCLIP3 = "Eviscerator Trio Clip"; I_EVISHELLPAK = "Eviscerator 6-Pack"; -T_HELLMISSILES = "Hellblazer Missiles"; -T_HELLCLUSTERS = "Hellblazer Crackshots"; -T_HELLBURNINATORS = "Hellblazer Ravagers"; -T_HELLNUKES = "Hellblazer Warheads"; T_HELLMISSILE = "Hellblazer Missile"; -T_HELLCLUSTER = "Hellblazer Crackshot"; -T_HELLBURNINATOR = "Hellblazer Ravager"; -T_HELLNUKE = "Hellblazer Warhead"; +T_HELLMISSILES = "Hellblazer Missiles"; +T_HELLMISSILE2 = "2 Hellblazer Missiles"; +T_HELLMISSILE3 = "3 Hellblazer Missiles"; T_HELLMISSILEMAG = "Hellblazer Missile Mag"; +T_HELLCLUSTER = "Hellblazer Crackshot"; +T_HELLCLUSTERS = "Hellblazer Crackshots"; +T_HELLCLUSTER2 = "2 Hellblazer Crackshots"; T_HELLCLUSTERMAG = "Hellblazer Crackshot Mag"; +T_HELLBURNINATOR = "Hellblazer Ravager"; +T_HELLBURNINATORS = "Hellblazer Ravagers"; T_HELLBURNINATORMAG = "Hellblazer Ravager Mag"; +T_HELLNUKE = "Hellblazer Warhead"; +T_HELLNUKES = "Hellblazer Warheads"; T_HELLNUKEMAG = "Hellblazer Warhead Mag"; T_SPARKUNIT = "Biospark Unit"; +T_SPARKUNITS = "Biospark Units"; T_XSBMAG = "1.150 XSB Magazine"; +T_XSBMAGS = "1.150 XSB Magazines"; T_FCBMAG = "1.150 FCB Magazine"; +T_FCBMAGS = "1.150 FCB Magazines"; T_XSBBULLET = "1.150 XSB Bullet"; +T_XSBBULLETS = "1.150 XSB Bullets"; T_FCBBULLET = "1.150 FCB Bullet"; +T_FCBBULLETS = "1.150 FCB Bullets"; T_CANDYMAG = "Candy Gun Magazine"; +T_CANDYMAGS = "Candy Gun Magazines"; T_CANDYBULLET = "Candy Gun Bullet"; +T_CANDYBULLETS = "Candy Gun Bullets"; T_CANDYSPARE = "Candy Gun Spare"; +T_CANDYSPARES = "Candy Gun Spares"; T_YNYKRONAMMO = "Crystal Box"; +T_YNYKRONAMMOS = "Crystal Boxes"; T_SMW05BULLET = "SMW.05 Bullet"; T_SMW05BULLETS = "SMW.05 Bullets"; T_SHEENBULLET = "14.5x114mm MT Bullet"; T_SHEENBULLETS = "14.5x114mm MT Bullets"; T_QUADAMMO = "Quadravol Cell"; +T_QUADAMMOS = "Quadravol Cells"; T_DARKAMMO = "Blackfire Canister"; +T_DARKAMMOS = "Blackfire Canisters"; T_EMPCORE = "Dysedum Rod"; +T_EMPCORES = "Dysedum Rods"; T_RAYBOLT = "Ray-Khom Bolt"; +T_RAYBOLTS = "Ray-Khom Bolts"; T_RAYAMMO = "Ray-Khom Magazine"; +T_RAYAMMOS = "Ray-Khom Magazines"; T_RAYBATTERY = "Ray-Khom Battery"; +T_RAYBATTERYS = "Ray-Khom Batteries"; T_GRANDSPEAR = "Grand Lance Spear"; +T_GRANDSPEARS = "Grand Lance Spears"; T_GRANDAMMO = "Grand Lance Magazine"; -T_SPARKBAMMO = "Kinylum Cell"; -T_SPARKRAMMO = "Nokron Cell"; +T_GRANDAMMOS = "Grand Lance Magazines"; +T_SPARKBCELL = "Kinylum Cell"; +T_SPARKBCELLS = "Kinylum Cells"; +T_SPARKRCELL = "Nokron Cell"; +T_SPARKRCELLS = "Nokron Cells"; T_MRROUND = "Mortal Round"; +T_MRROUNDS = "Mortal Rounds"; T_MRAMMO = "Mortal Magazine"; +T_MRAMMOS = "Mortal Magazines"; T_MRGRENADE = "Mortal Grenade"; +T_MRGRENADES = "Mortal Grenades"; T_ULTIMATEPOD = "Rafan-Kos Pod"; +T_ULTIMATEPODS = "Rafan-Kos Pods"; T_ULTIMATEAMMO = "Rafan-Kos Magazine"; +T_ULTIMATEAMMOS = "Rafan-Kos Magazines"; T_BLASTSUIT = "Blast Suit"; T_EMBIGGENER = "Hammerspace Embiggener"; T_BULKEMBIGGENER = "Bulk Hammerspace Embiggener"; @@ -644,6 +673,7 @@ D_FROGGY1 = "\cjA small price to pay...\c-"; D_FROGGY2 = "\cj... for \cdFroggy Chair\cj.\c-"; D_BARRIER = "The Elemental Coating wore off."; D_DEVASTATION = "The Sigil's power is no more."; +D_SPRITE = "The Divine Sprite has breathed its last."; D_TETHERFAIL = "The Safety Tether link was obstructed."; D_MASHIRO = "\cjShe knows where you are...\c-"; SWWM_YNYKRONREADY = "Ynykron Artifact ready for firing."; @@ -653,7 +683,7 @@ SWWM_TITLEMODBY = "a mod by \cxMarisa Kirisame"; SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" "A wondrous GZDoom gameplay mod by Marisa Kirisame of UnSX Team\n" "Lovingly designed 3D models with hand-painted 256-color dithered textures\n" -"Over 50k lines of ZScript, and still counting (god help me)\n" +"Almost 60k lines of ZScript, and still counting (god help me)\n" "The deepest lore this side of the Doom Modiverse\n" "And much much more!\n" "Greetz to Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney and last but not least my beloved pet dragon\n" @@ -687,7 +717,341 @@ SWWM_DMSPREAD = "Spread:"; SWWM_PLACE1 = "1st"; SWWM_PLACE2 = "2nd"; SWWM_PLACE3 = "3rd"; -// NOTE: do not localize these +// weapon tooltips +SWWM_TTNOTE = "Note: Weapon tooltips can be deactivated in SWWM GZ Options."; +TT_PUSHER = +"\cfFire:\c- Drill.\n" +"\cfAltfire:\c- Charged attack."; +TT_DEEPIMPACT = +"\cfFire:\c- Air push.\n" +"\cfAltfire:\c- Charged shot.\n" +"\cfReload:\c- Pump air."; +TT_EXPLODIUM = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Throw magazine.\n" +"\cfReload:\c- Reload weapon."; +TT_EXPLODIUM2 = +"\cfFire:\c- Shoot right weapon.\n" +"\cfAltfire:\c- Shoot left weapon.\n" +"\cfReload:\c- Reload weapon(s)."; +TT_SPREADGUN = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Select ammo.\n" +"\cfReload:\c- Reload / switch ammo.\n" +"\cfAltfire+Fire:\c- Unload ammo."; +TT_WALLBUSTER = +"\cfFire:\c- Shoot one barrel.\n" +"\cfAltfire:\c- Shoot one cylinder.\n" +"\cfZoom:\c- Shoot everything.\n" +"\cfReload:\c- Reload weapon."; +TT_EVISCERATOR = +"\cfFire:\c- Shrapnel shot.\n" +"\cfAltfire:\c- Grenade shot.\n" +"\cfZoom:\c- Toggle spread."; +TT_HELLBLAZER = +"\cfFire:\c- Load rockets, release to shoot.\n" +"\cfAltfire:\c- Load grenades, release to shoot.\n" +"\cfZoom:\c- Select ammo.\n" +"\cfReload:\c- Reload / switch ammo.\n" +"\cx(More controls in library)\c-"; +TT_SPARKSTER = +"\cfFire:\c- Orb shot.\n" +"\cfAltfire:\c- Beam shot.\n" +"\cfZoom:\c- Seeker shot.\n" +"\cfReload:\c- Reload / double load."; +TT_SILVERBULLET = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Select ammo.\n" +"\cfZoom:\c- Use scope.\n" +"\cfReload:\c- Reload / switch ammo.\n" +"\cfAltfire+Fire:\c- Manual bolt cycle."; +TT_CANDYGUN = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Throw magazine.\n" +"\cfReload:\c- Reload weapon.\n" +"\cfAltfire+Fire:\c- Throw gun."; +TT_YNYKRON = +"\cfFire:\c- Charge / shoot weapon.\n" +"\cfAltfire:\c- Flip magazine.\n" +"\cfReload:\c- Reload weapon / cancel charge."; +TT_HAMMER = +"\cfFire:\c- Side swings.\n" +"\cfAltfire:\c- Overhead swing.\n" +"\cfZoom:\c- Spin attack."; +TT_PLASMABLAST = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Charged shot.\n" +"\cfReload:\c- Reload weapon."; +TT_PLASMABLAST2 = +"\cfFire:\c- Shoot right weapon.\n" +"\cfAltfire:\c- Shoot left weapon.\n" +"\cfReload:\c- Reload weapon(s)."; +TT_PUNTZERBETA = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Quickshot mode.\n" +"\cfReload:\c- Reload weapon."; +TT_PUNTZERGAMMA = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Cycle fire modes.\n" +"\cfReload:\c- Reload weapon."; +TT_SHEENHMG = +"\cfFire:\c- Slow fire.\n" +"\cfAltfire:\c- Moderate fire.\n" +"\cfZoom:\c- Fast fire."; +TT_QUADRAVOL = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Pump weapon.\n" +"\cfZoom:\c- Toggle spread mode.\n" +"\cfReload:\c- Load cells.\n" +"\cfFire+Altfire:\c- Hold to slamfire."; +TT_BLACKFIRE = +"\cfFire:\c- Freeze thrower.\n" +"\cfAltfire:\c- Icicle shot.\n" +"\cfReload:\c- Reload canister(s)."; +TT_EMPCARBINE = +"\cfFire:\c- Hold to ionize, release to shoot.\n" +"\cfAltfire:\c- Multi-target ionization.\n" +"\cfZoom:\c- Use scope.\n" +"\cfReload:\c- Load rods."; +TT_RAYKHOM = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Lightning attack.\n" +"\cfReload:\c- Reload weapon.\n" +"\cfZoom:\c- Reload battery."; +TT_GRANDLANCE = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Charged shot.\n" +"\cfReload:\c- Reload weapon.\n" +"\cfZoom:\c- Reload battery."; +TT_FISTGUN = +"\cfFire:\c- Throw punch.\n" +"\cfAltfire:\c- Wide slap."; +TT_NEWSPARKSTER = +"\cfFire:\c- Kinylum shot.\n" +"\cfAltfire:\c- Nokron shot.\n" +"\cfFire+Altfire:\c- Combined shot.\n" +"\cfReload:\c- Load Kinylum.\n" +"\cfZoom:\c- Load Nokron."; +TT_MORTALRIFLE = +"\cfFire:\c- Shoot weapon.\n" +"\cfAltfire:\c- Shoot grenade.\n" +"\cfZoom:\c- Cycle fire modes.\n" +"\cfReload:\c- Reload weapon."; +TT_RAFANKOS = +"\cfFire:\c- Single beam.\n" +"\cfAltfire:\c- Multi beam.\n" +"\cfReload:\c- Reload weapon."; +// "Direct messages" +SWWM_INCOMINGMSG = "Incoming direct message from %s..."; +// E1M8 +SWWM_SAYAPHOBOS1 = "I kinda forgot to mention this in the briefing but... There's a bit of an issue here, \cdDemo-chan\c-."; +SWWM_SAYAPHOBOS2 = "The gate to Deimos is guarded by two nasty pieces of work, and you're gonna have to get rid of them."; +SWWM_SAYAPHOBOS3 = "They're supposedly the \"replacements\" for whatever the other guy killed to go the same route."; +SWWM_SAYAPHOBOS4 = "Well, knowing you, I'm sure they won't be a problem. Anyway, that's everything for now. Good luck."; +// E2M8 +SWWM_SAYADEIMOS1 = "Be careful, \cdDemo\c-, I've got a bad feeling about this."; +SWWM_SAYADEIMOS2 = "There's a large energy reading coming from outside, and I mean LARGE."; +SWWM_SAYADEIMOS3 = "On top of that I can't seem to get in touch with \cvCytho-sama\c- for info on where to go."; +SWWM_SAYADEIMOS4 = "Well, you're on your own here, I guess. If you can't figure a way out, I'll be on stand-by for a recall."; +// E3M8 +SWWM_SAYADIS1 = "And here we are... The very center of it all."; +SWWM_SAYADIS2 = "This is where the first portal to Earth was opened, and you're gonna use it to get back."; +SWWM_SAYADIS3 = "And of course, the place is guarded, why wouldn't it be. You've got to kill stuff, as usual."; +SWWM_SAYADIS4 = "Let's just hope it drops you off at the right place. Keep going, \cdDemo-chan\c-, you're almost there."; +// E4M8 +SWWM_SAYATHY1 = "Alright, good news, for once. There's a portal nearby, and I'm sure it'll take you to the right spot."; +SWWM_SAYATHY2 = "But, of course, you gotta kick some ass to get there. I mean, nothing in life is easy, isn't it?"; +SWWM_SAYATHY3 = "I'll be ready to debrief you later on your ACTUAL mission."; +SWWM_SAYATHY4 = "Yeah, still have no clue why this massive detour happened. But I'll get to the bottom of it, trust me."; +// E5M8 +SWWM_CYTHONAME = "\cvArchduke Cytho Valathor\c-"; +SWWM_CYTHOSIGIL1 = "\cdDemo\c-, this is \cvCytho\c-. I've got an important message to relay from the royal family."; +SWWM_CYTHOSIGIL2 = "Prince Baphomet is satisfied with your efforts, and has opened a gate for you to return to Earth."; +SWWM_CYTHOSIGIL3 = "Unfortunately, the gate is guarded by high level military demons, two of them, in fact."; +SWWM_CYTHOSIGIL4 = "... Although, knowing you, I'm certain this will not be an issue, correct?"; +// MAP07 +SWWM_SAYADIMPLE1 = "Hold up right there, \cdDemo-chan\c-. You're about to step in on dangerous territory."; +SWWM_SAYADIMPLE2 = "This is the first line of defense that's been set up around the inner starport, and it's a bitch."; +SWWM_SAYADIMPLE3 = "Hopefully, you've got plenty of goodies on ya to smash through... You do, right?"; +SWWM_SAYADIMPLE4 = "Well, we've already seen what you've been able to do so far, so I'm sure you'll be fine."; +SWWM_SAYADIMPLE5 = "Good luck!"; +// MAP30 +SWWM_SAYAIOS1 = "\cdDemo-chan\c-... This is it, you're about to face the Psychic Commander, the leader of Hell's army."; +SWWM_SAYAIOS2 = "I don't know if... ... W-well, I shouldn't be worrying about that at this point."; +SWWM_SAYAIOS3 = "You can do it, you can put an end to all of this. You're... My... O-our hero."; +SWWM_SAYAIOS4 = "Oh god I can't do this, my heart rate is spiking..."; +SWWM_SAYAIOS5 = "... \cdD-Demo-chan\c-... Please save the world and... Please return home."; +// MAP30 with Rampancy +SWWM_SAYARAMPANCY1 = "\cdDemo-chan\c-, that thing's bluffing, trust me. I saw those failed login attempts."; +SWWM_SAYARAMPANCY2 = "I'm sure it's going to try pulling some cliched bullshit to \"turn you to its side\" or whatever."; +SWWM_SAYARAMPANCY3 = "What a joke. Whatever it tries to say, don't listen to it. It's all bullshit and lies."; +SWWM_SAYARAMPANCY4 = "Now, go kick some robotic ass, my brave \cdDemolitionist\c-. We're all counting on you over here."; +// LEVEL08 +SWWM_CYTHONERVE1 = "I haven't been able to contact \cgSaya\c-, I assume she must be asleep, since it's so late over there in Japan."; +SWWM_CYTHONERVE2 = "Many other groups have already been suppressed worldwide, their numbers are quickly waning."; +SWWM_CYTHONERVE3 = "You, however, are up against a cybernetic lieutenant known as the \"Last Tyrant\". This will be tough."; +SWWM_CYTHONERVE4 = "Nevertheless... You are the hero \cdDemolitionist\c-, and you are going to teach these vile fiends a lesson."; +SWWM_CYTHONERVE5 = "Extinguish the flames of demonic corruption that tarnish this land.\nWe the Kuriste believe in you."; +// Eviternity MAP30 +SWWM_SAYAEVIA1 = "Psch... Look at this place. This dude couldn't be more of a pretentious show-off even if he tried."; +SWWM_SAYAEVIA2 = "However \"angelic\" he may look, he's just some dude in pretty armor, so you can kick his ass."; +SWWM_SAYAEVIA3 = "This whole place, though... Damn, I sure hope you've taken a lot of high res shots like I told you."; +SWWM_SAYAEVIA4 = "I'm gonna go grab some popcorn now. This is gonna be an epic battle for sure, kihihihihi..."; +SWWM_SAYAEVIB1 = "What? This is some fucking videogame bullshit right there. You're telling me the guy has TWO HEALTHBARS???"; +SWWM_SAYAEVIB2 = "Bullshit, fucking bullshit! Absolute trash garbage bullshit! Kill his ass, \cdDemo-chan\c-!"; +// Heretic E1M8 +SWWM_SAYAMAW1 = "Here we are, in \"Hell's Maw\"."; +SWWM_SAYAMAW2 = "According to the Sidhe this houses the portal that connects to the demons' realm."; +SWWM_SAYAMAW3 = "I think it's gonna be pretty interesting to visit another universe's equivalent of hell, yeah."; +SWWM_SAYAMAW4 = "... And of course, it's going to be even more interesting to blow shit up in it, too, right?"; +SWWM_SAYAMAW5 = "Just... Be on the lookout for whatever it is that's guarding the place."; +// Heretic E2M8 +SWWM_SAYAMASTERS1 = "OK, so... We're one step closer to that serpent rider's home turf. But there's a problem."; +SWWM_SAYAMASTERS2 = "Specifically, several problems. Big, bulky, muscular problems."; +SWWM_SAYAMASTERS3 = "We're talking BIG MINOTAURS with BIG HAMMERS here."; +SWWM_SAYAMASTERS4 = "I don't know about you, but I'm already hearing the Pillar Men theme in my head."; +SWWM_SAYAMASTERS5 = "Go get them, \cdDemo Demostar\c-... ... ... OK maybe that's a terrible pun, forget about it."; +// Heretic E3M8 +SWWM_SAYADSPARIL1 = "This is it, \cdDemo-chan\c-. You're about to face that stupid-ass wizard."; +SWWM_SAYADSPARIL2 = "You're gonna save another world, and all in record time. You're on a roll!"; +SWWM_SAYADSPARIL3 = "... Oh, and remember, there's a surprise waiting for you at home. Oh, you're so gonna love it."; +SWWM_SAYADSPARIL4 = "Splgslshglgh"; +SWWM_SAYADSPARIL5 = "Oh shit that got picked up by the voice recognition? Oops..."; +// Heretic E4M8 +SWWM_SAYAHEADS1 = "Geez, I'm getting impatient with all this stuff. I hope this really takes you back home."; +SWWM_SAYAHEADS2 = "And if not, well, more time for me to refine this \"present\" that I'm going to give ya."; +SWWM_SAYAHEADS3 = "Thanks to this, I've managed to improve its potency even further. This is going to be fun."; +SWWM_SAYAHEADS4 = "I seriously can't wait to try it, and I'm sure you're also dying to know..."; +SWWM_SAYAHEADS5 = "Smite thy foes and come claim thy prize, o \cdDemolitionist\c-."; +SWWM_SAYAHEADS6 = "... I seriously just fucking said that..."; +// Heretic E5M8 +SWWM_SAYABULLS1 = "And it still keeps going, oh my god..."; +SWWM_SAYABULLS2 = "It's like you're getting thrown around random realms. Look, I'm starting to get pissed."; +SWWM_SAYABULLS3 = "I'm so pissed in fact that, if the next portal doesn't immediately send you back to Parthoris, I'll just..."; +SWWM_SAYABULLS4 = "Yeah..."; +SWWM_SAYABULLS5 = "I NEED you to come back home, \cdDemo-chan\c-. I desperately need you here to test this."; +// Seven Portals +SWWM_SAYAGREETA1 = "There it is, \cdDemo-chan\c-. That's your target, that big stinky ugly monster. That's Korax."; +SWWM_SAYAGREETA2 = "... By the way, did you catch the guy's scent? It's bad, isn't it?"; +SWWM_SAYAGREETA3 = "God, imagine the smell in person... Just thinking about it is making my stomach turn."; +SWWM_SAYAGREETB1 = "Coward... Taunting us from afar..."; // Kirin reply +SWWM_SAYAGREETC1 = "Yeah, sneaky and stinky, telltale signs of an ugly bastard."; +SWWM_SAYAGREETD1 = "Ugly... Bastard?"; // Kirin reply +SWWM_SAYAGREETE1 = "I'd rather not explain, \cxKirin-kun\c-. You'd be very disappointed in all of humankind."; +SWWM_SAYAGREETF1 = "That's certainly not reassuring to hear..."; // Kirin reply +// Shadow Wood +SWWM_SAYABLOODA1 = "I don't know how this dude can even smell anything other than that rancid old dog fart stench he wafts."; +SWWM_SAYABLOODA2 = "Like seriously, jesus fucking christ..."; +SWWM_SAYABLOODB1 = "That ugly bastard needs to take a bath."; // Ibuki reply +SWWM_SAYABLOODC1 = "Ugly bastard? What's this now, some lame-ass doujin?"; +SWWM_SAYABLOODD1 = "Heh, nice one, \cgSayacchi\c-."; // Ibuki reply +// Hypostyle +SWWM_SAYAHYPO1 = "Here we are, after all that roaming around. Whatever lies here, we gotta slay it to catch the next portal."; +SWWM_SAYAHYPO2 = "I sure hope it's not a fucking dragon. That'd be the most cheap-ass generic boss ever."; +SWWM_SAYAHYPO3 = "Uh... I totally jinxed it, didn't I? I bet I did. Yeah, I bet it's a fucking dragon."; +SWWM_SAYAHYPO4 = "I bet THAT GUY is going to rise from the grave and fucking sell me his damn game for the thousandth time."; +// Heresiarch's Seminary +SWWM_KIRINWORSHIPA1 = "Pathetic, disgusting creature...\nWho would ever think of worshipping a foul beast such as yourself?"; +SWWM_KIRINWORSHIPB1 = "The only thing I'd worship is that juicy cock of yours, \cxKirin-kun\c-~"; // Saya reply +SWWM_KIRINWORSHIPC1 = "PFFFFFFFFFFFFFF"; +SWWM_KIRINWORSHIPD1 = "Guh! \cxKiriiiiin\c-! You got cola all over me! God damn it you spit as hard as you cum!"; // Saya reply +SWWM_KIRINWORSHIPD2 = "O-oh... Wait, this thing's still on. Shit... \cdDemo-chan\c- just read all of that."; +// Castle of Grief +SWWM_SAYAGAMEA1 = "Wow, look at fucking mister chessmaster over here... Fuck you!"; +SWWM_SAYAGAMEA2 = "This guy is a fucking idiot and he's pissing me off even more. I so want to watch you beat his sorry ass..."; +SWWM_SAYAGAMEB1 = "Chess nerd..."; // Ibuki +SWWM_SAYAGAMEC1 = "I bet he was in the chess club."; +// Necropolis +SWWM_SAYAMASTERSA1 = "Masters, masters... Whose masters? Awaken my masters? Well, whatever, I don't care what he says."; +SWWM_SAYAMASTERSA2 = "I so want you to kill this dude..."; +SWWM_SAYAMASTERSB1 = "Are you strong enough to face the fact you SMELL?"; // Ibuki reply +SWWM_SAYAMASTERSC1 = "I showered this morning, \crIbuki\c-."; +SWWM_SAYAMASTERSD1 = "I meant the stinky boy over there. You smell nice."; // Ibuki reply +SWWM_SAYAMASTERSE1 = "\cgSayacchi\c- definitely has a pleasant scent to her."; // Kirin reply +SWWM_SAYAMASTERSF1 = "Guhuhuhu... Thanks."; +// Zedek +SWWM_SAYAFIGHTER1 = "This is where Zedek lies, the fighty boy. He probably thinks he's strong, but he hasn't met you."; +SWWM_SAYAFIGHTER2 = "Do watch out for any traps, though. I bet there's some nasty shit here."; +// Traductus +SWWM_SAYACLERICA1 = "If there's one thing I've learned from videogames is that clerics are the lowest trash."; +SWWM_SAYACLERICA2 = "That's everything I have to say."; +SWWM_SAYACLERICB1 = "I have never encountered a single cleric who hasn't attempted to assassinate me."; // Kirin reply +SWWM_SAYACLERICC1 = "Oh yeah, the people from the Sacrosanct Empire, right? Totally forgot about those."; +SWWM_SAYACLERICC2 = "Clerics fucking suck..."; +// Menelkir +SWWM_SAYAMAGE1 = "Menelkir's lair, huh... ... Oh god, don't tell \cxKirin-kun\c-, there's puzzles here."; +SWWM_SAYAMAGE2 = "Yeah, he's more than tired of stuff like this. And apparently now we're doing the picture matching kind."; +SWWM_SAYAMAGE3 = "Well, at least those are actual puzzles, and not whatever the fuck the other stuff was."; +SWWM_SAYAMAGE4 = "Even if they're... You know... The really lame and piss-easy kind."; +// Dark Crucible +SWWM_SAYAKORAXA1 = "This is it, \cdDemo\c-. The big stinky ugly bastard is waiting."; +SWWM_SAYAKORAXB1 = "At last, that vile schemer's evil reign shall end."; // Kirin reply +SWWM_SAYAKORAXC1 = "Time for him to take a fucking bath. After you rearrange his knees, of course."; // Ibuki reply +SWWM_SAYAKORAXD1 = "Even though \cvMeido\c- isn't watching, I can tell you the four of us are cheering you on."; +SWWM_SAYAKORAXE1 = "Fight on, \cdDemo-chan\c-. You can do it, we believe in you."; // Kirin reply +// Blight +SWWM_SAYABLIGHTA1 = "Hey, \cdDemo-chan\c-, remember puzzles?"; +SWWM_SAYABLIGHTB1 = "Nnnnngh..."; // Kirin reply +SWWM_SAYABLIGHTC1 = "I think \cxKirin\c- just heard me. Well... You know what to do."; +SWWM_SAYABLIGHTC2 = "I can tell this is going to be yet more bullshit, so be prepared for anything."; +// Constable's Gate +SWWM_SAYACONSTABLEA1 = "Castles and shit... It just keeps going. I said it in the briefing, anyway... So you know..."; +SWWM_SAYACONSTABLEA2 = "Please keep on exploding things. \cvMeido-chan\c- made some snacks, so we've got that at least."; +SWWM_SAYACONSTABLEB1 = "She really is so thoughtful, that girl..."; // Ibuki reply +SWWM_SAYACONSTABLEC1 = "Even though you can hear her curse everything under her breath about what's happening in there."; +SWWM_SAYACONSTABLED1 = "Yeah, that's our \cvMeido\c- alright."; // Ibuki reply +// Nave +SWWM_SAYANAVEA1 = "I want to borrow the reality bending powers of the \ctMishe\c- to destroy this entire world."; +SWWM_SAYANAVEA2 = "I'm seriously pissed, we all are pissed. Hell, even \cxKirin\c- is upset, and we can't calm him down anymore."; +SWWM_SAYANAVEB1 = "It's kind of cute and worrying at the same time."; // Ibuki reply +SWWM_SAYANAVEC1 = "NNNNNNNNGGGGGHHHHHHHH!"; // Kirin reply +SWWM_SAYANAVED1 = "\cxKirin-kun\c-, you're going to suffocate if you keep screaming into the pillow like that."; +SWWM_SAYANAVEE1 = "Maybe that's what he wants, \cgSaya\c-.\nHe seeks the sweet release of death to find inner peace."; // Ibuki +SWWM_SAYANAVEF1 = "If he wasn't immortal that would be an extremely fucked up thing to say, \crIbuki\c-."; +// Dark Citadel +SWWM_SAYADEATHKINGS1 = "I'm so pissed I could punch a hole through reality to tell these fucking Deathkings to fuck off."; +// Kirin's Thrilling Commentary on Puzzles™ +// first puzzle switch on Seven Portals +SWWM_KIRINPUZZLEA1 = "A peculiar contraption... Allegedly it cites to be part of a larger whole, calling itself a \"puzzle\"."; +SWWM_KIRINPUZZLEA2 = "\cgSayacchi\c- did mention you'd be coming across these. That's most certainly intriguing..."; +// second puzzle switch on Seven Portals +SWWM_KIRINPUZZLEB1 = "Another one... Interesting..."; +// third puzzle switch on Seven Portals +SWWM_KIRINPUZZLEC1 = "I fail to see now what makes this exactly a \"puzzle\". This is no more than a switch hunt."; +SWWM_KIRINPUZZLEC2 = "Hardly a challenge to one's intellect, wouldn't you agree, \cdDemo-chan\c-?"; +// first puzzle switch on Shadow Wood +SWWM_KIRINPUZZLED1 = "It does seem that these \"puzzle switches\" simply keep on showing up wherever you go."; +SWWM_KIRINPUZZLED2 = "I'm sure you are as tired as I am of them."; +// fourth puzzle switch on Shadow Wood +SWWM_KIRINPUZZLEE1 = "These so-called \"puzzles\"... They're an insult to our intelligence."; +SWWM_KIRINPUZZLEE2 = "... I hope I'm not sending too many of these messages."; +// first puzzle switch on Heresiarch's Seminary +SWWM_KIRINPUZZLEF1 = "When will it end? Just how many fractions of \"puzzles\" are we to solve???"; +SWWM_KIRINPUZZLEF2 = "Is this how that sayzha axhkhashaar dares to mock us? With these tiresome games?"; +SWWM_KIRINPUZZLEF3 = "They... Nnngh... Kheza sakharei!"; +SWWM_KIRINPUZZLEG1 = "\cxKirin-kun\c-, I think you're getting a bit too worked up about this."; // Saya reply +SWWM_KIRINPUZZLEH1 = "Yes... I... I'll just lie down for a while, s-sorry..."; +SWWM_KIRINPUZZLEI1 = "... Poor guy. I do agree with him, though... This shit really gets on your nerves, doesn't it?"; // Saya reply +SWWM_KIRINPUZZLEI2 = "Well... I'm gonna go give \cxKirin-kun\c- some TLC now. Don't worry, he'll be fine. He's in good hands."; +// first puzzle switch on Blight +SWWM_KIRINPUZZLEJ1 = "We can't escape, can we? These \"puzzles\" continue to haunt us even now..."; +SWWM_KIRINPUZZLEJ2 = "This accursed land... Plagued by these vile contraptions... I shall never set foot in it. Mark my words."; +// last puzzle switch on Blight +SWWM_KIRINPUZZLEK1 = "Please... Make it stop..."; +SWWM_KIRINPUZZLEL1 = "\cxKirin-kun\c-, hey... It's alright. Here... Drink up, it'll help you relax.\c-"; // Ibuki reply +SWWM_KIRINPUZZLEM1 = "Gulp... Gulp... Gulp..."; +SWWM_KIRINPUZZLEN1 = "Man, look at him go... Drinking it all up like a champ."; // Saya reply +SWWM_KIRINPUZZLEO1 = "You know how it is... Once they find a breast to suckle on, all their worries fade away..."; // Ibuki reply +SWWM_KIRINPUZZLEP1 = "You know \cdDemo-chan\c- can read what we're saying, right?"; // Saya reply +SWWM_KIRINPUZZLEQ1 = "Oh, I'm sure they'd be more than happy to have their turn once the mission's over, hm?"; // Ibuki reply +// first puzzle switch on Constable's Gate +SWWM_KIRINPUZZLER1 = "Let this be the last of these \"puzzles\" that we may encounter..."; +SWWM_KIRINPUZZLER2 = "Urp..."; +SWWM_KIRINPUZZLER3 = "My apologies."; +SWWM_KIRINPUZZLES1 = "That was some good milk, wasn't it?"; // Saya reply +SWWM_KIRINPUZZLET1 = "Certainly... I am grateful for \crIbuki\c-'s blessing."; +SWWM_KIRINPUZZLEU1 = "Making her able to lactate at will is a blessing, yeah. I'm sure \cdDemo\c- agrees too."; // Saya reply +// super secret cheats SWWM_ZNVTXT1 = "\cdDemolitionist\c-, it is me, \chZanaveth The Corruptor\c-. I have been witness of the act you have now acted, yes."; SWWM_ZNVTXT2 = "It is \cf%d\c- years since... and those magic words, I can see them again. Much impressed, very much impressed."; SWWM_ZNVTXT3 = "So, you can do the thing... As have the \ctMishe\c- also taught to myself. This is a nonexpected surprise, yes."; @@ -770,7 +1134,7 @@ SWWM_NEWMISSION = "Mission briefing has been updated."; SWWM_CHEEVO = "\cxAchievement unlocked: \cf%s\c-"; SWWM_CHEEVOREM = "\cx%s \cxunlocked an achievement: \cf%s\c-"; // intermission tips -SWWM_NINTERTIP = "140"; +SWWM_NINTERTIP = "150"; SWWM_INTERTIP = "Tip #%d:"; SWWM_INTERTIP1 = "The Demolitionist is immune to drowning, poison and even fall damage (excluding instant kill pits)."; SWWM_INTERTIP2 = "The Explodium Gun's altfire has an explosive yield proportional to the bullets left in the mag."; @@ -912,9 +1276,19 @@ SWWM_INTERTIP137 = "The Mortal Rifle (\"Mister\" for short) was devised as a pot SWWM_INTERTIP138 = "The Rafan-Kos is truly an Ultimate Weapon, as its name implies."; SWWM_INTERTIP139 = "It's said that the Hand of Divine bears only a minuscule fraction of its original creator's power. Guy must pack one hell of a wallop, then."; SWWM_INTERTIP140 = "The Demolitionist's chassis carries a faint lime scent."; +SWWM_INTERTIP141 = "\"In the future, everything is Chrome.\"\n\nNever has a line from a children's cartoon rung more true after the inevitable rise of the web-app supremacy."; +SWWM_INTERTIP142 = "This mod is in constant development. Remember to report any bugs you may find."; +SWWM_INTERTIP143 = "If you don't know how to use an item or weapon, remember that you can check the Demolitionist Menu at any time to look up information on it once you pick it up for the first time."; +SWWM_INTERTIP144 = "Remember to stay hydrated."; +SWWM_INTERTIP145 = "Most weapons are explosive, so try not to hurt yourself with them."; +SWWM_INTERTIP146 = "Writing these tips really puts a lot of strain on me."; +SWWM_INTERTIP147 = "Help! I am trapped in a tip factory!"; +SWWM_INTERTIP148 = "The Devastation Sigil and the Ragekit can actually be combined. You know, if you want to kill Cyberdemons with a single punch. Really makes you feel like a certain caped bald man."; +SWWM_INTERTIP149 = "Always take breaks during long play sessions. You'll play better and bear less stress."; +SWWM_INTERTIP150 = "This is the 150th tip. I can't believe I've written so many of them."; // intermission fanart SWWM_FANART = "Art: "; -SWWM_NFANART = "12"; +SWWM_NFANART = "13"; SWWM_FANART1 = "S20TBL.jpg;Substance20 (@S20_TBL)"; SWWM_FANART2 = "CaptainJ.png;Captain J (@Jho7835)"; SWWM_FANART3 = "RedeadITA.png;Redead-ITA"; @@ -927,11 +1301,12 @@ SWWM_FANART9 = "Marisa3.jpg"; SWWM_FANART10 = "Marisa4.jpg"; SWWM_FANART11 = "Marisa5.jpg"; SWWM_FANART12 = "Marisa6.jpg"; +SWWM_FANART13 = "Marisa7.jpg"; // achievements SWWM_ACHIEVEMENT_ACID_TAG = "Fizzy Goodness"; SWWM_ACHIEVEMENT_ACID_TXT = "Melt %d enemies with Telebrium Flechettes"; SWWM_ACHIEVEMENT_ALLCOLL_TAG = "The Full Set"; -SWWM_ACHIEVEMENT_ALLCOLL_TXT = "Obtain all collectibles in a single session"; +SWWM_ACHIEVEMENT_ALLCOLL_TXT = "Obtain all collectibles in a single save"; SWWM_ACHIEVEMENT_ALLITEMS_TAG = "Collector"; SWWM_ACHIEVEMENT_ALLITEMS_TXT = "Obtain 100%% items in %d maps"; SWWM_ACHIEVEMENT_ALLKILLS_TAG = "Pest Control"; @@ -950,6 +1325,8 @@ SWWM_ACHIEVEMENT_BARRIER_TAG = "Green Filter"; SWWM_ACHIEVEMENT_BARRIER_TXT = "Use %d Elemental Barriers"; SWWM_ACHIEVEMENT_BASEBALL_TAG = "Oh That's a Baseball!"; SWWM_ACHIEVEMENT_BASEBALL_TXT = "Perfect parry a Lost Soul with the Silver Bullet"; +SWWM_ACHIEVEMENT_BLAZE_TAG = "Blazing It"; +SWWM_ACHIEVEMENT_BLAZE_TXT = "Beat a map in 4 minutes and 20 seconds"; SWWM_ACHIEVEMENT_BONK_TAG = "Shock Resistant"; SWWM_ACHIEVEMENT_BONK_TXT = "Bump into stuff %d times"; SWWM_ACHIEVEMENT_BOSSDASH_TAG = "Headstrong"; @@ -981,7 +1358,7 @@ SWWM_ACHIEVEMENT_CUM_TXT = "Melt a grand total of %d enemies with the Rafan-Kos" SWWM_ACHIEVEMENT_DAB_TAG = "HAHA DAB"; SWWM_ACHIEVEMENT_DAB_TXT = "Gib %d enemies with the Itamex Hammer"; SWWM_ACHIEVEMENT_DAKKA_TAG = "Dakka"; -SWWM_ACHIEVEMENT_DAKKA_TXT = "Fire the Sheen HMG for one minute straight"; +SWWM_ACHIEVEMENT_DAKKA_TXT = "Hold altfire with the Sheen HMG for one minute straight"; SWWM_ACHIEVEMENT_DEADEYE_TAG = "Deadeye"; SWWM_ACHIEVEMENT_DEADEYE_TXT = "Land %d consecutive Explodium Gun shots without missing"; SWWM_ACHIEVEMENT_DEVA_TAG = "Deva Station"; @@ -992,26 +1369,6 @@ SWWM_ACHIEVEMENT_DIVINE_TAG = "Divine Delight"; SWWM_ACHIEVEMENT_DIVINE_TXT = "Use %d Divine Sprites"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Graffiti Master"; SWWM_ACHIEVEMENT_DOODLE_TXT = "Doodle mustaches on %d demon faces"; -SWWM_ACHIEVEMENT_DOOMBOSS1_TAG = "Dynamic Duo"; -SWWM_ACHIEVEMENT_DOOMBOSS1_TXT = "Defeat the Bruiser Brothers"; -SWWM_ACHIEVEMENT_DOOMBOSS2_TAG = "Huge Guts"; -SWWM_ACHIEVEMENT_DOOMBOSS2_TXT = "Defeat the Tyrant of Babel"; -SWWM_ACHIEVEMENT_DOOMBOSS3_TAG = "All Brain"; -SWWM_ACHIEVEMENT_DOOMBOSS3_TXT = "Defeat the Spider Mastermind"; -SWWM_ACHIEVEMENT_DOOMBOSS4_TAG = "More Brain"; -SWWM_ACHIEVEMENT_DOOMBOSS4_TXT = "Defeat the Spider Sibling"; -SWWM_ACHIEVEMENT_DOOMBOSS5_TAG = "Final Cleanup"; -SWWM_ACHIEVEMENT_DOOMBOSS5_TXT = "Complete Baphomet's Challenge"; -SWWM_ACHIEVEMENT_DOOMBOSS6_TAG = "Simply Dead"; -SWWM_ACHIEVEMENT_DOOMBOSS6_TXT = "Defeat the Demonic Biomech Squad"; -SWWM_ACHIEVEMENT_DOOMBOSS7_TAG = "Titan's Fall"; -SWWM_ACHIEVEMENT_DOOMBOSS7_TXT = "Defeat the Icon of Sin"; -SWWM_ACHIEVEMENT_DOOMBOSS8_TAG = "Shot Until Dead"; -SWWM_ACHIEVEMENT_DOOMBOSS8_TXT = "Defeat the Last Tyrant"; -SWWM_ACHIEVEMENT_DOOMBOSS9_TAG = "Evil Eternal"; -SWWM_ACHIEVEMENT_DOOMBOSS9_TXT = "Defeat the Archangelus"; -SWWM_ACHIEVEMENT_DOOMBOSS10_TAG = "A Gazebo Most Insane"; -SWWM_ACHIEVEMENT_DOOMBOSS10_TXT = "Conquer the Sundered Realms"; SWWM_ACHIEVEMENT_DOSH_TAG = "Unchecked Capitalism"; SWWM_ACHIEVEMENT_DOSH_TXT = "Accumulate ¥1,000,000,000 across your playthroughs"; SWWM_ACHIEVEMENT_EVERYTHING_TAG = "The Demolitionist"; @@ -1046,42 +1403,10 @@ SWWM_ACHIEVEMENT_GRAVITY_TAG = "Decent Ascent"; SWWM_ACHIEVEMENT_GRAVITY_TXT = "Use %d Gravity Suppressors"; SWWM_ACHIEVEMENT_GRENADE_TAG = "Kaboom"; SWWM_ACHIEVEMENT_GRENADE_TXT = "Kill %d enemies with planted Explodium mags"; -SWWM_ACHIEVEMENT_HERETICBOSS1_TAG = "Crazy Heads"; -SWWM_ACHIEVEMENT_HERETICBOSS1_TXT = "Defeat the Iron Liches"; -SWWM_ACHIEVEMENT_HERETICBOSS2_TAG = "A Load of Bull"; -SWWM_ACHIEVEMENT_HERETICBOSS2_TXT = "Defeat the Maulotaur Servants"; -SWWM_ACHIEVEMENT_HERETICBOSS3_TAG = "Abracadabra I Win"; -SWWM_ACHIEVEMENT_HERETICBOSS3_TXT = "Defeat D'Sparil"; -SWWM_ACHIEVEMENT_HERETICBOSS4_TAG = "What's so Funny?"; -SWWM_ACHIEVEMENT_HERETICBOSS4_TXT = "Defeat the Iron Liches... again"; -SWWM_ACHIEVEMENT_HERETICBOSS5_TAG = "Big Mooscles"; -SWWM_ACHIEVEMENT_HERETICBOSS5_TXT = "Defeat the Maulotaur Servants... again"; -SWWM_ACHIEVEMENT_HEXENBOSS1_TAG = "It Just Works"; -SWWM_ACHIEVEMENT_HEXENBOSS1_TXT = "Defeat the Death Wyvern"; -SWWM_ACHIEVEMENT_HEXENBOSS2_TAG = "Magic Shmagic"; -SWWM_ACHIEVEMENT_HEXENBOSS2_TXT = "Defeat the Heresiarch"; -SWWM_ACHIEVEMENT_HEXENBOSS3_TAG = "You Again?"; -SWWM_ACHIEVEMENT_HEXENBOSS3_TXT = "Defeat another Heresiarch"; -SWWM_ACHIEVEMENT_HEXENBOSS4_TAG = "Domination"; -SWWM_ACHIEVEMENT_HEXENBOSS4_TXT = "Defeat Zedek"; -SWWM_ACHIEVEMENT_HEXENBOSS5_TAG = "Excommunication"; -SWWM_ACHIEVEMENT_HEXENBOSS5_TXT = "Defeat Traductus"; -SWWM_ACHIEVEMENT_HEXENBOSS6_TAG = "I Hate Puzzles"; -SWWM_ACHIEVEMENT_HEXENBOSS6_TXT = "Defeat Menelkir"; -SWWM_ACHIEVEMENT_HEXENBOSS7_TAG = "Worship This"; -SWWM_ACHIEVEMENT_HEXENBOSS7_TXT = "Defeat Korax"; -SWWM_ACHIEVEMENT_HEXENBOSS8_TAG = "Another One"; -SWWM_ACHIEVEMENT_HEXENBOSS8_TXT = "Defeat yet another Heresiarch"; -SWWM_ACHIEVEMENT_HEXENBOSS9_TAG = "And Another One"; -SWWM_ACHIEVEMENT_HEXENBOSS9_TXT = "Defeat... yup, one more Heresiarch"; -SWWM_ACHIEVEMENT_HEXENBOSS10_TAG = "The Last One"; -SWWM_ACHIEVEMENT_HEXENBOSS10_TXT = "Defeat the last Heresiarch"; -SWWM_ACHIEVEMENT_HEXENBOSS11_TAG = "Didn't I Kick Your Ass Before?"; -SWWM_ACHIEVEMENT_HEXENBOSS11_TXT = "Defeat the Deathkings"; SWWM_ACHIEVEMENT_HND_TAG = "High Noon"; SWWM_ACHIEVEMENT_HND_TXT = "Land %d killing shots in a single Puntzer Beta reload"; SWWM_ACHIEVEMENT_HURRY_TAG = "In a Hurry"; -SWWM_ACHIEVEMENT_HURRY_TXT = "Beat a map with 0% kills, items and secrets"; +SWWM_ACHIEVEMENT_HURRY_TXT = "Beat a map with 0 kills, items and secrets"; SWWM_ACHIEVEMENT_ICE_TAG = "Ice Ice Baby"; SWWM_ACHIEVEMENT_ICE_TXT = "Impale %d enemies with the Blackfire Igniter secondary"; SWWM_ACHIEVEMENT_JUMP_TAG = "Verticality"; @@ -1121,16 +1446,16 @@ SWWM_ACHIEVEMENT_PARRY_TXT = "Deflect %d projectiles"; SWWM_ACHIEVEMENT_PAR_TAG = "Fast"; SWWM_ACHIEVEMENT_PAR_TXT = "Beat the par time in %d maps"; SWWM_ACHIEVEMENT_PEACE_TAG = "Pacifist"; -SWWM_ACHIEVEMENT_PEACE_TXT = "Finish a map without killing anything"; +SWWM_ACHIEVEMENT_PEACE_TXT = "Finish a map without dealing damage"; SWWM_ACHIEVEMENT_PENE_TAG = "Penetrator"; SWWM_ACHIEVEMENT_PENE_TXT = "Strike through %d enemies in a row with a single Grand Lance secondary"; SWWM_ACHIEVEMENT_PLASMA_TAG = "Blastin' Plasma"; SWWM_ACHIEVEMENT_PLASMA_TXT = "Kill an enemy at full health with a Plasma Blaster charged shot %d times"; SWWM_ACHIEVEMENT_PLUSH_TAG = "Lovestruck"; -SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya plush %d times in the same session"; -$ifgame(hexen) SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya or Kirin plushies %d times in the same session"; +SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya plush %d times in the same save"; +$ifgame(hexen) SWWM_ACHIEVEMENT_PLUSH_TXT = "Play with the Saya or Kirin plushies %d times in the same save"; SWWM_ACHIEVEMENT_PUZZLE_TAG = "Even Kirin is Upset"; -SWWM_ACHIEVEMENT_PUZZLE_TXT = "Solve %d \"puzzles\""; +SWWM_ACHIEVEMENT_PUZZLE_TXT = "Solve all fractions of \"puzzles\" in the same save"; SWWM_ACHIEVEMENT_RAGE_TAG = "No Talk me Angy"; SWWM_ACHIEVEMENT_RAGE_TXT = "Use %d Ragekits"; SWWM_ACHIEVEMENT_RAIL_TAG = "Railed Hard"; diff --git a/language.def_lore b/language.def_lore index cffec7eeb..2bea61654 100644 --- a/language.def_lore +++ b/language.def_lore @@ -1,26 +1,5 @@ // this file was generated by mklang, do not edit directly [default] -SWWM_LORETAG_AA12MODEL = "AA-12 Replica"; -SWWM_LORETAB_AA12MODEL = "Item"; -SWWM_LOREREL_AA12MODEL = "Blackmann;Ibuki;Saya"; -SWWM_LORETXT_AA12MODEL = -"\cxDesignation:\c-\n" -"\cf Auto Assault-12\c-\n" -"\cxManufacturer:\c-\n" -"\cf Ninnacht Armaments (defunct)\c-\n" -"\cxClassification:\c-\n" -"\cf Full Auto Shotgun\c-\n" -"\n" -"A relic of the past, or at least a replica model of it for collectors. It is not functional, but the attention to detail is outstanding.\n" -"\n" -"Although originally not very well known, the AA-12 reached new heights in popularity following the acquisition of its design and manufacture rights by the now defunct US-based \cfNinnacht Armaments\c-, after which it received various improvements, and even served as the basis for many other shotguns for years to come (including some by \cfBlackmann Arms\c-, who bought the company in 2018).\n" -"\n" -"Lightweight, comfortable, and with a sleek and easily recognizable look, it is one weapon that has taken a place in the hearts of many a gun nut. It had even proven to survive the test of time, as shown by the \cfRed Oni\c- choosing it as one of her weapons during her time in \cfWW3\c- (and its grim aftermath).\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfIbuki seriously loves this thing. I could kinda blame it on me showing her a certain character from a certain game that uses it. She became obsessed, seriously. I hear that sometimes she even... with it... well, you get the idea. All these years and she still loves to take it down to the range and unload it, just... moaning in pleasure afterwards. God... it's kind of weird, but also hot af.\c-\n" -"\n" -"\cfOh that also reminds me, one of these days I'm going to see if I can make a maidbot of her waifu. That'd be fun, although I doubt she'd feel and act the same, even if she looked the part.\c-"; SWWM_LORETAG_ADMINISTRATORS = "Administrator Gods"; SWWM_LORETAB_ADMINISTRATORS = "Lore"; SWWM_LOREREL_ADMINISTRATORS = "Gods;Anarukon;Novoskhana;Saya"; @@ -365,7 +344,7 @@ SWWM_LORETXT_BLACKFIREIGNITER = "\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" +"\cfReloading:\c- Attach up to two canisters to replenish the weapon's internal dark mana reserves. Each canister will remain locked in until it's been emptied, otherwise residual energy could escape and bring harm to the user. If there is an empty canister attached, the reload action will detach it first. 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" @@ -412,90 +391,6 @@ SWWM_LORETXT_BLASTSUIT = "\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_BRCALBUM = "Counter-Inquisition"; -SWWM_LORETAB_BRCALBUM = "Item"; -SWWM_LOREREL_BRCALBUM = "Ashley;Anarukon;Saya"; -SWWM_LORETXT_BRCALBUM = -"\cxTitle:\c-\n" -"\cf Counter-Inquisition\c-\n" -"\cxArtist:\c-\n" -"\cf Black Rat's Coven\c-\n" -"\cxYear:\c-\n" -"\cf 2100\c-\n" -"\cxGenre:\c-\n" -"\cf Baroque Metal\c-\n" -"\n" -"Released at the turn of the century, \cfCounter-Inquisition\c- is a collection of some of the most famous tracks of the British band \cfBlack Rat's Coven\c-. A whole century of musical history, since the band's humble beginnings all the way back in 2006, condensed into a vinyl of pure \cfOckophux\c-, a valuable metal from the \cfAnarukon\c- world that is said to ward off evil spirits.\n" -"\n" -"\cfSide A:\c-\n" -" 1. Walpurgisnacht\n" -" 2. Blood Moon Cantata\n" -" 3. Army of Lust\n" -" 4. Your Dark Desire\n" -" 5. Red Star of Innocence\n" -" 6. Dragonheart\n" -"\cfSide B:\c-\n" -" 7. Black Rat's Coven (Medley)\n" -"\n" -"Due to its commercial distribution in such a niche format, buyers also had access to a lossless quality digital download from the Black Rat's Coven website. In addition, the digital download also includes high resolution cover art, and exclusive video interviews with each of the band's four members, providing a retrospective look into their history together.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfGod... DAAAAAAAAAAMN...\c-\n" -"\n" -"\cfThis is some REAL DAMN GOOD music, I tell ya. Ashley-san and the gang... Ever since Yu-chan got me into this stuff back in the day I've been hooked. And then the big thing happened, Yu-chan and Ashley-san met, and dated, and got married... And oh boy. Can't believe I'm tight with all the members of one of my favorite bands of all time (well, more or less).\c-\n" -"\n" -"\cfDemo-chan, I swear, I don't understand how I'm this lucky.\c-"; -SWWM_LORETXT_BRCALBUM2 = -"\cxTitle:\c-\n" -"\cf Counter-Inquisition\c-\n" -"\cxArtist:\c-\n" -"\cf Black Rat's Coven\c-\n" -"\cxYear:\c-\n" -"\cf 2100\c-\n" -"\cxGenre:\c-\n" -"\cf Baroque Metal\c-\n" -"\n" -"Released at the turn of the century, \cfCounter-Inquisition\c- is a collection of some of the most famous tracks of the British band \cfBlack Rat's Coven\c-. A whole century of musical history, since the band's humble beginnings all the way back in 2006, condensed into a vinyl of pure \cfOckophux\c-, a valuable metal from the \cfAnarukon\c- world that is said to ward off evil spirits.\n" -"\n" -"\cfSide A:\c-\n" -" 1. Walpurgisnacht\n" -" 2. Blood Moon Cantata\n" -" 3. Army of Lust\n" -" 4. Your Dark Desire\n" -" 5. Red Star of Innocence\n" -" 6. Dragonheart\n" -"\cfSide B:\c-\n" -" 7. Black Rat's Coven (Medley)\n" -"\n" -"Due to its commercial distribution in such a niche format, buyers also had access to a lossless quality digital download from the Black Rat's Coven website. In addition, the digital download also includes high resolution cover art, and exclusive video interviews with each of the band's four members, providing a retrospective look into their history together.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfGod... DAAAAAAAAAAMN...\c-\n" -"\n" -"\cfThis is some REAL DAMN GOOD music, I tell ya. Ashley-san and the gang... Ever since Yu-chan got me into this stuff back in the day I've been hooked. And then the big thing happened, Yu-chan and Ashley-san met, and dated, and got married... And oh boy. Can't believe I'm tight with all the members of one of my favorite bands of all time (well, more or less).\c-\n" -"\n" -"\cfDemo-chan, I swear, I don't understand how I'm this lucky.\c-\n" -"\n" -"\cfUpdate: Remember my freakout when they played that song at our wedding? Red Star of Innocence? God I'm so fucking stupid. I just had a flashback immediately, remembering that one time I told Ashley-san I had no interest in meeting Kirin-kun (she made that song for his 12th birthday). Guess I have to eat my words now, huh?\c-"; -SWWM_LORETAG_CACTUSHEGE = "Hege Cactus"; -SWWM_LORETAB_CACTUSHEGE = "Item"; -SWWM_LOREREL_CACTUSHEGE = "Saya"; -SWWM_LORETXT_CACTUSHEGE = -"\cxDesignation:\c-\n" -"\cf Hege Cactus\c-\n" -"\cxClassification:\c-\n" -"\cf Potted Plant\c-\n" -"\cxOrigin:\c-\n" -"\cf Finland\c-\n" -"\n" -"The \cfHege Cactus\c- is a small potted cactus that's quite popular in Finland. It's said to have such a potent ability to absorb humidity that it can even make people thirsty around it. It's not clear how exactly this particular species of cactus came to be, some say that it simply appeared out of nowhere.\n" -"\n" -"There's also rumors that it can make you develop a taste for furry erotica, although there's no solid proof of this and it's simply just that, rumors.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfI think it's kinda cute, in a way. Small, round, there in it's lil' pot. I should get one, maybe.\c-\n" -"\n" -"\cfI'm not even concerned about those rumors. I don't even understand the stigma against furries, or why it became like this after so many years. The world's gone nuts, I tell ya.\c-"; SWWM_LORETAG_CANDYGUN = "Candy Gun"; SWWM_LORETAB_CANDYGUN = "Item"; SWWM_LOREREL_CANDYGUN = "ExplodiumGun;Munch;Explodium;Saya"; @@ -611,6 +506,39 @@ SWWM_LORETXT_CYRUS = "\cfThere, I said it. Like, sure, the stuff he makes, cool and all, but GOOD LORD the guy pisses me off with his stupid videogamey nerdy crap. Not letting you go in fully armed and instead deciding to fucking YEET your shit all over the place for you to pick up? That's one thing. Deciding that after every mission you have to RETURN all the stuff you got, that's another, too. Dropping some cash every time you blow up baddies, that I can accept, though, helps cover the costs of everything.\c-\n" "\n" "\cfYou know, he may get on my nerves sometimes, but the guy was the first serious business partner I ever had, and damn, he's not that bad outside of all the nerditude he expels... I mean, to be honest, I'm also a big stinky nerd too, and you can quote me on that.\c-"; +SWWM_LORETAG_CYTHO = "Valathor, Cytho"; +SWWM_LORETAB_CYTHO = "People"; +SWWM_LOREREL_CYTHO = "Hell;Ellen;Anarukon;DemonInvasion;UAC;Saya;AkariLabs;Demolitionist"; +SWWM_LORETXT_CYTHO = +"\cxFull Name:\c-\n" +"\cf Archduke Cytho of House Valathor\c-\n" +"\cxNationality:\c-\n" +"\cf Kuriste\c-\n" +"\cxDate of Birth:\c-\n" +"\cf 2008-10-09\c-\n" +"\cxTwitter:\c-\n" +"\cf @incuvalathor\c-\n" +"\n" +"Born in the now fallen Iskar township in 2008 as one of the youngest men of the humble \cfHouse Valathor\c-, \cfCytho\c- took to the family business upon reaching adulthood, quickly climbing the ranks of \cfHell\c-'s sex work industry, partly due to his innate beauty, but also the rapidly accumulating \"satisfied customers\" he would regularly service, and the many pupils he'd take under his wing. By 2028, he had made of Earth his second home, where he would open up an account on social media for a more modern method of attracting new clientele.\n" +"\n" +"One day, however, everything changed. A large number of incubi would report being \"creeped out\" by a woman's unreasonable requests. Curious, Cytho would then set forth to try and find her, to see what exactly his colleagues were finding so unreasonable. And that, is how he met \cfElena Yanikov XVI\c-, an \cfAnarukon\c- woman \"struck by the curse of eternal loneliness\", who so desperately wished to find a husband that she eventually resourced to summoning demons and begging for them to marry her. As expected, all of them had rejected her pleas, no matter how hard she tried, as many among demonkind were wary of her kind. Cytho, however, took pity on her, and accepted, on one condition: They would have to go on a date first.\n" +"\n" +"Some time later, the archduke announced his retirement from sex work, having \"reformed\" as the faithful husband to an Anarukon woman. While his friends and family celebrated, others saw this as an affront. House Valathor was heavily criticised for not rejecting him right there and then, to the point a small war broke out, as the rival \cfHouse Irishtanar\c- would crush their hometown in \"protest\". That day, Cytho closely witnessed the cruelty of his own kind, as the sole survivor of that massacre.\n" +"\n" +"Since then, he lives in Boston with his wife and their three children. His social media account's purpose has been shifted to communicating the news of what transpires in his home realm, sourced from the many contacts he's gathered over the years, as representative of the subjugated civilian population. Although the vast majority of Earth's population would not take him seriously, not until the \cfDemon Invasion\c- of 2148 began.\n" +"\n" +"Denouncing the \cfUAC\c-'s involvements, he posted about the events on \cfPhobos\c- and \cfDeimos\c- long before the UAC had made them public, and proclaimed that an invasion on Earth was imminent. Still few took him seriously, but one among them was his friend \cfSaya Miyamoto\c-, of \cfAkari Labs\c-. As investor in her company, he had already ensured beforehand that she would have the resources and manpower needed for the task he'd ask of her: Build a combat robot that can fight the invaders.\n" +"\n" +"And thus, through their collaboration, the \cfDemolitionist\c- was born.\n" +"\n" +"\cxSaya's Notes:\c-\n" +"\cfSince the very moment I met him, back when I first visited Ellen-san's family, I knew he was more than just a cool, handsome femboy demon grandpa. Yeah, Cytho-sama's the real deal, and the blood that runs through his veins is more noble than that of any pesky, pompous trashlord with a fancy title out there.\c-\n" +"\n" +"\cfAnd yeah, surprise surprise... He's your dad (well, kinda). But you already knew that, didn't you?\c-\n" +"\n" +"\cfSeriously, if it wasn't for him, all of this would have never been possible. We owe a lot to him... I just hope I don't have to repay him with my body (not that I would mind, kihihihi).\c-\n" +"\n" +"\cfPS: His name is pronounced \"Kaizo\", you kept saying it wrong every time. But don't worry, you're not the first.\c-"; SWWM_LORETAG_DECADEMECH = "Decade Mechanics"; SWWM_LORETAB_DECADEMECH = "Lore"; SWWM_LOREREL_DECADEMECH = "XAnimen;EngineTech;Nedoshiaan;Saya"; @@ -673,7 +601,7 @@ SWWM_LORETXT_DEEPIMPACT = "\cfI know you're hella strong, so you better not pull on it too hard. Wait, that sounds wrong... fuck. Forget I said that. Forget you read it, even.\c-"; SWWM_LORETAG_DEMOLITIONIST = "Demolitionist"; SWWM_LORETAB_DEMOLITIONIST = "People"; -SWWM_LOREREL_DEMOLITIONIST = "AkariLabs;Ibuki;Saya;Zanaveth2;Hell;UAC;Nekuratek;Belt;Collar;Propulsor;Hammerspace;Display;Voicebox;Maidbot;EngineTech;Kirin;DemonInvasion"; +SWWM_LOREREL_DEMOLITIONIST = "AkariLabs;Ibuki;Saya;Zanaveth2;Hell;UAC;Nekuratek;Belt;Collar;Propulsor;Hammerspace;Display;Voicebox;Maidbot;EngineTech;Kirin;DemonInvasion;Cytho"; SWWM_LORETXT_DEMOLITIONIST = "\cxFull Name:\c-\n" "\cf Akari Labs First Generation Autonomous Combat Unit\c-\n" @@ -686,13 +614,13 @@ SWWM_LORETXT_DEMOLITIONIST = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"The \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" +"The \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. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both \cfSaya Miyamoto\c- and \cfArchduke Cytho Valathor\c-, representative of \cfHell\c-'s civilian population.\n" "\n" "Each 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" "\n" "The 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 behavior 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" "\n" -"The 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" +"The 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 Hell.\n" "\n" "Of 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" @@ -716,13 +644,13 @@ SWWM_LORETXT_DEMOLITIONIST2 = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"The \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" +"The \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. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both \cfSaya Miyamoto\c- and \cfArchduke Cytho Valathor\c-, representative of \cfHell\c-'s civilian population.\n" "\n" "Each 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" "\n" "The 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 behavior 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" "\n" -"The 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" +"The 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 Hell.\n" "\n" "Of 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" @@ -746,13 +674,13 @@ SWWM_LORETXT_DEMOLITIONIST3 = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"The \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" +"The \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. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both \cfSaya Miyamoto\c- and \cfArchduke Cytho Valathor\c-, representative of \cfHell\c-'s civilian population.\n" "\n" "Each 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" "\n" "The 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 behavior 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" "\n" -"The 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" +"The 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 Hell.\n" "\n" "Of 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" @@ -945,7 +873,7 @@ SWWM_LORETXT_DIVINESPRITE = "\cfPS: Don't try to eat it.\c-"; SWWM_LORETAG_DOOMGUY = "Doom Marine"; SWWM_LORETAB_DOOMGUY = "People"; -SWWM_LOREREL_DOOMGUY = "UAC;Hell;Saya;AkariLabs;Demolitionist"; +SWWM_LOREREL_DOOMGUY = "UAC;Hell;Saya;AkariLabs;Demolitionist;Cytho"; SWWM_LORETXT_DOOMGUY = "\cxFull Name:\c-\n" "\cf CLASSIFIED\c-\n" @@ -965,7 +893,7 @@ SWWM_LORETXT_DOOMGUY = "\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" +"\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, apart from the little info Cytho-sama could get out of his previous romp through Hell, 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 = @@ -1031,7 +959,7 @@ SWWM_LORETXT_EBARRIER = "\cfLil' recommendation from Misa, this one. If it works as well as she says, you won't have much trouble dealing with all that slimy waste those UAC asshats keep leaking around (boy they sure don't care about the environment, huh). Or... well, I guess the firey flames of Hell won't toast your circuits either.\c-"; SWWM_LORETAG_ELLEN = "Yanikov, Elena XXI"; SWWM_LORETAB_ELLEN = "People"; -SWWM_LOREREL_ELLEN = "Ibuki;Taro;Ashley;Saya;Anarukon;WhiteScar;Hell;Yui"; +SWWM_LOREREL_ELLEN = "Ibuki;Taro;Ashley;Saya;Anarukon;WhiteScar;Hell;Yui;Cytho"; SWWM_LORETXT_ELLEN = "\cxFull Name:\c-\n" "\cf Elena \"Ellen\" Yanikov XXI\c-\n" @@ -1617,16 +1545,14 @@ SWWM_LORETXT_HEAVYMAHSHEENGUN = "\n" "While generally meant for mounted use, on-the-go operation is possible, provided the user is equipped with silver-rated power armor at minimum in order to handle its heavy recoil.\n" "\n" -"\cfPrimary Fire:\c- 1050 RPM operation. Sustained fire in this mode is theoretically endless, as the heat produced can be efficiently nullified by the internal cooling systems, it is therefore the recommended mode for most situations.\n" +"\cfPrimary Fire:\c- 700 RPM operation. Sustained fire in this mode is theoretically endless, as the heat produced can be efficiently nullified by the internal cooling systems, it is therefore the recommended mode for most situations.\n" "\n" -"\cfSecondary Fire:\c- 2100 RPM operation. Twice the amount of bullet, but with far more heat. Sustained fire in this mode may trigger the weapon's safety lock should the rising heat bring the weapon too close to non-operational temperature.\n" +"\cfSecondary Fire:\c- 1050 RPM operation. Much faster spin, with moderate heat buildup. It's still possible to keep firing in this mode for about a minute or so from a cold start. If you need to deliver more pain and have the ammunition to spare, choose this.\n" "\n" -"\cfTertiary Fire:\c- Toggles automated spin, to reduce downtime between bursts. Do note, however, that while this is active, the noise will alert enemies.\n" +"\cfTertiary Fire:\c- 2100 RPM operation. Extremely fast, with the highest heat potential. Sustained fire in this mode may quickly trigger the weapon's safety lock should the rising heat get too close to non-operational temperature. If you want things dead fast and don't care about running out of ammo in a matter of seconds, do pick this.\n" "\n" "\cfReloading:\c- There is absolutely no need whatsoever to reload this weapon, as it feeds directly off Hammerspace, requiring only a large supply of ammunition. Hammerspace containers will automatically link all necessary rounds for tethered feeding.\n" "\n" -"\cfTechniques:\c- Both triggers can be held simultaneously, allowing for a hybrid two-shot mode, with three times the bullet barrage. The heat output of this mode is quite high, however, so it is not well recommended for extended use.\n" -"\n" "\cxSaya's Notes:\c-\n" "\cfHEAVY MAH-SHEEN GUN!!!\c-\n" "\n" @@ -1637,7 +1563,7 @@ SWWM_LORETXT_HEAVYMAHSHEENGUN = "\cfGod just seeing it in action is enough to make me wet. Hell, more than that. The Sheen HMG is such a delicious festival of dakka that the mere sound of it firing makes me unleash Leviathan in my panties, and you can quote me on that.\c-"; SWWM_LORETAG_HELL = "Hell"; SWWM_LORETAB_HELL = "Lore"; -SWWM_LOREREL_HELL = "Imanaki;UAC;Saya;Ellen;Anarukon;Novoskhana;DemonInvasion"; +SWWM_LOREREL_HELL = "Imanaki;UAC;Saya;Ellen;Anarukon;Novoskhana;DemonInvasion;Cytho"; SWWM_LORETXT_HELL = "\cxName:\c-\n" "\cf Hell\c-\n" @@ -1811,53 +1737,6 @@ SWWM_LORETXT_IBUKI = "\cfOh yeah, did you know? Technically speaking, Ibuki is my clone. Yeah, there may have been some slight modifications, but if my growth hadn't stopped early, who knows, I could have looked that hot one day. Really makes you think huh...\c-\n" "\n" "\cfYes, I'm also aware that means I'm engaging in selfcest. So? Is there a problem with that too?\c-"; -SWWM_LORETAG_IBUKIMILK = "Red Oni Milk"; -SWWM_LORETAB_IBUKIMILK = "Item"; -SWWM_LOREREL_IBUKIMILK = "Ibuki;AkariLabs;Saya;Kirin"; -SWWM_LORETXT_IBUKIMILK = -"\cxDesignation:\c-\n" -"\cf All-Natural Red Oni Milk\c-\n" -"\cxManufacturer:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClassification:\c-\n" -"\cf Fresh Dairy Product\c-\n" -"\n" -"Grow big and strong like the legendary super-soldier with this fresh milk beberage. \cfRed Oni Milk\c- is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from \cfAkari Labs\c-.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c-\n" -"\n" -"\cfOf course, I prefer to drink it straight from the source. It's even tastier that way.\c-"; -SWWM_LORETXT_IBUKIMILK2 = -"\cxDesignation:\c-\n" -"\cf All-Natural Red Oni Milk\c-\n" -"\cxManufacturer:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClassification:\c-\n" -"\cf Fresh Dairy Product\c-\n" -"\n" -"Grow big and strong like the legendary super-soldier with this fresh milk beberage. \cfRed Oni Milk\c- is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from \cfAkari Labs\c-.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c-\n" -"\n" -"\cfOf course, I prefer to drink it straight from the source. It's even tastier that way, isn't it? God, if you could only look at the face you make when drinking it. Just, so adorable...\c-"; -SWWM_LORETXT_IBUKIMILK3 = -"\cxDesignation:\c-\n" -"\cf All-Natural Red Oni Milk\c-\n" -"\cxManufacturer:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClassification:\c-\n" -"\cf Fresh Dairy Product\c-\n" -"\n" -"Grow big and strong like the legendary super-soldier with this fresh milk beberage. \cfRed Oni Milk\c- is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from \cfAkari Labs\c-.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c-\n" -"\n" -"\cfOf course, I prefer to drink it straight from the source. It's even tastier that way, isn't it? God, if you could only look at the face you make when drinking it. Just, so adorable...\c-\n" -"\n" -"\cfUpdate: And boy oh boy what a surprise. Kirin-kun is of course also a fine appreciator of it. I mean, no one can really resist, it's way too good. Still, he says that Akashna milk is tastier though, and I mean I guess I could agree. Although it's somewhat off-putting that something so delicious came out of the goddamn hump cysts of some gross-looking swamp monster.\c-"; SWWM_LORETAG_IMANAKI = "Imanaki Corp"; SWWM_LORETAB_IMANAKI = "People"; SWWM_LOREREL_IMANAKI = "ImanakiT;Kereshnovka;UAC;Hell;GhoulHunt;Saya;SUSAN"; @@ -2162,27 +2041,6 @@ SWWM_LORETXT_KNOWLEDGEBASE = "\cfOh yeah, you can also find notes like this one here in a couple articles if I feel like saying something extra that doesn't \"fit the tone\" of the whole thing, I guess.\c-\n" "\n" "\cfOh and by the way, many thanks to Ana-san for the Spanish translation. I couldn't resist, because really, she was so happy to do it and she's so cute... She told me that it's really funny how all my ramblings sound in her language, huhu.\c-"; -SWWM_LORETAG_LITHIUMNOVEL = "Lithium Vol.1"; -SWWM_LORETAB_LITHIUMNOVEL = "Item"; -SWWM_LOREREL_LITHIUMNOVEL = "Saya"; -SWWM_LORETXT_LITHIUMNOVEL = -"\cxTitle:\c-\n" -"\cf Lithium - Volume One\c-\n" -"\cxAuthor:\c-\n" -"\cf Anonymous\c-\n" -"\cxGenre:\c-\n" -"\cf Science Fiction, Alternate History\c-\n" -"\n" -"The first volume of an unfinished series, which surfaced in an undisclosed bookstore. As told by its manager, this graphic novel simply popped up there. They had no recollection of it ever been brought in, but it was there, vacuum sealed, in perfect condition. It tells the tale of an alternate world, much like our own, where a demonic invasion happens. Despite it having popped up in the early 21st century, some details were accurately similar to those of the 2148 invasion, although the story told deviates from it, into something far more grim.\n" -"\n" -"No one knows who the author is, it's not mentioned anywhere in its pages. Nor on the cover, and the back is entirely blank except for a single, multicolored triangle. Nevertheless, many copies were made, and it became immensely popular, going as far as to receive several awards, being regarded as one of the greatest graphic novels of all time.\n" -"\n" -"Fans hope that, one day, a second volume will appear, just as mysteriously as the first.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfGod... fucking... this thing is... just too good, I swear. You need to go sit down and give it a read one day, it's a life-changing experience. This is light years ahead of anything that's ever been written, in the history of mankind.\c-\n" -"\n" -"\cfOK, maybe I'm exaggerating a little bit, because I'm a huge fan, but come on. Seriously, give it a read after the mission, you'll love it, Demo-chan.\c-"; SWWM_LORETAG_LOCKE = "Dr. Locke"; SWWM_LORETAB_LOCKE = "People"; SWWM_LOREREL_LOCKE = "Kereshnovka;Saya"; @@ -2337,25 +2195,6 @@ SWWM_LORETXT_MAIDBOT2 = "\cfHehe... I'm really quite proud of making her \"fully featured\", by the way... Best decision of my life. Let me tell you, when we do \"things\" together... it feels like heaven~\c- \cg♥\c-\n" "\n" "\cfUpdate: By the way, I'm really happy that Kirin-kun managed to get her into singing again. Of course, how could she even resist his charms, right?\c-"; -SWWM_LORETAG_MANAROKOU = "Manarock"; -SWWM_LORETAB_MANAROKOU = "Item"; -SWWM_LOREREL_MANAROKOU = "Gods;Saya"; -SWWM_LORETXT_MANAROKOU = -"\cxDesignation:\c-\n" -"\cf Manarock\c-\n" -"\cxClassification:\c-\n" -"\cf Fruit\c-\n" -"\cxOrigin:\c-\n" -"\cf Uusnai, Kurain\c-\n" -"\n" -"The \cfManarock\c- (Adkana: Manarokou, lit.: \"shielded heart fruit\") is a fruit common within the \cfUusnai\c- region of the divine realm of \cfKurain\c-. Known for its fragrant scent and creamy, soft core, it's considered a delicacy among \cfGods\c-. It is also well known that, if not properly and cleanly removed from its hard outer shell, it can become lethally poisonous, causing rapid death on lesser beings through spread of a very potent neurotoxin.\n" -"\n" -"It rarely, if ever, has made any appearances in our own world. Some gods may bring them along, but they can only grow in the soil of the divine realm. One should be highly wary if a god offers you this fruit. Always be sure that they have peeled it properly for your consumption, as there is no known antidote, and the damage done by its toxins is irreversible.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cf*sigh* Maruku offered me one once. And like the dumb idiot I was I bit straight in, shell and all. Of course, I fucking died. Vomited my guts out in the process, mixed with tons of blood, too, which didn't make for a nice image. Ever since then, she always peels them first. They're really tasty when they don't kill you instantly. The taste... I don't know how to describe it, it's sweet, somewhat lemony, but like with all sourness removed, and it melts in the mouth. Feels like custard, kinda.\c-\n" -"\n" -"\cfYou know, actually, this felt to me like the complete opposite of when I tried pufferfish. Like... I feel it's totally overrated. Maybe the risk of dying from it is what makes it so tasty for people, and being immortal just... takes that away from me? I don't know. Still, I'll take this insta-die fruit over it anytime.\c-"; SWWM_LORETAG_MILKBREADS = "Milk Breads"; SWWM_LORETAB_MILKBREADS = "Item"; SWWM_LOREREL_MILKBREADS = "Kirin;Anarukon;Saya"; @@ -2450,9 +2289,9 @@ SWWM_LORETXT_MODERNSPARKSTER = "\n" "\cfSecondary Fire:\c- Hold to charge a glob of Nokron plasma, release to let it out into the world. While more immediately destructive than the primary ammunition, this one is less stable, and tends to come out as a searing blast, rather than a projectile.\n" "\n" -"\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 3 can be held in reserve.\n" +"\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 4 can be loaded in.\n" "\n" -"\cfSecondary Reload:\c- Load in a Nokron cell. Same reserve capacity.\n" +"\cfSecondary Reload:\c- Load in a Nokron cell. Same capacity.\n" "\n" "\cfTechniques:\c- Projectile charge can be held indefinitely, as the weapon will vent regularly to stabilize the weapon's peak ignition potency. This could allow one to simply charge from cover and pop out to release the shot when needed. Additionally, the possibility to press both triggers at once is also documented, which allows for a potent release of Nokorokinylum plasma, comparable to a miniature nuke in destructive potential. It is not recommended to perform a combined attack unless the target is far away enough so as to not endanger the user.\n" "\n" @@ -2957,31 +2796,6 @@ SWWM_LORETXT_PROPULSOR = "\cfSeriously... had I known almasteel is that heavy, I wouldn't have used such thick plating on your body, like, I kinda did say I wanted it \"EXTRA THICC\" when Misa asked me, as a bit of a meme, but she really took it way too seriously.\c-\n" "\n" "\cf*sigh* If you were a bit lighter, I totally could have had you sit on my lap during that Q&A livestream. Ahhhhh, damn it...\c-"; -SWWM_LORETAG_PSYKKONOVEXX = "Psykkonovexx"; -SWWM_LORETAB_PSYKKONOVEXX = "Item"; -SWWM_LOREREL_PSYKKONOVEXX = "Anarukon;Saya"; -SWWM_LORETXT_PSYKKONOVEXX = -"\cxDesignation:\c-\n" -"\cf Psykkonovexx (\"Harmonic Liberator Monarch\")\c-\n" -"\cxManufacturer:\c-\n" -"\cf Umaakhia Akhxhaen\c-\n" -"\cxClassification:\c-\n" -"\cf Electronic Wind Instrument\c-\n" -"\n" -"The \cfPsykkonovexx\c-, named after one of the \cfNine Kings of Kurenai\c-, is one of the major instruments of modern \cfAnarukon\c- music composition, being especially popular for its deep, echoing metallic sound. Though there are no direct equivalents in the human world, some would agree that the most similar instrument to it would be the bagpipe, although this is considered a major stretch.\n" -"\n" -"Among various artists of fame, one of the most prolific users of this instrument is the co-founder of the \cfDark Reaches Project\c- band, prince heir \cfOssid Anderken\c-. His mastery of the Psykkonovexx has allowed him to compose truly mesmerizing melodies, blending seamlessly into the dark and dreadful tone of the band's various synthetic compositions.\n" -"\n" -"The instrument's operation is rather simple, being mostly managed through two modulation sliders and a simple set of pressure-sensitive buttons for mixing various base tones together, allowing for all sorts of convoluted harmonics. A truly skilled player can even twist these sounds into very distinctive \"wails\", which some have described as \"the sound of a million chainsaws revving in perfect harmony\".\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfCan I add that Anarukon music is absolutely fucking hardcore as all shit? No seriously, as someone who's all big into the \"soothing sounds\" of drone metal and dark ambient, I vibe hard with this. I wish I could have had this in my life sooner.\n" -"\n" -"\cfGod, I even met that guy in person too, and the rest of the gang. So this Ossid guy, he's even shorter than me, you saw, but he's actually way older than he looks, dude's been doing this for thousands of years now. I would totally imagine that learning this instrument isn't something that a very normal and mortal human would have the time for. But maybe I could... Well, or not.\c-\n" -"\n" -"\cfAlso holy shit his husband creeps me the hell out, with that whole thing of wanting to turn my aura into an instrument or some shit. I have no idea what that was all about.\c-\n" -"\n" -"\cfAnyway, I'd suggest you not to play around with this thing in the field. You'd probably make so much noise you'd wake up all the monsters in the area.\c-"; SWWM_LORETAG_PUNTZERBETA = "Puntzer Beta"; SWWM_LORETAB_PUNTZERBETA = "Item"; SWWM_LOREREL_PUNTZERBETA = "Blackmann;Saya;Hammerspace"; @@ -3082,11 +2896,11 @@ SWWM_LORETXT_QUADRAVOL = "\n" "\cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact.\n" "\n" -"\cfSecondary Fire:\c- Scatter shot of lesser fireballs. Increased drift and lower effective range, but very useful against multiple targets.\n" +"\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary fire engages slamfire, allowing you to shoot rapid low-charge bursts.\n" "\n" -"\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary or secondary fire engages slamfire, allowing you to shoot rapid low-charge bursts.\n" +"\cfTertiary Fire:\c- Toggles a scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets.\n" "\n" -"\cfReloading:\c- Each fuel box allows for ten shots (less if boosted), after which it must be reloaded. The weapon firmly locks the box in place until it's fully depleted, however.\n" +"\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately ejected once it's been emptied into the weapon's internal \"crucible\", so you can hold additional ammo while keeping your charge.\n" "\n" "\cfTechniques:\c- The weapon has a certain \"extra effective\" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.\n" "\n" @@ -3748,27 +3562,6 @@ SWWM_LORETXT_TARO = "\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_TASTYHOAGIE = "Hoagie"; -SWWM_LORETAB_TASTYHOAGIE = "Item"; -SWWM_LOREREL_TASTYHOAGIE = "Saya;Hell"; -SWWM_LORETXT_TASTYHOAGIE = -"\cxDesignation:\c-\n" -"\cf Hoagie\c-\n" -"\cxClassification:\c-\n" -"\cf Sandwich\c-\n" -"\cxOrigin:\c-\n" -"\cf Philadelphia, US\c-\n" -"\n" -"\cfHoagies\c-, also known as subs, are a popular type of American sandwich. Made from a bread roll and filled with a wide assortment of meats, cheeses and vegetables, it is quite a popular meal, not just on Earth, but also even in \cfHell\c- itself.\n" -"\n" -"As confirmed by \cfArchduke Cytho Valathor\c-, local source of Hell news in our world, it's become well known among civilian demons who have visited through summoning rituals, who would then later spread this to the rest of the population. Several establishments that serve them have been formed around the mainland and even in the outer reaches of the vast kingdom. Even \cfKing Akusei\c- himself is known to enjoy them.\n" -"\n" -"In recent years, this sandwich has become a symbol of peace, used by civilian demons in protest against the hostility towards humans. In a way, the hoagie represents that both civilizations can coexist.\n" -"\n" -"\cxSaya's Notes:\c-\n" -"\cfCan't believe a fucking sandwich could go that far. And it's true, I know it for a fact. You know Sakurai-san, right? Gloomy dude from the softdev department. He fancies himself a \"summoner of hell beasts\", but all he did was surround himself with hot succubi. So yeah, every time those gals come to pick him up, they always say something like \"let's go for a juicy hoagie later\".\c-\n" -"\n" -"\cfWhy is it even so popular with them? I don't get it.\c-"; SWWM_LORETAG_UAC = "UAC"; SWWM_LORETAB_UAC = "People"; SWWM_LOREREL_UAC = "Doomguy;Saya;Hell;DemonInvasion"; @@ -3875,7 +3668,7 @@ SWWM_LORETXT_UAC3 = "\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-"; +"\cfAnd so, here ends the story of these Dumb Epistles or whatever, one of the shining examples of the consequences of unchecked capitalism™.\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"; diff --git a/language.def_menu b/language.def_menu index 1c747ff7a..650b92e38 100644 --- a/language.def_menu +++ b/language.def_menu @@ -199,6 +199,11 @@ SWWM_ITEMGLOWS = "Distant Items Glow"; SWWM_NOMAGDROP = "Drop Spent Mags"; SWWM_BARRIERUSE = "Automatically Use Coating"; SWWM_SVBARRIERUSE = "Enforce Coating Auto-Use"; +SWWM_NOMAPMSG = "Map Special Messages"; +SWWM_WEAPONTOOLTIPS = "Weapon Tooltips"; +SWWM_RESETTOOLTIPS = "Reset Weapon Tooltips"; +SWWM_CRESET = "Reset to Defaults"; +SWWM_ARESET = "Wipe Achievements"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -239,6 +244,11 @@ SWWM_MM_THINGCOLOR_CITEM = "Count Items"; SWWM_MM_THINGCOLOR_VIPITEM = "Important Items"; SWWM_MM_THINGCOLOR_SHOOTABLE = "Shootable Actors"; SWWM_MM_THINGCOLOR_MISSILE = "Projectiles"; +SWWM_AC_UNLOCKED = "Unlocked: "; +SWWM_AC_INCOMPLETE = "Incomplete: "; +SWWM_AC_UNDISCOVERED = "Undiscovered: "; +SWWM_AC_COMPLETE1 = "You've unlocked all achievements!"; +SWWM_AC_COMPLETE2 = "You are a true Demolitionist!"; 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."; @@ -318,7 +328,7 @@ TOOLTIP_SWWM_DAMAGETARGET = "Select when targetter healthbars should be shown."; TOOLTIP_SWWM_STRICTUNTOUCHABLE = "By default, the \"Untouchable\" bonus is active until you take direct damage. If you feel this isn't strict enough, you can also make it end if armor absorbs the damage, or, for extra strictness, on ANY hit, even while invulnerable."; TOOLTIP_SWWM_SILENCEMAP = "Chooses whether you want music to stop when you 100% a map."; TOOLTIP_SWWM_SHADOWDIST = "Maximum distance at which to show blob shadows. May help performance."; -TOOLTIP_SWWM_SWAPWEAPONS = "Allow only one weapon per slot (excluding Deep Impact). Disable if you'd rather ignore this puny attempt at balance."; +TOOLTIP_SWWM_SWAPWEAPONS = "Allow only one weapon per slot (excluding Deep Impact). Disable if you'd rather throw balance out the window."; TOOLTIP_SWWM_FORCESTATS = "Shows map statistics in the HUD even when the automap isn't open."; TOOLTIP_SWWM_FUNTRAILS = "Recolors the trails left by slot 5 weapon projectiles."; TOOLTIP_SWWM_PISTOLSTART = "Forces you to pistol start between levels/clusters. This excludes travel between levels within a hub, however."; @@ -344,6 +354,13 @@ TOOLTIP_SWWM_ITEMGLOWS = "If enabled, items that are far away from the player wi TOOLTIP_SWWM_NOMAGDROP = "By default, the Demolitionist will be somewhat environmentally conscious and not leave spent magazines lying around. Enable if you prefer the added clutter."; TOOLTIP_SWWM_AUTOUSEBARRIER = "When enabled, elemental coating will be automatically used as needed if standing on damaging floors."; TOOLTIP_SWWM_ENFORCEAUTOUSEBARRIER = "Enforce a specific coating auto-use setting for all players, or respects per-player settings."; +TOOLTIP_SWWM_NOMAPMSG = "Toggles special animated character messages on certain maps (usually vanilla)."; +TOOLTIP_SWWM_WEAPONTOOLTIPS = "Shows a summary of controls when a weapon is selected for the first time."; +TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resets weapon tooltips so you can see them all over again."; +TOOLTIP_EVENT_SWWMRESETCVARS = "Resets all the mod's settings to their original values."; +TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress."; +TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap."; +TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; TOOLTIP_SWWM_MM_ROTATE = "Rotates the minimap view."; TOOLTIP_SWWM_MM_GRID = "Shows a 128x128 grid on the minimap."; diff --git a/language.es_base b/language.es_base index 9a163d8c1..259a4ab88 100644 --- a/language.es_base +++ b/language.es_base @@ -49,47 +49,73 @@ T_GOLDSHELL = "Cartucho Dorado"; T_GOLDSHELLS = "Cartuchos Dorados"; T_EVISHELL = "Proyectil de Eviscerator"; T_EVISHELLS = "Proyectiles de Eviscerator"; +I_EVISHELLCLIP2 = "Clip en Duo para Eviscerator"; +I_EVISHELLCLIP3 = "Clip en Trio para Eviscerator"; I_EVISHELLPAK = "Pack de Seis para Eviscerator"; -T_HELLMISSILES = "Misiles Hellblazer"; -T_HELLCLUSTERS = "Estalladores Hellblazer"; -T_HELLBURNINATORS = "Ruinadores Hellblazer"; -T_HELLNUKES = "Cabezas Nucleares Hellblazer"; T_HELLMISSILE = "Misil Hellblazer"; -T_HELLCLUSTER = "Estallador Hellblazer"; -T_HELLBURNINATOR = "Ruinador Hellblazer"; -T_HELLNUKE = "Cabeza Nuclear Hellblazer"; +T_HELLMISSILES = "Misiles Hellblazer"; T_HELLMISSILEMAG = "Cargador de Misiles Hellblazer"; +T_HELLCLUSTER = "Estallador Hellblazer"; +T_HELLCLUSTERS = "Estalladores Hellblazer"; T_HELLCLUSTERMAG = "Cargador de Estalladores Hellblazer"; +T_HELLBURNINATOR = "Ruinador Hellblazer"; +T_HELLBURNINATORS = "Ruinadores Hellblazer"; T_HELLBURNINATORMAG = "Cargador de Ruinadores Hellblazer"; +T_HELLNUKE = "Cabeza Nuclear Hellblazer"; +T_HELLNUKES = "Cabezas Nucleares Hellblazer"; T_HELLNUKEMAG = "Cargador de Cabezas Nucleares Hellblazer"; T_SPARKUNIT = "Unidad Biospark"; +T_SPARKUNITS = "Unidades Biospark"; T_XSBMAG = "Cargador 1.150 XSB"; +T_XSBMAGS = "Cargadores 1.150 XSB"; T_FCBMAG = "Cargador 1.150 FCB"; +T_FCBMAGS = "Cargadores 1.150 FCB"; T_XSBBULLET = "Bala 1.150 XSB"; +T_XSBBULLETS = "Balas 1.150 XSB"; T_FCBBULLET = "Bala 1.150 FCB"; +T_FCBBULLETS = "Balas 1.150 FCB"; T_CANDYMAG = "Cargador de Pistola Caramelo"; +T_CANDYMAGS = "Cargadores de Pistola Caramelo"; T_CANDYBULLET = "Bala de Pistola Caramelo"; +T_CANDYBULLETS = "Balas de Pistola Caramelo"; T_CANDYSPARE = "Repuesto de Pistola Caramelo"; +T_CANDYSPARES = "Repuestos de Pistola Caramelo"; T_YNYKRONAMMO = "Contenedor de Cristal"; +T_YNYKRONAMMOS = "Contenedores de Cristal"; T_SMW05BULLET = "Bala SMW.05"; T_SMW05BULLETS = "Balas SMW.05"; T_SHEENBULLET = "Bala 14.5x114mm MT"; T_SHEENBULLETS = "Balas 14.5x114mm MT"; T_QUADAMMO = "Célula de Quadravol"; +T_QUADAMMOS = "Células de Quadravol"; T_DARKAMMO = "Frasco de Fuego Negro"; +T_DARKAMMOS = "Frascos de Fuego Negro"; T_EMPCORE = "Barra de Dysedum"; +T_EMPCORES = "Barras de Dysedum"; T_RAYBOLT = "Proyectil de Ray-Khom"; +T_RAYBOLTS = "Proyectiles de Ray-Khom"; T_RAYAMMO = "Cargador de Ray-Khom"; +T_RAYAMMOS = "Cargadores de Ray-Khom"; T_RAYBATTERY = "Batería de Ray-Khom"; +T_RAYBATTERYS = "Baterías de Ray-Khom"; T_GRANDSPEAR = "Arpón de Gran Lanza"; +T_GRANDSPEARS = "Arpones de Gran Lanza"; T_GRANDAMMO = "Cargador de Gran Lanza"; +T_GRANDAMMOS = "Cargadores de Gran Lanza"; T_SPARKBAMMO = "Célula de Kinylum"; +T_SPARKBAMMOS = "Células de Kinylum"; T_SPARKRAMMO = "Célula de Nokron"; +T_SPARKRAMMOS = "Células de Nokron"; T_MRROUND = "Bala Mortal"; +T_MRROUNDS = "Balas Mortales"; T_MRAMMO = "Cargador Mortal"; +T_MRAMMOS = "Cargadores Mortales"; T_MRGRENADE = "Granada Mortal"; +T_MRGRENADES = "Granadas Mortales"; T_ULTIMATEPOD = "Cápsula de Rafan-Kos"; +T_ULTIMATEPODS = "Cápsulas de Rafan-Kos"; T_ULTIMATEAMMO = "Cargador de Rafan-Kos"; +T_ULTIMATEAMMOS = "Cargadores de Rafan-Kos"; T_BLASTSUIT = "Chaleco Antiexplosivos"; T_EMBIGGENER = "Ensanchecedor de Hammerspace"; T_BULKEMBIGGENER = "Ensanchecedor de Hammerspace a Granel"; @@ -538,6 +564,7 @@ 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_DEVASTATION = "El poder de la Marca se ha ido."; +D_SPRITE = "El Sprite Divino ha soplado su último aliento."; D_TETHERFAIL = "El vínculo del Enlace de Seguridad fue obstruído."; D_MASHIRO = "\cjSabe donde estás...\c-"; SWWM_YNYKRONREADY = "Artefacto Ynykron listo para disparar."; @@ -547,7 +574,7 @@ SWWM_TITLEMODBY = "un mod de \cxMarisa Kirisame"; SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" "Un maravilleante mod de gameplay para GZDoom por Marisa Kirisame de UnSX Team\n" "Modelos 3D diseñados con cariño con texturas pintadas a mano de 256 colores con dithering\n" -"Mas de 50 mil líneas de ZScript, y aun contando (dios me ayude)\n" +"Casi 60 mil líneas de ZScript, y aun contando (dios me ayude)\n" "El lore más profundo a este lado del Modiverso de Doom\n" "¡Y mucho mucho más!\nSaludos a Mub, Ribbed, Slemg, Bunr, Kegbine, Term-kun, Hype64, Bartendy, Skelly, Mr. BIG SHOT WildWeasel, Endy, Mima-sama, Sinkie, BillowPlaster, Disgusting Dog Water, Dangle Logo, Lämp Paipu, Leek Spah, Boingy, MarTREE, Dusty Demon Bread, Roasted Rock, Ed the Netcode Boy, Thirst Cactus, JimJam, Cappy Jay, A Nom, Missy Fits, Minor Cookie, Squid Kid, YukiCute, MafSulk, FineRaff25, NetroRutcase, ShudTheFugUpRyan, Kobl, Cacous Seriodemon, Zomb, Man of Chins, Bun Pun, Zikeous Shadestructor, Blimyot, Baja Blast Tittums, DrySpy.py, Typo Gem, Wantopus, Morf, Daedalus, Popato, SpengRob, Sgt. Shellpost, Loud M, Snk, Donut, C.Kid, Emit Birb, You Go To Sleep, Rach, Le No Chicken, Murasa, Smart Cactus Dude, Phantomboobs, Sanae Kochiya, Gardeboy, Cat, HK417, Smol Koa, Joe Mama, Jahn, Guta, Glue, Atan, Schweet Prints, Angury Teeth Practitioner, Sell Her, MiSiFu, Portuguese Sausage, Scoob Stub, Actually Jabba, Very Honest Cat, Chiaki's Tit Mole, Homie, Snacks, Tubz, Toof, Teef, Frisp, Trashkat, Succ 'n Spicy, Melissa Follower When, Shokku, Scummyboi, Kat Gravity Rush, John Romero, John Carmack, Tim Allen, Tim Sweeney y por último pero no menos importante mi querido dragón mascota\n" "He intentado estrujar todos los nombres que he podido ahí, que haya podido recordar, por lo menos, así que si no estás ahí y quieres entrar, solo pídelo\n" @@ -577,6 +604,346 @@ SWWM_PLACE3 = "3º"; SWWM_PLACE1_GENDER1 = "1ª"; SWWM_PLACE2_GENDER1 = "2ª"; SWWM_PLACE3_GENDER1 = "3ª"; +// weapon tooltips +SWWM_TTNOTE = "Nota: La ayuda de armas se puede desactivar en Opciones de SWWM GZ."; +TT_PUSHER = +"\cfPrimario:\c- Taladrar.\n" +"\cfSecundario:\c- Ataque cargado."; +TT_DEEPIMPACT = +"\cfPrimario:\c- Impulso de aire.\n" +"\cfSecundario:\c- Disparo cargado.\n" +"\cfRecarga:\c- Bombear aire."; +TT_EXPLODIUM = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Lanzar cargador.\n" +"\cfRecarga:\c- Recargar arma."; +TT_EXPLODIUM2 = +"\cfPrimario:\c- Disparar arma derecha.\n" +"\cfSecundario:\c- Disparar arma izquierda.\n" +"\cfRecarga:\c- Recargar arma(s)."; +TT_SPREADGUN = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Seleccionar munición.\n" +"\cfRecarga:\c- Recargar / cambiar munición.\n" +"\cfSecundario+Primario:\c- Descargar munición."; +TT_WALLBUSTER = +"\cfPrimario:\c- Disparar un cañón.\n" +"\cfSecundario:\c- Disparar un cilindro.\n" +"\cfZoom:\c- Disparar todo.\n" +"\cfRecarga:\c- Recargar arma."; +TT_EVISCERATOR = +"\cfPrimario:\c- Disparo de metralla.\n" +"\cfSecundario:\c- Disparo de granada.\n" +"\cfZoom:\c- Alternar dispersión."; +TT_HELLBLAZER = +"\cfPrimario:\c- Cargar cohetes, soltar para disparar.\n" +"\cfSecundario:\c- Cargar granadas, soltar para disparar.\n" +"\cfZoom:\c- Seleccionar munición.\n" +"\cfRecarga:\c- Recargar / cambiar munición.\n" +"\cx(Más controles en la biblioteca)\c-"; +TT_SPARKSTER = +"\cfPrimario:\c- Disparo de orbe.\n" +"\cfSecundario:\c- Disparo de haz.\n" +"\cfZoom:\c- Disparo buscador.\n" +"\cfRecarga:\c- Recarga / doble carga."; +TT_SILVERBULLET = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Seleccionar munición.\n" +"\cfZoom:\c- Usar mira.\n" +"\cfRecarga:\c- Recargar / cambiar munición.\n" +"\cfSecundario+Primario:\c- Accionar perno manualmente."; +TT_CANDYGUN = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Lanzar cargador.\n" +"\cfRecarga:\c- Recargar arma.\n" +"\cfSecundario+Primario:\c- Lanzar pistola."; +TT_YNYKRON = +"\cfPrimario:\c- Cargar / disparar arma.\n" +"\cfSecundario:\c- Rotar cargador.\n" +"\cfRecarga:\c- Recargar arma / cancelar carga."; +TT_HAMMER = +"\cfPrimario:\c- Ataque lado a lado.\n" +"\cfSecundario:\c- Ataque vertical.\n" +"\cfZoom:\c- Ataque giratorio."; +TT_PLASMABLAST = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Disparo cargado.\n" +"\cfRecarga:\c- Recargar arma."; +TT_PLASMABLAST2 = +"\cfPrimario:\c- Disparar arma derecha.\n" +"\cfSecundario:\c- Disparar arma izquierda.\n" +"\cfRecarga:\c- Recargar arna(s)."; +TT_PUNTZERBETA = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Modo de disparo rápido.\n" +"\cfRecarga:\c- Recargar arma."; +TT_PUNTZERGAMMA = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Cambiar modo de disparo.\n" +"\cfRecarga:\c- Recargar arma."; +TT_SHEENHMG = +"\cfPrimario:\c- Fuego lento.\n" +"\cfSecundario:\c- Fuego moderado.\n" +"\cfZoom:\c- Fuego rápido."; +TT_QUADRAVOL = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Bombear arma.\n" +"\cfZoom:\c- Alternar modo disperso.\n" +"\cfRecarga:\c- Cargar células.\n" +"\cfPrimario+Secundario:\c- Mantener para disparo rápido."; +TT_BLACKFIRE = +"\cfPrimario:\c- Lanzafrío.\n" +"\cfSecundario:\c- Disparo de carámbano.\n" +"\cfRecarga:\c- Recargar frasco(s)."; +TT_EMPCARBINE = +"\cfPrimario:\c- Mantener para ionizar, soltar para disparar.\n" +"\cfSecundario:\c- Ionización multi-objetivo.\n" +"\cfZoom:\c- Usar mira.\n" +"\cfRecarga:\c- Cargar barras."; +TT_RAYKHOM = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Ataque de rayo.\n" +"\cfRecarga:\c- Recargar arma.\n" +"\cfZoom:\c- Recargar batería."; +TT_GRANDLANCE = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Disparo cargado.\n" +"\cfRecarga:\c- Recargar arma.\n" +"\cfZoom:\c- Recargar batería."; +TT_FISTGUN = +"\cfPrimario:\c- Lanzar puño.\n" +"\cfSecundario:\c- Bofetada en arco."; +TT_NEWSPARKSTER = +"\cfPrimario:\c- Disparo de Kinylum.\n" +"\cfSecundario:\c- Disparo de Nokron.\n" +"\cfPrimario+Secundario:\c- Disparo combinado.\n" +"\cfRecarga:\c- Cargar Kinylum.\n" +"\cfZoom:\c- Cargar Nokron."; +TT_MORTALRIFLE = +"\cfPrimario:\c- Disparar arma.\n" +"\cfSecundario:\c- Disparar granada.\n" +"\cfZoom:\c- Cambiar modo de disparo.\n" +"\cfRecarga:\c- Recargar arma."; +TT_RAFANKOS = +"\cfPrimario:\c- Haz singular.\n" +"\cfSecundario:\c- Haz múltiple.\n" +"\cfRecarga:\c- Recargar arma."; +// "Direct messages" +SWWM_INCOMINGMSG = "Mensaje directo entrante de %s..."; +// E1M8 +SWWM_SAYAPHOBOS1 = "Creo que olvidé decirlo en la misión pero... Hay un problemilla, \cdDemo-chan\c-."; +SWWM_SAYAPHOBOS2 = "El portal a Deimos está guardado por dos malos malosos, y vas a tener que cargártelos."; +SWWM_SAYAPHOBOS3 = "Son supuestamente el \"reemplazo\" de lo que sea que matara el otro tío para pasar por el mismo sitio."; +SWWM_SAYAPHOBOS4 = "Bueno, conociéndote, estoy segura de que no será un problema. En fin, eso es todo de momento. Buena suerte."; +// E2M8 +SWWM_SAYADEIMOS1 = "Cuidado, \cdDemo\c-, esto me da mala espina."; +SWWM_SAYADEIMOS2 = "Me sale aquí una enorme marca de energía de ahí afuera, y digo ENORME."; +SWWM_SAYADEIMOS3 = "Y encima no puedo contactar con \cvCytho-sama\c- para que nos informe de donde ir."; +SWWM_SAYADEIMOS4 = "Bueno, vas por tu cuenta, supongo. Si no consigues encontrar una salida, estaré esperando para reclamarte."; +// E3M8 +SWWM_SAYADIS1 = "Y aquí estamos... En el mismísimo centro de todo."; +SWWM_SAYADIS2 = "Aquí es donde se abrió el primer portal a la Tierra, y vas a usarlo para volver."; +SWWM_SAYADIS3 = "Y por supuesto, todo bien guardado, como no. Tienes que matar cosas, como siempre."; +SWWM_SAYADIS4 = "Esperemos al menos que te eche en el sitio justo. Tu sigue, \cdDemo-chan\c-, que ya falta poco."; +// E4M8 +SWWM_SAYATHY1 = "Vale, buenas noticias, al menos. Hay un portal cerca, y estoy segura de que te llevará al sitio correcto."; +SWWM_SAYATHY2 = "Pero, por supuesto, tienes que patear más traseros para llegar. A ver, nada en la vida es fácil, ¿no?"; +SWWM_SAYATHY3 = "Estaré lista para informarte luego de tu misión DE VERDAD."; +SWWM_SAYATHY4 = "Ya, aun no tengo ni idea de como salió el lío este. Pero ya llegaré al fondo de todo esto, ya verás."; +// E5M8 +SWWM_CYTHONAME = "\cvArchiduque Cytho Valathor\c-"; +SWWM_CYTHOSIGIL1 = "\cdDemo\c-, soy \cvCytho\c-. Tengo un mensaje importante de parte de la familia real."; +SWWM_CYTHOSIGIL2 = "El príncipe Baphomet está satisfecho con tus esfuerzos, y ha abierto un portal para que regreses a la Tierra."; +SWWM_CYTHOSIGIL3 = "Desafortunadamente, dicho portal está guardado por demonios militares de alto rango, dos, de hecho."; +SWWM_CYTHOSIGIL4 = "... Aunque, conociéndote, estoy seguro de que no será un problema, ¿cierto?"; +// MAP07 +SWWM_SAYADIMPLE1 = "Alto ahí, \cdDemo-chan\c-. Estás a punto de meterte en terreno peligroso."; +SWWM_SAYADIMPLE2 = "Esta es la primera línea de defensa que se ha montado alrededor del puerto interior, y es una jodienda."; +SWWM_SAYADIMPLE3 = "Con suerte, tienes bastante equipamiento para arrasarlo todo... Lo tienes, ¿verdad?"; +SWWM_SAYADIMPLE4 = "Bueno, ya hemos visto lo que puedes hacer, así que estoy segura de que irá todo bien."; +SWWM_SAYADIMPLE5 = "¡Buena suerte!"; +// MAP30 +SWWM_SAYAIOS1 = "\cdDemo-chan\c-... Ya está, vas a enfrentarte al Comandante Psíquico, el líder del ejército Infernal."; +SWWM_SAYAIOS2 = "No sé si... ... B-bueno, no debería preocuparme llegado este punto."; +SWWM_SAYAIOS3 = "Puedes hacerlo, puedes poner fin a todo esto. Eres... Mi... N-nuestro héroe."; +SWWM_SAYAIOS4 = "Oh dios no puedo hacer esto, tengo el pulso a tope..."; +SWWM_SAYAIOS5 = "... \cdD-Demo-chan\c-... Por favor salva el mundo y... Por favor vuelve a casa."; +// MAP30 with Rampancy +SWWM_SAYARAMPANCY1 = "\cdDemo-chan\c-, esa cosa te toma el pelo, confía en mí. Vi los fallos de login."; +SWWM_SAYARAMPANCY2 = "Estoy segura de que sacará alguna mierda de cliché para \"atraerte a su bando\" o mierdas."; +SWWM_SAYARAMPANCY3 = "Menudo chiste. Sea lo que sea que te diga, no lo escuches. Es todo mentiras y mierdas."; +SWWM_SAYARAMPANCY4 = "Ahora, ve y patea traseros de robot, mi valiente \cdDemolicionista\c-. Todos contamos contigo aquí."; +// LEVEL08 +SWWM_CYTHONERVE1 = "No he podido contactar con \cgSaya\c-, asumo entonces que está durmiendo, ya que es bastante tarde en Japón."; +SWWM_CYTHONERVE2 = "Muchos otros grupos ya han sido suprimidos a escala mundial, sus fuerzas rápidamente declinan."; +SWWM_CYTHONERVE3 = "Tú, sin embargo, te enfrentas a un teniente cibernético conocido como el \"Último Tirano\". Esto será difícil."; +SWWM_CYTHONERVE4 = "Sin embargo... Eres la heroica \cdDemolicionista\c-, y les darás una lección a estas viles bestias."; +SWWM_CYTHONERVE5 = "Extingue las llamas de corrupción demoníaca que mancillan esta tierra. Los Kuriste creemos en ti."; +// Eviternity MAP30 +SWWM_SAYAEVIA1 = "Pst... Mira este sitio. Este tío no podía ser más pretencioso ni aunque lo intentara."; +SWWM_SAYAEVIA2 = "Da igual lo \"angelical\" que parezca, es solo un tío con armadura bonita, le puedes patear el culo."; +SWWM_SAYAEVIA3 = "Todo este sitio, es que... Joder, espero que hayas sacado muchas fotos de alta resolución como te pedí."; +SWWM_SAYAEVIA4 = "Voy a por unas palomitas. Esto va a ser desde luego una batalla épica, jijijijiji..."; +SWWM_SAYAEVIB1 = "¿Que? Pero menuda mierda salida de videojuego. ¿¿¿Me estás contando que el tío tiene DOS BARRAS DE VIDA???"; +SWWM_SAYAEVIB2 = "¡Una mierda, una puta mierda así de grande! ¡Esto es una putísima mierda! ¡Cárgatelo, \cdDemo-chan\c-!"; +// Heretic E1M8 +SWWM_SAYAMAW1 = "Y aquí estamos, en las \"Fauces del Infierno\"."; +SWWM_SAYAMAW2 = "Según los Sidhe esto contiene el portal que conecta con el mundo de los demonios."; +SWWM_SAYAMAW3 = "Creo que va a ser interesante visitar el equivalente al infierno de otro universo, vaya que sí."; +SWWM_SAYAMAW4 = "... Y por supuesto, va a ser mucho más interesante reventarlo todo también, ¿verdad?"; +SWWM_SAYAMAW5 = "Solo... Ten cuidado con lo que sea que guarde el sitio este."; +// Heretic E2M8 +SWWM_SAYAMASTERS1 = "Vale, a ver... Estamos a un paso más de la guarida del jinete de serpiente ese. Pero hay un problema."; +SWWM_SAYAMASTERS2 = "Específicamente, varios problemas. Problemas grandes, tochos, y todo musculosos."; +SWWM_SAYAMASTERS3 = "Es que estamos hablando de MINOTAUROS ENORMES con MAZOS ENORMES."; +SWWM_SAYAMASTERS4 = "No se tú, pero yo ya estoy escuchando el tema de los Hombres del Pilar en mi cabeza."; +SWWM_SAYAMASTERS5 = "A por ellos, \cdDemo Demostar\c-... ... ... Vale puede que ese haya sido un chiste muy malo, olvídalo."; +// Heretic E3M8 +SWWM_SAYADSPARIL1 = "Ya está, \cdDemo-chan\c-. Vas a enfrentarte al brujo capullo ese."; +SWWM_SAYADSPARIL2 = "Vas a salvar otro mundo, y todo en tiempo récord. ¡Estás en racha!"; +SWWM_SAYADSPARIL3 = "... Oh, y recuerda, te espera una sorpresa en casa. Oh, es que te va a encantar."; +SWWM_SAYADSPARIL4 = "Splgslshglgh"; +SWWM_SAYADSPARIL5 = "Oh mierda ¿eso lo pillo el reconocimiento de voz? Ups..."; +// Heretic E4M8 +SWWM_SAYAHEADS1 = "Vamos, es que se me acaba la paciencia con todo. Espero que esto de verdad te traiga de vuelta a casa."; +SWWM_SAYAHEADS2 = "Y si no, bueno, más tiempo para refinar este \"regalo\" que te voy a dar."; +SWWM_SAYAHEADS3 = "Gracias a esto, he conseguido mejorar su potencia aun más. Nos divertiremos a tope."; +SWWM_SAYAHEADS4 = "En serio no puedo esperar a que lo pruebes, y estoy segura de que te mueres de ganas de saber que es..."; +SWWM_SAYAHEADS5 = "Eliminad aquestos enemigos y venid por vuestra recompensa, oh \cdDemolicionista\c-."; +SWWM_SAYAHEADS6 = "... Puto en serio acabo de decir eso..."; +// Heretic E5M8 +SWWM_SAYABULLS1 = "Y es que sigue, su puta madre..."; +SWWM_SAYABULLS2 = "Es que te están mandando por mundos al azar. Mira, ya me estoy cabreando basto."; +SWWM_SAYABULLS3 = "Estoy tan cabreada que, si el próximo portal no te manda inmediatamente de vuelta a Parthoris, es que..."; +SWWM_SAYABULLS4 = "Eso..."; +SWWM_SAYABULLS5 = "NECESITO que vuelvas a casa, \cdDemo-chan\c-. Te necesito desesperadamente para probar esto."; +// Seven Portals +SWWM_SAYAGREETA1 = "Ahí lo tienes, \cdDemo-chan\c-. Ese es tu objetivo, ese bicho grande y feo apestoso. Ese es Korax."; +SWWM_SAYAGREETA2 = "... Por cierto, te has fijado en como huele? Atufa, ¿a que sí?"; +SWWM_SAYAGREETA3 = "Dios, imagina el olor en persona... Solo de pensarlo se me revuelve el estómago."; +SWWM_SAYAGREETB1 = "Cobarde... Burlándose desde la distancia..."; // Kirin reply +SWWM_SAYAGREETC1 = "Sí, cobarde y asqueroso, los típicos signos de un bastardo feo."; +SWWM_SAYAGREETD1 = "¿Bastardo... Feo?"; // Kirin reply +SWWM_SAYAGREETE1 = "Es mejor no explicártelo, \cxKirin-kun\c-. Sentirías una decepción muy grande por toda la raza humana.."; +SWWM_SAYAGREETF1 = "Eso ciertamente no es tranquilizador de oír..."; // Kirin reply +// Shadow Wood +SWWM_SAYABLOODA1 = "No se como el tío este puede oler nada aparte de ese tufo de pedo de perro viejo que suelta."; +SWWM_SAYABLOODA2 = "Es que en serio, la puta virgen..."; +SWWM_SAYABLOODB1 = "El bastardo feo ese necesita un baño."; // Ibuki reply +SWWM_SAYABLOODC1 = "¿Bastardo feo? ¿Que es esto ahora, un doujin cutre?"; +SWWM_SAYABLOODD1 = "Ja, muy buena, \cgSayacchi\c-."; // Ibuki reply +// Hypostyle +SWWM_SAYAHYPO1 = "Y ya está, después de tantas vueltas. Lo que haya aquí, habrá que matarlo para pillar el siguiente portal."; +SWWM_SAYAHYPO2 = "En serio espero que no sea un puto dragón. Sería el boss más cutre y genérico posible."; +SWWM_SAYAHYPO3 = "Uh... Lo he gafado, ¿no? Seguro que sí. Ya, apuesto a que es un puto dragón."; +SWWM_SAYAHYPO4 = "Apuesto que el TÍO ESE va a salir de su tumba y puto venderme su maldito juego por milésima vez."; +// Heresiarch's Seminary +SWWM_KIRINWORSHIPA1 = "Patética criatura repugnante...\n¿Quien pensaría jamas en adorar a una vil bestia como tú?"; +SWWM_KIRINWORSHIPB1 = "Pues yo lo que adoro es esa jugosa polla que tienes, \cxKirin-kun\c-~"; // Saya reply +SWWM_KIRINWORSHIPC1 = "PFFFFFFFFFFFFFF"; +SWWM_KIRINWORSHIPD1 = "¡Guh! \cx¡Kiriiiiin\c-! ¡Me acabas de echar cola todo por encima! ¡Joder es que escupes tan fuerte como te corres!"; // Saya reply +SWWM_KIRINWORSHIPD2 = "O-oh... Espera, esta cosa sigue encendida. Mierda... \cdDemo-chan\c- acaba de leer todo eso."; +// Castle of Grief +SWWM_SAYAGAMEA1 = "Guau, mira al puto maestro del ajedrez este... ¡Que te jodan!"; +SWWM_SAYAGAMEA2 = "Este tío es un puto idiota y me sigue cabreando más. Que ganas tengo de verte partirle el maldito culo..."; +SWWM_SAYAGAMEB1 = "Friki del ajedrez..."; // Ibuki +SWWM_SAYAGAMEC1 = "Apuesto a que estaba en el club de ajedrez."; +// Necropolis +SWWM_SAYAMASTERSA1 = "Maestros, maestros... ¿De quien? ¿Despertad mis maestros? Bueno, es igual, me da lo mismo lo que diga."; +SWWM_SAYAMASTERSA2 = "Es que que ganas tengo de que te lo cargues..."; +SWWM_SAYAMASTERSB1 = "¿Eres lo suficientemente fuerte para enfrentarte al hecho de que HUELES?"; // Ibuki reply +SWWM_SAYAMASTERSC1 = "Me duché esta mañana, \crIbuki\c-."; +SWWM_SAYAMASTERSD1 = "Me refiero al señorito apestoso de ahí. Tú hueles bien."; // Ibuki reply +SWWM_SAYAMASTERSE1 = "\cgSayacchi\c- definitivamente posee un aroma agradable."; // Kirin reply +SWWM_SAYAMASTERSF1 = "Jujujuju... Gracias."; +// Zedek +SWWM_SAYAFIGHTER1 = "Y aquí es donde está Zedek, el luchadorcillo. Tal vez crea que es fuerte, pero aun no te ha conocido."; +SWWM_SAYAFIGHTER2 = "Oh, y tú fíjate por si hay trampas. Seguro que las hay traicioneras por aquí."; +// Traductus +SWWM_SAYACLERICA1 = "Si hay algo que he aprendido de los videojuegos es que los clérigos son la peor escoria."; +SWWM_SAYACLERICA2 = "Eso es todo lo que tengo que decir."; +SWWM_SAYACLERICB1 = "Nunca he encontrado ni un solo clérigo que no haya intentado asesinarme."; // Kirin reply +SWWM_SAYACLERICC1 = "Oh cierto, la gente del Imperio Sacrosanto, ¿verdad? Me olvidé por completo de esos."; +SWWM_SAYACLERICC2 = "Los clérigos son una puta mierda..."; +// Menelkir +SWWM_SAYAMAGE1 = "La guarida de Menelkir, eh... ...\nOh dios, no se lo digas a \cxKirin-kun\c-, aquí hay puzzles."; +SWWM_SAYAMAGE2 = "Sí, es que está ya más que cansado de todo este tema. Y aparentemente ahora los tenemos de coincidir dibujos."; +SWWM_SAYAMAGE3 = "Bueno, al menos estos son puzzles de verdad, y no lo que coño sea que fuera todo aquello."; +SWWM_SAYAMAGE4 = "Aun que sean... Ya sabes... De los que son todo cutres y chupadísimos."; +// Dark Crucible +SWWM_SAYAKORAXA1 = "Aquí estamos, \cdDemo\c-. El gran bastardo feo apestoso ese espera."; +SWWM_SAYAKORAXB1 = "Al fin, el reinado maligno del vil conspirador encontrará su fin."; // Kirin reply +SWWM_SAYAKORAXC1 = "Hora de que se dé un puto baño. Después de que le descoloques las rodillas, por supuesto."; // Ibuki reply +SWWM_SAYAKORAXD1 = "Aunque \cvMeido\c- no lo esté viendo, te puedo decir que los cuatro te estamos dando ánimos."; +SWWM_SAYAKORAXE1 = "Sigue luchando, \cdDemo-chan\c-. Puedes hacerlo, creemos en ti."; // Kirin reply +// Blight +SWWM_SAYABLIGHTA1 = "Oye, \cdDemo-chan\c-, ¿recuerdas los puzzles?"; +SWWM_SAYABLIGHTB1 = "Nnnnngh..."; // Kirin reply +SWWM_SAYABLIGHTC1 = "Creo que \cxKirin\c- acaba de oírme. Bueno... Ya sabes que hacer."; +SWWM_SAYABLIGHTC2 = "Puedo sentir que esto va a ser todo un paripé, así que estate preparada para todo."; +// Constable's Gate +SWWM_SAYACONSTABLEA1 = "Castillos y más mierdas... Y sigue. Ya lo dije en la misión, pero... Ya sabes..."; +SWWM_SAYACONSTABLEA2 = "Sigue reventando cosas, porfa. \cvMeido-chan\c- nos hizo aperitivos, así que al menos tenemos eso."; +SWWM_SAYACONSTABLEB1 = "En serio que es tan atenta, esa chica..."; // Ibuki reply +SWWM_SAYACONSTABLEC1 = "Aunque puedas oír como cuchichea maldiciones por todo lo que está pasando ahí."; +SWWM_SAYACONSTABLED1 = "Ya, esa sí que es nuestra \cvMeido\c-."; // Ibuki reply +// Nave +SWWM_SAYANAVEA1 = "Ojalá pudiera tomar prestado el poder anti-realidad de los \ctMishe\c- para destruir este mundo entero."; +SWWM_SAYANAVEA2 = "En serio estoy cabreada, todos lo estamos. Joder, hasta \cxKirin\c- está furioso, y ya no podemos calmarlo."; +SWWM_SAYANAVEB1 = "Es algo así como adorable y preocupante a la vez."; // Ibuki reply +SWWM_SAYANAVEC1 = "¡NNNNNNNNGGGGGHHHHHHHH!"; // Kirin reply +SWWM_SAYANAVED1 = "\cxKirin-kun\c-, te vas a asfixiar si sigues gritando así contra la almohada."; +SWWM_SAYANAVEE1 = "A lo mejor es lo que quiere, \cgSaya\c-. Busca la dulce libertad de la muerte para encontrar la paz interior."; // Ibuki +SWWM_SAYANAVEF1 = "Si no fuera inmortal eso sería la cosa más jodidamente horrible que podrías decir, \crIbuki\c-."; +// Dark Citadel +SWWM_SAYADEATHKINGS1 = "Estoy tan cabreada que pegaría un puñetazo a través de la realidad para mandar a la mierda a los reyes estos."; +// Kirin's Thrilling Commentary on Puzzles™ +// first puzzle switch on Seven Portals +SWWM_KIRINPUZZLEA1 = "Un peculiar mecanismo... Supuestamente cita ser parte de algo mayor, haciéndose llamar \"puzzle\"."; +SWWM_KIRINPUZZLEA2 = "\cgSayacchi\c- mencionó que los encontrarías. Es algo ciertamente intrigante..."; +// second puzzle switch on Seven Portals +SWWM_KIRINPUZZLEB1 = "Otro más... Interesante..."; +// third puzzle switch on Seven Portals +SWWM_KIRINPUZZLEC1 = "Me falta ver que exactamente hace de esto un \"puzzle\". No es mas que una búsqueda de interruptores."; +SWWM_KIRINPUZZLEC2 = "Difícilmente un desafío para el intelecto de uno, ¿no crees, \cdDemo-chan\c-?"; +// first puzzle switch on Shadow Wood +SWWM_KIRINPUZZLED1 = "Parece ser que estos \"interruptores de puzzle\" simplemente siguen apareciendo a tu paso."; +SWWM_KIRINPUZZLED2 = "Tengo la certeza de que ambos estamos cansados de verlos."; +// fourth puzzle switch on Shadow Wood +SWWM_KIRINPUZZLEE1 = "Estos supuestos \"puzzles\"... Son un insulto a nuestra inteligencia."; +SWWM_KIRINPUZZLEE2 = "... Espero no estar enviando demasiados mensajes."; +// first puzzle switch on Heresiarch's Seminary +SWWM_KIRINPUZZLEF1 = "¿Cuando acabará? ¿¿¿Cuantas más fracciones de \"puzzles\" debemos resolver???"; +SWWM_KIRINPUZZLEF2 = "¿Es así como ese sayzha axhkhashaar se atreve a mofarse de nosotros? ¿Con estos tediosos juegos?"; +SWWM_KIRINPUZZLEF3 = "Son... Nnngh... ¡Kheza sakharei!"; +SWWM_KIRINPUZZLEG1 = "\cxKirin-kun\c-, creo que te estás dejando afectar demasiado por esto."; // Saya reply +SWWM_KIRINPUZZLEH1 = "Sí... Yo... Voy a tumbarme un rato, p-perdón..."; +SWWM_KIRINPUZZLEI1 = "... Pobre. Aunque estoy de acuerdo con él... Esta mierda es que te pone de los nervios, ¿a que sí?"; // Saya reply +SWWM_KIRINPUZZLEI2 = "Bueno... Me voy a darle mimos a \cxKirin-kun\c-. No te preocupes, se pondrá mejor. Está en buenas manos."; +// first puzzle switch on Blight +SWWM_KIRINPUZZLEJ1 = "No podemos huír, ¿no? Estos \"puzzles\" todavía nos persiguen incluso ahora..."; +SWWM_KIRINPUZZLEJ2 = "Este maldito lugar... Plagado por estos viles mecanismos... Juro que jamás daré un paso en él."; +// last puzzle switch on Blight +SWWM_KIRINPUZZLEK1 = "Por favor... Haz que pare..."; +SWWM_KIRINPUZZLEL1 = "\cxKirin-kun\c-, oye... No pasa nada. Toma... Bebe, te ayudará a relajarte.\c-"; // Ibuki reply +SWWM_KIRINPUZZLEM1 = "Glu... Glu... Glu..."; +SWWM_KIRINPUZZLEN1 = "Bueno, pero míralo... Ahí bebiéndolo todo como un campeón."; // Saya reply +SWWM_KIRINPUZZLEO1 = "Ya sabes como va el tema... En cuanto encuentran una teta de la que mamar, ya se acabaron todos sus problemas..."; // Ibuki reply +SWWM_KIRINPUZZLEP1 = "Sabes que \cdDemo-chan\c- puede leer lo que decimos, ¿verdad?"; // Saya reply +SWWM_KIRINPUZZLEQ1 = "Oh, estoy segura de que le encantaría tomar su turno una vez se acabe la misión, ¿hm?"; // Ibuki reply +// first puzzle switch on Constable's Gate +SWWM_KIRINPUZZLER1 = "Más vale que este sea el último de estos \"puzzles\" que vayamos a encontrar..."; +SWWM_KIRINPUZZLER2 = "Urp..."; +SWWM_KIRINPUZZLER3 = "Mis disculpas."; +SWWM_KIRINPUZZLES1 = "Estaba buena la leche, ¿a que sí?"; // Saya reply +SWWM_KIRINPUZZLET1 = "Ciertamente... Doy gracias por la bendición de \crIbuki\c-."; +SWWM_KIRINPUZZLEU1 = "Hacer que pueda lactar a voluntad es una bendición, vaya que sí. Seguro que \cdDemo\c- está también de acuerdo."; // Saya reply +// super secret cheats +SWWM_ZNVTXT1 = "\cdDemolicionista\c-, soy yo, \chZanaveth El Corruptor\c-. He testificado del acto que has actuado, sí."; +SWWM_ZNVTXT2 = "Son \cf%d\c- años... y las mágicas palabras veo en nuevo. Muy impresionada, múchamente impresionada."; +SWWM_ZNVTXT3 = "Así, puedes hacer la cosa... Como los \ctMishe\c- enseñaron también a mí. Una sorpresa no esperada, sí."; +SWWM_ZNVTXT4 = "Hay tantas muchas palabras poderosas a usar, \cdDemolicionista\c-. Sigue siguiendo para descubrirlas todas."; +SWWM_ZNVTXT5 = "Y ahora debo dar marcha. A favor extender saludos a tía \cgSaya\c- por parte mía. Buena suerte, \cdDemolicionista\c-."; // boss tags BT_BRUISERS = "Hermanos de Guerra"; BT_CYBIE = "Tirano de Babel"; @@ -672,10 +1039,10 @@ SWWM_INTERTIP18 = "Todas las armas tienen un ataque rápido a melé disponible a SWWM_INTERTIP19 = "Con la combinación adecuada de impulsar y saltar por las paredes, es perfectamente posible mantenerse en el aire durante largos periodos de tiempo."; SWWM_INTERTIP20 = "En multijugador, cualquier llave que recojas será compartida inmediatemente con otros jugadores."; SWWM_INTERTIP21 = "¡Aumenta tu puntuación! Cuantos más enemigos elimines, mejor. No te olvides de hacer uso de esos puntos en la tienda in-game cuando puedas."; -SWWM_INTERTIP22 = "Con el ritmo adecuado, puedes usar el ataque rápido a melé para desviar proyectiles. Incluso es posible mandarlas de vuelta a su dueño, con daño incrementado si te encuentras bajo los efectos de un Ragekit."; +SWWM_INTERTIP22 = "Con el ritmo adecuado, puedes usar el ataque rápido a melé para desviar proyectiles. Incluso es posible mandarlos de vuelta a su dueño, con daño incrementado si te encuentras bajo los efectos de un Ragekit."; SWWM_INTERTIP23 = "¿Sabías que Saya realmente odia la UAC?\n\n¿Que? ¿Ya sabías eso? Vaya, pues entonces ya no se me ocurre que otra cosa contarte."; SWWM_INTERTIP24 = "Puedes embestir contra enemigos para empujarlos fuera de tu camino. Los más débiles puede que mueran inmediatamente por el impacto y salgan volando."; -SWWM_INTERTIP25 = "Si haces un sprint en el aire apuntando directamente al suelo, puede que aterrices con la fuerza suficiente para causar una onda de choque, apartando a la mayoría de enemigos a tu alrededor."; +SWWM_INTERTIP25 = "Si haces una embestida en el aire apuntando directamente al suelo, puede que aterrices con la fuerza suficiente para causar una onda de choque, apartando a la mayoría de enemigos a tu alrededor."; SWWM_INTERTIP26 = "Puedes activar objetos y abrir puertas a puñetazos. Esto también se puede hacer con la munición de Bola de Plomo del Trabuco, a excepción de los botones de salida."; SWWM_INTERTIP27 = "Los efectos corrosivos de los Cartuchos Negros del Trabuco pueden acoplarse, hasta un grado letal si alcanzas un objetivo de lleno. Además de eso, otros objetivos cercanos puede que también noten cierto dolor extra de los humos nocivos que se desprenderán, y dispersen sus efectos incluso más allá."; SWWM_INTERTIP28 = "La munición incendiaria es inefectiva bajo el agua, por razones obvias."; @@ -788,6 +1155,16 @@ SWWM_INTERTIP137 = "El Rifle Mortal (\"Míster\" para los amigos) fue ideado com SWWM_INTERTIP138 = "La Rafan-Kos es ciertamente un Arma Definitiva, como su nombre implica."; SWWM_INTERTIP139 = "Se dice que la Mano Divina trae consigo solo una minúscula fracción del poder de su creador original. El tipo debe de pegar unas hostias de aúpa, entonces."; SWWM_INTERTIP140 = "El chasis de la Demolicionista tiene un ligero aroma a lima."; +SWWM_INTERTIP141 = "\"En el futuro, todo es Cromado.\"\n\nNunca una frase de una serie de dibujos pudo ser más acertada tras el inevitable auge de la supremacía web-app."; +SWWM_INTERTIP142 = "Este mod está en desarrollo constante. Recuerda reportar cualquier bug que encuentres."; +SWWM_INTERTIP143 = "Si no sabes como usar un ítem o arma, recuerda que puedes comprobar el Menú de Demolicionista en cualquier momento para buscar información sobre ello una vez lo recojas por primera vez."; +SWWM_INTERTIP144 = "Recuerda mantenerte hidratad@[ao_esp]."; +SWWM_INTERTIP145 = "La mayoría de armas son explosivas, así que intenta no hacerte daño con ellas."; +SWWM_INTERTIP146 = "Escribir estos consejos realmente me deja agotada."; +SWWM_INTERTIP147 = "¿Ayuda! ¡Estoy atrapada en una fábrica de consejos!"; +SWWM_INTERTIP148 = "La Marca de Devastación y el Ragekit se pueden combinar. Ya sabes, si quieres matar un Ciberdemonio con un solo puñetazo. Realmente hace que te sientas como cierto hombre calvo con capa."; +SWWM_INTERTIP149 = "Toma siempre descansos durante sesiones de juego largas. Jugarás mejor y tendrás que soportar menos estrés."; +SWWM_INTERTIP150 = "Este es el consejo número 150. No me puedo creer que haya escrito tantos."; // intermission fanart SWWM_FANART = "Arte: "; // achievements @@ -813,6 +1190,8 @@ SWWM_ACHIEVEMENT_BARRIER_TAG = "Filtro Verde"; SWWM_ACHIEVEMENT_BARRIER_TXT = "Usa %d Barreras Elementales"; SWWM_ACHIEVEMENT_BASEBALL_TAG = "¡Oh es un Béisbol!"; SWWM_ACHIEVEMENT_BASEBALL_TXT = "Haz una parada perfecta a un Alma Perdida con el Silver Bullet"; +SWWM_ACHIEVEMENT_BLAZE_TAG = "Echando Humo"; +SWWM_ACHIEVEMENT_BLAZE_TXT = "Termina un mapa en 4 minutos y 20 segundos"; SWWM_ACHIEVEMENT_BONK_TAG = "Resistente a Choques"; SWWM_ACHIEVEMENT_BONK_TXT = "Choca %d veces"; SWWM_ACHIEVEMENT_BOSSDASH_TAG = "Cabezonería"; @@ -842,7 +1221,7 @@ SWWM_ACHIEVEMENT_CYBULLY_TXT = "Mata a un Ciberdemonio con su propio cohete"; SWWM_ACHIEVEMENT_CUM_TAG = "Soltando Todo el Chorro"; SWWM_ACHIEVEMENT_CUM_TXT = "Melt a grand total of %d enemies with the Rafan-Kos"; SWWM_ACHIEVEMENT_DAB_TXT = "Revienta %d enemigos con el Mazo Itamex"; -SWWM_ACHIEVEMENT_DAKKA_TXT = "Dispara la Ametralladora Sheen durante un minuto entero"; +SWWM_ACHIEVEMENT_DAKKA_TXT = "Mantén el fuego secundario de la Ametralladora Sheen durante un minuto entero"; SWWM_ACHIEVEMENT_DEADEYE_TAG = "En el Blanco"; SWWM_ACHIEVEMENT_DEADEYE_TXT = "Realiza %d disparos consecutivos con la Pistola de Explodium sin fallar"; SWWM_ACHIEVEMENT_DEVA_TXT = "Usa %d Marcas de Devastación"; @@ -851,26 +1230,6 @@ SWWM_ACHIEVEMENT_DIVINE_TAG = "Deleite Divino"; SWWM_ACHIEVEMENT_DIVINE_TXT = "Usa %d Sprites Divinos"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Maestro del Grafiti"; SWWM_ACHIEVEMENT_DOODLE_TAG = "Garabatea mostachos en %d caras de demonio"; -SWWM_ACHIEVEMENT_DOOMBOSS1_TAG = "Dúo Dinámico"; -SWWM_ACHIEVEMENT_DOOMBOSS1_TXT = "Derrota a los Hermanos de Guerra"; -SWWM_ACHIEVEMENT_DOOMBOSS2_TAG = "Cacho Carne"; -SWWM_ACHIEVEMENT_DOOMBOSS2_TXT = "Derrota al Tirano de Babel"; -SWWM_ACHIEVEMENT_DOOMBOSS3_TAG = "Todo Sesos"; -SWWM_ACHIEVEMENT_DOOMBOSS3_TXT = "Derrota a la Maestra Arácnida"; -SWWM_ACHIEVEMENT_DOOMBOSS4_TAG = "Más Sesos"; -SWWM_ACHIEVEMENT_DOOMBOSS4_TXT = "Derrota a la Hermana Arácnida"; -SWWM_ACHIEVEMENT_DOOMBOSS5_TAG = "Limpieza Final"; -SWWM_ACHIEVEMENT_DOOMBOSS5_TXT = "Completa el Desafío de Baphomet"; -SWWM_ACHIEVEMENT_DOOMBOSS6_TAG = "Simplemente Muerto"; -SWWM_ACHIEVEMENT_DOOMBOSS6_TXT = "Derrota al Escuadrón de Demonios Biomecánicos"; -SWWM_ACHIEVEMENT_DOOMBOSS7_TAG = "Caída del Titán"; -SWWM_ACHIEVEMENT_DOOMBOSS7_TXT = "Derrota al Icono del Pecado"; -SWWM_ACHIEVEMENT_DOOMBOSS8_TAG = "Dispara Hasta que Muera"; -SWWM_ACHIEVEMENT_DOOMBOSS8_TXT = "Derrota al Último Tirano"; -SWWM_ACHIEVEMENT_DOOMBOSS9_TAG = "Maldad Eterna"; -SWWM_ACHIEVEMENT_DOOMBOSS9_TXT = "Derrota al Archangelus"; -SWWM_ACHIEVEMENT_DOOMBOSS10_TAG = "Un Mirador de lo más Insano"; -SWWM_ACHIEVEMENT_DOOMBOSS10_TXT = "Conquista los Reinos Divididos"; SWWM_ACHIEVEMENT_DOSH_TAG = "Capitalismo Desenfrenado"; SWWM_ACHIEVEMENT_DOSH_TXT = "Acumula ¥1.000.000.000 entre todas tus partidas"; SWWM_ACHIEVEMENT_EVERYTHING_TAG = "La Demolicionista"; @@ -904,42 +1263,10 @@ SWWM_ACHIEVEMENT_GRAVITY_TAG = "Ascenso Decente"; SWWM_ACHIEVEMENT_GRAVITY_TXT = "Usa %d Supresores de Gravedad"; SWWM_ACHIEVEMENT_GRENADE_TAG = "Cataplúm"; SWWM_ACHIEVEMENT_GRENADE_TXT = "Mata %d enemigos con cargadores de Explodium plantados"; -SWWM_ACHIEVEMENT_HERETICBOSS1_TAG = "Cabezas Locas"; -SWWM_ACHIEVEMENT_HERETICBOSS1_TXT = "Derrota a los Liches de Hierro"; -SWWM_ACHIEVEMENT_HERETICBOSS2_TAG = "La Toreada Padre"; -SWWM_ACHIEVEMENT_HERETICBOSS2_TXT = "Derrota a los Sirvientes Mazotauros"; -SWWM_ACHIEVEMENT_HERETICBOSS3_TAG = "Abracadabra Gané"; -SWWM_ACHIEVEMENT_HERETICBOSS3_TXT = "Derrota a D'Sparil"; -SWWM_ACHIEVEMENT_HERETICBOSS4_TAG = "¿Que es tan Gracioso?"; -SWWM_ACHIEVEMENT_HERETICBOSS4_TXT = "Derrota a los Liches de Hierro... otra vez"; -SWWM_ACHIEVEMENT_HERETICBOSS5_TAG = "Grandes Múusculos"; -SWWM_ACHIEVEMENT_HERETICBOSS5_TXT = "Derrota a los Sirvientes Mazotauros... otra vez"; -SWWM_ACHIEVEMENT_HEXENBOSS1_TAG = "Simplemente Funciona"; -SWWM_ACHIEVEMENT_HEXENBOSS1_TXT = "Derrota al Wyvern Mortal"; -SWWM_ACHIEVEMENT_HEXENBOSS2_TAG = "Magia Potagia"; -SWWM_ACHIEVEMENT_HEXENBOSS2_TXT = "Derrota al Heresiarca"; -SWWM_ACHIEVEMENT_HEXENBOSS3_TAG = "¿Tú Otra Vez?"; -SWWM_ACHIEVEMENT_HEXENBOSS3_TXT = "Derrota a otro Heresiarca"; -SWWM_ACHIEVEMENT_HEXENBOSS4_TAG = "Dominación"; -SWWM_ACHIEVEMENT_HEXENBOSS4_TXT = "Derrota a Zedek"; -SWWM_ACHIEVEMENT_HEXENBOSS5_TAG = "Excomunión"; -SWWM_ACHIEVEMENT_HEXENBOSS5_TXT = "Derrota a Traductus"; -SWWM_ACHIEVEMENT_HEXENBOSS6_TAG = "Odio los Puzzles"; -SWWM_ACHIEVEMENT_HEXENBOSS6_TXT = "Derrota a Menelkir"; -SWWM_ACHIEVEMENT_HEXENBOSS7_TAG = "Adórame Ésta"; -SWWM_ACHIEVEMENT_HEXENBOSS7_TXT = "Derrota a Korax"; -SWWM_ACHIEVEMENT_HEXENBOSS8_TAG = "Otro Más"; -SWWM_ACHIEVEMENT_HEXENBOSS8_TXT = "Derrota a otro Heresiarca más"; -SWWM_ACHIEVEMENT_HEXENBOSS9_TAG = "Y Otro Más"; -SWWM_ACHIEVEMENT_HEXENBOSS9_TXT = "Derrota... sí, otro Heresiarca más"; -SWWM_ACHIEVEMENT_HEXENBOSS10_TAG = "Y San Se Acabó"; -SWWM_ACHIEVEMENT_HEXENBOSS10_TXT = "Derrota al último Heresiarca"; -SWWM_ACHIEVEMENT_HEXENBOSS11_TAG = "¿No os Había Partido el Culo Antes?"; -SWWM_ACHIEVEMENT_HEXENBOSS11_TXT = "Derrota a los Reyes de la Muerte"; SWWM_ACHIEVEMENT_HND_TAG = "Mediodía"; SWWM_ACHIEVEMENT_HND_TXT = "Realiza %d disparos mortales en una única recarga de Puntzer Beta"; SWWM_ACHIEVEMENT_HURRY_TAG = "Con Prisas"; -SWWM_ACHIEVEMENT_HURRY_TXT = "Termina un mapa con un 0% de muertes, ítems y secretos"; +SWWM_ACHIEVEMENT_HURRY_TXT = "Termina un mapa con 0 muertes, ítems y secretos"; SWWM_ACHIEVEMENT_ICE_TXT = "Empala %d enemigos con el disparo secundario del Encendedor de Fuego Negro"; SWWM_ACHIEVEMENT_JUMP_TAG = "Verticalidad"; SWWM_ACHIEVEMENT_JUMP_TXT = "Salta paredes %d veces"; @@ -977,7 +1304,7 @@ SWWM_ACHIEVEMENT_PARRY_TXT = "Desvía %d proyectiles"; SWWM_ACHIEVEMENT_PAR_TAG = "Rápido"; SWWM_ACHIEVEMENT_PAR_TXT = "Supera el tiempo par en %d mapas"; SWWM_ACHIEVEMENT_PEACE_TAG = "Pacifista"; -SWWM_ACHIEVEMENT_PEACE_TXT = "Termina un mapa sin matar nada"; +SWWM_ACHIEVEMENT_PEACE_TXT = "Termina un mapa sin causar daño"; SWWM_ACHIEVEMENT_PENE_TAG = "Penetrador"; SWWM_ACHIEVEMENT_PENE_TXT = "Atraviesa %d enemigos en fila con un solo secundario de la Gran Lanza"; SWWM_ACHIEVEMENT_PLASMA_TAG = "Echando Plasmas"; @@ -986,7 +1313,7 @@ SWWM_ACHIEVEMENT_PLUSH_TAG = "Amorcito"; SWWM_ACHIEVEMENT_PLUSH_TXT = "Juega con el peluche de Saya %d veces en la misma partida"; $ifgame(hexen) SWWM_ACHIEVEMENT_PLUSH_TXT = "Juega con los peluches de Saya o Kirin %d veces en la misma partida"; SWWM_ACHIEVEMENT_PUZZLE_TAG = "Hasta Kirin está Cabreado"; -SWWM_ACHIEVEMENT_PUZZLE_TXT = "Resuelve %d \"puzzles\""; +SWWM_ACHIEVEMENT_PUZZLE_TXT = "Resuelve todas las partes de \"puzzles\" en la misma partida"; SWWM_ACHIEVEMENT_RAGE_TAG = "No Hablo me Enfado"; SWWM_ACHIEVEMENT_RAGE_TXT = "Usa %d Ragekits"; SWWM_ACHIEVEMENT_RAIL_TAG = "Metida de Través"; diff --git a/language.es_lore b/language.es_lore index ad57de57f..ed022ce91 100644 --- a/language.es_lore +++ b/language.es_lore @@ -1,24 +1,5 @@ // this file was generated by mklang, do not edit directly [es] -SWWM_LORETAG_AA12MODEL = "Réplica AA-12"; -SWWM_LORETXT_AA12MODEL = -"\cxDesignación:\c-\n" -"\cf Auto Assault-12\c-\n" -"\cxManufacturer:\c-\n" -"\cf Ninnacht Armaments (extinta)\c-\n" -"\cxClasificación:\c-\n" -"\cf Escopeta Automática\c-\n" -"\n" -"Una reliquia del pasado, o al menos un modelo en réplica para coleccionistas. No es funcional, pero la atención al detalle es sobresaliente.\n" -"\n" -"Aunque originalmente poco conocida, la AA-12 alcanzó nuevas cimas en popularidad tras la adquisición de sus derechos de diseño y fábrica por la ahora extinta Estadounidense \cfNinnacht Armaments\c-, tras lo cual recibió varias mejoras, e incluso sirvió como base para muchas otras escopetas en consiguiente (incluyendo algunas de \cfBlackmann Arms\c-, quienes compraron la empresa en 2018).\n" -"\n" -"Ligera, cómoda, y con un diseño fluido y fácilmente reconocible, es un arma que ha ocupado un hueco en los corazones de muchos entusiastas. Ha incluso probado sobrevivir la prueba del tiempo, siendo demostrado por el \cfOni Rojo\c- al haberla elegido como una de sus armas durante su tiempo en la \cfTercera Guerra Mundial\c- (y su siniestro desenlace).\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfIbuki en serio adora esta cosa. Casi que puedo echar culpa a que le enseñara cierto personaje de cierto juego que la usa. Se puso toda obsesionada, en serio. Tengo entendido que a veces... con ella... bueno, ya te lo imaginas. Tantos años y aun le encanta traerla al campo de tiro para dispararlo todo, ahí... gimiendo de placer luego. Dios... es que es muy raro, pero me pone basto.\c-\n" -"\n" -"\cfOh y eso me recuerda, uno de estos días tengo que ver si puedo hacer una maidbot de su waifu. Sería divertido, aunque no creo que se sienta y comporte igual, aunque se le parezca.\c-"; SWWM_LORETAG_ADMINISTRATORS = "Administradores"; SWWM_LORETXT_ADMINISTRATORS = "\cxNombre:\c-\n" @@ -343,7 +324,7 @@ SWWM_LORETXT_BLACKFIREIGNITER = "\n" "\cfFuego Secundario:\c- Estallidos concentrados que forman lanzas de aire supercongelado las cuales empalarán objetivos pequeños, o simplemente los atravesarán.\n" "\n" -"\cfRecarga:\c- Acopla un frasco para rellenar la reserva interna de maná oscuro del arma. El frasco permanecerá enganchado hasta que se haya vaciado, ya que de otro modo podría escapar energía residual y causar daño al usuario. Si hay un frasco vacío acoplado, una segunda acción de recarga lo desacoplará. Los frascos pueden ser usados aun si el depósito está lleno, y actuarán como un \"búfer\" extra de maná hasta vaciarse.\n" +"\cfRecarga:\c- Acopla hasta dos frascos para rellenar la reserva interna de maná oscuro del arma. Cada frasco permanecerá enganchado hasta que se haya vaciado, ya que de otro modo podría escapar energía residual y causar daño al usuario. Si hay un frasco vacío acoplado, la acción de recarga lo desacoplará primero. Los frascos pueden ser usados aun si el depósito está lleno, y actuarán como un \"búfer\" extra de maná hasta vaciarse.\n" "\n" "\cxNotas de Saya:\c-\n" "\cfO sea, que Misa-Misa tiene otros juguetes aparte del trasto enorme ese. Mola que le hagan encargos y tal, el rollito de canela es muy popular por ahí, jejeje...\c-\n" @@ -385,86 +366,6 @@ SWWM_LORETXT_BLASTSUIT = "\n" "\cxNotas de Saya:\c-\n" "\cfNo me preguntes, en serio que no sé a que viene todo esto de \"unidades de daño\". Pedimos al friki ese de Cyrus Enterprises que hiciera las pruebas por nosotros. Es que en serio, siempre hace lo mismo, con eso de que todo es como un puto videojuego para él, igual que insiste en hacer toda la mierda esa de desperdigar todo tu equipamiento a propósito para que lo recojas. PERO no puedo hacer nada. Es quien paga todo esto... Sí, ¿todo ese pastizal que vas acumulando? Es él, lo llama tu \"puntuación\". En serio... puto friki...\c-"; -SWWM_LORETXT_BRCALBUM = -"\cxTítulo:\c-\n" -"\cf Counter-Inquisition\c-\n" -"\cxArtista:\c-\n" -"\cf Black Rat's Coven\c-\n" -"\cxAño:\c-\n" -"\cf 2100\c-\n" -"\cxGénero:\c-\n" -"\cf Metal Barroco\c-\n" -"\n" -"Publicado al entrar en un nuevo siglo, \cfCounter-Inquisition\c- es una colección de algunos de los temas más famosos de la banda Británica \cfBlack Rat's Coven\c-. Todo un siglo de historia musical, desde los humildes orígenes de la banda ya por el año 2006, condensado en un vinilo de puro \cfOckophux\c-, un valioso metal del mundo \cfAnarukon\c- del que se dice que ahuyenta espíritus malignos.\n" -"\n" -"\cfCara A:\c-\n" -" 1. Walpurgisnacht\n" -" 2. Blood Moon Cantata\n" -" 3. Army of Lust\n" -" 4. Your Dark Desire\n" -" 5. Red Star of Innocence\n" -" 6. Dragonheart\n" -"\cfCara B:\c-\n" -" 7. Black Rat's Coven (Medley)\n" -"\n" -"Dada su distribución comercial en un formato tan exclusivo, los compradores también tuvieron acceso a una descarga digital de calidad sin pérdidas desde el sitio web de Black Rat's Coven. Adicionalmente, la descarga digital también incluye arte de caratula de alta resolución, y entrevistas en video exclusivas con cada una de las cuatro figurantes de la banda, ofreciendo una vista retrospectiva sobre su historia juntas.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfJOOOOOOOOODEEEEEEEER...\c-\n" -"\n" -"\cfEsto si que es UNA BUENA MÚSICA DE COJONES, en serio. Ashley-san y el resto... Desde que Yu-chan me metió en todo este tema ya hace tanto tiempo he estado enganchada. Y luego la cosa tremenda esa pasó, Yu-chan y Ashley-san se conocieron, y salieron, y se casaron... Y madre mía. No me puedo creer que esté tan metida con todos los miembros de una de mis bandas favoritas de todos los tiempos (bueno, más o menos).\c-\n" -"\n" -"\cfDemo-chan, en serio, es que no entiendo como tengo tanta suerte.\c-\n" -""; -SWWM_LORETXT_BRCALBUM2 = -"\cxTítulo:\c-\n" -"\cf Counter-Inquisition\c-\n" -"\cxArtista:\c-\n" -"\cf Black Rat's Coven\c-\n" -"\cxAño:\c-\n" -"\cf 2100\c-\n" -"\cxGénero:\c-\n" -"\cf Metal Barroco\c-\n" -"\n" -"Publicado al entrar en un nuevo siglo, \cfCounter-Inquisition\c- es una colección de algunos de los temas más famosos de la banda Británica \cfBlack Rat's Coven\c-. Todo un siglo de historia musical, desde los humildes orígenes de la banda ya por el año 2006, condensado en un vinilo de puro \cfOckophux\c-, un valioso metal del mundo \cfAnarukon\c- del que se dice que ahuyenta espíritus malignos.\n" -"\n" -"\cfCara A:\c-\n" -" 1. Walpurgisnacht\n" -" 2. Blood Moon Cantata\n" -" 3. Army of Lust\n" -" 4. Your Dark Desire\n" -" 5. Red Star of Innocence\n" -" 6. Dragonheart\n" -"\cfCara B:\c-\n" -" 7. Black Rat's Coven (Medley)\n" -"\n" -"Dada su distribución comercial en un formato tan exclusivo, los compradores también tuvieron acceso a una descarga digital de calidad sin pérdidas desde el sitio web de Black Rat's Coven. Adicionalmente, la descarga digital también incluye arte de caratula de alta resolución, y entrevistas en video exclusivas con cada una de las cuatro figurantes de la banda, ofreciendo una vista retrospectiva sobre su historia juntas.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfJOOOOOOOOODEEEEEEEER...\c-\n" -"\n" -"\cfEsto si que es UNA BUENA MÚSICA DE COJONES, en serio. Ashley-san y el resto... Desde que Yu-chan me metió en todo este tema ya hace tanto tiempo he estado enganchada. Y luego la cosa tremenda esa pasó, Yu-chan y Ashley-san se conocieron, y salieron, y se casaron... Y madre mía. No me puedo creer que esté tan metida con todos los miembros de una de mis bandas favoritas de todos los tiempos (bueno, más o menos).\c-\n" -"\n" -"\cfDemo-chan, en serio, es que no entiendo como tengo tanta suerte.\c-\n" -"\n" -"\cfActualización: ¿Recuerdas mi ida de olla cuando tocaron esa canción en nuestra boda? ¿Red Star of Innocence? Dios es que soy puto idiota. Me dio un flashback inmediatamente, recordando aquella vez que le dije a Ashley-san que no tenía ningún interés en conocer a Kirin-kun (compuso esa canción para su 12º cumpleaños). Supongo que tendré que tragarme mis palabras ahora, ¿no?\c-"; -SWWM_LORETAG_CACTUSHEGE = "Cactus Hege"; -SWWM_LORETXT_CACTUSHEGE = -"\cxDesignación:\c-\n" -"\cf Cactus Hege\c-\n" -"\cxClasificación:\c-\n" -"\cf Planta de Maceta\c-\n" -"\cxOrígen:\c-\n" -"\cf Finlandia\c-\n" -"\n" -"El \cfCactus Hege\c- es un pequeño cactus de maceta bastante popular en Finlandia. Se dice que tiene una habilidad para absorber humedad tan potente que puede incluso hacer que la gente sienta sed a su alrededor. No está claro exactamente como ha surgido esta particular especie de cactus, algunos dicen que simplemente ha aparecido de la nada.\n" -"\n" -"Hay también rumores de que puede hacerte desarrollar un gusto por el arte erótico de tipo furry, aunque no hay pruebas sólidas de esto y es simplemente eso, solo rumores.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfCreo que es una monada, a su manera. Pequeño, redondito, ahí metido en su macetita. Debería pillarme uno, a lo mejor.\c-\n" -"\n" -"\cfNi siquiera me preocupan esos rumores. No entiendo el estigma que hay con los furros, o por qué se puso la cosa así en todos estos años. El mundo se ha vuelto loco, te digo.\c-"; SWWM_LORETAG_CANDYGUN = "Pistola Caramelo"; SWWM_LORETXT_CANDYGUN = "\cxDesignación:\c-\n" @@ -568,6 +469,36 @@ SWWM_LORETXT_CYRUS = "\cfHala, ya lo he dicho. Es que sí, vale, lo que hace, mola y tal, pero MADRE DE DIOS es que el tío me saca de quicio con toda su mierda friki de videojuegos. ¿No dejarte ir por ahí con todo equipado, y en vez de eso CISCÁNDOLO TODO POR AHÍ para que lo recojas? Esa es una. Que después de cada misión decida quitarte TODO lo que pillaste, es otra cosa también. Pero, que nos suelte unas pelillas cada vez que revientes a algún maleante, eso puedo aceptarlo, que nos vale para cubrir los costes de todo.\c-\n" "\n" "\cfA ver, puede que me ponga de los nervios a veces, pero el tío fue mi primer socio ahí en plan negocios serios, y joder, tampoco es tan malo aparte de todo el frikismo que suelta... Y bueno, siendo sincera, yo también soy toda una friki repelente, y puedes citarme en eso.\c-"; +SWWM_LORETXT_CYTHO = +"\cxNombre Completo:\c-\n" +"\cf Archiduque Cytho de la Casa Valathor\c-\n" +"\cxNacionalidad:\c-\n" +"\cf Kuriste\c-\n" +"\cxFecha de Nacimiento:\c-\n" +"\cf 2008-10-09\c-\n" +"\cxTwitter:\c-\n" +"\cf @incuvalathor\c-\n" +"\n" +"Nacido en la ahora caída villa de Iskar en 2008 como uno de los varones más jóvenes de la humilde \cfCasa Valathor\c-, \cfCytho\c- entró al negocio familiar al llegar a la edad adulta, rápidamente ascendiendo en rango en la industria del trabajo sexual del \cfInfierno\c-, en parte dada su belleza innata, pero también por la rápida acumulación de \"clientes satisfechos\" a los que daría servicio regularmente, y los muchos alumnos que tomó bajo su tutela. Ya en 2028, había hecho de la Tierra su segundo hogar, donde abriría una cuenta en redes sociales como una forma más moderna de atraer nueva clientela.\n" +"\n" +"Un día, sin embargo, todo cambió. Un gran número de íncubos reportaría verse \"horrorizados\" por las peticiones excesivas de una mujer. Curioso, Cytho entonces se decidió a encontrarla, para ver que era exactamente lo que sus colegas encontraban tan irrazonable. Y así fue como conoció a \cfElena Yanikov XVI\c-, una mujer Anarukon \"bajo la maldición de una eterna soltería\", la cual tan desesperadamente deseaba encontrar marido que había recurrido finalmente a invocar demonios y suplicarles que se casen con ella. Como era de esperar, todos habían rechazado sus plegarias, sin importar cuanto lo intentara, ya que muchos demonios desconfían de su especie. Cytho, sin embargo, fue compasivo con ella, y aceptó, con una condición: Que tendrían primero una cita.\n" +"\n" +"Un tiempo después, el archiduque anunció su retiro del trabajo sexual, habiéndose \"reformado\" como el fiel marido de una mujer Anarukon. Mientras que sus amigos y familiares lo celebraron, otros vieron esto como una afrenta. La Casa Valathor fue criticada severamente por no renegar inmediatamente de él, hasta el punto que una pequeña guerra estalló, en la que la rival \cfCasa Irishtanar\c- arrasaría su pueblo natal como \"protesta\". Ese día, Cytho vería de cerca la crueldad de su propia gente, como único superviviente de aquella masacre.\n" +"\n" +"Desde entonces, vive en Boston con su mujer y sus tres hijas. El propósito de su cuenta en redes sociales ha cambiado al de comunicar las noticias de aquello que transcurre en su mundo natal, contrastadas con los muchos contactos que ha acumulado durante años, como representante de la subyugada población civil. Aunque la gran mayoría de la población de la Tierra no lo tomaría en serio, no hasta que empezara la \cfInvasión Demoníaca\c- de 2148.\n" +"\n" +"Denunciando la intervención de la \cfUAC\c-, posteó sobre los eventos en \cfFobos\c- y \cfDeimos\c- mucho antes de que la UAC los hiciese públicos, y proclamó que una invasión en la Tierra era inminente. Aun así pocos lo tomaron en serio, pero una entre ellos era su amiga \cfSaya Miyamoto\c-, de \cfAkari Labs\c-. Como inversor en su compañía, ya había garantizado anteriormente que tuviese los recursos y mano de obra necesarios para la tarea que le encomendaría: Construir un robot de combata que lucharía contra los invasores.\n" +"\n" +"Y así, a partir de su colaboración, nació la \cfDemolicionista\c-.\n" +"\n" +"\cxNotas de Saya:\c-\n" +"\cfDesde el primer momento que lo conocí, aquella primera vez que visité a la familia de Ellen-san, ya sabía que era más que un guapo y molón abuelete femboy demonio. Sí, Cytho-sama es la caña, y la sangre que corre por sus venas es mucho más noble que la de cualquier capullo pomposo con título que vaya por ahí.\c-\n" +"\n" +"\cfY sí, sorpresa sorpresa... Es tu padre (bueno, algo así). Pero eso ya lo sabías, ¿verdad?\c-\n" +"\n" +"\cfEn serio, si no fuera por él, todo esto nunca habría sido posible. Estamos en deuda con él... Solo espero que no tenga que pagarle con mi propio cuerpo (aunque tampoco me importaría, jijijiji).\c-\n" +"\n" +"\cfPS: Su nombre se pronuncia \"Kaizo\", lo has dicho mal todo el rato. Pero no te preocupes, no eres la primera.\c-"; SWWM_LORETXT_DECADEMECH = "\cxNombre:\c-\n" "\cf Decade Mechanics\c-\n" @@ -635,13 +566,13 @@ SWWM_LORETXT_DEMOLITIONIST = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor.\n" +"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre \cfSaya Miyamoto\c- y el \cfArchiduque Cytho Valathor\c-, representante de la población civil del \cfInfierno\c-.\n" "\n" "Cada unidad está equipada con varios componentes de terceros, tal como los \cfImpulsores JetBurst™\c- a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores \cfHammerspace™\c-, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular \cfCinturón Útil Magnético de Symnatek\c-, o su potente \cfBatería de Microfusión Celestine\c-, cortesía del \cfInstituto Tecnológico Tach-Engine\c-, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su \cfCPU IK-349 de Nekuratek\c-. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs.\n" "\n" "El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las \cfMaidbots\c- de Akari Labs, el \cfFramework de IA Nekuronbot\c-, que fue proporcionado a \cfSaya Miyamoto\c- como un regalo de amistad de \cfZanaveth Nekuraku II\c-, la ingeniera jefe de IA y actual CEO de \cfNekuratek\c-. Gracias a esta tecnología, y combinado con muchos otros componentes como el \cfDisplay CuteEmotion\c- que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la \cfCaja de Voz Loudboi\c- que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades.\n" "\n" -"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el \cfInfierno\c-.\n" +"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el Infierno.\n" "\n" "De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de \cfDemo Miyamoto\c-, y Saya se refiere a ella como su \"hija\". Se puede describir a Demo como \"muy habladora\" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo.\n" "\n" @@ -665,13 +596,13 @@ SWWM_LORETXT_DEMOLITIONIST2 = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor.\n" +"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre \cfSaya Miyamoto\c- y el \cfArchiduque Cytho Valathor\c-, representante de la población civil del \cfInfierno\c-.\n" "\n" "Cada unidad está equipada con varios componentes de terceros, tal como los \cfImpulsores JetBurst™\c- a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores \cfHammerspace™\c-, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular \cfCinturón Útil Magnético de Symnatek\c-, o su potente \cfBatería de Microfusión Celestine\c-, cortesía del \cfInstituto Tecnológico Tach-Engine\c-, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su \cfCPU IK-349 de Nekuratek\c-. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs.\n" "\n" "El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las \cfMaidbots\c- de Akari Labs, el \cfFramework de IA Nekuronbot\c-, que fue proporcionado a \cfSaya Miyamoto\c- como un regalo de amistad de \cfZanaveth Nekuraku II\c-, la ingeniera jefe de IA y actual CEO de \cfNekuratek\c-. Gracias a esta tecnología, y combinado con muchos otros componentes como el \cfDisplay CuteEmotion\c- que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la \cfCaja de Voz Loudboi\c- que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades.\n" "\n" -"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el \cfInfierno\c-.\n" +"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el Infierno.\n" "\n" "De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de \cfDemo Miyamoto\c-, y Saya se refiere a ella como su \"hija\". Se puede describir a Demo como \"muy habladora\" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo.\n" "\n" @@ -695,13 +626,13 @@ SWWM_LORETXT_DEMOLITIONIST3 = "\cxTwitter:\c-\n" "\cf @demolitionist_bot\c-\n" "\n" -"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor.\n" +"El \cfDemolicionista\c- es uno de los mayores logros de \cfAkari Labs\c- en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado \cfOni Rojo\c-, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre \cfSaya Miyamoto\c- y el \cfArchiduque Cytho Valathor\c-, representante de la población civil del \cfInfierno\c-.\n" "\n" "Cada unidad está equipada con varios componentes de terceros, tal como los \cfImpulsores JetBurst™\c- a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores \cfHammerspace™\c-, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular \cfCinturón Útil Magnético de Symnatek\c-, o su potente \cfBatería de Microfusión Celestine\c-, cortesía del \cfInstituto Tecnológico Tach-Engine\c-, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su \cfCPU IK-349 de Nekuratek\c-. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs.\n" "\n" "El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las \cfMaidbots\c- de Akari Labs, el \cfFramework de IA Nekuronbot\c-, que fue proporcionado a \cfSaya Miyamoto\c- como un regalo de amistad de \cfZanaveth Nekuraku II\c-, la ingeniera jefe de IA y actual CEO de \cfNekuratek\c-. Gracias a esta tecnología, y combinado con muchos otros componentes como el \cfDisplay CuteEmotion\c- que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la \cfCaja de Voz Loudboi\c- que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades.\n" "\n" -"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el \cfInfierno\c-.\n" +"La primera unidad, conocida afectivamente como \cfDemo-chan\c- por Saya, fue desplegada en Junio de 2148 en el territorio de la \cfUnión de Estados\c- para combatir la invasión demoníaca atraída por las intervenciones de la \cfUAC\c- en el Infierno.\n" "\n" "De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de \cfDemo Miyamoto\c-, y Saya se refiere a ella como su \"hija\". Se puede describir a Demo como \"muy habladora\" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo.\n" "\n" @@ -900,7 +831,7 @@ SWWM_LORETXT_DOOMGUY = "\cxNotas de Saya:\c-\n" "\cfBien, COSA IMPORTANTE: no te acerques a este tío, no le digas nada, no te metas en medio. Si os cruzáis, quédate quieta y deja que trabaje, o si no puede que vaya y te pegue un tiro a ti también.\c-\n" "\n" -"\cfPor cierto, mi enhorabuena a los gorilas de la UAC por lo bien guardado que tienen todo sobre este tío. No sabemos ni como se llama, ni de su historial antes de que empezara toda esta mierda. Es que, ¿que clase de tío es? Tampoco he oído mucho de eso, aunque ¿creo que mencionaron por ahí que le gustan los conejos? ¿conejillos monos?\c-\n" +"\cfPor cierto, mi enhorabuena a los gorilas de la UAC por lo bien guardado que tienen todo sobre este tío. No sabemos ni como se llama, ni de su historial antes de que empezara toda esta mierda. Es que, ¿que clase de tío es? Tampoco he oído mucho de eso, aparte de la poca info que Cytho-sama pudo sacar de su anterior paseo por el Infierno, aunque ¿creo que mencionaron por ahí que le gustan los conejos? ¿conejillos monos?\c-\n" "\n" "\cfBueno, entonces, a lo mejor si haces como que esa cornamenta tuya son orejitas de conejo, puede que no te dispare, quien sabe...\c-"; SWWM_LORETXT_DOOMGUY2 = @@ -1499,16 +1430,14 @@ SWWM_LORETXT_HEAVYMAHSHEENGUN = "\n" "Aunque generalmente ideada para el uso montado, la operación al paso es posible, siempre y cuando el usuario tenga una servoarmadura de grado plata como mínimo para manejar el potente retroceso.\n" "\n" -"\cfFuego Primario:\c- Operación a 1050 RPM. El fuego prolongado en este modo es en teoría infinito, ya que el calor producido puede ser anulado eficientemente por los sistemas de refrigeración internos, es entonces el modo recomendado para la mayoría de situaciones.\n" +"\cfFuego Primario:\c- Operación a 700 RPM. El fuego prolongado en este modo es en teoría infinito, ya que el calor producido puede ser anulado eficientemente por los sistemas de refrigeración internos, es entonces el modo recomendado para la mayoría de situaciones.\n" "\n" -"\cfFuego Secundario:\c- Operación a 2100 RPM. El doble de balas, pero con mucho más calor. El fuego prolongado en este modo puede activar el bloqueo de seguridad del arma si el aumento de temperatura acerca el arma a niveles no operacionales.\n" +"\cfFuego Secundario:\c- Operación a 1050 RPM. Mayor velocidad, con calentamiento moderado. Aun es posible el fuego continuado en este modo, durante al menos un minuto aproximadamente desde un inicio en frío. Si necesitas repartir más dolor y tienes munición de sobra, usa esto.\n" "\n" -"\cfFuego Terciario:\c- Alterna la rotación automática, para reducir el tiempo de espera entre ráfagas. Ten en cuenta, sin embargo, que mientras esto esté activo, el ruido alertará a los enemigos.\n" +"\cfFuego Terciario:\c- Operación a 2100 RPM. Extremadamente rápido, con el mayor potencial de calor. El fuego prolongado en este modo puede activar rápidamente el bloqueo de seguridad del arma si el aumento de temperatura se acerca a niveles no operacionales. Si tienes prisa por matar y no te importa quedarte sin munición en pocos segundos, entonces elige esto.\n" "\n" "\cfRecarga:\c- No se necesita absolutamente recargar el arma, ya que se alimenta directamente desde Hammerspace, requiriendo solo un gran suministro de munición. Los contenedores de Hammerspace automáticamente conectarán todas las rondas necesarias para la alimentación enlazada.\n" "\n" -"\cfTécnicas:\c- Ambos gatillos pueden ser usados simultáneamente, permitiendo un modo híbrido de doble disparo, con tres veces la cantidad de balas. La liberación de calor de este modo es muy alta, sin embargo, así que no es recomendable el uso extendido.\n" -"\n" "\cxNotas de Saya:\c-\n" "\cfHEAVY MAH-SHEEN GUN!!!\c-\n" "\n" @@ -1685,51 +1614,6 @@ SWWM_LORETXT_IBUKI = "\cfOh ya, ¿sabias? Técnicamente, Ibuki es mi clon. Sí, puede que haya habido algún que otro cambio, pero si mi desarrollo no se hubiera parado así porque sí, quien sabe, a lo mejor me habría visto así de sexy algún día. Desde luego da que pensar, vaya...\c-\n" "\n" "\cfSí, también me he dado cuenta de que eso significa que en teoría lo estoy haciendo conmigo misma. ¿Y? ¿Acaso es eso un problema también?\c-"; -SWWM_LORETAG_IBUKIMILK = "Leche de Oni Rojo"; -SWWM_LORETXT_IBUKIMILK = -"\cxDesignación:\c-\n" -"\cf Leche de Oni Rojo 100% Natural\c-\n" -"\cxFabricante:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClasificación:\c-\n" -"\cf Producto Lácteo Fresco\c-\n" -"\n" -"Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La \cfLeche de Oni Rojo\c- está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de \cfAkari Labs\c-.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c-\n" -"\n" -"\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así.\c-"; -SWWM_LORETXT_IBUKIMILK2 = -"\cxDesignación:\c-\n" -"\cf Leche de Oni Rojo 100% Natural\c-\n" -"\cxFabricante:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClasificación:\c-\n" -"\cf Producto Lácteo Fresco\c-\n" -"\n" -"Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La \cfLeche de Oni Rojo\c- está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de \cfAkari Labs\c-.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c-\n" -"\n" -"\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así, ¿a que sí? Dios, si solo pudieras ver la cara que pones cuando la bebes. Es que, es tan adorable...\c-"; -SWWM_LORETXT_IBUKIMILK3 = -"\cxDesignación:\c-\n" -"\cf Leche de Oni Rojo 100% Natural\c-\n" -"\cxFabricante:\c-\n" -"\cf Akari Labs\c-\n" -"\cxClasificación:\c-\n" -"\cf Producto Lácteo Fresco\c-\n" -"\n" -"Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La \cfLeche de Oni Rojo\c- está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de \cfAkari Labs\c-.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c-\n" -"\n" -"\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así, ¿a que sí? Dios, si solo pudieras ver la cara que pones cuando la bebes. Es que, es tan adorable...\c-\n" -"\n" -"\cfActualización: Y mira tu por donde vaya sorpresa. Kirin-kun por supuesto que le tiene un buen aprecio también. A ver, es que nadie puede resistirse realmente, es demasiado buena. Aun así, dice que la leche de Akashna sabe mejor, y a ver supongo que estoy de acuerdo. Aunque da un poco de tirria que algo tan delicioso salga de los putos quistes de la joroba de un monstruo de pantano con pinta asquerosa.\c-"; SWWM_LORETXT_IMANAKI = "\cxNombre:\c-\n" "\cf Fundación de Investigación Imanaki\c-\n" @@ -2005,24 +1889,6 @@ SWWM_LORETXT_KNOWLEDGEBASE = "\cfOh ya, y también puedes encontrar notas como estas en unos cuantos artículos si me apetece soltar algo extra que no cuadre con el \"tono\" del resto, supongo.\c-\n" "\n" "\cfAh, y de paso, gracias muchas a Ana-san por la traducción al Castellano. No pude resistirme, es que estaba tan ilusionada por hacerlo y es tan mona... Me ha dicho que le hace mucha gracia como suenan todos mis desvaríos en su idioma, juju.\c-"; -SWWM_LORETXT_LITHIUMNOVEL = -"\cxTítulo:\c-\n" -"\cf Lithium - Volumen Uno\c-\n" -"\cxAutor:\c-\n" -"\cf Anónimo\c-\n" -"\cxGénero:\c-\n" -"\cf Ciencia Ficción, Historia Alternativa\c-\n" -"\n" -"El primer volumen de una serie aun sin terminar, el cual apareció en una librería de ubicación no revelada. Tal como relata su encargado, esta novela gráfica simplemente apareció allí, sellada al vacío, en perfecta condición. Cuenta la historia de un mundo alternativo, muy parecido al nuestro, donde ocurre una invasión demoníaca. A pesar de haber aparecido a principios del siglo XXI, algunos detalles son precisamente similares a los de la invasión de 2148, aunque la historia que se cuenta desvía de ello, con un desenlace mucho más funesto.\n" -"\n" -"Nadie sabe quien es el autor, no se menciona en inguna de sus páginas. Ni siquiera en su portada, y la parte trasera está en blanco excepto por un único triángulo multicolor. Aun así, se hicieron muchas copias, y se volvió inmensamente popular, llegando incluso a recibir varios premios, siendo considerada una de las mejores novelas gráficas de todos los tiempos.\n" -"\n" -"Los fans esperan que, un día, un segundo volumen aparezca, de una forma tan misteriosa como el primero.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfDios... joder... es que esto... es buenísimo, en serio. Necesitas sentarte a leerlo un día, es una experiencia que te cambia la vida. Esto está a años luz de cualquier cosa que se haya escrito, en toda la historia de la humanidad.\c-\n" -"\n" -"\cfBueno, puede que esté exagerando un poco, porque soy muy fan, pero venga. En serio, échale un ojo después de la misión, te encantará, Demo-chan.\c-"; SWWM_LORETXT_LOCKE = "\cxNombre Completo:\c-\n" "\cf Janus Locke Hoodth\c-\n" @@ -2166,23 +2032,6 @@ SWWM_LORETXT_MAIDBOT2 = "\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-\n" "\n" "\cfActualización: Por cierto, me alegro de que Kirin-kun consiguiera que volviese a cantar. Por supuesto, es que ¿como podría resistirse a sus encantos? ¿verdad?\c-"; -SWWM_LORETAG_MANAROKOU = "Manaroca"; -SWWM_LORETXT_MANAROKOU = -"\cxDesignación:\c-\n" -"\cf Manaroca\c-\n" -"\cxClasificación:\c-\n" -"\cf Fruta\c-\n" -"\cxOrígen:\c-\n" -"\cf Uusnai, Kurain\c-\n" -"\n" -"La \cfManaroca\c- (Adkana: Manarokou, lit.: \"fruto de corazón blindado\") es una fruta común de la región de \cfUusnai\c- en el plano divino de \cfKurain\c-. Conocido por su elegante aroma y corazón suave y cremoso, es considerada toda una delicia por los \cfDioses\c-. Se sabe también que, si no se extrae de forma limpia y adecuada de su dura corteza externa, puede volverse un veneno letal, causando una muerte rápida en criaturas mundanas por medio de una potentísima neurotoxina.\n" -"\n" -"Rara vez, apenas, ha sido vista en nuestro mundo. Algunos dioses pueden traerlas, pero solo pueden crecer en el terreno del plano divino. Uno debe tener mucho cuidado si un dios le ofrece esta fruta. Siempre hay que asegurarse de que la hayan pelado adecuadamente para su consumo, ya que no hay antídoto conocido, y el daño que causan sus toxinas es irreversible.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cf*suspiro* Maruku me dio uno una vez. Y yo como idiota total que era le metí un mordisco a pelo, con corteza y todo. Obviamente, la palmé mucho. Eché los hígados en el proceso, mezclado todo con un montón de sangre, también, lo cual no me hizo quedar muy bien. Desde entonces, siempre las pela primero. Están muy ricas cuando no te matan al instante. El sabor... no sé bien como describirlo, es dulce, un poco como a limón, pero sin ser para nada ácido, y se derrite en la boca. Es como una natilla, casi.\c-\n" -"\n" -"\cfSabes, estaba pensando, esto fue casi como todo lo contrario a aquella vez que probé el pez globo. A ver... me parece que está sobrevalorado del todo. A lo mejor es que el riesgo de palmarla es lo que hace que a la gente le sepa tan bien, y entonces ¿al ser inmortal... pierde todo eso para mí? Ni idea. Aun así, prefiero más esta fruta de muerte instantánea.\c-"; SWWM_LORETAG_MILKBREADS = "Panes de Leche"; SWWM_LORETXT_MILKBREADS = "\cxDesignación:\c-\n" @@ -2268,9 +2117,9 @@ SWWM_LORETXT_MODERNSPARKSTER = "\n" "\cfFuego Secundario:\c- Mantén para cargar una masa de plasma de Nokron, suelta para liberarla en el mundo. Aunque es inmediatamente más destructiva que la munición primaria, esta es menos estable, y tiende a salir como un estallido candente, en lugar de un proyectil.\n" "\n" -"\cfRecarga Primaria:\c- Carga una célula de Kinylum. Se pueden tener hasta 3 en reserva.\n" +"\cfRecarga Primaria:\c- Carga una célula de Kinylum. Hasta 4 se pueden cargar.\n" "\n" -"\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad de reserva.\n" +"\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad.\n" "\n" "\cfTécnicas:\c- La carga de proyectil puede mantenerse de forma indefinida, ya que el arma se ventilará regularmente para estabilizar la potencia pico de ignición del arma. Esto puede permitir que uno simplemente cargue desde cobertura y salga para soltar el disparo cuando sea necesario. Adicionalmente, la posibilidad de pulsar ambos gatillos a la vez también está documentada, lo cual permite una potente descarga de plasma de Nokorokinylum, comparable a una pequeña bomba nuclear en potencial destructor. No se recomienda realizar un ataque combinado a menos que el objetivo esté lo suficientemente lejos para no poner en peligro al usuario.\n" "\n" @@ -2731,28 +2580,6 @@ SWWM_LORETXT_PROPULSOR = "\cfEn serio... si hubiera sabido que el almacero pesa tanto, no habría usado un blindaje tan pesado para tu cuerpo, porque a ver, si que dije lo de que lo quería \"EXTRA THICC\" cuando Misa me preguntó, en plan coña, pero se lo tomó muy en serio.\c-\n" "\n" "\cf*suspiro* Si fueras más ligera, seguro que podría haberte sentado en mi regazo durante el directo de preguntas y respuestas. Ahhhhh, joder...\c-"; -SWWM_LORETXT_PSYKKONOVEXX = -"\cxDesignación:\c-\n" -"\cf Psykkonovexx (\"Monarca Liberador Armónico\")\c-\n" -"\cxFabricante:\c-\n" -"\cf Umaakhia Akhxhaen\c-\n" -"\cxClasificación:\c-\n" -"\cf Instrumento Electrónico de Viento\c-\n" -"\n" -"El \cfPsykkonovexx\c-, el cual toma su nombre de uno de los \cfNueve Reyes de Kurenai\c-, es uno de los principales instrumentos en la composición de música moderna \cfAnarukon\c-, siendo especialmente popular por su profundo, reverberante sonido metálico. Aunque no hay equivalentes directos en el mundo humano, algunos opinan que el instrumento más similar sería la gaita, aunque esta comparación se considera bastante forzada.\n" -"\n" -"Entre varios artistas de renombre, uno de los usuarios más prolíficos de este instrumento es el cofundador de la banda \cfDark Reaches Project\c-, el príncipe heredero \cfOssid Anderken\c-. Su maestría del Psykkonovexx le ha permitido componer melodías realmente fascinantes, integrándose perfectamente con el tono oscuro y tenebroso de las muchas composiciones sintéticas de la banda.\n" -"\n" -"La operación del instrumento es ciertamente simple, siendo manejado principalmente a través de dos deslizadores de modulación y un pequeño conjunto de botones con sensibilidad de presión para mezclar varios tonos de base juntos, permitiendo toda clase de armonías intricadas. Un músico verdaderamente habilidoso puede incluso retorcer estos sonidos en muy distintivos \"rugidos\", los cuales son descritos como \"el sonido de un millón de motosierras acelerando en perfecta armonía\".\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cf¿Puedo añadir que la música Anarukon es absolutamente puto hardcore de cojones? No en serio, como alquien a quien le molan los \"dulces sonidos\" del drone metal y dark ambient, me va muchísimo este tema. Desearía poder haber tenido esto en mi vida mucho antes.\c-\n" -"\n" -"\cfDios, es que hasta llegué a conocer al tío en persona, y el resto de la banda. El tal Ossid este, es más retaco que yo, ya lo has visto, pero mucho más viejo de lo que parece, el tío lleva haciendo todo esto durante miles de años ya. Yo ya me imagino total que aprender el instrumento este no es algo para lo que un humano normal y mortal tendría tiempo. Pero a lo mejor yo... Bueno, o no.\c-\n" -"\n" -"\cfPor cierto puta hostia si me da cague el marido que tiene, con todo el rollo ese de querer convertir mi aura en un instrumento o yo que sé que mierdas. No tengo ni idea de a qué vino todo eso.\c-\n" -"\n" -"\cfEn fin, te sugiero que no te pongas a juguetear con esta cosa en plena misión. Probablemente hagas tanto ruido que acabes despertando a todos los monstruos de la zona.\c-"; SWWM_LORETXT_PUNTZERBETA = "\cxDesignación:\c-\n" "\cf Revólver Puntzer \"Beta\"\c-\n" @@ -2841,11 +2668,11 @@ SWWM_LORETXT_QUADRAVOL = "\n" "\cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar.\n" "\n" -"\cfFuego Secundario:\c- Disparo disperso de bolas de fuego menores. Desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.\n" +"\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario realizará disparos en cadena rápidos de baja potencia.\n" "\n" -"\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario o secundario realizará disparos en cadena rápidos de baja potencia.\n" +"\cfFuego Terciario:\c- Alterna el fuego primario a un modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos.\n" "\n" -"\cfRecarga:\c- Cada caja de combustible permite diez disparos (menos si potenciados), tras lo cual debe ser recargada. El arma mantiene la caja acoplada firmemente hasta que está completamente vacía, sin embargo.\n" +"\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es expulsada inmediatamente tras ser vaciada en el \"crisol\" interno del arma, así que puedes almacenar munición adicional mientras mantienes la carga.\n" "\n" "\cfTécnicas:\c- El arma tiene un cierto movimiento especial \"extra efectivo\" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.\n" "\n" @@ -3461,24 +3288,6 @@ SWWM_LORETXT_TARO = "\cfSí, es esa clase de tío. Se hace el chulo pero en cuanto miras más allá de sus \"impresionantes habilidades y logros\", no es más que un capullo en internet. A ver, admito que yo también lo soy, un poco, pero él es peor. La culpa es de que pase tanto tiempo en foros de mierda.\c-\n" "\n" "\cfAunque a ver, a veces se pone serio cuando quiere. Y en momentos así es que es básicamente el Tsukkomi de mi Boke. Si no sabes lo que significa todo eso puedes buscarlo, Demo-chan.\c-"; -SWWM_LORETXT_TASTYHOAGIE = -"\cxDesignación:\c-\n" -"\cf Hoagie\c-\n" -"\cxClasificación:\c-\n" -"\cf Bocadillo\c-\n" -"\cxOrígen:\c-\n" -"\cf Filadelfia, EEUU\c-\n" -"\n" -"Los \cfhoagies\c-, también conocidos como subs, son un popular tipo de bocata Americano. Hecho con un pan francés y rellenado de toda clase de carnes, quesos y verduras, es una comida muy popular, no solo en la Tierra, si no también incluso en el mismo \cfInfierno\c-.\n" -"\n" -"Tal y como confirma el \cfArchiduque Cytho Valathor\c-, fuente local de noticias del Infierno en nuestro mundo, ha ganado mucha fama entre demonios civiles que nos han visitado por medio de rituales de invocación, los cuales luego lo difundirían al resto de la población. Varios establecimientos que los sirven se han formado por todo el territorio central e incluso algunos puntos recónditos del vasto reino. Incluso se sabe que el mismísimo \cfRey Akusei\c- los disfruta.\n" -"\n" -"En tiempos recientes, este bocata se ha convertido en un símbolo de paz, usado por demonios civiles en protesta contra la hostilidad hacia los humanos. En cierto modo, el hoagie representa que ambas civilizaciones pueden coexistir.\n" -"\n" -"\cxNotas de Saya:\c-\n" -"\cfNo me puedo creer que un puto bocadillo pudiera llegar tan lejos. Y es verdad, lo se bien. Conoces a Sakurai-san, ¿no? El tío malrollento ese del departamento de software. Dice ser \"invocador de bestias infernales\", pero todo lo que hizo fue rodearse de súcubos buenorras. Pues eso, cada vez que las tías se pasan a recogerlo, siempre dicen cosas tipo \"vámonos a por unos jugosos hoagies luego\".\c-\n" -"\n" -"\cf¿Como coño se ha vuelto tan popular allá? Es que no lo entiendo.\c-"; SWWM_LORETXT_UAC = "\cxNombre:\c-\n" "\cf Union Aerospace Corporation\c-\n" @@ -3582,7 +3391,7 @@ SWWM_LORETXT_UAC3 = "\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-"; +"\cfY 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_UNISSIX = "\cxNombre Completo:\c-\n" "\cf Misa Azadeku Unissix\c-\n" diff --git a/language.es_menu b/language.es_menu index 0df0d93d8..c3bbf458d 100644 --- a/language.es_menu +++ b/language.es_menu @@ -198,6 +198,11 @@ SWWM_ITEMGLOWS = "Los Ítems Lejanos Brillan"; SWWM_NOMAGDROP = "Tirar Cargadores Usados"; SWWM_BARRIERUSE = "Usar Revestimiento Automáticamente"; SWWM_SVBARRIERUSE = "Forzar Auto-Uso de Revestimiento"; +SWWM_NOMAPMSG = "Mensajes Especiales de Mapa"; +SWWM_WEAPONTOOLTIPS = "Ayuda de Armas"; +SWWM_RESETTOOLTIPS = "Resetear Ayuda de Armas"; +SWWM_CRESET = "Restaurar Predeterminado"; +SWWM_ARESET = "Borrar Logros"; SWWM_MMTITLE = "Opciones de Minimapa"; SWWM_MM_ENABLE = "Mostrar Minimapa"; SWWM_MM_ROTATE = "Rotar Minimapa"; @@ -238,6 +243,11 @@ SWWM_MM_THINGCOLOR_CITEM = "Objetos contados"; SWWM_MM_THINGCOLOR_VIPITEM = "Objetos importantes"; SWWM_MM_THINGCOLOR_SHOOTABLE = "Actores vulnerables"; SWWM_MM_THINGCOLOR_MISSILE = "Proyectiles"; +SWWM_AC_UNLOCKED = "Desbloqueados: "; +SWWM_AC_INCOMPLETE = "Incompletos: "; +SWWM_AC_UNDISCOVERED = "Sin descubrir: "; +SWWM_AC_COMPLETE1 = "¡Has desbloqueado todos los logros!"; +SWWM_AC_COMPLETE2 = "¡Eres un%s verdader@[ao_esp] Demolicionista!"; // has to be hotfixed in zscript for now 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 efectos te causan malestar."; @@ -317,7 +327,7 @@ TOOLTIP_SWWM_DAMAGETARGET = "Selecciona cuando deben mostrarse las barras de vid TOOLTIP_SWWM_STRICTUNTOUCHABLE = "Por defecto, el bonus \"Intocable\" permanece activo hasta que recibas daño directo. Si sientes que esto no es suficientemente estricto, también puedes hacer que termine si la armadura absorbe el daño, o, para mayor severidad, con CUALQUIER golpe, incluso siendo invulnerable."; TOOLTIP_SWWM_SILENCEMAP = "Elige si quieres que la música se detenga cuando completas un mapa al 100%."; TOOLTIP_SWWM_SHADOWDIST = "Distancia máxima a la que mostrar sombras. Puede ayudar al rendimiento."; -TOOLTIP_SWWM_SWAPWEAPONS = "Permite solo un arma por puesto (excluyendo Deep Impact). Desactiva si prefieres ignorar este intento inútil de balance."; +TOOLTIP_SWWM_SWAPWEAPONS = "Permite solo un arma por puesto (excluyendo Deep Impact). Desactiva si prefieres tirar el balance por la ventana."; TOOLTIP_SWWM_FORCESTATS = "Muestra estadísticas de mapa en el HUD incluso cuando el automapa no está abierto."; TOOLTIP_SWWM_FUNTRAILS = "Recolorea los rastros dejados por proyectiles de armas de ranura 5."; TOOLTIP_SWWM_PISTOLSTART = "Fuerza hacer pistol start entre niveles/clústers. Aunque esto excluye viajes entre niveles de un mismo hub."; @@ -343,6 +353,13 @@ TOOLTIP_SWWM_ITEMGLOWS = "Al activar, los ítems que se encuentren lejos del jug TOOLTIP_SWWM_NOMAGDROP = "Por defecto, la Demolicionista será un poco consciente con el medio ambiente y no dejará cargadores usados por ahí. Activa si prefieres la basura adicional."; TOOLTIP_SWWM_AUTOUSEBARRIER = "Cuando esto está activado, el revestimiento elemental será usado automáticamente si es necesario al estar en suelos dañinos."; TOOLTIP_SWWM_ENFORCEAUTOUSEBARRIER = "Fuerza una opción específica de auto-uso de revestimiento para todos los jugadores, o respeta la opción de cada uno."; +TOOLTIP_SWWM_NOMAPMSG = "Activa mensajes especiales animados de personajes en ciertos mapas (usualmente vanilla)."; +TOOLTIP_SWWM_WEAPONTOOLTIPS = "Muestra un resumen de controles cuando se selecciona un arma por primera vez."; +TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resetea la ayuda de armas para que puedas volver a verla de nuevo."; +TOOLTIP_EVENT_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores originales."; +TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros."; +TOOLTIP_SWWMMINIMAPMENU = "Configura el minimapa."; +TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros."; TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación."; TOOLTIP_SWWM_MM_ROTATE = "Gira la vista del minimapa."; TOOLTIP_SWWM_MM_GRID = "Muestra una cuadrícula de 128x128 en el minimapa."; diff --git a/language.version b/language.version index bcb71b3b1..4195ad823 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.10 r1 \cu(Wed 8 Sep 22:20:08 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.0.10 r1 \cu(2021-09-08 22:20:08)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1 \cu(Fri 17 Sep 19:42:41 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.1 \cu(2021-09-17 19:42:41)\c-"; diff --git a/lore/default/aa12model.txt b/lore/default/aa12model.txt deleted file mode 100644 index 496e195cb..000000000 --- a/lore/default/aa12model.txt +++ /dev/null @@ -1,24 +0,0 @@ -TAG -AA-12 Replica -TAB -Item -REL -Blackmann;Ibuki;Saya -TXT -\cxDesignation:\c- -\cf Auto Assault-12\c- -\cxManufacturer:\c- -\cf Ninnacht Armaments (defunct)\c- -\cxClassification:\c- -\cf Full Auto Shotgun\c- - -A relic of the past, or at least a replica model of it for collectors. It is not functional, but the attention to detail is outstanding. - -Although originally not very well known, the AA-12 reached new heights in popularity following the acquisition of its design and manufacture rights by the now defunct US-based **Ninnacht Armaments**, after which it received various improvements, and even served as the basis for many other shotguns for years to come (including some by **Blackmann Arms**, who bought the company in 2018). - -Lightweight, comfortable, and with a sleek and easily recognizable look, it is one weapon that has taken a place in the hearts of many a gun nut. It had even proven to survive the test of time, as shown by the **Red Oni** choosing it as one of her weapons during her time in **WW3** (and its grim aftermath). - -\cxSaya's Notes:\c- -\cfIbuki seriously loves this thing. I could kinda blame it on me showing her a certain character from a certain game that uses it. She became obsessed, seriously. I hear that sometimes she even... with it... well, you get the idea. All these years and she still loves to take it down to the range and unload it, just... moaning in pleasure afterwards. God... it's kind of weird, but also hot af.\c- - -\cfOh that also reminds me, one of these days I'm going to see if I can make a maidbot of her waifu. That'd be fun, although I doubt she'd feel and act the same, even if she looked the part.\c- diff --git a/lore/default/blackfireigniter.txt b/lore/default/blackfireigniter.txt index 921a3632c..060bf482f 100644 --- a/lore/default/blackfireigniter.txt +++ b/lore/default/blackfireigniter.txt @@ -23,7 +23,7 @@ The Igniter is the perfect blend of magic and technology, weaponized. At your fi \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. +\cfReloading:\c- Attach up to two canisters to replenish the weapon's internal dark mana reserves. Each canister will remain locked in until it's been emptied, otherwise residual energy could escape and bring harm to the user. If there is an empty canister attached, the reload action will detach it first. 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- diff --git a/lore/default/brcalbum.txt b/lore/default/brcalbum.txt deleted file mode 100644 index 23f7709eb..000000000 --- a/lore/default/brcalbum.txt +++ /dev/null @@ -1,68 +0,0 @@ -TAG -Counter-Inquisition -TAB -Item -REL -Ashley;Anarukon;Saya -TXT -\cxTitle:\c- -\cf Counter-Inquisition\c- -\cxArtist:\c- -\cf Black Rat's Coven\c- -\cxYear:\c- -\cf 2100\c- -\cxGenre:\c- -\cf Baroque Metal\c- - -Released at the turn of the century, **Counter-Inquisition** is a collection of some of the most famous tracks of the British band **Black Rat's Coven**. A whole century of musical history, since the band's humble beginnings all the way back in 2006, condensed into a vinyl of pure **Ockophux**, a valuable metal from the **Anarukon** world that is said to ward off evil spirits. - -\cfSide A:\c- - 1. Walpurgisnacht - 2. Blood Moon Cantata - 3. Army of Lust - 4. Your Dark Desire - 5. Red Star of Innocence - 6. Dragonheart -\cfSide B:\c- - 7. Black Rat's Coven (Medley) - -Due to its commercial distribution in such a niche format, buyers also had access to a lossless quality digital download from the Black Rat's Coven website. In addition, the digital download also includes high resolution cover art, and exclusive video interviews with each of the band's four members, providing a retrospective look into their history together. - -\cxSaya's Notes:\c- -\cfGod... DAAAAAAAAAAMN...\c- - -\cfThis is some REAL DAMN GOOD music, I tell ya. Ashley-san and the gang... Ever since Yu-chan got me into this stuff back in the day I've been hooked. And then the big thing happened, Yu-chan and Ashley-san met, and dated, and got married... And oh boy. Can't believe I'm tight with all the members of one of my favorite bands of all time (well, more or less).\c- - -\cfDemo-chan, I swear, I don't understand how I'm this lucky.\c- -TXT -\cxTitle:\c- -\cf Counter-Inquisition\c- -\cxArtist:\c- -\cf Black Rat's Coven\c- -\cxYear:\c- -\cf 2100\c- -\cxGenre:\c- -\cf Baroque Metal\c- - -Released at the turn of the century, **Counter-Inquisition** is a collection of some of the most famous tracks of the British band **Black Rat's Coven**. A whole century of musical history, since the band's humble beginnings all the way back in 2006, condensed into a vinyl of pure **Ockophux**, a valuable metal from the **Anarukon** world that is said to ward off evil spirits. - -\cfSide A:\c- - 1. Walpurgisnacht - 2. Blood Moon Cantata - 3. Army of Lust - 4. Your Dark Desire - 5. Red Star of Innocence - 6. Dragonheart -\cfSide B:\c- - 7. Black Rat's Coven (Medley) - -Due to its commercial distribution in such a niche format, buyers also had access to a lossless quality digital download from the Black Rat's Coven website. In addition, the digital download also includes high resolution cover art, and exclusive video interviews with each of the band's four members, providing a retrospective look into their history together. - -\cxSaya's Notes:\c- -\cfGod... DAAAAAAAAAAMN...\c- - -\cfThis is some REAL DAMN GOOD music, I tell ya. Ashley-san and the gang... Ever since Yu-chan got me into this stuff back in the day I've been hooked. And then the big thing happened, Yu-chan and Ashley-san met, and dated, and got married... And oh boy. Can't believe I'm tight with all the members of one of my favorite bands of all time (well, more or less).\c- - -\cfDemo-chan, I swear, I don't understand how I'm this lucky.\c- - -\cfUpdate: Remember my freakout when they played that song at our wedding? Red Star of Innocence? God I'm so fucking stupid. I just had a flashback immediately, remembering that one time I told Ashley-san I had no interest in meeting Kirin-kun (she made that song for his 12th birthday). Guess I have to eat my words now, huh?\c- diff --git a/lore/default/cactushege.txt b/lore/default/cactushege.txt deleted file mode 100644 index f7c144311..000000000 --- a/lore/default/cactushege.txt +++ /dev/null @@ -1,22 +0,0 @@ -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- - -The **Hege Cactus** is a small potted cactus that's quite popular in Finland. It's said to have such a potent ability to absorb humidity that it can even make people thirsty around it. It's not clear how exactly this particular species of cactus came to be, some say that it simply appeared out of nowhere. - -There's also rumors that it can make you develop a taste for furry erotica, although there's no solid proof of this and it's simply just that, rumors. - -\cxSaya's Notes:\c- -\cfI think it's kinda cute, in a way. Small, round, there in it's lil' pot. I should get one, maybe.\c- - -\cfI'm not even concerned about those rumors. I don't even understand the stigma against furries, or why it became like this after so many years. The world's gone nuts, I tell ya.\c- diff --git a/lore/default/cytho.txt b/lore/default/cytho.txt new file mode 100644 index 000000000..a40e5a40a --- /dev/null +++ b/lore/default/cytho.txt @@ -0,0 +1,36 @@ +TAG +Valathor, Cytho +TAB +People +REL +Hell;Ellen;Anarukon;DemonInvasion;UAC;Saya;AkariLabs;Demolitionist +TXT +\cxFull Name:\c- +\cf Archduke Cytho of House Valathor\c- +\cxNationality:\c- +\cf Kuriste\c- +\cxDate of Birth:\c- +\cf 2008-10-09\c- +\cxTwitter:\c- +\cf @incuvalathor\c- + +Born in the now fallen Iskar township in 2008 as one of the youngest men of the humble **House Valathor**, **Cytho** took to the family business upon reaching adulthood, quickly climbing the ranks of **Hell**'s sex work industry, partly due to his innate beauty, but also the rapidly accumulating "satisfied customers" he would regularly service, and the many pupils he'd take under his wing. By 2028, he had made of Earth his second home, where he would open up an account on social media for a more modern method of attracting new clientele. + +One day, however, everything changed. A large number of incubi would report being "creeped out" by a woman's unreasonable requests. Curious, Cytho would then set forth to try and find her, to see what exactly his colleagues were finding so unreasonable. And that, is how he met **Elena Yanikov XVI**, an **Anarukon** woman "struck by the curse of eternal loneliness", who so desperately wished to find a husband that she eventually resourced to summoning demons and begging for them to marry her. As expected, all of them had rejected her pleas, no matter how hard she tried, as many among demonkind were wary of her kind. Cytho, however, took pity on her, and accepted, on one condition: They would have to go on a date first. + +Some time later, the archduke announced his retirement from sex work, having "reformed" as the faithful husband to an Anarukon woman. While his friends and family celebrated, others saw this as an affront. House Valathor was heavily criticised for not rejecting him right there and then, to the point a small war broke out, as the rival **House Irishtanar** would crush their hometown in "protest". That day, Cytho closely witnessed the cruelty of his own kind, as the sole survivor of that massacre. + +Since then, he lives in Boston with his wife and their three children. His social media account's purpose has been shifted to communicating the news of what transpires in his home realm, sourced from the many contacts he's gathered over the years, as representative of the subjugated civilian population. Although the vast majority of Earth's population would not take him seriously, not until the **Demon Invasion** of 2148 began. + +Denouncing the **UAC**'s involvements, he posted about the events on **Phobos** and **Deimos** long before the UAC had made them public, and proclaimed that an invasion on Earth was imminent. Still few took him seriously, but one among them was his friend **Saya Miyamoto**, of **Akari Labs**. As investor in her company, he had already ensured beforehand that she would have the resources and manpower needed for the task he'd ask of her: Build a combat robot that can fight the invaders. + +And thus, through their collaboration, the **Demolitionist** was born. + +\cxSaya's Notes:\c- +\cfSince the very moment I met him, back when I first visited Ellen-san's family, I knew he was more than just a cool, handsome femboy demon grandpa. Yeah, Cytho-sama's the real deal, and the blood that runs through his veins is more noble than that of any pesky, pompous trashlord with a fancy title out there.\c- + +\cfAnd yeah, surprise surprise... He's your dad (well, kinda). But you already knew that, didn't you?\c- + +\cfSeriously, if it wasn't for him, all of this would have never been possible. We owe a lot to him... I just hope I don't have to repay him with my body (not that I would mind, kihihihi).\c- + +\cfPS: His name is pronounced "Kaizo", you kept saying it wrong every time. But don't worry, you're not the first.\c- diff --git a/lore/default/demolitionist.txt b/lore/default/demolitionist.txt index 532ca5663..a23a628b9 100644 --- a/lore/default/demolitionist.txt +++ b/lore/default/demolitionist.txt @@ -3,7 +3,7 @@ Demolitionist TAB People REL -AkariLabs;Ibuki;Saya;Zanaveth2;Hell;UAC;Nekuratek;Belt;Collar;Propulsor;Hammerspace;Display;Voicebox;Maidbot;EngineTech;Kirin;DemonInvasion +AkariLabs;Ibuki;Saya;Zanaveth2;Hell;UAC;Nekuratek;Belt;Collar;Propulsor;Hammerspace;Display;Voicebox;Maidbot;EngineTech;Kirin;DemonInvasion;Cytho TXT \cxFull Name:\c- \cf Akari Labs First Generation Autonomous Combat Unit\c- @@ -16,13 +16,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. +The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both **Saya Miyamoto** and **Archduke Cytho Valathor**, representative of **Hell**'s civilian population. Each unit is equipped with various third-party components of note, such as the **JetBurst™ Impulsors** on their backs, allowing them to perform rapid mid-air boosts and dashes, a pair of **Hammerspace™** containers, giving them quick access to a wide arsenal, the two being attached to the all-popular **Symnatek Magnetic Utility Belt**, or the powerful **Celestine Microfusion Battery**, courtesy of **Tach-Engine Technology Institute**, which provides up to 80 days of autonomy for the unit, at full processing power of its **Nekuratek IK-349 CPU**. More details on the full hardware specifications can be found at the Akari Labs website. The AI core of the Demolitionist is built on the same technology as Akari Labs' **Maidbots**, the **Nekuronbot AI Framework**, which had been provided to **Saya Miyamoto** herself as a gift of friendship from **Zanaveth Nekuraku II**, the lead AI engineer and current CEO of **Nekuratek**. Thanks to this technology, and combined with many other features such as the **CuteEmotion Display** that allows the unit to visibly show emotion through a set of simple animated faces or the **Loudboi Voicebox** that allows it to speak almost naturally, the Demolitionist is barely indistinguishable from a real person in its behavior 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. -The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on **Hell**. +The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on Hell. Of 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 **Demo Miyamoto**, 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. @@ -46,13 +46,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. +The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both **Saya Miyamoto** and **Archduke Cytho Valathor**, representative of **Hell**'s civilian population. Each unit is equipped with various third-party components of note, such as the **JetBurst™ Impulsors** on their backs, allowing them to perform rapid mid-air boosts and dashes, a pair of **Hammerspace™** containers, giving them quick access to a wide arsenal, the two being attached to the all-popular **Symnatek Magnetic Utility Belt**, or the powerful **Celestine Microfusion Battery**, courtesy of **Tach-Engine Technology Institute**, which provides up to 80 days of autonomy for the unit, at full processing power of its **Nekuratek IK-349 CPU**. More details on the full hardware specifications can be found at the Akari Labs website. The AI core of the Demolitionist is built on the same technology as Akari Labs' **Maidbots**, the **Nekuronbot AI Framework**, which had been provided to **Saya Miyamoto** herself as a gift of friendship from **Zanaveth Nekuraku II**, the lead AI engineer and current CEO of **Nekuratek**. Thanks to this technology, and combined with many other features such as the **CuteEmotion Display** that allows the unit to visibly show emotion through a set of simple animated faces or the **Loudboi Voicebox** that allows it to speak almost naturally, the Demolitionist is barely indistinguishable from a real person in its behavior 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. -The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on **Hell**. +The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on Hell. Of 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 **Demo Miyamoto**, 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. @@ -76,13 +76,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. +The **Demolitionist** is one of the crowning achievements of **Akari Labs** 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 **Red Oni** supersoldier program, in a way, as it also serves the same purpose of defending Earth from an overwhelming invading force. The project has been funded and sponsored by many partners of Akari Labs, and is the brainchild of both **Saya Miyamoto** and **Archduke Cytho Valathor**, representative of **Hell**'s civilian population. Each unit is equipped with various third-party components of note, such as the **JetBurst™ Impulsors** on their backs, allowing them to perform rapid mid-air boosts and dashes, a pair of **Hammerspace™** containers, giving them quick access to a wide arsenal, the two being attached to the all-popular **Symnatek Magnetic Utility Belt**, or the powerful **Celestine Microfusion Battery**, courtesy of **Tach-Engine Technology Institute**, which provides up to 80 days of autonomy for the unit, at full processing power of its **Nekuratek IK-349 CPU**. More details on the full hardware specifications can be found at the Akari Labs website. The AI core of the Demolitionist is built on the same technology as Akari Labs' **Maidbots**, the **Nekuronbot AI Framework**, which had been provided to **Saya Miyamoto** herself as a gift of friendship from **Zanaveth Nekuraku II**, the lead AI engineer and current CEO of **Nekuratek**. Thanks to this technology, and combined with many other features such as the **CuteEmotion Display** that allows the unit to visibly show emotion through a set of simple animated faces or the **Loudboi Voicebox** that allows it to speak almost naturally, the Demolitionist is barely indistinguishable from a real person in its behavior 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. -The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on **Hell**. +The first unit, affectionately known as **Demo-chan** by Saya, was deployed in June of 2148 on **Union States** territory in order to combat the demonic invasion brought upon by the **UAC**'s interventions on Hell. Of 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 **Demo Miyamoto**, 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. diff --git a/lore/default/doomguy.txt b/lore/default/doomguy.txt index 771cf5b1b..281da3d7f 100644 --- a/lore/default/doomguy.txt +++ b/lore/default/doomguy.txt @@ -3,7 +3,7 @@ Doom Marine TAB People REL -UAC;Hell;Saya;AkariLabs;Demolitionist +UAC;Hell;Saya;AkariLabs;Demolitionist;Cytho TXT \cxFull Name:\c- \cf CLASSIFIED\c- @@ -23,7 +23,7 @@ At the moment of this article's writing, the marine has been tasked with fightin \cxSaya's Notes:\c- \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- -\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- +\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, apart from the little info Cytho-sama could get out of his previous romp through Hell, but there was some mention of him liking rabbits? Cute bunnies?\c- \cfWell, maybe then, if you pretend those horns of yours are some bun ears, he might not shoot you on sight, who knows...\c- TXT diff --git a/lore/default/ellen.txt b/lore/default/ellen.txt index 769b463a6..24b8b8067 100644 --- a/lore/default/ellen.txt +++ b/lore/default/ellen.txt @@ -3,7 +3,7 @@ Yanikov, Elena XXI TAB People REL -Ibuki;Taro;Ashley;Saya;Anarukon;WhiteScar;Hell;Yui +Ibuki;Taro;Ashley;Saya;Anarukon;WhiteScar;Hell;Yui;Cytho TXT \cxFull Name:\c- \cf Elena "Ellen" Yanikov XXI\c- diff --git a/lore/default/heavymahsheengun.txt b/lore/default/heavymahsheengun.txt index 7057350cd..6cee88ee8 100644 --- a/lore/default/heavymahsheengun.txt +++ b/lore/default/heavymahsheengun.txt @@ -18,16 +18,14 @@ The ammunition employed by this weapon are AP rounds of 14.5x114mm caliber. Unli While generally meant for mounted use, on-the-go operation is possible, provided the user is equipped with silver-rated power armor at minimum in order to handle its heavy recoil. -\cfPrimary Fire:\c- 1050 RPM operation. Sustained fire in this mode is theoretically endless, as the heat produced can be efficiently nullified by the internal cooling systems, it is therefore the recommended mode for most situations. +\cfPrimary Fire:\c- 700 RPM operation. Sustained fire in this mode is theoretically endless, as the heat produced can be efficiently nullified by the internal cooling systems, it is therefore the recommended mode for most situations. -\cfSecondary Fire:\c- 2100 RPM operation. Twice the amount of bullet, but with far more heat. Sustained fire in this mode may trigger the weapon's safety lock should the rising heat bring the weapon too close to non-operational temperature. +\cfSecondary Fire:\c- 1050 RPM operation. Much faster spin, with moderate heat buildup. It's still possible to keep firing in this mode for about a minute or so from a cold start. If you need to deliver more pain and have the ammunition to spare, choose this. -\cfTertiary Fire:\c- Toggles automated spin, to reduce downtime between bursts. Do note, however, that while this is active, the noise will alert enemies. +\cfTertiary Fire:\c- 2100 RPM operation. Extremely fast, with the highest heat potential. Sustained fire in this mode may quickly trigger the weapon's safety lock should the rising heat get too close to non-operational temperature. If you want things dead fast and don't care about running out of ammo in a matter of seconds, do pick this. \cfReloading:\c- There is absolutely no need whatsoever to reload this weapon, as it feeds directly off Hammerspace, requiring only a large supply of ammunition. Hammerspace containers will automatically link all necessary rounds for tethered feeding. -\cfTechniques:\c- Both triggers can be held simultaneously, allowing for a hybrid two-shot mode, with three times the bullet barrage. The heat output of this mode is quite high, however, so it is not well recommended for extended use. - \cxSaya's Notes:\c- \cfHEAVY MAH-SHEEN GUN!!!\c- diff --git a/lore/default/hell.txt b/lore/default/hell.txt index 9f089c0ab..cd13d380f 100644 --- a/lore/default/hell.txt +++ b/lore/default/hell.txt @@ -3,7 +3,7 @@ Hell TAB Lore REL -Imanaki;UAC;Saya;Ellen;Anarukon;Novoskhana;DemonInvasion +Imanaki;UAC;Saya;Ellen;Anarukon;Novoskhana;DemonInvasion;Cytho TXT \cxName:\c- \cf Hell\c- diff --git a/lore/default/ibukimilk.txt b/lore/default/ibukimilk.txt deleted file mode 100644 index 1fc9cf8fe..000000000 --- a/lore/default/ibukimilk.txt +++ /dev/null @@ -1,50 +0,0 @@ -TAG -Red Oni Milk -TAB -Item -REL -Ibuki;AkariLabs;Saya;Kirin -TXT -\cxDesignation:\c- -\cf All-Natural Red Oni Milk\c- -\cxManufacturer:\c- -\cf Akari Labs\c- -\cxClassification:\c- -\cf Fresh Dairy Product\c- - -Grow big and strong like the legendary super-soldier with this fresh milk beberage. **Red Oni Milk** is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from **Akari Labs**. - -\cxSaya's Notes:\c- -\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c- - -\cfOf course, I prefer to drink it straight from the source. It's even tastier that way.\c- -TXT -\cxDesignation:\c- -\cf All-Natural Red Oni Milk\c- -\cxManufacturer:\c- -\cf Akari Labs\c- -\cxClassification:\c- -\cf Fresh Dairy Product\c- - -Grow big and strong like the legendary super-soldier with this fresh milk beberage. **Red Oni Milk** is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from **Akari Labs**. - -\cxSaya's Notes:\c- -\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c- - -\cfOf course, I prefer to drink it straight from the source. It's even tastier that way, isn't it? God, if you could only look at the face you make when drinking it. Just, so adorable...\c- -TXT -\cxDesignation:\c- -\cf All-Natural Red Oni Milk\c- -\cxManufacturer:\c- -\cf Akari Labs\c- -\cxClassification:\c- -\cf Fresh Dairy Product\c- - -Grow big and strong like the legendary super-soldier with this fresh milk beberage. **Red Oni Milk** is infused with all-natural nutrients, and is safe for consumption by children and adults alike. Whether taken cold or warm, you will not be disappointed by its rich taste. Available only from **Akari Labs**. - -\cxSaya's Notes:\c- -\cfMan, when I pitched this idea to Ibuki I'm surprised she accepted. I mean, selling her own breast milk to the whole world... Well, not like it's wrong or anything, right? It's just milk. And REALLY good milk, by the way. With the amount she can produce, we've made some crazy money from this stuff over the years.\c- - -\cfOf course, I prefer to drink it straight from the source. It's even tastier that way, isn't it? God, if you could only look at the face you make when drinking it. Just, so adorable...\c- - -\cfUpdate: And boy oh boy what a surprise. Kirin-kun is of course also a fine appreciator of it. I mean, no one can really resist, it's way too good. Still, he says that Akashna milk is tastier though, and I mean I guess I could agree. Although it's somewhat off-putting that something so delicious came out of the goddamn hump cysts of some gross-looking swamp monster.\c- diff --git a/lore/default/lithiumnovel.txt b/lore/default/lithiumnovel.txt deleted file mode 100644 index 8d6f2c17b..000000000 --- a/lore/default/lithiumnovel.txt +++ /dev/null @@ -1,24 +0,0 @@ -TAG -Lithium Vol.1 -TAB -Item -REL -Saya -TXT -\cxTitle:\c- -\cf Lithium - Volume One\c- -\cxAuthor:\c- -\cf Anonymous\c- -\cxGenre:\c- -\cf Science Fiction, Alternate History\c- - -The first volume of an unfinished series, which surfaced in an undisclosed bookstore. As told by its manager, this graphic novel simply popped up there. They had no recollection of it ever been brought in, but it was there, vacuum sealed, in perfect condition. It tells the tale of an alternate world, much like our own, where a demonic invasion happens. Despite it having popped up in the early 21st century, some details were accurately similar to those of the 2148 invasion, although the story told deviates from it, into something far more grim. - -No one knows who the author is, it's not mentioned anywhere in its pages. Nor on the cover, and the back is entirely blank except for a single, multicolored triangle. Nevertheless, many copies were made, and it became immensely popular, going as far as to receive several awards, being regarded as one of the greatest graphic novels of all time. - -Fans hope that, one day, a second volume will appear, just as mysteriously as the first. - -\cxSaya's Notes:\c- -\cfGod... fucking... this thing is... just too good, I swear. You need to go sit down and give it a read one day, it's a life-changing experience. This is light years ahead of anything that's ever been written, in the history of mankind.\c- - -\cfOK, maybe I'm exaggerating a little bit, because I'm a huge fan, but come on. Seriously, give it a read after the mission, you'll love it, Demo-chan.\c- diff --git a/lore/default/manarokou.txt b/lore/default/manarokou.txt deleted file mode 100644 index 7a74bec3e..000000000 --- a/lore/default/manarokou.txt +++ /dev/null @@ -1,22 +0,0 @@ -TAG -Manarock -TAB -Item -REL -Gods;Saya -TXT -\cxDesignation:\c- -\cf Manarock\c- -\cxClassification:\c- -\cf Fruit\c- -\cxOrigin:\c- -\cf Uusnai, Kurain\c- - -The **Manarock** (Adkana: Manarokou, lit.: "shielded heart fruit") is a fruit common within the **Uusnai** region of the divine realm of **Kurain**. Known for its fragrant scent and creamy, soft core, it's considered a delicacy among **Gods**. It is also well known that, if not properly and cleanly removed from its hard outer shell, it can become lethally poisonous, causing rapid death on lesser beings through spread of a very potent neurotoxin. - -It rarely, if ever, has made any appearances in our own world. Some gods may bring them along, but they can only grow in the soil of the divine realm. One should be highly wary if a god offers you this fruit. Always be sure that they have peeled it properly for your consumption, as there is no known antidote, and the damage done by its toxins is irreversible. - -\cxSaya's Notes:\c- -\cf*sigh* Maruku offered me one once. And like the dumb idiot I was I bit straight in, shell and all. Of course, I fucking died. Vomited my guts out in the process, mixed with tons of blood, too, which didn't make for a nice image. Ever since then, she always peels them first. They're really tasty when they don't kill you instantly. The taste... I don't know how to describe it, it's sweet, somewhat lemony, but like with all sourness removed, and it melts in the mouth. Feels like custard, kinda.\c- - -\cfYou know, actually, this felt to me like the complete opposite of when I tried pufferfish. Like... I feel it's totally overrated. Maybe the risk of dying from it is what makes it so tasty for people, and being immortal just... takes that away from me? I don't know. Still, I'll take this insta-die fruit over it anytime.\c- diff --git a/lore/default/modernsparkster.txt b/lore/default/modernsparkster.txt index 94be7572f..612981c77 100644 --- a/lore/default/modernsparkster.txt +++ b/lore/default/modernsparkster.txt @@ -21,9 +21,9 @@ Then, a breakthrough came: Why try to copy something that can't ever be truly un \cfSecondary Fire:\c- Hold to charge a glob of Nokron plasma, release to let it out into the world. While more immediately destructive than the primary ammunition, this one is less stable, and tends to come out as a searing blast, rather than a projectile. -\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 3 can be held in reserve. +\cfPrimary Reload:\c- Load in a Kinylum cell. Up to 4 can be loaded in. -\cfSecondary Reload:\c- Load in a Nokron cell. Same reserve capacity. +\cfSecondary Reload:\c- Load in a Nokron cell. Same capacity. \cfTechniques:\c- Projectile charge can be held indefinitely, as the weapon will vent regularly to stabilize the weapon's peak ignition potency. This could allow one to simply charge from cover and pop out to release the shot when needed. Additionally, the possibility to press both triggers at once is also documented, which allows for a potent release of Nokorokinylum plasma, comparable to a miniature nuke in destructive potential. It is not recommended to perform a combined attack unless the target is far away enough so as to not endanger the user. diff --git a/lore/default/psykkonovexx.txt b/lore/default/psykkonovexx.txt deleted file mode 100644 index b09452016..000000000 --- a/lore/default/psykkonovexx.txt +++ /dev/null @@ -1,28 +0,0 @@ -TAG -Psykkonovexx -TAB -Item -REL -Anarukon;Saya -TXT -\cxDesignation:\c- -\cf Psykkonovexx ("Harmonic Liberator Monarch")\c- -\cxManufacturer:\c- -\cf Umaakhia Akhxhaen\c- -\cxClassification:\c- -\cf Electronic Wind Instrument\c- - -The **Psykkonovexx**, named after one of the **Nine Kings of Kurenai**, is one of the major instruments of modern **Anarukon** music composition, being especially popular for its deep, echoing metallic sound. Though there are no direct equivalents in the human world, some would agree that the most similar instrument to it would be the bagpipe, although this is considered a major stretch. - -Among various artists of fame, one of the most prolific users of this instrument is the co-founder of the **Dark Reaches Project** band, prince heir **Ossid Anderken**. His mastery of the Psykkonovexx has allowed him to compose truly mesmerizing melodies, blending seamlessly into the dark and dreadful tone of the band's various synthetic compositions. - -The instrument's operation is rather simple, being mostly managed through two modulation sliders and a simple set of pressure-sensitive buttons for mixing various base tones together, allowing for all sorts of convoluted harmonics. A truly skilled player can even twist these sounds into very distinctive "wails", which some have described as "the sound of a million chainsaws revving in perfect harmony". - -\cxSaya's Notes:\c- -\cfCan I add that Anarukon music is absolutely fucking hardcore as all shit? No seriously, as someone who's all big into the "soothing sounds" of drone metal and dark ambient, I vibe hard with this. I wish I could have had this in my life sooner. - -\cfGod, I even met that guy in person too, and the rest of the gang. So this Ossid guy, he's even shorter than me, you saw, but he's actually way older than he looks, dude's been doing this for thousands of years now. I would totally imagine that learning this instrument isn't something that a very normal and mortal human would have the time for. But maybe I could... Well, or not.\c- - -\cfAlso holy shit his husband creeps me the hell out, with that whole thing of wanting to turn my aura into an instrument or some shit. I have no idea what that was all about.\c- - -\cfAnyway, I'd suggest you not to play around with this thing in the field. You'd probably make so much noise you'd wake up all the monsters in the area.\c- diff --git a/lore/default/quadravol.txt b/lore/default/quadravol.txt index 1ea881127..93d8e1343 100644 --- a/lore/default/quadravol.txt +++ b/lore/default/quadravol.txt @@ -24,11 +24,11 @@ The Ardent Cross was the name of the general's sword which, when imbued with mag \cfPrimary Fire:\c- Single, large fireball shot. Very minor drift, so its effective range is quite long. Ignites nearby targets on impact. -\cfSecondary Fire:\c- Scatter shot of lesser fireballs. Increased drift and lower effective range, but very useful against multiple targets. +\cfSecondary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary fire engages slamfire, allowing you to shoot rapid low-charge bursts. -\cfTertiary Fire:\c- Pumps additional fuel, increasing the strength of your shots, but also their drift, making them less accurate. Excess overcharge will result in a wildly inaccurate misfire, but even this has its uses. Forcibly pumping in the middle of primary or secondary fire engages slamfire, allowing you to shoot rapid low-charge bursts. +\cfTertiary Fire:\c- Toggles a scatter shot mode for primary. Several smaller fireballs (number relative to charge), with increased drift and lower effective range, but very useful against multiple targets. -\cfReloading:\c- Each fuel box allows for ten shots (less if boosted), after which it must be reloaded. The weapon firmly locks the box in place until it's fully depleted, however. +\cfReloading:\c- Insert up to five fuel cells into the weapon's tube magazine. Each cell is immediately ejected once it's been emptied into the weapon's internal "crucible", so you can hold additional ammo while keeping your charge. \cfTechniques:\c- The weapon has a certain "extra effective" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames. diff --git a/lore/default/tastyhoagie.txt b/lore/default/tastyhoagie.txt deleted file mode 100644 index b0a91e148..000000000 --- a/lore/default/tastyhoagie.txt +++ /dev/null @@ -1,24 +0,0 @@ -TAG -Hoagie -TAB -Item -REL -Saya;Hell -TXT -\cxDesignation:\c- -\cf Hoagie\c- -\cxClassification:\c- -\cf Sandwich\c- -\cxOrigin:\c- -\cf Philadelphia, US\c- - -**Hoagies**, also known as subs, are a popular type of American sandwich. Made from a bread roll and filled with a wide assortment of meats, cheeses and vegetables, it is quite a popular meal, not just on Earth, but also even in **Hell** itself. - -As confirmed by **Archduke Cytho Valathor**, local source of Hell news in our world, it's become well known among civilian demons who have visited through summoning rituals, who would then later spread this to the rest of the population. Several establishments that serve them have been formed around the mainland and even in the outer reaches of the vast kingdom. Even **King Akusei** himself is known to enjoy them. - -In recent years, this sandwich has become a symbol of peace, used by civilian demons in protest against the hostility towards humans. In a way, the hoagie represents that both civilizations can coexist. - -\cxSaya's Notes:\c- -\cfCan't believe a fucking sandwich could go that far. And it's true, I know it for a fact. You know Sakurai-san, right? Gloomy dude from the softdev department. He fancies himself a "summoner of hell beasts", but all he did was surround himself with hot succubi. So yeah, every time those gals come to pick him up, they always say something like "let's go for a juicy hoagie later".\c- - -\cfWhy is it even so popular with them? I don't get it.\c- diff --git a/lore/default/uac.txt b/lore/default/uac.txt index dc24a8970..5bfc507d6 100644 --- a/lore/default/uac.txt +++ b/lore/default/uac.txt @@ -107,4 +107,4 @@ What little information could be recovered from the other side of all this, that \cxSaya's Notes:\c- \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- -\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- +\cfAnd so, here ends the story of these Dumb Epistles or whatever, one of the shining examples of the consequences of unchecked capitalism™.\c- diff --git a/lore/es/aa12model.txt b/lore/es/aa12model.txt deleted file mode 100644 index 2804a795f..000000000 --- a/lore/es/aa12model.txt +++ /dev/null @@ -1,20 +0,0 @@ -TAG -Réplica AA-12 -TXT -\cxDesignación:\c- -\cf Auto Assault-12\c- -\cxManufacturer:\c- -\cf Ninnacht Armaments (extinta)\c- -\cxClasificación:\c- -\cf Escopeta Automática\c- - -Una reliquia del pasado, o al menos un modelo en réplica para coleccionistas. No es funcional, pero la atención al detalle es sobresaliente. - -Aunque originalmente poco conocida, la AA-12 alcanzó nuevas cimas en popularidad tras la adquisición de sus derechos de diseño y fábrica por la ahora extinta Estadounidense **Ninnacht Armaments**, tras lo cual recibió varias mejoras, e incluso sirvió como base para muchas otras escopetas en consiguiente (incluyendo algunas de **Blackmann Arms**, quienes compraron la empresa en 2018). - -Ligera, cómoda, y con un diseño fluido y fácilmente reconocible, es un arma que ha ocupado un hueco en los corazones de muchos entusiastas. Ha incluso probado sobrevivir la prueba del tiempo, siendo demostrado por el **Oni Rojo** al haberla elegido como una de sus armas durante su tiempo en la **Tercera Guerra Mundial** (y su siniestro desenlace). - -\cxNotas de Saya:\c- -\cfIbuki en serio adora esta cosa. Casi que puedo echar culpa a que le enseñara cierto personaje de cierto juego que la usa. Se puso toda obsesionada, en serio. Tengo entendido que a veces... con ella... bueno, ya te lo imaginas. Tantos años y aun le encanta traerla al campo de tiro para dispararlo todo, ahí... gimiendo de placer luego. Dios... es que es muy raro, pero me pone basto.\c- - -\cfOh y eso me recuerda, uno de estos días tengo que ver si puedo hacer una maidbot de su waifu. Sería divertido, aunque no creo que se sienta y comporte igual, aunque se le parezca.\c- diff --git a/lore/es/blackfireigniter.txt b/lore/es/blackfireigniter.txt index 8b7b28f41..705eca422 100644 --- a/lore/es/blackfireigniter.txt +++ b/lore/es/blackfireigniter.txt @@ -19,7 +19,7 @@ El Encendedor es la mezcla perfecta de magia y tecnología, hecha arma. Tienes a \cfFuego Secundario:\c- Estallidos concentrados que forman lanzas de aire supercongelado las cuales empalarán objetivos pequeños, o simplemente los atravesarán. -\cfRecarga:\c- Acopla un frasco para rellenar la reserva interna de maná oscuro del arma. El frasco permanecerá enganchado hasta que se haya vaciado, ya que de otro modo podría escapar energía residual y causar daño al usuario. Si hay un frasco vacío acoplado, una segunda acción de recarga lo desacoplará. Los frascos pueden ser usados aun si el depósito está lleno, y actuarán como un "búfer" extra de maná hasta vaciarse. +\cfRecarga:\c- Acopla hasta dos frascos para rellenar la reserva interna de maná oscuro del arma. Cada frasco permanecerá enganchado hasta que se haya vaciado, ya que de otro modo podría escapar energía residual y causar daño al usuario. Si hay un frasco vacío acoplado, la acción de recarga lo desacoplará primero. Los frascos pueden ser usados aun si el depósito está lleno, y actuarán como un "búfer" extra de maná hasta vaciarse. \cxNotas de Saya:\c- \cfO sea, que Misa-Misa tiene otros juguetes aparte del trasto enorme ese. Mola que le hagan encargos y tal, el rollito de canela es muy popular por ahí, jejeje...\c- diff --git a/lore/es/brcalbum.txt b/lore/es/brcalbum.txt deleted file mode 100644 index cdb0da3ce..000000000 --- a/lore/es/brcalbum.txt +++ /dev/null @@ -1,63 +0,0 @@ -TXT -\cxTítulo:\c- -\cf Counter-Inquisition\c- -\cxArtista:\c- -\cf Black Rat's Coven\c- -\cxAño:\c- -\cf 2100\c- -\cxGénero:\c- -\cf Metal Barroco\c- - -Publicado al entrar en un nuevo siglo, **Counter-Inquisition** es una colección de algunos de los temas más famosos de la banda Británica **Black Rat's Coven**. Todo un siglo de historia musical, desde los humildes orígenes de la banda ya por el año 2006, condensado en un vinilo de puro **Ockophux**, un valioso metal del mundo **Anarukon** del que se dice que ahuyenta espíritus malignos. - -\cfCara A:\c- - 1. Walpurgisnacht - 2. Blood Moon Cantata - 3. Army of Lust - 4. Your Dark Desire - 5. Red Star of Innocence - 6. Dragonheart -\cfCara B:\c- - 7. Black Rat's Coven (Medley) - -Dada su distribución comercial en un formato tan exclusivo, los compradores también tuvieron acceso a una descarga digital de calidad sin pérdidas desde el sitio web de Black Rat's Coven. Adicionalmente, la descarga digital también incluye arte de caratula de alta resolución, y entrevistas en video exclusivas con cada una de las cuatro figurantes de la banda, ofreciendo una vista retrospectiva sobre su historia juntas. - -\cxNotas de Saya:\c- -\cfJOOOOOOOOODEEEEEEEER...\c- - -\cfEsto si que es UNA BUENA MÚSICA DE COJONES, en serio. Ashley-san y el resto... Desde que Yu-chan me metió en todo este tema ya hace tanto tiempo he estado enganchada. Y luego la cosa tremenda esa pasó, Yu-chan y Ashley-san se conocieron, y salieron, y se casaron... Y madre mía. No me puedo creer que esté tan metida con todos los miembros de una de mis bandas favoritas de todos los tiempos (bueno, más o menos).\c- - -\cfDemo-chan, en serio, es que no entiendo como tengo tanta suerte.\c- - -TXT -\cxTítulo:\c- -\cf Counter-Inquisition\c- -\cxArtista:\c- -\cf Black Rat's Coven\c- -\cxAño:\c- -\cf 2100\c- -\cxGénero:\c- -\cf Metal Barroco\c- - -Publicado al entrar en un nuevo siglo, **Counter-Inquisition** es una colección de algunos de los temas más famosos de la banda Británica **Black Rat's Coven**. Todo un siglo de historia musical, desde los humildes orígenes de la banda ya por el año 2006, condensado en un vinilo de puro **Ockophux**, un valioso metal del mundo **Anarukon** del que se dice que ahuyenta espíritus malignos. - -\cfCara A:\c- - 1. Walpurgisnacht - 2. Blood Moon Cantata - 3. Army of Lust - 4. Your Dark Desire - 5. Red Star of Innocence - 6. Dragonheart -\cfCara B:\c- - 7. Black Rat's Coven (Medley) - -Dada su distribución comercial en un formato tan exclusivo, los compradores también tuvieron acceso a una descarga digital de calidad sin pérdidas desde el sitio web de Black Rat's Coven. Adicionalmente, la descarga digital también incluye arte de caratula de alta resolución, y entrevistas en video exclusivas con cada una de las cuatro figurantes de la banda, ofreciendo una vista retrospectiva sobre su historia juntas. - -\cxNotas de Saya:\c- -\cfJOOOOOOOOODEEEEEEEER...\c- - -\cfEsto si que es UNA BUENA MÚSICA DE COJONES, en serio. Ashley-san y el resto... Desde que Yu-chan me metió en todo este tema ya hace tanto tiempo he estado enganchada. Y luego la cosa tremenda esa pasó, Yu-chan y Ashley-san se conocieron, y salieron, y se casaron... Y madre mía. No me puedo creer que esté tan metida con todos los miembros de una de mis bandas favoritas de todos los tiempos (bueno, más o menos).\c- - -\cfDemo-chan, en serio, es que no entiendo como tengo tanta suerte.\c- - -\cfActualización: ¿Recuerdas mi ida de olla cuando tocaron esa canción en nuestra boda? ¿Red Star of Innocence? Dios es que soy puto idiota. Me dio un flashback inmediatamente, recordando aquella vez que le dije a Ashley-san que no tenía ningún interés en conocer a Kirin-kun (compuso esa canción para su 12º cumpleaños). Supongo que tendré que tragarme mis palabras ahora, ¿no?\c- diff --git a/lore/es/cactushege.txt b/lore/es/cactushege.txt deleted file mode 100644 index 9d267e3a9..000000000 --- a/lore/es/cactushege.txt +++ /dev/null @@ -1,18 +0,0 @@ -TAG -Cactus Hege -TXT -\cxDesignación:\c- -\cf Cactus Hege\c- -\cxClasificación:\c- -\cf Planta de Maceta\c- -\cxOrígen:\c- -\cf Finlandia\c- - -El **Cactus Hege** es un pequeño cactus de maceta bastante popular en Finlandia. Se dice que tiene una habilidad para absorber humedad tan potente que puede incluso hacer que la gente sienta sed a su alrededor. No está claro exactamente como ha surgido esta particular especie de cactus, algunos dicen que simplemente ha aparecido de la nada. - -Hay también rumores de que puede hacerte desarrollar un gusto por el arte erótico de tipo furry, aunque no hay pruebas sólidas de esto y es simplemente eso, solo rumores. - -\cxNotas de Saya:\c- -\cfCreo que es una monada, a su manera. Pequeño, redondito, ahí metido en su macetita. Debería pillarme uno, a lo mejor.\c- - -\cfNi siquiera me preocupan esos rumores. No entiendo el estigma que hay con los furros, o por qué se puso la cosa así en todos estos años. El mundo se ha vuelto loco, te digo.\c- diff --git a/lore/es/cytho.txt b/lore/es/cytho.txt new file mode 100644 index 000000000..a5677374b --- /dev/null +++ b/lore/es/cytho.txt @@ -0,0 +1,30 @@ +TXT +\cxNombre Completo:\c- +\cf Archiduque Cytho de la Casa Valathor\c- +\cxNacionalidad:\c- +\cf Kuriste\c- +\cxFecha de Nacimiento:\c- +\cf 2008-10-09\c- +\cxTwitter:\c- +\cf @incuvalathor\c- + +Nacido en la ahora caída villa de Iskar en 2008 como uno de los varones más jóvenes de la humilde **Casa Valathor**, **Cytho** entró al negocio familiar al llegar a la edad adulta, rápidamente ascendiendo en rango en la industria del trabajo sexual del **Infierno**, en parte dada su belleza innata, pero también por la rápida acumulación de "clientes satisfechos" a los que daría servicio regularmente, y los muchos alumnos que tomó bajo su tutela. Ya en 2028, había hecho de la Tierra su segundo hogar, donde abriría una cuenta en redes sociales como una forma más moderna de atraer nueva clientela. + +Un día, sin embargo, todo cambió. Un gran número de íncubos reportaría verse "horrorizados" por las peticiones excesivas de una mujer. Curioso, Cytho entonces se decidió a encontrarla, para ver que era exactamente lo que sus colegas encontraban tan irrazonable. Y así fue como conoció a **Elena Yanikov XVI**, una mujer Anarukon "bajo la maldición de una eterna soltería", la cual tan desesperadamente deseaba encontrar marido que había recurrido finalmente a invocar demonios y suplicarles que se casen con ella. Como era de esperar, todos habían rechazado sus plegarias, sin importar cuanto lo intentara, ya que muchos demonios desconfían de su especie. Cytho, sin embargo, fue compasivo con ella, y aceptó, con una condición: Que tendrían primero una cita. + +Un tiempo después, el archiduque anunció su retiro del trabajo sexual, habiéndose "reformado" como el fiel marido de una mujer Anarukon. Mientras que sus amigos y familiares lo celebraron, otros vieron esto como una afrenta. La Casa Valathor fue criticada severamente por no renegar inmediatamente de él, hasta el punto que una pequeña guerra estalló, en la que la rival **Casa Irishtanar** arrasaría su pueblo natal como "protesta". Ese día, Cytho vería de cerca la crueldad de su propia gente, como único superviviente de aquella masacre. + +Desde entonces, vive en Boston con su mujer y sus tres hijas. El propósito de su cuenta en redes sociales ha cambiado al de comunicar las noticias de aquello que transcurre en su mundo natal, contrastadas con los muchos contactos que ha acumulado durante años, como representante de la subyugada población civil. Aunque la gran mayoría de la población de la Tierra no lo tomaría en serio, no hasta que empezara la **Invasión Demoníaca** de 2148. + +Denunciando la intervención de la **UAC**, posteó sobre los eventos en **Fobos** y **Deimos** mucho antes de que la UAC los hiciese públicos, y proclamó que una invasión en la Tierra era inminente. Aun así pocos lo tomaron en serio, pero una entre ellos era su amiga **Saya Miyamoto**, de **Akari Labs**. Como inversor en su compañía, ya había garantizado anteriormente que tuviese los recursos y mano de obra necesarios para la tarea que le encomendaría: Construir un robot de combata que lucharía contra los invasores. + +Y así, a partir de su colaboración, nació la **Demolicionista**. + +\cxNotas de Saya:\c- +\cfDesde el primer momento que lo conocí, aquella primera vez que visité a la familia de Ellen-san, ya sabía que era más que un guapo y molón abuelete femboy demonio. Sí, Cytho-sama es la caña, y la sangre que corre por sus venas es mucho más noble que la de cualquier capullo pomposo con título que vaya por ahí.\c- + +\cfY sí, sorpresa sorpresa... Es tu padre (bueno, algo así). Pero eso ya lo sabías, ¿verdad?\c- + +\cfEn serio, si no fuera por él, todo esto nunca habría sido posible. Estamos en deuda con él... Solo espero que no tenga que pagarle con mi propio cuerpo (aunque tampoco me importaría, jijijiji).\c- + +\cfPS: Su nombre se pronuncia "Kaizo", lo has dicho mal todo el rato. Pero no te preocupes, no eres la primera.\c- diff --git a/lore/es/demolitionist.txt b/lore/es/demolitionist.txt index 303138e39..957951403 100644 --- a/lore/es/demolitionist.txt +++ b/lore/es/demolitionist.txt @@ -12,13 +12,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. +El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre **Saya Miyamoto** y el **Archiduque Cytho Valathor**, representante de la población civil del **Infierno**. Cada unidad está equipada con varios componentes de terceros, tal como los **Impulsores JetBurst™** a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores **Hammerspace™**, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular **Cinturón Útil Magnético de Symnatek**, o su potente **Batería de Microfusión Celestine**, cortesía del **Instituto Tecnológico Tach-Engine**, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su **CPU IK-349 de Nekuratek**. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs. El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las **Maidbots** de Akari Labs, el **Framework de IA Nekuronbot**, que fue proporcionado a **Saya Miyamoto** como un regalo de amistad de **Zanaveth Nekuraku II**, la ingeniera jefe de IA y actual CEO de **Nekuratek**. Gracias a esta tecnología, y combinado con muchos otros componentes como el **Display CuteEmotion** que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la **Caja de Voz Loudboi** que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades. -La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el **Infierno**. +La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el Infierno. De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de **Demo Miyamoto**, y Saya se refiere a ella como su "hija". Se puede describir a Demo como "muy habladora" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo. @@ -42,13 +42,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. +El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre **Saya Miyamoto** y el **Archiduque Cytho Valathor**, representante de la población civil del **Infierno**. Cada unidad está equipada con varios componentes de terceros, tal como los **Impulsores JetBurst™** a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores **Hammerspace™**, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular **Cinturón Útil Magnético de Symnatek**, o su potente **Batería de Microfusión Celestine**, cortesía del **Instituto Tecnológico Tach-Engine**, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su **CPU IK-349 de Nekuratek**. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs. El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las **Maidbots** de Akari Labs, el **Framework de IA Nekuronbot**, que fue proporcionado a **Saya Miyamoto** como un regalo de amistad de **Zanaveth Nekuraku II**, la ingeniera jefe de IA y actual CEO de **Nekuratek**. Gracias a esta tecnología, y combinado con muchos otros componentes como el **Display CuteEmotion** que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la **Caja de Voz Loudboi** que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades. -La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el **Infierno**. +La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el Infierno. De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de **Demo Miyamoto**, y Saya se refiere a ella como su "hija". Se puede describir a Demo como "muy habladora" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo. @@ -72,13 +72,13 @@ TXT \cxTwitter:\c- \cf @demolitionist_bot\c- -El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. +El **Demolicionista** es uno de los mayores logros de **Akari Labs** en el campo de la robótica. Una unidad de combate manejada por IA capaz de usar eficientemente todo tipo de armamento a su disposición, altamente resistente a todo tipo de daño y capaz de operar en cualquier entorno, incluyendo el vacío del espacio. Puede considerarse el sucesor espiritual del programa de supersoldado **Oni Rojo**, en cierto modo, ya que también sirve el mismo propósito de defender a la Tierra de una fuerza invasora mayor. El proyecto ha sido financiado y patrocinado por los muchos socios de Akari Labs, y es fruto de la colaboración entre **Saya Miyamoto** y el **Archiduque Cytho Valathor**, representante de la población civil del **Infierno**. Cada unidad está equipada con varios componentes de terceros, tal como los **Impulsores JetBurst™** a sus espaldas, permitiéndoles realizar rápidos impulsos en el aire y evasiones, un par de contenedores **Hammerspace™**, permitiendo el acceso a un vasto arsenal, los dos acoplados al tan popular **Cinturón Útil Magnético de Symnatek**, o su potente **Batería de Microfusión Celestine**, cortesía del **Instituto Tecnológico Tach-Engine**, que provee a la unidad de hasta 80 días de autonomía, al máximo de la capacidad de procesado de su **CPU IK-349 de Nekuratek**. Hay más detalles sobre las especificaciones completas de hardware disponibles en la página web de Akari Labs. El núcleo de IA del Demolicionista está construido sobre la misma tecnología que las **Maidbots** de Akari Labs, el **Framework de IA Nekuronbot**, que fue proporcionado a **Saya Miyamoto** como un regalo de amistad de **Zanaveth Nekuraku II**, la ingeniera jefe de IA y actual CEO de **Nekuratek**. Gracias a esta tecnología, y combinado con muchos otros componentes como el **Display CuteEmotion** que permite a la unidad mostrar visiblemente sus emociones a través de un conjunto de simples caras animadas o la **Caja de Voz Loudboi** que la permite hablar casi con naturalidad, el Demolicionista es casi indistinguible de una persona real en su comportamiento y respuesta emocional, haciendo la interacción con civiles mucho más reconfortante. Se puede decir incluso que el Demolicionista tiene su propia personalidad, con sus pequeñas peculiaridades. -La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el **Infierno**. +La primera unidad, conocida afectivamente como **Demo-chan** por Saya, fue desplegada en Junio de 2148 en el territorio de la **Unión de Estados** para combatir la invasión demoníaca atraída por las intervenciones de la **UAC** en el Infierno. De esta primera unidad anteriormente mencionada, se conocen muchos más detalles gracias a la sesión de preguntas y respuestas que Saya realizó en directo meses antes del despliegue. La unidad es reconocida como parte de la familia Miyamoto, teniendo el nombre completo de **Demo Miyamoto**, y Saya se refiere a ella como su "hija". Se puede describir a Demo como "muy habladora" y aficionada a hacer chistes para poner una sonrisa en las caras de la gente, aunque también es muy seria y determinada en su deseo de proteger a quien lo necesita. También es bastante popular con la comunidad LGBTQIA+ dado su feroz soporte de proteger los derechos de aquellos que sufren discriminación por su identidad, e incluso ha anunciado públicamente ser no-binaria. Esto fue algo poco inesperado, dada la experiencia de Saya con el colectivo. diff --git a/lore/es/doomguy.txt b/lore/es/doomguy.txt index 286398779..00873697a 100644 --- a/lore/es/doomguy.txt +++ b/lore/es/doomguy.txt @@ -19,7 +19,7 @@ En el momento de escribir este artículo, el marine ha sido encargado de combati \cxNotas de Saya:\c- \cfBien, COSA IMPORTANTE: no te acerques a este tío, no le digas nada, no te metas en medio. Si os cruzáis, quédate quieta y deja que trabaje, o si no puede que vaya y te pegue un tiro a ti también.\c- -\cfPor cierto, mi enhorabuena a los gorilas de la UAC por lo bien guardado que tienen todo sobre este tío. No sabemos ni como se llama, ni de su historial antes de que empezara toda esta mierda. Es que, ¿que clase de tío es? Tampoco he oído mucho de eso, aunque ¿creo que mencionaron por ahí que le gustan los conejos? ¿conejillos monos?\c- +\cfPor cierto, mi enhorabuena a los gorilas de la UAC por lo bien guardado que tienen todo sobre este tío. No sabemos ni como se llama, ni de su historial antes de que empezara toda esta mierda. Es que, ¿que clase de tío es? Tampoco he oído mucho de eso, aparte de la poca info que Cytho-sama pudo sacar de su anterior paseo por el Infierno, aunque ¿creo que mencionaron por ahí que le gustan los conejos? ¿conejillos monos?\c- \cfBueno, entonces, a lo mejor si haces como que esa cornamenta tuya son orejitas de conejo, puede que no te dispare, quien sabe...\c- TXT diff --git a/lore/es/heavymahsheengun.txt b/lore/es/heavymahsheengun.txt index b1118037d..bbf193574 100644 --- a/lore/es/heavymahsheengun.txt +++ b/lore/es/heavymahsheengun.txt @@ -14,16 +14,14 @@ La munición empleada por este arma son balas anti-armadura del calibre 14.5x114 Aunque generalmente ideada para el uso montado, la operación al paso es posible, siempre y cuando el usuario tenga una servoarmadura de grado plata como mínimo para manejar el potente retroceso. -\cfFuego Primario:\c- Operación a 1050 RPM. El fuego prolongado en este modo es en teoría infinito, ya que el calor producido puede ser anulado eficientemente por los sistemas de refrigeración internos, es entonces el modo recomendado para la mayoría de situaciones. +\cfFuego Primario:\c- Operación a 700 RPM. El fuego prolongado en este modo es en teoría infinito, ya que el calor producido puede ser anulado eficientemente por los sistemas de refrigeración internos, es entonces el modo recomendado para la mayoría de situaciones. -\cfFuego Secundario:\c- Operación a 2100 RPM. El doble de balas, pero con mucho más calor. El fuego prolongado en este modo puede activar el bloqueo de seguridad del arma si el aumento de temperatura acerca el arma a niveles no operacionales. +\cfFuego Secundario:\c- Operación a 1050 RPM. Mayor velocidad, con calentamiento moderado. Aun es posible el fuego continuado en este modo, durante al menos un minuto aproximadamente desde un inicio en frío. Si necesitas repartir más dolor y tienes munición de sobra, usa esto. -\cfFuego Terciario:\c- Alterna la rotación automática, para reducir el tiempo de espera entre ráfagas. Ten en cuenta, sin embargo, que mientras esto esté activo, el ruido alertará a los enemigos. +\cfFuego Terciario:\c- Operación a 2100 RPM. Extremadamente rápido, con el mayor potencial de calor. El fuego prolongado en este modo puede activar rápidamente el bloqueo de seguridad del arma si el aumento de temperatura se acerca a niveles no operacionales. Si tienes prisa por matar y no te importa quedarte sin munición en pocos segundos, entonces elige esto. \cfRecarga:\c- No se necesita absolutamente recargar el arma, ya que se alimenta directamente desde Hammerspace, requiriendo solo un gran suministro de munición. Los contenedores de Hammerspace automáticamente conectarán todas las rondas necesarias para la alimentación enlazada. -\cfTécnicas:\c- Ambos gatillos pueden ser usados simultáneamente, permitiendo un modo híbrido de doble disparo, con tres veces la cantidad de balas. La liberación de calor de este modo es muy alta, sin embargo, así que no es recomendable el uso extendido. - \cxNotas de Saya:\c- \cfHEAVY MAH-SHEEN GUN!!!\c- diff --git a/lore/es/ibukimilk.txt b/lore/es/ibukimilk.txt deleted file mode 100644 index 7e1bc08ca..000000000 --- a/lore/es/ibukimilk.txt +++ /dev/null @@ -1,46 +0,0 @@ -TAG -Leche de Oni Rojo -TXT -\cxDesignación:\c- -\cf Leche de Oni Rojo 100% Natural\c- -\cxFabricante:\c- -\cf Akari Labs\c- -\cxClasificación:\c- -\cf Producto Lácteo Fresco\c- - -Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La **Leche de Oni Rojo** está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de **Akari Labs**. - -\cxNotas de Saya:\c- -\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c- - -\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así.\c- -TXT -\cxDesignación:\c- -\cf Leche de Oni Rojo 100% Natural\c- -\cxFabricante:\c- -\cf Akari Labs\c- -\cxClasificación:\c- -\cf Producto Lácteo Fresco\c- - -Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La **Leche de Oni Rojo** está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de **Akari Labs**. - -\cxNotas de Saya:\c- -\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c- - -\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así, ¿a que sí? Dios, si solo pudieras ver la cara que pones cuando la bebes. Es que, es tan adorable...\c- -TXT -\cxDesignación:\c- -\cf Leche de Oni Rojo 100% Natural\c- -\cxFabricante:\c- -\cf Akari Labs\c- -\cxClasificación:\c- -\cf Producto Lácteo Fresco\c- - -Crece fuerte y sano como la legendaria súper-soldado con esta bebida de leche fresca. La **Leche de Oni Rojo** está imbuida de nutrientes 100% naturales, y es apta para el consumo tanto por niños como adultos. Sea tomada fría o caliente, no te decepcionará su rico sabor. Disponible solo a través de **Akari Labs**. - -\cxNotas de Saya:\c- -\cfTía, cuando le pasé la idea a Ibuki me sorprende que aceptara. A ver, vender su propia leche a todo el mundo... Bueno, tampoco es que sea algo malo, ¿verdad? Solo es leche. Y una leche REALMENTE buena, por cierto. Con la cantidad que puede producir, nos hemos sacado un beneficio de aúpa con todo durante estos años.\c- - -\cfPor supuesto, prefiero beberla directamente de la fuente. Está aun más rica así, ¿a que sí? Dios, si solo pudieras ver la cara que pones cuando la bebes. Es que, es tan adorable...\c- - -\cfActualización: Y mira tu por donde vaya sorpresa. Kirin-kun por supuesto que le tiene un buen aprecio también. A ver, es que nadie puede resistirse realmente, es demasiado buena. Aun así, dice que la leche de Akashna sabe mejor, y a ver supongo que estoy de acuerdo. Aunque da un poco de tirria que algo tan delicioso salga de los putos quistes de la joroba de un monstruo de pantano con pinta asquerosa.\c- diff --git a/lore/es/lithiumnovel.txt b/lore/es/lithiumnovel.txt deleted file mode 100644 index 4adf4337b..000000000 --- a/lore/es/lithiumnovel.txt +++ /dev/null @@ -1,18 +0,0 @@ -TXT -\cxTítulo:\c- -\cf Lithium - Volumen Uno\c- -\cxAutor:\c- -\cf Anónimo\c- -\cxGénero:\c- -\cf Ciencia Ficción, Historia Alternativa\c- - -El primer volumen de una serie aun sin terminar, el cual apareció en una librería de ubicación no revelada. Tal como relata su encargado, esta novela gráfica simplemente apareció allí, sellada al vacío, en perfecta condición. Cuenta la historia de un mundo alternativo, muy parecido al nuestro, donde ocurre una invasión demoníaca. A pesar de haber aparecido a principios del siglo XXI, algunos detalles son precisamente similares a los de la invasión de 2148, aunque la historia que se cuenta desvía de ello, con un desenlace mucho más funesto. - -Nadie sabe quien es el autor, no se menciona en inguna de sus páginas. Ni siquiera en su portada, y la parte trasera está en blanco excepto por un único triángulo multicolor. Aun así, se hicieron muchas copias, y se volvió inmensamente popular, llegando incluso a recibir varios premios, siendo considerada una de las mejores novelas gráficas de todos los tiempos. - -Los fans esperan que, un día, un segundo volumen aparezca, de una forma tan misteriosa como el primero. - -\cxNotas de Saya:\c- -\cfDios... joder... es que esto... es buenísimo, en serio. Necesitas sentarte a leerlo un día, es una experiencia que te cambia la vida. Esto está a años luz de cualquier cosa que se haya escrito, en toda la historia de la humanidad.\c- - -\cfBueno, puede que esté exagerando un poco, porque soy muy fan, pero venga. En serio, échale un ojo después de la misión, te encantará, Demo-chan.\c- diff --git a/lore/es/manarokou.txt b/lore/es/manarokou.txt deleted file mode 100644 index a4c0bc3bc..000000000 --- a/lore/es/manarokou.txt +++ /dev/null @@ -1,18 +0,0 @@ -TAG -Manaroca -TXT -\cxDesignación:\c- -\cf Manaroca\c- -\cxClasificación:\c- -\cf Fruta\c- -\cxOrígen:\c- -\cf Uusnai, Kurain\c- - -La **Manaroca** (Adkana: Manarokou, lit.: "fruto de corazón blindado") es una fruta común de la región de **Uusnai** en el plano divino de **Kurain**. Conocido por su elegante aroma y corazón suave y cremoso, es considerada toda una delicia por los **Dioses**. Se sabe también que, si no se extrae de forma limpia y adecuada de su dura corteza externa, puede volverse un veneno letal, causando una muerte rápida en criaturas mundanas por medio de una potentísima neurotoxina. - -Rara vez, apenas, ha sido vista en nuestro mundo. Algunos dioses pueden traerlas, pero solo pueden crecer en el terreno del plano divino. Uno debe tener mucho cuidado si un dios le ofrece esta fruta. Siempre hay que asegurarse de que la hayan pelado adecuadamente para su consumo, ya que no hay antídoto conocido, y el daño que causan sus toxinas es irreversible. - -\cxNotas de Saya:\c- -\cf*suspiro* Maruku me dio uno una vez. Y yo como idiota total que era le metí un mordisco a pelo, con corteza y todo. Obviamente, la palmé mucho. Eché los hígados en el proceso, mezclado todo con un montón de sangre, también, lo cual no me hizo quedar muy bien. Desde entonces, siempre las pela primero. Están muy ricas cuando no te matan al instante. El sabor... no sé bien como describirlo, es dulce, un poco como a limón, pero sin ser para nada ácido, y se derrite en la boca. Es como una natilla, casi.\c- - -\cfSabes, estaba pensando, esto fue casi como todo lo contrario a aquella vez que probé el pez globo. A ver... me parece que está sobrevalorado del todo. A lo mejor es que el riesgo de palmarla es lo que hace que a la gente le sepa tan bien, y entonces ¿al ser inmortal... pierde todo eso para mí? Ni idea. Aun así, prefiero más esta fruta de muerte instantánea.\c- diff --git a/lore/es/modernsparkster.txt b/lore/es/modernsparkster.txt index 66f541efb..20990bb85 100644 --- a/lore/es/modernsparkster.txt +++ b/lore/es/modernsparkster.txt @@ -17,9 +17,9 @@ Entonces, un descubrimiento llegó: ¿Por qué intentar copiar algo que jamás p \cfFuego Secundario:\c- Mantén para cargar una masa de plasma de Nokron, suelta para liberarla en el mundo. Aunque es inmediatamente más destructiva que la munición primaria, esta es menos estable, y tiende a salir como un estallido candente, en lugar de un proyectil. -\cfRecarga Primaria:\c- Carga una célula de Kinylum. Se pueden tener hasta 3 en reserva. +\cfRecarga Primaria:\c- Carga una célula de Kinylum. Hasta 4 se pueden cargar. -\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad de reserva. +\cfRecarga Secundaria:\c- Carga una célula de Nokron. Misma capacidad. \cfTécnicas:\c- La carga de proyectil puede mantenerse de forma indefinida, ya que el arma se ventilará regularmente para estabilizar la potencia pico de ignición del arma. Esto puede permitir que uno simplemente cargue desde cobertura y salga para soltar el disparo cuando sea necesario. Adicionalmente, la posibilidad de pulsar ambos gatillos a la vez también está documentada, lo cual permite una potente descarga de plasma de Nokorokinylum, comparable a una pequeña bomba nuclear en potencial destructor. No se recomienda realizar un ataque combinado a menos que el objetivo esté lo suficientemente lejos para no poner en peligro al usuario. diff --git a/lore/es/psykkonovexx.txt b/lore/es/psykkonovexx.txt deleted file mode 100644 index 312620740..000000000 --- a/lore/es/psykkonovexx.txt +++ /dev/null @@ -1,22 +0,0 @@ -TXT -\cxDesignación:\c- -\cf Psykkonovexx ("Monarca Liberador Armónico")\c- -\cxFabricante:\c- -\cf Umaakhia Akhxhaen\c- -\cxClasificación:\c- -\cf Instrumento Electrónico de Viento\c- - -El **Psykkonovexx**, el cual toma su nombre de uno de los **Nueve Reyes de Kurenai**, es uno de los principales instrumentos en la composición de música moderna **Anarukon**, siendo especialmente popular por su profundo, reverberante sonido metálico. Aunque no hay equivalentes directos en el mundo humano, algunos opinan que el instrumento más similar sería la gaita, aunque esta comparación se considera bastante forzada. - -Entre varios artistas de renombre, uno de los usuarios más prolíficos de este instrumento es el cofundador de la banda **Dark Reaches Project**, el príncipe heredero **Ossid Anderken**. Su maestría del Psykkonovexx le ha permitido componer melodías realmente fascinantes, integrándose perfectamente con el tono oscuro y tenebroso de las muchas composiciones sintéticas de la banda. - -La operación del instrumento es ciertamente simple, siendo manejado principalmente a través de dos deslizadores de modulación y un pequeño conjunto de botones con sensibilidad de presión para mezclar varios tonos de base juntos, permitiendo toda clase de armonías intricadas. Un músico verdaderamente habilidoso puede incluso retorcer estos sonidos en muy distintivos "rugidos", los cuales son descritos como "el sonido de un millón de motosierras acelerando en perfecta armonía". - -\cxNotas de Saya:\c- -\cf¿Puedo añadir que la música Anarukon es absolutamente puto hardcore de cojones? No en serio, como alquien a quien le molan los "dulces sonidos" del drone metal y dark ambient, me va muchísimo este tema. Desearía poder haber tenido esto en mi vida mucho antes.\c- - -\cfDios, es que hasta llegué a conocer al tío en persona, y el resto de la banda. El tal Ossid este, es más retaco que yo, ya lo has visto, pero mucho más viejo de lo que parece, el tío lleva haciendo todo esto durante miles de años ya. Yo ya me imagino total que aprender el instrumento este no es algo para lo que un humano normal y mortal tendría tiempo. Pero a lo mejor yo... Bueno, o no.\c- - -\cfPor cierto puta hostia si me da cague el marido que tiene, con todo el rollo ese de querer convertir mi aura en un instrumento o yo que sé que mierdas. No tengo ni idea de a qué vino todo eso.\c- - -\cfEn fin, te sugiero que no te pongas a juguetear con esta cosa en plena misión. Probablemente hagas tanto ruido que acabes despertando a todos los monstruos de la zona.\c- diff --git a/lore/es/quadravol.txt b/lore/es/quadravol.txt index 11540d01f..930b87f12 100644 --- a/lore/es/quadravol.txt +++ b/lore/es/quadravol.txt @@ -18,11 +18,11 @@ La Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida \cfFuego Primario:\c- Disparo de gran bola de fuego. Desvío mucho menor, por lo que su rango efectivo es muy largo. Incendia objetivos cercanos al impactar. -\cfFuego Secundario:\c- Disparo disperso de bolas de fuego menores. Desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos. +\cfFuego Secundario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario realizará disparos en cadena rápidos de baja potencia. -\cfFuego Terciario:\c- Bombea combustible adicional, incrementando la potencia de tus disparos, pero también su desvío, haciéndolos menos precisos. La sobrecarga excesiva puede resultar en una imprecisa descarga accidental, pero incluso esto tiene sus usos. Forzar el bombeo mientras se usa el fuego primario o secundario realizará disparos en cadena rápidos de baja potencia. +\cfFuego Terciario:\c- Alterna el fuego primario a un modo de dispersión. Varias bolas de fuego menores (número relativo a la carga), con un desvío incrementado y rango efectivo menor, pero muy útil contra múltiples objetivos. -\cfRecarga:\c- Cada caja de combustible permite diez disparos (menos si potenciados), tras lo cual debe ser recargada. El arma mantiene la caja acoplada firmemente hasta que está completamente vacía, sin embargo. +\cfRecarga:\c- Inserta hasta cinco células de combustible en el tubo del arma. Cada célula es expulsada inmediatamente tras ser vaciada en el "crisol" interno del arma, así que puedes almacenar munición adicional mientras mantienes la carga. \cfTécnicas:\c- El arma tiene un cierto movimiento especial "extra efectivo" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas. diff --git a/lore/es/tastyhoagie.txt b/lore/es/tastyhoagie.txt deleted file mode 100644 index 4cd13845a..000000000 --- a/lore/es/tastyhoagie.txt +++ /dev/null @@ -1,18 +0,0 @@ -TXT -\cxDesignación:\c- -\cf Hoagie\c- -\cxClasificación:\c- -\cf Bocadillo\c- -\cxOrígen:\c- -\cf Filadelfia, EEUU\c- - -Los **hoagies**, también conocidos como subs, son un popular tipo de bocata Americano. Hecho con un pan francés y rellenado de toda clase de carnes, quesos y verduras, es una comida muy popular, no solo en la Tierra, si no también incluso en el mismo **Infierno**. - -Tal y como confirma el **Archiduque Cytho Valathor**, fuente local de noticias del Infierno en nuestro mundo, ha ganado mucha fama entre demonios civiles que nos han visitado por medio de rituales de invocación, los cuales luego lo difundirían al resto de la población. Varios establecimientos que los sirven se han formado por todo el territorio central e incluso algunos puntos recónditos del vasto reino. Incluso se sabe que el mismísimo **Rey Akusei** los disfruta. - -En tiempos recientes, este bocata se ha convertido en un símbolo de paz, usado por demonios civiles en protesta contra la hostilidad hacia los humanos. En cierto modo, el hoagie representa que ambas civilizaciones pueden coexistir. - -\cxNotas de Saya:\c- -\cfNo me puedo creer que un puto bocadillo pudiera llegar tan lejos. Y es verdad, lo se bien. Conoces a Sakurai-san, ¿no? El tío malrollento ese del departamento de software. Dice ser "invocador de bestias infernales", pero todo lo que hizo fue rodearse de súcubos buenorras. Pues eso, cada vez que las tías se pasan a recogerlo, siempre dicen cosas tipo "vámonos a por unos jugosos hoagies luego".\c- - -\cf¿Como coño se ha vuelto tan popular allá? Es que no lo entiendo.\c- diff --git a/lore/es/uac.txt b/lore/es/uac.txt index 90e4d5744..43c2a25b0 100644 --- a/lore/es/uac.txt +++ b/lore/es/uac.txt @@ -101,4 +101,4 @@ De la poca información que se pudo recuperar del otro lado de todo esto, del pr \cxNotas de Saya:\c- \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- -\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- +\cfY 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- diff --git a/menudef.txt b/menudef.txt index 658532f0c..7fa48e48d 100644 --- a/menudef.txt +++ b/menudef.txt @@ -78,6 +78,8 @@ OptionMenu "SWWMOptionMenu" Title "$SWWM_MTITLE" Submenu "$SWWM_MMTITLE", "SWWMMinimapMenu" + SafeCommand "$SWWM_CRESET", "event swwmresetcvars" + SafeCommand "$SWWM_ARESET", "event swwmresetachievements" StaticText " " StaticText "$SWWM_PTITLE", "Blue" @@ -116,6 +118,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SCORENUMS", "swwm_scorenums", "YesNo" Option "$SWWM_SCOREBONUS", "swwm_scorebonus", "YesNo" Option "$SWWM_POIS", "swwm_pois", "YesNo" + Option "$SWWM_NOMAPMSG", "swwm_nomapmsg", "NoYes" 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" @@ -189,6 +192,8 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_BUSTERPAUSE", "swwm_cbtpause", "YesNo" Option "$SWWM_COLLECTANIM", "swwm_collectanim", "YesNo" Option "$SWWM_COLLECTANIMKEY", "swwm_collectanimkey", "YesNo" + Option "$SWWM_WEAPONTOOLTIPS", "swwm_weapontooltips", "YesNo" + SafeCommand "$SWWM_RESETTOOLTIPS", "event swwmresettooltips" StaticText " " StaticText "$SWWM_CTITLE", "Blue" Option "$SWWM_SKEYS", "swwm_sharekeys", "YesNo" diff --git a/modeldef.ammo b/modeldef.ammo index 81fea655e..c02f73d18 100644 --- a/modeldef.ammo +++ b/modeldef.ammo @@ -275,6 +275,32 @@ Model "EvisceratorShell" FrameIndex XZW1 A 0 0 } +Model "EvisceratorShell2" +{ + Path "models" + + Model 0 "EvisceratorClip_Two_d.3d" + SurfaceSkin 0 0 "EvisceratorShell.png" + SurfaceSkin 0 1 "EvisceratorClip.png" + Scale 0.18 0.18 0.18 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "EvisceratorShell3" +{ + Path "models" + + Model 0 "EvisceratorClip_Three_d.3d" + SurfaceSkin 0 0 "EvisceratorShell.png" + SurfaceSkin 0 1 "EvisceratorClip.png" + Scale 0.18 0.18 0.18 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "EvisceratorSixPack" { Path "models" @@ -302,6 +328,30 @@ Model "HellblazerMissiles" FrameIndex XZW1 A 0 0 } +Model "HellblazerMissiles2" +{ + Path "models" + + Model 0 "HellblazerDuo_d.3d" + Skin 0 "HellblazerMissile.png" + Scale 0.16 0.16 0.16 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "HellblazerMissiles3" +{ + Path "models" + + Model 0 "HellblazerTrio_d.3d" + Skin 0 "HellblazerMissile.png" + Scale 0.16 0.16 0.16 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "HellblazerMissileMag" { Path "models" @@ -330,6 +380,18 @@ Model "HellblazerCrackshots" FrameIndex XZW1 A 0 0 } +Model "HellblazerCrackshots2" +{ + Path "models" + + Model 0 "HellblazerDuo_d.3d" + Skin 0 "HellblazerMissile_Cluster.png" + Scale 0.16 0.16 0.16 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "HellblazerCrackshotMag" { Path "models" @@ -414,6 +476,18 @@ Model "SparkUnit" FrameIndex XZW1 A 0 0 } +Model "SparkUnit2" +{ + Path "models" + + Model 0 "SparksterAmmo2_d.3d" + Skin 0 "SparksterAmmo.png" + Scale 0.16 0.16 0.16 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "SilverBulletAmmo" { @@ -454,6 +528,30 @@ Model "SilverBullets" FrameIndex XZW1 A 0 0 } +Model "SilverBullets_2" +{ + Path "models" + + Model 0 "SilverbulletBullet2_d.3d" + Skin 0 "SilverbulletBullet.png" + Scale 0.05 0.05 0.05 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SilverBullets_3" +{ + Path "models" + + Model 0 "SilverbulletBullet3_d.3d" + Skin 0 "SilverbulletBullet.png" + Scale 0.05 0.05 0.05 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "SilverBullets2" { Path "models" @@ -467,6 +565,30 @@ Model "SilverBullets2" FrameIndex XZW1 A 0 0 } +Model "SilverBullets2_2" +{ + Path "models" + + Model 0 "SilverbulletBullet2_FCB_d.3d" + Skin 0 "SilverbulletBullet_FCB.png" + Scale 0.05 0.05 0.05 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SilverBullets2_3" +{ + Path "models" + + Model 0 "SilverbulletBullet3_FCB_d.3d" + Skin 0 "SilverbulletBullet_FCB.png" + Scale 0.05 0.05 0.05 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "CandyGunAmmo" { @@ -495,6 +617,32 @@ Model "CandyGunBullets" FrameIndex XZW1 A 0 0 } +Model "CandyGunBullets2" +{ + Path "models" + + Model 0 "ExplodiumBullet2_d.3d" + SurfaceSkin 0 0 "CandyBullet.png" + SurfaceSkin 0 1 "CandyCasing.png" + Scale 0.02 0.02 0.02 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "CandyGunBullets3" +{ + Path "models" + + Model 0 "ExplodiumBullet3_d.3d" + SurfaceSkin 0 0 "CandyBullet.png" + SurfaceSkin 0 1 "CandyCasing.png" + Scale 0.02 0.02 0.02 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "YnykronAmmo" { diff --git a/modeldef.collectibles b/modeldef.collectibles index 7e210c605..060003f5e 100644 --- a/modeldef.collectibles +++ b/modeldef.collectibles @@ -78,78 +78,13 @@ Model "SayaBean" } Model "MothPlushy" { - Path "models/extra" + Path "models" - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "AA12Model" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "CactusHege" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "TastyHoagie" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "IbukiMilk" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "BRCAlbum" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 + Model 0 "MothPlush_d.3d" + Skin 0 "MothPlush.png" + Scale 0.06 0.06 0.06 + ZOffset 20 + RollOffset 30 ROTATING FrameIndex XZW1 A 0 0 @@ -168,32 +103,6 @@ Model "DemoPlush" FrameIndex XZW1 A 0 0 } -Model "Manarokou" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "LithiumNovel" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} Model "KirinCummies" { Path "models" @@ -246,16 +155,3 @@ Model "KirinPlush" FrameIndex XZW1 A 0 0 } -Model "Psykkonovexx" -{ - Path "models/extra" - - Model 0 "BaseCube_d.3d" - Skin 0 "CHIPTILE" - Scale 0.04 0.04 0.04 - ZOffset 16 - PitchOffset 30 - ROTATING - - FrameIndex XZW1 A 0 0 -} diff --git a/modeldef.dlcammo b/modeldef.dlcammo index 6b49bb050..ecd31cfc0 100644 --- a/modeldef.dlcammo +++ b/modeldef.dlcammo @@ -11,6 +11,32 @@ Model "SMW05Ammo" FrameIndex XZW1 A 0 0 } +Model "SMW05Ammo2" +{ + 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 "SMW05Ammo3" +{ + 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 "SMW05SmallAmmo" { Path "models/extra" @@ -51,6 +77,32 @@ Model "SheenAmmo" FrameIndex XZW1 A 0 0 } +Model "SheenAmmo2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.015 0.015 0.015 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SheenAmmo3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.015 0.015 0.015 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "SheenTinyAmmo" { Path "models/extra" @@ -104,6 +156,32 @@ Model "QuadravolAmmo" FrameIndex XZW1 A 0 0 } +Model "QuadravolAmmo2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "QuadravolAmmo3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "DarkCanister" { @@ -132,6 +210,19 @@ Model "EMPCore" FrameIndex XZW1 A 0 0 } +Model "EMPCore2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "RayBolt" { @@ -146,6 +237,32 @@ Model "RayBolt" FrameIndex XZW1 A 0 0 } +Model "RayBolt2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "RayBolt5" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "RayAmmo" { Path "models/extra" diff --git a/modeldef.dlcammo2 b/modeldef.dlcammo2 index 70047162e..ba7193c0b 100644 --- a/modeldef.dlcammo2 +++ b/modeldef.dlcammo2 @@ -11,6 +11,32 @@ Model "SparksterBAmmo" FrameIndex XZW1 A 0 0 } +Model "SparksterBAmmo2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SparksterBAmmo3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "SparksterRAmmo" { Path "models/extra" @@ -24,6 +50,32 @@ Model "SparksterRAmmo" FrameIndex XZW1 A 0 0 } +Model "SparksterRAmmo2" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "SparksterRAmmo3" +{ + Path "models/extra" + + Model 0 "BaseCube_d.3d" + Skin 0 "CHIPTILE" + Scale 0.025 0.025 0.025 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "MisterRound" { @@ -38,6 +90,58 @@ Model "MisterRound" FrameIndex XZW1 A 0 0 } +Model "MisterRound2" +{ + 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 "MisterRound3" +{ + 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 "MisterRound5" +{ + 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 "MisterRound10" +{ + 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 "MisterAmmo" { Path "models/extra" diff --git a/modeldef.itemgesture b/modeldef.itemgesture index de325da3b..21ce2f2df 100644 --- a/modeldef.itemgesture +++ b/modeldef.itemgesture @@ -212,6 +212,51 @@ Model "SayaBeanGesture" FrameIndex XZW1 W 0 23 FrameIndex XZW1 X 0 24 } +Model "MothPlushyGesture" +{ + Path "models" + Model 0 "MothPlush1st_d.3d" + SurfaceSkin 0 0 "DemoTags.png" + SurfaceSkin 0 1 "DemoArms.png" + SurfaceSkin 0 2 "DemoSoft.png" + SurfaceSkin 0 3 "MothPlush.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Base + FrameIndex XZW1 A 0 0 + // Pickup + FrameIndex XZW1 B 0 1 + FrameIndex XZW1 C 0 2 + FrameIndex XZW1 D 0 3 + FrameIndex XZW1 E 0 4 + FrameIndex XZW1 F 0 5 + FrameIndex XZW1 G 0 6 + FrameIndex XZW1 H 0 7 + FrameIndex XZW1 I 0 8 + FrameIndex XZW1 J 0 9 + FrameIndex XZW1 K 0 10 + FrameIndex XZW1 L 0 11 + FrameIndex XZW1 M 0 12 + FrameIndex XZW1 N 0 13 + FrameIndex XZW1 O 0 14 + FrameIndex XZW1 P 0 15 + FrameIndex XZW1 Q 0 16 + FrameIndex XZW1 R 0 17 + FrameIndex XZW1 S 0 18 + FrameIndex XZW1 T 0 19 + FrameIndex XZW1 U 0 20 + FrameIndex XZW1 V 0 21 + FrameIndex XZW1 W 0 22 + FrameIndex XZW1 X 0 23 + FrameIndex XZW1 Y 0 24 + FrameIndex XZW1 Z 0 25 + FrameIndex XZW2 A 0 26 + FrameIndex XZW2 B 0 27 + FrameIndex XZW2 C 0 28 + FrameIndex XZW2 D 0 29 +} Model "DemoPlushGesture" { Path "models" diff --git a/modeldef.misc b/modeldef.misc index f3a14d217..264d9fe1f 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -281,18 +281,26 @@ Model "ShinemapDebugSphere" FrameIndex XZW1 H 0 0 Skin 0 "matcap/invincimap.png" FrameIndex XZW1 I 0 0 - Skin 0 "matcap/leadmap.png" + Skin 0 "matcap/kinymap.png" FrameIndex XZW1 J 0 0 - Skin 0 "matcap/pinkmap.png" + Skin 0 "matcap/leadmap.png" FrameIndex XZW1 K 0 0 - Skin 0 "matcap/puromap.png" + Skin 0 "matcap/nkrknmap.png" FrameIndex XZW1 L 0 0 - Skin 0 "matcap/purpmap.png" + Skin 0 "matcap/nokromap.png" FrameIndex XZW1 M 0 0 - Skin 0 "matcap/ragemap.png" + Skin 0 "matcap/pearlmap.png" FrameIndex XZW1 N 0 0 - Skin 0 "matcap/redmap.png" + Skin 0 "matcap/pinkmap.png" FrameIndex XZW1 O 0 0 - Skin 0 "matcap/silvermap.png" + Skin 0 "matcap/puromap.png" FrameIndex XZW1 P 0 0 + Skin 0 "matcap/purpmap.png" + FrameIndex XZW1 Q 0 0 + Skin 0 "matcap/ragemap.png" + FrameIndex XZW1 R 0 0 + Skin 0 "matcap/redmap.png" + FrameIndex XZW1 S 0 0 + Skin 0 "matcap/silvermap.png" + FrameIndex XZW1 T 0 0 } diff --git a/modeldef.pickups b/modeldef.pickups index 3ccbaf934..5b7c40940 100644 --- a/modeldef.pickups +++ b/modeldef.pickups @@ -299,3 +299,42 @@ Model "MykradvoX2" AngleOffset 180 FrameIndex XZW1 B 0 0 } +Model "SafetyTether" +{ + Path "models" + + Model 0 "SafetyTether_d.3d" + Skin 0 "SafetyTether_off.png" + Scale 0.02 0.02 0.02 + ZOffset 16 + PitchOffset 30 + ROTATING + + FrameIndex XZW1 A 0 0 + Skin 0 "SafetyTether.png" + FrameIndex XZW1 B 0 0 +} +Model "AngerySigil" +{ + Path "models" + + Model 0 "DevaSigil_d.3d" + Skin 0 "DevaSigil.png" + Scale 0.07 0.07 0.07 + ZOffset 20 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "DivineSprite" +{ + Path "models" + + Model 0 "DivineSprite_d.3d" + Skin 0 "DivineSprite.png" + Scale 0.03 0.03 0.03 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/models/DevaSigil.blend b/models/DevaSigil.blend new file mode 100644 index 000000000..08af7d87a Binary files /dev/null and b/models/DevaSigil.blend differ diff --git a/models/DevaSigil.png b/models/DevaSigil.png new file mode 100644 index 000000000..c48a5e2e5 Binary files /dev/null and b/models/DevaSigil.png differ diff --git a/models/DevaSigil_a.3d b/models/DevaSigil_a.3d new file mode 100644 index 000000000..b675185c5 Binary files /dev/null and b/models/DevaSigil_a.3d differ diff --git a/models/DevaSigil_d.3d b/models/DevaSigil_d.3d new file mode 100644 index 000000000..4563648cc Binary files /dev/null and b/models/DevaSigil_d.3d differ diff --git a/models/DevaSigil_mask.png b/models/DevaSigil_mask.png new file mode 100644 index 000000000..5edfcab58 Binary files /dev/null and b/models/DevaSigil_mask.png differ diff --git a/models/DivineSprite.blend b/models/DivineSprite.blend new file mode 100644 index 000000000..49ee5aefa Binary files /dev/null and b/models/DivineSprite.blend differ diff --git a/models/DivineSprite.png b/models/DivineSprite.png new file mode 100644 index 000000000..b569511c7 Binary files /dev/null and b/models/DivineSprite.png differ diff --git a/models/DivineSprite_a.3d b/models/DivineSprite_a.3d new file mode 100644 index 000000000..06d4eef1b Binary files /dev/null and b/models/DivineSprite_a.3d differ diff --git a/models/DivineSprite_d.3d b/models/DivineSprite_d.3d new file mode 100644 index 000000000..b5c6291b2 Binary files /dev/null and b/models/DivineSprite_d.3d differ diff --git a/models/DivineSprite_mask.png b/models/DivineSprite_mask.png new file mode 100644 index 000000000..1520b0555 Binary files /dev/null and b/models/DivineSprite_mask.png differ diff --git a/models/EvisceratorClip.png b/models/EvisceratorClip.png new file mode 100644 index 000000000..f2f644573 Binary files /dev/null and b/models/EvisceratorClip.png differ diff --git a/models/EvisceratorClip_Three_a.3d b/models/EvisceratorClip_Three_a.3d new file mode 100644 index 000000000..f15c5bae5 Binary files /dev/null and b/models/EvisceratorClip_Three_a.3d differ diff --git a/models/EvisceratorClip_Three_d.3d b/models/EvisceratorClip_Three_d.3d new file mode 100644 index 000000000..d48269ff2 Binary files /dev/null and b/models/EvisceratorClip_Three_d.3d differ diff --git a/models/EvisceratorClip_Two_a.3d b/models/EvisceratorClip_Two_a.3d new file mode 100644 index 000000000..65bb10335 Binary files /dev/null and b/models/EvisceratorClip_Two_a.3d differ diff --git a/models/EvisceratorClip_Two_d.3d b/models/EvisceratorClip_Two_d.3d new file mode 100644 index 000000000..0e7954d2a Binary files /dev/null and b/models/EvisceratorClip_Two_d.3d differ diff --git a/models/ExplodiumBullet2_a.3d b/models/ExplodiumBullet2_a.3d new file mode 100644 index 000000000..d8fdfe291 Binary files /dev/null and b/models/ExplodiumBullet2_a.3d differ diff --git a/models/ExplodiumBullet2_d.3d b/models/ExplodiumBullet2_d.3d new file mode 100644 index 000000000..58f017256 Binary files /dev/null and b/models/ExplodiumBullet2_d.3d differ diff --git a/models/ExplodiumBullet3_a.3d b/models/ExplodiumBullet3_a.3d new file mode 100644 index 000000000..cb4b7611d Binary files /dev/null and b/models/ExplodiumBullet3_a.3d differ diff --git a/models/ExplodiumBullet3_d.3d b/models/ExplodiumBullet3_d.3d new file mode 100644 index 000000000..b77c57757 Binary files /dev/null and b/models/ExplodiumBullet3_d.3d differ diff --git a/models/HellblazerDuo_a.3d b/models/HellblazerDuo_a.3d new file mode 100644 index 000000000..8c256c83a Binary files /dev/null and b/models/HellblazerDuo_a.3d differ diff --git a/models/HellblazerDuo_d.3d b/models/HellblazerDuo_d.3d new file mode 100644 index 000000000..9c99d3d18 Binary files /dev/null and b/models/HellblazerDuo_d.3d differ diff --git a/models/HellblazerTrio_a.3d b/models/HellblazerTrio_a.3d new file mode 100644 index 000000000..1b69d81c3 Binary files /dev/null and b/models/HellblazerTrio_a.3d differ diff --git a/models/HellblazerTrio_d.3d b/models/HellblazerTrio_d.3d new file mode 100644 index 000000000..aee734a3f Binary files /dev/null and b/models/HellblazerTrio_d.3d differ diff --git a/models/MothPlush.blend b/models/MothPlush.blend new file mode 100644 index 000000000..225272253 Binary files /dev/null and b/models/MothPlush.blend differ diff --git a/models/MothPlush.png b/models/MothPlush.png new file mode 100644 index 000000000..be2bd411a Binary files /dev/null and b/models/MothPlush.png differ diff --git a/models/MothPlush1st.blend b/models/MothPlush1st.blend new file mode 100644 index 000000000..494dbc46a Binary files /dev/null and b/models/MothPlush1st.blend differ diff --git a/models/MothPlush1st_a.3d b/models/MothPlush1st_a.3d new file mode 100644 index 000000000..4ed7d33b2 Binary files /dev/null and b/models/MothPlush1st_a.3d differ diff --git a/models/MothPlush1st_d.3d b/models/MothPlush1st_d.3d new file mode 100644 index 000000000..01514aaf8 Binary files /dev/null and b/models/MothPlush1st_d.3d differ diff --git a/models/MothPlush_a.3d b/models/MothPlush_a.3d new file mode 100644 index 000000000..ae7cc8a91 Binary files /dev/null and b/models/MothPlush_a.3d differ diff --git a/models/MothPlush_bright.png b/models/MothPlush_bright.png new file mode 100644 index 000000000..7c19e1672 Binary files /dev/null and b/models/MothPlush_bright.png differ diff --git a/models/MothPlush_d.3d b/models/MothPlush_d.3d new file mode 100644 index 000000000..167a9aff2 Binary files /dev/null and b/models/MothPlush_d.3d differ diff --git a/models/SafetyTether.blend b/models/SafetyTether.blend new file mode 100644 index 000000000..6b6a8727e Binary files /dev/null and b/models/SafetyTether.blend differ diff --git a/models/SafetyTether.png b/models/SafetyTether.png new file mode 100644 index 000000000..ceb2c4e96 Binary files /dev/null and b/models/SafetyTether.png differ diff --git a/models/SafetyTether_a.3d b/models/SafetyTether_a.3d new file mode 100644 index 000000000..ce13e5e75 Binary files /dev/null and b/models/SafetyTether_a.3d differ diff --git a/models/SafetyTether_blue.png b/models/SafetyTether_blue.png new file mode 100644 index 000000000..3695cb17e Binary files /dev/null and b/models/SafetyTether_blue.png differ diff --git a/models/SafetyTether_bright.png b/models/SafetyTether_bright.png new file mode 100644 index 000000000..422127c28 Binary files /dev/null and b/models/SafetyTether_bright.png differ diff --git a/models/SafetyTether_d.3d b/models/SafetyTether_d.3d new file mode 100644 index 000000000..b43dfbbc4 Binary files /dev/null and b/models/SafetyTether_d.3d differ diff --git a/models/SafetyTether_mask.png b/models/SafetyTether_mask.png new file mode 100644 index 000000000..b7feb44b4 Binary files /dev/null and b/models/SafetyTether_mask.png differ diff --git a/models/SafetyTether_off.png b/models/SafetyTether_off.png new file mode 100644 index 000000000..b326c0668 Binary files /dev/null and b/models/SafetyTether_off.png differ diff --git a/models/SafetyTether_red.png b/models/SafetyTether_red.png new file mode 100644 index 000000000..008972df4 Binary files /dev/null and b/models/SafetyTether_red.png differ diff --git a/models/SilverbulletBullet2_FCB_a.3d b/models/SilverbulletBullet2_FCB_a.3d new file mode 100644 index 000000000..90e3e3c40 Binary files /dev/null and b/models/SilverbulletBullet2_FCB_a.3d differ diff --git a/models/SilverbulletBullet2_FCB_d.3d b/models/SilverbulletBullet2_FCB_d.3d new file mode 100644 index 000000000..55e2b762b Binary files /dev/null and b/models/SilverbulletBullet2_FCB_d.3d differ diff --git a/models/SilverbulletBullet2_a.3d b/models/SilverbulletBullet2_a.3d new file mode 100644 index 000000000..43f264e99 Binary files /dev/null and b/models/SilverbulletBullet2_a.3d differ diff --git a/models/SilverbulletBullet2_d.3d b/models/SilverbulletBullet2_d.3d new file mode 100644 index 000000000..55e2b762b Binary files /dev/null and b/models/SilverbulletBullet2_d.3d differ diff --git a/models/SilverbulletBullet3_FCB_a.3d b/models/SilverbulletBullet3_FCB_a.3d new file mode 100644 index 000000000..00a0d2943 Binary files /dev/null and b/models/SilverbulletBullet3_FCB_a.3d differ diff --git a/models/SilverbulletBullet3_FCB_d.3d b/models/SilverbulletBullet3_FCB_d.3d new file mode 100644 index 000000000..b238a06ae Binary files /dev/null and b/models/SilverbulletBullet3_FCB_d.3d differ diff --git a/models/SilverbulletBullet3_a.3d b/models/SilverbulletBullet3_a.3d new file mode 100644 index 000000000..dd4665ba3 Binary files /dev/null and b/models/SilverbulletBullet3_a.3d differ diff --git a/models/SilverbulletBullet3_d.3d b/models/SilverbulletBullet3_d.3d new file mode 100644 index 000000000..b238a06ae Binary files /dev/null and b/models/SilverbulletBullet3_d.3d differ diff --git a/models/SparksterAmmo2_a.3d b/models/SparksterAmmo2_a.3d new file mode 100644 index 000000000..a44789032 Binary files /dev/null and b/models/SparksterAmmo2_a.3d differ diff --git a/models/SparksterAmmo2_d.3d b/models/SparksterAmmo2_d.3d new file mode 100644 index 000000000..d1d50093e Binary files /dev/null and b/models/SparksterAmmo2_d.3d differ diff --git a/models/extra/dlc/BlastMuz0.png b/models/extra/dlc1/BlastMuz0.png similarity index 100% rename from models/extra/dlc/BlastMuz0.png rename to models/extra/dlc1/BlastMuz0.png diff --git a/models/extra/dlc/BlastMuz1.png b/models/extra/dlc1/BlastMuz1.png similarity index 100% rename from models/extra/dlc/BlastMuz1.png rename to models/extra/dlc1/BlastMuz1.png diff --git a/models/extra/dlc/BlastMuz2.png b/models/extra/dlc1/BlastMuz2.png similarity index 100% rename from models/extra/dlc/BlastMuz2.png rename to models/extra/dlc1/BlastMuz2.png diff --git a/models/extra/dlc/BlastMuz3.png b/models/extra/dlc1/BlastMuz3.png similarity index 100% rename from models/extra/dlc/BlastMuz3.png rename to models/extra/dlc1/BlastMuz3.png diff --git a/models/extra/dlc/BlastMuz4.png b/models/extra/dlc1/BlastMuz4.png similarity index 100% rename from models/extra/dlc/BlastMuz4.png rename to models/extra/dlc1/BlastMuz4.png diff --git a/models/extra/dlc/BlastMuz5.png b/models/extra/dlc1/BlastMuz5.png similarity index 100% rename from models/extra/dlc/BlastMuz5.png rename to models/extra/dlc1/BlastMuz5.png diff --git a/models/extra/dlc/BlastMuz6.png b/models/extra/dlc1/BlastMuz6.png similarity index 100% rename from models/extra/dlc/BlastMuz6.png rename to models/extra/dlc1/BlastMuz6.png diff --git a/models/extra/dlc/BlastMuz7.png b/models/extra/dlc1/BlastMuz7.png similarity index 100% rename from models/extra/dlc/BlastMuz7.png rename to models/extra/dlc1/BlastMuz7.png diff --git a/models/extra/dlc/BlastMuz8.png b/models/extra/dlc1/BlastMuz8.png similarity index 100% rename from models/extra/dlc/BlastMuz8.png rename to models/extra/dlc1/BlastMuz8.png diff --git a/models/extra/dlc/BlastMuz9.png b/models/extra/dlc1/BlastMuz9.png similarity index 100% rename from models/extra/dlc/BlastMuz9.png rename to models/extra/dlc1/BlastMuz9.png diff --git a/models/extra/dlc/LanceTracer.png b/models/extra/dlc1/LanceTracer.png similarity index 100% rename from models/extra/dlc/LanceTracer.png rename to models/extra/dlc1/LanceTracer.png diff --git a/models/extra/dlc/PlasmaTracer.png b/models/extra/dlc1/PlasmaTracer.png similarity index 100% rename from models/extra/dlc/PlasmaTracer.png rename to models/extra/dlc1/PlasmaTracer.png diff --git a/models/extra/dlc/PlasmaTrail.png b/models/extra/dlc1/PlasmaTrail.png similarity index 100% rename from models/extra/dlc/PlasmaTrail.png rename to models/extra/dlc1/PlasmaTrail.png diff --git a/models/extra/dlc/PuntzerMuz0.png b/models/extra/dlc1/PuntzerMuz0.png similarity index 100% rename from models/extra/dlc/PuntzerMuz0.png rename to models/extra/dlc1/PuntzerMuz0.png diff --git a/models/extra/dlc/PuntzerMuz1.png b/models/extra/dlc1/PuntzerMuz1.png similarity index 100% rename from models/extra/dlc/PuntzerMuz1.png rename to models/extra/dlc1/PuntzerMuz1.png diff --git a/models/extra/dlc/PuntzerMuz2.png b/models/extra/dlc1/PuntzerMuz2.png similarity index 100% rename from models/extra/dlc/PuntzerMuz2.png rename to models/extra/dlc1/PuntzerMuz2.png diff --git a/models/extra/dlc/PuntzerMuz3.png b/models/extra/dlc1/PuntzerMuz3.png similarity index 100% rename from models/extra/dlc/PuntzerMuz3.png rename to models/extra/dlc1/PuntzerMuz3.png diff --git a/models/extra/dlc/PuntzerMuz4.png b/models/extra/dlc1/PuntzerMuz4.png similarity index 100% rename from models/extra/dlc/PuntzerMuz4.png rename to models/extra/dlc1/PuntzerMuz4.png diff --git a/models/extra/dlc/PuntzerMuz5.png b/models/extra/dlc1/PuntzerMuz5.png similarity index 100% rename from models/extra/dlc/PuntzerMuz5.png rename to models/extra/dlc1/PuntzerMuz5.png diff --git a/models/extra/dlc/PuntzerMuz6.png b/models/extra/dlc1/PuntzerMuz6.png similarity index 100% rename from models/extra/dlc/PuntzerMuz6.png rename to models/extra/dlc1/PuntzerMuz6.png diff --git a/models/extra/dlc/PuntzerMuz7.png b/models/extra/dlc1/PuntzerMuz7.png similarity index 100% rename from models/extra/dlc/PuntzerMuz7.png rename to models/extra/dlc1/PuntzerMuz7.png diff --git a/models/extra/dlc/QuadMuz0.png b/models/extra/dlc1/QuadMuz0.png similarity index 100% rename from models/extra/dlc/QuadMuz0.png rename to models/extra/dlc1/QuadMuz0.png diff --git a/models/extra/dlc/QuadMuz1.png b/models/extra/dlc1/QuadMuz1.png similarity index 100% rename from models/extra/dlc/QuadMuz1.png rename to models/extra/dlc1/QuadMuz1.png diff --git a/models/extra/dlc/QuadMuz2.png b/models/extra/dlc1/QuadMuz2.png similarity index 100% rename from models/extra/dlc/QuadMuz2.png rename to models/extra/dlc1/QuadMuz2.png diff --git a/models/extra/dlc/QuadMuz3.png b/models/extra/dlc1/QuadMuz3.png similarity index 100% rename from models/extra/dlc/QuadMuz3.png rename to models/extra/dlc1/QuadMuz3.png diff --git a/models/extra/dlc/QuadMuz4.png b/models/extra/dlc1/QuadMuz4.png similarity index 100% rename from models/extra/dlc/QuadMuz4.png rename to models/extra/dlc1/QuadMuz4.png diff --git a/models/extra/dlc/QuadMuz5.png b/models/extra/dlc1/QuadMuz5.png similarity index 100% rename from models/extra/dlc/QuadMuz5.png rename to models/extra/dlc1/QuadMuz5.png diff --git a/models/extra/dlc/QuadMuz6.png b/models/extra/dlc1/QuadMuz6.png similarity index 100% rename from models/extra/dlc/QuadMuz6.png rename to models/extra/dlc1/QuadMuz6.png diff --git a/models/extra/dlc/QuadMuz7.png b/models/extra/dlc1/QuadMuz7.png similarity index 100% rename from models/extra/dlc/QuadMuz7.png rename to models/extra/dlc1/QuadMuz7.png diff --git a/models/extra/dlc/QuadMuz8.png b/models/extra/dlc1/QuadMuz8.png similarity index 100% rename from models/extra/dlc/QuadMuz8.png rename to models/extra/dlc1/QuadMuz8.png diff --git a/models/extra/dlc/QuadMuz9.png b/models/extra/dlc1/QuadMuz9.png similarity index 100% rename from models/extra/dlc/QuadMuz9.png rename to models/extra/dlc1/QuadMuz9.png diff --git a/models/extra/dlc/RailMuz0.png b/models/extra/dlc1/RailMuz0.png similarity index 100% rename from models/extra/dlc/RailMuz0.png rename to models/extra/dlc1/RailMuz0.png diff --git a/models/extra/dlc/RailMuz1.png b/models/extra/dlc1/RailMuz1.png similarity index 100% rename from models/extra/dlc/RailMuz1.png rename to models/extra/dlc1/RailMuz1.png diff --git a/models/extra/dlc/RailMuz2.png b/models/extra/dlc1/RailMuz2.png similarity index 100% rename from models/extra/dlc/RailMuz2.png rename to models/extra/dlc1/RailMuz2.png diff --git a/models/extra/dlc/RailMuz3.png b/models/extra/dlc1/RailMuz3.png similarity index 100% rename from models/extra/dlc/RailMuz3.png rename to models/extra/dlc1/RailMuz3.png diff --git a/models/extra/dlc/RayTracer.png b/models/extra/dlc1/RayTracer.png similarity index 100% rename from models/extra/dlc/RayTracer.png rename to models/extra/dlc1/RayTracer.png diff --git a/models/extra/dlc/RayTrail.png b/models/extra/dlc1/RayTrail.png similarity index 100% rename from models/extra/dlc/RayTrail.png rename to models/extra/dlc1/RayTrail.png diff --git a/models/extra/dlc/SheenMuz0.png b/models/extra/dlc1/SheenMuz0.png similarity index 100% rename from models/extra/dlc/SheenMuz0.png rename to models/extra/dlc1/SheenMuz0.png diff --git a/models/extra/dlc/SheenMuz1.png b/models/extra/dlc1/SheenMuz1.png similarity index 100% rename from models/extra/dlc/SheenMuz1.png rename to models/extra/dlc1/SheenMuz1.png diff --git a/models/extra/dlc/SheenMuz2.png b/models/extra/dlc1/SheenMuz2.png similarity index 100% rename from models/extra/dlc/SheenMuz2.png rename to models/extra/dlc1/SheenMuz2.png diff --git a/models/extra/dlc/SheenMuz3.png b/models/extra/dlc1/SheenMuz3.png similarity index 100% rename from models/extra/dlc/SheenMuz3.png rename to models/extra/dlc1/SheenMuz3.png diff --git a/models/extra/dlc/SheenMuz4.png b/models/extra/dlc1/SheenMuz4.png similarity index 100% rename from models/extra/dlc/SheenMuz4.png rename to models/extra/dlc1/SheenMuz4.png diff --git a/models/extra/dlc/SheenMuz5.png b/models/extra/dlc1/SheenMuz5.png similarity index 100% rename from models/extra/dlc/SheenMuz5.png rename to models/extra/dlc1/SheenMuz5.png diff --git a/models/extra/dlc/SheenMuz6.png b/models/extra/dlc1/SheenMuz6.png similarity index 100% rename from models/extra/dlc/SheenMuz6.png rename to models/extra/dlc1/SheenMuz6.png diff --git a/models/extra/dlc/SheenMuz7.png b/models/extra/dlc1/SheenMuz7.png similarity index 100% rename from models/extra/dlc/SheenMuz7.png rename to models/extra/dlc1/SheenMuz7.png diff --git a/models/extra/dlc/SheenTracer.png b/models/extra/dlc1/SheenTracer.png similarity index 100% rename from models/extra/dlc/SheenTracer.png rename to models/extra/dlc1/SheenTracer.png diff --git a/models/extra/dlc/SheenTracer_Blue.png b/models/extra/dlc1/SheenTracer_Blue.png similarity index 100% rename from models/extra/dlc/SheenTracer_Blue.png rename to models/extra/dlc1/SheenTracer_Blue.png diff --git a/models/extra/dlc/SheenTracer_Cyan.png b/models/extra/dlc1/SheenTracer_Cyan.png similarity index 100% rename from models/extra/dlc/SheenTracer_Cyan.png rename to models/extra/dlc1/SheenTracer_Cyan.png diff --git a/models/extra/dlc/SheenTracer_Green.png b/models/extra/dlc1/SheenTracer_Green.png similarity index 100% rename from models/extra/dlc/SheenTracer_Green.png rename to models/extra/dlc1/SheenTracer_Green.png diff --git a/models/extra/dlc/SheenTracer_Magenta.png b/models/extra/dlc1/SheenTracer_Magenta.png similarity index 100% rename from models/extra/dlc/SheenTracer_Magenta.png rename to models/extra/dlc1/SheenTracer_Magenta.png diff --git a/models/extra/dlc/SheenTracer_Red.png b/models/extra/dlc1/SheenTracer_Red.png similarity index 100% rename from models/extra/dlc/SheenTracer_Red.png rename to models/extra/dlc1/SheenTracer_Red.png diff --git a/models/extra/dlc/SheenTracer_TransBlue.png b/models/extra/dlc1/SheenTracer_TransBlue.png similarity index 100% rename from models/extra/dlc/SheenTracer_TransBlue.png rename to models/extra/dlc1/SheenTracer_TransBlue.png diff --git a/models/extra/dlc/SheenTracer_TransPink.png b/models/extra/dlc1/SheenTracer_TransPink.png similarity index 100% rename from models/extra/dlc/SheenTracer_TransPink.png rename to models/extra/dlc1/SheenTracer_TransPink.png diff --git a/models/extra/dlc/SheenTracer_White.png b/models/extra/dlc1/SheenTracer_White.png similarity index 100% rename from models/extra/dlc/SheenTracer_White.png rename to models/extra/dlc1/SheenTracer_White.png diff --git a/models/extra/dlc/SheenTracer_Yellow.png b/models/extra/dlc1/SheenTracer_Yellow.png similarity index 100% rename from models/extra/dlc/SheenTracer_Yellow.png rename to models/extra/dlc1/SheenTracer_Yellow.png diff --git a/models/extra/dlc/MRBolt.png b/models/extra/dlc2/MRBolt.png similarity index 100% rename from models/extra/dlc/MRBolt.png rename to models/extra/dlc2/MRBolt.png diff --git a/models/extra/dlc/MRBoltS.png b/models/extra/dlc2/MRBoltS.png similarity index 100% rename from models/extra/dlc/MRBoltS.png rename to models/extra/dlc2/MRBoltS.png diff --git a/models/extra/dlc/MRMuz0.png b/models/extra/dlc2/MRMuz0.png similarity index 100% rename from models/extra/dlc/MRMuz0.png rename to models/extra/dlc2/MRMuz0.png diff --git a/models/extra/dlc/MRMuz1.png b/models/extra/dlc2/MRMuz1.png similarity index 100% rename from models/extra/dlc/MRMuz1.png rename to models/extra/dlc2/MRMuz1.png diff --git a/models/extra/dlc/MRMuz2.png b/models/extra/dlc2/MRMuz2.png similarity index 100% rename from models/extra/dlc/MRMuz2.png rename to models/extra/dlc2/MRMuz2.png diff --git a/models/extra/dlc/MRMuz3.png b/models/extra/dlc2/MRMuz3.png similarity index 100% rename from models/extra/dlc/MRMuz3.png rename to models/extra/dlc2/MRMuz3.png diff --git a/models/extra/dlc/NewSparkMuzK.png b/models/extra/dlc2/NewSparkMuzK.png similarity index 100% rename from models/extra/dlc/NewSparkMuzK.png rename to models/extra/dlc2/NewSparkMuzK.png diff --git a/models/extra/dlc/NewSparkMuzN.png b/models/extra/dlc2/NewSparkMuzN.png similarity index 100% rename from models/extra/dlc/NewSparkMuzN.png rename to models/extra/dlc2/NewSparkMuzN.png diff --git a/models/extra/dlc/NewSparkMuzNK.png b/models/extra/dlc2/NewSparkMuzNK.png similarity index 100% rename from models/extra/dlc/NewSparkMuzNK.png rename to models/extra/dlc2/NewSparkMuzNK.png diff --git a/models/extra/dlc/UltimaMuz0.png b/models/extra/dlc2/UltimaMuz0.png similarity index 100% rename from models/extra/dlc/UltimaMuz0.png rename to models/extra/dlc2/UltimaMuz0.png diff --git a/models/extra/dlc/UltimaMuz1.png b/models/extra/dlc2/UltimaMuz1.png similarity index 100% rename from models/extra/dlc/UltimaMuz1.png rename to models/extra/dlc2/UltimaMuz1.png diff --git a/models/extra/dlc/UltimaMuz2.png b/models/extra/dlc2/UltimaMuz2.png similarity index 100% rename from models/extra/dlc/UltimaMuz2.png rename to models/extra/dlc2/UltimaMuz2.png diff --git a/models/extra/dlc/UltimaMuz3.png b/models/extra/dlc2/UltimaMuz3.png similarity index 100% rename from models/extra/dlc/UltimaMuz3.png rename to models/extra/dlc2/UltimaMuz3.png diff --git a/models/extra/dlc/UltimaTrail.png b/models/extra/dlc2/UltimaTrail.png similarity index 100% rename from models/extra/dlc/UltimaTrail.png rename to models/extra/dlc2/UltimaTrail.png diff --git a/models/modelnotes.txt b/models/modelnotes.txt index 9c1ef1c9c..84119f98c 100644 --- a/models/modelnotes.txt +++ b/models/modelnotes.txt @@ -1,58 +1,3 @@ -Collectible models: - x Cube - x Akari Project - x Love Signals CD - x Nutatco Bar - x Frispy Corn - x Demo Plush - x Saya Bean - x Peach Juice - x Milk Breads - x Kirin Manga - x Kirin Plush - -Collectible gestures: - x Cube - x Akari Project - x Love Signals CD - x Nutatco Bar - x Frispy Corn - x Saya Bean - x Demo Plush - x Peach Juice - x Milk Breads - x Kirin Manga - x Kirin Plush - -Key gestures: - x Keycard - x Skull key - x Heretic Yellow Key - x Heretic Green Key - x Heretic Blue Key - x Heretic Red Key - -# Post-release stuff - -Extra items: - - Safety Tether - - Devastation Sigil - - DivineSprite - -Character models: - - White Lady - -Extra collectibles: - - Moth Plushy - - AA-12 - - Hege Cactus - - Hoagie - - Red Oni Milk - - BRC - Counter-Inquisition - - Manarock - - Lithium Vol.1 - - Psykkonovexx - # DLC Weaponset 1 Weapon models: @@ -74,6 +19,7 @@ Ammo models: - Gamma mag - Sheen Ammo - Single + - 10 Belt - 50 Box - 100 Box - Quadravol Ammo @@ -100,9 +46,13 @@ Ammo models: - Mortal Rifle Ammo - Round - Mag - - 1 Grenade - - 2 Grenades - - 3 Grenades + - Grenade - Rafan-Kos Ammo - Pod - Mag + +# Final Update + +Character models: + - Maidbot + - White Lady diff --git a/readme.txt b/readme.txt index 2d5b06829..41181da79 100644 --- a/readme.txt +++ b/readme.txt @@ -35,6 +35,9 @@ Index of contents: 2.2.9. Lämp 2.2.A. Omnisight 2.2.B. Mykradvo Artifact + 2.2.C. Devastation Sigil + 2.2.D. Divine Sprite + 2.2.E. Safety Tether 2.3. Armors 2.4. Health 2.5. Others @@ -272,6 +275,20 @@ in the minimap, and even highlights where keys and exits are. Quite handy. The Great Anomaly makes a return. Smite all those who dare try to attack you! +2.2.C. Devastation Sigil + +A return of the olden "Complete Devastation" powerup of the early versions, +with a shiny new look, and some real attitude. + +2.2.D. Divine Sprite + +The Soul Spark from Platinum also makes a return, now with far more power. + +2.2.E. Safety Tether + +Sometimes you really just need to warp away from some nasty spot. This exists +for that very reason. + 2.3. Armors - - - - - - diff --git a/shaders/glsl/Divine.fp b/shaders/glsl/Divine.fp new file mode 100644 index 000000000..5202bea01 --- /dev/null +++ b/shaders/glsl/Divine.fp @@ -0,0 +1,22 @@ +// divine sprite corona + +const float pi = 3.14159265358979323846; + +void SetupMaterial( inout Material mat ) +{ + vec2 p = 2.*(vTexCoord.st-.5); + float a = atan(p.y,p.x); + float a2 = atan(p.y,abs(p.x)); + a = floor((a*16.)/pi); + float r = length(p); + // shimmering flare + vec3 col = vec3(.98,.92,.94)*(.5-r*2.); + vec2 ccoord = vec2(2.*a/pi-timer*.05,0.); + vec2 ccoord2 = vec2(2.*a2/pi-timer*.05,0.); + col += textureGrad(snoisetex,ccoord,dFdx(ccoord2),dFdy(ccoord2)).xxx; + col = pow(max(col*.5,0.),vec3(1.5)); + // glow + col += vec3(.6,0.9,1.)*pow(max(1.-r,0.),3.5+texture(snoisetex,vec2(timer*.1)).x*.5); + mat.Base = vec4(col,1.); + mat.Normal = ApplyNormalMap(vTexCoord.st); +} diff --git a/shaders/glsl/HealthBarD.fp b/shaders/glsl/HealthBarD.fp new file mode 100644 index 000000000..6bfec1bbb --- /dev/null +++ b/shaders/glsl/HealthBarD.fp @@ -0,0 +1,19 @@ +// bloomy healthbar with flicker + +void SetupMaterial( inout Material mat ) +{ + float gauss10[10] = float[10] + ( + .199471, .176033, .120986, .064759, .026996, + .008764, .002216, .000436, .000067, .000008 + ); + vec2 coord = vTexCoord.st; + vec2 bresl = textureSize(tex,0); + vec2 bof = 1./bresl; + bof *= .9+.4*texture(noisetex,vec2(fract(timer*.05))).x; + vec4 col = texture(tex,coord); + int i, j; + for ( j=-9; j<=9; j++ ) for ( i=-9; i<=9; i++ ) + col += gauss10[abs(i)]*gauss10[abs(j)]*texture(tex,coord+vec2(i,j)*bof); + mat.Base = vec4(col.rgb,1.); +} diff --git a/shaders/pp/Devascreen.fp b/shaders/pp/Devascreen.fp new file mode 100644 index 000000000..ec078f3e6 --- /dev/null +++ b/shaders/pp/Devascreen.fp @@ -0,0 +1,35 @@ +// hateful pulses + +vec2 heatdist( in vec2 uv ) +{ + vec2 ofs = texture(BumpTex,uv*8.-vec2(0.,.5)*timer).xy; + ofs = (ofs-.5)*2.; + ofs *= pow(length(ofs),.5); + ofs *= .025; + return ofs; +} + +void main() +{ + vec2 uv = TexCoord; + vec2 bresl = textureSize(InputTexture,0); + vec2 sr = vec2(1.,bresl.y/bresl.x); + // vignette fade, will be needed later + vec2 vuv = uv.xy*(1.-uv.yx)*4.; + float fade = 1.-(vuv.x*vuv.y); + fade = pow(clamp(fade-(.6-.3*pow(xtrastr,.5)),0.,1.),3.); + fade = pow(fade,.9+.2*texture(NoiseTex,vec2(timer*.05)).x-.1*xtrastr); + vec3 col = texture(InputTexture,uv+fade*heatdist(uv*sr)).rgb; + col += texture(InputTexture,uv+.001*xtrastr*texture(NoiseTex,vec2(timer*.4536,timer*.7835)).xy+fade*heatdist(uv*sr)).rgb; + col += texture(InputTexture,uv-.001*xtrastr*texture(NoiseTex,vec2(timer*.6735,timer*.4335)).xy+fade*heatdist(uv*sr)).rgb; + col *= .4*vec3(.97,.75,1.12); + col = pow(col,vec3(1.1,1.2,1.)); + fade = pow(fade,.75); + col = mix(col,col-vec3(.4,.8,.3),fade*1.2); + // overlay first pulse + vec3 ovr = texture(WarpTex1,uv*2.+heatdist(uv*sr*.25)-vec2(0.,.15)*timer).rgb; + col += ovr*fade; + ovr = texture(WarpTex2,uv*2.+heatdist(uv*sr*.25)+vec2(0.,.15)*timer).rgb; + col -= ovr*fade; + FragColor = vec4(clamp(col,0.,1.),1.); +} diff --git a/shaders/pp/Diviscreen.fp b/shaders/pp/Diviscreen.fp new file mode 100644 index 000000000..371b880df --- /dev/null +++ b/shaders/pp/Diviscreen.fp @@ -0,0 +1,37 @@ +// the ultimate refreshment + +void main() +{ + vec2 uv = TexCoord; + vec2 bresl = textureSize(InputTexture,0); + vec2 sr = vec2(1.,bresl.y/bresl.x); + vec3 ice = texture(BumpTex,uv*sr*4.).xyz; + vec2 ofs = (ice.xy-.5)*2.; + ofs *= pow(length(ofs),.25)*.4*str; + float dist = distance(uv,vec2(.5))*2.; + float distfct = clamp(pow(dist,1.2)*.85-(.75+.5*(1.-str)),0.,1.); + ofs *= distfct; + vec3 col = texture(InputTexture,uv+ofs).rgb; + col += pow(max(0,ice.z),1.45)*.65*str*distfct; + float str2 = str*(.9+texture(NoiseTex,vec2(timer*.05)).x*.2); + float ang = timer*.05; + uv *= sr; + uv.x += 1.*sr.x; + vec2 uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.3; + float smk = texture(WarpTex,uv2).x; + uv.y -= 2.*sr.y; + ang = timer*.03; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.5; + smk += texture(WarpTex,uv2).x; + uv.x -= 3.*sr.x; + ang = timer*.04; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.6; + smk += texture(WarpTex,uv2).x; + uv.y += 4.*sr.y; + ang = timer*.02; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.2; + smk += texture(WarpTex,uv2).x; + smk = pow(max(0,smk*.25),4.); + col += vec3(.8,1.,1.2)*smk*2.*str2; + FragColor = vec4(col,1.); +} diff --git a/sndinfo.txt b/sndinfo.txt index 3182fc725..0f8543ee1 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -1028,6 +1028,27 @@ powerup/barrierend sounds/items/barrieroff.ogg powerup/mykradvo sounds/items/AnomExplode.ogg $limit powerup/mykradvo 16 powerup/mykradvoamb sounds/items/AnomHeartBeat.ogg +powerup/devastation sounds/items/devaon.ogg +powerup/devastationamb sounds/items/devaamb.ogg +powerup/devastationact sounds/items/devaact.ogg +powerup/devastationhit sounds/items/devahit.ogg +powerup/devastationend sounds/items/devaoff.ogg +powerup/divineuse sounds/items/divion.ogg +powerup/divineamb sounds/items/diviamb.ogg +powerup/divineact sounds/items/diviact.ogg +powerup/divinehit1 sounds/items/divihit1.ogg +powerup/divinehit2 sounds/items/divihit2.ogg +powerup/divinehit3 sounds/items/divihit3.ogg +powerup/divinehit4 sounds/items/divihit4.ogg +powerup/divinehit5 sounds/items/divihit5.ogg +powerup/divinehit6 sounds/items/divihit6.ogg +powerup/divinehit7 sounds/items/divihit7.ogg +powerup/divinehit8 sounds/items/divihit8.ogg +$random powerup/divinehit { powerup/divinehit1 powerup/divinehit2 powerup/divinehit3 powerup/divinehit4 powerup/divinehit5 powerup/divinehit6 powerup/divinehit7 powerup/divinehit8 } +$limit powerup/divinehit 16 +powerup/divineend sounds/items/diviend.ogg +powerup/tetheruse sounds/items/tetheruse.ogg +powerup/tetherfail sounds/items/tetherfail.ogg mykradvo/arc1 sounds/items/mykrarc1.ogg mykradvo/arc2 sounds/items/mykrarc2.ogg diff --git a/sounds/items/devaact.ogg b/sounds/items/devaact.ogg new file mode 100644 index 000000000..665e55525 Binary files /dev/null and b/sounds/items/devaact.ogg differ diff --git a/sounds/items/devaamb.ogg b/sounds/items/devaamb.ogg new file mode 100644 index 000000000..b78e696dd Binary files /dev/null and b/sounds/items/devaamb.ogg differ diff --git a/sounds/items/devahit.ogg b/sounds/items/devahit.ogg new file mode 100644 index 000000000..ed9a2fcda Binary files /dev/null and b/sounds/items/devahit.ogg differ diff --git a/sounds/items/devaoff.ogg b/sounds/items/devaoff.ogg new file mode 100644 index 000000000..8b1ca1a5d Binary files /dev/null and b/sounds/items/devaoff.ogg differ diff --git a/sounds/items/devaon.ogg b/sounds/items/devaon.ogg new file mode 100644 index 000000000..c83ffb902 Binary files /dev/null and b/sounds/items/devaon.ogg differ diff --git a/sounds/items/diviact.ogg b/sounds/items/diviact.ogg new file mode 100644 index 000000000..286963f9d Binary files /dev/null and b/sounds/items/diviact.ogg differ diff --git a/sounds/items/diviamb.ogg b/sounds/items/diviamb.ogg new file mode 100644 index 000000000..6a4986f9b Binary files /dev/null and b/sounds/items/diviamb.ogg differ diff --git a/sounds/items/diviend.ogg b/sounds/items/diviend.ogg new file mode 100644 index 000000000..3c74a6ec8 Binary files /dev/null and b/sounds/items/diviend.ogg differ diff --git a/sounds/items/divihit1.ogg b/sounds/items/divihit1.ogg new file mode 100644 index 000000000..a3094f268 Binary files /dev/null and b/sounds/items/divihit1.ogg differ diff --git a/sounds/items/divihit2.ogg b/sounds/items/divihit2.ogg new file mode 100644 index 000000000..40ef5e623 Binary files /dev/null and b/sounds/items/divihit2.ogg differ diff --git a/sounds/items/divihit3.ogg b/sounds/items/divihit3.ogg new file mode 100644 index 000000000..370369b24 Binary files /dev/null and b/sounds/items/divihit3.ogg differ diff --git a/sounds/items/divihit4.ogg b/sounds/items/divihit4.ogg new file mode 100644 index 000000000..6cebc1821 Binary files /dev/null and b/sounds/items/divihit4.ogg differ diff --git a/sounds/items/divihit5.ogg b/sounds/items/divihit5.ogg new file mode 100644 index 000000000..073542121 Binary files /dev/null and b/sounds/items/divihit5.ogg differ diff --git a/sounds/items/divihit6.ogg b/sounds/items/divihit6.ogg new file mode 100644 index 000000000..779b52f84 Binary files /dev/null and b/sounds/items/divihit6.ogg differ diff --git a/sounds/items/divihit7.ogg b/sounds/items/divihit7.ogg new file mode 100644 index 000000000..15a37c66b Binary files /dev/null and b/sounds/items/divihit7.ogg differ diff --git a/sounds/items/divihit8.ogg b/sounds/items/divihit8.ogg new file mode 100644 index 000000000..1e73e6393 Binary files /dev/null and b/sounds/items/divihit8.ogg differ diff --git a/sounds/items/divion.ogg b/sounds/items/divion.ogg new file mode 100644 index 000000000..1ddf16eb0 Binary files /dev/null and b/sounds/items/divion.ogg differ diff --git a/sounds/items/tethererror.ogg b/sounds/items/tethererror.ogg new file mode 100644 index 000000000..03458653f Binary files /dev/null and b/sounds/items/tethererror.ogg differ diff --git a/sounds/items/tetherfail.ogg b/sounds/items/tetherfail.ogg new file mode 100644 index 000000000..06397bb9f Binary files /dev/null and b/sounds/items/tetherfail.ogg differ diff --git a/sounds/items/tetheruse.ogg b/sounds/items/tetheruse.ogg new file mode 100644 index 000000000..ff8838e8e Binary files /dev/null and b/sounds/items/tetheruse.ogg differ diff --git a/sprites/DVSPA0.png b/sprites/DVSPA0.png new file mode 100644 index 000000000..4e83a0f24 Binary files /dev/null and b/sprites/DVSPA0.png differ diff --git a/sprites/dlc/BFRGA0.png b/sprites/dlc1/BFRGA0.png similarity index 100% rename from sprites/dlc/BFRGA0.png rename to sprites/dlc1/BFRGA0.png diff --git a/sprites/dlc/BFRGB0.png b/sprites/dlc1/BFRGB0.png similarity index 100% rename from sprites/dlc/BFRGB0.png rename to sprites/dlc1/BFRGB0.png diff --git a/sprites/dlc/BFRGC0.png b/sprites/dlc1/BFRGC0.png similarity index 100% rename from sprites/dlc/BFRGC0.png rename to sprites/dlc1/BFRGC0.png diff --git a/sprites/dlc/BFRGD0.png b/sprites/dlc1/BFRGD0.png similarity index 100% rename from sprites/dlc/BFRGD0.png rename to sprites/dlc1/BFRGD0.png diff --git a/sprites/dlc/BFRGE0.png b/sprites/dlc1/BFRGE0.png similarity index 100% rename from sprites/dlc/BFRGE0.png rename to sprites/dlc1/BFRGE0.png diff --git a/sprites/dlc/BFRGF0.png b/sprites/dlc1/BFRGF0.png similarity index 100% rename from sprites/dlc/BFRGF0.png rename to sprites/dlc1/BFRGF0.png diff --git a/sprites/dlc/BFRGG0.png b/sprites/dlc1/BFRGG0.png similarity index 100% rename from sprites/dlc/BFRGG0.png rename to sprites/dlc1/BFRGG0.png diff --git a/sprites/dlc/BFRGH0.png b/sprites/dlc1/BFRGH0.png similarity index 100% rename from sprites/dlc/BFRGH0.png rename to sprites/dlc1/BFRGH0.png diff --git a/sprites/dlc/BFRGI0.png b/sprites/dlc1/BFRGI0.png similarity index 100% rename from sprites/dlc/BFRGI0.png rename to sprites/dlc1/BFRGI0.png diff --git a/sprites/dlc/BFRGJ0.png b/sprites/dlc1/BFRGJ0.png similarity index 100% rename from sprites/dlc/BFRGJ0.png rename to sprites/dlc1/BFRGJ0.png diff --git a/sprites/dlc/BFRGK0.png b/sprites/dlc1/BFRGK0.png similarity index 100% rename from sprites/dlc/BFRGK0.png rename to sprites/dlc1/BFRGK0.png diff --git a/sprites/dlc/BFRGL0.png b/sprites/dlc1/BFRGL0.png similarity index 100% rename from sprites/dlc/BFRGL0.png rename to sprites/dlc1/BFRGL0.png diff --git a/sprites/dlc/BFRGM0.png b/sprites/dlc1/BFRGM0.png similarity index 100% rename from sprites/dlc/BFRGM0.png rename to sprites/dlc1/BFRGM0.png diff --git a/sprites/dlc/BFRGN0.png b/sprites/dlc1/BFRGN0.png similarity index 100% rename from sprites/dlc/BFRGN0.png rename to sprites/dlc1/BFRGN0.png diff --git a/sprites/dlc/BFRGO0.png b/sprites/dlc1/BFRGO0.png similarity index 100% rename from sprites/dlc/BFRGO0.png rename to sprites/dlc1/BFRGO0.png diff --git a/sprites/dlc/BFRGP0.png b/sprites/dlc1/BFRGP0.png similarity index 100% rename from sprites/dlc/BFRGP0.png rename to sprites/dlc1/BFRGP0.png diff --git a/sprites/dlc/BFRGQ0.png b/sprites/dlc1/BFRGQ0.png similarity index 100% rename from sprites/dlc/BFRGQ0.png rename to sprites/dlc1/BFRGQ0.png diff --git a/sprites/dlc/BFRGR0.png b/sprites/dlc1/BFRGR0.png similarity index 100% rename from sprites/dlc/BFRGR0.png rename to sprites/dlc1/BFRGR0.png diff --git a/sprites/dlc/BFRGS0.png b/sprites/dlc1/BFRGS0.png similarity index 100% rename from sprites/dlc/BFRGS0.png rename to sprites/dlc1/BFRGS0.png diff --git a/sprites/dlc/BFRGT0.png b/sprites/dlc1/BFRGT0.png similarity index 100% rename from sprites/dlc/BFRGT0.png rename to sprites/dlc1/BFRGT0.png diff --git a/sprites/dlc/BFSMA0.png b/sprites/dlc1/BFSMA0.png similarity index 100% rename from sprites/dlc/BFSMA0.png rename to sprites/dlc1/BFSMA0.png diff --git a/sprites/dlc/BFSMB0.png b/sprites/dlc1/BFSMB0.png similarity index 100% rename from sprites/dlc/BFSMB0.png rename to sprites/dlc1/BFSMB0.png diff --git a/sprites/dlc/BFSMC0.png b/sprites/dlc1/BFSMC0.png similarity index 100% rename from sprites/dlc/BFSMC0.png rename to sprites/dlc1/BFSMC0.png diff --git a/sprites/dlc/BFSMD0.png b/sprites/dlc1/BFSMD0.png similarity index 100% rename from sprites/dlc/BFSMD0.png rename to sprites/dlc1/BFSMD0.png diff --git a/sprites/dlc/BFSME0.png b/sprites/dlc1/BFSME0.png similarity index 100% rename from sprites/dlc/BFSME0.png rename to sprites/dlc1/BFSME0.png diff --git a/sprites/dlc/BFSMF0.png b/sprites/dlc1/BFSMF0.png similarity index 100% rename from sprites/dlc/BFSMF0.png rename to sprites/dlc1/BFSMF0.png diff --git a/sprites/dlc/BFSMG0.png b/sprites/dlc1/BFSMG0.png similarity index 100% rename from sprites/dlc/BFSMG0.png rename to sprites/dlc1/BFSMG0.png diff --git a/sprites/dlc/BFSMH0.png b/sprites/dlc1/BFSMH0.png similarity index 100% rename from sprites/dlc/BFSMH0.png rename to sprites/dlc1/BFSMH0.png diff --git a/sprites/dlc/BFSMI0.png b/sprites/dlc1/BFSMI0.png similarity index 100% rename from sprites/dlc/BFSMI0.png rename to sprites/dlc1/BFSMI0.png diff --git a/sprites/dlc/BFSMJ0.png b/sprites/dlc1/BFSMJ0.png similarity index 100% rename from sprites/dlc/BFSMJ0.png rename to sprites/dlc1/BFSMJ0.png diff --git a/sprites/dlc/BFSMK0.png b/sprites/dlc1/BFSMK0.png similarity index 100% rename from sprites/dlc/BFSMK0.png rename to sprites/dlc1/BFSMK0.png diff --git a/sprites/dlc/BFSML0.png b/sprites/dlc1/BFSML0.png similarity index 100% rename from sprites/dlc/BFSML0.png rename to sprites/dlc1/BFSML0.png diff --git a/sprites/dlc/BFSMM0.png b/sprites/dlc1/BFSMM0.png similarity index 100% rename from sprites/dlc/BFSMM0.png rename to sprites/dlc1/BFSMM0.png diff --git a/sprites/dlc/BFSMN0.png b/sprites/dlc1/BFSMN0.png similarity index 100% rename from sprites/dlc/BFSMN0.png rename to sprites/dlc1/BFSMN0.png diff --git a/sprites/dlc/BFSMO0.png b/sprites/dlc1/BFSMO0.png similarity index 100% rename from sprites/dlc/BFSMO0.png rename to sprites/dlc1/BFSMO0.png diff --git a/sprites/dlc/BFSMP0.png b/sprites/dlc1/BFSMP0.png similarity index 100% rename from sprites/dlc/BFSMP0.png rename to sprites/dlc1/BFSMP0.png diff --git a/sprites/dlc/BFSMQ0.png b/sprites/dlc1/BFSMQ0.png similarity index 100% rename from sprites/dlc/BFSMQ0.png rename to sprites/dlc1/BFSMQ0.png diff --git a/sprites/dlc/BFSMR0.png b/sprites/dlc1/BFSMR0.png similarity index 100% rename from sprites/dlc/BFSMR0.png rename to sprites/dlc1/BFSMR0.png diff --git a/sprites/dlc/BFSMS0.png b/sprites/dlc1/BFSMS0.png similarity index 100% rename from sprites/dlc/BFSMS0.png rename to sprites/dlc1/BFSMS0.png diff --git a/sprites/dlc/BFSMT0.png b/sprites/dlc1/BFSMT0.png similarity index 100% rename from sprites/dlc/BFSMT0.png rename to sprites/dlc1/BFSMT0.png diff --git a/sprites/dlc/BFSMU0.png b/sprites/dlc1/BFSMU0.png similarity index 100% rename from sprites/dlc/BFSMU0.png rename to sprites/dlc1/BFSMU0.png diff --git a/sprites/dlc/BFSMV0.png b/sprites/dlc1/BFSMV0.png similarity index 100% rename from sprites/dlc/BFSMV0.png rename to sprites/dlc1/BFSMV0.png diff --git a/sprites/dlc/BFSMW0.png b/sprites/dlc1/BFSMW0.png similarity index 100% rename from sprites/dlc/BFSMW0.png rename to sprites/dlc1/BFSMW0.png diff --git a/sprites/dlc/BFSMX0.png b/sprites/dlc1/BFSMX0.png similarity index 100% rename from sprites/dlc/BFSMX0.png rename to sprites/dlc1/BFSMX0.png diff --git a/sprites/dlc/BFSMY0.png b/sprites/dlc1/BFSMY0.png similarity index 100% rename from sprites/dlc/BFSMY0.png rename to sprites/dlc1/BFSMY0.png diff --git a/sprites/dlc/BFSMZ0.png b/sprites/dlc1/BFSMZ0.png similarity index 100% rename from sprites/dlc/BFSMZ0.png rename to sprites/dlc1/BFSMZ0.png diff --git a/sprites/dlc/BFXXA0.png b/sprites/dlc1/BFXXA0.png similarity index 100% rename from sprites/dlc/BFXXA0.png rename to sprites/dlc1/BFXXA0.png diff --git a/sprites/dlc/BFXXB0.png b/sprites/dlc1/BFXXB0.png similarity index 100% rename from sprites/dlc/BFXXB0.png rename to sprites/dlc1/BFXXB0.png diff --git a/sprites/dlc/BFXXC0.png b/sprites/dlc1/BFXXC0.png similarity index 100% rename from sprites/dlc/BFXXC0.png rename to sprites/dlc1/BFXXC0.png diff --git a/sprites/dlc/BFXXD0.png b/sprites/dlc1/BFXXD0.png similarity index 100% rename from sprites/dlc/BFXXD0.png rename to sprites/dlc1/BFXXD0.png diff --git a/sprites/dlc/BFXXE0.png b/sprites/dlc1/BFXXE0.png similarity index 100% rename from sprites/dlc/BFXXE0.png rename to sprites/dlc1/BFXXE0.png diff --git a/sprites/dlc/BFXXF0.png b/sprites/dlc1/BFXXF0.png similarity index 100% rename from sprites/dlc/BFXXF0.png rename to sprites/dlc1/BFXXF0.png diff --git a/sprites/dlc/BFXXG0.png b/sprites/dlc1/BFXXG0.png similarity index 100% rename from sprites/dlc/BFXXG0.png rename to sprites/dlc1/BFXXG0.png diff --git a/sprites/dlc/BFXXH0.png b/sprites/dlc1/BFXXH0.png similarity index 100% rename from sprites/dlc/BFXXH0.png rename to sprites/dlc1/BFXXH0.png diff --git a/sprites/dlc/BFXXI0.png b/sprites/dlc1/BFXXI0.png similarity index 100% rename from sprites/dlc/BFXXI0.png rename to sprites/dlc1/BFXXI0.png diff --git a/sprites/dlc/BFXXJ0.png b/sprites/dlc1/BFXXJ0.png similarity index 100% rename from sprites/dlc/BFXXJ0.png rename to sprites/dlc1/BFXXJ0.png diff --git a/sprites/dlc/BFXXK0.png b/sprites/dlc1/BFXXK0.png similarity index 100% rename from sprites/dlc/BFXXK0.png rename to sprites/dlc1/BFXXK0.png diff --git a/sprites/dlc/BFXXL0.png b/sprites/dlc1/BFXXL0.png similarity index 100% rename from sprites/dlc/BFXXL0.png rename to sprites/dlc1/BFXXL0.png diff --git a/sprites/dlc/BFXXM0.png b/sprites/dlc1/BFXXM0.png similarity index 100% rename from sprites/dlc/BFXXM0.png rename to sprites/dlc1/BFXXM0.png diff --git a/sprites/dlc/BFXXN0.png b/sprites/dlc1/BFXXN0.png similarity index 100% rename from sprites/dlc/BFXXN0.png rename to sprites/dlc1/BFXXN0.png diff --git a/sprites/dlc/BFXXO0.png b/sprites/dlc1/BFXXO0.png similarity index 100% rename from sprites/dlc/BFXXO0.png rename to sprites/dlc1/BFXXO0.png diff --git a/sprites/dlc/BFXXP0.png b/sprites/dlc1/BFXXP0.png similarity index 100% rename from sprites/dlc/BFXXP0.png rename to sprites/dlc1/BFXXP0.png diff --git a/sprites/dlc/BFXXQ0.png b/sprites/dlc1/BFXXQ0.png similarity index 100% rename from sprites/dlc/BFXXQ0.png rename to sprites/dlc1/BFXXQ0.png diff --git a/sprites/dlc/BFXXR0.png b/sprites/dlc1/BFXXR0.png similarity index 100% rename from sprites/dlc/BFXXR0.png rename to sprites/dlc1/BFXXR0.png diff --git a/sprites/dlc/BFXXS0.png b/sprites/dlc1/BFXXS0.png similarity index 100% rename from sprites/dlc/BFXXS0.png rename to sprites/dlc1/BFXXS0.png diff --git a/sprites/dlc/BFXXT0.png b/sprites/dlc1/BFXXT0.png similarity index 100% rename from sprites/dlc/BFXXT0.png rename to sprites/dlc1/BFXXT0.png diff --git a/sprites/dlc/BXPLA0.png b/sprites/dlc1/BXPLA0.png similarity index 100% rename from sprites/dlc/BXPLA0.png rename to sprites/dlc1/BXPLA0.png diff --git a/sprites/dlc/BXPLB0.png b/sprites/dlc1/BXPLB0.png similarity index 100% rename from sprites/dlc/BXPLB0.png rename to sprites/dlc1/BXPLB0.png diff --git a/sprites/dlc/BXPLC0.png b/sprites/dlc1/BXPLC0.png similarity index 100% rename from sprites/dlc/BXPLC0.png rename to sprites/dlc1/BXPLC0.png diff --git a/sprites/dlc/BXPLD0.png b/sprites/dlc1/BXPLD0.png similarity index 100% rename from sprites/dlc/BXPLD0.png rename to sprites/dlc1/BXPLD0.png diff --git a/sprites/dlc/BXPLE0.png b/sprites/dlc1/BXPLE0.png similarity index 100% rename from sprites/dlc/BXPLE0.png rename to sprites/dlc1/BXPLE0.png diff --git a/sprites/dlc/BXPLF0.png b/sprites/dlc1/BXPLF0.png similarity index 100% rename from sprites/dlc/BXPLF0.png rename to sprites/dlc1/BXPLF0.png diff --git a/sprites/dlc/BXPLG0.png b/sprites/dlc1/BXPLG0.png similarity index 100% rename from sprites/dlc/BXPLG0.png rename to sprites/dlc1/BXPLG0.png diff --git a/sprites/dlc/BXPLH0.png b/sprites/dlc1/BXPLH0.png similarity index 100% rename from sprites/dlc/BXPLH0.png rename to sprites/dlc1/BXPLH0.png diff --git a/sprites/dlc/BXPLI0.png b/sprites/dlc1/BXPLI0.png similarity index 100% rename from sprites/dlc/BXPLI0.png rename to sprites/dlc1/BXPLI0.png diff --git a/sprites/dlc/BXPLJ0.png b/sprites/dlc1/BXPLJ0.png similarity index 100% rename from sprites/dlc/BXPLJ0.png rename to sprites/dlc1/BXPLJ0.png diff --git a/sprites/dlc/BXPLK0.png b/sprites/dlc1/BXPLK0.png similarity index 100% rename from sprites/dlc/BXPLK0.png rename to sprites/dlc1/BXPLK0.png diff --git a/sprites/dlc/BXPLL0.png b/sprites/dlc1/BXPLL0.png similarity index 100% rename from sprites/dlc/BXPLL0.png rename to sprites/dlc1/BXPLL0.png diff --git a/sprites/dlc/BXPLM0.png b/sprites/dlc1/BXPLM0.png similarity index 100% rename from sprites/dlc/BXPLM0.png rename to sprites/dlc1/BXPLM0.png diff --git a/sprites/dlc/BXPLN0.png b/sprites/dlc1/BXPLN0.png similarity index 100% rename from sprites/dlc/BXPLN0.png rename to sprites/dlc1/BXPLN0.png diff --git a/sprites/dlc/BXPLO0.png b/sprites/dlc1/BXPLO0.png similarity index 100% rename from sprites/dlc/BXPLO0.png rename to sprites/dlc1/BXPLO0.png diff --git a/sprites/dlc/BXPLP0.png b/sprites/dlc1/BXPLP0.png similarity index 100% rename from sprites/dlc/BXPLP0.png rename to sprites/dlc1/BXPLP0.png diff --git a/sprites/dlc/BXPLQ0.png b/sprites/dlc1/BXPLQ0.png similarity index 100% rename from sprites/dlc/BXPLQ0.png rename to sprites/dlc1/BXPLQ0.png diff --git a/sprites/dlc/BXPLR0.png b/sprites/dlc1/BXPLR0.png similarity index 100% rename from sprites/dlc/BXPLR0.png rename to sprites/dlc1/BXPLR0.png diff --git a/sprites/dlc/BXPLS0.png b/sprites/dlc1/BXPLS0.png similarity index 100% rename from sprites/dlc/BXPLS0.png rename to sprites/dlc1/BXPLS0.png diff --git a/sprites/dlc/BXPLT0.png b/sprites/dlc1/BXPLT0.png similarity index 100% rename from sprites/dlc/BXPLT0.png rename to sprites/dlc1/BXPLT0.png diff --git a/sprites/dlc/BXPLU0.png b/sprites/dlc1/BXPLU0.png similarity index 100% rename from sprites/dlc/BXPLU0.png rename to sprites/dlc1/BXPLU0.png diff --git a/sprites/dlc/BXPLV0.png b/sprites/dlc1/BXPLV0.png similarity index 100% rename from sprites/dlc/BXPLV0.png rename to sprites/dlc1/BXPLV0.png diff --git a/sprites/dlc/BXPLW0.png b/sprites/dlc1/BXPLW0.png similarity index 100% rename from sprites/dlc/BXPLW0.png rename to sprites/dlc1/BXPLW0.png diff --git a/sprites/dlc/BXPLX0.png b/sprites/dlc1/BXPLX0.png similarity index 100% rename from sprites/dlc/BXPLX0.png rename to sprites/dlc1/BXPLX0.png diff --git a/sprites/dlc/BXPLY0.png b/sprites/dlc1/BXPLY0.png similarity index 100% rename from sprites/dlc/BXPLY0.png rename to sprites/dlc1/BXPLY0.png diff --git a/sprites/dlc/BXPLZ0.png b/sprites/dlc1/BXPLZ0.png similarity index 100% rename from sprites/dlc/BXPLZ0.png rename to sprites/dlc1/BXPLZ0.png diff --git a/sprites/dlc/BXPL[0.png b/sprites/dlc1/BXPL[0.png similarity index 100% rename from sprites/dlc/BXPL[0.png rename to sprites/dlc1/BXPL[0.png diff --git a/sprites/dlc/BXPL^0.png b/sprites/dlc1/BXPL^0.png similarity index 100% rename from sprites/dlc/BXPL^0.png rename to sprites/dlc1/BXPL^0.png diff --git a/sprites/dlc/PBBLA0.png b/sprites/dlc1/PBBLA0.png similarity index 100% rename from sprites/dlc/PBBLA0.png rename to sprites/dlc1/PBBLA0.png diff --git a/sprites/dlc/PBBLB0.png b/sprites/dlc1/PBBLB0.png similarity index 100% rename from sprites/dlc/PBBLB0.png rename to sprites/dlc1/PBBLB0.png diff --git a/sprites/dlc/PBBLC0.png b/sprites/dlc1/PBBLC0.png similarity index 100% rename from sprites/dlc/PBBLC0.png rename to sprites/dlc1/PBBLC0.png diff --git a/sprites/dlc/PBBLD0.png b/sprites/dlc1/PBBLD0.png similarity index 100% rename from sprites/dlc/PBBLD0.png rename to sprites/dlc1/PBBLD0.png diff --git a/sprites/dlc/PBBLE0.png b/sprites/dlc1/PBBLE0.png similarity index 100% rename from sprites/dlc/PBBLE0.png rename to sprites/dlc1/PBBLE0.png diff --git a/sprites/dlc/PBBLF0.png b/sprites/dlc1/PBBLF0.png similarity index 100% rename from sprites/dlc/PBBLF0.png rename to sprites/dlc1/PBBLF0.png diff --git a/sprites/dlc/PBBLG0.png b/sprites/dlc1/PBBLG0.png similarity index 100% rename from sprites/dlc/PBBLG0.png rename to sprites/dlc1/PBBLG0.png diff --git a/sprites/dlc/PBBLH0.png b/sprites/dlc1/PBBLH0.png similarity index 100% rename from sprites/dlc/PBBLH0.png rename to sprites/dlc1/PBBLH0.png diff --git a/sprites/dlc/PBBLI0.png b/sprites/dlc1/PBBLI0.png similarity index 100% rename from sprites/dlc/PBBLI0.png rename to sprites/dlc1/PBBLI0.png diff --git a/sprites/dlc/PBBLJ0.png b/sprites/dlc1/PBBLJ0.png similarity index 100% rename from sprites/dlc/PBBLJ0.png rename to sprites/dlc1/PBBLJ0.png diff --git a/sprites/dlc/PBMBA0.png b/sprites/dlc1/PBMBA0.png similarity index 100% rename from sprites/dlc/PBMBA0.png rename to sprites/dlc1/PBMBA0.png diff --git a/sprites/dlc/PBMBB0.png b/sprites/dlc1/PBMBB0.png similarity index 100% rename from sprites/dlc/PBMBB0.png rename to sprites/dlc1/PBMBB0.png diff --git a/sprites/dlc/PBMBC0.png b/sprites/dlc1/PBMBC0.png similarity index 100% rename from sprites/dlc/PBMBC0.png rename to sprites/dlc1/PBMBC0.png diff --git a/sprites/dlc/PBMBD0.png b/sprites/dlc1/PBMBD0.png similarity index 100% rename from sprites/dlc/PBMBD0.png rename to sprites/dlc1/PBMBD0.png diff --git a/sprites/dlc/PBMBE0.png b/sprites/dlc1/PBMBE0.png similarity index 100% rename from sprites/dlc/PBMBE0.png rename to sprites/dlc1/PBMBE0.png diff --git a/sprites/dlc/PBMBF0.png b/sprites/dlc1/PBMBF0.png similarity index 100% rename from sprites/dlc/PBMBF0.png rename to sprites/dlc1/PBMBF0.png diff --git a/sprites/dlc/PBMBG0.png b/sprites/dlc1/PBMBG0.png similarity index 100% rename from sprites/dlc/PBMBG0.png rename to sprites/dlc1/PBMBG0.png diff --git a/sprites/dlc/PBMBH0.png b/sprites/dlc1/PBMBH0.png similarity index 100% rename from sprites/dlc/PBMBH0.png rename to sprites/dlc1/PBMBH0.png diff --git a/sprites/dlc/PBMBI0.png b/sprites/dlc1/PBMBI0.png similarity index 100% rename from sprites/dlc/PBMBI0.png rename to sprites/dlc1/PBMBI0.png diff --git a/sprites/dlc/PBMBJ0.png b/sprites/dlc1/PBMBJ0.png similarity index 100% rename from sprites/dlc/PBMBJ0.png rename to sprites/dlc1/PBMBJ0.png diff --git a/sprites/dlc/PBMBK0.png b/sprites/dlc1/PBMBK0.png similarity index 100% rename from sprites/dlc/PBMBK0.png rename to sprites/dlc1/PBMBK0.png diff --git a/sprites/dlc/PBMBL0.png b/sprites/dlc1/PBMBL0.png similarity index 100% rename from sprites/dlc/PBMBL0.png rename to sprites/dlc1/PBMBL0.png diff --git a/sprites/dlc/QEMBA0.png b/sprites/dlc1/QEMBA0.png similarity index 100% rename from sprites/dlc/QEMBA0.png rename to sprites/dlc1/QEMBA0.png diff --git a/sprites/dlc/QEMBB0.png b/sprites/dlc1/QEMBB0.png similarity index 100% rename from sprites/dlc/QEMBB0.png rename to sprites/dlc1/QEMBB0.png diff --git a/sprites/dlc/QEMBC0.png b/sprites/dlc1/QEMBC0.png similarity index 100% rename from sprites/dlc/QEMBC0.png rename to sprites/dlc1/QEMBC0.png diff --git a/sprites/dlc/QEMBD0.png b/sprites/dlc1/QEMBD0.png similarity index 100% rename from sprites/dlc/QEMBD0.png rename to sprites/dlc1/QEMBD0.png diff --git a/sprites/dlc/QEMBE0.png b/sprites/dlc1/QEMBE0.png similarity index 100% rename from sprites/dlc/QEMBE0.png rename to sprites/dlc1/QEMBE0.png diff --git a/sprites/dlc/QFBLA0.png b/sprites/dlc1/QFBLA0.png similarity index 100% rename from sprites/dlc/QFBLA0.png rename to sprites/dlc1/QFBLA0.png diff --git a/sprites/dlc/QFBLB0.png b/sprites/dlc1/QFBLB0.png similarity index 100% rename from sprites/dlc/QFBLB0.png rename to sprites/dlc1/QFBLB0.png diff --git a/sprites/dlc/QFBLC0.png b/sprites/dlc1/QFBLC0.png similarity index 100% rename from sprites/dlc/QFBLC0.png rename to sprites/dlc1/QFBLC0.png diff --git a/sprites/dlc/QFBLD0.png b/sprites/dlc1/QFBLD0.png similarity index 100% rename from sprites/dlc/QFBLD0.png rename to sprites/dlc1/QFBLD0.png diff --git a/sprites/dlc/QFBLE0.png b/sprites/dlc1/QFBLE0.png similarity index 100% rename from sprites/dlc/QFBLE0.png rename to sprites/dlc1/QFBLE0.png diff --git a/sprites/dlc/QFBLF0.png b/sprites/dlc1/QFBLF0.png similarity index 100% rename from sprites/dlc/QFBLF0.png rename to sprites/dlc1/QFBLF0.png diff --git a/sprites/dlc/QFBLG0.png b/sprites/dlc1/QFBLG0.png similarity index 100% rename from sprites/dlc/QFBLG0.png rename to sprites/dlc1/QFBLG0.png diff --git a/sprites/dlc/QFBLH0.png b/sprites/dlc1/QFBLH0.png similarity index 100% rename from sprites/dlc/QFBLH0.png rename to sprites/dlc1/QFBLH0.png diff --git a/sprites/dlc/QFBLI0.png b/sprites/dlc1/QFBLI0.png similarity index 100% rename from sprites/dlc/QFBLI0.png rename to sprites/dlc1/QFBLI0.png diff --git a/sprites/dlc/QFBLJ0.png b/sprites/dlc1/QFBLJ0.png similarity index 100% rename from sprites/dlc/QFBLJ0.png rename to sprites/dlc1/QFBLJ0.png diff --git a/sprites/dlc/QFLRA0.png b/sprites/dlc1/QFLRA0.png similarity index 100% rename from sprites/dlc/QFLRA0.png rename to sprites/dlc1/QFLRA0.png diff --git a/sprites/dlc/RAYTA0.png b/sprites/dlc1/RAYTA0.png similarity index 100% rename from sprites/dlc/RAYTA0.png rename to sprites/dlc1/RAYTA0.png diff --git a/sprites/dlc/RAYTB0.png b/sprites/dlc1/RAYTB0.png similarity index 100% rename from sprites/dlc/RAYTB0.png rename to sprites/dlc1/RAYTB0.png diff --git a/sprites/dlc/RAYTC0.png b/sprites/dlc1/RAYTC0.png similarity index 100% rename from sprites/dlc/RAYTC0.png rename to sprites/dlc1/RAYTC0.png diff --git a/sprites/dlc/RAYTD0.png b/sprites/dlc1/RAYTD0.png similarity index 100% rename from sprites/dlc/RAYTD0.png rename to sprites/dlc1/RAYTD0.png diff --git a/sprites/dlc/RAYTE0.png b/sprites/dlc1/RAYTE0.png similarity index 100% rename from sprites/dlc/RAYTE0.png rename to sprites/dlc1/RAYTE0.png diff --git a/sprites/dlc/RAYTF0.png b/sprites/dlc1/RAYTF0.png similarity index 100% rename from sprites/dlc/RAYTF0.png rename to sprites/dlc1/RAYTF0.png diff --git a/sprites/dlc/RAYTG0.png b/sprites/dlc1/RAYTG0.png similarity index 100% rename from sprites/dlc/RAYTG0.png rename to sprites/dlc1/RAYTG0.png diff --git a/sprites/dlc/RAYTH0.png b/sprites/dlc1/RAYTH0.png similarity index 100% rename from sprites/dlc/RAYTH0.png rename to sprites/dlc1/RAYTH0.png diff --git a/sprites/dlc/RAYTI0.png b/sprites/dlc1/RAYTI0.png similarity index 100% rename from sprites/dlc/RAYTI0.png rename to sprites/dlc1/RAYTI0.png diff --git a/sprites/dlc/RAYTJ0.png b/sprites/dlc1/RAYTJ0.png similarity index 100% rename from sprites/dlc/RAYTJ0.png rename to sprites/dlc1/RAYTJ0.png diff --git a/sprites/dlc/RAYTK0.png b/sprites/dlc1/RAYTK0.png similarity index 100% rename from sprites/dlc/RAYTK0.png rename to sprites/dlc1/RAYTK0.png diff --git a/sprites/dlc/XEX5A0.png b/sprites/dlc1/XEX5A0.png similarity index 100% rename from sprites/dlc/XEX5A0.png rename to sprites/dlc1/XEX5A0.png diff --git a/sprites/dlc/XEX5B0.png b/sprites/dlc1/XEX5B0.png similarity index 100% rename from sprites/dlc/XEX5B0.png rename to sprites/dlc1/XEX5B0.png diff --git a/sprites/dlc/XEX5C0.png b/sprites/dlc1/XEX5C0.png similarity index 100% rename from sprites/dlc/XEX5C0.png rename to sprites/dlc1/XEX5C0.png diff --git a/sprites/dlc/XEX5D0.png b/sprites/dlc1/XEX5D0.png similarity index 100% rename from sprites/dlc/XEX5D0.png rename to sprites/dlc1/XEX5D0.png diff --git a/sprites/dlc/XEX5E0.png b/sprites/dlc1/XEX5E0.png similarity index 100% rename from sprites/dlc/XEX5E0.png rename to sprites/dlc1/XEX5E0.png diff --git a/sprites/dlc/XEX5F0.png b/sprites/dlc1/XEX5F0.png similarity index 100% rename from sprites/dlc/XEX5F0.png rename to sprites/dlc1/XEX5F0.png diff --git a/sprites/dlc/XEX5G0.png b/sprites/dlc1/XEX5G0.png similarity index 100% rename from sprites/dlc/XEX5G0.png rename to sprites/dlc1/XEX5G0.png diff --git a/sprites/dlc/XEX5H0.png b/sprites/dlc1/XEX5H0.png similarity index 100% rename from sprites/dlc/XEX5H0.png rename to sprites/dlc1/XEX5H0.png diff --git a/sprites/dlc/XEX5I0.png b/sprites/dlc1/XEX5I0.png similarity index 100% rename from sprites/dlc/XEX5I0.png rename to sprites/dlc1/XEX5I0.png diff --git a/sprites/dlc/XEX5J0.png b/sprites/dlc1/XEX5J0.png similarity index 100% rename from sprites/dlc/XEX5J0.png rename to sprites/dlc1/XEX5J0.png diff --git a/sprites/dlc/XEX5K0.png b/sprites/dlc1/XEX5K0.png similarity index 100% rename from sprites/dlc/XEX5K0.png rename to sprites/dlc1/XEX5K0.png diff --git a/sprites/dlc/XEX5L0.png b/sprites/dlc1/XEX5L0.png similarity index 100% rename from sprites/dlc/XEX5L0.png rename to sprites/dlc1/XEX5L0.png diff --git a/sprites/dlc/XEX5M0.png b/sprites/dlc1/XEX5M0.png similarity index 100% rename from sprites/dlc/XEX5M0.png rename to sprites/dlc1/XEX5M0.png diff --git a/sprites/dlc/XEX5N0.png b/sprites/dlc1/XEX5N0.png similarity index 100% rename from sprites/dlc/XEX5N0.png rename to sprites/dlc1/XEX5N0.png diff --git a/sprites/dlc/XEX5O0.png b/sprites/dlc1/XEX5O0.png similarity index 100% rename from sprites/dlc/XEX5O0.png rename to sprites/dlc1/XEX5O0.png diff --git a/sprites/dlc/XEX5P0.png b/sprites/dlc1/XEX5P0.png similarity index 100% rename from sprites/dlc/XEX5P0.png rename to sprites/dlc1/XEX5P0.png diff --git a/sprites/dlc/XEX5Q0.png b/sprites/dlc1/XEX5Q0.png similarity index 100% rename from sprites/dlc/XEX5Q0.png rename to sprites/dlc1/XEX5Q0.png diff --git a/sprites/dlc/XEX5R0.png b/sprites/dlc1/XEX5R0.png similarity index 100% rename from sprites/dlc/XEX5R0.png rename to sprites/dlc1/XEX5R0.png diff --git a/sprites/dlc/XEX5S0.png b/sprites/dlc1/XEX5S0.png similarity index 100% rename from sprites/dlc/XEX5S0.png rename to sprites/dlc1/XEX5S0.png diff --git a/sprites/dlc/XEX6A0.png b/sprites/dlc1/XEX6A0.png similarity index 100% rename from sprites/dlc/XEX6A0.png rename to sprites/dlc1/XEX6A0.png diff --git a/sprites/dlc/XEX6B0.png b/sprites/dlc1/XEX6B0.png similarity index 100% rename from sprites/dlc/XEX6B0.png rename to sprites/dlc1/XEX6B0.png diff --git a/sprites/dlc/XEX6C0.png b/sprites/dlc1/XEX6C0.png similarity index 100% rename from sprites/dlc/XEX6C0.png rename to sprites/dlc1/XEX6C0.png diff --git a/sprites/dlc/XEX6D0.png b/sprites/dlc1/XEX6D0.png similarity index 100% rename from sprites/dlc/XEX6D0.png rename to sprites/dlc1/XEX6D0.png diff --git a/sprites/dlc/XEX6E0.png b/sprites/dlc1/XEX6E0.png similarity index 100% rename from sprites/dlc/XEX6E0.png rename to sprites/dlc1/XEX6E0.png diff --git a/sprites/dlc/XEX6F0.png b/sprites/dlc1/XEX6F0.png similarity index 100% rename from sprites/dlc/XEX6F0.png rename to sprites/dlc1/XEX6F0.png diff --git a/sprites/dlc/XEX6G0.png b/sprites/dlc1/XEX6G0.png similarity index 100% rename from sprites/dlc/XEX6G0.png rename to sprites/dlc1/XEX6G0.png diff --git a/sprites/dlc/XEX6H0.png b/sprites/dlc1/XEX6H0.png similarity index 100% rename from sprites/dlc/XEX6H0.png rename to sprites/dlc1/XEX6H0.png diff --git a/sprites/dlc/XEX6I0.png b/sprites/dlc1/XEX6I0.png similarity index 100% rename from sprites/dlc/XEX6I0.png rename to sprites/dlc1/XEX6I0.png diff --git a/sprites/dlc/XEX6J0.png b/sprites/dlc1/XEX6J0.png similarity index 100% rename from sprites/dlc/XEX6J0.png rename to sprites/dlc1/XEX6J0.png diff --git a/sprites/dlc/XEX6K0.png b/sprites/dlc1/XEX6K0.png similarity index 100% rename from sprites/dlc/XEX6K0.png rename to sprites/dlc1/XEX6K0.png diff --git a/sprites/dlc/XEX6L0.png b/sprites/dlc1/XEX6L0.png similarity index 100% rename from sprites/dlc/XEX6L0.png rename to sprites/dlc1/XEX6L0.png diff --git a/sprites/dlc/XEX6M0.png b/sprites/dlc1/XEX6M0.png similarity index 100% rename from sprites/dlc/XEX6M0.png rename to sprites/dlc1/XEX6M0.png diff --git a/sprites/dlc/XEX6N0.png b/sprites/dlc1/XEX6N0.png similarity index 100% rename from sprites/dlc/XEX6N0.png rename to sprites/dlc1/XEX6N0.png diff --git a/sprites/dlc/XEX6O0.png b/sprites/dlc1/XEX6O0.png similarity index 100% rename from sprites/dlc/XEX6O0.png rename to sprites/dlc1/XEX6O0.png diff --git a/sprites/dlc/XEX6P0.png b/sprites/dlc1/XEX6P0.png similarity index 100% rename from sprites/dlc/XEX6P0.png rename to sprites/dlc1/XEX6P0.png diff --git a/sprites/dlc/XEX6Q0.png b/sprites/dlc1/XEX6Q0.png similarity index 100% rename from sprites/dlc/XEX6Q0.png rename to sprites/dlc1/XEX6Q0.png diff --git a/sprites/dlc/XEX6R0.png b/sprites/dlc1/XEX6R0.png similarity index 100% rename from sprites/dlc/XEX6R0.png rename to sprites/dlc1/XEX6R0.png diff --git a/sprites/dlc/XEX6S0.png b/sprites/dlc1/XEX6S0.png similarity index 100% rename from sprites/dlc/XEX6S0.png rename to sprites/dlc1/XEX6S0.png diff --git a/sprites/dlc/XRG6A0.png b/sprites/dlc1/XRG6A0.png similarity index 100% rename from sprites/dlc/XRG6A0.png rename to sprites/dlc1/XRG6A0.png diff --git a/sprites/dlc/XRG6B0.png b/sprites/dlc1/XRG6B0.png similarity index 100% rename from sprites/dlc/XRG6B0.png rename to sprites/dlc1/XRG6B0.png diff --git a/sprites/dlc/XRG6C0.png b/sprites/dlc1/XRG6C0.png similarity index 100% rename from sprites/dlc/XRG6C0.png rename to sprites/dlc1/XRG6C0.png diff --git a/sprites/dlc/XRG6D0.png b/sprites/dlc1/XRG6D0.png similarity index 100% rename from sprites/dlc/XRG6D0.png rename to sprites/dlc1/XRG6D0.png diff --git a/sprites/dlc/XRG6E0.png b/sprites/dlc1/XRG6E0.png similarity index 100% rename from sprites/dlc/XRG6E0.png rename to sprites/dlc1/XRG6E0.png diff --git a/sprites/dlc/XRG6F0.png b/sprites/dlc1/XRG6F0.png similarity index 100% rename from sprites/dlc/XRG6F0.png rename to sprites/dlc1/XRG6F0.png diff --git a/sprites/dlc/XRG6G0.png b/sprites/dlc1/XRG6G0.png similarity index 100% rename from sprites/dlc/XRG6G0.png rename to sprites/dlc1/XRG6G0.png diff --git a/sprites/dlc/XRG6H0.png b/sprites/dlc1/XRG6H0.png similarity index 100% rename from sprites/dlc/XRG6H0.png rename to sprites/dlc1/XRG6H0.png diff --git a/sprites/dlc/XRG6I0.png b/sprites/dlc1/XRG6I0.png similarity index 100% rename from sprites/dlc/XRG6I0.png rename to sprites/dlc1/XRG6I0.png diff --git a/sprites/dlc/XRG6J0.png b/sprites/dlc1/XRG6J0.png similarity index 100% rename from sprites/dlc/XRG6J0.png rename to sprites/dlc1/XRG6J0.png diff --git a/sprites/dlc/XRG6K0.png b/sprites/dlc1/XRG6K0.png similarity index 100% rename from sprites/dlc/XRG6K0.png rename to sprites/dlc1/XRG6K0.png diff --git a/sprites/dlc/XRG6L0.png b/sprites/dlc1/XRG6L0.png similarity index 100% rename from sprites/dlc/XRG6L0.png rename to sprites/dlc1/XRG6L0.png diff --git a/sprites/dlc/XRG6M0.png b/sprites/dlc1/XRG6M0.png similarity index 100% rename from sprites/dlc/XRG6M0.png rename to sprites/dlc1/XRG6M0.png diff --git a/sprites/dlc/XRG6N0.png b/sprites/dlc1/XRG6N0.png similarity index 100% rename from sprites/dlc/XRG6N0.png rename to sprites/dlc1/XRG6N0.png diff --git a/sprites/dlc/XRG6O0.png b/sprites/dlc1/XRG6O0.png similarity index 100% rename from sprites/dlc/XRG6O0.png rename to sprites/dlc1/XRG6O0.png diff --git a/sprites/dlc/XRG6P0.png b/sprites/dlc1/XRG6P0.png similarity index 100% rename from sprites/dlc/XRG6P0.png rename to sprites/dlc1/XRG6P0.png diff --git a/sprites/dlc/XRG6Q0.png b/sprites/dlc1/XRG6Q0.png similarity index 100% rename from sprites/dlc/XRG6Q0.png rename to sprites/dlc1/XRG6Q0.png diff --git a/sprites/dlc/XRG6R0.png b/sprites/dlc1/XRG6R0.png similarity index 100% rename from sprites/dlc/XRG6R0.png rename to sprites/dlc1/XRG6R0.png diff --git a/sprites/dlc/XRG6S0.png b/sprites/dlc1/XRG6S0.png similarity index 100% rename from sprites/dlc/XRG6S0.png rename to sprites/dlc1/XRG6S0.png diff --git a/sprites/dlc/XRG6T0.png b/sprites/dlc1/XRG6T0.png similarity index 100% rename from sprites/dlc/XRG6T0.png rename to sprites/dlc1/XRG6T0.png diff --git a/sprites/dlc/XRG6U0.png b/sprites/dlc1/XRG6U0.png similarity index 100% rename from sprites/dlc/XRG6U0.png rename to sprites/dlc1/XRG6U0.png diff --git a/sprites/dlc/XRG6V0.png b/sprites/dlc1/XRG6V0.png similarity index 100% rename from sprites/dlc/XRG6V0.png rename to sprites/dlc1/XRG6V0.png diff --git a/sprites/dlc/XRG6W0.png b/sprites/dlc1/XRG6W0.png similarity index 100% rename from sprites/dlc/XRG6W0.png rename to sprites/dlc1/XRG6W0.png diff --git a/sprites/dlc/XRG6X0.png b/sprites/dlc1/XRG6X0.png similarity index 100% rename from sprites/dlc/XRG6X0.png rename to sprites/dlc1/XRG6X0.png diff --git a/sprites/dlc/XRG7A0.png b/sprites/dlc1/XRG7A0.png similarity index 100% rename from sprites/dlc/XRG7A0.png rename to sprites/dlc1/XRG7A0.png diff --git a/sprites/dlc/XRG7B0.png b/sprites/dlc1/XRG7B0.png similarity index 100% rename from sprites/dlc/XRG7B0.png rename to sprites/dlc1/XRG7B0.png diff --git a/sprites/dlc/XRG7C0.png b/sprites/dlc1/XRG7C0.png similarity index 100% rename from sprites/dlc/XRG7C0.png rename to sprites/dlc1/XRG7C0.png diff --git a/sprites/dlc/XRG7D0.png b/sprites/dlc1/XRG7D0.png similarity index 100% rename from sprites/dlc/XRG7D0.png rename to sprites/dlc1/XRG7D0.png diff --git a/sprites/dlc/XRG7E0.png b/sprites/dlc1/XRG7E0.png similarity index 100% rename from sprites/dlc/XRG7E0.png rename to sprites/dlc1/XRG7E0.png diff --git a/sprites/dlc/XRG7F0.png b/sprites/dlc1/XRG7F0.png similarity index 100% rename from sprites/dlc/XRG7F0.png rename to sprites/dlc1/XRG7F0.png diff --git a/sprites/dlc/XRG7G0.png b/sprites/dlc1/XRG7G0.png similarity index 100% rename from sprites/dlc/XRG7G0.png rename to sprites/dlc1/XRG7G0.png diff --git a/sprites/dlc/XRG7H0.png b/sprites/dlc1/XRG7H0.png similarity index 100% rename from sprites/dlc/XRG7H0.png rename to sprites/dlc1/XRG7H0.png diff --git a/sprites/dlc/XRG7I0.png b/sprites/dlc1/XRG7I0.png similarity index 100% rename from sprites/dlc/XRG7I0.png rename to sprites/dlc1/XRG7I0.png diff --git a/sprites/dlc/XRG7J0.png b/sprites/dlc1/XRG7J0.png similarity index 100% rename from sprites/dlc/XRG7J0.png rename to sprites/dlc1/XRG7J0.png diff --git a/sprites/dlc/XRG7K0.png b/sprites/dlc1/XRG7K0.png similarity index 100% rename from sprites/dlc/XRG7K0.png rename to sprites/dlc1/XRG7K0.png diff --git a/sprites/dlc/XRG7L0.png b/sprites/dlc1/XRG7L0.png similarity index 100% rename from sprites/dlc/XRG7L0.png rename to sprites/dlc1/XRG7L0.png diff --git a/sprites/dlc/XRG7M0.png b/sprites/dlc1/XRG7M0.png similarity index 100% rename from sprites/dlc/XRG7M0.png rename to sprites/dlc1/XRG7M0.png diff --git a/sprites/dlc/XRG7N0.png b/sprites/dlc1/XRG7N0.png similarity index 100% rename from sprites/dlc/XRG7N0.png rename to sprites/dlc1/XRG7N0.png diff --git a/sprites/dlc/XRG7O0.png b/sprites/dlc1/XRG7O0.png similarity index 100% rename from sprites/dlc/XRG7O0.png rename to sprites/dlc1/XRG7O0.png diff --git a/sprites/dlc/XRG7P0.png b/sprites/dlc1/XRG7P0.png similarity index 100% rename from sprites/dlc/XRG7P0.png rename to sprites/dlc1/XRG7P0.png diff --git a/sprites/dlc/XRG7Q0.png b/sprites/dlc1/XRG7Q0.png similarity index 100% rename from sprites/dlc/XRG7Q0.png rename to sprites/dlc1/XRG7Q0.png diff --git a/sprites/dlc/XRG7R0.png b/sprites/dlc1/XRG7R0.png similarity index 100% rename from sprites/dlc/XRG7R0.png rename to sprites/dlc1/XRG7R0.png diff --git a/sprites/dlc/XRG7S0.png b/sprites/dlc1/XRG7S0.png similarity index 100% rename from sprites/dlc/XRG7S0.png rename to sprites/dlc1/XRG7S0.png diff --git a/sprites/dlc/XRG7T0.png b/sprites/dlc1/XRG7T0.png similarity index 100% rename from sprites/dlc/XRG7T0.png rename to sprites/dlc1/XRG7T0.png diff --git a/sprites/dlc/XRG7U0.png b/sprites/dlc1/XRG7U0.png similarity index 100% rename from sprites/dlc/XRG7U0.png rename to sprites/dlc1/XRG7U0.png diff --git a/sprites/dlc/XRG7V0.png b/sprites/dlc1/XRG7V0.png similarity index 100% rename from sprites/dlc/XRG7V0.png rename to sprites/dlc1/XRG7V0.png diff --git a/sprites/dlc/XRG7W0.png b/sprites/dlc1/XRG7W0.png similarity index 100% rename from sprites/dlc/XRG7W0.png rename to sprites/dlc1/XRG7W0.png diff --git a/sprites/dlc/XRG7X0.png b/sprites/dlc1/XRG7X0.png similarity index 100% rename from sprites/dlc/XRG7X0.png rename to sprites/dlc1/XRG7X0.png diff --git a/sprites/dlc/NSFLA0.png b/sprites/dlc2/NSFLA0.png similarity index 100% rename from sprites/dlc/NSFLA0.png rename to sprites/dlc2/NSFLA0.png diff --git a/sprites/dlc/NSFLB0.png b/sprites/dlc2/NSFLB0.png similarity index 100% rename from sprites/dlc/NSFLB0.png rename to sprites/dlc2/NSFLB0.png diff --git a/sprites/dlc/NSFLC0.png b/sprites/dlc2/NSFLC0.png similarity index 100% rename from sprites/dlc/NSFLC0.png rename to sprites/dlc2/NSFLC0.png diff --git a/sprites/dlc/RFXPA0.png b/sprites/dlc2/RFXPA0.png similarity index 100% rename from sprites/dlc/RFXPA0.png rename to sprites/dlc2/RFXPA0.png diff --git a/sprites/dlc/RFXPB0.png b/sprites/dlc2/RFXPB0.png similarity index 100% rename from sprites/dlc/RFXPB0.png rename to sprites/dlc2/RFXPB0.png diff --git a/sprites/dlc/RFXPC0.png b/sprites/dlc2/RFXPC0.png similarity index 100% rename from sprites/dlc/RFXPC0.png rename to sprites/dlc2/RFXPC0.png diff --git a/sprites/dlc/RFXPD0.png b/sprites/dlc2/RFXPD0.png similarity index 100% rename from sprites/dlc/RFXPD0.png rename to sprites/dlc2/RFXPD0.png diff --git a/sprites/dlc/RFXPE0.png b/sprites/dlc2/RFXPE0.png similarity index 100% rename from sprites/dlc/RFXPE0.png rename to sprites/dlc2/RFXPE0.png diff --git a/sprites/dlc/RFXPF0.png b/sprites/dlc2/RFXPF0.png similarity index 100% rename from sprites/dlc/RFXPF0.png rename to sprites/dlc2/RFXPF0.png diff --git a/sprites/dlc/RFXPG0.png b/sprites/dlc2/RFXPG0.png similarity index 100% rename from sprites/dlc/RFXPG0.png rename to sprites/dlc2/RFXPG0.png diff --git a/sprites/dlc/RFXPH0.png b/sprites/dlc2/RFXPH0.png similarity index 100% rename from sprites/dlc/RFXPH0.png rename to sprites/dlc2/RFXPH0.png diff --git a/sprites/dlc/RFXPI0.png b/sprites/dlc2/RFXPI0.png similarity index 100% rename from sprites/dlc/RFXPI0.png rename to sprites/dlc2/RFXPI0.png diff --git a/sprites/dlc/RFXPJ0.png b/sprites/dlc2/RFXPJ0.png similarity index 100% rename from sprites/dlc/RFXPJ0.png rename to sprites/dlc2/RFXPJ0.png diff --git a/sprites/dlc/RFXPK0.png b/sprites/dlc2/RFXPK0.png similarity index 100% rename from sprites/dlc/RFXPK0.png rename to sprites/dlc2/RFXPK0.png diff --git a/sprites/dlc/RFXPL0.png b/sprites/dlc2/RFXPL0.png similarity index 100% rename from sprites/dlc/RFXPL0.png rename to sprites/dlc2/RFXPL0.png diff --git a/sprites/dlc/RFXPM0.png b/sprites/dlc2/RFXPM0.png similarity index 100% rename from sprites/dlc/RFXPM0.png rename to sprites/dlc2/RFXPM0.png diff --git a/sprites/dlc/RFXPN0.png b/sprites/dlc2/RFXPN0.png similarity index 100% rename from sprites/dlc/RFXPN0.png rename to sprites/dlc2/RFXPN0.png diff --git a/sprites/dlc/RFXPO0.png b/sprites/dlc2/RFXPO0.png similarity index 100% rename from sprites/dlc/RFXPO0.png rename to sprites/dlc2/RFXPO0.png diff --git a/sprites/dlc/RFXPP0.png b/sprites/dlc2/RFXPP0.png similarity index 100% rename from sprites/dlc/RFXPP0.png rename to sprites/dlc2/RFXPP0.png diff --git a/sprites/dlc/RFXPQ0.png b/sprites/dlc2/RFXPQ0.png similarity index 100% rename from sprites/dlc/RFXPQ0.png rename to sprites/dlc2/RFXPQ0.png diff --git a/sprites/dlc/RFXPR0.png b/sprites/dlc2/RFXPR0.png similarity index 100% rename from sprites/dlc/RFXPR0.png rename to sprites/dlc2/RFXPR0.png diff --git a/sprites/dlc/RFXPS0.png b/sprites/dlc2/RFXPS0.png similarity index 100% rename from sprites/dlc/RFXPS0.png rename to sprites/dlc2/RFXPS0.png diff --git a/sprites/dlc/RFXPT0.png b/sprites/dlc2/RFXPT0.png similarity index 100% rename from sprites/dlc/RFXPT0.png rename to sprites/dlc2/RFXPT0.png diff --git a/sprites/dlc/RFXPU0.png b/sprites/dlc2/RFXPU0.png similarity index 100% rename from sprites/dlc/RFXPU0.png rename to sprites/dlc2/RFXPU0.png diff --git a/sprites/dlc/RFXPV0.png b/sprites/dlc2/RFXPV0.png similarity index 100% rename from sprites/dlc/RFXPV0.png rename to sprites/dlc2/RFXPV0.png diff --git a/sprites/dlc/RFXPW0.png b/sprites/dlc2/RFXPW0.png similarity index 100% rename from sprites/dlc/RFXPW0.png rename to sprites/dlc2/RFXPW0.png diff --git a/sprites/dlc/RFXPX0.png b/sprites/dlc2/RFXPX0.png similarity index 100% rename from sprites/dlc/RFXPX0.png rename to sprites/dlc2/RFXPX0.png diff --git a/sprites/dlc/RFXPY0.png b/sprites/dlc2/RFXPY0.png similarity index 100% rename from sprites/dlc/RFXPY0.png rename to sprites/dlc2/RFXPY0.png diff --git a/sprites/dlc/RFXPZ0.png b/sprites/dlc2/RFXPZ0.png similarity index 100% rename from sprites/dlc/RFXPZ0.png rename to sprites/dlc2/RFXPZ0.png diff --git a/sprites/dlc/RFXP[0.png b/sprites/dlc2/RFXP[0.png similarity index 100% rename from sprites/dlc/RFXP[0.png rename to sprites/dlc2/RFXP[0.png diff --git a/sprites/dlc/RFXP^0.png b/sprites/dlc2/RFXP^0.png similarity index 100% rename from sprites/dlc/RFXP^0.png rename to sprites/dlc2/RFXP^0.png diff --git a/textures/devawarp1.png b/textures/devawarp1.png new file mode 100644 index 000000000..eb28461b6 Binary files /dev/null and b/textures/devawarp1.png differ diff --git a/textures/devawarp2.png b/textures/devawarp2.png new file mode 100644 index 000000000..7060f1de9 Binary files /dev/null and b/textures/devawarp2.png differ diff --git a/textures/frosttex.png b/textures/frosttex.png new file mode 100644 index 000000000..3a6e8d26a Binary files /dev/null and b/textures/frosttex.png differ diff --git a/textures/smoketex.png b/textures/smoketex.png new file mode 100644 index 000000000..d1bf3e116 Binary files /dev/null and b/textures/smoketex.png differ diff --git a/zmapinfo.txt b/zmapinfo.txt index 3752bf1a3..7c0e2e6fe 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -181,6 +181,7 @@ DamageType EndLevel DoomEdNums { // these are placed by a level postprocessor on Kinsie's Test Map, so we don't need 16-bit numbers + // Doom collectibles 4206900 = GenericCube 4206901 = AkariProject 4206902 = LoveSignalsCD @@ -188,21 +189,15 @@ DoomEdNums 4206904 = FrispyCorn 4206905 = SayaBean 4206906 = MothPlushy - 4206907 = AA12Model - 4206908 = CactusHege - 4206909 = TastyHoagie - 4206910 = IbukiMilk - 4206911 = BRCAlbum - // Heretic - 4206912 = DemoPlush - 4206913 = Manarokou - 4206914 = LithiumNovel - // Hexen - 4206915 = KirinCummies - 4206916 = MilkBreads - 4206917 = KirinManga - 4206918 = KirinPlush - 4206919 = Psykkonovexx + // Heretic collectibles + 4206907 = DemoPlush + // Hexen collectibles + 4206908 = KirinCummies + 4206909 = MilkBreads + 4206910 = KirinManga + 4206911 = KirinPlush + // ... and the chancebox + 4206920 = Chancebox // these are also pp stuff 4206990 = SWWMGuard 4206991 = SWWMHans diff --git a/zscript.txt b/zscript.txt index 9e40f31f5..ab1ad8f47 100644 --- a/zscript.txt +++ b/zscript.txt @@ -39,6 +39,7 @@ version "4.6" #include "zscript/handler/swwm_handler_queues.zsc" #include "zscript/handler/swwm_handler_replacements.zsc" #include "zscript/handler/swwm_handler_shaders.zsc" +#include "zscript/handler/swwm_handler_uitick.zsc" #include "zscript/handler/swwm_handler_vanillaboss.zsc" #include "zscript/handler/swwm_handler_worldload.zsc" #include "zscript/handler/swwm_handler_worldthings.zsc" diff --git a/zscript/compat/swwm_compat.zsc b/zscript/compat/swwm_compat.zsc index d32485296..5d3af824d 100644 --- a/zscript/compat/swwm_compat.zsc +++ b/zscript/compat/swwm_compat.zsc @@ -238,13 +238,29 @@ Class SWWMLevelCompatibility : LevelPostProcessor SetThingEdNum(i,4206991); // hans grosse } break; + // Doom 2 Redux MAP20 + case 'C9FFFD855FCF9BD6BC3ABCCA5DC2240A': + // move boss brain so the player telefrags it (lets the mod know this is a death exit) + SetThingXY(497,3296,-96); + AddThing(2035,(3360,-96,0),315); // put a barrel in the hole that was left + break; + // Doom 2 Redux MAP31 + case '4A8EAAB2B29CB438ED6EE972D3EEE951': + // contribute to Aximal's illusion by putting a single WolfSS facing away from the player start + // we can re-use thing 0, which is a shotgunner corpse + SetThingEdNum(0,4206992); + SetThingAngle(0,0); + break; // Kinsie's Test Map case '0EADB2F82732A968B8513E4DC6138439': case 'D70250F93C6B6072DA39D9672B37F236': case '959A613006CC3AA912C4A22908B7566A': // add collectibles - for ( int i=0; i<20; i++ ) + for ( int i=0; i<12; i++ ) AddThing(4206900+i,(1472+64*i,640,0)); + // add some chance boxes + for ( int i=0; i<3; i++ ) + AddThing(4206920,(3616,1824-64*i,0),180); break; } switch ( checksum ) diff --git a/zscript/dlc1/swwm_ammoitems_dlc.zsc b/zscript/dlc1/swwm_ammoitems_dlc.zsc index 78003ab84..818f9b62b 100644 --- a/zscript/dlc1/swwm_ammoitems_dlc.zsc +++ b/zscript/dlc1/swwm_ammoitems_dlc.zsc @@ -1,13 +1,7 @@ // All DLC weapon ammo pickups -Class SMW05Ammo : Ammo +Class SMW05Ammo : SWWMAmmo { - Mixin SWWMShellAmmo; - Mixin SWWMAmmo; - Mixin SWWMOverlapPickupSound; - Mixin SWWMUseToPickup; - Mixin SWWMRespawn; - Default { //$Title 1x SMW.05 Bullets @@ -15,12 +9,13 @@ Class SMW05Ammo : Ammo //$Sprite graphics/HUD/Icons/A_SMW05Ammo.png //$Icon ammo Tag "$T_SMW05BULLET"; + SWWMAmmo.PickupTag "SMW05BULLET"; Stamina 300; Inventory.Icon "graphics/HUD/Icons/A_SMW05Ammo.png"; Inventory.Amount 1; Inventory.MaxAmount 60; - Ammo.BackpackAmount 3; - Ammo.BackpackMaxAmount 150; + Ammo.BackpackAmount 6; + Ammo.BackpackMaxAmount 90; Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; @@ -33,21 +28,28 @@ Class SMW05Ammo : Ammo Stop; } } - -Class SMW05BundleSpawn : SWWMAmmoSpawner +Class SMW05Ammo2 : SMW05Ammo { - override void SpawnAmmo() + Default { - int bnd = Random[Bundle](2,3); - for ( int i=0; i 1 ) - { - tagstr = tagstr.."S"; - return String.Format("%d %s",Amount,StringTable.Localize(tagstr)); - } - return StringTable.Localize(tagstr); - } - Default { //$Title 1x Sheen Bullets //$Group Ammo //$Sprite graphics/HUD/Icons/A_SheenAmmo.png //$Icon ammo - Tag "$T_SHEENBULLETS"; + Tag "$T_SHEENBULLET"; + SWWMAmmo.PickupTag "SHEENBULLET"; Stamina 400; Inventory.Icon "graphics/HUD/Icons/A_SheenAmmo.png"; Inventory.Amount 1; - Inventory.MaxAmount 600; - Ammo.BackpackAmount 50; + Inventory.MaxAmount 300; + Ammo.BackpackAmount 60; Ammo.BackpackMaxAmount 1200; - Ammo.DropAmount 10; + Ammo.DropAmount 3; +FLOATBOB; FloatBobStrength 0.25; Accuracy 35; @@ -116,7 +101,28 @@ Class SheenAmmo : Ammo Stop; } } - +Class SheenAmmo2 : SheenAmmo +{ + Default + { + //$Title 2x Sheen Bullets + //$Group Ammo + //$Sprite graphics/HUD/Icons/A_SheenAmmo.png + //$Icon ammo + Inventory.Amount 2; + } +} +Class SheenAmmo3 : SheenAmmo +{ + Default + { + //$Title 3x Sheen Bullets + //$Group Ammo + //$Sprite graphics/HUD/Icons/A_SheenAmmo.png + //$Icon ammo + Inventory.Amount 3; + } +} Class SheenTinyAmmo : SheenAmmo { Default @@ -128,7 +134,6 @@ Class SheenTinyAmmo : SheenAmmo Inventory.Amount 10; } } - Class SheenSmallAmmo : SheenAmmo { Default @@ -140,7 +145,6 @@ Class SheenSmallAmmo : SheenAmmo Inventory.Amount 50; } } - Class SheenBigAmmo : SheenAmmo { Default @@ -153,13 +157,8 @@ Class SheenBigAmmo : SheenAmmo } } -Class QuadravolAmmo : Ammo +Class QuadravolAmmo : SWWMAmmo { - Mixin SWWMAmmo; - Mixin SWWMOverlapPickupSound; - Mixin SWWMUseToPickup; - Mixin SWWMRespawn; - Default { //$Title Quadravol Ammo @@ -167,23 +166,18 @@ Class QuadravolAmmo : Ammo //$Sprite graphics/HUD/Icons/A_QuadAmmo.png //$Icon ammo Tag "$T_QUADAMMO"; - Inventory.PickupMessage "$T_QUADAMMO"; + SWWMAmmo.PickupTag "QUADAMMO"; Stamina 10000; Inventory.Icon "graphics/HUD/Icons/A_QuadAmmo.png"; Inventory.Amount 1; - Inventory.MaxAmount 4; - Ammo.BackpackAmount 1; - Ammo.BackpackMaxAmount 12; + Inventory.MaxAmount 5; + Ammo.BackpackAmount 2; + Ammo.BackpackMaxAmount 15; Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; Accuracy 45; } - override void ModifyDropAmount( int dropamount ) - { - Super.ModifyDropAmount(dropamount); - Amount = min(Amount,1); - } States { Spawn: @@ -191,28 +185,31 @@ Class QuadravolAmmo : Ammo Stop; } } - -Class QuadravolAmmoBundleSpawn : SWWMAmmoSpawner +Class QuadravolAmmo2 : QuadravolAmmo { - override void SpawnAmmo() + Default { - int bnd = Random[Bundle](2,3); - for ( int i=0; i= ow.MaxAmount) ) continue; if ( ow ) ow.Amount = ow.MaxAmount; @@ -148,7 +149,7 @@ extend Class SWWMHandler S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); S_StartSound("misc/ammo_pkup",CHAN_VOICE,CHANF_UI); } - players[e.Args[0]].mo.GiveInventory("HammerspaceEmbiggener",8,true); + players[e.Args[0]].mo.GiveInventory("TradedHammerspaceEmbiggener",8,true); for ( Inventory i=players[e.Args[0]].mo.inv; i; i=i.inv ) { if ( !(i is 'Ammo') ) continue; @@ -179,8 +180,27 @@ extend Class SWWMHandler S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); S_StartSound("fabricator/use",CHAN_VOICE,CHANF_UI); } - players[e.Args[0]].mo.CheatGive("all",0); players[e.Args[0]].health = players[e.Args[0]].mo.health = 1000; + players[e.Args[0]].mo.GiveInventory("TradedHammerspaceEmbiggener",8,true); + for ( Inventory i=players[e.Args[0]].mo.inv; i; i=i.inv ) + { + if ( !(i is 'Ammo') ) continue; + i.Amount = i.MaxAmount; + } + for ( int i=0; i)(AllActorClasses[i]); + if ( !w || (w == 'SWWMWeapon') ) continue; + let def = GetDefaultByType(w); + if ( def.bCHEATNOTWEAPON ) continue; + if ( w is 'Ynykron' ) continue; // traditionally not given, it's a separate cheat + let ow = players[e.Args[0]].mo.FindInventory(w); + if ( ow && (ow.Amount >= ow.MaxAmount) ) continue; + if ( ow ) ow.Amount = ow.MaxAmount; + else players[e.Args[0]].mo.GiveInventory(w,def.MaxAmount); + } + players[e.Args[0]].mo.CheatGive("armor",0); + players[e.Args[0]].mo.CheatGive("artifacts",0); } else if ( e.Name ~== "swwmflagcheat" ) { @@ -417,12 +437,19 @@ extend Class SWWMHandler if ( kstr != cht[i].Left(kstr.length()) ) continue; matchany = true; if ( kstr != cht[i] ) continue; - if ( (i > 5) && !swwm_oldcheat ) + if ( (i > 5) && !swwm_nomapmsg && !swwm_oldcheat ) { - let m = new("SWWMSecretZanavethMessage").Init(); + let m = new("SWWMDirectMessage").Init("\chZanaveth\c-","\chZanaveth Nekuraku III\c-","Znv"); + m.seqname = "ZNVTXT"; + m.seqcnt = 5; + m.znvspecial = true; + m.delay = 80; + m.enddelay = 90; + m.pausedelay = 40; StatusBar.AttachMessage(m,-1232); CVar.FindCVar('swwm_oldcheat').SetBool(true); } + SWWMUtility.MarkAchievement('swwm_achievement_cheat',players[consoleplayer]); if ( SWWMUtility.CheatsDisabled(consoleplayer) ) { kfail = true; @@ -457,7 +484,7 @@ extend Class SWWMHandler else { kcode++; - if ( kcode > 4 ) return true; // eat keypresses from this point + if ( kcode >= 4 ) return true; // eat keypresses from this point } } return false; diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index 139684ed6..062476f41 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -8,6 +8,9 @@ extend Class SWWMHandler int spreecount[MAXPLAYERS]; int lastkill[MAXPLAYERS]; int multilevel[MAXPLAYERS]; + bool dealtdamage[MAXPLAYERS]; + bool reallytookdamage[MAXPLAYERS]; + int onehpspree[MAXPLAYERS]; // gibbing private void DoGibThing( WorldEvent e ) @@ -91,6 +94,7 @@ extend Class SWWMHandler if ( e.Thing.player ) { tookdamage[e.Thing.PlayerNumber()] = true; + reallytookdamage[e.Thing.PlayerNumber()] = true; // does not reset on revive let s = SWWMStats.Find(e.Thing.player); if ( s ) // deathmatch telefrag-on-spawn may cause this to be null { @@ -100,6 +104,7 @@ extend Class SWWMHandler } if ( e.DamageSource && e.DamageSource.player ) { + dealtdamage[e.DamageSource.PlayerNumber()] = true; let s = SWWMStats.Find(e.DamageSource.player); if ( s ) // deathmatch telefrag-on-spawn may cause this to be null { @@ -121,6 +126,9 @@ extend Class SWWMHandler tk.special1 = 1; else tk.special1 = -1; } + // barrel destruction + if ( (e.Thing is 'ExplosiveBarrel') && (e.Thing.Health <= 0) ) + SWWMUtility.AchievementProgressInc('swwm_progress_barrel',1,e.DamageSource.player); } } @@ -176,6 +184,7 @@ extend Class SWWMHandler lastcombat = AddOneliner("scorekill",1,15); } } + int pnum = src.PlayerNumber(); // achievement stuff if ( e.Thing.IsHostile(src) ) { @@ -191,17 +200,28 @@ extend Class SWWMHandler SWWMUtility.AchievementProgressInc('swwm_progress_thicc',1,src.player); else if ( (e.DamageType == 'Love') && !(e.Thing is 'WolfensteinSS') && (e.Thing.Species != 'WolfensteinSS') ) SWWMUtility.AchievementProgressInc('swwm_progress_love',1,src.player); - if ( e.Inflictor && e.Inflictor.FindInventory('ParriedBuff') ) + Inventory buff = e.Inflictor?e.Inflictor.FindInventory('ParriedBuff'):null; + if ( buff ) + { SWWMUtility.AchievementProgressInc('swwm_progress_reflect',1,src.player); + if ( (e.Thing is 'Cyberdemon') && (e.Inflictor is 'Rocket') && (buff.tracer == e.Thing) ) + SWWMUtility.MarkAchievement('swwm_achievement_cybully',src.player); + } + if ( (e.Inflictor is 'PusherWeapon') || (e.Inflictor is 'PusherProjectile') ) + SWWMUtility.AchievementProgressInc('swwm_progress_tender',1,src.player); Inventory tk; if ( (tk = e.Thing.FindInventory("DeepImpactOnlyToken")) && (tk.special1 == 1) ) SWWMUtility.MarkAchievement('swwm_achievement_shame',src.player); SWWMUtility.AchievementProgressInc('swwm_progress_mega',1,src.player); + if ( src.player.Health == 1 ) + { + onehpspree[pnum]++; + SWWMUtility.AchievementProgress('swwm_progress_onehp',onehpspree[pnum],src.player); + } } // no credits unless it's a counted kill or marine (that isn't friendly) or another player in DM if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine') && !(deathmatch && e.Thing.player)) ) return; - int pnum = src.PlayerNumber(); if ( level.maptime < (lastkill[pnum]+5*GameTicRate) ) multilevel[pnum]++; else multilevel[pnum] = 0; diff --git a/zscript/handler/swwm_handler_oneliners.zsc b/zscript/handler/swwm_handler_oneliners.zsc index d613702cd..c68d0d980 100644 --- a/zscript/handler/swwm_handler_oneliners.zsc +++ b/zscript/handler/swwm_handler_oneliners.zsc @@ -1,5 +1,11 @@ // oneliner handling +Class LastLine +{ + String type; + int lineno; +} + extend Class SWWMHandler { transient String oneliner, onelinersnd; diff --git a/zscript/handler/swwm_handler_process.zsc b/zscript/handler/swwm_handler_process.zsc index a01ba2f75..e081686c6 100644 --- a/zscript/handler/swwm_handler_process.zsc +++ b/zscript/handler/swwm_handler_process.zsc @@ -392,6 +392,15 @@ extend Class SWWMHandler amt = GetDefaultByType(a).Amount; } } + if ( item is 'MagAmmo' ) + { + for ( int i=0; i)(AllActorClasses[i]); + if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue; + amt = GetDefaultByType(a).Amount; + } + } Inventory ritm = players[e.Args[1]].mo.FindInventory(item); if ( ritm ) { @@ -513,6 +522,15 @@ extend Class SWWMHandler amt = GetDefaultByType(a).Amount; } } + if ( i is 'MagAmmo' ) + { + for ( int i=0; i)(AllActorClasses[i]); + if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue; + amt = GetDefaultByType(a).Amount; + } + } if ( amt > i.Amount ) amt = i.Amount; let drop = players[e.Args[0]].mo.DropInventory(i,amt); // add some random velocity so multiple drops don't get bunched together @@ -605,6 +623,15 @@ extend Class SWWMHandler if ( e.Args[0] != consoleplayer ) return; checklist.Clear(); } + else if ( e.Name ~== "swwmstorepuzzlecnt" ) + { + let s = SWWMStats.Find(players[e.Args[0]]); + if ( s ) + { + s.puzzlecnt = e.Args[1]; + s.realpuzzlecnt = e.Args[2]; + } + } // cheats go here else CheatEvent(e); } diff --git a/zscript/handler/swwm_handler_replacements.zsc b/zscript/handler/swwm_handler_replacements.zsc index 42d7e96be..91f5f9c10 100644 --- a/zscript/handler/swwm_handler_replacements.zsc +++ b/zscript/handler/swwm_handler_replacements.zsc @@ -658,7 +658,11 @@ extend Class SWWMHandler if ( swwm_ondemandammo ) e.Replacement = 'SWWMClipAmmoBig'; else e.Replacement = SWWMClipAmmoBig.PickAmmo(true); } - else if ( (e.Replacee is 'Clip') || (e.Replacee is 'GoldWandAmmo') ) e.Replacement = 'SWWMNothing'; + else if ( (e.Replacee is 'Clip') || (e.Replacee is 'GoldWandAmmo') ) + { + if ( swwm_ondemandammo ) e.Replacement = 'SWWMClipAmmoSmall'; + else e.Replacement = SWWMClipAmmoSmall.PickAmmo(true); + } else if ( e.Replacee is 'BlasterHefty' ) { if ( swwm_ondemandammo ) e.Replacement = 'SWWMBlastAmmoBig'; @@ -699,22 +703,22 @@ extend Class SWWMHandler || (e.Replacee is 'MWeaponPiece2') || (e.Replacee is 'MWeaponPiece3') ) e.Replacement = 'HammerspaceEmbiggener'; else if ( e.Replacee is 'ArmorBonus' ) e.Replacement = 'ArmorNuggetItem'; else if ( e.Replacee is 'HealthBonus' ) e.Replacement = 'HealthNuggetItem'; - else if ( (e.Replacee is 'ArtiTimeBomb') || (e.Replacee is 'ArtiBlastRadius') || (e.Replacee is 'ArtiPoisonBag') || (e.Replacee is 'ArtiHealingRadius') ) e.Replacement = (nugflip=!nugflip)?'HealthNuggetBundleSpawn':'ArmorNuggetBundleSpawn'; + else if ( (e.Replacee is 'ArtiTimeBomb') || (e.Replacee is 'ArtiBlastRadius') || (e.Replacee is 'ArtiPoisonBag') || (e.Replacee is 'ArtiHealingRadius') ) e.Replacement = (nugflip=!nugflip)?'HealthNugget':'ArmorNugget'; else if ( (e.Replacee is 'Stimpack') || (e.Replacee is 'CrystalVial') ) e.Replacement = 'TetraHealthItem'; else if ( (e.Replacee is 'Medikit') || (e.Replacee is 'ArtiHealth') ) e.Replacement = 'CubeHealthItem'; else if ( (e.Replacee is 'Soulsphere') || (e.Replacee is 'ArtiSuperHealth') ) e.Replacement = 'RefresherItem'; - else if ( (e.Replacee is 'Megasphere') || (e.Replacee is 'ArtiEgg') || (e.Replacee is 'ArtiBoostArmor') ) e.Replacement = 'GrilledCheeseSandwich'; + else if ( (e.Replacee is 'Megasphere') || (e.Replacee is 'ArtiEgg') || (e.Replacee is 'ArtiBoostArmor') ) e.Replacement = (deathmatch||Random[Replacements](0,3)||SWWMUtility.ItemExists('DivineSprite',worldonly:true)||!SWWMUtility.CheckNeedsItem('DivineSprite',true))?'GrilledCheeseSandwich':'DivineSprite'; else if ( (e.Replacee is 'Blursphere') || (e.Replacee is 'ArtiInvisibility') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'GhostArtifact':'Mykradvo'; else if ( e.Replacee is 'Radsuit' ) e.Replacement = 'EBarrier'; else if ( (e.Replacee is 'ArtiFly') ) e.Replacement = 'GravitySuppressor'; else if ( (e.Replacee is 'InvulnerabilitySphere') || (e.Replacee is 'ArtiInvulnerability') || (e.Replacee is 'ArtiInvulnerability2') ) e.Replacement = (deathmatch||Random[Replacements](0,3)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'FuckingInvinciball':'Mykradvo'; - else if ( (e.Replacee is 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('Mykradvo',worldonly:true)||!SWWMUtility.CheckNeedsItem('Mykradvo',true))?'Ragekit':'Mykradvo'; + else if ( (e.Replacee is 'Berserk') || (e.Replacee == 'ArtiTomeOfPower') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = (deathmatch||Random[Replacements](0,2)||SWWMUtility.ItemExists('AngerySigil',worldonly:true)||!SWWMUtility.CheckNeedsItem('AngerySigil',true))?'Ragekit':'AngerySigil'; else if ( (e.Replacee is 'AllMap') || (e.Replacee is 'SuperMap') ) e.Replacement = 'Omnisight'; else if ( (e.Replacee is 'Infrared') || (e.Replacee is 'ArtiTorch') ) e.Replacement = 'SWWMLamp'; else if ( (e.Replacee is 'GreenArmor') || (e.Replacee is 'SilverShield') || (e.Replacee is 'PlatinumHelm') || (e.Replacee is 'AmuletOfWarding') ) e.Replacement = 'BlastSuitItem'; else if ( (e.Replacee is 'BlueArmor') || (e.Replacee is 'EnchantedShield') || (e.Replacee is 'MeshArmor') || (e.Replacee is 'FalconShield') ) e.Replacement = 'WarArmorItem'; else if ( (e.Replacee is 'ArtiDarkServant') || (e.Replacee == 'ArtiTeleportOther') || (e.Replacee == 'ArtiPork') ) e.Replacement = 'ChanceboxSpawner'; - else if ( e.Replacee is 'ArtiTeleport' ) e.Replacement = 'SWWMNothing'; + else if ( e.Replacee is 'ArtiTeleport' ) e.Replacement = 'SafetyTether'; else { if ( profiling ) checkreplacement_ms += MSTime()-curms; diff --git a/zscript/handler/swwm_handler_shaders.zsc b/zscript/handler/swwm_handler_shaders.zsc index 131b7e3d5..e39482734 100644 --- a/zscript/handler/swwm_handler_shaders.zsc +++ b/zscript/handler/swwm_handler_shaders.zsc @@ -13,6 +13,8 @@ extend Class SWWMHandler Shader.SetEnabled(p,"GhostShader",false); Shader.SetEnabled(p,"InvinciShader",false); Shader.SetEnabled(p,"RagekitShader",false); + Shader.SetEnabled(p,"DevastationShader",false); + Shader.SetEnabled(p,"DivineShader",false); Shader.SetEnabled(p,"Glitch",false); Shader.SetEnabled(p,"Grain",false); } @@ -27,6 +29,24 @@ extend Class SWWMHandler if ( !swwm_shaders ) ClearAllShaders(p,true); return; } + let divi = DivineSpriteEffect(mo.FindInventory("DivineSpriteEffect")); + if ( divi ) + { + Shader.SetEnabled(p,"DivineShader",true); + Shader.SetUniform1f(p,"DivineShader","timer",(gametic+e.FracTic)/GameTicRate); + double str = clamp((divi.AlphInter.GetValue()-1000.)/6000.,0.,1.)**2.; + Shader.SetUniform1f(p,"DivineShader","str",str); + } + else Shader.SetEnabled(p,"DevastationShader",false); + let deva = AngeryPower(mo.FindInventory("AngeryPower")); + if ( deva ) + { + Shader.SetEnabled(p,"DevastationShader",true); + Shader.SetUniform1f(p,"DevastationShader","timer",(gametic+e.FracTic)/GameTicRate); + double xstrastr = 1.+max(0,deva.lastpulse-(gametic+e.Fractic))/35.; + Shader.SetUniform1f(p,"DevastationShader","xtrastr",xstrastr**2.); + } + else Shader.SetEnabled(p,"DevastationShader",false); let rage = RagekitPower(mo.FindInventory("RagekitPower")); if ( rage ) { diff --git a/zscript/handler/swwm_handler_uitick.zsc b/zscript/handler/swwm_handler_uitick.zsc new file mode 100644 index 000000000..c6626af5b --- /dev/null +++ b/zscript/handler/swwm_handler_uitick.zsc @@ -0,0 +1,361 @@ +// misc. UI Tick stuff + +extend Class SWWMHandler +{ + ui bool didstartmsg; + bool doextramsg; + ui bool didextramsg; + + private ui void MapstartUITick() + { + if ( !didextramsg && doextramsg ) + { + if ( !swwm_nomapmsg ) + { + // angry about phase two + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYAEVIB"; + msg.seqcnt = 2; + msg.delay = 20; + StatusBar.AttachMessage(msg,-1232); + } + didextramsg = true; + } + if ( didstartmsg ) return; + if ( swwm_nomapmsg ) + { + didstartmsg = true; + return; + } + int whichboss = WhichVanillaBossMap(); + if ( bossmap == MAP_DE1M8 ) + { + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYAPHOBOS"; + msg.seqcnt = 4; + msg.delay = 40; + StatusBar.AttachMessage(msg,-1232); + } + else if ( bossmap == MAP_DE2M8 ) + { + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYADEIMOS"; + msg.seqcnt = 4; + msg.delay = 40; + StatusBar.AttachMessage(msg,-1232); + } + else if ( bossmap == MAP_DE3M8 ) + { + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYADIS"; + msg.seqcnt = 4; + msg.delay = 40; + StatusBar.AttachMessage(msg,-1232); + } + else if ( bossmap == MAP_DE4M8 ) + { + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYATHY"; + msg.seqcnt = 4; + msg.delay = 40; + StatusBar.AttachMessage(msg,-1232); + } + else if ( bossmap == MAP_DMAP07 ) + { + let msg = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + msg.seqname = "SAYADIMPLE"; + msg.seqcnt = 5; + msg.delay = 40; + StatusBar.AttachMessage(msg,-1232); + } + else if ( bossmap == MAP_DMAP30 ) + { + // rampancy check + bool rampancy = false; + for ( int i=0; i 0 ) livenazis = true; + } + if ( hasnazis && !livenazis ) + { + if ( level.levelnum == 31 ) s.nazicleanup |= 1; + else if ( level.levelnum == 32 ) s.nazicleanup |= 2; + } + if ( s.nazicleanup == 3 ) + SWWMUtility.MarkAchievement('swwm_achievement_trash',s.myplayer); } // reset score on dead players (death exit™) for ( int i=0; i 0) || (level.total_items > 0) || (level.total_secrets > 0)) + && (level.killed_monsters == 0) && (level.found_items == 0) && (level.found_secrets == 0) ) + SWWMUtility.MarkAchievement('swwm_achievement_hurry',players[consoleplayer]); } private void SetupLockdefsCache( SWWMCachedLockInfo cli ) @@ -181,6 +232,24 @@ extend Class SWWMHandler if ( (level.GetChecksum() ~== "F286BABF0D152259CD6B996E8920CA70") || (level.GetChecksum() ~== "A52BD2038CF814101AAB7D9C78F9ACE2") ) level.ExecuteSpecial(ACS_Execute,null,null,false,-Int('DVACATION_UNFUCK')); + // rampancy boss brain fix (repeatedly triggering "map clear") + let ti = ThinkerIterator.Create("Actor"); + Actor a, brain; + bool haseye = false; + while ( a = Actor(ti.Next()) ) + { + if ( a.GetClassName() == "Robot_BossEye" ) + haseye = true; + if ( a.GetClassName() == "Robot_BossBrain" ) + brain = a; + } + if ( haseye && brain ) + { + brain.bCOUNTKILL = true; + level.total_monsters++; + // while we're at it + Actor.Spawn("RampancyLogonDummy"); + } // setup cached lockdefs data let cli = SWWMCachedLockInfo.GetInstance(); if ( cli.ent.Size() == 0 ) SetupLockdefsCache(cli); @@ -226,42 +295,48 @@ extend Class SWWMHandler if ( !SWWMUtility.IsExitLine(l) ) continue; if ( skipme.Find(l) < skipme.Size() ) continue; - Vector3 lpos = SWWMUtility.UseLinePos(l); + skipme.Push(l); // look for connected lines - int xcnt = 1; + Array con; + con.Clear(); + con.Push(l); + int found; if ( l.frontsector ) { - for ( int j=0; j 0 ); } if ( l.backsector ) { - for ( int j=0; j 0 ); } - lpos /= xcnt; + Vector3 lpos = (0,0,0); + for ( int i=0; i w = wname; + if ( w ) + { + let tt = new("SWWMWeaponTooltip").Init(w); + bool appended = false; + for ( SWWMWeaponTooltip t=ctip; t; t=t.next ) + { + if ( t.next ) continue; + appended = true; + t.next = tt; + break; + } + if ( !appended ) + { + ctip = tt; + AttachMessage(tt,-2910); + } + } + return true; + } + SWWMDirectMessage m, m2; // check for Korax lines, add them to chat (and reply to some of them) bool koraxline = false; if ( msg == StringTable.Localize("$TXT_ACS_MAP02_9_GREET") ) @@ -126,11 +154,75 @@ Class SWWMStatusBar : BaseStatusBar { EventHandler.SendNetworkEvent("swwmkoraxline",0,consoleplayer); koraxline = true; + m = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m.seqname = "SAYAGREETA"; + m.seqcnt = 3; + m.delay = 120; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "SAYAGREETB"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYAGREETC"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "SAYAGREETD"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYAGREETE"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "SAYAGREETF"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; } else if ( msg == StringTable.Localize("$TXT_ACS_MAP13_11_MYSER") ) { EventHandler.SendNetworkEvent("swwmkoraxline",1,consoleplayer); koraxline = true; + m = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m.seqname = "SAYABLOODA"; + m.seqcnt = 2; + m.delay = 120; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "SAYABLOODB"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYABLOODC"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "SAYABLOODD"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; } else if ( msg == StringTable.Localize("$TXT_ACS_MAP22_27_YOUHA") ) koraxline = true; @@ -138,6 +230,24 @@ Class SWWMStatusBar : BaseStatusBar { EventHandler.SendNetworkEvent("swwmkoraxline",2,consoleplayer); koraxline = true; + m = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m.seqname = "SAYAGAMEA"; + m.seqcnt = 2; + m.delay = 120; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "SAYAGAMEB"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYAGAMEC"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; } else if ( msg == StringTable.Localize("$TXT_ACS_MAP27_8_WORSH") ) koraxline = true; @@ -145,6 +255,33 @@ Class SWWMStatusBar : BaseStatusBar { EventHandler.SendNetworkEvent("swwmkoraxline",3,consoleplayer); koraxline = true; + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINWORSHIPA"; + m.seqcnt = 1; + m.delay = 120; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINWORSHIPB"; + m2.seqcnt = 1; + m2.delay = 40; + m2.enddelay = 10; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "KIRINWORSHIPC"; + m2.seqcnt = 1; + m2.delay = 10; + m2.enddelay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINWORSHIPD"; + m2.seqcnt = 2; + m2.delay = 10; + m.nextmsg = m2; + m.nextdirect = true; } else if ( msg == StringTable.Localize("$TXT_ACS_MAP35_12_AREYO") ) koraxline = true; @@ -152,6 +289,46 @@ Class SWWMStatusBar : BaseStatusBar { EventHandler.SendNetworkEvent("swwmkoraxline",4,consoleplayer); koraxline = true; + m = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m.seqname = "SAYAMASTERSA"; + m.seqcnt = 2; + m.delay = 120; + m.enddelay = 60; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "SAYAMASTERSB"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYAMASTERSC"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "SAYAMASTERSD"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "SAYAMASTERSE"; + m2.seqcnt = 1; + m2.delay = 40; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "SAYAMASTERSF"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; } if ( koraxline ) { @@ -160,6 +337,247 @@ Class SWWMStatusBar : BaseStatusBar koraxhack = false; return true; } + bool ispuzzle = false; + let s = SWWMStats.Find(players[consoleplayer]); + if ( s ) + { + puzzlecnt = s.puzzlecnt; + realpuzzlecnt = s.realpuzzlecnt; + } + // check for puzzle solving lines (oh god why), and increment the achievement + if ( ((level.mapname ~== "MAP04") || (level.mapname ~== "MAP05")) + && ((msg == StringTable.Localize("$TXT_ACS_MAP04_9_ONEHA")) + || (msg == StringTable.Localize("$TXT_ACS_MAP04_11_ONETH")) + || (msg == StringTable.Localize("$TXT_ACS_MAP05_6_ONETH"))) ) + { + if ( puzzlecnt >= 4 ) puzzlecnt = 0; + puzzlecnt++; + realpuzzlecnt++; + ispuzzle = true; + } + else if ( ((level.mapname ~== "MAP08") || (level.mapname ~== "MAP09") || (level.mapname ~== "MAP10")) + && ((msg == StringTable.Localize("$TXT_ACS_MAP08_6_ONESI")) + || (msg == StringTable.Localize("$TXT_ACS_MAP09_6_ONESI")) + || (msg == StringTable.Localize("$TXT_ACS_MAP10_6_ONESI"))) ) + { + if ( (puzzlecnt < 4) || (puzzlecnt >= 10) ) puzzlecnt = 4; + puzzlecnt++; + realpuzzlecnt++; + ispuzzle = true; + } + else if ( ((level.mapname ~== "MAP28") || (level.mapname ~== "MAP30") || (level.mapname ~== "MAP34")) + && ((msg == StringTable.Localize("$TXT_ACS_MAP28_6_ONENI")) + || (msg == StringTable.Localize("$TXT_ACS_MAP30_6_ONENI")) + || (msg == StringTable.Localize("$TXT_ACS_MAP34_1_ONENI"))) ) + { + if ( (puzzlecnt < 10) || (puzzlecnt >= 19) ) puzzlecnt = 10; + puzzlecnt++; + realpuzzlecnt++; + ispuzzle = true; + } + // deathkings + else if ( ((level.mapname ~== "MAP44") || (level.mapname ~== "MAP46")) + && ((msg == StringTable.Localize("$TXT_ACS_MAP44_1_THREE")) + || (msg == StringTable.Localize("$TXT_ACS_MAP44_2_TWOMO")) + || (msg == StringTable.Localize("$TXT_ACS_MAP44_3_ONEMO")) + || (msg == StringTable.Localize("$TXT_ACS_MAP44_4_THEPU")) + || (msg == StringTable.Localize("$TXT_ACS_MAP44_10_ONETH")) + || (msg == StringTable.Localize("$TXT_ACS_MAP44_11_TWOTH")) + || (msg == StringTable.Localize("$TXT_ACS_MAP46_8_ONEFO"))) ) + { + if ( (puzzlecnt < 19) || (puzzlecnt >= 30) ) puzzlecnt = 19; + puzzlecnt++; + realpuzzlecnt++; + ispuzzle = true; + } + else if ( (level.mapname ~== "MAP51") + && ((msg == StringTable.Localize("$TXT_ACS_MAP51_8_ONETH")) + || (msg == StringTable.Localize("$TXT_ACS_MAP51_9_TWOTH")) + || (msg == StringTable.Localize("$TXT_ACS_MAP51_10_THECR"))) ) + { + if ( (puzzlecnt < 30) || (puzzlecnt >= 34) ) puzzlecnt = 30; + puzzlecnt++; + realpuzzlecnt++; + ispuzzle = true; + } + if ( ispuzzle ) + { + EventHandler.SendNetworkEvent("swwmstorepuzzlecnt",consoleplayer,puzzlecnt,realpuzzlecnt); + int tpuz = SWWMUtility.IsDeathkings()?15:19; + if ( realpuzzlecnt >= tpuz ) SWWMUtility.MarkAchievement('swwm_achievement_puzzle',players[consoleplayer]); + if ( !swwm_nomapmsg ) + { + switch ( puzzlecnt ) + { + case 1: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEA"; + m.seqcnt = 2; + m.delay = 90; + AttachMessage(m,-1232); + break; + case 2: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEB"; + m.seqcnt = 1; + m.delay = 80; + AttachMessage(m,-1232); + break; + case 3: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEC"; + m.seqcnt = 2; + m.delay = 70; + AttachMessage(m,-1232); + break; + case 5: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLED"; + m.seqcnt = 2; + m.delay = 70; + AttachMessage(m,-1232); + break; + case 8: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEE"; + m.seqcnt = 2; + m.delay = 60; + AttachMessage(m,-1232); + break; + case 11: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEF"; + m.seqcnt = 3; + m.delay = 60; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLEG"; + m2.seqcnt = 1; + m.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "KIRINPUZZLEH"; + m2.seqcnt = 1; + m.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLEI"; + m2.seqcnt = 2; + m.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + break; + case 20: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEJ"; + m.seqcnt = 2; + m.delay = 80; + AttachMessage(m,-1232); + break; + case 30: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLEK"; + m.seqcnt = 1; + m.delay = 60; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "KIRINPUZZLEL"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "KIRINPUZZLEM"; + m2.seqcnt = 1; + m2.delay = 10; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLEN"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "KIRINPUZZLEO"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLEP"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\crIbuki\c-","\crIbuki Miyamoto\c-","Ibuki"); + m2.seqname = "KIRINPUZZLEQ"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + break; + case 31: + m = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m.seqname = "KIRINPUZZLER"; + m.seqcnt = 3; + m.delay = 60; + AttachMessage(m,-1232); + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLES"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cxKirin\c-","\cxKirin Xanai\c-","Kirin"); + m2.seqname = "KIRINPUZZLET"; + m2.seqcnt = 1; + m2.delay = 30; + m.nextmsg = m2; + m.nextdirect = true; + m = m2; + m2 = new("SWWMDirectMessage").Init("\cgSaya\c-","\cgSaya Miyamoto\c-","Saya"); + m2.seqname = "KIRINPUZZLEU"; + m2.seqcnt = 1; + m2.delay = 20; + m.nextmsg = m2; + m.nextdirect = true; + break; + } + } + } + // rampancy fun stuff + bool mainframeline = false; + if ( (msg == StringTable.Localize("$AISPAWN_TEXT1")) + || (msg == StringTable.Localize("$AISPAWN_TEXT2")) + || (msg == StringTable.Localize("$AISEE_TEXT")) + || (msg == StringTable.Localize("$AIACTIVE_TEXT1")) + || (msg == StringTable.Localize("$AIACTIVE_TEXT2")) + || (msg == StringTable.Localize("$AIPAIN_TEXT1")) + || (msg == StringTable.Localize("$AIPAIN_TEXT2")) + || (msg == StringTable.Localize("$AIPAIN_TEXT3")) + || (msg == StringTable.Localize("$AIPAIN_TEXT4")) + || (msg == StringTable.Localize("$AIPAIN_TEXT5")) + || (msg == StringTable.Localize("$AIPAIN_TEXT6")) + || (msg == StringTable.Localize("$AIPAIN_TEXT7")) ) + mainframeline = true; + if ( mainframeline ) + { + mainframehack = true; + Console.Printf(msg); + mainframehack = false; + return true; + } if ( !fnt || (fnt == smallfont) ) { midstr = msg; @@ -190,6 +608,12 @@ Class SWWMStatusBar : BaseStatusBar printlevel = PRINT_CHAT; outline = "\cmKorax\c-: "..outline; } + if ( mainframehack ) + { + // same here, hi yholl + printlevel = PRINT_CHAT; + outline = "\cmAI Mainframe\c-: "..outline; + } let m = new("MsgLine"); m.str = outline.Left(outline.Length()-1); // strip newline m.type = printlevel; @@ -686,6 +1110,7 @@ Class SWWMStatusBar : BaseStatusBar HealthTex[2] = TexMan.CheckForTexture("graphics/HUD/HealthBar2.png",TexMan.Type_Any); HealthTex[3] = TexMan.CheckForTexture("graphics/HUD/HealthBar3.png",TexMan.Type_Any); HealthTex[4] = TexMan.CheckForTexture("graphics/HUD/HealthBarS.png",TexMan.Type_Any); + HealthTex[5] = TexMan.CheckForTexture("graphics/HUD/HealthBarD.png",TexMan.Type_Any); ScoreTex[0] = TexMan.CheckForTexture("graphics/HUD/ScoreBoxL.png",TexMan.Type_Any); ScoreTex[1] = TexMan.CheckForTexture("graphics/HUD/ScoreBoxM.png",TexMan.Type_Any); ScoreTex[2] = TexMan.CheckForTexture("graphics/HUD/ScoreBoxR.png",TexMan.Type_Any); @@ -703,6 +1128,7 @@ Class SWWMStatusBar : BaseStatusBar EnemyHTex[2] = TexMan.CheckForTexture("graphics/HUD/EnemyBar2.png",TexMan.Type_Any); EnemyHTex[3] = TexMan.CheckForTexture("graphics/HUD/EnemyBar3.png",TexMan.Type_Any); EnemyHTex[4] = TexMan.CheckForTexture("graphics/HUD/EnemyBarS.png",TexMan.Type_Any); + EnemyHTex[5] = TexMan.CheckForTexture("graphics/HUD/EnemyBarD.png",TexMan.Type_Any); GenericAmmoTex[0] = TexMan.CheckForTexture("graphics/HUD/GenericAmmoBoxL.png",TexMan.Type_Any); GenericAmmoTex[1] = TexMan.CheckForTexture("graphics/HUD/GenericAmmoBoxM.png",TexMan.Type_Any); GenericAmmoTex[2] = TexMan.CheckForTexture("graphics/HUD/GenericAmmoBoxR.png",TexMan.Type_Any); @@ -852,28 +1278,35 @@ Class SWWMStatusBar : BaseStatusBar if ( swwm_targettags || targ.myplayer && (tag != "") ) Screen.DrawText(fnt,col,(barpos.x+barsiz.x/2.-(fnt.StringWidth(tag)*hsb.x)/2.)/hsb.x,(barpos.y-fnt.GetHeight()*hsb.y)/hsb.y,tag,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); Screen.DrawTexture(EnemyBTex,false,barpos.x/hsb.x,barpos.y/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); - double ht = clamp(targ.intp.GetValue(),0,targ.maxhealth*10); + double ht = clamp(targ.intp.GetValue(),0,targ.maxhealth*100); double hw = (min(ht,targ.maxhealth)*50.)/targ.maxhealth; if ( targ.mytarget && (targ.mytarget.bInvulnerable || (targ.myplayer && (targ.myplayer.cheats&(CF_GODMODE|CF_GODMODE2))) || targ.mytarget.FindInventory("InvinciballPower")) ) { Screen.DrawTexture(EnemyHTex[4],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); - continue; } - Screen.DrawTexture(EnemyHTex[0],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); - if ( ht > targ.maxhealth ) + else { - hw = (min(ht-targ.maxhealth,targ.maxhealth)*50.)/targ.maxhealth; - Screen.DrawTexture(EnemyHTex[1],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + Screen.DrawTexture(EnemyHTex[0],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + if ( ht > targ.maxhealth ) + { + hw = (min(ht-targ.maxhealth,targ.maxhealth)*50.)/targ.maxhealth; + Screen.DrawTexture(EnemyHTex[1],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + } + if ( ht > targ.maxhealth*2 ) + { + hw = (min(ht-targ.maxhealth*2,targ.maxhealth*3)*50.)/(targ.maxhealth*3); + Screen.DrawTexture(EnemyHTex[2],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + } + if ( ht > targ.maxhealth*5 ) + { + hw = (min(ht-targ.maxhealth*5,targ.maxhealth*5)*50.)/(targ.maxhealth*5); + Screen.DrawTexture(EnemyHTex[3],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + } } - if ( ht > targ.maxhealth*2 ) + if ( targ.mytarget && targ.mytarget.FindInventory("DivineSpriteEffect") ) { - hw = (min(ht-targ.maxhealth*2,targ.maxhealth*3)*50.)/(targ.maxhealth*3); - Screen.DrawTexture(EnemyHTex[2],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); - } - if ( ht > targ.maxhealth*5 ) - { - hw = (min(ht-targ.maxhealth*5,targ.maxhealth*5)*50.)/(targ.maxhealth*5); - Screen.DrawTexture(EnemyHTex[3],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_WindowRightF,hw,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); + double falph = clamp((ht-targ.maxhealth*10)/(targ.maxhealth*60.),0.,1.); + Screen.DrawTexture(EnemyHTex[5],false,(barpos.x+2*hsb.x)/hsb.x,(barpos.y+2*hsb.y)/hsb.y,DTA_VirtualWidthF,ssb.x,DTA_VirtualHeightF,ssb.y,DTA_KeepRatio,true,DTA_Alpha,alph*falph,DTA_LegacyRenderStyle,STYLE_Add,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright); } } // floating kill scores and others @@ -1655,7 +2088,8 @@ Class SWWMStatusBar : BaseStatusBar Screen.DrawText(fnt,((level.sucktime>0)&&(sec>=(level.sucktime*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 ( am_showtotaltime ) + // don't show total time if it's equal to map time + if ( am_showtotaltime && (level.totaltime != level.maptime) ) { sec = Thinker.Tics2Seconds(level.totaltime); str = String.Format("\cxTT \c-%02d\cu:\c-%02d\cu:\c-%02d",sec/3600,(sec%3600)/60,sec%60); @@ -1773,6 +2207,14 @@ Class SWWMStatusBar : BaseStatusBar Screen.DrawText(mTewiFont.mFont,Font.CR_FIRE,(xx+30)-len,(yy+30)-11,nstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,SWWMLamp(i).isBlinking()?alpha*.5:alpha); return true; } + if ( (i is 'DivineSpriteEffect') && aspowerup ) + { + Screen.DrawTexture(i.Icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,DivineSpriteEffect(i).isBlinking()?alpha*.5:alpha,DTA_TopOffset,0,DTA_LeftOffset,0); + String nstr = String.Format("%ds",DivineSpriteEffect(i).healtim/GameTicRate); + int len = mTewiFont.mFont.StringWidth(nstr); + Screen.DrawText(mTewiFont.mFont,Font.CR_FIRE,(xx+30)-len,(yy+30)-11,nstr,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,DivineSpriteEffect(i).isBlinking()?alpha*.5:alpha); + return true; + } Screen.DrawTexture(i.Icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_TopOffset,0,DTA_LeftOffset,0); if ( (i.Amount > 1) || forceamt ) { @@ -1810,6 +2252,12 @@ Class SWWMStatusBar : BaseStatusBar yy -= 34; continue; } + if ( (i is 'DivineSpriteEffect') && !DivineSpriteEffect(i).bHealDone ) + { + DrawInvIcon(i,xx,yy,aspowerup:true); + yy -= 34; + continue; + } if ( !(i is 'Powerup') || (Powerup(i).EffectTics <= 0) || !(Powerup(i).Icon) ) continue; if ( DrawInvIcon(i,xx,yy) ) yy -= 34; @@ -1946,33 +2394,51 @@ Class SWWMStatusBar : BaseStatusBar 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") ) - { - Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); - Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,margin+108,ss.y-(margin+15),String.Format("%03d",Random[HudStuff](0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - return; - } - Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); - if ( ht > 100 ) - { - hw = min(ht-100,100); - Screen.DrawTexture(HealthTex[1],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); - } - if ( ht > 200 ) - { - hw = min(ht-200,300)/3.; - Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); - } - if ( ht > 500 ) - { - hw = min(ht-500,500)/5.; - Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); - } int hcolor = Font.CR_RED; if ( ht > 500 ) hcolor = Font.CR_GOLD; else if ( ht > 200 ) hcolor = Font.CR_PURPLE; else if ( ht > 100 ) hcolor = Font.CR_CYAN; - Screen.DrawText(mTewiFont.mFont,hcolor,margin+108,ss.y-(margin+15),String.Format("%3d",clamp(ht,0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); + if ( isInvulnerable() || CPlayer.mo.FindInventory("InvinciballPower") ) + { + Screen.DrawTexture(HealthTex[4],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); + hcolor = Font.CR_WHITE; + } + else + { + Screen.DrawTexture(HealthTex[0],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); + if ( ht > 100 ) + { + hw = min(ht-100,100); + Screen.DrawTexture(HealthTex[1],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); + } + if ( ht > 200 ) + { + hw = min(ht-200,300)/3.; + Screen.DrawTexture(HealthTex[2],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); + } + if ( ht > 500 ) + { + hw = min(ht-500,500)/5.; + Screen.DrawTexture(HealthTex[3],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,hw); + } + } + if ( CPlayer.mo.FindInventory("DivineSpriteEffect") ) + { + double falph = clamp((ht-1000)/6000.,0.,1.); + Screen.DrawTexture(HealthTex[5],false,margin+2,ss.y-(margin+14),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph,DTA_LegacyRenderStyle,STYLE_Add); + String tst; + double alph = .1; + int trl = 9; + for ( double alph = .1; alph <= 1.; alph += .1 ) + { + tst = "AAA"; + SWWMUtility.ObscureText(tst,(gametic-trl)/3); + trl--; + Screen.DrawText(mTewiFont.mFont,Font.CR_WHITE,margin+108,ss.y-(margin+15),tst,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,falph*alph,DTA_LegacyRenderStyle,STYLE_Add); + } + Screen.DrawText(mTewiFont.mFont,hcolor,margin+108,ss.y-(margin+15),String.Format("%3d",clamp(ht,0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,1.-falph); + } + else Screen.DrawText(mTewiFont.mFont,hcolor,margin+108,ss.y-(margin+15),String.Format("%3d",clamp(ht,0,999)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); } private void DrawPickups() diff --git a/zscript/hud/swwm_hudextra.zsc b/zscript/hud/swwm_hudextra.zsc index bce282449..8ad0f88cf 100644 --- a/zscript/hud/swwm_hudextra.zsc +++ b/zscript/hud/swwm_hudextra.zsc @@ -114,12 +114,6 @@ Class SWWMOneLiner : HUDMessageBase } } -Class LastLine -{ - String type; - int lineno; -} - // Screen flashes from DT Class GenericFlash : HUDMessageBase { @@ -251,39 +245,126 @@ Class SWWMSewerCount : HUDMessageBase } } -// Secret dialogue -Class SWWMSecretZanavethMessage : HUDMessageBase +// weapon tooltips +Class SWWMWeaponTooltip : HUDMessageBase +{ + TextureID icon; + String wpn, txt; + double tics, holdtics, fadeintics, fadeouttics; + transient Font tewifont, mplusfont, miniwifont, k6x8font; + transient BrokenLines l; + SWWMWeaponTooltip next; + + SWWMWeaponTooltip Init( Class weapon ) + { + let def = GetDefaultByType(weapon); + icon = def.Icon; + wpn = def.GetTag(); + txt = StringTable.Localize(def.tooltip); + holdtics = 120; + fadeintics = 5; + fadeouttics = 15; + tics = -10; + return self; + } + + override bool Tick() + { + bool clearme = (++tics > holdtics+fadeintics+fadeouttics); + if ( clearme && next ) StatusBar.AttachMessage(next,-2910); + return clearme; + } + + override void Draw( int bottom, int visibility ) + { + if ( tics <= 0 ) return; + if ( !tewifont ) tewifont = Font.GetFont('TewiShaded'); + if ( !mplusfont ) mplusfont = Font.GetFont('MPlusShaded'); + if ( !miniwifont ) miniwifont = Font.GetFont('MiniwiShaded'); + if ( !k6x8font ) k6x8font = Font.GetFont('k6x8Shaded'); + let fnt = tewifont; + let fnt2 = miniwifont; + if ( language ~== "jp" ) + { + fnt = mplusfont; + fnt2 = k6x8font; + } + Vector2 hs; + if ( swwm_hudscale <= 0 ) hs = StatusBar.GetHUDScale(); + else hs.x = swwm_hudscale; + hs.y = hs.x; + Vector2 ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y); + double alpha = (tics w ) w = lw; + } + int cw = int(ceil((max(max(w1,w2),w)+8)/6.))*6; + Screen.Dim("Black",.5*alpha,int((pos.x-(cw+4)/2)*hs.x),int((pos.y-(h+6))*hs.y),int((cw+4)*hs.x),int((8+h+4+fnt.GetHeight()+8+fnt2.GetHeight()*l.Count())*hs.y)); + Screen.DrawTexture(icon,false,pos.x,pos.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_CenterBottomOffset,true); + pos.y += 4; + Screen.DrawText(fnt,Font.CR_FIRE,pos.x-w1/2,pos.y,wpn,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alpha); + for ( int i=0; i 0) && (seqnum < 6) ) + if ( (seqnum > 0) && (seqnum < (seqcnt+1)) ) { if ( blinkframe >= 0 ) Screen.DrawTexture(Blink[blinkframe],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); if ( talkframe >= 0 ) Screen.DrawTexture(Talk[talkframe],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); @@ -382,7 +464,7 @@ Class SWWMSecretZanavethMessage : HUDMessageBase { seqnum++; charcnt = 0; - if ( seqnum > 5 ) S_StartSound("misc/chat",CHAN_VOICE,CHANF_UI,1.,0.); + if ( (seqnum > seqcnt) && !nextdirect ) S_StartSound("misc/chat",CHAN_VOICE,CHANF_UI,1.,0.); else SetText(); return; } @@ -406,7 +488,11 @@ Class SWWMSecretZanavethMessage : HUDMessageBase int idx = punctuation.IndexOf(ch); if ( idx >= 0 ) delay += (idx*2)+1; charcnt++; - if ( charcnt >= TotalLength() ) delay += (seqnum==5)?90:40; + // utf-8 skipping (naive but works, as we don't have to EXPECT invalid sequences in the input) + if ( ch.ByteAt(0)&0xE0 == 0xC0 ) charcnt++; + else if ( ch.ByteAt(0)&0xF0 == 0xE0 ) charcnt += 2; + else if ( ch.ByteAt(0)&0xF8 == 0xF0 ) charcnt += 3; + if ( charcnt >= TotalLength() ) delay += (seqnum==seqcnt)?enddelay:pausedelay; } override bool Tick() @@ -416,6 +502,7 @@ Class SWWMSecretZanavethMessage : HUDMessageBase delay--; if ( delay <= 0 ) { + Console.Printf(StringTable.Localize("$SWWM_INCOMINGMSG"),chrfullname); S_StartSound("misc/chat",CHAN_VOICE,CHANF_UI,1.,0.); seqnum++; } @@ -433,7 +520,11 @@ Class SWWMSecretZanavethMessage : HUDMessageBase talktics--; } else talkframe = -1; - if ( seqnum > 6 ) return true; + if ( seqnum > (seqcnt+1) ) + { + if ( nextmsg ) StatusBar.AttachMessage(nextmsg,-1232); + return true; + } if ( seqnum == 0 ) { fadein++; @@ -444,8 +535,14 @@ Class SWWMSecretZanavethMessage : HUDMessageBase } return false; } - if ( seqnum == 6 ) + if ( seqnum == (seqcnt+1) ) { + if ( nextmsg && nextdirect ) + { + nextmsg.seqnum = 1; + StatusBar.AttachMessage(nextmsg,-1232); + return true; + } fadeout++; if ( fadeout > 30 ) seqnum++; return false; @@ -461,17 +558,17 @@ Class SWWMSecretZanavethMessage : HUDMessageBase override void Draw( int bottom, int visibility ) { - if ( (seqnum < 0) || (seqnum > 6) ) return; + if ( (seqnum < 0) || (seqnum > (seqcnt+1)) ) return; double alph = 1.; if ( seqnum == 0 ) alph = fadein/15.; - else if ( seqnum == 6 ) alph = 1.-fadeout/30.; + else if ( seqnum == (seqcnt+1) ) alph = 1.-fadeout/30.; if ( swwm_hudscale <= 0 ) hs = StatusBar.GetHUDScale(); else hs.x = swwm_hudscale; hs.y = hs.x; ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y); - origin = (int(ss.x-270)/2,swwm_hudmargin+60); + origin = (int(ss.x-270)/2,swwm_hudmargin+70); Screen.DrawTexture(MessageBox,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph); - if ( (seqnum < 1) || (seqnum > 5) ) return; + if ( (seqnum < 1) || (seqnum > seqcnt) ) return; DrawAvatar(); DrawText(); } diff --git a/zscript/items/swwm_ammoextra.zsc b/zscript/items/swwm_ammoextra.zsc index 77b880e58..dab5cf3c7 100644 --- a/zscript/items/swwm_ammoextra.zsc +++ b/zscript/items/swwm_ammoextra.zsc @@ -85,8 +85,8 @@ Class AmmoFabricator : Inventory abstract let a = (Class)(AllActorClasses[i]); // skip over candy gun spares, they're "special ammo" if ( a == 'CandyGunSpares' ) continue; - // only direct descendants of ammo with a set price below our max unit price - if ( !a || (a.GetParentClass() != 'Ammo') ) continue; + // only direct descendants of swwmammo with a set price below our max unit price + if ( !a || (a.GetParentClass() != 'SWWMAmmo') ) continue; let def = GetDefaultByType(a); if ( (def.Stamina <= 0) || (def.Stamina > maxunitprice) ) continue; // only ammo for weapons that are valid (can be used) @@ -350,7 +350,7 @@ Class HammerspaceEmbiggener : Inventory for ( int i=0; i)(AllActorClasses[i]); - if ( !type || (type.GetParentClass() != 'Ammo') ) continue; + if ( !type || (type.GetParentClass() != 'SWWMAmmo') ) continue; // check that it's for a valid weapon bool isvalid = false; for ( int j=0; j PickAmmo( bool notondemand = false ) { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) ) - return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BundleSpawn';*/ - switch( Random[Replacements](0,8) ) + return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05Ammo3';*/ + switch( Random[Replacements](0,9) ) { case 0: case 1: @@ -32,7 +65,7 @@ Class SWWMShellAmmoSmall : SWWMAmmoSpawner case 7: return 'PurpleShell'; } - // case 8 + // case 8-9 return 'BlueShell'; } } @@ -42,44 +75,54 @@ Class SWWMShellAmmoBig : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { - // shell types (sorted by rarity) - static const Class redpool[] = {'RedShell','RedShell2'}; - static const Class greenpool[] = {'GreenShell','GreenShell2'}; - static const Class purplepool[] = {'PurpleShell','PurpleShell2'}; - static const Class bluepool[] = {'BlueShell','BlueShell2'}; /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) ) return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BigAmmo';*/ - switch( Random[Replacements](0,20) ) + switch( Random[Replacements](0,17) ) { case 0: case 1: case 2: case 3: + return 'RedShell'; case 4: - return redpool[Random[Replacements](0,1)]; case 5: case 6: case 7: + return 'GreenShell'; case 8: case 9: - return greenpool[Random[Replacements](0,1)]; case 10: + return 'PurpleShell'; case 11: case 12: case 13: - return purplepool[Random[Replacements](0,1)]; + return 'BlueShell'; case 14: case 15: - case 16: - return bluepool[Random[Replacements](0,1)]; - case 17: - case 18: return 'WhiteShell'; } - // case 19-20 + // case 16-17 return 'BlackShell'; } } +Class SWWMClipAmmoSmall : SWWMAmmoSpawner +{ + Mixin SWWMOndemandAmmoSpawner; + + static Class PickAmmo( bool notondemand = false ) + { + if ( !Random[Replacements](0,4) ) + { + /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) ) + return Random[Replacements](0,2)?'SheenAmmo3':'SheenTinyAmmo';*/ + if ( notondemand || SWWMUtility.ItemExists('Eviscerator') ) + return 'EvisceratorShell'; + } + /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) ) + return Random[Replacements](0,2)?'SMW05Ammo':'SMW05Ammo2';*/ + return Random[Replacements](0,1)?'RedShell':'GreenShell'; + } +} Class SWWMClipAmmoBig : SWWMAmmoSpawner { Mixin SWWMOndemandAmmoSpawner; @@ -88,7 +131,7 @@ Class SWWMClipAmmoBig : SWWMAmmoSpawner { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) ) return Random[Replacements](0,2)?'SheenSmallAmmo':'SheenBigAmmo';*/ - return Random[Replacements](0,5)?'EvisceratorShell':'EvisceratorBundleSpawn'; + return Random[Replacements](0,5)?'EvisceratorShell':Random[Replacements](0,2)?'EvisceratorShell2':'EvisceratorShell3'; } } Class SWWMBlastAmmoSmall : SWWMAmmoSpawner @@ -110,7 +153,7 @@ Class SWWMBlastAmmoBig : SWWMAmmoSpawner { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) ) return Random[Replacements](0,2)?'SheenBigAmmo':'SheenSmallAmmo';*/ - return Random[Replacements](0,2)?'EvisceratorShell':'EvisceratorBundleSpawn'; + return Random[Replacements](0,2)?'EvisceratorShell':Random[Replacements](0,1)?'EvisceratorShell2':'EvisceratorShell3'; } } Class SWWMRocketAmmoSmall : SWWMAmmoSpawner @@ -131,9 +174,12 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner static Class PickAmmo( bool notondemand = false ) { /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('ModernSparkster')) ) - return Random[Replacements](0,2)?'SparksterAmmoBundleSpawn':'SparksterBigAmmoBundleSpawn';*/ + { + if ( Random[Replacements](0,1) ) return Random[Replacements](0,2)?'SparksterBAmmo2':'SparksterBAmmo3'; + return Random[Replacements](0,2)?'SparksterRAmmo2':'SparksterRAmmo3'; + }*/ /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('Quadravol')) ) - return Random[Replacements](0,2)?'QuadravolAmmo':'QuadravolAmmoBundleSpawn';*/ + return Random[Replacements](0,4)?'QuadravolAmmo2':'QuadravolAmmo3';*/ switch ( Random[Replacements](0,11) ) { case 0: @@ -141,12 +187,12 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner case 2: case 3: case 4: - return Random[Replacements](0,4)?'HellblazerMissiles':'HellblazerMissileBundleSpawn'; + return Random[Replacements](0,4)?'HellblazerMissiles':'HellblazerMissiles2'; case 5: case 6: case 7: case 8: - return Random[Replacements](0,7)?'HellblazerCrackshots':'HellblazerCrackshotBundleSpawn'; + return Random[Replacements](0,7)?'HellblazerCrackshots':'HellblazerCrackshots2'; case 9: case 10: return 'HellblazerRavagers'; @@ -167,7 +213,7 @@ Class SWWMCellAmmoSmall : SWWMAmmoSpawner if ( !Random[Replacements](0,3) ) { /*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return 'MisterGAmmo';*/ - /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RayKhom')) ) return 'RayBolt';*/ + /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RayKhom')) ) return 'RayBolt2';*/ if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return 'CandyGunBullets'; } /*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return 'EMPCore';*/ @@ -194,17 +240,17 @@ Class SWWMCellAmmoBig : SWWMAmmoSpawner } /*if ( Random[Replacements](0,1) ) { - if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return Random[Replacements](0,3)?'EMPCoreBundleSpawn':'EMPCore'; - if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return Random[Replacements](0,2)?'MisterRoundBundleSpawn':'MisterAmmo'; - if ( notondemand || SWWMUtility.ItemExists('RayKhom') ) return Random[Replacements](0,2)?'RayBoltBundleSpawn':'RayAmmo'; + if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return Random[Replacements](0,3)?'EMPCore2':'EMPCore'; + if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return Random[Replacements](0,2)?'MisterRound5':'MisterAmmo'; + if ( notondemand || SWWMUtility.ItemExists('RayKhom') ) return Random[Replacements](0,2)?'RayBolt5':'RayAmmo'; }*/ if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('SilverBullet')) ) { - if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBulletsBundleSpawn':'SilverBullets2BundleSpawn'; + if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBullets_2':'SilverBullets2_2'; return Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2'; } - if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,3)?'CandyGunBulletsBundleSpawn':'CandyGunAmmo'; + if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,3)?'CandyGunBullets3':'CandyGunAmmo'; /*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('BlackfireIgniter')) ) return 'DarkCanister';*/ - return Random[Replacements](0,3)?'SparkUnit':'SparkUnitBundleSpawn'; + return Random[Replacements](0,3)?'SparkUnit':'SparkUnit2'; } } diff --git a/zscript/items/swwm_armor.zsc b/zscript/items/swwm_armor.zsc index a69a9ea0f..0bffc56ba 100644 --- a/zscript/items/swwm_armor.zsc +++ b/zscript/items/swwm_armor.zsc @@ -25,6 +25,13 @@ Class ArmorNuggetItem : SWWMSpareArmor SWWMLoreLibrary.Add(other.player,"Nugget"); return Super.CreateCopy(other); } + + override void DoPickupSpecial( Actor toucher ) + { + Super.DoPickupSpecial(toucher); + SWWMUtility.AchievementProgressInc('swwm_progress_candy',1,toucher.player); + } + Default { //$Title Armor Nugget @@ -32,7 +39,7 @@ Class ArmorNuggetItem : SWWMSpareArmor //$Sprite graphics/HUD/Icons/I_ArmorNugget.png //$Icon armour Tag "$T_NUGGETA"; - Stamina 300; + Stamina 400; Inventory.Icon "graphics/HUD/Icons/I_ArmorNugget.png"; Inventory.PickupMessage "$T_NUGGETA"; Inventory.MaxAmount 20; @@ -56,28 +63,6 @@ Class ArmorNuggetItem : SWWMSpareArmor Stop; } } -Class ArmorNuggetBundleSpawn : Actor -{ - override void PostBeginPlay() - { - if ( bCOUNTSECRET ) level.total_secrets--; - int bnd = Random[Bundle](2,3); - for ( int i=0; i MagAmmoType; + private int SAmmoFlags; + + Property PickupTag : PickupTag; + Property MagAmmoType : MagAmmoType; + + FlagDef UsePickupMsg : SAmmoFlags, 0; // use the set pickup message rather than generating from pickup tag + + override Class GetParentAmmo() + { + Class type = GetClass(); + while ( (type.GetParentClass() != "SWWMAmmo") && type.GetParentClass() ) + type = type.GetParentClass(); + return (Class)(type); + } + + override string PickupMessage() + { + if ( bUsePickupMsg ) return Super.PickupMessage(); + String tagstr = "$T_"..PickupTag; + if ( Amount > 1 ) + { + tagstr = tagstr.."S"; + return String.Format("%d %s",Amount,StringTable.Localize(tagstr)); + } + return StringTable.Localize(tagstr); + } + private Inventory DoDrop( Class type ) { let copy = Inventory(Spawn(type,Owner.Pos,NO_REPLACE)); @@ -122,22 +155,7 @@ Mixin Class SWWMAmmo ammotypes.Push((Class)(AllActorClasses[i])); } // sort from largest to smallest - for ( int i=0; i 0) && CmpAmmo(ammotypes[k-1],ammotypes[k]) ) - { - Class tmp = ammotypes[k]; - ammotypes[k] = ammotypes[k-1]; - ammotypes[k-1] = tmp; - k--; - } - j++; - } - } + qsort_ammotypes(ammotypes,0,ammotypes.Size()-1); // drop spares Inventory last; while ( excess > 0 ) @@ -196,6 +214,31 @@ Mixin Class SWWMAmmo return true; } + override void AttachToOwner( Actor other ) + { + Super.AttachToOwner(other); + // attach our mag ammo if we have none + if ( MagAmmoType && !Owner.FindInventory(MagAmmoType) ) + { + let ma = Inventory(Spawn(MagAmmoType)); + ma.Amount = 0; + ma.AttachToOwner(Owner); + } + } + + override void ModifyDropAmount( int dropamount ) + { + Super.ModifyDropAmount(dropamount); + int maxdrop = 1; + for ( int i=0; i)(AllActorClasses[i])); + maxdrop = max(maxdrop,def.amount); + } + Amount = Random[ShellDrop](1,clamp(dropamount,1,maxdrop)); + } + default { +INVENTORY.IGNORESKILL; @@ -214,9 +257,11 @@ Class MagAmmo : Inventory abstract Ammo pamo; int ClipSize; int countdown; + String PickupTag; Property ParentAmmo : ParentAmmo; Property ClipSize : ClipSize; + Property PickupTag : PickupTag; default { @@ -226,6 +271,59 @@ Class MagAmmo : Inventory abstract Inventory.PickupFlash "SWWMPickupFlash"; } + virtual Class GetParentMagAmmo() + { + Class type = GetClass(); + while ( (type.GetParentClass() != "MagAmmo") && type.GetParentClass() ) + type = type.GetParentClass(); + return (Class)(type); + } + + private bool CmpAmmo( Class a, Class b ) + { + let amta = GetDefaultByType(a).Amount; + let amtb = GetDefaultByType(b).Amount; + return (amta < amtb); + } + + private int partition_ammotypes( Array > a, int l, int h ) + { + Class pv = a[h]; + int i = (l-1); + for ( int j=l; j<=(h-1); j++ ) + { + if ( CmpAmmo(pv,a[j]) ) + { + i++; + Class tmp = a[j]; + a[j] = a[i]; + a[i] = tmp; + } + } + Class tmp = a[h]; + a[h] = a[i+1]; + a[i+1] = tmp; + return i+1; + } + private void qsort_ammotypes( Array > a, int l, int h ) + { + if ( l >= h ) return; + int p = partition_ammotypes(a,l,h); + qsort_ammotypes(a,l,p-1); + qsort_ammotypes(a,p+1,h); + } + + override string PickupMessage() + { + String tagstr = "$T_"..PickupTag; + if ( Amount > 1 ) + { + tagstr = tagstr.."S"; + return String.Format("%d %s",Amount,StringTable.Localize(tagstr)); + } + return StringTable.Localize(tagstr); + } + override bool HandlePickup( Inventory item ) { // see if the mag can be split apart @@ -257,7 +355,78 @@ Class MagAmmo : Inventory abstract return true; } } - return Super.HandlePickup(item); + // drop excess mag ammo + if ( (item is 'MagAmmo') && (MagAmmo(item).GetParentMagAmmo() == GetClass()) ) + { + int excess = Amount+item.Amount; + if ( excess > MaxAmount ) excess -= MaxAmount; + if ( excess < item.Amount ) + { + // enumerate all subclasses + Array > ammotypes; + ammotypes.Clear(); + for ( int i=0; i)(AllActorClasses[i])); + } + // sort from largest to smallest + qsort_ammotypes(ammotypes,0,ammotypes.Size()-1); + // drop spares + Inventory last; + while ( excess > 0 ) + { + for ( int i=0; i= def.Amount ) + { + double ang = FRandom[Junk](0,360); + last = DoDrop(ammotypes[i]); + last.SetOrigin(item.pos,false); + last.vel.xy = (cos(ang),sin(ang))*FRandom[Junk](2,5); + excess -= def.Amount; + break; + } + } + } + } + if ( Amount < MaxAmount ) + { + int receiving = item.Amount; + int oldamt = Amount; + if ( (Amount > 0) && ((Amount+item.Amount) < 0) ) Amount = int.max; + else Amount += item.Amount; + if ( Amount > MaxAmount && !sv_unlimited_pickup ) Amount = MaxAmount; + item.bPickupGood = true; + // autoswitch if needed (checks parent ammo type) + if ( (oldamt == 0) && Owner && Owner.player ) + PlayerPawn(Owner).CheckWeaponSwitch(ParentAmmo); + } + return true; + } + return false; + } + + override Inventory CreateCopy( Actor other ) + { + Inventory copy; + int amount = Amount; + let type = GetParentMagAmmo(); + if ( (GetClass() != type) && type ) + { + if ( !GoAway() ) Destroy(); + copy = Inventory(Spawn(type)); + copy.Amount = amount; + copy.BecomeItem(); + } + else + { + copy = Super.CreateCopy(other); + copy.Amount = amount; + } + if ( copy.Amount > copy.MaxAmount ) copy.Amount = copy.MaxAmount; + return copy; } override bool CanPickup( Actor toucher ) @@ -363,6 +532,16 @@ Class MagAmmo : Inventory abstract return null; // cap amt = min(amount,amt); + // enumerate all subclasses + Array > ammotypes; + ammotypes.Clear(); + for ( int i=0; i)(AllActorClasses[i])); + } + // sort from largest to smallest + qsort_ammotypes(ammotypes,0,ammotypes.Size()-1); // perform subdivision Inventory last = null; let pammo = GetDefaultByType(ParentAmmo); @@ -376,10 +555,18 @@ Class MagAmmo : Inventory abstract Amount -= ClipSize; continue; } - // drop individual bullets - last = DoDrop(GetClass()); - amt--; - Amount--; + // drop bullets otherwise + for ( int i=0; i= def.Amount ) + { + last = DoDrop(ammotypes[i]); + amt -= def.Amount; + Amount -= def.Amount; + break; + } + } } return last; } @@ -391,30 +578,8 @@ Class MagAmmo : Inventory abstract } } -// Common code for grouped shell handling and per-amount pickup messages -Mixin Class SWWMShellAmmo -{ - override string PickupMessage() - { - String tagstr = "$T_"..GetParentAmmo().GetClassName(); - tagstr.MakeUpper(); - if ( Amount > 1 ) - { - tagstr = tagstr.."S"; - return String.Format("%d %s",Amount,StringTable.Localize(tagstr)); - } - return StringTable.Localize(tagstr); - } - - override void ModifyDropAmount( int dropamount ) - { - Super.ModifyDropAmount(dropamount); - Amount = Random[ShellDrop](1,clamp(dropamount,1,4)); - } -} - -// Ref class for ammo spawners, used by both on-demand replacers and bundles -Class SWWMAmmoSpawner : Actor abstract +// Ref class for ammo spawners, used by on-demand replacers +Class SWWMAmmoSpawner : Inventory abstract { virtual void SpawnAmmo() {} @@ -425,6 +590,16 @@ Class SWWMAmmoSpawner : Actor abstract Destroy(); } + override bool CanPickup( Actor toucher ) + { + return false; + } + + override bool TryPickup( in out Actor toucher ) + { + return false; + } + default { +NOGRAVITY; @@ -432,5 +607,6 @@ Class SWWMAmmoSpawner : Actor abstract +NOINTERACTION; +NOTELEPORT; +DONTSPLASH; + -SPECIAL; } } diff --git a/zscript/items/swwm_collectibles.zsc b/zscript/items/swwm_collectibles.zsc index 6061d56c6..57dc57e00 100644 --- a/zscript/items/swwm_collectibles.zsc +++ b/zscript/items/swwm_collectibles.zsc @@ -190,68 +190,31 @@ Class SayaBean : SWWMCollectible } Class MothPlushy : SWWMCollectible { + bool activated; // she knows where you are + bool present; // she's here (TBD 1.5) + int gigglecnt, uses; + + override void DoEffect() + { + Super.DoEffect(); + if ( gigglecnt > 0 ) + { + gigglecnt--; + if ( gigglecnt == 30 ) + A_StartSound("mashiro/appear",CHAN_VOICE,CHANF_UI|CHANF_NOSTOP|CHANF_OVERLAP,1.,0.); + if ( gigglecnt == 0 ) + Console.MidPrint(smallfont,StringTable.Localize("$D_MASHIRO"),true); + } + } + Default { Tag "$T_MOTHPLUSH"; Inventory.PickupMessage "$T_MOTHPLUSH"; - SWWMCollectible.Availability AVAIL_None; SWWMCollectible.GestureWeapon "MothPlushyGesture"; Stamina 7000; - } -} -Class AA12Model : SWWMCollectible -{ - Default - { - Tag "$T_AA12"; - Inventory.PickupMessage "$T_AA12"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "AA12ModelGesture"; - Stamina 10000; - } -} -Class CactusHege : SWWMCollectible -{ - Default - { - Tag "$T_HEGE"; - Inventory.PickupMessage "$T_HEGE"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "CactusHegeGesture"; - Stamina 3000; - } -} -Class TastyHoagie : SWWMCollectible -{ - Default - { - Tag "$T_HOAGIE"; - Inventory.PickupMessage "$T_HOAGIE"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "TastyHoagieGesture"; - Stamina 2000; - } -} -Class IbukiMilk : SWWMCollectible -{ - Default - { - Tag "$T_IBUKIMILK"; - Inventory.PickupMessage "$T_IBUKIMILK"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "IbukiMilkGesture"; - Stamina 800; - } -} -Class BRCAlbum : SWWMCollectible -{ - Default - { - Tag "$T_BRCALBUM"; - Inventory.PickupMessage "$T_BRCALBUM"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "BRCAlbumGesture"; - Stamina 4000; + Radius 12; + Height 32; } } // Heretic @@ -268,28 +231,6 @@ Class DemoPlush : SWWMCollectible Height 36; } } -Class Manarokou : SWWMCollectible -{ - Default - { - Tag "$T_MANAROKOU"; - Inventory.PickupMessage "$T_MANAROKOU"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "ManarokouGesture"; - Stamina 9000; - } -} -Class LithiumNovel : SWWMCollectible -{ - Default - { - Tag "$T_LITHIUM"; - Inventory.PickupMessage "$T_LITHIUM"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "LithiumNovelGesture"; - Stamina 2000; - } -} // Hexen Class KirinCummies : SWWMCollectible { @@ -343,14 +284,3 @@ Class KirinPlush : SWWMCollectible Height 37; } } -Class Psykkonovexx : SWWMCollectible -{ - Default - { - Tag "$T_PSYKKONOVEXX"; - Inventory.PickupMessage "$T_PSYKKONOVEXX"; - SWWMCollectible.Availability AVAIL_None; - SWWMCollectible.GestureWeapon "PsykkonovexxGesture"; - Stamina 15000; - } -} diff --git a/zscript/items/swwm_collectibles_gesture.zsc b/zscript/items/swwm_collectibles_gesture.zsc index 36825c3dd..abea64311 100644 --- a/zscript/items/swwm_collectibles_gesture.zsc +++ b/zscript/items/swwm_collectibles_gesture.zsc @@ -145,12 +145,37 @@ Class SayaBeanGesture : SWWMItemGesture Stop; } } -Class MothPlushyGesture : SWWMItemGesture {} -Class AA12ModelGesture : SWWMItemGesture {} -Class CactusHegeGesture : SWWMItemGesture {} -Class TastyHoagieGesture : SWWMItemGesture {} -Class IbukiMilkGesture : SWWMItemGesture {} -Class BRCAlbumGesture : SWWMItemGesture {} +Class MothPlushyGesture : SWWMItemGesture +{ + action void A_MothCheck() + { + let realmoth = MothPlushy(FindInventory("MothPlushy")); + if ( !realmoth || realmoth.activated ) return; + realmoth.uses = min(10,realmoth.uses+1); + if ( (realmoth.uses > 1) && !Random[Gesture](0,12-realmoth.uses) ) + { + realmoth.activated = true; + realmoth.gigglecnt = 90; + } + } + States + { + Fire: + XZW1 A 3; + XZW1 B 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP); + XZW1 CDEFGH 3; + XZW1 IJKLM 3; + XZW1 NO 4; + XZW1 P 4 A_MothCheck(); + XZW1 QRSTUV 4; + XZW1 W 3; + XZW1 X 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP); + XZW1 YZ 3; + XZW2 ABCD 3; + XZW1 A -1 A_FinishGesture(); + Stop; + } +} Class DemoPlushGesture : SWWMItemGesture { States @@ -169,8 +194,6 @@ Class DemoPlushGesture : SWWMItemGesture Stop; } } -Class ManarokouGesture : SWWMItemGesture {} -Class LithiumNovelGesture : SWWMItemGesture {} Class KirinCummiesGesture : SWWMItemGesture { States @@ -323,4 +346,3 @@ Class KirinPlushGesture : SWWMItemGesture Stop; } } -Class PsykkonovexxGesture : SWWMItemGesture {} diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index a3be4e8f8..1d0fa4474 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -954,6 +954,8 @@ Class Chancebox : Actor if ( SWWMUtility.ItemExists("Spreadgun") && SWWMUtility.CheckNeedsItem("GoldShell",true) && !vipammodrop ) vipammodrop = "GoldShell"; Class vipitemdrop = null; if ( SWWMUtility.CheckNeedsItem("Mykradvo",true) && !SWWMUtility.ItemExists("Mykradvo",worldonly:true) && Random[Chancebox](0,1) ) vipitemdrop = "Mykradvo"; + if ( SWWMUtility.CheckNeedsItem("AngerySigil",true) && !SWWMUtility.ItemExists("AngerySigil",worldonly:true) && Random[Chancebox](0,1) && !vipitemdrop ) vipitemdrop = "AngerySigil"; + if ( SWWMUtility.CheckNeedsItem("DivineSprite",true) && !SWWMUtility.ItemExists("DivineSprite",worldonly:true) && Random[Chancebox](0,1) && !vipitemdrop ) vipitemdrop = "DivineSprite"; if ( !vipitemdrop ) vipitemdrop = "GrilledCheeseSandwich"; let a = Spawn((!Random[Chancebox](0,2)&&vipammodrop)?vipammodrop:vipitemdrop,pos); a.bDROPPED = false; diff --git a/zscript/items/swwm_health.zsc b/zscript/items/swwm_health.zsc index d8e529f9d..60d01dcb4 100644 --- a/zscript/items/swwm_health.zsc +++ b/zscript/items/swwm_health.zsc @@ -71,6 +71,11 @@ Class HealthNuggetItem : SWWMHealth SWWMLoreLibrary.Add(other.player,"Nugget"); return Super.CreateCopy(other); } + override void DoPickupSpecial( Actor toucher ) + { + Super.DoPickupSpecial(toucher); + SWWMUtility.AchievementProgressInc('swwm_progress_candy',1,toucher.player); + } Default { //$Title Health Nugget @@ -101,28 +106,6 @@ Class HealthNuggetItem : SWWMHealth Stop; } } -Class HealthNuggetBundleSpawn : Actor -{ - override void PostBeginPlay() - { - if ( bCOUNTSECRET ) level.total_secrets--; - int bnd = Random[Bundle](2,3); - for ( int i=0; i=2)?default.Icon:(primetim>=6)?(bFailed?OnIcon[1]:OnIcon[2]):OnIcon[0]; + if ( !bFailed && (primetim == 20) ) Owner.A_StartSound("hahaha/hahaha",CHAN_POWERUP,CHANF_OVERLAP); + primetim++; + if ( (primetim <= 20) || (!bFailed && (primetim <= 50)) ) return; + primetim = 0; + bPrimed = false; + Icon = default.Icon; + if ( bFailed ) return; + Vector3 safepos; + double safeangle; + if ( deathmatch ) [safepos, safeangle] = level.PickDeathmatchStart(); + else [safepos, safeangle] = level.PickPlayerStart(Owner.PlayerNumber()); + Vector3 oldpos = Owner.pos; + if ( !Owner.Teleport(safepos,safeangle,0) ) + { + if ( Owner is 'Demolitionist' ) + Demolitionist(Owner).lastbump *= .95; + Owner.A_StartSound("powerup/tethererror",CHAN_ITEMEXTRA,CHANF_OVERLAP); + if ( Owner.player == players[consoleplayer] ) Console.Printf(StringTable.Localize("$D_TETHERFAIL")); + return; + } + let s = Spawn("DemolitionistShockwave",oldpos); + s.target = Owner; + s.special1 = 120; + s = Spawn("DemolitionistShockwave",Owner.pos); + s.target = Owner; + s.special1 = 120; + if ( Owner.player == players[consoleplayer] ) + { + Owner.A_StartSound("demolitionist/hardland",CHAN_FOOTSTEP,CHANF_OVERLAP); + Owner.A_StartSound("demolitionist/hardland",CHAN_FOOTSTEP,CHANF_OVERLAP,pitch:.7); + Owner.A_StartSound("demolitionist/hardland",CHAN_FOOTSTEP,CHANF_OVERLAP,pitch:.4); + } + SWWMHandler.DoFlash(Owner,Color(255,255,255,255),10); + SWWMHandler.DoFlash(Owner,Color(255,128,192,255),30); + 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),ST_Health); + SWWMUtility.AchievementProgressInc('swwm_progress_sneaky',1,Owner.player); + Amount--; + if ( Amount <= 0 ) DepleteOrDestroy(); + } + + override bool Use( bool pickup ) + { + if ( pickup || bPrimed ) return false; + if ( !OnIcon[0] ) OnIcon[0] = TexMan.CheckForTexture("graphics/HUD/Icons/I_SafetyOn.png"); + if ( !OnIcon[1] ) OnIcon[1] = TexMan.CheckForTexture("graphics/HUD/Icons/I_SafetyNo.png"); + if ( !OnIcon[2] ) OnIcon[2] = TexMan.CheckForTexture("graphics/HUD/Icons/I_SafetyYes.png"); + bPrimed = true; + primetim = 0; + Vector3 safepos; + if ( deathmatch ) safepos = level.PickDeathmatchStart(); + else safepos = level.PickPlayerStart(Owner.PlayerNumber()); + bFailed = (level.Vec3Diff(Owner.pos,safepos).length() < 400); + if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(bFailed?"powerup/tetherfail":"powerup/tetheruse",CHAN_ITEMEXTRA,CHANF_OVERLAP); + // don't consume on use, will happen later + Amount++; + return true; + } + + Default + { + //$Title Safety Tether + //$Group Powerups + //$Sprite graphics/HUD/Icons/I_Safety.png + //$Icon powerup + Tag "$T_SAFETY"; + Stamina 240000; + Inventory.Icon "graphics/HUD/Icons/I_Safety.png"; + Inventory.PickupSound "misc/p_pkup"; + Inventory.UseSound ""; + Inventory.PickupMessage "$T_SAFETY"; + Inventory.MaxAmount 5; + Inventory.InterHubAmount 5; + Inventory.PickupFlash "SWWMPurplePickupFlash"; + +INVENTORY.ALWAYSPICKUP; + +INVENTORY.AUTOACTIVATE; + +INVENTORY.INVBAR; + +COUNTITEM; + +INVENTORY.BIGPOWERUP; + +FLOATBOB; + FloatBobStrength 0.25; + Radius 5; + Height 23; + } + States + { + Spawn: + XZW1 A 33; + XZW1 B 2; + Loop; + } +} + +Class AngeryLight : PointLightAttenuated +{ + Default + { + Args 224,0,255,80; + } + override void Tick() + { + Super.Tick(); + if ( !target || !master ) + { + Destroy(); + return; + } + if ( target.player ) + SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true); + else SetOrigin(target.Vec3Offset(0,0,target.height/2),true); + args[LIGHT_INTENSITY] = Random[Invinciball](10,12)*8; + bDORMANT = Powerup(master).isBlinking(); + } +} +Class AngerySnd : Actor +{ + Default + { + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + } + override void Tick() + { + if ( !target || !master ) + { + Destroy(); + return; + } + SetOrigin(target.pos,true); + if ( players[consoleplayer].Camera == target ) + { + A_SoundVolume(CHAN_VOICE,0.); + A_SoundVolume(CHAN_7,.5); + } + else + { + A_SoundVolume(CHAN_VOICE,.4); + A_SoundVolume(CHAN_7,0.); + } + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + A_StartSound("powerup/devastationact",CHAN_VOICE,CHANF_LOOP,.4,1.5); + A_StartSound("powerup/devastationact",CHAN_7,CHANF_LOOP,.5,ATTN_NONE); + } + override void OnDestroy() + { + Super.OnDestroy(); + A_StopSound(CHAN_VOICE); + A_StopSound(CHAN_7); + } +} +Class AngeryPower : Powerup +{ + Mixin SWWMShadedPowerup; + + Actor l, snd; + int lasteffect; + transient int lastpulse; + + Default + { + Powerup.Duration -50; + Inventory.Icon "graphics/HUD/Icons/I_Devastation.png"; + Powerup.Color "C0 00 FF", 0.2; + +INVENTORY.ADDITIVETIME; + } + + override void InitEffect() + { + Super.InitEffect(); + if ( !Owner ) return; + Owner.A_AlertMonsters(swwm_uncapalert?0:5000); + SWWMHandler.DoFlash(Owner,Color(64,224,0,255),30); + Owner.A_QuakeEx(8,8,8,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); + lasteffect = int.min; + lastpulse = max(lastpulse,gametic+35); + if ( Owner is 'Demolitionist' ) + Demolitionist(Owner).lastbump *= .95; + l = Spawn("AngeryLight",Owner.pos); + l.target = Owner; + l.master = self; + } + override void DoEffect() + { + Super.DoEffect(); + if ( !Owner ) return; + if ( !snd ) snd = Spawn("AngerySnd",Owner.pos); + snd.target = Owner; + snd.master = self; + } + + override void EndEffect() + { + Super.EndEffect(); + if ( !Owner ) return; + Owner.A_StartSound("powerup/devastationend",CHAN_ITEMEXTRA,CHANF_OVERLAP); + SWWMHandler.DoFlash(Owner,Color(128,224,0,255),30); + Owner.A_QuakeEx(4,4,4,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); + Owner.A_AlertMonsters(2000); + if ( Owner is 'Demolitionist' ) + Demolitionist(Owner).lastbump *= .9; + if ( (EffectTics <= 0) && Owner && Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_DEVASTATION")); + } + + void DoHitFX() + { + if ( level.maptime <= lasteffect+5 ) return; + Owner.A_AlertMonsters(swwm_uncapalert?0:5000); + SWWMHandler.DoFlash(Owner,Color(64,224,0,255),10); + Owner.A_QuakeEx(8,8,8,Random[Rage](3,8),0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); + Owner.A_StartSound("powerup/devastationhit",CHAN_POWERUP,CHANF_OVERLAP); + lasteffect = level.maptime; + lastpulse = max(lastpulse,gametic+35); + if ( Owner is 'Demolitionist' ) + Demolitionist(Owner).lastbump *= .9; + } + + override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) + { + if ( passive || (damage <= 0) ) return; + // (2^31-1)/25 : guarantee that it caps rather than overflowing + if ( damage > 85899345 ) newdamage = int.max; + else newdamage = damage*25; + DoHitFX(); + } +} +Class AngerySigil : Inventory +{ + Mixin SWWMAutoUseFix; + Mixin SWWMOverlapPickupSound; + Mixin SWWMUseToPickup; + Mixin SWWMRespawn; + Mixin SWWMPickupGlow; + + override bool Use( bool pickup ) + { + if ( pickup && !deathmatch ) return false; + if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP); + SWWMUtility.AchievementProgressInc('swwm_progress_deva',1,Owner.player); + let r = AngeryPower(Owner.FindInventory("AngeryPower")); + if ( r ) + { + r.EffectTics += r.default.EffectTics; + SWWMHandler.DoFlash(Owner,Color(64,224,0,255),30); + Owner.A_QuakeEx(8,8,8,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.); + if ( Owner is 'Demolitionist' ) + Demolitionist(Owner).lastbump *= .95; + } + else Owner.GiveInventory("AngeryPower",1); + return true; + } + override void Travelled() + { + Super.Travelled(); + if ( !tracer ) + { + tracer = Spawn("AngerySigilX",pos); + tracer.angle = angle; + tracer.target = self; + tracer.FloatBobPhase = FloatBobPhase; + } + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + tracer = Spawn("AngerySigilX",pos); + tracer.angle = angle; + tracer.target = self; + tracer.FloatBobPhase = FloatBobPhase; + } + Default + { + //$Title Devastation Sigil + //$Group Powerups + //$Sprite graphics/HUD/Icons/I_Devastation.png + //$Icon powerup + Tag "$T_DEVASTATION"; + Stamina -1500000; + Inventory.Icon "graphics/HUD/Icons/I_Devastation.png"; + Inventory.PickupSound "misc/p_pkup"; + Inventory.UseSound "powerup/devastation"; + Inventory.PickupMessage "$T_DEVASTATION"; + Inventory.MaxAmount 3; + Inventory.InterHubAmount 3; + Inventory.PickupFlash "SWWMPurplePickupFlash"; + +INVENTORY.ALWAYSPICKUP; + +INVENTORY.AUTOACTIVATE; + +INVENTORY.INVBAR; + +COUNTITEM; + +INVENTORY.BIGPOWERUP; + +FLOATBOB; + FloatBobStrength 0.25; + Radius 8; + Height 28; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} +Class AngerySigilX : GhostArtifactX +{ + Default + { + Scale .5; + Alpha .35; + RenderStyle "Subtract"; + +FORCEXYBILLBOARD; + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + A_StartSound("powerup/devastationamb",CHAN_VOICE,CHANF_LOOP,attenuation:2.); + } + override void Tick() + { + if ( !target ) + { + Destroy(); + return; + } + prev = target.prev+(0,0,20); + vel = target.vel; + if ( (target.pos != pos+(0,0,20)) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+(0,0,20)+vel,true); + if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE); + FloatBobPhase = target.FloatBobPhase; + if ( !bsprite ) bsprite = GetSpriteIndex('XZW1'); + bInvisible = target.bInvisible||(target.sprite!=bsprite); + SetState(SpawnState+bInvisible); + A_SoundVolume(CHAN_VOICE,bInvisible?0.:1.); + } + States + { + Spawn: + BLPS C -1 Bright; + TNT1 A -1; + Stop; + } +} + +Class DivineSpriteLight : PointLightAttenuated +{ + Default + { + Args 255,255,255,100; + } + override void Tick() + { + Super.Tick(); + if ( !target || !master ) + { + Destroy(); + return; + } + if ( target.player ) + SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true); + else SetOrigin(target.Vec3Offset(0,0,target.height/2),true); + double vol = clamp((target.Health-1000)/6000.,0.,1.); + int lv = clamp(int(vol*255),0,255); + args[LIGHT_RED] = lv; + args[LIGHT_GREEN] = lv; + args[LIGHT_BLUE] = lv; + args[LIGHT_INTENSITY] = Random[Invinciball](10,12)*10; + } +} +Class DivineSpriteSnd : Actor +{ + Default + { + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + } + override void Tick() + { + if ( !target || !master ) + { + Destroy(); + return; + } + SetOrigin(target.pos,true); + double vol = clamp((DivineSpriteEffect(master).AlphInter.GetValue()-1000.)/9000.,0.,1.); + if ( players[consoleplayer].Camera == target ) + { + A_SoundVolume(CHAN_VOICE,0.); + A_SoundVolume(CHAN_7,.8*vol); + } + else + { + A_SoundVolume(CHAN_VOICE,.4*vol); + A_SoundVolume(CHAN_7,0.); + } + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + A_StartSound("powerup/divineact",CHAN_VOICE,CHANF_LOOP,.4,1.5); + A_StartSound("powerup/divineact",CHAN_7,CHANF_LOOP,.8,ATTN_NONE); + } + override void OnDestroy() + { + Super.OnDestroy(); + A_StopSound(CHAN_VOICE); + A_StopSound(CHAN_7); + } +} +Class DivineSpriteEffect : Inventory +{ + int healcnt; + int healtim; + bool bHealDone; + Actor l, snd; + DynamicValueInterpolator AlphInter; + + Property HealTimer : healtim; + + default + { + Inventory.Icon "graphics/HUD/Icons/I_Divine.png"; + DivineSpriteEffect.HealTimer 1750; + Inventory.InterHubAmount 0; + +INVENTORY.UNDROPPABLE; + +INVENTORY.UNTOSSABLE; + } + + clearscope bool isBlinking() const + { + return ( (healtim <= BLINKTHRESHOLD) && (healtim&8) ); + } + + override Color GetBlend() + { + if ( swwm_shaders ) return 0; + if ( !AlphInter ) AlphInter = DynamicValueInterpolator.Create(Owner.Health,.1,1,100); + double alph = clamp((AlphInter.GetValue()-1000.)/6000.,0.,1.); + return Color(int(64*alph),255,255,255); + } + + override void DoEffect() + { + Super.DoEffect(); + if ( !l ) l = Spawn("DivineSpriteLight",Owner.pos); + l.target = Owner; + l.master = self; + if ( !snd ) snd = Spawn("DivineSpriteSnd",Owner.pos); + snd.target = Owner; + snd.master = self; + int numpt = Random[ExploS](5,10); + if ( !AlphInter ) AlphInter = DynamicValueInterpolator.Create(Owner.Health,.1,1,100); + AlphInter.Update(Owner.Health); + double alph = clamp((AlphInter.GetValue()-1000.)/6000.,0.,1.); + double scl = clamp((AlphInter.GetValue()-1000.)/6000.,2.,4.); + for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1136,8 +1138,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1165,8 +1169,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1211,8 +1217,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1320,10 +1328,10 @@ Class DemolitionistMenu : GenericMenu if ( sub ) { int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]); - if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag()); + if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); } - else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); + else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1366,7 +1374,13 @@ Class DemolitionistMenu : GenericMenu { if ( !storelist[i] ) continue; let def = GetDefaultByType(storelist[i]); - if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); + if ( sub ) + { + int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]); + if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i])); + else str = def.GetTag(); + } + else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); else str = def.GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -1632,7 +1646,7 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); @@ -1688,10 +1702,10 @@ Class DemolitionistMenu : GenericMenu if ( sub ) { int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]); - if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag()); + if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); } - else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); + else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -2332,8 +2346,8 @@ Class DemolitionistMenu : GenericMenu if ( type is 'SWWMCollectible' ) continue; // no barriers outside doom if ( !(gameinfo.gametype&GAME_DOOM) && (type is 'EBarrier') ) continue; - // no gravity outside raven - if ( !(gameinfo.gametype&GAME_RAVEN) && (type is 'GravitySuppressor') ) continue; + // no gravity/tether outside raven + if ( !(gameinfo.gametype&GAME_RAVEN) && ((type is 'GravitySuppressor') || (type is 'SafetyTether')) ) continue; // can't sell candygun spares if ( sub && (type is 'CandyGunSpares') ) continue; let cur = players[consoleplayer].mo.FindInventory(type); @@ -2374,7 +2388,7 @@ Class DemolitionistMenu : GenericMenu if ( !ready || !ready.ValidateSpriteFrame() ) continue; } // ignore child ammos - if ( (type is 'Ammo') && (type.GetParentClass() != 'Ammo') ) continue; + if ( (type is 'Ammo') && (type.GetParentClass() != 'SWWMAmmo') ) continue; if ( inv.Stamina == 0 ) continue; // items with negative stamina can only be sold if ( (inv.Stamina < 0) && !sub ) continue; @@ -3187,8 +3201,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -3199,8 +3215,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=ofs; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); int clscol = Font.CR_WHITE; if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; @@ -3246,8 +3264,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=0; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); len = fnt.StringWidth(str); if ( len > longest ) longest = len; @@ -3258,8 +3278,10 @@ Class DemolitionistMenu : GenericMenu for ( int i=ofs; i 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); + if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) + str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i])); + else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) + str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag()); else str = invlist[i].GetTag(); int clscol = Font.CR_WHITE; if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; @@ -3456,10 +3478,10 @@ Class DemolitionistMenu : GenericMenu if ( sub ) { int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]); - if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag()); + if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); } - else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],def.GetTag()); + else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i])); else str = def.GetTag(); int clscol = Font.CR_WHITE; if ( storelist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD; diff --git a/zscript/menu/swwm_achievementmenu.zsc b/zscript/menu/swwm_achievementmenu.zsc index 980cc84ce..2e0ee1b50 100644 --- a/zscript/menu/swwm_achievementmenu.zsc +++ b/zscript/menu/swwm_achievementmenu.zsc @@ -11,12 +11,15 @@ Class SWWMAchievementMenu : GenericMenu int mSelected; int mBaseY; // Y position achievement boxes are being drawn at // needed to tune mouse selection + int completed, incomplete, total; override void Init( Menu parent ) { Super.Init(parent); mTitle = StringTable.Localize("$SWWM_ATITLE"); mSelected = 0; + SWWMUtility.LoadAchievements(mItems,false); // gotta load it unfiltered first + total = mItems.Size(); SWWMUtility.LoadAchievements(mItems,true); ShouldObscure = (swwm_filterachievements==1); AchievementUnknown = TexMan.CheckForTexture("graphics/Achievements/HiddenAchievement.png",TexMan.Type_Any); @@ -24,6 +27,18 @@ Class SWWMAchievementMenu : GenericMenu BaseBox = TexMan.CheckForTexture("graphics/Achievements/NoAchievement.png",TexMan.Type_Any); } + override void Ticker() + { + // recalculate counters + completed = 0; + incomplete = 0; + for ( int i=0; i= 59) && (i <= 68) ) continue; - if ( (i >= 130) && (i <= 139) ) continue; + if ( (i >= 133) && (i <= 139) ) continue; ents.Push(i); } // account for skipped dlc tips (important, will crash otherwise) - maxtip -= 20; + maxtip -= 17; if ( pdata.lasttip.Size() >= maxtip ) { // exclude last one, start over diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 6284d770a..099683b26 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -612,8 +612,9 @@ Class mkFlyingGib : Actor { A_Bleed(); A_StartSound("misc/gibhit",CHAN_BODY,CHANF_OVERLAP); - // oops we got squished - if ( floorz >= ceilingz ) ExplodeMissile(null,null); + // gib stuck! + if ( (floorz >= ceilingz) || !level.IsPointInLevel(pos) ) + Destroy(); } Goto Spawn; Death: diff --git a/zscript/swwm_gesture_fx.zsc b/zscript/swwm_gesture_fx.zsc index 2b060399f..944d68f64 100644 --- a/zscript/swwm_gesture_fx.zsc +++ b/zscript/swwm_gesture_fx.zsc @@ -236,10 +236,10 @@ Class LoveHeart : Actor double fl, cl; if ( BlockingLine.sidedef[1] ) { - fl = min(BlockingLine.frontsector.floorplane.ZAtPoint(pos.xy),BlockingLine.backsector.floorplane.ZAtPoint(pos.xy)); - cl = max(BlockingLine.frontsector.ceilingplane.ZAtPoint(pos.xy),BlockingLine.backsector.ceilingplane.ZAtPoint(pos.xy)); - if ( max(floorz,pos.z) < fl ) LinePart = 0; - else if ( min(ceilingz,pos.z+height) > cl ) LinePart = 2; + fl = max(BlockingLine.frontsector.floorplane.ZAtPoint(pos.xy),BlockingLine.backsector.floorplane.ZAtPoint(pos.xy)); + cl = min(BlockingLine.frontsector.ceilingplane.ZAtPoint(pos.xy),BlockingLine.backsector.ceilingplane.ZAtPoint(pos.xy)); + if ( max(floorz,pos.z) < fl ) LinePart = 2; + else if ( min(ceilingz,pos.z+height) > cl ) LinePart = 0; else LinePart = 1; } else @@ -305,6 +305,7 @@ Class LoveHeart : Actor if ( target && target.player ) { int scr = (TexMan.GetName(HitTexture).Left(6)~=="ZZWOLF")?200:20; + if ( scr == 20 ) SWWMUtility.AchievementProgressInc('swwm_progress_doodle',1,player); SWWMCredits.Give(target.player,scr); if ( target.player == players[consoleplayer] ) SWWMScoreObj.Spawn(scr,pos); } @@ -312,11 +313,45 @@ Class LoveHeart : Actor { if ( Hit3DFloor ) { + // TODO connected textures for upper/lower if ( Hit3DFloor.flags&F3DFloor.FF_UPPERTEXTURE ) HitLine.sidedef[LineSide].SetTexture(0,replacewith); else if ( Hit3DFloor.flags&F3DFloor.FF_LOWERTEXTURE ) HitLine.sidedef[LineSide].SetTexture(2,replacewith); else Hit3DFloor.master.sidedef[0].SetTexture(1,replacewith); } - else HitLine.sidedef[LineSide].SetTexture(LinePart,replacewith); + else + { + // find connected sidedefs with the same texture + Array con; + con.Clear(); + con.Push(HitLine); + Sector s = LineSide?HitLine.backsector:HitLine.frontsector; + int found = 0; + do + { + found = 0; + for ( int i=0; i 0 ); + for ( int i=0; i con; + con.Clear(); + con.Push(HitSector); + int found; + do + { + found = 0; + for ( int i=0; i= con.Size()) ) + { + found++; + con.Push(l.frontsector); + } + if ( (l.backsector.GetTexture(1) == HitTexture) && (con.Find(l.backsector) >= con.Size()) ) + { + found++; + con.Push(l.backsector); + } + } + } + } + while ( found > 0 ); + for ( int i=0; i con; + con.Clear(); + con.Push(HitSector); + int found; + do + { + found = 0; + for ( int i=0; i= con.Size()) ) + { + found++; + con.Push(l.frontsector); + } + if ( (l.backsector.GetTexture(0) == HitTexture) && (con.Find(l.backsector) >= con.Size()) ) + { + found++; + con.Push(l.backsector); + } + } + } + } + while ( found > 0 ); + for ( int i=0; i 0) && (a.bBossSpawned || a.bCOUNTKILL) ) a.DamageMobj(self,self,a.Health,'EndMii',DMG_FORCED|DMG_THRUSTLESS); } - } Default diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 3d40210c0..9ceeb309f 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -171,7 +171,7 @@ Class Demolitionist : PlayerPawn for ( int i=0; i)(AllActorClasses[i]); - if ( !type || (type.GetParentClass() != "Ammo") ) + if ( !type || (type == "Ammo") || (type == "SWWMAmmo") || ((type.GetParentClass() != "Ammo") && (type.GetParentClass() != "SWWMAmmo")) ) continue; // Only give if it's for a valid weapon bool isvalid = false; @@ -341,13 +341,13 @@ Class Demolitionist : PlayerPawn if ( !(gameinfo.gametype&GAME_HEXEN) && (type is 'AmmoFabricator') ) continue; // no barriers outside doom if ( !(gameinfo.gametype&GAME_DOOM) && (type is 'EBarrier') ) continue; - // no gravity outside raven - if ( !(gameinfo.gametype&GAME_RAVEN) && (type is 'GravitySuppressor') ) continue; + // no gravity/tether outside raven + if ( !(gameinfo.gametype&GAME_RAVEN) && ((type is 'GravitySuppressor') || (type is 'SafetyTether')) ) continue; // Don't give maxed items let owned = FindInventory(type); if ( owned && (owned.Amount >= owned.MaxAmount) ) continue; let def = GetDefaultByType (type); - if ( def.Icon.isValid() && !(type is "PuzzleItem") && !(type is "Powerup") && !(type is "Ammo") && !(type is "MagAmmo") && !(type is "Armor") && !(type is "Key") ) + if ( def.Icon.isValid() && !(type is "PuzzleItem") && !(type is "Powerup") && !(type is "Ammo") && !(type is "MagAmmo") && !(type is "Armor") && !(type is "Key") && !(type is "DivineSpriteEffect") ) GiveInventory(type,(amount<=0)?def.MaxAmount:amount,true); } if ( !giveall ) return; @@ -529,17 +529,52 @@ Class Demolitionist : PlayerPawn A_StartSound("bestsound",CHAN_ITEMEXTRA,CHANF_OVERLAP); lastbump *= .97; int scr = (TexMan.GetName(d.HitTexture).Left(6)~=="ZZWOLF")?200:20; + if ( scr == 20 ) SWWMUtility.AchievementProgressInc('swwm_progress_doodle',1,player); SWWMCredits.Give(player,scr); if ( player == players[consoleplayer] ) SWWMScoreObj.Spawn(scr,d.HitLocation); if ( d.HitType == TRACE_HitWall ) { if ( d.Hit3DFloor ) { + // TODO connected textures for upper/lower if ( d.Hit3DFloor.flags&F3DFloor.FF_UPPERTEXTURE ) d.HitLine.sidedef[d.LineSide].SetTexture(0,replacewith); else if ( d.Hit3DFloor.flags&F3DFloor.FF_LOWERTEXTURE ) d.HitLine.sidedef[d.LineSide].SetTexture(2,replacewith); else d.Hit3DFloor.master.sidedef[0].SetTexture(1,replacewith); } - else d.HitLine.sidedef[d.LineSide].SetTexture(d.LinePart,replacewith); + else + { + // find connected sidedefs with the same texture + Array con; + con.Clear(); + con.Push(d.HitLine); + Sector s = d.LineSide?d.HitLine.backsector:d.HitLine.frontsector; + int found = 0; + do + { + found = 0; + for ( int i=0; i 0 ); + for ( int i=0; i con; + con.Clear(); + con.Push(d.HitSector); + int found; + do + { + found = 0; + for ( int i=0; i= con.Size()) ) + { + found++; + con.Push(l.frontsector); + } + if ( (l.backsector.GetTexture(1) == d.HitTexture) && (con.Find(l.backsector) >= con.Size()) ) + { + found++; + con.Push(l.backsector); + } + } + } + } + while ( found > 0 ); + for ( int i=0; i con; + con.Clear(); + con.Push(d.HitSector); + int found; + do + { + found = 0; + for ( int i=0; i= con.Size()) ) + { + found++; + con.Push(l.frontsector); + } + if ( (l.backsector.GetTexture(0) == d.HitTexture) && (con.Find(l.backsector) >= con.Size()) ) + { + found++; + con.Push(l.backsector); + } + } + } + } + while ( found > 0 ); + for ( int i=0; i 0 ) healcooldown--; else { - if ( health > 500 ) + if ( health > 1000 ) { - if ( !FindInventory("GrilledCheeseSafeguard") && !(healtimer%5) ) + let spr = DivineSpriteEffect(FindInventory("DivineSpriteEffect")); + if ( !spr || spr.bHealDone ) + A_SetHealth(max(1000,health-10)); + if ( health <= 1000 ) healcooldown = 40; + } + else if ( health > 500 ) + { + if ( !FindInventory("GrilledCheeseSafeguard") && !(healtimer%3) ) A_SetHealth(health-1); if ( health <= 500 ) healcooldown = 20; } else if ( health > 200 ) { - if ( !FindInventory("RefresherRegen") && !(healtimer%15) ) + if ( !FindInventory("RefresherRegen") && !(healtimer%12) ) A_SetHealth(health-1); } healtimer++; @@ -909,6 +1027,7 @@ Class Demolitionist : PlayerPawn { cairtime = 0; mystats.grounddist += traveldist; + SWWMUtility.AchievementProgressIncDouble('swwm_progress_travel',traveldist/32000.,player); } } else mystats.swimdist += traveldist; @@ -1061,7 +1180,15 @@ Class Demolitionist : PlayerPawn dashcooldown = max(0,dashcooldown-1); boostcooldown = max(0,boostcooldown-1); if ( fuelcooldown <= 0 ) + { + double oldfuel = dashfuel; dashfuel = min(default.dashfuel,dashfuel+clamp(dashfuel*.025,.1,3.)); + // stops + if ( (oldfuel < (default.dashfuel/24)) && (dashfuel >= default.dashfuel/24) ) + fuelcooldown = 20; + else if ( (oldfuel < (default.dashfuel/12)) && (dashfuel >= default.dashfuel/12) ) + fuelcooldown = 10; + } if ( ((dashboost <= 0) || !(isdashing || (isboosting && player.cmd.buttons&BT_JUMP))) && IsActorPlayingSound(CHAN_JETPACK,"demolitionist/jet") ) A_StartSound("demolitionist/jetstop",CHAN_JETPACK); PainChance = isdashing?0:255; @@ -1414,9 +1541,9 @@ Class Demolitionist : PlayerPawn private void CheckBreakCrusher() { double gaph = (ceilingz-floorz); - if ( gaph > height*.6 ) return; + if ( gaph > height*.8 ) return; // the smaller the gap, the more likely the crusher will snap - if ( Random[Demolitionist](0,3) && (FRandom[Demolitionist](0,gaph/height) > .1) ) return; + if ( Random[Demolitionist](0,2) && (FRandom[Demolitionist](0,gaph/height) > .2) ) return; double diffh = 8.+(default.height-gaph); // how much the crusher will have to "snap" after breaking let ceil = ceilingsector; let flor = floorsector; @@ -1445,6 +1572,7 @@ Class Demolitionist : PlayerPawn q.special1 = 10; SWWMCrusherBroken.Create(flor,null,diffh); } + SWWMUtility.MarkAchievement('swwm_achievement_crush',player); } override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) { @@ -1486,6 +1614,7 @@ Class Demolitionist : PlayerPawn if ( source.master ) source.master.Destroy(); source.Destroy(); damage = 20; // reduce so it's not instant kill + SWWMUtility.MarkAchievement('swwm_achievement_kancho',player); } } // no damage whatsoever diff --git a/zscript/swwm_statichandler.zsc b/zscript/swwm_statichandler.zsc index e549886b6..27cafd18c 100644 --- a/zscript/swwm_statichandler.zsc +++ b/zscript/swwm_statichandler.zsc @@ -139,26 +139,48 @@ Class SWWMStaticHandler : StaticEventHandler override void ConsoleProcess( ConsoleEvent e ) { - static const Name mmvars[] = - { - 'swwm_mm_backcolor', 'swwm_mm_cdwallcolor', - 'swwm_mm_efwallcolor', 'swwm_mm_fdwallcolor', - 'swwm_mm_gridcolor', 'swwm_mm_interlevelcolor', - 'swwm_mm_intralevelcolor', 'swwm_mm_lockedcolor', - 'swwm_mm_notseencolor', 'swwm_mm_portalcolor', - 'swwm_mm_secretsectorcolor', 'swwm_mm_secretwallcolor', - 'swwm_mm_specialwallcolor', 'swwm_mm_thingcolor', - 'swwm_mm_thingcolor_citem', 'swwm_mm_thingcolor_friend', - 'swwm_mm_thingcolor_item', 'swwm_mm_thingcolor_monster', - 'swwm_mm_thingcolor_ncmonster', 'swwm_mm_thingcolor_shootable', - 'swwm_mm_thingcolor_vipitem', 'swwm_mm_tswallcolor', - 'swwm_mm_unexploredsecretcolor', 'swwm_mm_wallcolor', - 'swwm_mm_xhaircolor', 'swwm_mm_yourcolor' - }; if ( e.Name ~== "swwmresetmmcolors" ) { - for ( int i=0; i cvarlist; + SWWMUtility.GetCVars(cvarlist); + for ( int i=0; i cvarlist; + SWWMUtility.GetCVars(cvarlist); + for ( int i=0; i cvarlist; + SWWMUtility.GetCVars(cvarlist); + for ( int i=0; i which ) { diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index fe7a72b15..917562fc9 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -161,8 +161,60 @@ Class SWWMUtility cv.SetFloat(cval+inc); } + // gets the names of all mod cvars + static clearscope void GetCVars( out Array cvarlist ) + { + cvarlist.Clear(); + let lmp = Wads.CheckNumForFullname("cvarinfo.base"); + if ( lmp == -1 ) ThrowAbortException("'cvarinfo.base' not found"); + String dat = Wads.ReadLump(lmp); + Array list, ln; + // fucking Windows + dat.Replace("\r",""); + list.Clear(); + dat.Split(list,"\n"); + for ( int i=0; i which ) + { + if ( !swwm_weapontooltips ) return; + CVar v = CVar.FindCVar('swwm_tooltipshown'); + String tt = v.GetString(); + Array wpn; + tt.Split(wpn,","); + for ( int i=0; i washit; + washit.Clear(); while ( bi.Next() ) { Actor a = bi.Thing; + washit.Push(a); // early checks for self and ignored actor (usually the instigator) if ( !a || (a == ignoreme) || (a == Source) ) continue; @@ -1129,6 +1194,76 @@ Class SWWMUtility if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl(); if ( (!a || (a.Health <= 0)) && (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nkill++; } + // traverse portals (needed since BlockThingsIterator can't properly cross sector portals in both vertical directions) + let hnd = SWWMHandler(EventHandler.Find("SWWMHandler")); + if ( !hnd || (hnd.psectors.Size() <= 1) ) return nhit, nkill; + int thisgroup = Source.CurSector.portalgroup; + for ( int i=0; i 0.) && !a.bDORMANT && !a.bDONTTHRUST && (a.Mass < Actor.LARGE_MASS) ) + { + Vector3 Momentum = dir*mm; + if ( (a.pos.z <= a.floorz) || !a.TestMobjZ() ) + Momentum.z = max(Momentum.z,(flags&DE_EXTRAZTHRUST?.4:.1)*Momentum.length()); + Momentum /= GameTicRate*max(50,a.Mass); // prevent tiny things from getting yeeted at warp speed + a.vel += Momentum; + if ( (flags&DE_BLAST) && a.bCANBLAST && !a.bDONTBLAST ) a.bBLASTED = true; + } + // hit it + bool inactive = (!a.player&&!a.target); + bool hostile = (Instigator&&a.IsHostile(Instigator)&&(a.bISMONSTER||a.player)); + if ( (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nhit++; + int dmg = int(Damage*damagescale); + if ( dmg <= 0 ) continue; // no harm + int ndmg = a.DamageMobj(Source,Instigator,dmg,(DamageType=='')?Source.DamageType:DamageType,DMG_EXPLOSION,atan2(-dir.y,-dir.x)); + if ( a && !(flags&DE_NOBLEED) ) a.TraceBleed((ndmg>0)?ndmg:dmg,Source); + if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl(); + if ( (!a || (a.Health <= 0)) && (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nkill++; + } + } return nhit, nkill; } @@ -1455,11 +1590,11 @@ Class SWWMUtility // shorthand for some of these checks (these are generally used by the mission briefing system) static bool IsKnownMap() { - if ( (gameinfo.gametype&GAME_DOOM) && (IsKnownCustomWAD() || CheckMD5List("vanilladoom.list")) ) + if ( (gameinfo.gametype&GAME_DOOM) && (IsKnownCustomWAD() || CheckMD5List("vanilladoom.lst")) ) return true; - if ( (gameinfo.gametype&GAME_HERETIC) && CheckMD5List("vanillaheretic.list") ) + if ( (gameinfo.gametype&GAME_HERETIC) && CheckMD5List("vanillaheretic.lst") ) return true; - if ( (gameinfo.gametype&GAME_HEXEN) && CheckMD5List("vanillahexen.list") ) + if ( (gameinfo.gametype&GAME_HEXEN) && CheckMD5List("vanillahexen.lst") ) return true; return false; } @@ -1467,7 +1602,7 @@ Class SWWMUtility // to be filled static bool IsKnownCustomWAD() { - if ( (gameinfo.gametype&GAME_DOOM) ) + if ( gameinfo.gametype&GAME_DOOM ) { if ( IsEviternity() ) return true; } @@ -1517,7 +1652,7 @@ Class SWWMUtility static bool CheckMD5List( String fname ) { String csum = level.GetChecksum(); - let lmp = Wads.FindLump(fname); + let lmp = Wads.CheckNumForFullName(fname); if ( lmp == -1 ) return false; String dat = Wads.ReadLump(lmp); // fucking Windows @@ -1558,9 +1693,25 @@ Class SWWMUtility if ( i is 'WarArmor' ) return true; if ( i is 'FuckingInvinciball' ) return true; if ( i is 'SWWMLamp' ) return true; + if ( i is 'AngerySigil' ) return true; return false; } + // returns the plural tag (if available) + static clearscope string GetAmmoTag( Inventory i ) + { + if ( i is 'MagAmmo' ) return StringTable.Localize("$T_"..MagAmmo(i).PickupTag.."S"); + if ( i is 'SWWMAmmo' ) return StringTable.Localize("$T_"..SWWMAmmo(i).PickupTag.."S"); + return i.GetTag(); + } + // because of zscript fuckery with GetDefaultByType + static clearscope string GetAmmoTagClass( Class i ) + { + if ( i is 'MagAmmo' ) return StringTable.Localize("$T_"..GetDefaultByType((Class)(i)).PickupTag.."S"); + if ( i is 'SWWMAmmo' ) return StringTable.Localize("$T_"..GetDefaultByType((Class)(i)).PickupTag.."S"); + return GetDefaultByType(i).GetTag(); + } + static bool, TextureID DefaceTexture( TextureID checkme ) { String tn = TexMan.GetName(checkme); @@ -1661,7 +1812,7 @@ Class SWWMUtility return true; if ( (target is 'GoldShell') || (target is 'YnykronAmmo') || (target is 'GrandAmmo') || (target is 'GrandSpear') || (target is 'UltimatePod') || (target is 'UltimateAmmo') ) return true; - if ( target is 'Mykradvo' ) + if ( (target is 'Mykradvo') || (target is 'AngerySigil') || (target is 'DivineSprite') ) return true; if ( target is 'PuzzleItem' ) return true; @@ -1675,7 +1826,7 @@ Class SWWMUtility return true; if ( (target is 'GoldShell') || (target is 'YnykronAmmo') || (target is 'GrandAmmo') || (target is 'GrandSpear') || (target is 'UltimatePod') || (target is 'UltimateAmmo') ) return true; - if ( target is 'Mykradvo' ) + if ( (target is 'Mykradvo') || (target is 'AngerySigil') || (target is 'DivineSprite') ) return true; return false; } @@ -1929,13 +2080,17 @@ Class ShinemapDebugSphere : Actor XZW1 G -1 A_SetRenderStyle(1.,STYLE_Normal); XZW1 H -1 A_SetRenderStyle(1.,STYLE_Normal); XZW1 I -1 A_SetRenderStyle(1.,STYLE_Normal); - XZW1 J -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 J -1 Bright A_SetRenderStyle(1.,STYLE_Add); XZW1 K -1 A_SetRenderStyle(1.,STYLE_Normal); - XZW1 L -1 A_SetRenderStyle(1.,STYLE_Normal); - XZW1 M -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 L -1 Bright A_SetRenderStyle(1.,STYLE_Add); + XZW1 M -1 Bright A_SetRenderStyle(1.,STYLE_Add); XZW1 N -1 A_SetRenderStyle(1.,STYLE_Normal); XZW1 O -1 A_SetRenderStyle(1.,STYLE_Normal); XZW1 P -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 Q -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 R -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 S -1 A_SetRenderStyle(1.,STYLE_Normal); + XZW1 T -1 A_SetRenderStyle(1.,STYLE_Normal); Loop; } } diff --git a/zscript/weapons/swwm_baseweapon.zsc b/zscript/weapons/swwm_baseweapon.zsc index ca3472904..9dd2afd26 100644 --- a/zscript/weapons/swwm_baseweapon.zsc +++ b/zscript/weapons/swwm_baseweapon.zsc @@ -9,9 +9,12 @@ Class SWWMWeapon : Weapon abstract transient bool hastravelled; transient int autoupsnd; private int SWeaponFlags; - + String tooltip; + bool tooltipsent; Class dropammotype; + int dropamount; + Property Tooltip : tooltip; Property DropAmmoType : dropammotype; FlagDef NoFirstGive : SWeaponFlags, 0; // don't give ammo on first pickup (for weapons with a clip count) @@ -231,7 +234,7 @@ Class SWWMWeapon : Weapon abstract SisterWeapon = AddWeapon(SisterWeaponType); if ( Owner.player ) { - if ( !Owner.player.GetNeverSwitch() && !bNo_Auto_Switch ) + if ( !Owner.player.GetNeverSwitch() && !bNo_Auto_Switch && ReportHUDAmmo() ) // hey, as long as it works Owner.player.PendingWeapon = self; if ( Owner.player.mo == players[consoleplayer].camera ) StatusBar.ReceivedWeapon(self); @@ -346,11 +349,21 @@ Class SWWMWeapon : Weapon abstract override void Tick() { Super.Tick(); - if ( Owner && autoupsnd && (level.maptime >= autoupsnd) ) + if ( !Owner ) return; + if ( autoupsnd && (level.maptime >= autoupsnd) ) { autoupsnd = 0; PlayUpSound(Owner); } + if ( !Owner.player || (Owner.player.ReadyWeapon != self) || !(Owner.player.WeaponState&WF_WEAPONSWITCHOK) || (Owner.player.WeaponState&WF_DISABLESWITCH) ) + { + tooltipsent = false; + return; + } + if ( tooltipsent ) return; + tooltipsent = true; + if ( Owner.player == players[consoleplayer] ) + SWWMUtility.SendTooltip(GetClass()); } action void A_SWWMFlash( StateLabel flashlabel = null ) { @@ -383,6 +396,7 @@ Class SWWMWeapon : Weapon abstract } override void ModifyDropAmount( int dropamount ) { + self.dropamount = dropamount; Super.ModifyDropAmount(dropamount); if ( (AmmoGive1 <= 0) && (default.AmmoGive1 > 0) ) AmmoGive1 = 1; @@ -400,17 +414,20 @@ Class SWWMWeapon : Weapon abstract return false; // drop us // drop our corresponding ammo if ( !DropAmmoType ) return true; - let a = Inventory(Spawn(DropAmmoType,pos,ALLOW_REPLACE)); + let a = Spawn(DropAmmoType,pos,ALLOW_REPLACE); if ( !a ) return true; a.bDROPPED = true; a.bNOGRAVITY = false; if ( !(level.compatflags&COMPATF_NOTOSSDROPS) ) a.TossItem(); - if ( a is 'Ammo' ) - a.ModifyDropAmount(Ammo(a).DropAmount); - a.bTOSSED = true; - if ( a.SpecialDropAction(dropper) ) - a.Destroy(); + if ( a is 'Inventory' ) + { + let i = Inventory(a); + i.ModifyDropAmount(dropamount); + i.bTOSSED = true; + if ( i.SpecialDropAction(dropper) ) + i.Destroy(); + } return true; } // no weapon drops from enemies diff --git a/zscript/weapons/swwm_baseweapon_melee.zsc b/zscript/weapons/swwm_baseweapon_melee.zsc index e685e4e3c..e0274ccef 100644 --- a/zscript/weapons/swwm_baseweapon_melee.zsc +++ b/zscript/weapons/swwm_baseweapon_melee.zsc @@ -138,10 +138,12 @@ Class ParryField : Actor while ( a = Actor(ti.Next()) ) { if ( (justparried.Find(a) < justparried.Size()) || !(SWWMUtility.ValidProjectile(a) || a.bSKULLFLY) || a.bTHRUACTORS || (level.Vec3Diff(a.pos,pos).length() > 80) ) continue; + if ( a is 'Whirlwind' ) SWWMUtility.MarkAchievement('swwm_achievement_tornado',master.player); justparried.Push(a); Vector3 vdir = a.vel; Vector3 dir = level.Vec3Diff(master.Vec2OffsetZ(0,0,pos.z),a.pos).unit(); Vector3 hdir = dir; + Actor oldtarget = a.target; if ( (a.target != master) && (a.bMISSILE || (a is 'HolySpirit')) ) // special wraithverge handling { // deflect directly to target @@ -161,6 +163,7 @@ Class ParryField : Actor { buff = Inventory(Spawn("ParriedBuff")); buff.AttachToOwner(a); + buff.tracer = oldtarget; } double mvel = a.vel.length(); double nspeed = min(100,mvel*FRandom[Parry](1.2,1.4)+20); @@ -199,6 +202,8 @@ Class ParryField : Actor if ( s ) s.pparries++; } critsnd = true; + if ( (a is 'LostSoul') && (master.player.ReadyWeapon is 'SilverBullet') ) + SWWMUtility.MarkAchievement('swwm_achievement_baseball',master.player); } if ( s ) s.parries++; SWWMUtility.AchievementProgressInc('swwm_progress_parry',1,master.player); diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index 44ec9849b..102d34dd2 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -367,7 +367,6 @@ Class Hellblazer : SWWMWeapon override void AttachToOwner( Actor other ) { - Super.AttachToOwner(other); if ( !loadammo ) { // 3 hellblazer missiles loaded @@ -378,6 +377,7 @@ Class Hellblazer : SWWMWeapon magstate[i] = (i>2); } nextammo = loadammo; + Super.AttachToOwner(other); } clearscope int LoadedCapacity() const @@ -652,6 +652,7 @@ Class Hellblazer : SWWMWeapon Tag "$T_HELLBLAZER"; Inventory.PickupMessage "$I_HELLBLAZER"; Obituary "$O_HELLBLAZER"; + SWWMWeapon.Tooltip "$TT_HELLBLAZER"; Inventory.Icon "graphics/HUD/Icons/W_Hellblazer.png"; Weapon.SlotNumber 6; Weapon.SelectionOrder 700; diff --git a/zscript/weapons/swwm_cbt.zsc b/zscript/weapons/swwm_cbt.zsc index cd340f48e..829338540 100644 --- a/zscript/weapons/swwm_cbt.zsc +++ b/zscript/weapons/swwm_cbt.zsc @@ -262,7 +262,6 @@ Class Wallbuster : SWWMWeapon } override void AttachToOwner( Actor other ) { - Super.AttachToOwner(other); if ( !initialized ) { // first wallbuster has five barrels loaded @@ -272,6 +271,7 @@ Class Wallbuster : SWWMWeapon for ( int i=0; i<25; i++ ) fired[i] = false; } + Super.AttachToOwner(other); } override void DetachFromOwner() { @@ -852,6 +852,7 @@ Class Wallbuster : SWWMWeapon Tag "$T_WALLBUSTER"; Inventory.PickupMessage "$I_WALLBUSTER"; Obituary "$O_WALLBUSTER_RED"; + SWWMWeapon.Tooltip "$TT_WALLBUSTER"; Inventory.Icon "graphics/HUD/Icons/W_Wallbuster.png"; Weapon.SlotNumber 4; Weapon.SelectionOrder 400; diff --git a/zscript/weapons/swwm_danmaku.zsc b/zscript/weapons/swwm_danmaku.zsc index 4ce5d55b0..d32151618 100644 --- a/zscript/weapons/swwm_danmaku.zsc +++ b/zscript/weapons/swwm_danmaku.zsc @@ -285,6 +285,7 @@ Class Eviscerator : SWWMWeapon Tag "$T_EVISCERATOR"; Inventory.PickupMessage "$I_EVISCERATOR"; Obituary "$O_EVISCERATOR"; + SWWMWeapon.Tooltip "$TT_EVISCERATOR"; Inventory.Icon "graphics/HUD/Icons/W_Eviscerator.png"; Weapon.SlotNumber 5; Weapon.UpSound "eviscerator/select"; diff --git a/zscript/weapons/swwm_deathlydeathcannon.zsc b/zscript/weapons/swwm_deathlydeathcannon.zsc index df3d3784f..87ae87f2d 100644 --- a/zscript/weapons/swwm_deathlydeathcannon.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon.zsc @@ -237,6 +237,7 @@ Class Ynykron : SWWMWeapon Tag "$T_YNYKRON"; Inventory.PickupMessage "$T_YNYKRON"; Obituary "$O_YNYKRON"; + SWWMWeapon.Tooltip "$TT_YNYKRON"; Inventory.Icon "graphics/HUD/Icons/W_Ynykron.png"; Weapon.SlotNumber 0; Weapon.SelectionOrder 9000; diff --git a/zscript/weapons/swwm_deepdarkimpact.zsc b/zscript/weapons/swwm_deepdarkimpact.zsc index 2ad188988..5ead361e0 100644 --- a/zscript/weapons/swwm_deepdarkimpact.zsc +++ b/zscript/weapons/swwm_deepdarkimpact.zsc @@ -326,6 +326,7 @@ Class DeepImpact : SWWMWeapon Tag "$T_DEEPIMPACT"; Inventory.PickupMessage "$I_DEEPIMPACT"; Obituary "$O_DEEPIMPACT_WEAK"; + SWWMWeapon.Tooltip "$TT_DEEPIMPACT"; Inventory.Icon "graphics/HUD/Icons/W_DeepImpact.png"; Weapon.UpSound "deepimpact/select"; Weapon.SlotNumber 1; diff --git a/zscript/weapons/swwm_jackhammer.zsc b/zscript/weapons/swwm_jackhammer.zsc index 209686b3f..6754070a6 100644 --- a/zscript/weapons/swwm_jackhammer.zsc +++ b/zscript/weapons/swwm_jackhammer.zsc @@ -256,6 +256,7 @@ Class PusherWeapon : SWWMWeapon Tag "$T_PUSHER"; Inventory.PickupMessage "$I_PUSHER"; Obituary "$O_PUSHER"; + SWWMWeapon.Tooltip "$TT_PUSHER"; Inventory.Icon "graphics/HUD/Icons/W_Pusher.png"; Weapon.UpSound "pusher/select"; Weapon.SlotNumber 1; diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 9fac082f8..5ba0eefb4 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -704,7 +704,6 @@ Class Spreadgun : SWWMWeapon override void AttachToOwner( Actor other ) { static const Class types[] = {"RedShell","GreenShell","WhiteShell","BlueShell","BlackShell","PurpleShell","GoldShell"}; - Super.AttachToOwner(other); if ( !initialized ) { initialized = true; @@ -717,9 +716,11 @@ Class Spreadgun : SWWMWeapon Ammo a = Ammo(other.FindInventory(types[i])); if ( !a ) continue; nextammo = types[i]; + Super.AttachToOwner(other); return; } nextammo = AmmoType1; + Super.AttachToOwner(other); } action void A_SwitchAmmoType( bool rev = false ) @@ -885,6 +886,7 @@ Class Spreadgun : SWWMWeapon Tag "$T_SPREADGUN"; Inventory.PickupMessage "$I_SPREADGUN"; Obituary "$O_SPREADGUN"; + SWWMWeapon.Tooltip "$TT_SPREADGUN"; Inventory.Icon "graphics/HUD/Icons/W_Spreadgun.png"; Weapon.UpSound "spreadgun/select"; Weapon.SlotNumber 3; diff --git a/zscript/weapons/swwm_sparkyboi.zsc b/zscript/weapons/swwm_sparkyboi.zsc index 5b249c007..8edbd7ff7 100644 --- a/zscript/weapons/swwm_sparkyboi.zsc +++ b/zscript/weapons/swwm_sparkyboi.zsc @@ -254,6 +254,7 @@ Class Sparkster : SWWMWeapon Tag "$T_SPARKSTER"; Inventory.PickupMessage "$I_SPARKSTER"; Obituary "$O_SPARKSTER"; + SWWMWeapon.Tooltip "$TT_SPARKSTER"; Inventory.Icon "graphics/HUD/Icons/W_Sparkster.png"; Weapon.SlotNumber 7; Weapon.UpSound "biospark/select"; diff --git a/zscript/weapons/swwm_splode.zsc b/zscript/weapons/swwm_splode.zsc index b7a0a7aca..b899247c8 100644 --- a/zscript/weapons/swwm_splode.zsc +++ b/zscript/weapons/swwm_splode.zsc @@ -10,6 +10,7 @@ Class ExplodiumGun : SWWMWeapon double casex, casey; transient ui TextureID WeaponBox; transient ui Font TewiFont; + int deadeyecnt; Property ClipCount : ClipCount; @@ -111,12 +112,17 @@ Class ExplodiumGun : SWWMWeapon SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { + if ( d.HitActor.IsHostile(self) ) + { + invoker.deadeyecnt++; + SWWMUtility.AchievementProgress('swwm_progress_deadeye',invoker.deadeyecnt,player); + } int dmg = 15; // might as well apply explosion on top if ( dmg >= d.HitActor.Health ) dmg += 20; SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000); dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Explodium',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x)); - if ( d.HitActor.bNOBLOOD || d.HitActor.bDORMANT || d.HitActor.bINVULNERABLE ) + if ( !d.HitActor || d.HitActor.bNOBLOOD || d.HitActor.bDORMANT || d.HitActor.bINVULNERABLE ) { let p = Spawn("SWWMBulletImpact",d.HitLocation); p.angle = atan2(d.HitDir.y,d.HitDir.x)+180; @@ -134,6 +140,7 @@ Class ExplodiumGun : SWWMWeapon } else if ( d.HitType != TRACE_HitNone ) { + invoker.deadeyecnt = 0; Vector3 hitnormal = -d.HitDir; if ( d.HitType == TRACE_HitFloor ) { @@ -160,6 +167,7 @@ Class ExplodiumGun : SWWMWeapon b.target = self; if ( swwm_omnibust ) BusterWall.BustLinetrace(d,50,self,d.HitDir,d.HitLocation.z); } + else invoker.deadeyecnt = 0; for ( int i=0; i<6; i++ ) { let s = Spawn("SWWMSmoke",origin); @@ -172,6 +180,7 @@ Class ExplodiumGun : SWWMWeapon action void A_ThrowMag() { + invoker.deadeyecnt = 0; let weap = Weapon(invoker); if ( !weap ) return; Vector3 x, y, z, x2, y2, z2; @@ -192,6 +201,7 @@ Class ExplodiumGun : SWWMWeapon action void A_DropMag() { + invoker.deadeyecnt = 0; if ( swwm_nomagdrop ) return; Vector3 x, y, z; [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); @@ -318,6 +328,7 @@ Class ExplodiumGun : SWWMWeapon Tag "$T_EXPLODIUM"; Inventory.PickupMessage "$T_EXPLODIUM"; Obituary "$O_EXPLODIUM"; + SWWMWeapon.Tooltip "$TT_EXPLODIUM"; Inventory.Icon "graphics/HUD/Icons/W_ExplodiumGun.png"; Weapon.UpSound "explodium/select"; Weapon.SlotNumber 2; @@ -338,6 +349,7 @@ Class ExplodiumGun : SWWMWeapon Select: XZW2 B 2 { + invoker.deadeyecnt = 0; A_FullRaise(); return A_JumpIf(invoker.firstselect,"FirstSelect"); } @@ -665,6 +677,11 @@ Class DualExplodiumGun : SWWMWeapon SWWMBulletTrail.DoTrail(self,origin,dir,10000,2); if ( d.HitType == TRACE_HitActor ) { + if ( d.HitActor.IsHostile(self) ) + { + ExplodiumGun(invoker.SisterWeapon).deadeyecnt++; + SWWMUtility.AchievementProgress('swwm_progress_deadeye',ExplodiumGun(invoker.SisterWeapon).deadeyecnt,player); + } int dmg = 15; // might as well apply explosion on top if ( dmg >= d.HitActor.Health ) dmg += 20; @@ -688,6 +705,7 @@ Class DualExplodiumGun : SWWMWeapon } else if ( d.HitType != TRACE_HitNone ) { + ExplodiumGun(invoker.SisterWeapon).deadeyecnt = 0; Vector3 hitnormal = -d.HitDir; if ( d.HitType == TRACE_HitFloor ) { @@ -714,6 +732,7 @@ Class DualExplodiumGun : SWWMWeapon b.target = self; if ( swwm_omnibust ) BusterWall.BustLinetrace(d,50,self,d.HitDir,d.HitLocation.z); } + else ExplodiumGun(invoker.SisterWeapon).deadeyecnt = 0; for ( int i=0; i<6; i++ ) { let s = Spawn("SWWMSmoke",origin); @@ -726,6 +745,7 @@ Class DualExplodiumGun : SWWMWeapon action void A_DropMag( int side = 1 ) { + ExplodiumGun(invoker.SisterWeapon).deadeyecnt = 0; if ( swwm_nomagdrop ) return; Vector3 x, y, z; [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); @@ -772,6 +792,7 @@ Class DualExplodiumGun : SWWMWeapon { Tag "$T_EXPLODIUM2"; Obituary "$O_EXPLODIUM"; + SWWMWeapon.Tooltip "$TT_EXPLODIUM2"; Inventory.Icon "graphics/HUD/Icons/W_ExplodiumGun2.png"; Weapon.UpSound "explodium/select"; Weapon.SisterWeapon "ExplodiumGun"; @@ -788,6 +809,7 @@ Class DualExplodiumGun : SWWMWeapon Select: XZW2 B 2 { + ExplodiumGun(invoker.SisterWeapon).deadeyecnt = 0; A_FullRaise(); ExplodiumGun(invoker.SisterWeapon).firstselect = false; } diff --git a/zscript/weapons/swwm_splode_fx.zsc b/zscript/weapons/swwm_splode_fx.zsc index 8fa9bdb46..2a8c51636 100644 --- a/zscript/weapons/swwm_splode_fx.zsc +++ b/zscript/weapons/swwm_splode_fx.zsc @@ -64,7 +64,11 @@ Class ExplodiumMagArm : Actor { Spawn("ExplodiumMagTrail",pos); if ( !(ReactionTime%2) ) - SWWMUtility.DoExplosion(self,2+reactiontime/2,3000+500*reactiontime,40+3*reactiontime,20); + { + int nhit, nkill; + [nhit, nkill] = SWWMUtility.DoExplosion(self,2+reactiontime/2,3000+500*reactiontime,40+3*reactiontime,20,DE_COUNTENEMIES); + if ( target && special1 ) SWWMUtility.AchievementProgressInc('swwm_progress_grenade',nkill,target.player); + } Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5); let s = Spawn("SWWMHalfSmoke",pos); s.vel = pvel+vel*.2; @@ -147,13 +151,16 @@ Class ExplodiumMagProj : Actor } void A_BlowUp() { + bool isplanted = (self is 'ExplodiumMagAttach'); angle = atan2(cvel.y,cvel.x); pitch = asin(-cvel.z); bNOGRAVITY = true; A_SetRenderStyle(1.,STYLE_Add); Scale *= 2.+.2*special1; A_AlertMonsters(swwm_uncapalert?0:6000); - SWWMUtility.DoExplosion(self,10+20*special1,80000+8000*special1,90+10*special1,60,DE_EXTRAZTHRUST); + int nhit, nkill; + [nhit, nkill] = SWWMUtility.DoExplosion(self,10+20*special1,80000+8000*special1,90+10*special1,60,DE_EXTRAZTHRUST|DE_COUNTENEMIES); + if ( target && isplanted ) SWWMUtility.AchievementProgressInc('swwm_progress_grenade',nkill,target.player); A_QuakeEx(9,9,9,30,0,400+80*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollintensity:2.); A_StartSound("explodium/maghit",CHAN_VOICE,attenuation:.35); A_StartSound("explodium/maghit",CHAN_WEAPON,attenuation:.2); @@ -191,6 +198,7 @@ Class ExplodiumMagProj : Actor { let s = Spawn("ExplodiumMagArm",pos); s.target = target; + s.special1 = isplanted; } Spawn("ExploLight2",pos); if ( swwm_omnibust ) BusterWall.ProjectileBust(self,20+15*special1,cvel); diff --git a/zscript/weapons/swwm_tastytreat.zsc b/zscript/weapons/swwm_tastytreat.zsc index 0721feb66..7508ee73f 100644 --- a/zscript/weapons/swwm_tastytreat.zsc +++ b/zscript/weapons/swwm_tastytreat.zsc @@ -42,7 +42,7 @@ Class CandyGun : SWWMWeapon bool gotstuff = false, gotspares = false; int oldamount = ownedWeapon.Ammo1.Amount; gotstuff = AddExistingAmmo(ownedWeapon.Ammo1,AmmoGive1); - gotspares = AddExistingAmmo(ownedWeapon.Ammo2,AmmoGive2); + gotspares = AddExistingAmmo(ownedWeapon.Ammo2,1); // always give one of ourselves, always let Owner = ownedWeapon.Owner; if ( gotstuff && Owner && Owner.player && (oldamount == 0) ) PlayerPawn(Owner).CheckWeaponSwitch(ownedWeapon.Ammo1.GetClass()); @@ -339,6 +339,7 @@ Class CandyGun : SWWMWeapon Tag "$T_CANDYGUN"; Inventory.PickupMessage "$I_CANDYGUN"; Obituary "$O_CANDYGUN"; + SWWMWeapon.Tooltip "$TT_CANDYGUN"; Inventory.Icon "graphics/HUD/Icons/W_CandyGun.png"; Weapon.UpSound "explodium/select"; Weapon.SlotNumber 9; @@ -347,7 +348,7 @@ Class CandyGun : SWWMWeapon Weapon.AmmoType1 "CandyGunAmmo"; Weapon.AmmoType2 "CandyGunSpares"; Weapon.AmmoGive1 1; - Weapon.AmmoGive2 1; + Weapon.AmmoGive2 0; Weapon.AmmoUse2 0; SWWMWeapon.DropAmmoType "CandyGunAmmo"; CandyGun.ClipCount 7; diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index bfdedde1c..0f2cd04dd 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -937,6 +937,7 @@ Class SilverBullet : SWWMWeapon Tag "$T_SILVERBULLET"; Inventory.PickupMessage "$T_SILVERBULLET"; Obituary "$O_SILVERBULLET"; + SWWMWeapon.Tooltip "$TT_SILVERBULLET"; Inventory.Icon "graphics/HUD/Icons/W_SilverBullet.png"; Weapon.SlotNumber 8; Weapon.SelectionOrder 800;