diff --git a/language.def_base b/language.def_base index a267ff45f..7431f0e58 100644 --- a/language.def_base +++ b/language.def_base @@ -1133,6 +1133,10 @@ BT_DEATHKINGS_FUN = "A Very Anticlimactic Boss Rehash"; // eviternity BT_ARCHANGELUS = "Archangelus, Celestial Agent"; BT_ARCHANGELUS_FUN = "Big Fucking Angel Dude"; +// boss oneliners +BOSSLINE_IOS = "\crIcon of Sin\c-: !oremoR nhoJ ,em llik tsum uoy emag eht niw oT"; +BOSSLINE_DSPARIL = "\cgD'Sparil\c-: .hself ruoy erutrot lliw I"; +BOSSLINE_ARCHANGELUS = "\cfArchangelus\c-: Foolish mortal, only your death is eternal!"; // targetter SWWM_OVERKILL = "Overkill"; SWWM_MULTIKILL = "Multi Kill"; diff --git a/language.def_voice b/language.def_voice index 6936ce410..863fb03ee 100644 --- a/language.def_voice +++ b/language.def_voice @@ -360,13 +360,14 @@ SWWM_SUBS_DEFAULT_ARCHANGELUS6 = "Yeah yeah, it's always the same with you peopl 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."; // "hself ruoy erutrot lliw I" (supposedly) -SWWM_SUBS_DEFAULT_NDSPARIL = "6"; -SWWM_SUBS_DEFAULT_DSPARIL1 = "What's with you people and backwards speech?"; -SWWM_SUBS_DEFAULT_DSPARIL2 = "Sorry, could you repeat that?"; -SWWM_SUBS_DEFAULT_DSPARIL3 = "Oh look at you, little red riding hood."; -SWWM_SUBS_DEFAULT_DSPARIL4 = "How about you get down from that thing and we have a talk?"; -SWWM_SUBS_DEFAULT_DSPARIL5 = ".oot sdrawkcab klat nac I"; // record this line normally then just reverse it, really -SWWM_SUBS_DEFAULT_DSPARIL6 = "I'm gonna wipe the floor with you, nerd."; +SWWM_SUBS_DEFAULT_NDSPARILA = "3"; +SWWM_SUBS_DEFAULT_DSPARILA1 = "Oh look at you, little red riding hood."; +SWWM_SUBS_DEFAULT_DSPARILA2 = "How about you get down from that thing and we have a talk?"; +SWWM_SUBS_DEFAULT_DSPARILA3 = "I'm gonna wipe the floor with you, nerd."; +SWWM_SUBS_DEFAULT_NDSPARILB = "3"; +SWWM_SUBS_DEFAULT_DSPARILB1 = "What's with you people and backwards speech?"; +SWWM_SUBS_DEFAULT_DSPARILB2 = "Sorry, could you repeat that?"; +SWWM_SUBS_DEFAULT_DSPARILB3 = ".oot sdrawkcab klat nac I"; // record this line normally then just reverse it, really // (H-Doom compat) Demon girl petting SWWM_SUBS_DEFAULT_NPETHDOOM = "9"; SWWM_SUBS_DEFAULT_PETHDOOM1 = "That's a good girl~"; diff --git a/language.es_base b/language.es_base index ff447b665..756e96a4d 100644 --- a/language.es_base +++ b/language.es_base @@ -1011,6 +1011,10 @@ BT_DEATHKINGS_FUN = "Un Refrito de Jefes muy Anticlimático"; // eviternity BT_ARCHANGELUS = "Archangelus, Agente Celestial"; BT_ARCHANGELUS_FUN = "Un Putísimo Ángel Enorme"; +// boss oneliners +BOSSLINE_IOS = "\crIcono del Pecado\c-: !oremoR nhoJ ,ím a emratam sebed ogeuj le ranag araP¡"; +BOSSLINE_DSPARIL = "\cgD'Sparil\c-: .senrac sut érarutroT"; +BOSSLINE_ARCHANGELUS = "\cfArchangelus\c-: Mortal insensato, ¡solo tu muerte es eterna!"; // targetter SWWM_OVERKILL = "Sobremuerte"; SWWM_MULTIKILL = "Racha"; diff --git a/language.es_voice b/language.es_voice index e583281a4..501481582 100644 --- a/language.es_voice +++ b/language.es_voice @@ -327,12 +327,12 @@ 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."; // "hself ruoy erutrot lliw I" (supposedly) -SWWM_SUBS_DEFAULT_DSPARIL1 = "¿Pero que os pasa a todos con lo de hablar al revés?"; -SWWM_SUBS_DEFAULT_DSPARIL2 = "Lo siento, ¿podrías repetir eso?"; -SWWM_SUBS_DEFAULT_DSPARIL3 = "Oh pero mírate, si es caperucita roja."; -SWWM_SUBS_DEFAULT_DSPARIL4 = "¿Por que no te bajas de esa cosa y hablamos?"; -SWWM_SUBS_DEFAULT_DSPARIL5 = "séver la ralbah odeup néibmat oY."; // record this line normally then just reverse it, really -SWWM_SUBS_DEFAULT_DSPARIL6 = "Voy a fregar el suelo contigo, friki."; +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?"; +SWWM_SUBS_DEFAULT_DSPARILA3 = "Voy a fregar el suelo contigo, friki."; +SWWM_SUBS_DEFAULT_DSPARILB1 = "¿Pero que os pasa a todos con lo de hablar al revés?"; +SWWM_SUBS_DEFAULT_DSPARILB2 = "Lo siento, ¿podrías repetir eso?"; +SWWM_SUBS_DEFAULT_DSPARILB3 = "séver la ralbah odeup néibmat oY."; // record this line normally then just reverse it, really // (H-Doom compat) Demon girl petting SWWM_SUBS_DEFAULT_PETHDOOM1 = "Buena chica~"; SWWM_SUBS_DEFAULT_PETHDOOM2 = "Eh, no tienes por qué pelear."; diff --git a/language.version b/language.version index 18503d80f..03b0142bf 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r34 \cu(Tue 19 Oct 22:56:03 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.2pre r34 \cu(2021-10-19 22:56:03)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.2pre r35 \cu(Wed 20 Oct 00:15:43 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.2pre r35 \cu(2021-10-20 00:15:43)\c-"; diff --git a/sndinfo.txt b/sndinfo.txt index 3f152ff5e..201abb176 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -392,12 +392,12 @@ 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/dsparil1 sounds/voice/default/va/demodsparil1.ogg -voice/default/dsparil2 sounds/voice/default/va/demodsparil2.ogg -voice/default/dsparil3 sounds/voice/default/va/demodsparil3.ogg -voice/default/dsparil4 sounds/voice/default/va/demodsparil4.ogg -voice/default/dsparil5 sounds/voice/default/va/demodsparil5.ogg -voice/default/dsparil6 sounds/voice/default/va/demodsparil6.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 +voice/default/dsparilb1 sounds/voice/default/va/demodsparilb1.ogg +voice/default/dsparilb2 sounds/voice/default/va/demodsparilb2.ogg +voice/default/dsparilb3 sounds/voice/default/va/demodsparilb3.ogg voice/default/pethdoom1 sounds/voice/default/va/demopethdoom1.ogg voice/default/pethdoom2 sounds/voice/default/va/demopethdoom2.ogg voice/default/pethdoom3 sounds/voice/default/va/demopethdoom3.ogg diff --git a/sounds/voice/default/va/demodsparil3.ogg b/sounds/voice/default/va/demodsparila1.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil3.ogg rename to sounds/voice/default/va/demodsparila1.ogg diff --git a/sounds/voice/default/va/demodsparil4.ogg b/sounds/voice/default/va/demodsparila2.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil4.ogg rename to sounds/voice/default/va/demodsparila2.ogg diff --git a/sounds/voice/default/va/demodsparil6.ogg b/sounds/voice/default/va/demodsparila3.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil6.ogg rename to sounds/voice/default/va/demodsparila3.ogg diff --git a/sounds/voice/default/va/demodsparil1.ogg b/sounds/voice/default/va/demodsparilb1.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil1.ogg rename to sounds/voice/default/va/demodsparilb1.ogg diff --git a/sounds/voice/default/va/demodsparil2.ogg b/sounds/voice/default/va/demodsparilb2.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil2.ogg rename to sounds/voice/default/va/demodsparilb2.ogg diff --git a/sounds/voice/default/va/demodsparil5.ogg b/sounds/voice/default/va/demodsparilb3.ogg similarity index 100% rename from sounds/voice/default/va/demodsparil5.ogg rename to sounds/voice/default/va/demodsparilb3.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro1.ogg b/sounds/voice/default/va/demopetmashiro1.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro1.ogg rename to sounds/voice/default/va/demopetmashiro1.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro2.ogg b/sounds/voice/default/va/demopetmashiro2.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro2.ogg rename to sounds/voice/default/va/demopetmashiro2.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro3.ogg b/sounds/voice/default/va/demopetmashiro3.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro3.ogg rename to sounds/voice/default/va/demopetmashiro3.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro4.ogg b/sounds/voice/default/va/demopetmashiro4.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro4.ogg rename to sounds/voice/default/va/demopetmashiro4.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro5.ogg b/sounds/voice/default/va/demopetmashiro5.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro5.ogg rename to sounds/voice/default/va/demopetmashiro5.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro6.ogg b/sounds/voice/default/va/demopetmashiro6.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro6.ogg rename to sounds/voice/default/va/demopetmashiro6.ogg diff --git a/sounds/voice/default/va/temp/demopetmashiro7.ogg b/sounds/voice/default/va/demopetmashiro7.ogg similarity index 100% rename from sounds/voice/default/va/temp/demopetmashiro7.ogg rename to sounds/voice/default/va/demopetmashiro7.ogg diff --git a/zscript/handler/swwm_handler_vanillaboss.zsc b/zscript/handler/swwm_handler_vanillaboss.zsc index e7bbf66b3..8f061f89f 100644 --- a/zscript/handler/swwm_handler_vanillaboss.zsc +++ b/zscript/handler/swwm_handler_vanillaboss.zsc @@ -3,6 +3,45 @@ Class EndgameBossMarker : Inventory {} Class BossMarker : Inventory {} +Class IconMessage : Inventory +{ + override void DoEffect() + { + if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) ) + { + Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_IOS")); + DepleteOrDestroy(); + return; + } + } +} + +Class ArchangelusMessage : Inventory +{ + override void DoEffect() + { + if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) ) + { + Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_ARCHANGELUS")); + DepleteOrDestroy(); + return; + } + } +} + +Class DSparilMessage : Inventory +{ + override void DoEffect() + { + if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) ) + { + Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_DSPARIL")); + DepleteOrDestroy(); + return; + } + } +} + extend Class SWWMHandler { String bosstag; @@ -179,7 +218,10 @@ extend Class SWWMHandler e.Thing.GiveInventory('EndgameBossMarker',1); } if ( e.Thing is 'BossEye' ) + { bossviewactor = e.Thing; + e.Thing.GiveInventory('IconMessage',1); + } bosstag = "$BT_IOS"; } else if ( bossmap == MAP_DLVL08 ) @@ -237,6 +279,7 @@ extend Class SWWMHandler bosstag = "$BT_DSPARIL2"; e.Thing.GiveInventory('BossMarker',1); e.Thing.GiveInventory('EndgameBossMarker',1); + e.Thing.GiveInventory('DSparilMessage',1); } } else if ( bossmap == MAP_HMAP38 ) @@ -321,8 +364,19 @@ extend Class SWWMHandler } else if ( bossmap == MAP_EVMAP30 ) { - if ( e.Thing.GetClassName() == "ArchangelusA" ) + if ( e.Thing.GetClassName() == "Archangelus" ) { + bossactors.Push(e.Thing); + bossviewactor = e.Thing; + bosstag = "$BT_ARCHANGELUS"; + e.Thing.GiveInventory('ArchangelusMessage',1); + } + else if ( e.Thing.GetClassName() == "ArchangelusA" ) + { + // first phase + bossactors.Clear(); + bossviewactor = null; + initialized = false; bossactors.Push(e.Thing); if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5; if ( trk ) trk.bBOSS = true; @@ -334,6 +388,7 @@ extend Class SWWMHandler { // second phase bossactors.Clear(); + bossviewactor = null; initialized = false; bossactors.Push(e.Thing); if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5; @@ -355,12 +410,28 @@ extend Class SWWMHandler if ( (!bossactors[i].target || !bossactors[i].CheckSight(bossactors[i].target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY)) && (!bossviewactor || (bossviewactor && !bossviewactor.target)) ) continue; initialized = true; - // hacky + // oneliners if ( bossmap == MAP_DMAP30 ) { highesttic = gametic; lastcombat = AddOneliner("romero",1,200); } + else if ( bossmap == MAP_HE3M8 ) + { + highesttic = gametic; + if ( bosstag = "$BT_DSPARIL2" ) lastcombat = AddOneliner("dsparilb",1,100); + else lastcombat = AddOneliner("dsparila",1,80); + } + else if ( bossmap == MAP_HMAP40 ) + { + highesttic = gametic; + lastcombat = AddOneliner("korax",1,40); + } + else if ( (bossmap == MAP_EVMAP30) && bossviewactor ) + { + highesttic = gametic; + lastcombat = AddOneliner("archangelus",1,300); + } break; } } diff --git a/zscript/handler/swwm_handler_worldthings.zsc b/zscript/handler/swwm_handler_worldthings.zsc index ba7ab0c43..9cc86f8de 100644 --- a/zscript/handler/swwm_handler_worldthings.zsc +++ b/zscript/handler/swwm_handler_worldthings.zsc @@ -120,6 +120,18 @@ extend Class SWWMHandler let t = new("UglyBoyGetsFuckedUp"); t.ChangeStatNum(Thinker.STAT_USER); } + // Archangelus death + if ( e.Thing.GetClassName() == "ArchangelusB" ) + { + // kill all other monsters + let ti = ThinkerIterator.Create("Actor"); + Actor a; + while ( a = Actor(ti.Next()) ) + { + if ( (a != e.Thing) && (a.Health > 0) && (a.bBossSpawned || a.bCOUNTKILL) ) + a.DamageMobj(e.Thing,e.Thing,a.Health,'EndMii',DMG_FORCED|DMG_THRUSTLESS); + } + } if ( swwm_partytime ) { let pt = Actor.Spawn("PartyTime",e.Thing.pos); diff --git a/zscript/handler/swwm_handler_worldtick.zsc b/zscript/handler/swwm_handler_worldtick.zsc index 237fa4a44..d0d991ff5 100644 --- a/zscript/handler/swwm_handler_worldtick.zsc +++ b/zscript/handler/swwm_handler_worldtick.zsc @@ -19,7 +19,7 @@ extend Class SWWMHandler int lastorder; bool lastloop; transient ThinkerIterator cti; - bool tauntedboss; + Actor tauntedboss; private void LangRefresh() { @@ -127,21 +127,10 @@ extend Class SWWMHandler combatactors.Push(a); combattics.Push(gametic); enteredcombat = true; - if ( (a is 'Korax') || (a is 'Sorcerer1') || (a.GetClassName() == "ArchangelusA") ) - keyactor = a; if ( a.bBOSS || a.FindInventory("BossMarker") ) bossfound = true; } } - // special combat start lines - if ( enteredcombat && keyactor && !tauntedboss ) - { - if ( keyactor is 'Korax' ) lastcombat = AddOneliner("korax",1,40); - else if ( keyactor is 'Sorcerer1' ) lastcombat = AddOneliner("dsparil",1,100); - else if ( keyactor.GetClassName() == "ArchangelusA" ) lastcombat = AddOneliner("archangelus",1,350); - tauntedboss = true; - return; - } // be smart, demo-chan, don't shout if you're invisible, or you'll make it worse if ( enteredcombat && ((bossfound && (!lastcombat || (gametic > lastcombat+120))) || (!bossfound && (!highesttic || (gametic > highesttic+700)))) && !players[consoleplayer].mo.FindInventory("GhostPower") ) lastcombat = AddOneliner("fightstart",1,10); diff --git a/zscript/hud/swwm_hud.zsc b/zscript/hud/swwm_hud.zsc index e383dfe77..5839c5c48 100644 --- a/zscript/hud/swwm_hud.zsc +++ b/zscript/hud/swwm_hud.zsc @@ -54,7 +54,7 @@ Class SWWMStatusBar : BaseStatusBar String midstr; int midtic, midtype; - bool koraxhack, mainframehack; + bool koraxhack, mainframehack, bosshack; int puzzlecnt, realpuzzlecnt; SWWMWeaponTooltip ctip; @@ -586,6 +586,15 @@ Class SWWMStatusBar : BaseStatusBar mainframehack = false; return true; } + if ( (msg == StringTable.Localize("$BOSSLINE_IOS")) + || (msg == StringTable.Localize("$BOSSLINE_ARCHANGELUS")) + || (msg == StringTable.Localize("$BOSSLINE_DSPARIL")) ) + { + bosshack = true; + Console.Printf(msg); + bosshack = false; + return true; + } if ( !fnt || (fnt == smallfont) ) { midstr = msg; @@ -616,12 +625,17 @@ Class SWWMStatusBar : BaseStatusBar printlevel = PRINT_CHAT; outline = "\cmKorax\c-: "..outline; } - if ( mainframehack ) + else if ( mainframehack ) { // same here, hi yholl printlevel = PRINT_CHAT; outline = "\cmAI Mainframe\c-: "..outline; } + else if ( bosshack ) + { + // no need to attach name, these are done specifically for this + printlevel = PRINT_CHAT; + } let m = new("MsgLine"); m.str = outline.Left(outline.Length()-1); // strip newline m.type = printlevel;