Deathkings of the Dark Citadel support.

This commit is contained in:
Mari the Deer 2021-02-11 23:25:16 +01:00
commit d913752e31
20 changed files with 427 additions and 68 deletions

View file

@ -0,0 +1,66 @@
// edited Hexen ending (for Deathkings)
// draws the three player classes unconditionally
// shifts the final text screen so it doesn't get cut off
// it also gives it a lil' flavor change (heh)
Intermission Inter_Chess
{
Fader
{
Music = "Hall"
Background = "graphics/FINALE1_noorb.png"
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "graphics/FINALE1_noorb.png"
TextSpeed = 3
Text = "$TXT_HEXDD_WIN1MSG"
Time = -250
}
TextScreen
{
Music = "Orb"
Background = "FINALE2"
TextSpeed = 3
Text = "$TXT_HEXDD_WIN2MSG"
Time = -250
}
Fader
{
Background = "FINALE2"
Time = 2
FadeType = FadeOut
}
Fader
{
Music = "music/nomusic.ogg"
Sound = "misc/orbexplode"
Background = "graphics/FINALE2_splode.png"
Time = 6
FadeType = FadeOut
}
TextScreen
{
Background = "graphics/FINALE2_black.png"
TextSpeed = 3
Text = "$TXT_HEXDD_WIN3MSG"
Time = -250
}
Fader
{
Music = "Chess"
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
TextSpeed = 3
Text = "$TXT_HEXDD_WIN4MSG"
Position = 10, 120
}
}

View file

@ -0,0 +1,50 @@
// edited Hexen ending
// draws the three player classes unconditionally
// shifts the final text screen so it doesn't get cut off
Intermission Inter_Chess
{
Fader
{
Music = "Hall"
Background = "FINALE1"
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "FINALE1"
TextSpeed = 3
Text = "$TXT_HEXEN_WIN1MSG"
Time = -250
}
TextScreen
{
Music = "Orb"
Background = "FINALE2"
TextSpeed = 3
Text = "$TXT_HEXEN_WIN2MSG"
Time = -250
}
Fader
{
Background = "FINALE2"
Time = 2
FadeType = FadeOut
}
Fader
{
Music = "Chess"
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
TextSpeed = 3
Text = "$TXT_HEXEN_WIN3MSG"
Position = 10, 120
}
}

BIN
graphics/FINALE1_noorb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
graphics/FINALE2_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

BIN
graphics/FINALE2_splode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -158,6 +158,7 @@ T_KEYRUSTED = "\cbRusted Key\c-";
T_KEYHORN = "\coHorn Key\c-";
T_KEYSWAMP = "\cpSwamp Key\c-";
T_KEYCASTLE = "\cxCastle Key\c-";
T_CHAOSSPHERE = "\cwChaos Sphere\c-";
// shortened doom key pickup messages
GOTBLUECARD = "Blue Keycard";
GOTYELWCARD = "Yellow Keycard";
@ -607,6 +608,7 @@ BT_MAGE = "Menelkir, Archmage of The Arcanum";
BT_DRAGON = "Death Wyvern, Nether Beast";
BT_HERESIARCH = "Heresiarch, Demonic Sorcerer";
BT_KORAX = "Korax, Trickster Demon";
BT_DEATHKINGS = "Deathkings of the Dark Citadel";
// fun boss tags
BT_BRUISERS_FUN = "Super Bruiser Bros";
BT_CYBIE_FUN = "Shoot It Until It Dies";
@ -624,6 +626,7 @@ BT_MAGE_FUN = "Menelkir the Magic Boi";
BT_DRAGON_FUN = "A Motherfucking Dragon";
BT_HERESIARCH_FUN = "Very Pissed Off Red Dude";
BT_KORAX_FUN = "Korax the Big Stinky Ugly Bastard";
BT_DEATHKINGS_FUN = "A Very Anticlimactic Boss Rehash";
// eviternity
BT_ARCHANGELUS = "Archangelus, Celestial Agent";
BT_ARCHANGELUS_FUN = "Big Fucking Angel Dude";

View file

