Sigil 2 (v1.0) and Eviternity 2 (RC5) support.

+ Invinciball activation now voiced by Demo (thanks, Vyolette).
+ Retooled exit line merging (should fix those pesky duplicate exit markers).

Note: Oneliners for the Eviternity 2 final boss are not voiced yet.
This commit is contained in:
Marisa the Magician 2024-01-04 19:50:26 +01:00
parent 9a252b72fe
commit cbb1b2a8cb
36 changed files with 1177 additions and 165 deletions

View File

@ -44,6 +44,9 @@ More weapons, because we need 'em. In addition, a bunch of cleanup in base weapo
- [x] Wallbuster tops up buckshot one cylinder at a time until stopped
- [x] Remove all missile types except blazers, and rewrite the absolute mess of code the Hellblazer currently is
- [x] Remove FCB rounds, and simplify Silver Bullet JET inputs
* [x] **Additional WAD Compatibility:**
- [x] SIGIL 2
- [x] Eviternity 2
## 1.4 update *(Fine Refinements)*:

View File

@ -34,6 +34,13 @@ DLG SIGIL
DELAY 40
ENDSEQ
ENDDLG
DLG SIGIL2
SEQ CYTHO
NAME CYTHOSIGIL2
CNT 4
DELAY 40
ENDSEQ
ENDDLG
# Doom 2
DLG DIMPLE
SEQ SAYA
@ -134,3 +141,117 @@ DLG EVIB
DELAY 20
ENDSEQ
ENDDLG
DLG EV2A
SEQ SAYA
NAME SAYAEV2A
CNT 4
DELAY 40
ENDSEQ
ENDDLG
DLG EV2B
SEQ SAYA
NAME SAYAEV2B
CNT 5
DELAY 30
ENDSEQ
ENDDLG
DLG EV2C
SEQ SAYA
NAME SAYAEV2C
CNT 2
DELAY 20
ENDSEQ
ENDDLG
DLG EV2D
SEQ SAYA
NAME SAYAEV2D
CNT 2
DELAY 30
ENDSEQ
ENDDLG
DLG EV2E
SEQ SAYA
NAME SAYAEV2E
CNT 4
DELAY 40
ENDSEQ
ENDDLG
DLG EV2F
SEQ SAYA
NAME SAYAEV2F
CNT 4
DELAY 40
ENDSEQ
ENDDLG
DLG EV2G
SEQ SAYA
NAME SAYAEV2G
CNT 4
DELAY 40
ENDSEQ
ENDDLG
DLG EV2H
SEQ SAYA
NAME SAYAEV2H
CNT 3
DELAY 40
ENDSEQ
ENDDLG
DLG EV2I
SEQ SAYA
NAME SAYAEV2I
CNT 4
DELAY 40
ENDSEQ
ENDDLG
DLG EV2J
SEQ SAYA
NAME SAYAEV2J
CNT 2
DELAY 120
ENDSEQ
ENDDLG
DLG EV2K
SEQ SAYA
NAME SAYAEV2K
CNT 2
DELAY 40
ENDSEQ
ENDDLG
DLG EV2L
SEQ SAYA
NAME SAYAEV2L
CNT 2
DELAY 20
ENDSEQ
ENDDLG
DLG EV2M
SEQ SAYA
NAME SAYAEV2M
CNT 1
DELAY 20
ENDSEQ
ENDDLG
DLG EV2N
SEQ SAYA
NAME SAYAEV2N
CNT 2
DELAY 20
ENDSEQ
ENDDLG
DLG EV2O
SEQ SAYA
NAME SAYAEV2O
CNT 1
DELAY 20
ENDSEQ
ENDDLG
DLG EV2P
SEQ SAYA
NAME SAYAEV2P
CNT 3
DELAY 20
STARTDELAY 10
ENDDELAY 20
ENDSEQ
ENDDLG

View File

@ -315,12 +315,13 @@ FN_SPIDER_FUN2 = "Big Momma";
FN_SPIDER_FUN3 = "Oversized Krang";
FN_SPIDER_FUN4 = "Not Mother Brain";
FN_SPIDER_FUN5 = "Massive Nerd";
FN_CYBER_FUNN = "5";
FN_CYBER_FUNN = "6";
FN_CYBER_FUN1 = "Dat Ass";
FN_CYBER_FUN2 = "An Arm And A Leg";
FN_CYBER_FUN3 = "My Goat Is Augmented";
FN_CYBER_FUN3 = "My Cow Is Augmented";
FN_CYBER_FUN4 = "Circlestrafe Practice";
FN_CYBER_FUN5 = "Shoot At It Until It Dies";
FN_CYBER_FUN6 = "Moo Cow";
FN_WOLFSS_FUNN = "3";
FN_WOLFSS_FUN1 = "Mein Lieben";
FN_WOLFSS_FUN2 = "Blondie";
@ -357,14 +358,14 @@ FN_MUMMY_FUN1 = "Toilet Paper";
FN_MUMMY_FUN2 = "Mediocre Mummy";
FN_MUMMY_FUN3 = "Crappy Golem";
FN_MUMMYLEADER_FUNN = "3";
FN_MUMMYLEADER_FUN1 = "Toilet Paper whomst Scream";
FN_MUMMYLEADER_FUN2 = "Mediocre Mummy whomst Scream";
FN_MUMMYLEADER_FUN3 = "Crappy Golem whomst Scream";
FN_MUMMYLEADER_FUN1 = "Toilet Paper Whomst Scream";
FN_MUMMYLEADER_FUN2 = "Mediocre Mummy Whomst Scream";
FN_MUMMYLEADER_FUN3 = "Crappy Golem Whomst Scream";
FN_SNAKE_FUNN = "2";
FN_SNAKE_FUN1 = "Snek";
FN_SNAKE_FUN2 = "No Steppy";
FN_WIZARD_FUNN = "4";
FN_WIZARD_FUN1 = "Yer a Wizard, Harry";
FN_WIZARD_FUN1 = "Yer A Wizard, Harry";
FN_WIZARD_FUN2 = "A Wizard Did It";
FN_WIZARD_FUN3 = "Magic Man";
FN_WIZARD_FUN4 = "Floating Rags";
@ -379,7 +380,7 @@ FN_DEMON1_FUN3 = "Big Chomper";
FN_DEMON1_FUN4 = "Goatee Haver";
FN_ETTIN_FUNN = "3";
FN_ETTIN_FUN1 = "Double Boi";
FN_ETTIN_FUN2 = "Idiot with Club";
FN_ETTIN_FUN2 = "Idiot With Club";
FN_ETTIN_FUN3 = "Low Level Mook";
FN_CENTAUR_FUNN = "3";
FN_CENTAUR_FUN1 = "Shield Idiot";
@ -448,6 +449,69 @@ FN_NDEMON_FUNN = "3";
FN_NDEMON_FUN1 = "Greenie";
FN_NDEMON_FUN2 = "Angry Greens";
FN_NDEMON_FUN3 = "Spinach Demon";
// eviternity 2 tags
FN_FCORPORAL = "Former Corporal";
FN_FCORPORAL_FUNN = "3";
FN_FCORPORAL_FUN1 = "Green Schmuck";
FN_FCORPORAL_FUN2 = "Big Bullet Zomb";
FN_FCORPORAL_FUN3 = "Zombogreen";
FN_ASTRALARACH = "Astral Arachnotron";
FN_ASTRALARACH_FUNN = "4";
FN_ASTRALARACH_FUN1 = "Nasty Spammer";
FN_ASTRALARACH_FUN2 = "Barrage Baby";
FN_ASTRALARACH_FUN3 = "Lotsa Plasmas";
FN_ASTRALARACH_FUN4 = "Grayed Spooder";
FN_VEILIMP = "Veil Imp";
FN_VEILIMP_FUNN = "5";
FN_VEILIMP_FUN1 = "Hot Pink";
FN_VEILIMP_FUN2 = "Blink Twink";
FN_VEILIMP_FUN3 = "Fuchsia Boy";
FN_VEILIMP_FUN4 = "He Teleport";
FN_VEILIMP_FUN5 = "Oversaturated";
FN_ASTRALGOLD = "Golden Astral Cacodemon";
FN_ASTRALGOLD_FUNN = "5";
FN_ASTRALGOLD_FUN1 = "Golden Boy";
FN_ASTRALGOLD_FUN2 = "Ball O' Gold";
FN_ASTRALGOLD_FUN3 = "Shiny Cacodemon";
FN_ASTRALGOLD_FUN4 = "Bling Ball";
FN_ASTRALGOLD_FUN5 = "Rich Friend";
FN_DUKE = "Duke Of Hell";
FN_DUKE_FUNN = "6";
FN_DUKE_FUN1 = "Balls Of Green";
FN_DUKE_FUN2 = "Duki Nuki";
FN_DUKE_FUN3 = "Hell Duck";
FN_DUKE_FUN4 = "Douche of Hell";
FN_DUKE_FUN5 = "The Goat Is Green";
FN_DUKE_FUN6 = "Brazil";
FN_ASTRALBABY = "Astral Baby Cacodemon";
FN_ASTRALBABY_FUNN = "4";
FN_ASTRALBABY_FUN1 = "Smol Husk";
FN_ASTRALBABY_FUN2 = "Adorable";
FN_ASTRALBABY_FUN3 = "Little Gray Ball";
FN_ASTRALBABY_FUN4 = "Fun-Sized Hisser";
FN_NAC = "Nightmare Astral Cacodemon";
FN_NAC_FUNN = "6";
FN_NAC_FUN1 = "Holy Fuckball";
FN_NAC_FUN2 = "Spooky Green Hiss";
FN_NAC_FUN3 = "Horrifying";
FN_NAC_FUN4 = "Terrifying";
FN_NAC_FUN5 = "SCARY";
FN_NAC_FUN6 = "Hardcore Meatball";
FN_ASTRALFATSO = "Astral Mancubus";
FN_ASTRALFATSO_FUNN = "4";
FN_ASTRALFATSO_FUN1 = "Big Fuck";
FN_ASTRALFATSO_FUN2 = "Fat Bastard";
FN_ASTRALFATSO_FUN3 = "Dark Fats";
FN_ASTRALFATSO_FUN4 = "Charred Lard";
FN_NECROMENACE = "Necromenace";
FN_NECROMENACE_FUNN = "5";
FN_NECROMENACE_FUN1 = "Rise From Your Grave";
FN_NECROMENACE_FUN2 = "Resurrector Bastard";
FN_NECROMENACE_FUN3 = "Oh Fuck No";
FN_NECROMENACE_FUN4 = "10000 Points Off";
FN_NECROMENACE_FUN5 = "Hey Guess What";
FN_EVITERNATUS = "The Origin";
FN_EVITERNATUS_FUN = "Ball O' Wings";
// ultimate doom 2 tags
FN_ELITEZOMBIE = "Elite Zombie";
FN_ELITEZOMBIE_FUNN = "3";
@ -592,6 +656,24 @@ OBITUARY_NIGHTMAREDEMON = "%o got scronched.";
OB_ANGEL1 = "%o pissed off that angel.";
OB_ANGEL2 = "%o really pissed off that angel.";
OB_ASTRAL = "%o got scorched by a gray ball friend.";
// eviternity 2 obituaries
OB_CORPORAL = "%o caught a big bullet from that green dude.";
OB_ASTRALBABY = "%o ate a whole lot of plasma.";
OB_NIGHTMARE = "$$OBITUARY_NIGHTMAREDEMON";
OB_ANNIHILATOR = "$$OBITUARY_ANNIHILATOR";
OB_ASTRALCACO = "$$OB_ASTRAL";
OB_VEILIMP = "%o got scalded by some pink punk.";
OB_GOLDENCACO = "%o thinks that might have been a bit too much.";
OB_DUKE = "%o was sent to Brazil.";
OB_ASTRALKIRBY = "%o got scorched by a very small gray ball friend.";
OB_NAC = "%o couldn't outrun that green thing.";
OB_ASTRALFATSO = "%o REALLY got down with the thiccness.";
OB_NECRO = "%o got fucked over by that stupid necromancer.";
OB_NECROF = "%o was spooked by freaky ghosts.";
OB_GOLDENBOSS = "%o certainly believes that was too much.";
OB_EVITERNATUS1 = "%o messed with the wrong angel.";
OB_EVITERNATUS2 = "%o really pissed off that ball 'o wings.";
OB_EVITERNATUS3 = "%o did not expect there to be a third round.";
// ultimate doom 2 obituaries
OB_ELITEZOMBIE = "%o was shot rapidly by some elite guy.";
// misc
@ -845,6 +927,9 @@ BT_DOOMTEST = "Oatley, Bane of the Quakers";
// eviternity
BT_ARCHANGELUS = "Archangelus, Celestial Agent";
BT_ARCHANGELUS_FUN = "Big Fucking Angel Dude";
// eviternity 2
BT_EVITERNATUS = "The Origin Of Astral Blight";
BT_EVITERNATUS_FUN = "Biblically Accurate Angel";
// boss oneliners
BOSSLINE_IOS = "\crIcon of Sin\c*: !oremoR nhoJ ,em llik tsum uoy emag eht niw oT\c*";
BOSSLINE_DSPARIL = "\cgD'Sparil\c*: .hself ruoy erutrot lliw I\c*";

View File