@ -340,6 +340,32 @@ SWWM_MISSION_HEXEN5 =
"Win this battle, \cfDemo-chan\c-. A very fine reward awaits you back home, oh yes.\n"
"\n"
"Saya out.";
SWWM_MISSION_HEXDD1 =
"Well, that was unexpected, and I guess... welcome to ANOTHER side mission, \cfDemolitionist\c-. Sure, this happened entirely by surprise, and I'm going to have to take more precautions next time. That honestly scared the fuck out of me.\n"
"\n"
"So, I'm at as much of a loss as you about what that fucking orb did. Both you AND the thing disappeared out of nowhere. I don't know WHAT exactly made this happen, but whatever, at least you didn't get erased, so that's a MASSIVE relief, let me tell you.\n"
"\n"
"The location data shows that you're still in \cfCronos\c-, although this place is... quite far away from the others you were in. I have a bad feeling about this, it's reminding me way too much about what happened back when you beat up the other \cfSerpent Rider\c-, that some fucker just yoinked you away. Well, whoever it is, find them and kick their ass.\n"
"\n"
"Do your thing, \cfDemo-chan\c-. Fuck 'em up!\n"
"\n"
"Saya out.";
SWWM_MISSION_HEXDD2 =
"Geez, I don't even know where to start, this place is really a mess, but I managed to gather some info at least. For starters, you're in some sort of \"realm of the dead\", ruled by a bunch of people known as the \cfDeathkings\c-. Yeah, sounds very colorful, I know. I don't know if they're responsible for pulling you in here, but if they are, then that makes them our target.\n"
"\n"
"*sigh*\n"
"\n"
"I'm just getting so tired, \cfDemo-chan\c-. At least watching you explode all these monsters into bits is entertaining.\n"
"\n"
"Saya out.";
SWWM_MISSION_HEXDD3 =
"This better be the end of all this nonsense, this so-called \cfDark Citadel\c-. If those \cfDeathkings\c- are there, then maybe you can rearrange their bodies into chunky salsa as punishment for stealing you away.\n"
"\n"
"You know, even \cfKirin\c- is pissed about this now, and I generally don't see him get angry, unless it's at videogames. Yeah, this is taking a toll on all of us, and I can tell you're not too happy about it either.\n"
"\n"
"Well, \cfDemo-chan\c-, may all this anger we feel give you strength to absolutely fucking obliterate those sons of bitches. We'll all be much happier when the deed is done.\n"
"\n"
"Saya out.";
SWWM_MISSION_NONE = "(no mission briefing available)";
// edited cluster texts
E1TEXT =
@ -677,3 +703,77 @@ TXT_HEXEN_WIN3MSG =
"underestimated it, foolish as he is.\n"
"So... will it be my turn next? Then, it\n"
"shall not find me unprepared.\"";
TXT_HEXDD_CLUS1MSG =
"Tired, annoyed... This whole adventure\n"
"is dragging on for longer than you\n"
"had imagined, and by this point you're\n"
"starting to consider an early\n"
"retirement.\n"
"\n"
"A voice message from Saya comes in:\n"
"\n"
"\"I'd recall you back home, but I'm\n"
"feeling vengeful. Whoever dragged\n"
"you here has to be around, and I want\n"
"to watch their knees explode for this.\n"
"I'm sure you feel the same way too.\"\n"
"\n"
"Damn right...";
TXT_HEXDD_CLUS2MSG =
"You're seriously tired of this whole\n"
"world already, with its annoying\n"
"\"puzzles\" and pesky swarms of\n"
"monsters that keep popping up.\n"
"\n"
"Moving on, you finally see it, the Dark\n"
"Citadel. This should be it, therein lies\n"
"your final objective: the so-called\n"
"Deathkings. More enemies lie in wait\n"
"along the way, but that doesn't\n"
"matter...\n"
"\n"
"Because you're going to teach them\n"
"all what happens when you piss off a\n"
"combat robot armed to the teeth.";
TXT_HEXDD_WIN1MSG =
"Once again, there you are, back in the\n"
"same room, with the same altar, empty.\n"
"\n"
"That's right, all this time you've been\n"
"holding on to that orb, the \"Chaos\n"
"Sphere\". As you take it out, you\n"
"notice that it is now again glowing\n"
"brightly, like it used to be before you\n"
"took it away from this place.\n"
"\n"
"This damned thing has caused you way\n"
"too much trouble ever since then.";
TXT_HEXDD_WIN2MSG =
"After placing it back on its altar, you\n"
"give it an angry staredown. This\n"
"thing's whole existence... it really\n"
"pisses you off.\n"
"\n"
"Taking out a handful of Explodium\n"
"mags, you tape them all around the\n"
"orb, covering it entirely. If there's\n"
"something you can do to feel better,\n"
"then this is it.";
TXT_HEXDD_WIN3MSG =
"Detonating it all with a deafening\n"
"boom, the entire room is showered in\n"
"smoke and shattered glass. And\n"
"shortly after, silence...\n"
" \n"
" \n"
" \n"
"Yeah, that feels much better.\n"
" \n"
"Fuck that orb.";
TXT_HEXDD_WIN4MSG =
"\"This machine... this unstoppable\n"
"instrument of devastation... It has\n"
"awakened something in me, I can feel\n"
"it. Finally, a worthy opponent... If it is\n"
"to come after me next, then certainly\n"
"our battle shall be legendary.\"";