@ -36,6 +36,11 @@ SWWM_CYTHOSIGIL1 = "\cdDemo\c-, this is \cvCytho\c-. I've got an important messa
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?";
// E6M8
SWWM_CYTHOSIGIL21 = "Ah, good, you're pretty close to their rearguard.";
SWWM_CYTHOSIGIL22 = "If we play our cards right, this should catch them by surprise.";
SWWM_CYTHOSIGIL23 = "Neutralizing the lieutenants in this area will deal a major blow, no doubt about it.";
SWWM_CYTHOSIGIL24 = "They won't even know what hit them, they won't see you coming. Go for it, \cdDemo\c-!";
// 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.";
@ -112,6 +117,61 @@ SWWM_SAYAEVIA3 = "This whole place, though... Damn, I sure hope you've taken a l
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-!";
// Eviternity 2 MAP01
SWWM_SAYAEV2A1 = "Damn, finally, your video feed's back online.";
SWWM_SAYAEV2A2 = "You had me worried there, \cdDemo\c-. We were basically blind for several minutes.";
SWWM_SAYAEV2A3 = "... And I can already see that shit's definitely gone down after you beat that winged bastard.";
SWWM_SAYAEV2A4 = "For now, better get out of there. I have this gut feeling that this isn't over yet.";
SWWM_SAYAEV2B1 = "Is that thing... ... No, not even moving. Guess those were under that guy's control.";
SWWM_SAYAEV2B2 = "You know, I'm still wondering what the hell those things even are.";
SWWM_SAYAEV2B3 = "Not your ordinary Cacodemon, obviously. Looks like one, yeah, but there's... Dunno...";
SWWM_SAYAEV2B4 = "Damn thing gives me the creeps. Probably made as some weirdass experiment by these people.";
SWWM_SAYAEV2B5 = "Oh well... I'm just rambling here. Better get a move on.";
SWWM_SAYAEV2C1 = "... That thing's gone.";
SWWM_SAYAEV2C2 = "Now I REALLY have a bad feeling about this. Get out of there, right now.";
SWWM_SAYAEV2D1 = "Those things are still alive. They're still moving around. I don't like this.";
SWWM_SAYAEV2D2 = "Run, \cdDemo\c-. Please run.";
// Eviternity 2 MAP05
SWWM_SAYAEV2E1 = "It's not over. We've seen that there's still demons prowling around, shit's falling apart, too...";
SWWM_SAYAEV2E2 = "Really need to figure out what's happening. If that guy wasn't the \"big bad\", then...";
SWWM_SAYAEV2E3 = "For now, it's best you get out of this place, while kicking some demon ass along the way, of course.";
SWWM_SAYAEV2E4 = "Good luck, \cdDemo-chan\c-. The mission's far from over, but you'll get through this, I know it.";
// Eviternity 2 MAP10
SWWM_SAYAEV2F1 = "I think we've had enough of ancient tombs, yeah.";
SWWM_SAYAEV2F2 = "This was one unexpected detour, but the next stop should get us closer. It's a Faculty installation.";
SWWM_SAYAEV2F3 = "Oh, and by the way, I finally got in contact with our \"informant\".";
SWWM_SAYAEV2F4 = "I'll send you the details on your mission log, once the interview is over.";
// Eviternity 2 MAP15
SWWM_SAYAEV2G1 = "Almost there... Got word that the nearest portal out of here is a big one, so be prepared.";
SWWM_SAYAEV2G2 = "I was also told that it involves another detour, but after that we should be \"right where we need to be\".";
SWWM_SAYAEV2G3 = "Honestly, I don't get this whole portal system. It's so impractical...";
SWWM_SAYAEV2G4 = "One of these days, I'll make the Akari Project into a real thing. Now THAT will be good portal technology.";
// Eviternity 2 MAP20
SWWM_SAYAEV2H1 = "Okay, enough of detours, enough of getting sidetracked, this is the one.";
SWWM_SAYAEV2H2 = "Miss Nona has been dropping some heavy lore lately. You won't believe how crazy this shit gets.";
SWWM_SAYAEV2H3 = "I'll try to squeeze it into the next mission log. You keep doing your thing, \cdDemo-chan\c-.";
// Eviternity 2 MAP25
SWWM_SAYAEV2I1 = "I'm... Still shaking from that.";
SWWM_SAYAEV2I2 = "So THAT is the power of Qurensniv naval artillery. Holy... Crap.";
SWWM_SAYAEV2I3 = "A-anyway... ... We uh... Yeah, this is it. Last line of defense. Beyond that, \"Its Astral Domain\".";
SWWM_SAYAEV2I4 = "I'm sending you all of my energy, \cdDemo-chan\c-. My energy and my love. Fight on!";
// Eviternity 2 MAP26
SWWM_SAYAEV2J1 = "I don't like this. I don't like this at all. It's too quiet...";
SWWM_SAYAEV2J2 = "Please be careful, \cdDemo\c-.";
// Eviternity 2 MAP30
SWWM_SAYAEV2K1 = "There is some wild-ass energy reading there. Something big, and ANGRY. This has to be it.";
SWWM_SAYAEV2K2 = "Draw that fucking thing out, tear it apart, blow it to bits. Let's end this madness, \cdDemo-chan\c-!";
SWWM_SAYAEV2L1 = "Of course it's going for another round. This fucking thing is persistent, seriously.";
SWWM_SAYAEV2L2 = "Too bad, should've just run away, NOW you get to deal the killing blow.";
SWWM_SAYAEV2M1 = "Oh for fuck's sake... This fucking monster doesn't know when to give up?";
// Bonus
SWWM_SAYAEV2N1 = "EXCUSE ME WHAT THE FUCK??? IT SURVIVED A SHOT FROM THE YNYKRON???";
SWWM_SAYAEV2N2 = "WHAT THE FUCK IS THAT THING??? HOW IS IT STILL STANDING???";
SWWM_SAYAEV2O1 = "WHY WON'T THIS THING DIE???";
// Eviternity 2 MAP33
SWWM_SAYAEV2P1 = "\cdDemo-chan\c-, I hope you're ready to run for your life.";
SWWM_SAYAEV2P2 = "Like... I think this whole place is going to blow up as soon as you press that button?";
SWWM_SAYAEV2P3 = "Seriously, once you hit it, just fucking run and don't stop!";
// 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.";

View File

@ -59,6 +59,17 @@ SWWM_MISSION_SIGIL =
"\n"
"Saya out.";
SWWM_MISSION_DOOM25 = "$$SWWM_MISSION_SIGIL";
SWWM_MISSION_SIGIL2 =
"We should have known that there would be an ambush on the other side, of course.\n"
"\n"
"This is definitely \cfEarth\c-, but damn, the demonic influence has fucked it all over beyond recognition. We gotta get out of here and fast.\n"
"\n"
"\cfCytho-sama\c- said that this is a good chance to deal some big damage, at least. The guys stationed here are some of the toughest around, and securing the area would definitely be a big help for others who are fighting.\n"
"\n"
"Still can't get over this whole sidetracking nonsense, though. I hope we get to the \cfUAC\c- starport in time, it's where the real battle is taking place, you know...\n"
"\n"
"Saya out.";
SWWM_MISSION_DOOM26 = "$$SWWM_MISSION_SIGIL2";
SWWM_MISSION_DOOM5 =
"Welcome to your first mission, \cfDemolitionist\c-. I'll be very direct here, the situation is very fucked. Things don't look good at all. Those fucking \cfUAC\c- idiots have done their worst and now we're paying for it. FUCK... THE... UAC... Seriously. If that damn brat \cfKelliher\c- didn't have me blocked I'd be sending him all sorts of shit right now, you can't even begin to imagine HOW fucking pissed I am...\n"
"\n"
@ -245,6 +256,84 @@ SWWM_MISSION_EVITERNITY8 =
"Fuck 'em up, \cfDemo-chan\c-, and bust some walls while you're at it.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII1 =
"Your video signal has dropped on our end, but I hope you can still read this.\n"
"\n"
"Something's gone very wrong up there. Some of our contacts report that \cf\"the capital is falling apart\"\c-, and I don't like the sound of that in the slightest. Still, just stay where you are until we get this technical issue solved.\n"
"\n"
"I'll contact you again as soon as possible, \cfDemo-chan\c-.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII2 =
"Yup, this definitely doesn't look good. The locals say the skies are \"crying\", and yup, it's raining up a storm for sure. Never had such gloomy weather in ages, as far as I've been told.\n"
"\n"
"What happened back there... Triggered something very bad. Something that probably can't be undone. And that \cf\"Astral Cacodemon\"\c- you saw before... Yeah. At first I thought those things were some experiment of the faculty, but the fact they're still prowling around, that's a bad omen right there.\n"
"\n"
"I need to make some calls. We're not getting the whole picture here.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII3 =
"\cfDemo\c-, I genuinely have no idea where you are. There is no data on wherever you got sent to.\n"
"\n"
"I'm still trying to gather some information, at least, so we're not entirely blind here.\n"
"\n"
"Got a lead, though, insider information, from the \cfFaculty of Illuminated Nobodies\c- no less. Yup, the ones who started this whole shitshow. At last, we'll get to the bottom of this mess.\n"
"\n"
"In the meantime, try to find a way out of there. Wherever you are, it definitely isn't a friendly place, there are \cfArdent Energy\c- readings popping up, so that means there's demons.\n"
"\n"
"Kick ass, \cfDemo-chan\c-.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII4 =
"Alright, here's the details.\n"
"\n"
"Took some effort to get her to talk, but there she is, our \"informant\". She introduced herself as \cf\"Nona Nobody\"\c-, a very blatantly fake name, but whatever, she was apparently once a high-ranking member of the \cfFaculty of Illuminated Nobodies\c-, and even had close contact with \cfUruk'Anth\c- himself. Yeah, the guy who pretended to be God with a capital G.\n"
"\n"
"The stuff she's telling me, oh boy. The Faculty really was into some shit, cosmic horror shit, no less. They made a deal with some entity from another universe or some shit, and that's where these weird, mutated demons are coming from, among other things. Magical augmentation, dark powers, clairvoyance, god knows what else... They swore loyalty to some lovecraftian deity or some shit, and now that you beat the crap outta them, the deal is broken and it's beginning to \"take it back\".\n"
"\n"
"If we don't get to the bottom of this, apparently, it could spell doom for not just the \cfXevetha\c- homeworld, but also every single other place that the Faculty has touched. This, as you may expect, includes \cfEarth\c-.\n"
"\n"
"To say this is bad news is an understatement. I don't know yet what exactly \"It\" is, but you will definitely find a way to kick its eldritch ass and save the world, for sure.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII5 =
"This isn't \cfEarth\c-... Looks like you're back in \cfUrkai\c-. Well, that's one hell of a detour, then.\n"
"\n"
"You know, I was thinking back to what we just saw before. Really fucked that they were collaborating all along, the \cfUAC\c- and the faculty. Yeah, ever since they dismantled \cfSUSAN\c-, should have seen that coming from a mile away.\n"
"\n"
"Anyway, onwards on this mission, \cfDemo\c-, we're getting there.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII6 =
"Boy, oh boy... First of all, we're back in \cfSiberia\c-, and this is definitely another abandoned faculty installation, all frozen over and shit. But of course, now it's riddled with hellspawn... And astral spawn, as well.\n"
"\n"
"Incoming lore dump, by the way.\n"
"\n"
"So you know how the faculty is directly responsible for the birth of most of demonkind, right? Tens of thousands of years ago, when they first settled on our planet... Yeah, well, things get interesting when you ask how exactly they figured out that whole thing of the \"demonization\" process, to mutate humans into demons, and all. Turns out that this was some shit that the director, the old dude, kept a secret from everybody. The inner workings of that tech were definitely not of \cfXevetha\c- design, there was some deep magic shit going on, and no one was to ask questions about it.\n"
"\n"
"Well, now we finally know. It's obvious, he got it from THAT thing. And that thing... Is the very origin of the madness that brought the faculty to exist in the first place. \cfUruk'Anth\c- accidentally discovered it, and saw that a pact with it would allow him and his disciples to reach godhood. This was after the \cfNedoshiaan incident\c-, y'know, when the tyrant god that he was working for was assassinated...\n"
"\n"
"OK, need to catch my breath here, this is a lot I've been writing, and there's still more.\n"
"\n"
"It's no secret that there are other universes, I've learned as much from the gods themselves. But it's generally rare for outside entities to just \"seep\" into our world, unless they are, well, OTHER gods.\n"
"\n"
"If that thing is really a god, it might be entirely immortal, and that's no good, \cfDemo-chan\c-.\n"
"\n"
"Still, you can definitely kick its ass until it can no longer stand up. Gods can bleed, after all, and you'll make it feel sorry for fucking with OUR world.\n"
"\n"
"Saya out.";
SWWM_MISSION_EVITERNITYII7 =
"Wherever you are, it's so far away we can't pinpoint it in any known starmap. Honestly, I'm surprised. With places like \cfHell\c-, that was still within our own universe, but somehow, everything still works just fine while you're... Outside.\n"
"\n"
"Props to the engineers behind the \cfBleaknet\c-, I guess, this whole system can somehow keep us in touch even between completely separate worlds. At least this way we can also guess that most fundamental laws are still the same, so there's that.\n"
"\n"
"Honestly, this whole thing of being in an entirely other universe... It's fascinating. I hope we get some spicy data on this place, heheh...\n"
"\n"
"Anyway, me nerding out aside, this is the supposed \cf\"Astral Realm\"\c-, the home of \cf\"The Origin\"\c-, as the folks from the faculty had known to name it. I assume there's a \"normal\" atmosphere in here, since your fuel supply is still being fed hydrogen from the environment... Other than that, yeah, complete alien territory.\n"
"\n"
"Be ready for anything, \cfDemo-chan\c-, you're in the final boss's lair now.\n"
"\n"
"Saya out.";
SWWM_MISSION_HERETIC1 =
"Welcome, \cfDemolitionist\c-, to this very special mission. While things have calmed down over here, we've been able to resume our work on the \cfAkari Project\c-. You know, the important one I've wanted to work on all my life. So far it's been a success, and you'll be the first to take part in the exploration of other worlds. We've scoured the multiverse for all sorts of interesting places, and this one in particular caught our eye. It is called \cfParthoris\c-, it's a realm of magic and elves and stuff, I dig it. Anyway, I hope the ride wasn't too bumpy, we haven't fine-tuned that yet.\n"
"\n"

View File