View file

@ -147,6 +147,7 @@ T_KEYRUSTED = "\cbLlave Oxidada\c-";
T_KEYHORN = "\coLlave de Cuerno\c-";
T_KEYSWAMP = "\cpLlave del Pantano\c-";
T_KEYCASTLE = "\cxLlave del Castillo\c-";
T_CHAOSSPHERE = "\cwEsfera del Caos\c-";
// shortened doom key pickup messages
GOTBLUECARD = "Tarjeta Llave Azul";
GOTYELWCARD = "Tarjeta Llave Amarilla";
@ -538,6 +539,7 @@ BT_MAGE = "Menelkir, Archimago del Arcanum";
BT_DRAGON = "Wyvern Mortal, Bestia del Inframundo";
BT_HERESIARCH = "Heresiarca, Hechicero Demoníaco";
BT_KORAX = "Korax, Demonio Embaucador";
BT_DEATHKINGS = "Reyes de la Muerte de la Ciudadela Oscura";
BT_CYBIE_FUN = "Dispara Hasta Que Muera";
BT_SPIDER_FUN = "Cerebrito Idiota";
BT_SPIDER2_FUN = "Cerebrito Idiota Bis";
@ -552,6 +554,7 @@ BT_MAGE_FUN = "Menelkir el Mágico";
BT_DRAGON_FUN = "Un Puñetero Dragón";
BT_HERESIARCH_FUN = "Tío Rojo Muy Cabreado";
BT_KORAX_FUN = "Korax el Bastardo Feo Asqueroso";
BT_DEATHKINGS_FUN = "Un Refrito de Jefes muy Anticlimático";
// eviternity
BT_ARCHANGELUS = "Archangelus, Agente Celestial";
BT_ARCHANGELUS_FUN = "Un Putísimo Ángel Enorme";

View file