@ -366,6 +366,23 @@ SWWM_SUBS_DEFAULT_ARCHANGELUS5 = "Aw, look at you with your fancy lil' wings and
SWWM_SUBS_DEFAULT_ARCHANGELUS6 = "Yeah yeah, it's always the same with you people.";
SWWM_SUBS_DEFAULT_ARCHANGELUS7 = "Boy, you people really go hard on the pretend-god bullshit, huh?";
SWWM_SUBS_DEFAULT_ARCHANGELUS8 = "I think I'm going to have to beat some sense into you.";
// Eviternity II boss
SWWM_SUBS_DEFAULT_NEVITERNATUS1 = "5";
SWWM_SUBS_DEFAULT_EVITERNATUS11 = "What the heck are you?";
SWWM_SUBS_DEFAULT_EVITERNATUS12 = "Whatever that is, it's pissed.";
SWWM_SUBS_DEFAULT_EVITERNATUS13 = "You're the one behind all of this, huh?";
SWWM_SUBS_DEFAULT_EVITERNATUS14 = "It's final boss time...";
SWWM_SUBS_DEFAULT_NEVITERNATUS2 = "4";
SWWM_SUBS_DEFAULT_EVITERNATUS21 = "Oh great, it's back.";
SWWM_SUBS_DEFAULT_EVITERNATUS22 = "Back for more? Bring it on!";
SWWM_SUBS_DEFAULT_EVITERNATUS23 = "Alright, round two.";
SWWM_SUBS_DEFAULT_EVITERNATUS24 = "I'm not done with you.";
SWWM_SUBS_DEFAULT_NEVITERNATUS3 = "5";
SWWM_SUBS_DEFAULT_EVITERNATUS31 = "What the hell?";
SWWM_SUBS_DEFAULT_EVITERNATUS32 = "Good lord it's still alive!";
SWWM_SUBS_DEFAULT_EVITERNATUS33 = "Damn it, just die already!";
SWWM_SUBS_DEFAULT_EVITERNATUS34 = "Round... Three?";
SWWM_SUBS_DEFAULT_EVITERNATUS35 = "Welp, third time's the charm.";
// "hself ruoy erutrot lliw I" (supposedly)
SWWM_SUBS_DEFAULT_NDSPARILA = "3";
SWWM_SUBS_DEFAULT_DSPARILA1 = "Oh look at you, little red riding hood.";
@ -473,6 +490,11 @@ SWWM_SUBS_DEFAULT_SMOOCH2 = "$$SWWM_SUBS_DEFAULT_SMOOCH1"; // all subtitles are
SWWM_SUBS_DEFAULT_SMOOCH3 = "$$SWWM_SUBS_DEFAULT_SMOOCH1";
// Sunlust MAP29
SWWM_SUBS_DEFAULT_LUSTYSUNS = "Wait... What did that say?";
// Invinciball use (no more Sundowner voiceclip)
SWWM_SUBS_DEFAULT_NINVINCIBALL = "3";
SWWM_SUBS_DEFAULT_INVINCIBALL1 = "I'm frickin' invincible!";
SWWM_SUBS_DEFAULT_INVINCIBALL2 = "$$SWWM_SUBS_DEFAULT_INVINCIBALL1"; // all subtitles are the same here, only the sound changes
SWWM_SUBS_DEFAULT_INVINCIBALL3 = "$$SWWM_SUBS_DEFAULT_INVINCIBALL1";
// Randomization ranges for other voices
SWWM_DEFAULT_NGRUNT = "5";
SWWM_DEFAULT_NUSEGRUNT = "4";

View File

@ -179,109 +179,110 @@ QUITMSG18 = "El mundo es duro y frío,\nlos pechotes suaves y calientes.";
FN_ZOMBIE_FUN1 = "Zombi";
FN_ZOMBIE_FUN2 = "Muertito";
FN_ZOMBIE_FUN3 = "El Zombito";
FN_ZOMBIE_FUN4 = "Carne de cañón";
FN_ZOMBIE_FUN4 = "Carne De Cañón";
FN_ZOMBIE_FUN5 = "Perdedor";
FN_SHOTGUN_FUN1 = "Zombi calvete";
FN_SHOTGUN_FUN1 = "Zombi Calvete";
FN_SHOTGUN_FUN2 = "Elmer Gruñón";
FN_SHOTGUN_FUN3 = "Calvo";
FN_SHOTGUN_FUN4 = "Escoputo";
FN_SHOTGUN_FUN5 = "Wismichu";
FN_HEAVY_FUN1 = "Tocacojones";
FN_HEAVY_FUN2 = "¿Por que estoy perdiendo vida?";
FN_HEAVY_FUN4 = "Tío cabreado";
FN_HEAVY_FUN5 = "Capullo con Metralleta";
FN_HEAVY_FUN2 = "¿Por Que Estoy Perdiendo Vida?";
FN_HEAVY_FUN4 = "Tío Cabreado";
FN_HEAVY_FUN5 = "Capullo Con Metralleta";
FN_IMP_FUN1 = "Pinchitos";
FN_IMP_FUN3 = "Yogurín Infernal";
FN_IMP_FUN5 = "Glúteos firmes";
FN_IMP_FUN5 = "Glúteos Firmes";
FN_DEMON_FUN1 = "Rosita";
FN_DEMON_FUN2 = "Gorila afeitado";
FN_DEMON_FUN3 = "Mucha boca poco cerebro";
FN_DEMON_FUN2 = "Gorila Afeitado";
FN_DEMON_FUN3 = "Mucha Boca Poco Cerebro";
FN_DEMON_FUN4 = "Muerdesito";
FN_SPECTRE_FUN1 = "Borroncito";
FN_SPECTRE_FUN2 = "Rosita camuflado";
FN_SPECTRE_FUN3 = "Mordisquito sorpresa";
FN_SPECTRE_FUN4 = "Gorila sigiloso";
FN_SPECTRE_FUN2 = "Rosita Camuflado";
FN_SPECTRE_FUN3 = "Mordisquito Sorpresa";
FN_SPECTRE_FUN4 = "Gorila Sigiloso";
FN_LOST_FUN1 = "Calaverita";
FN_LOST_FUN2 = "Bicho";
FN_LOST_FUN3 = "Cabeza tonta";
FN_LOST_FUN3 = "Cabeza Tonta";
FN_LOST_FUN4 = "Idiota";
FN_CACO_FUN1 = "Tomatín";
FN_CACO_FUN2 = "Rojito";
FN_CACO_FUN3 = "Albóndiga picante";
FN_CACO_FUN4 = "Bola con forma de amigo";
FN_CACO_FUN5 = "Bola acariciable";
FN_HELL_FUN1 = "Barón de Hacendado";
FN_HELL_FUN2 = "Cabra marrón";
FN_HELL_FUN3 = "Primo del Señor Gruñón";
FN_HELL_FUN4 = "Puerta con menos puntos de vida";
FN_HELL_FUN5 = "Recorte de presupuesto";
FN_CACO_FUN3 = "Albóndiga Picante";
FN_CACO_FUN4 = "Bola Con Forma De Amigo";
FN_CACO_FUN5 = "Bola Acariciable";
FN_HELL_FUN1 = "Barón De Hacendado";
FN_HELL_FUN2 = "Cabra Marrón";
FN_HELL_FUN3 = "Primo Del Señor Gruñón";
FN_HELL_FUN4 = "Puerta Con Menos Puntos De Vida";
FN_HELL_FUN5 = "Recorte De Presupuesto";
FN_BARON_FUN1 = "Señor Gruñón";
FN_BARON_FUN2 = "Puerta con puntos de vida";
FN_BARON_FUN3 = "Ola k ase";
FN_BARON_FUN4 = "Cabra roja cabreada";
FN_BARON_FUN5 = "Bloquea tu camino";
FN_ARACH_FUN1 = "Ñiño araña";
FN_BARON_FUN2 = "Puerta Con Puntos De Vida";
FN_BARON_FUN3 = "Ola K Ase";
FN_BARON_FUN4 = "Cabra Roja Cabreada";
FN_BARON_FUN5 = "Bloquea Tu Camino";
FN_ARACH_FUN1 = "Ñiño Araña";
FN_ARACH_FUN2 = "Pequeñajo";
FN_ARACH_FUN3 = "Retaco";
FN_ARACH_FUN5 = "Arruga andante";
FN_PAIN_FUN1 = "Dolor de culo";
FN_PAIN_FUN2 = "Puta mierda";
FN_PAIN_FUN3 = "Demonio más odiado";
FN_PAIN_FUN4 = "Se acabó la fiesta";
FN_PAIN_FUN5 = "Mierda con brazos";
FN_ARACH_FUN5 = "Arruga Andante";
FN_PAIN_FUN1 = "Dolor De Culo";
FN_PAIN_FUN2 = "Puta Mierda";
FN_PAIN_FUN3 = "Demonio Más Odiado";
FN_PAIN_FUN4 = "Se Acabó La Fiesta";
FN_PAIN_FUN5 = "Mierda Con Brazos";
FN_REVEN_FUN2 = "Huesito Cabreado";
FN_REVEN_FUN3 = "Esqueletín";
FN_REVEN_FUN5 = "El Renasido";
FN_MANCU_FUN1 = "Gordaco";
FN_MANCU_FUN2 = "Don Tocino";
FN_MANCU_FUN3 = "Culogordo";
FN_MANCU_FUN4 = "Tu madre";
FN_MANCU_FUN4 = "Tu Madre";
FN_MANCU_FUN5 = "Gordo Cabrón";
FN_ARCH_FUN1 = "1000 puntos menos";
FN_ARCH_FUN1 = "1000 Puntos Menos";
FN_ARCH_FUN2 = "Marsianito";
FN_ARCH_FUN3 = "No gracias";
FN_ARCH_FUN4 = "Te jodes";
FN_ARCH_FUN5 = "Tu día ha sido arruinado";
FN_ARCH_FUN3 = "No Gracias";
FN_ARCH_FUN4 = "Te Jodes";
FN_ARCH_FUN5 = "Tu Día Ha Sido Arruinado";
FN_ARCH_FUN6 = "Nalgas Ardientes";
FN_SPIDER_FUN1 = "Mami araña";
FN_SPIDER_FUN2 = "Tu puta madre";
FN_SPIDER_FUN3 = "Krang en grande";
FN_SPIDER_FUN4 = "No es Mother Brain";
FN_SPIDER_FUN1 = "Mami Araña";
FN_SPIDER_FUN2 = "Tu Puta Madre";
FN_SPIDER_FUN3 = "Krang En Grande";
FN_SPIDER_FUN4 = "No Es Mother Brain";
FN_SPIDER_FUN5 = "Superfriki";
FN_CYBER_FUN1 = "Culazo";
FN_CYBER_FUN2 = "Un brazo y una pierna";
FN_CYBER_FUN3 = "Mi cabra está aumentada";
FN_CYBER_FUN4 = "Práctica de esquivar";
FN_CYBER_FUN5 = "Dispara hasta que muera";
FN_WOLFSS_FUN1 = "Votante de VOX";
FN_CYBER_FUN2 = "Un Brazo Y Una Pierna";
FN_CYBER_FUN3 = "Mi Vaca Está Aumentada";
FN_CYBER_FUN4 = "Práctica De Esquivar";
FN_CYBER_FUN5 = "Dispara Hasta Que Muera";
FN_CYBER_FUN6 = "Vaca Mú";
FN_WOLFSS_FUN1 = "Votante De VOX";
FN_WOLFSS_FUN2 = "Rubito";
FN_WOLFSS_FUN3 = "Cosas nasis";
FN_WOLFSS_FUN3 = "Cosas Nasis";
FN_DOG_FUN = "Perrete";
FN_CHICKEN_FUN = "POLLO";
FN_CLINK_FUN1 = "Rasguñitos";
FN_CLINK_FUN2 = "Cacharro";
FN_CLINK_FUN3 = "Chatarra";
FN_DSPARIL_FUN = "Caperucita Roja";
FN_HERETICIMP_FUN1 = "Bicho con Alas";
FN_HERETICIMP_FUN1 = "Bicho Con Alas";
FN_HERETICIMP_FUN2 = "Minicapullo";
FN_HERETICIMP_FUN3 = "Murciélago Molesto";
FN_HERETICIMP_FUN4 = "Incordio con Alas";
FN_HERETICIMP_FUN4 = "Incordio Con Alas";
FN_IRONLICH_FUN1 = "Risitas";
FN_IRONLICH_FUN2 = "Cabezón";
FN_IRONLICH_FUN3 = "Sonrisitas";
FN_IRONLICH_FUN4 = "Graciosillo";
FN_BONEKNIGHT_FUN1 = "Huesos Agitados";
FN_BONEKNIGHT_FUN2 = "Huesitos";
FN_BONEKNIGHT_FUN4 = "Caballero de Calcio";
FN_BONEKNIGHT_FUN4 = "Caballero De Calcio";
FN_MINOTAUR_FUN1 = "Toro Ciclao";
FN_MINOTAUR_FUN2 = "Fuertote";
FN_MINOTAUR_FUN3 = "Muusculos";
FN_MUMMY_FUN1 = "Papel de Culo";
FN_MUMMY_FUN1 = "Papel De Culo";
FN_MUMMY_FUN2 = "Momia Mediocre";
FN_MUMMY_FUN3 = "Gólem Cutre";
FN_MUMMYLEADER_FUN1 = "Papel de Culo que Grita";
FN_MUMMYLEADER_FUN2 = "Momia Mediocre que Grita";
FN_MUMMYLEADER_FUN3 = "Gólem Cutre que Grita";
FN_MUMMYLEADER_FUN1 = "Papel De Culo Que Grita";
FN_MUMMYLEADER_FUN2 = "Momia Mediocre Que Grita";
FN_MUMMYLEADER_FUN3 = "Gólem Cutre Que Grita";
FN_SNAKE_FUN1 = "Culebrilla";
FN_SNAKE_FUN2 = "No Pisar";
FN_WIZARD_FUN1 = "Eres Un Mago, Harry";
@ -292,29 +293,29 @@ FN_FIREDEMON_FUN1 = "Bicho Ardiente";
FN_FIREDEMON_FUN2 = "Inflamadito";
FN_FIREDEMON_FUN3 = "Alitas Picantes";
FN_DEMON1_FUN1 = "Lagarto Grandote";
FN_DEMON1_FUN2 = "Dragón de Hacendado";
FN_DEMON1_FUN2 = "Dragón De Hacendado";
FN_DEMON1_FUN3 = "Mordisquitos";
FN_DEMON1_FUN4 = "Bicho con Perilla";
FN_DEMON1_FUN4 = "Bicho Con Perilla";
FN_ETTIN_FUN1 = "Perrito Doble";
FN_ETTIN_FUN2 = "Idiota con Garrote";
FN_ETTIN_FUN3 = "Bicho de Bajo Nivel";
FN_CENTAUR_FUN1 = "Idiota con Escudo";
FN_CENTAUR_FUN2 = "Capullo con Escudo";
FN_CENTAUR_FUN3 = "Bastardo con Escudo";
FN_SLAUGHTAUR_FUN1 = "Idiota Estúpido con Escudo";
FN_SLAUGHTAUR_FUN2 = "Capullo Asqueroso con Escudo";
FN_SLAUGHTAUR_FUN3 = "Bastardo Hijoperra con Escudo";
FN_ETTIN_FUN2 = "Idiota Con Garrote";
FN_ETTIN_FUN3 = "Bicho De Bajo Nivel";
FN_CENTAUR_FUN1 = "Idiota Con Escudo";
FN_CENTAUR_FUN2 = "Capullo Con Escudo";
FN_CENTAUR_FUN3 = "Bastardo Con Escudo";
FN_SLAUGHTAUR_FUN1 = "Idiota Estúpido Con Escudo";
FN_SLAUGHTAUR_FUN2 = "Capullo Asqueroso Con Escudo";
FN_SLAUGHTAUR_FUN3 = "Bastardo Hijoperra Con Escudo";
FN_BISHOP_FUN1 = "Encapuchao";
FN_BISHOP_FUN2 = "Tío de Verde";
FN_BISHOP_FUN2 = "Tío De Verde";
FN_BISHOP_FUN3 = "Piñata Mágica";
FN_ICEGUY_FUN1 = "Cosa Fría";
FN_ICEGUY_FUN2 = "Refresquito";
FN_ICEGUY_FUN3 = "Licor del Polo";
FN_ICEGUY_FUN3 = "Licor Del Polo";
FN_ICEGUY_FUN4 = "Helado Andante";
FN_ICEGUY_FUN5 = "Frigo";
FN_ICEGUY_FUN6 = "Insertar Chiste De Hielo Aquí";
FN_SERPENT_FUN = "Bicho de Pantano";
FN_WRAITH_FUN = "Pariente de Fraga";
FN_SERPENT_FUN = "Bicho De Pantano";
FN_WRAITH_FUN = "Pariente De Fraga";
FN_DRAGON_FUN = "Compra Skyrim";
FN_KORAX_FUN = "El Tío Feo Ese";
FN_FBOSS_FUN = "Tío Ciclao";
@ -322,17 +323,17 @@ FN_MBOSS_FUN = "Tío Mágico";
FN_CBOSS_FUN = "Tío Santurrón";
FN_HERESIARCH_FUN = "Hostia Puta";
// Additional tags
FN_BOSSBRAIN = "Cerebro de Jefe";
FN_BOSSBRAIN = "Cerebro De Jefe";
FN_BOSSBRAIN_FUN = "Avenas Las Buenas";
FN_KEEN_FUN = "Arruinado por Bethesda";
FN_VOODOO = "¿%s?"
FN_VOODOO_NP = "¿Muñeco?";
FN_PIG = "Cerdo";
FN_PIG_FUN = "Cochinillo";
FN_WOLFGUARD_FUN1 = "Nazi de Bajo Presupuesto";
FN_WOLFGUARD_FUN2 = "Chiquillo con Pistolilla";
FN_WOLFGUARD_FUN1 = "Nazi De Bajo Presupuesto";
FN_WOLFGUARD_FUN2 = "Chiquillo Con Pistolilla";
FN_WOLFGUARD_FUN3 = "Pantalones Marrones";
FN_WOLFHANS_FUN = "Hans el Gordaco";
FN_WOLFHANS_FUN = "Hans El Gordaco";
// eviternity tags
FN_ANGEL = "Arcángelus";
FN_ANGEL_FUN = "Un Puto Ángel";
@ -343,17 +344,70 @@ FN_ASTRAL_FUN3 = "Cáscara Siseante";
FN_FCAPTAIN = "Capitán Zombi";
FN_FCAPTAIN_FUN1 = "Capullo Verde Tocanarices";
FN_FCAPTAIN_FUN2 = "Enemigo Basura Verde";
FN_FCAPTAIN_FUN3 = "Huevos Verdes y Spam";
FN_FCAPTAIN_FUN3 = "Huevos Verdes Y Spam";
FN_ANNIHIL = "Aniquilador";
FN_ANNIHIL_FUN1 = "Cabra Gris";
FN_ANNIHIL_FUN2 = "Cabrinator";
FN_ANNIHIL_FUN3 = "Cabra Mejorada";
FN_NDEMON = "Demonio de Pesadilla";
FN_NDEMON = "Demonio De Pesadilla";
FN_NDEMON_FUN1 = "Verdín";
FN_NDEMON_FUN2 = "Verde Cabreado";
FN_NDEMON_FUN3 = "Demonio de Espinacas";
FN_NDEMON_FUN3 = "Demonio De Espinacas";
// eviternity 2 tags
FN_FCORPORAL = "Cabo Zombificado";
FN_FCORPORAL_FUN1 = "Pasmao En Verde";
FN_FCORPORAL_FUN2 = "Zombi Balazo";
FN_FCORPORAL_FUN3 = "Zomboverde";
FN_ASTRALARACH = "Aracnotrón Astral";
FN_ASTRALARACH_FUN1 = "Asco De Spam";
FN_ASTRALARACH_FUN2 = "Bebé Bombardero";
FN_ASTRALARACH_FUN3 = "Muchos Plasmas";
FN_ASTRALARACH_FUN4 = "Araña Agrisada";
FN_VEILIMP = "Imp Encubierto";
FN_VEILIMP_FUN1 = "Rosa Chillón";
FN_VEILIMP_FUN2 = "Yogurín Escondido";
FN_VEILIMP_FUN3 = "Chaval Fucsia";
FN_VEILIMP_FUN4 = "Se Teletransporta";
FN_VEILIMP_FUN5 = "Sobresaturado";
FN_ASTRALGOLD = "Cacodemonio Astral Dorado";
FN_ASTRALGOLD_FUN1 = "Chico De Oro";
FN_ASTRALGOLD_FUN2 = "Bola De Oro";
FN_ASTRALGOLD_FUN3 = "Cacodemon Reluciente";
FN_ASTRALGOLD_FUN4 = "Bola Brillante";
FN_ASTRALGOLD_FUN5 = "Amigo Rico";
FN_DUKE = "Duque Del Infierno";
FN_DUKE_FUN1 = "Bolas De Verde";
FN_DUKE_FUN3 = "Dique Infernal";
FN_DUKE_FUN4 = "Ducha Infernal";
FN_DUKE_FUN5 = "La Cabra Es Verde";
FN_DUKE_FUN6 = "Brasil";
FN_ASTRALBABY = "Bebé Cacodemonio Astral";
FN_ASTRALBABY_FUN1 = "Cascarilla";
FN_ASTRALBABY_FUN2 = "Adorable";
FN_ASTRALBABY_FUN3 = "Bolita Gris";
FN_ASTRALBABY_FUN4 = "Bolita Siseante";
FN_NAC = "Cacodemonio Astral De Pesadilla";
FN_NAC_FUN1 = "La Puta Bola";
FN_NAC_FUN2 = "Siseos Verdes";
FN_NAC_FUN3 = "Horripilante";
FN_NAC_FUN4 = "Terrorífico";
FN_NAC_FUN5 = "DA CANGUELO";
FN_NAC_FUN6 = "Albóndiga Hardcore";
FN_ASTRALFATSO = "Mancubus Astral";
FN_ASTRALFATSO_FUN1 = "Gran Capullo";
FN_ASTRALFATSO_FUN2 = "Gordo Cabrón";
FN_ASTRALFATSO_FUN3 = "Grasa Oscura";
FN_ASTRALFATSO_FUN4 = "Tocino Tostado";
FN_NECROMENACE = "Necroamenaca";
FN_NECROMENACE_FUN1 = "Levántate De Tu Tumba";
FN_NECROMENACE_FUN2 = "Bastardo Resurrector";
FN_NECROMENACE_FUN3 = "Lo Que Faltaba";
FN_NECROMENACE_FUN4 = "10000 Puntos Menos";
FN_NECROMENACE_FUN5 = "Adivina Que";
FN_EVITERNATUS = "El Orígen";
FN_EVITERNATUS_FUN = "Bola De Alas";
// ultimate doom 2 tags
FN_ELITEZOMBIE = "Zombi de Élite";
FN_ELITEZOMBIE = "Zombi De Élite";
FN_ELITEZOMBIE_FUN1 = "Zomborápido";
FN_ELITEZOMBIE_FUN2 = "Te Dispara";
FN_ELITEZOMBIE_FUN3 = "Rubiales";
@ -495,6 +549,21 @@ OBITUARY_NIGHTMAREDEMON = "%o fue estronchad@[ao_esp].";
OB_ANGEL1 = "%o cabreó a ese ángel.";
OB_ANGEL2 = "%o cabreó mucho a ese ángel.";
OB_ASTRAL = "%o fue escaldad@[ao_esp] por una amigable bola gris.";
// eviternity 2 obituaries
OB_CORPORAL = "%o pilló una bala gorda del tío de verde.";
OB_ASTRALBABY = "%o se tragó un montón de plasma.";
OB_VEILIMP = "%o fue escaldad@[ao_esp] por un mocoso rosado.";
OB_GOLDENCACO = "%o cree que igual eso fue demasiado.";
OB_DUKE = "%o fue enviad@[ao_esp] a Brasil.";
OB_ASTRALKIRBY = "%o fue tostad@[ao_esp] por una pequeñita bola amigable.";
OB_NAC = "%o no pudo escapar de esa cosa verde.";
OB_ASTRALFATSO = "%o REALMENTE fue víctima de la gordura.";
OB_NECRO = "%o se hizo mierda por culpa de ese estúpido necromante.";
OB_NECROF = "%o se llevó un buen susto.";
OB_GOLDENBOSS = "%o ciertamente cree que eso ha sido demasiado.";
OB_EVITERNATUS1 = "%o se metió con el ángel equivocado.";
OB_EVITERNATUS2 = "%o realmente hizo cabrear esa bola de alas.";
OB_EVITERNATUS3 = "%o no esperaba que hubiese un tercer asalto.";
// ultimate doom 2 obituaries
OB_ELITEZOMBIE = "%o fue disparad@[ao_esp] rápidamente por un tipo de élite.";
// misc
@ -728,6 +797,9 @@ BT_DOOMTEST = "Avenino, Azote de los Cuáqueros";
// eviternity
BT_ARCHANGELUS = "Arcángelus, Agente Celestial";
BT_ARCHANGELUS_FUN = "Un Putísimo Ángel Enorme";
// eviternity 2
BT_EVITERNATUS = "El Orígen De La Plaga Astral";
BT_EVITERNATUS_FUN = "Ángel Bíblicamente Correcto";
// boss oneliners
BOSSLINE_IOS = "\crIcono del Pecado\c*: !oremoR nhoJ ,ím a emratam sebed ogeuj le ranag araP¡\c*";
BOSSLINE_DSPARIL = "\cgD'Sparil\c*: .senrac sut érarutroT\c*";

View File