@ -340,6 +340,32 @@ SWWM_MISSION_HEXEN5 =
"Gana esta batalla, \cfDemo-chan\c-. Una muy bonita recompensa te espera en casa, oh sí.\n"
"\n"
" — Saya";
SWWM_MISSION_HEXDD1 =
"Bueno, eso ha sido inesperado, y supongo que... bienvenida a OTRA misión extra, \cfDemolicionista\c-. Vale, todo esto ha pasado así de repente, y ya tomaré precauciones la próxima vez. En serio es que menudo puto susto me he llevado.\n"
"\n"
"A ver, yo tampoco tengo muy claro que coño acaba de hacer la bola esa. Tú y TAMBIÉN la bola habéis desaparecido así de repente. Ni puta de que hizo que pasara esto, pero es igual, al menos no acabaste borrada y, debo decirlo, eso es un alivio ENORME.\n"
"\n"
"Los datos de localización ponen que sigues en \cfCronos\c-, aunque el sitio este está... bastante lejos de los otros por los que has pasado. Esto me da mala espina, me recuerda demasiado a lo que pasó aquella vez cuando te cargaste al otro \cfJinete de Serpiente\c-, que algún capullo fue y te pilló para otro lado. Bueno, sea quien sea, encuéntralo y patéale el culo.\n"
"\n"
"Al tema, \cfDemo-chan\c-. ¡Dales duro!\n"
"\n"
" — Saya";
SWWM_MISSION_HEXDD2 =
"Buf, es que no se por donde empezar, el sitio este es un puto lío, pero al menos conseguí sacar un poco de info. Para empezar, estás en una especie de \"reino de los muertos\", donde mandan un puñado de tíos que se llaman \cfReyes de la Muerte\c-. Pues sí, suena fenomenal, lo sé. No sé yo si son los responsables de traerte aquí, pero si lo son, eso los convierte en nuestro objetivo.\n"
"\n"
"*suspiro*\n"
"\n"
"Estoy tan cansada ya, \cfDemo-chan\c-. Al menos ver como revientas en trocitos a todos los monstruos estos es entretenido.\n"
"\n"
" — Saya";
SWWM_MISSION_HEXDD3 =
"Mas vale que este sea el final de toda esta mierda, esta tal \cfCiudadela Oscura\c-. Si esos \cfReyes de la Muerte\c- andan por ahí, tal vez puedas reajustar sus cuerpos en forma de salsa boloñesa como castigo por secuestrarte.\n"
"\n"
"Sabes, es que hasta \cfKirin\c- está cabreado con todo esto ya, y normalmente no lo veo tan enfadado, a menos que sea con algún videojuego. Sí, esto se nos hace muy pesado ya, y puedo notar que tú tampoco estás muy entusiasmada.\n"
"\n"
"Bueno, \cfDemo-chan\c-, que toda esta ira que sentimos te de fuerzas para puto descoyuntar a esos hijos de perra. Nos quedaremos todos muy a gusto cuando se acabe el chollo.\n"
"\n"
" — Saya";
SWWM_MISSION_NONE = "(no hay instrucciones de misión disponibles)";
// edited cluster texts
E1TEXT =
@ -676,3 +702,74 @@ TXT_HEXEN_WIN3MSG =
"subestimó, necio que es. Bien... ¿Será\n"
"ahora mi turno? Entonces no me\n"
"encontrará desprevenido.\"";
TXT_HEXDD_CLUS1MSG =
"Cansada, molesta... Toda esta aventura\n"
"se hace más larga de lo que habías\n"
"imaginado, y llegado este punto ya\n"
"piensas hasta en jubilarte.\n"
"\n"
"Llega un mensaje de voz de Saya:\n"
"\n"
"\"Te traería de vuelta a casa, pero me\n"
"siento vengativa. Quien te haya\n"
"arrastrado aquí tiene que andar\n"
"cerca, y quiero ver como sus rodillas\n"
"explotan por esto. Me da que a ti\n"
"también te apetecería eso.\"\n"
"\n"
"Vaya que sí...";
TXT_HEXDD_CLUS2MSG =
"Ya estás más que harta de todo este\n"
"mundo, con sus insufribles\n"
"\"rompecabezas\" y molestas hordas de\n"
"monstruos que no paran de salir.\n"
"\n"
"Más adelante, por fin la ves, la\n"
"Ciudadela Oscura. Tiene que ser aquí,\n"
"donde está tu objetivo final: los tales\n"
"Reyes de la Muerte. Habrán más\n"
"enemigos acechando por el camino,\n"
"pero eso no importa...\n"
"\n"
"Porque vas a enseñarles a todos lo\n"
"que pasa cuando cabrean a un robot\n"
"de combate armado hasta los dientes.";
TXT_HEXDD_WIN1MSG =
"Otra vez, aquí estás, de vuelta en la\n"
"misma sala, con el mismo altar, vacío.\n"
"\n"
"Eso es, todo este tiempo llevabas\n"
"encima ese orbe, la \"Esfera del Caos\".\n"
"Al sacarlo, notas como vuelve a\n"
"brillar con fuerza, como solía hacer\n"
"antes de que lo sacaras de aquí.\n"
"\n"
"Este maldito trasto te ha causado\n"
"demasiados problemas desde entonces.";
TXT_HEXDD_WIN2MSG ="Tras volver a colocarlo en su altar,\n"
"le clavas la mirada con desdén. La\n"
"propia existencia de esta cosa...\n"
"realmente te cabrea.\n"
"\n"
"Sacando un puñado de cargadores de\n"
"Explodium, los vas pegando al orbe,\n"
"cubriéndolo por completo. Si hay algo\n"
"que puedes hacer para sentirte\n"
"mejor, tiene que ser esto.";
TXT_HEXDD_WIN3MSG ="Detonando todo con un estallido\n"
"ensordecedor, toda la sala queda\n"
"cubierta de humo y cristal roto. Y\n"
"poco después, silencio...\n"
" \n"
" \n"
" \n"
"Sí, eso se siente de maravilla.\n"
" \n"
"A tomar por culo el orbe.";
TXT_HEXDD_WIN4MSG =
"\"Esta máquina... este instrumento\n"
"imparable de devastación... Ha\n"
"despertado algo en mí, puedo sentirlo.\n"
"Al fin, un oponente digno... Si ha de\n"
"venir a por mí, entonces ciertamente\n"
"nuestra batalla será legendaria.\"";

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r263 \cu(Thu 11 Feb 00:43:27 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r263 \cu(2021-02-11 00:43:27)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r264 \cu(Thu 11 Feb 23:25:16 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r264 \cu(2021-02-11 23:25:16)\c-";

BIN
music/nomusic.ogg Normal file

Binary file not shown.

View file

@ -913,6 +913,7 @@ misc/heart sounds/KOKORO.ogg
misc/achievement sounds/CTF6.ogg
misc/wow sounds/WOW.ogg
misc/achievement2 sounds/YAY.ogg
misc/orbexplode sounds/ORBEXPLODE.ogg
misc/gibber1 sounds/general/Gib1.ogg
misc/gibber2 sounds/general/Gib2.ogg
misc/gibber3 sounds/general/Gib3.ogg

BIN
sounds/ORBEXPLODE.ogg Normal file

Binary file not shown.

View file

@ -287,54 +287,3 @@ Intermission Doom2Cast
}
Link = Doom2Cast // restart cast call
}
// edited Hexen ending
// draws the three player classes unconditionally
// shifts the final text screen so it doesn't get cut off
Intermission Inter_Chess
{
Fader
{
Music = "Hall"
Background = "FINALE1"
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "FINALE1"
TextSpeed = 3
Text = "$TXT_HEXEN_WIN1MSG"
Time = -250
}
TextScreen
{
Music = "Orb"
Background = "FINALE2"
TextSpeed = 3
Text = "$TXT_HEXEN_WIN2MSG"
Time = -250
}
Fader
{
Background = "FINALE2"
Time = 2
FadeType = FadeOut
}
Fader
{
Music = "Chess"
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
Time = 2
FadeType = FadeIn
}
TextScreen
{
Background = "FINALE3"
Draw = "CHESSALL", 20, 0
TextSpeed = 3
Text = "$TXT_HEXEN_WIN3MSG"
Position = 10, 120
}
}

View file

@ -308,11 +308,12 @@ Class SWWMHandler : EventHandler
MAP_DMAP07,
MAP_DMAP30,
MAP_HMAP12,
MAP_HMAP23_HMAP27,
MAP_HMAP23_HMAP27_HMAP48_HMAP55,
MAP_HMAP36,
MAP_HMAP37,
MAP_HMAP38,
MAP_HMAP40,
MAP_HMAP60,
MAP_EVMAP30 // eviternity
};
@ -350,8 +351,10 @@ Class SWWMHandler : EventHandler
|| (mapsum ~== "91AD797F95CC4C6D6AE33B21F664C60B")
|| (mapsum ~== "188B1B4244BD8DA501D8532696EC8654")
|| (mapsum ~== "5B29D0889DF09A8250D62FA09EB2B452")
|| (mapsum ~== "D3C5FA777BA52264546E6569F167AF0D") )
return MAP_HMAP23_HMAP27;
|| (mapsum ~== "D3C5FA777BA52264546E6569F167AF0D")
|| (mapsum ~== "15FC0991D975325556EFF71F241A4458")
|| (mapsum ~== "2FAD54B58487884F06EAFA507B553921") )
return MAP_HMAP23_HMAP27_HMAP48_HMAP55;
if ( (mapsum ~== "4444C95C2029DA6EECAC92DAA31CE665")
|| (mapsum ~== "33752742BCA8E539A6EE3E5D0FDA8744")
|| (mapsum ~== "3FFAF2F624C1B4BB6F581DCF7B99CBA7") )
@ -368,6 +371,8 @@ Class SWWMHandler : EventHandler
|| (mapsum ~== "1C5DE5A921DEE405E98E7E09D9829387")
|| (mapsum ~== "2A6C4235B942467D25FD50D5B313E67A") )
return MAP_HMAP40;
if ( mapsum ~== "B0ADDB295A3ACCE43978AAC91FB8C58A" )
return MAP_HMAP60;
if ( mapsum ~== "5C5E5C08AF3572F31CF27318679F2B4E" )
return MAP_EVMAP30;
return MAP_NONE;
@ -2033,7 +2038,7 @@ Class SWWMHandler : EventHandler
bosstag = "$BT_DRAGON";
}
}
else if ( bossmap == MAP_HMAP23_HMAP27 )
else if ( bossmap == MAP_HMAP23_HMAP27_HMAP48_HMAP55 )
{
if ( e.Thing is 'Heresiarch' )
{
@ -2053,6 +2058,17 @@ Class SWWMHandler : EventHandler
bosstag = "$BT_KORAX";
}
}
else if ( bossmap == MAP_HMAP60 )
{
if ( (e.Thing is 'FighterBoss') || (e.Thing is 'ClericBoss') || (e.Thing is 'MageBoss') )
{
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 4;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DEATHKINGS";
initialized = true; // healthbar shows from the start
}
}
else if ( bossmap == MAP_EVMAP30 )
{
if ( e.Thing.GetClassName() == "ArchangelusA" )
@ -2320,7 +2336,7 @@ Class SWWMHandler : EventHandler
else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = SWWMUtility.PickSWWMSlot1();
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.Replacee.GetClassName() == 'TangoPistol') ) e.Replacement = SWWMUtility.PickSWWMSlot2();
else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') || (e.Replacee.GetClassName() == 'TangoShotgun') ) e.Replacement = SWWMUtility.PickSWWMSlot3();
else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') || (e.Replacee.GetClassName() == 'TangoShotgun') ) e.Replacement = SWWMUtility.IsDoomOne()?SWWMUtility.PickHereticSlot3():SWWMUtility.PickSWWMSlot3();
else if ( (e.Replacee is 'SuperShotgun') || (e.Replacee is 'MWeapFrost') || (e.Replacee.GetClassName() == 'TangoSuperShotgun') ) e.Replacement = SWWMUtility.PickSWWMSlot4();
else if ( (e.Replacee is 'Crossbow') || (e.Replacee.GetClassName() == 'TangoScrapGun') ) e.Replacement = SWWMUtility.PickHereticSlot3();
else if ( (e.Replacee is 'Chaingun') || (e.Replacee is 'Blaster') || (e.Replacee is 'FWeaponPiece3') || (e.Replacee.GetClassName() == 'TangoAssaultRifle') || (e.Replacee.GetClassName() == 'TangoChaingun') ) e.Replacement = SWWMUtility.PickSWWMSlot5();