@ -27,6 +27,11 @@ SWWM_CYTHOSIGIL1 = "\cdDemo\c-, soy \cvCytho\c-. Tengo un mensaje importante de
SWWM_CYTHOSIGIL2 = "El príncipe Baphomet está satisfecho con tus esfuerzos, y ha abierto un portal para regresar 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?";
// E6M8
SWWM_CYTHOSIGIL21 = "Ah, bien, te estás aproximando a su retaguardia.";
SWWM_CYTHOSIGIL22 = "Si jugamos bien nuestras cartas, esto debería pillarlos por sorpresa.";
SWWM_CYTHOSIGIL23 = "Neutralizar a los tenientes en esta zona será un golpe certero, sin lugar a duda.";
SWWM_CYTHOSIGIL24 = "No tienen ni idea de lo que les espera, no te verán venir. ¡Adelante, \cdDemo\c-!";
// 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.";
@ -103,6 +108,61 @@ SWWM_SAYAEVIA3 = "Todo este sitio, es que... Joder, espero que hayas sacado much
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-!";
// Eviternity 2 MAP01
SWWM_SAYAEV2A1 = "Oh, por fin, tu captura de video ha vuelto.";
SWWM_SAYAEV2A2 = "Me tenías preocupada, \cdDemo\c-. Estuvimos básicamente a ciegas durante varios minutos.";
SWWM_SAYAEV2A3 = "... Y ya puedo ver que se ha liado parda después de que te cargaras al bastardo con alas.";
SWWM_SAYAEV2A4 = "De momento, más te vale salir de ahí. Algo me dice que esto todavía no ha terminado.";
SWWM_SAYAEV2B1 = "Esa cosa... ... No, ni se mueve. Supongo que estaba bajo el control del tío ese.";
SWWM_SAYAEV2B2 = "Sabes, sigo prenguntándome que puñetas son esas cosas.";
SWWM_SAYAEV2B3 = "No es el típico Cacodemonio, obviamente. Parece uno, sí, pero es que... No sé...";
SWWM_SAYAEV2B4 = "El bicho ese me da mal rollo. Probablemente salió de algún experimento de esta gente.";
SWWM_SAYAEV2B5 = "En fin... Estoy desvariando. Mejor largarse ya.";
SWWM_SAYAEV2C1 = "... Esa cosa se ha ido.";
SWWM_SAYAEV2C2 = "Ahora SÍ que esto me da mala espina. Sal de ahí, ya.";
SWWM_SAYAEV2D1 = "Esas cosas siguen vibas. Aun merodean por ahí. Esto no me gusta.";
SWWM_SAYAEV2D2 = "Corre, \cdDemo\c-. Por favor corre.";
// Eviternity 2 MAP05
SWWM_SAYAEV2E1 = "No se ha acabado. Ya hemos visto que los demonios siguen vagando, y todo se va a la mierda, también...";
SWWM_SAYAEV2E2 = "En serio tengo que averiguar que está pasando. Si ese tío no era el \"malo malísimo\", entonces...";
SWWM_SAYAEV2E3 = "Por ahora, mejor que salgas de este sitio, mientras pateas traseros demoníacos por el camino, por supuesto.";
SWWM_SAYAEV2E4 = "Buena suerte,\cdDemo-chan\c-. La misión aun no se ha acabado, pero podrás salir de esta, lo sé.";
// Eviternity 2 MAP10
SWWM_SAYAEV2F1 = "Creo que ya hemos visto suficientes tumbas antíguas, vaya que sí.";
SWWM_SAYAEV2F2 = "Este fue un desvío inesperado, pero la próxima parada nos debería dejar cerca. Es una instalación de la Facultad.";
SWWM_SAYAEV2F3 = "Oh, y por cierto, al final contacté con nuestro \"informante\".";
SWWM_SAYAEV2F4 = "Te mandaré los detalles en tu registro de misión, en cuanto termine la entrevista.";
// Eviternity 2 MAP15
SWWM_SAYAEV2G1 = "Ya casi... Me han dicho que el portal de salida más cercano es uno grande, así que prepárate.";
SWWM_SAYAEV2G2 = "También me han dicho que hay otro desvío de por medio, pero que luego deberíamos estar \"justo donde necesitamos\".";
SWWM_SAYAEV2G3 = "Sinceramente, no entiendo todo este sistema de portales. Es tan poco práctico...";
SWWM_SAYAEV2G4 = "Uno de estos días, voy a hacer el Proyecto Akari realidad. Eso SÍ que será buena tecnología de portales.";
// Eviternity 2 MAP20
SWWM_SAYAEV2H1 = "Vale, ya basta de desvíos, basta de dar vueltas, este sí que sí.";
SWWM_SAYAEV2H2 = "Miss Nona ha estando soltando lore profundo últimamente. No vas a creer lo disparatado que se pone todo esto.";
SWWM_SAYAEV2H3 = "Intentaré meter todo en el próximo registro de misión. Tú sigue a lo tuyo, \cdDemo-chan\c-.";
// Eviternity 2 MAP25
SWWM_SAYAEV2I1 = "A... Aun estoy temblando.";
SWWM_SAYAEV2I2 = "O sea que ESE es el poder de la artillería naval Qurensniv. Hostia... Puta.";
SWWM_SAYAEV2I3 = "E-en fin... ... A ver... Eso, ya está. Última línea de defensa. Luego de esto, \"Su Dominio Astral\".";
SWWM_SAYAEV2I4 = "Te estoy enviando toda mi energía, \cdDemo-chan\c-. Mi energía y mi amor. ¡Sigue luchando!";
// Eviternity 2 MAP26
SWWM_SAYAEV2J1 = "Esto no me gusta. No me gusta para nada. Está todo muy tranquilo...";
SWWM_SAYAEV2J2 = "Por favor ten cuidado, \cdDemo\c-.";
// Eviternity 2 MAP30
SWWM_SAYAEV2K1 = "Hay una lectura de energía descoyuntante ahi. Algo grande, y CABREADO. Tiene que ser esto.";
SWWM_SAYAEV2K2 = "Haz que esa puta cosa salga, rómpela en pedazo, reviéntala a cachitos. ¡Acabemos con esta locura, \cdDemo-chan\c-!";
SWWM_SAYAEV2L1 = "Por supuesto tenía que haber otra ronda. Esta cosa está muy enconada, en serio.";
SWWM_SAYAEV2L2 = "Pues mala suerte, debería haber escapado, AHORA si que le vas a dar el golpe de gracia.";
SWWM_SAYAEV2M1 = "La madre que lo hizo... ¿Este puñetero bicho no sabe cuando rendirse?";
// Bonus
SWWM_SAYAEV2N1 = "¿¿¿PERDONA PERO QUE COJONES??? ¿¿¿ACABA DE SOBREVIVIR UN DISPARO DEL YNYKRON???";
SWWM_SAYAEV2N2 = "¿¿¿QUE COÑO ES ESA COSA??? ¿¿¿COMO PUEDE SEGUIR EN PIE????";
SWWM_SAYAEV2O1 = "¿¿¿PERO POR QUE NO SE MUERE???";
// Eviternity 2 MAP33
SWWM_SAYAEV2P1 = "\cdDemo-chan\c-, espero que estés lista para salir corriendo.";
SWWM_SAYAEV2P2 = "A ver... ¿Es que creo que este sitio va a reventar en cuanto pulses ese botón?";
SWWM_SAYAEV2P3 = "En serio, en cuanto le des, ¡sal cagando hostias y no pares!";
// 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.";

View File

@ -58,6 +58,16 @@ SWWM_MISSION_SIGIL =
"Pues si es así, entonces ya sabes que hacer, así que ¡ve a por ellos, \cfDemolicionista\c-!\n"
"\n"
" — Saya";
SWWM_MISSION_SIGIL2 =
"Deberíamos haber visto venir una emboscada al otro lado, por supuesto.\n"
"\n"
"Esto es la \cfTierra\c-, definitivamente, pero hostia, la influencia demoníaca lo ha jodido todo hasta dejarlo irreconocible. Tenemos que salir de aquí y ya.\n"
"\n"
"\cfCytho-sama\c- dijo que esta sería una buena oportunidad para causar mucho daño, al menos. Los tipos estacionados aquí son de los duros, y asegurar la zona definitivamente será de ayuda para otros que estén luchando.\n"
"\n"
"La verdad es que aun me reconcome todo este lío de que nos desviáramos. Espero que podamos llegar al puerto estelar de la \cfUAC\c- a tiempo, ahí es donde está la verdadera batalla, ya sabes...\n"
"\n"
" — Saya";
SWWM_MISSION_DOOM5 =
"Bienvenida a tu primera misión, \cfDemolicionista\c-. Seré franca, la situación es jodida. La cosa no pinta bien, para nada. Esos putos cazurros de la \cfUAC\c- la han liado parda y ahora lo estamos pagando. PUTA... MIERDA... LA UAC... en serio. Si el niñato ese de \cfKelliher\c- no me hubiera bloqueado, es que lo ponía a parir ya, ni te imaginas COMO de cabreada estoy ahora mismo...\n"
"\n"
@ -244,6 +254,84 @@ SWWM_MISSION_EVITERNITY8 =
"Dales duro, \cfDemo-chan\c-, y cárgate unas cuantas paredes ya que estás.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII1 =
"Tu señal de video se nos ha caído, pero espero que aun puedas leer esto.\n"
"\n"
"Algo ha salido muy mal ahí arriba. Algunos de nuestros contactos cuentan que \cf\"la capital se está desmoronando\"\c-, y no me gusta como suena eso para nada. Aun así, tú quédate donde estás hasta que resolvamos este problema técnico.\n"
"\n"
"Volveré a contactarte lo antes posible, \cfDemo-chan\c-.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII2 =
"Sí, desde luego esto tiene mala pinta. La gente de aquí dice que el cielo está \"llorando\", y sí, desde luego llueve bastante. Nunca ha habido un cielo tán lúgubre en décadas, segun me han dicho.\n"
"\n"
"Lo que pasó ahí atrás... Ha desencadenado algo muy malo. Algo que probablemente no pueda deshacerse. Y ese \cf\"Cacodemonio Astral\"\c- que viste antes... Pues eso. Al principio pensaba que esas cosas eran un experimento de la facultad, pero el hecho de que sigan merodeando por ahí, es un mal presagio.\n"
"\n"
"Necesito hacer unas llamadas. Faltan piezas en este puzzle.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII3 =
"\cfDemo\c-, en serio que no tengo ni idea de donde estás. No hay datos sobre el lugar al que te han mandado.\n"
"\n"
"Yo sigo recabando información, al menos, así que no vamos totalmente a ciegas.\n"
"\n"
"Tengo una pista, sin embargo, información interna, de la \cFacultad de Iluminados Nadies\c-, vamos. Pues sí, los que empezaron todo este embrollo. Por fin, llegaremos al fondo de este lío.\n"
"\n"
"Mientras tanto, intenta buscar una salida de ahí. Donde sea que estés, no parece un sitio amigable, saltan lecturas de \cfEnergía Ardiente\c-, y eso significa que hay demonios.\n"
"\n"
"Dales caña, \cfDemo-chan\c-.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII4 =
"Bueno, aquí vienen los detalles.\n"
"\n"
"Costó un poco hacerla hablar, pero ahí está, nuestra \"informante\". Se presentó como \cf\"Nona Nadie\"\c-, un nombre obviamente falso, pero da igual, aparementente fue miembrode alto rango de la \cfFacultad de Iluminados Nadies\c-, y hasta tuvo contacto cercano con el mismo \cfUruk'Anth\c-. Sí, el tío que se hizo pasar por Dios con D mayúscula.\n"
"\n"
"Las cosas que me está contando, madre mía. La Facultad realmente andaba metida en rollos, rollos de horror cósmico, encima. Hizieron un pacto con una especie de ente de otro universo o algo así, y de ahí es de donde estos demonios mutantes rarunos han salido, entre otras cosas. Mejoras mágicas, poderes oscuros, clarividencia, y dios sabe qué más... Juraron lealtad a una especie de deidad lovecraftiana y más mierdas, y ahora que les has pateado el trasero, el pacto se ha roto y está empezando a \"cobrarlo todo\".\n"
"\n"
"Si no llegamos al fondo de esto, aparentemente, podría significar la ruina de no solo el mundo \cfXevetha\c-, si no también de todos los otros lugares que la Facultad ha tocado. Esto, como podrás suponer, incluye la \cfTierra\c-.\n"
"\n"
"Decir que esto son malas noticias es quedarse corto. No sé aun que es \"Eso\" exactamente, pero definitivamente encontrarás la forma de patear su sobrenatural culo y salvar el mundo, desde luego.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII5 =
"Esto no es la \cfTierra\c-... Parece que has vuelto a \cfUrkai\c-. Bueno, pues menudo desvío, entonces.\n"
"\n"
"Sabes, he estado pensando en lo que hemos visto antes. Es una jodienda que estuvieran colaborando todo este tiempo, la \cfUAC\c- y la facultad. Sí, todo desde que desmantelaron \cfLANIR\c-, deberíamos haberlo visto venir a la legua.\n"
"\n"
"En fin, adelante con la misión, \cfDemo\c-, nos estamos acercando.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII6 =
"Ay madre... En primer lugar, hemos vuelto a \cfSiberia\c-, y esto definitivamente tiene que ser otra instalación abandonada de la facultad, toda congelada y tal. Pero claro, ahora plagada de demonios... Y bichos astrales, también.\n"
"\n"
"Por cierto, aquí viene el lore.\n"
"\n"
"Ya sabes que la facultad es directamente responsable del nacimiento de la mayor parte de demonios, ¿no? Hace decenas de miles de años, cuando se asentaron por primera vez en nuestro planeta... Bueno, pues, las cosas se ponen interesantes cuando preguntas como exactamente se les ocurrió todo eso del proceso de \"demonización\", para transformar humanos en demonios, y tal. Resulta que toda esa mierda era algo que el director, el viejales, mantuvo en secreto absoluto. La mecánica interna de esa tecnología definitivamente no era un diseño \cfXevetha\c-, había magia oscura de entremedio, y nadie podía hacer preguntas al respecto.\n"
"\n"
"Bueno, ahora por fin lo sabemos. Es obvio, lo consiguió gracias a ESA cosa. Y esa cosa... Es el mismísimo origen de la locura que llevó a la fundación de la facultad en primer lugar. \cfUruk'Anth\c- la descubrió por accidente, y vio que hacer un pacto con ella le permitiría a él y sus discípulos alcanzar la divinidad. Esto pasó despues del \cfincidente en Nedoshiaan\c-, ya sabes, cuando el dios tirano para el que trabajava fue asesinado...\n"
"\n"
"Vale, necesito respirar un poco, estoy escribiendo mucho, y aun queda más.\n"
"\n"
"No es un secreto que hay otros universos, eso lo he aprendido de sobra gracias a los dioses. Pero es normalmente raro que entidades externas simplemente se \"cuelen\" en nuestro mundo, a menos que sean, bueno, OTROS dioses.\n"
"\n"
"Si esa cosa es realmente un dios, puede que sea completamente inmortal, y eso no es nada bueno, \cfDemo-chan\c-.\n"
"\n"
"Aun así, seguro que puedes patearle el trasero hasta que no pueda levantarse. Los dioses pueden sangrar, despues de todo, y vas a hacer que lamente haber jodido con NUESTRO mundo.\n"
"\n"
" — Saya";
SWWM_MISSION_EVITERNITYII7 =
"Donde sea que estés, está tan lejos que no podemos cuadrarlo en ningún mapa estelar conocido. Sinceramente, me sorprende. Con sitios como el \cfInfierno\c-, eso aún quedaba dentro de nuestro universo, pero de alguna forma, todo sigue funcionando perfectamente mientras estás... Fuera.\n"
"\n"
"Gracias muchas a los ingenieros de la \cfBleaknet\c-, supongo, todo este sistema de alguna forma nos sigue manteniendo en contacto incluso entre mundos completamente separados. Al menos de esta forma podemos saber que la mayor parte de leyes fundamentales siguen siendo las mismas, pues mira tú.\n"
"\n"
"Honestamente, todo esto de estar en otro universo totalmente distinto... Es fascinante. Espero que podamos conseguir datos picantes de este sitio, jeje...\n"
"\n"
"En fin, frikismo mio aparte, este es el supuesto \cf\"Reino Astral\"\c-, el hogar del \cf\"Orígen\"\c-, tal como la gente de la facultad lo llamaba. Supongo que hay una atmósfera \"normal\" ahí, ya que tu depósito de combustible sigue chupando hidrógeno del ambiente... Aparte de eso, pues sí, un territorio completamente alienígena.\n"
"\n"
"Estate preparada para todo, \cfDemo-chan\c-, ahora estás en la guarida del jefe final.\n"
"\n"
" — Saya";
SWWM_MISSION_HERETIC1 =
"Bienvenida, \cfDemolicionista\c-, a una misión muy especial. Mientras se calma un poco la cosa por aquí, hemos podido retomar nuestro trabajo en el \cfProyecto Akari\c-. Ya sabes, ese tan importante en el que quise trabajar toda la vida. Por ahora todo bien, todo correcto, y vas a ser la primera en tomar parte en la exploración de otros mundos. Hemos rebuscado por el multiverso para encontrar algunos sitios interesantes, y este en particular nos llamó la atención. Se llama \cfParthoris\c-, es un reino de magia y elfos y tal, me mola. Pues eso, espero que el viaje no haya sido muy movido, aún no hemos afinado esa parte.\n"
"\n"