View file

@ -145,6 +145,7 @@ Class DemolitionistMenu : GenericMenu
hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
// mission text
bool nrftl = false;
bool hexdd = false;
if ( (gameinfo.gametype&GAME_Doom) && SWWMUtility.IsKnownMap() )
{
int clus = level.cluster;
@ -214,7 +215,11 @@ Class DemolitionistMenu : GenericMenu
}
else if ( (gameinfo.gametype&GAME_Hexen) && SWWMUtility.IsKnownMap() )
{
missionstr = String.Format("$SWWM_MISSION_HEXEN%d",level.cluster);
// detect deathkings in the most amazing way imaginable
int mapnamenum = level.mapname.Mid(3).ToInt(10);
if ( mapnamenum > 40 ) hexdd = true;
String gstr = hexdd?"HEXDD":"HEXEN";
missionstr = String.Format("$SWWM_MISSION_%s%d",gstr,level.cluster);
if ( StringTable.Localize(missionstr) ~== missionstr.Mid(1) )
missionstr = "$SWWM_MISSION_NONE";
int csiz = stats.clustervisit.Size();
@ -224,7 +229,7 @@ Class DemolitionistMenu : GenericMenu
if ( (stats.clustervisit[i] == level.cluster) && !firstskip )
continue;
firstskip = true;
String xstr = String.Format("$SWWM_MISSION_HEXEN%d",stats.clustervisit[i]);
String xstr = String.Format("$SWWM_MISSION_%s%d",gstr,stats.clustervisit[i]);
if ( StringTable.Localize(missionstr) ~== missionstr.Mid(1) )
continue;
missionbacklog.Push(xstr);
@ -259,6 +264,13 @@ Class DemolitionistMenu : GenericMenu
c_hour = 16;
c_minute = 41;
c_tz = "JST";
if ( hexdd )
{
// deathkings happen the day after
c_day = 25;
c_hour = 10;
c_minute = 28;
}
}
else if ( gameinfo.gametype&GAME_Strife )
{

View file

@ -456,3 +456,16 @@ Class SWWMGreenKeyGesture : SWWMKeyGesture {}
Class SWWMBlueKeyGesture : SWWMKeyGesture {}
Class SWWMYellowKeyGesture : SWWMKeyGesture {}
Class SWWMRedKeyGesture : SWWMKeyGesture {}
// HEXDD thingy
Class SWWMChaosSphere : Key
{
Default
{
Tag "$T_CHAOSSPHERE";
Inventory.InterHubAmount 1; // don't strip, this thing is always kept
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
+INVENTORY.UNCLEARABLE;
}
}

View file

@ -380,6 +380,17 @@ Class Demolitionist : PlayerPawn
eg.chambered = true;
DualExplodiumGun(eg.SisterWeapon).chambered = true;
player.ReadyWeapon = player.PendingWeapon = eg;
// in hexdd, we start with the chaos sphere in our grasp
if ( SWWMUtility.IsVanillaHexenMap() )
{
// this really is a dumb way to detect the expansion
int mapnamenum = level.mapname.Mid(3).ToInt(10);
if ( mapnamenum > 40 )
{
let cs = Inventory(Spawn('SWWMChaosSphere'));
cs.AttachToOwner(self);
}
}
bInDefaultInventory = false;
}
override void ClearInventory()
@ -2016,7 +2027,7 @@ Class Demolitionist : PlayerPawn
if ( (item is 'Weapon') && !(item is 'SWWMGesture') && !(item is 'SWWMItemGesture') && mystats && !mystats.GotWeapon(Weapon(item).GetClass()) && CheckLocalView() )
SWWMHandler.AddOneliner("getweapon",2);
}
if ( (item is 'Key') && !key_reentrant && !deathmatch )
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory )
{
// score
int score = 100;

View file

@ -263,7 +263,7 @@ Class GhostPower : PowerInvisibility
Powerup.Duration -60;
Powerup.Strength 100;
Powerup.Mode "Translucent";
Powerup.Color "F0E0FF", 0.1;
Powerup.Color "F0 E0 FF", 0.1;
+INVENTORY.ADDITIVETIME;
}
@ -640,7 +640,7 @@ Class InvinciballPower : Powerup
{
Powerup.Duration -30;
Inventory.Icon "graphics/HUD/Icons/I_Invinciball.png";
Powerup.Color "FF3000", 0.1;
Powerup.Color "FF 30 00", 0.1;
+INVENTORY.ADDITIVETIME;
}
@ -879,7 +879,7 @@ Class RagekitPower : Powerup
{
Powerup.Duration -30;
Inventory.Icon "graphics/HUD/Icons/I_Ragekit.png";
Powerup.Color "FF0000", 0.2;
Powerup.Color "FF 00 00", 0.2;
+INVENTORY.ADDITIVETIME;
}
@ -1854,7 +1854,7 @@ Class BarrierPower : PowerIronFeet
{
Inventory.Icon "graphics/HUD/Icons/I_Barrier.png";
Powerup.Duration -60;
Powerup.Color "20FF00", 0.1;
Powerup.Color "20 FF 00", 0.1;
Powerup.Mode "Full"; // no leaky damage
+INVENTORY.ADDITIVETIME;
}

View file

@ -1120,6 +1120,7 @@ Class SWWMUtility
|| (csum ~== "3417A4859C8FECE797C9DAA715D14D63")
|| (csum ~== "38028DC7E09DC5C91068AAC565A3962B") )
return true;
// no TNT / Plutonia (non-canon Demolitionist appearance)
return false;
}
static bool IsVanillaHereticMap()
@ -1278,9 +1279,35 @@ Class SWWMUtility
|| (csum ~== "78979A583B1E30D94C9DAE2BCFA9A18D")
|| (csum ~== "112599C94EB03328D217233D4CB65A70")
|| (csum ~== "7729174BAA658C8FD86CF8290422F512")
|| (csum ~== "33752742BCA8E539A6EE3E5D0FDA8744") )
|| (csum ~== "33752742BCA8E539A6EE3E5D0FDA8744")
// Deathkings
|| (csum ~== "0C7B62B11C7970DAAF66F9084C8E408E")
|| (csum ~== "A5F820CB016DE3D9A402C0173E7F9998")
|| (csum ~== "B0ADDB295A3ACCE43978AAC91FB8C58A")
|| (csum ~== "B295A2FBB187A1DC8AEFDE825DFB084A")
|| (csum ~== "B77D810C972976C54A694C62361FFF9D")
|| (csum ~== "C35E3C2727CCD7EF7793230AEF6255E7")
|| (csum ~== "C35F7CB2E9F93BB331FFCEB6622ABD64")
|| (csum ~== "CA7825F84BC08E76C6C85A41AEFE4370")
|| (csum ~== "CB0334184147FF565F6EF437F316B3EB")
|| (csum ~== "E2B5D1400279335811C1C1C0B437D9C8")
|| (csum ~== "E3EFB0156A20ADF2DF00915A0EA85DF5")
|| (csum ~== "2FAD54B58487884F06EAFA507B553921")
|| (csum ~== "3BB1724A4B66E85E2431110E4D7C4B76")
|| (csum ~== "6C886A3E37410C6FC83ED87BB6E9864F")
|| (csum ~== "6FAFFEAAE301FD341169A3CC63CBE183")
|| (csum ~== "7C28FD1ED662667FC54CDA123CF0614A")
|| (csum ~== "7DC65D5029DD834481CD716B3D71388A")
|| (csum ~== "11A83AAE9F747E1BA649F52D6C2DDB3A")
|| (csum ~== "15FC0991D975325556EFF71F241A4458")
|| (csum ~== "56D7CFFF0440328ADB20521ED70C739A")
|| (csum ~== "90B4951F996BA30096F2D4238EEC39CA")
|| (csum ~== "2945EDC2A9D7222AE54F0C68E1EA79FC")
|| (csum ~== "4482A52290F42C50D6F80A0D4751A0E4")
|| (csum ~== "4945FC07392AF9D2F1FABDD471C691A5")
|| (csum ~== "7721B620EA970DF48FF4A18489822F6C")
|| (csum ~== "0487193FFC57884EDB053F3E9148C534") )
return true;
// no deathkings (yet)
return false;
}
@ -1343,6 +1370,17 @@ Class SWWMUtility
p.health = p.mo.Health = p.mo.SpawnHealth();
}
// checks if we're playing in doom 1
// this is used so we can sometimes replace the shotgun with a SSG slot weapon
static bool IsDoomOne()
{
if ( !(gameinfo.GameType&GAME_DOOM) ) return false;
// is the map in ExMx format? Then it's likely we're playing a doom 1 map
if ( (level.mapname.Length() >= 4) && (level.mapname.Mid(0,1) == "E") && (level.mapname.ByteAt(1) >= 0x30) && (level.mapname.ByteAt(1) < 0x40) && (level.mapname.Mid(2,1) == "M") && (level.mapname.ByteAt(3) >= 0x30) && (level.mapname.ByteAt(3) < 0x40) )
return true;
return false;
}
// check that all players can get enough of this if needed
// multi: check for multiple copies, not just single instances
// (useful e.g. for dual wieldable weapons)
@ -1438,7 +1476,7 @@ Class SWWMUtility
//return PickPair(PickSWWMSlot9(),PickSWWMSlot0(),2);
return PickPair('CandyGun','Ynykron',2);
}
static Class<Inventory> PickHereticSlot3()
static Class<Inventory> PickHereticSlot3() // also used for Doom 1
{
//return PickPair(PickSWWMSlot3(),PickSWWMSlot4(),2);
return PickPair('Spreadgun','Wallbuster',2);