View File

@ -330,6 +330,20 @@ SWWM_SUBS_DEFAULT_ARCHANGELUS5 = "Oh, pero mírate con tus bonitas alitas y todo
SWWM_SUBS_DEFAULT_ARCHANGELUS6 = "Ya ya, siempre es lo mismo con gente como tú.";
SWWM_SUBS_DEFAULT_ARCHANGELUS7 = "Bueno, pero vosotros vais a tope con la mierda de pretender ser dioses, ¿no?";
SWWM_SUBS_DEFAULT_ARCHANGELUS8 = "Me parece que voy a tener que hacerte entenderlo a ostias.";
// Eviternity II boss
SWWM_SUBS_DEFAULT_EVITERNATUS11 = "¿Que diantres eres?";
SWWM_SUBS_DEFAULT_EVITERNATUS12 = "Lo que sea que es eso, está cabreado.";
SWWM_SUBS_DEFAULT_EVITERNATUS13 = "Tú estás detrás de todo esto, ¿no?";
SWWM_SUBS_DEFAULT_EVITERNATUS14 = "Hora del jefe final...";
SWWM_SUBS_DEFAULT_EVITERNATUS21 = "Oh perfecto, ha vuelto.";
SWWM_SUBS_DEFAULT_EVITERNATUS22 = "¿Quieres más? ¡Pues vamos!";
SWWM_SUBS_DEFAULT_EVITERNATUS23 = "Muy bien, segundo asalto.";
SWWM_SUBS_DEFAULT_EVITERNATUS24 = "Aun no he terminado contigo.";
SWWM_SUBS_DEFAULT_EVITERNATUS31 = "¿Que demonios?";
SWWM_SUBS_DEFAULT_EVITERNATUS32 = "¡Madre mía aun sigue vivo!";
SWWM_SUBS_DEFAULT_EVITERNATUS33 = "Leñe, ¡pero muerete ya!";
SWWM_SUBS_DEFAULT_EVITERNATUS34 = "¿Tercer... Asalto?";
SWWM_SUBS_DEFAULT_EVITERNATUS35 = "Bueno, a la tercera va la vencida.";
// "hself ruoy erutrot lliw I" (supposedly)
SWWM_SUBS_DEFAULT_DSPARILA1 = "Oh pero mírate, si es caperucita roja.";
SWWM_SUBS_DEFAULT_DSPARILA2 = "¿Por que no te bajas de esa cosa y hablamos?";
@ -413,3 +427,5 @@ SWWM_SUBS_DEFAULT_MIRROR10 = "La verdad es que me gusta mirarme... Tampoco es qu
SWWM_SUBS_DEFAULT_SMOOCH1 = "Besitos~";
// Sunlust MAP29
SWWM_SUBS_DEFAULT_LUSTYSUNS = "Espera... ¿Que ponía ahí?";
// Invinciball use (no more Sundowner voiceclip)
SWWM_SUBS_DEFAULT_INVINCIBALL1 = "¡Soy puñeteramente invencible!";

View File

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1079 \cu(Wed 3 Jan 20:27:52 CET 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1079 \cu(2024-01-03 20:27:52)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1080 \cu(Thu 4 Jan 19:50:26 CET 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1080 \cu(2024-01-04 19:50:26)\c-";

View File

@ -46,7 +46,6 @@ misc/health_pkup = "sounds/general/hpickup.ogg"
misc/spawn = "sounds/CORK.ogg"
misc/teleport = "sounds/general/teleport.ogg"
misc/chat = "sounds/CHATBEEP.ogg"
misc/sundowner = "sounds/SUNDOWNER.ogg"
misc/emone = "sounds/EMONE.ogg"
misc/trombone = "sounds/SADTROMBONE.ogg"
misc/lamborghini = "sounds/GNAWLIDGE.ogg"

View File

@ -356,6 +356,20 @@ voice/default/archangelus5 = "sounds/voice/default/va/demoarchangelus5.ogg"
voice/default/archangelus6 = "sounds/voice/default/va/demoarchangelus6.ogg"
voice/default/archangelus7 = "sounds/voice/default/va/demoarchangelus7.ogg"
voice/default/archangelus8 = "sounds/voice/default/va/demoarchangelus8.ogg"
voice/default/eviternatus11 = "sounds/voice/default/va/demoeviternatus11.ogg"
voice/default/eviternatus12 = "sounds/voice/default/va/demoeviternatus12.ogg"
voice/default/eviternatus13 = "sounds/voice/default/va/demoeviternatus13.ogg"
voice/default/eviternatus14 = "sounds/voice/default/va/demoeviternatus14.ogg"
voice/default/eviternatus15 = "sounds/voice/default/va/demoeviternatus15.ogg"
voice/default/eviternatus21 = "sounds/voice/default/va/demoeviternatus21.ogg"
voice/default/eviternatus22 = "sounds/voice/default/va/demoeviternatus22.ogg"
voice/default/eviternatus23 = "sounds/voice/default/va/demoeviternatus23.ogg"
voice/default/eviternatus24 = "sounds/voice/default/va/demoeviternatus24.ogg"
voice/default/eviternatus31 = "sounds/voice/default/va/demoeviternatus31.ogg"
voice/default/eviternatus32 = "sounds/voice/default/va/demoeviternatus32.ogg"
voice/default/eviternatus33 = "sounds/voice/default/va/demoeviternatus33.ogg"
voice/default/eviternatus34 = "sounds/voice/default/va/demoeviternatus34.ogg"
voice/default/eviternatus35 = "sounds/voice/default/va/demoeviternatus35.ogg"
voice/default/dsparila1 = "sounds/voice/default/va/demodsparila1.ogg"
voice/default/dsparila2 = "sounds/voice/default/va/demodsparila2.ogg"
voice/default/dsparila3 = "sounds/voice/default/va/demodsparila3.ogg"
@ -425,3 +439,6 @@ voice/default/smooch1 = "sounds/voice/default/va/demosmooch1.ogg"
voice/default/smooch2 = "sounds/voice/default/va/demosmooch2.ogg"
voice/default/smooch3 = "sounds/voice/default/va/demosmooch3.ogg"
voice/default/lustysuns = "sounds/voice/default/va/demolustysuns.ogg"
voice/default/invinciball1 = "sounds/voice/default/va/demoinvinciball1.ogg"
voice/default/invinciball2 = "sounds/voice/default/va/demoinvinciball2.ogg"
voice/default/invinciball3 = "sounds/voice/default/va/demoinvinciball3.ogg"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -159,4 +159,14 @@ EBCA8E5E02430E9642D24CF2ADBAE80D
ECC2BCC872F0F1C09711246B85901F1C
F930BA8E480B2A5C94829C2A2A585157
FB0369DB6D3F4E117947764CEC906C92
# SIGIL II
217F956C4F5B0F872C5F9013C9B23CD1
2D08AD5CAA92AC69A805B46385ECF9B4
42D1C15691EFE8664EDC0F611242131A
5BA3D00F6B64F6268E11C6851D47ECBF
7D6698B2DD1904908144A3AEC4BD53FA
A2D5FFFDE75CDC907F45E5193A5B9DAB
D5E7640BEB3346650095787BBA0C2984
E70BA6CD12A90F793FFD4F941140A630
F00298FA653C0D10303DB09CA89E68E0
# TNT and Plutonia are not included, they're not part of the campaign

View File

@ -241,6 +241,8 @@ DoomEdNums
4206920 = Chancebox
// these are also pp stuff
4206930 = SWWMDialogueTriggerGOTCHAEND
4206931 = SWWMDialogueTriggerSpcEV2BCD
4206932 = SWWMDialogueTriggerEV2J
4206990 = SWWMGuard
4206991 = SWWMHans
4206992 = SWWMSS

View File

@ -105,6 +105,12 @@ Class SWWMLevelCompatibility : LevelPostProcessor
break;
// SIGIL E5M8
case '6EAD80DA1F30B4B3546FA294EEF9F87C':
level.nextsecretmap = level.nextmap; // so the handler can detect this
if ( LevelInfo.MapExists("E6M1") ) level.nextmap = "E6M1";
else if ( LevelInfo.MapExists("MAP01") ) level.nextmap = "MAP01";
break;
// SIGIL II E6M8
case '5BA3D00F6B64F6268E11C6851D47ECBF':
level.nextsecretmap = level.nextmap; // so the handler can detect this
if ( LevelInfo.MapExists("MAP01") ) level.nextmap = "MAP01";
break;
@ -152,6 +158,7 @@ Class SWWMLevelCompatibility : LevelPostProcessor
break;
// Ultimate Doom 2 MAP20 (dv3.1)
case '96C5914A9B4A2383DE6BBE363940DF2F':
{
// add a "sector enter" action for reaching the exit room
// and make it trigger a dialogue
uint nt = AddThing(9998,(-9360,12768,12));
@ -162,6 +169,7 @@ Class SWWMLevelCompatibility : LevelPostProcessor
nt = AddThing(4206930,(0,0,0));
SetThingID(nt,tiddy);
break;
}
// EQUINOX: various boss brain setups that could be cheesed with the Ynykron or silver bullet
// Equinox MAP04
case 'E66BCCFAD7AC40EFB21E2A19131E1522':
@ -484,6 +492,26 @@ Class SWWMLevelCompatibility : LevelPostProcessor
for ( int i=0; i<13; i++ )
AddThing(4206900+i,(1472+64*i,640,0),0,SKILLS_ALL,MTF_SINGLE|MTF_COOPERATIVE);
break;
// Eviternity 2 MAP01 (RC5)
case '3907915FEC75DEE3A53374D90C4F4B65':
// special trigger for a bunch of dialogues
AddThing(4206931,(0,0,0));
break;
// Eviternity 2 MAP26 (RC5)
case '16D93AEE8243E17D8F241CE49FD5D7B6':
{
// add a "sector actor hits floor" action for going down into the hole™
// and make it trigger a dialogue
uint nt = AddThing(9999,(-576,1344,-352));
SetThingFlags(nt,MODES_ALL|MTF_STANDSTILL); // trigger once
SetThingSpecial(nt,Thing_Activate);
int tiddy = level.FindUniqueTid(9999);
SetThingArgument(nt,0,tiddy);
nt = AddThing(4206932,(0,0,0));
SetThingID(nt,tiddy);
break;
}
break;
// Eviternity 2 MAP33 (RC5)
case '043FE06534270E95882CA128AF7B0402':
// add autosave triggers to a couple sections

View File

@ -185,7 +185,18 @@ Class SWWMHandler : EventHandler
if ( !SWWMUtility.IsKnownMap() ) break;
if ( s.myplayer != players[consoleplayer] ) continue;
int clust = level.cluster;
if ( SWWMUtility.IsEviternity() )
if ( SWWMUtility.IsEviternityTwo() )
{
// clusters have to be remapped here
if ( clust == 5 ) clust = 1;
else if ( (clust == 6) || (clust == 13) ) clust = 2;
else if ( (clust == 7) || (clust == 14) ) clust = 3;
else if ( (clust == 8) || (clust == 15) ) clust = 4;
else if ( (clust == 9) || (clust == 16) ) clust = 5;
else if ( (clust == 10) || (clust == 17) ) clust = 6;
else if ( (clust == 11) || (clust == 12) || (clust == 18) || (clust == 19) ) clust = 7;
}
else if ( SWWMUtility.IsEviternity() )
{
// we have to do some heavy lifting here because episodes don't match clusters
if ( level.levelnum <= 5 ) clust = 1;

View File

@ -61,7 +61,7 @@ extend Class SWWMHandler
l.DirectAdd("Saya");
l.DirectAdd("UAC");
l.DirectAdd("DemonInvasion");
if ( SWWMUtility.IsEviternity() )
if ( SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() )
{
l.DirectAdd("Gods");
l.DirectAdd("SUSAN");

View File

@ -721,7 +721,8 @@ extend Class SWWMHandler
else if ( e.Replacee is 'KeyBlue' ) e.Replacement = 'SWWMKeyBlue';
else if ( e.Replacee is 'KeyYellow' ) e.Replacement = 'SWWMKeyYellow';
else if ( e.Replacee.GetClassName() == 'KeyRed' ) e.Replacement = 'SWWMKeyRed';
else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = SWWMUtility.PickSWWMSlot1();
else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = SWWMUtility.IsEviternityTwo()?SWWMUtility.PickSWWMSlot0():SWWMUtility.PickSWWMSlot1();
else if ( (e.Replacee.GetClassName() == 'Perforator') && SWWMUtility.IsEviternityTwo() ) SWWMUtility.PickSWWMSlot0(); // Eviternity 2
else if ( (e.Replacee is 'Fist') || (e.Replacee is 'Staff') ) e.Replacement = 'DeepImpact';
else if ( (e.Replacee is 'Pistol') || (e.Replacee is 'GoldWand') || (e.Replacee is 'FWeapFist') || (e.Replacee is 'CWeapMace') || (e.Replacee is 'MWeapWand') ) e.Replacement = SWWMUtility.PickSWWMSlot2();
else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') ) e.Replacement = SWWMUtility.IsDoomOne()?SWWMUtility.PickDoomSlot3():SWWMUtility.PickSWWMSlot3();

View File

@ -98,6 +98,10 @@ extend Class SWWMHandler
ui int cummdamage, lastcummtic; // please do not misread
ui Font mSmallFont, mTinyFont;
bool archangelus_zapped; // skips second phase dialogue
bool eviternatus_zapped; // bonus dlg for ynykron survival
bool eviternatus_postzap; // so the bonus dlg doesn't play twice
enum EVanillaMap
{
MAP_NONE,
@ -118,7 +122,8 @@ extend Class SWWMHandler
MAP_HMAP38,
MAP_HMAP40,
MAP_HMAP60,
MAP_EVMAP30 // eviternity
MAP_EVMAP30, // eviternity
MAP_EVIIMAP30 // eviternity 2
};
static play void AddBoss( int tid, String tag, bool endgame = false )
@ -228,6 +233,8 @@ extend Class SWWMHandler
return MAP_HMAP60;
if ( mapsum ~== "5C5E5C08AF3572F31CF27318679F2B4E" )
return MAP_EVMAP30;
if ( mapsum ~== "966EF50BC1C9994F0F303CD1835014FF" ) // subject to change, not final
return MAP_EVIIMAP30;
return MAP_NONE;
}
private void VanillaBossSpawn( WorldEvent e )
@ -459,7 +466,74 @@ extend Class SWWMHandler
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EVIB");
if ( !archangelus_zapped )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EVIB");
}
}
else if ( bossmap == MAP_EVIIMAP30 )
{
if ( e.Thing.GetClassName() == "EviternatusAntaSpawner" )
{
bossactors.Push(e.Thing);
bossviewactor = e.Thing;
bosstag = "$BT_EVITERNATUS";
// hack to avoid "all clear" between phases
level.total_monsters += 3;
}
else if ( e.Thing.GetClassName() == "EviternatusAnta" )
{
// first phase
bossactors.Clear();
bossviewactor = null;
initialized = false;
bossactors.Push(e.Thing);
e.Thing.StartHealth = e.Thing.Health *= 5;
bosstag = "$BT_EVITERNATUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
// undo the hack (part 1)
level.total_monsters--;
}
else if ( e.Thing.GetClassName() == "EviternatusBete" )
{
// second phase
bossactors.Clear();
bossviewactor = null;
initialized = false;
bossactors.Push(e.Thing);
e.Thing.StartHealth = e.Thing.Health *= 5;
bosstag = "$BT_EVITERNATUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
if ( eviternatus_zapped )
{
eviternatus_postzap = true;
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2N");
}
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2L");
// undo the hack (part 2)
level.total_monsters--;
}
else if ( e.Thing.GetClassName() == "EviternatusCeph" )
{
// third phase
bossactors.Clear();
bossviewactor = null;
initialized = false;
bossactors.Push(e.Thing);
e.Thing.StartHealth = e.Thing.Health *= 5;
bosstag = "$BT_EVITERNATUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
if ( eviternatus_zapped )
{
if ( eviternatus_postzap )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2O");
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2N");
}
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2M");
// undo the hack (part 3)
level.total_monsters--;
}
}
if ( ccloaded && (e.Thing.GetClassName() == "CCards_Boss_Romero") )
@ -481,7 +555,7 @@ extend Class SWWMHandler
{
if ( !a ) continue;
if ( (!a.target || !a.CheckSight(a.target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY))
&& (!bossviewactor || (bossviewactor && !bossviewactor.target)) ) continue;
&& (!bossviewactor || (bossviewactor && !bossviewactor.InStateSequence(bossviewactor.CurState,bossviewactor.SeeState))) ) continue;
initialized = true;
// oneliners
if ( bossmap == MAP_DMAP30 )
@ -505,6 +579,16 @@ extend Class SWWMHandler
highesttic = gametic;
lastcombat = AddOneliner("archangelus",1,300);
}
else if ( bossmap == MAP_EVIIMAP30 )
{
highesttic = gametic;
if ( a.GetClassName() == "EviternatusAnta" )
lastcombat = AddOneliner("eviternatus1",1,40);
else if ( a.GetClassName() == "EviternatusBete" )
lastcombat = AddOneliner("eviternatus2",1,40);
else if ( a.GetClassName() == "EviternatusCeph" )
lastcombat = AddOneliner("eviternatus3",1,40);
}
break;
}
}

View File

@ -65,7 +65,19 @@ extend Class SWWMHandler
{
int clust = 0;
bool secret = false;
if ( SWWMUtility.IsEviternity() )
if ( SWWMUtility.IsEviternityTwo() )
{
// clusters have to be remapped here
let clus = level.cluster;
if ( clus == 5 ) clust = 1;
else if ( (clus == 6) || (clus == 13) ) clust = 2;
else if ( (clus == 7) || (clus == 14) ) clust = 3;
else if ( (clus == 8) || (clus == 15) ) clust = 4;
else if ( (clus == 9) || (clus == 16) ) clust = 5;
else if ( (clus == 10) || (clus == 17) ) clust = 6;
else if ( (clus == 11) || (clus == 12) || (clus == 18) || (clus == 19) ) clust = 7;
}
else if ( SWWMUtility.IsEviternity() )
{
// we have to do some heavy lifting here because episodes don't match clusters
if ( level.levelnum <= 5 ) clust = 1;
@ -270,6 +282,9 @@ extend Class SWWMHandler
case MAP_EVMAP30:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EVIA");
break;
case MAP_EVIIMAP30:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2K");
break;
case MAP_HE1M8_HE4M8:
if ( level.mapname ~== "E1M8" ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue.MAW");
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue.HEADS");
@ -309,6 +324,9 @@ extend Class SWWMHandler
|| (csum ~== "09B30C9DA9D73D3D5A709502FBB947AA")
|| (csum ~== "6EAD80DA1F30B4B3546FA294EEF9F87C") )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.SIGIL");
// SIGIL 2 E6M8
if ( csum ~== "5BA3D00F6B64F6268E11C6851D47ECBF" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.SIGIL2");
// Doom 2 MAP11
else if ( (csum ~== "73D9E03CEE7BF1A97EFD2EAD86688EF8")
|| (csum ~== "F4F2A769609988837458772AAE99008C")
@ -334,6 +352,28 @@ extend Class SWWMHandler
// MAP25
else if ( csum ~== "196BC735473C593F924A59B238574C35" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.SLA");
// Eviternity 2 (RC5)
// MAP01
else if ( csum ~== "3907915FEC75DEE3A53374D90C4F4B65" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2A");
// MAP05
else if ( csum ~== "58A6A5A8214B0C2C28C9DADC349F2853" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2E");
// MAP10
else if ( csum ~== "9525AF4F176085C925124CF118E91DF1" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2F");
// MAP15
else if ( csum ~== "24EFC6868344643D3D4C56BDF2D1E8C7" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2G");
// MAP20
else if ( csum ~== "81B7BDE4BD0E98A9B8741B0405FAB839" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2H");
// MAP25
else if ( csum ~== "56A3EB18F91B2AE42DCF327888AEAA0A" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2I");
// MAP33
else if ( csum ~== "043FE06534270E95882CA128AF7B0402" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2P");
// Deathkings
// Blight
else if ( csum ~== "E3EFB0156A20ADF2DF00915A0EA85DF5" )
@ -425,9 +465,10 @@ extend Class SWWMHandler
allclearsector = 18414; // only check all-clear if the player is standing in this sector
gdat.disablerevive = true; // ONE TRY
}
// for skipping over merged exit lines (sharing vertices)
Array<Line> skipme;
skipme.Clear();
Array<Line> exits;
Array<int> exittypes;
exits.Clear();
exittypes.Clear();
// find exit lines, and use lines that aren't exits
foreach ( l:level.Lines )
{
@ -442,68 +483,51 @@ extend Class SWWMHandler
}
let [isexit, exittype] = SWWMUtility.IsExitLine(l);
if ( !isexit ) continue;
exits.Push(l);
exittypes.Push(exittype);
}
// for skipping over merged exit lines (sharing vertices)
Array<Line> skipme;
skipme.Clear();
for ( int i=0; i<exits.Size(); i++ )
{
let l = exits[i];
if ( skipme.Find(l) < skipme.Size() ) continue;
skipme.Push(l);
// look for connected lines
// only stop once we cannot find more
Array<Line> con;
con.Clear();
con.Push(l);
int found;
if ( l.frontsector )
do
{
do
found = 0;
for ( int j=0; j<exits.Size(); j++ )
{
found = 0;
foreach ( l2:l.frontsector.Lines )
let l2 = exits[j];
if ( (l2 == l) || !SWWMUtility.SameSpecial(l,l2) || (skipme.Find(l2) < skipme.Size()) || (con.Find(l2) < con.size()) ) continue;
// needs to have at least one point in common with this one or any of the added lines
bool nomatches = true;
foreach ( c:con )
{
if ( (l2.special != l.special) || (con.Find(l2) < con.Size()) ) continue;
// needs to have a point in common with this one or any of the added lines
bool nomatches = true;
foreach ( c:con )
{
if ( (l2.v1 != c.v1) && (l2.v2 != c.v2) && (l2.v1 != c.v2) && (l2.v2 != c.v1) )
continue;
nomatches = false;
break;
}
if ( nomatches ) continue;
skipme.Push(l2);
con.Push(l2);
found++;
if ( (l2.v1.p != c.v1.p) && (l2.v2.p != c.v2.p) && (l2.v1.p != c.v2.p) && (l2.v2.p != c.v1.p) )
continue;
nomatches = false;
break;
}
if ( nomatches ) continue;
found++;
skipme.Push(l2);
con.Push(l2);
}
while ( found > 0 );
}
if ( l.backsector )
{
do
{
found = 0;
foreach ( l2:l.backsector.Lines )
{
if ( (l2.special != l.special) || (con.Find(l2) < con.Size()) ) continue;
// needs to have a point in common with this one or any of the added lines
bool nomatches = true;
foreach ( s:skipme )
{
if ( (l2.v1 != s.v1) && (l2.v2 != s.v2) && (l2.v1 != s.v2) && (l2.v2 != s.v1) )
continue;
nomatches = false;
break;
}
if ( nomatches ) continue;
skipme.Push(l2);
con.Push(l2);
found++;
}
}
while ( found > 0 );
}
while ( found > 0 );
Vector3 lpos = (0,0,0);
foreach ( c:con )
lpos += SWWMUtility.UseLinePos(c);
lpos /= con.Size();
SWWMInterest.Spawn(self,lpos,theline:l,theexit:exittype);
SWWMInterest.Spawn(self,lpos,theline:l,theexit:exittypes[i]);
}
// spawn loot
if ( !deathmatch ) Chancebox.SpawnChanceboxes();

View File

@ -116,6 +116,13 @@ extend Class SWWMHandler
let t = new("KoraxYeeted");
t.ChangeStatNum(Thinker.STAT_USER);
}
// Archangelus instakill
if ( (e.Thing.GetClassName() == "ArchangelusA") && (e.Thing.DamageType == 'Ynykron') )
{
// this will skip the second phase dialogue
// (note that you can only have an Ynykron in this fight by cheating, tho)
archangelus_zapped = true;
}
// Archangelus death
if ( e.Thing.GetClassName() == "ArchangelusB" )
{
@ -128,6 +135,12 @@ extend Class SWWMHandler
a.DamageMobj(e.Thing,e.Thing,a.Health,'EndMii',DMG_FORCED|DMG_THRUSTLESS);
}
}
// Eviternatus instakill
if ( ((e.Thing.GetClassName() == "EviternatusAnta") || (e.Thing.GetClassName() == "EviternatusBete")) && (e.Thing.DamageType == 'Ynykron') )
{
// this will trigger special dialogue on the next phase
eviternatus_zapped = true;
}
if ( swwm_partytime )
{
let pt = Actor.Spawn("PartyTime",e.Thing.pos);
@ -264,6 +277,35 @@ extend Class SWWMHandler
e.Thing.SetTag("$FN_FCAPTAIN");
else if ( e.Thing.GetClassName() == "NightmareDemon" )
e.Thing.SetTag("$FN_NDEMON");
// eviternity 2 stuff
else if ( e.Thing.GetClassName() == "FormerCorporal" )
e.Thing.SetTag("$FN_FCORPORAL");
else if ( e.Thing.GetClassName() == "AstralArachnotron" )
e.Thing.SetTag("$FN_ASTRALARACH");
else if ( e.Thing.GetClassName() == "AstralCacodemon" )
e.Thing.SetTag("$FN_ASTRAL");
else if ( e.Thing.GetClassName() == "Veilimp" )
e.Thing.SetTag("$FN_VEILIMP");
else if ( (e.Thing.GetClassName() == "GoldenAstralCaco")
|| (e.Thing.GetClassName() == "GoldenAstralCacoBoss") )
e.Thing.SetTag("$FN_ASTRALGOLD");
else if ( e.Thing.GetClassName() == "DukeOfHell" )
e.Thing.SetTag("$FN_DUKE");
else if ( e.Thing.GetClassName() == "AstralBabycaco" )
e.Thing.SetTag("$FN_ASTRALBABY");
else if ( e.Thing.GetClassName() == "NAC" )
e.Thing.SetTag("$FN_NAC");
else if ( e.Thing.GetClassName() == "AstralMancubus" )
e.Thing.SetTag("$FN_ASTRALFATSO");
else if ( (e.Thing.GetClassName() == "NecromenaceA")
|| (e.Thing.GetClassName() == "NecromenaceB")
|| (e.Thing.GetClassName() == "NecromenaceC")
|| (e.Thing.GetClassName() == "NecromenaceD") )
e.Thing.SetTag("$FN_NECROMENACE");
else if ( (e.Thing.GetClassName() == "EviternatusAnta")
|| (e.Thing.GetClassName() == "EviternatusBete")
|| (e.Thing.GetClassName() == "EviternatusCeph") )
e.Thing.SetTag("$FN_EVITERNATUS");
// doom vacation stuff
else if ( indoomvacation )
{

View File

@ -101,6 +101,7 @@ Class SWWMOneLiner : HUDMessageBase
hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/360.)),1.);
ss = (Screen.GetWidth()/hs,Screen.GetHeight()/hs);
}
ymargin += 10;
if ( whichline == "" ) return; // don't draw empty strings
// split so it can fit
if ( !l ) l = mSmallFont.BreakLines(whichline,int(min(ss.x,ss.y/.5625)*.5));
@ -593,6 +594,67 @@ Class SWWMDialogueTrigger : SWWMNonInteractiveActor abstract
}
Class SWWMDialogueTriggerGOTCHAEND : SWWMDialogueTrigger {}
Class SWWMDialogueTriggerSpcEV2BCD : SWWMNonInteractiveActor
{
Actor thecaco;
int spcstate;
// this one is very special, yup
override void PostBeginPlay()
{
// the one singular astral cacodemon in this map
// needed for everything
foreach ( c:AllActorClasses )
{
if ( c.GetClassName() != "AstralCacodemon" ) continue;
thecaco = Actor(ThinkerIterator.Create(c).Next());
break;
}
if ( !thecaco )
{
Destroy();
return;
}
}
override void Tick()
{
if ( !thecaco || (thecaco.Health <= 0) )
{
EventHandler.SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2D");
Destroy();
return;
}
double dist;
switch ( spcstate )
{
case 0:
// check that the player is close to the astral cacodemon
dist = (thecaco.pos.xy-players[consoleplayer].mo.pos.xy).length();
if ( dist < 1024 )
{
spcstate++;
EventHandler.SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2B");
}
break;
case 1:
// wait until the astral caco leaves its spawn position
dist = (thecaco.pos.xy-thecaco.spawnpoint.xy).length();
if ( dist > 64 ) spcstate++;
break;
case 2:
// check that the player is close to where the astral cacodemon originally was
dist = (thecaco.spawnpoint.xy-players[consoleplayer].mo.pos.xy).length();
if ( dist < 1024 )
{
spcstate++;
EventHandler.SendInterfaceEvent(consoleplayer,"swwmsetdialogue.EV2C");
}
break;
}
}
}
Class SWWMDialogueTriggerEV2J : SWWMDialogueTrigger {}
// I'm just doing this as an experiment, don't mind me

View File

@ -843,7 +843,6 @@ Class FuckingInvinciball : Inventory
{
if ( pickup && !deathmatch ) return false;
if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA,CHANF_OVERLAP);
Owner.A_StartSound("misc/sundowner",CHAN_POWERUPEXTRA);
let i = InvinciballPower(Owner.FindInventory("InvinciballPower"));
if ( i )
{
@ -853,7 +852,11 @@ Class FuckingInvinciball : Inventory
if ( Owner is 'Demolitionist' )
Demolitionist(Owner).lastbump *= 1.1;
}
else Owner.GiveInventory("InvinciballPower",1);
else
{
Owner.GiveInventory("InvinciballPower",1);
SWWMHandler.AddOneliner("invinciball",2,40);
}
SWWMUtility.AchievementProgressInc("sunny",1,Owner.player);
return true;
}

View File

@ -57,6 +57,18 @@ extend Class DemolitionistMenu
c_minute = 9;
c_tz = "+09";
}
else if ( SWWMUtility.IsEviternityTwo() )
{
// June 11th 2150, 04:09 +09
// (June 11th 2150, 04:09 JST)
// Epoch: 5694174540
c_year = 2150;
c_month = 5;
c_day = 10;
c_hour = 4;
c_minute = 9;
c_tz = "+09";
}
else // Doom
{
// June 6th 2148, 18:37 EDT

View File

@ -24,6 +24,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
// saves time
bool nrftl = false;
bool eviternity = false;
bool eviternitwo = false;
bool hexdd = false;
String missionstr;
let stats = SWWMStats.Find(players[consoleplayer]);
@ -32,7 +33,20 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
int clus = level.cluster;
if ( clus == 11 ) nrftl = true;
eviternity = SWWMUtility.IsEviternity();
if ( eviternity )
eviternitwo = SWWMUtility.IsEviternityTwo();
if ( eviternitwo )
{
// clusters in eviternity 2 have to be remapped
if ( clus == 5 ) clus = 1;
else if ( (clus == 6) || (clus == 13) ) clus = 2;
else if ( (clus == 7) || (clus == 14) ) clus = 3;
else if ( (clus == 8) || (clus == 15) ) clus = 4;
else if ( (clus == 9) || (clus == 16) ) clus = 5;
else if ( (clus == 10) || (clus == 17) ) clus = 6;
else if ( (clus == 11) || (clus == 12) || (clus == 18) || (clus == 19) ) clus = 7;
missionstr = String.Format("$SWWM_MISSION_EVITERNITYII%d",clus);
}
else if ( eviternity )
{
// we have to do some heavy lifting here because episodes don't match clusters
if ( level.levelnum <= 5 ) clus = 1;
@ -48,6 +62,8 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
// naive method to guess if this is sigil
else if ( (clus == 5) && (level.mapname.Left(2) == "E5") )
missionstr = String.Format("$SWWM_MISSION_SIGIL");
else if ( (clus == 6) && (level.mapname.Left(2) == "E6") )
missionstr = String.Format("$SWWM_MISSION_SIGIL2");
else missionstr = String.Format("$SWWM_MISSION_DOOM%d",clus);
int csiz = stats.clustervisit.Size();
if ( (csiz > 0) && stats.secretdone[csiz-1] )
@ -61,11 +77,11 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
for ( int i=0; i<csiz; i++ )
{
// also include sigil
if ( !eviternity && (stats.clustervisit[i] >= 5) && (stats.clustervisit[i] != 25) ) continue;
if ( !eviternity && !eviternitwo && (stats.clustervisit[i] >= 5) && (stats.clustervisit[i] != 25) && (stats.clustervisit[i] != 26) ) continue;
fromdoomone = true;
break;
}
if ( !eviternity && (clus == 5) && fromdoomone )
if ( !eviternity && !eviternitwo && (clus == 5) && fromdoomone )
missionstr = "$SWWM_MISSION_DOOM5_FROMDOOM1";
if ( StringTable.Localize(missionstr) ~== missionstr.Mid(1) )
missionstr = "$SWWM_MISSION_NONE";
@ -76,8 +92,8 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
if ( (stats.clustervisit[i] == clus) && !firstskip )
continue;
firstskip = true;
String xstr = String.Format(eviternity?"$SWWM_MISSION_EVITERNITY%d":"$SWWM_MISSION_DOOM%d",stats.clustervisit[i]);
if ( !eviternity && (stats.clustervisit[i] == 5) && fromdoomone )
String xstr = String.Format(eviternitwo?"$SWWM_MISSION_EVITERNITYII%d":eviternity?"$SWWM_MISSION_EVITERNITY%d":"$SWWM_MISSION_DOOM%d",stats.clustervisit[i]);
if ( !eviternity && !eviternitwo && (stats.clustervisit[i] == 5) && fromdoomone )
xstr = "$SWWM_MISSION_DOOM5_FROMDOOM1";
if ( stats.secretdone[i] )
{
@ -89,6 +105,18 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
continue;
mtext.Push(new("DemolitionistMenuTextBox").Init(master,xstr));
}
if ( eviternitwo )
{
// prepend all mission briefings from Eviternity
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY6")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY5")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY4_SECRET")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY8")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY7")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY3")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY2")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY1")));
}
}
else if ( (gameinfo.gametype&GAME_Heretic) && SWWMUtility.IsKnownMap() )
{
@ -155,23 +183,23 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
break;
case MK_LEFT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel < (mtext.Size()-1)) )
{
master.MenuSound("menu/demoscroll");
sel--;
if ( sel < 0 ) sel = mtext.Size()-1;
mtext[sel].smofs = mtext[sel].ofs = 0;
sel++;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
case MK_RIGHT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel > 0) )
{
master.MenuSound("menu/demoscroll");
sel++;
if ( sel >= mtext.Size() ) sel = 0;
mtext[sel].smofs = mtext[sel].ofs = 0;
sel--;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
@ -193,23 +221,23 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
break;
}
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel > 0) )
{
master.MenuSound("menu/demoscroll");
sel--;
if ( sel < 0 ) sel = mtext.Size()-1;
mtext[sel].smofs = mtext[sel].ofs;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
case MB_RIGHT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel < (mtext.Size()-1)) )
{
master.MenuSound("menu/demoscroll");
sel++;
if ( sel >= mtext.Size() ) sel = 0;
mtext[sel].smofs = mtext[sel].ofs;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
@ -285,7 +313,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
if ( mtext.Size() <= 1 ) return;
double xx = master.ws.x-(mtext[sel].scrollbar?11:3);
double yy = master.ws.y-25;
String str = String.Format("%d \cf/\c- %d",sel+1,mtext.Size());
String str = String.Format("%d \cf/\c- %d",mtext.Size()-sel,mtext.Size());
Screen.DrawText(master.mTinyFont,Font.CR_FIRE,(master.origin.x+xx)-master.mTinyFont.StringWidth(str),master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
}
}

View File

@ -20,7 +20,7 @@ Class DemolitionistSecretTab : DemolitionistMenuTab
String str = StringTable.Localize("$SWWM_KIRINPOEM");
l = master.mSmallFont.BreakLines(str,600);
}
else if ( (gameinfo.gametype&GAME_Heretic) || SWWMUtility.IsEviternity() )
else if ( (gameinfo.gametype&GAME_Heretic) || SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() )
{
img = TexMan.CheckForTexture("graphics/KBase/Drawing_Ibuki.png");
sub = StringTable.Localize("$SWWM_CUTIECLUB");

View File

@ -44,7 +44,7 @@ Class SWWMHelpMenu : GenericMenu
pagehdr[i] = StringTable.Localize("$SWWM_HELP_STORY");
if ( gameinfo.gametype&GAME_Heretic ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYHERETIC"),600);
else if ( gameinfo.gametype&GAME_Hexen ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYHEXEN"),600);
else if ( SWWMUtility.IsEviternity() ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYEVITERNITY"),600);
else if ( SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() ) pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYEVITERNITY"),600);
else pagetxt[i] = mSmallFont.BreakLines(StringTable.Localize("$SWWM_HELP_STORYDOOM"),600);
break;
case PAGE_DEMO:

View File

@ -584,7 +584,7 @@ Class SWWMLoreLibrary : SWWMStaticThinker
else if ( text ~== "SWWM_LORETXT_MARISA" )
text = "SWWM_LORETXT_MARISA2"; // post-invasion update
}
if ( (gameinfo.gametype&GAME_Raven) || SWWMUtility.IsEviternity() || (mlog && (mlog.year >= 2150) && (mlog.month >= 5)) )
if ( (gameinfo.gametype&GAME_Raven) || SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() || (mlog && (mlog.year >= 2150) && (mlog.month >= 5)) )
{
if ( text ~== "SWWM_LORETXT_AKARILABS" )
text = "SWWM_LORETXT_AKARILABS2"; // demo won, akari project announced

View File

@ -50,6 +50,7 @@ extend Class SWWMUtility
if ( gameinfo.gametype&GAME_DOOM )
{
if ( IsEviternity() ) return true;
if ( IsEviternityTwo() ) return true;
if ( IsUltDoom2() ) return true;
}
return false;
@ -73,6 +74,18 @@ extend Class SWWMUtility
return false;
}
// detect eviternity 2 (naive method)
static bool IsEviternityTwo()
{
foreach ( cls:AllActorClasses )
{
if ( cls.GetClassName() != "EviternatusAnta" )
continue;
return true;
}
return false;
}
// detect doom vacation
static bool InDoomVacation()
{

View File

@ -41,6 +41,8 @@ extend Class SWWMUtility
basetag = "SPECTRE";
break;
case 'LostSoul':
case 'LostSoulEvit2':
case 'LostSoulCount':
basetag = "LOST";
break;
case 'Cacodemon':
@ -78,6 +80,8 @@ extend Class SWWMUtility
basetag = "SPIDER";
break;
case 'Cyberdemon':
case 'CyberdemonEvit2':
case 'CyberdemonMAP24':
basetag = "CYBER";
break;
case 'SWWMBossBrain':
@ -223,6 +227,46 @@ extend Class SWWMUtility
case 'NightmareDemon':
basetag = "NDEMON";
break;
// eviternity 2
case 'FormerCorporal':
basetag = "FCORPORAL";
break;
case 'AstralArachnotron':
basetag = "ASTRALARACH";
break;
case 'AstralCacodemon':
basetag = "ASTRAL";
break;
case 'Veilimp':
basetag = "VEILIMP";
break;
case 'GoldenAstralCaco':
case 'GoldenAstralCacoBoss':
basetag = "ASTRALGOLD";
break;
case 'DukeOfHell':
basetag = "DUKE";
break;
case 'AstralBabyCaco':
basetag = "ASTRALBABY";
break;
case 'NAC':
basetag = "NAC";
break;
case 'AstralMancubus':
basetag = "ASTRALFATSO";
break;
case 'NecromenaceA':
case 'NecromenaceB':
case 'NecromenaceC':
case 'NecromenaceD':
basetag = "NECROMENACE";
break;
case 'EviternatusAnta':
case 'EviternatusBete':
case 'EviternatusCeph':
basetag = "EVITERNATUS";
break;
}
if ( basetag == "" ) return a.GetTag(defstr);
String funtag = "FN_"..basetag.."_FUN";
@ -263,6 +307,11 @@ extend Class SWWMUtility
if ( a == 'StealthRevenant' ) return 'Revenant';
if ( a == 'StealthShotgunGuy' ) return 'ShotgunGuy';
if ( a == 'StealthZombieMan' ) return 'ZombieMan';
// eviternity 2 hackery
if ( a.GetClassName() == 'LostSoulEvit2' ) return 'LostSoul';
if ( a.GetClassName() == 'LostSoulCount' ) return 'LostSoul';
if ( a.GetClassName() == 'CyberdemonEvit2' ) return 'Cyberdemon';
if ( a.GetClassName() == 'CyberdemonMAP24' ) return 'Cyberdemon';
// heretic monsters
if ( a == 'Sorcerer2' ) return 'Sorcerer1';
if ( a == 'HereticImpLeader' ) return 'HereticImp';

View File

@ -676,4 +676,15 @@ extend Class SWWMUtility
// is the point behind both lines?
return (Level.PointOnLineSide(p,a) && Level.PointOnLineSide(p,b));
}
static bool SameSpecial( Line a, Line b )
{
if ( a.special != b.special ) return false;
for ( int i=0; i<5; i++ )
{
if ( a.args[i] != b.args[i] )
return false;
}
return true;
}
}