diff --git a/FuturePlans.md b/FuturePlans.md index 5454ddb06..817f6caed 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -21,6 +21,7 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Rubber Duck *("Is this some kind of convoluted joke from those two?")* * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** * **Replace all hitscan with *"light projectiles"*** +* **Quick Grenade sticks mags to walls (or things) if facing one** * **Leaning and a lot of other stuff involving ViewAngles and ViewPos** * **Crouch sliding *(+ proper crouch dashing)*** * **Expand third person animations** diff --git a/acs/swwmcomp.o b/acs/swwmcomp.o index 84d7b0695..1b9db1aad 100644 Binary files a/acs/swwmcomp.o and b/acs/swwmcomp.o differ diff --git a/language.def_mission b/language.def_mission index 38765ec43..f217066f2 100644 --- a/language.def_mission +++ b/language.def_mission @@ -58,6 +58,7 @@ SWWM_MISSION_SIGIL = "If that's the case, then you know what to do, so have at them, \cfDemolitionist\c-!\n" "\n" "Saya out."; +SWWM_MISSION_DOOM25 = "$$SWWM_MISSION_SIGIL"; 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" @@ -74,6 +75,22 @@ SWWM_MISSION_DOOM5 = "You are our last hope, so fight, \cfDemo-chan\c-, fight for those you want to protect, for all of us... Make those bastards pay.\n" "\n" "Saya out."; +SWWM_MISSION_DOOM5_FROMDOOM1 = +"OK, NOW for real this time, 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" +"It all happened so fast that... we didn't really have much time to prepare for it. Half of Earth got entirely taken over now. It's all mostly just the western countries, with the epicenter on \cfUnion States\c- territory, where you'll be deployed. What pisses me off the most is that I can't get in touch with the \cfLunar Capital\c-, it's like they're actively ignoring us or something. Fucking hell, it could have been our chance to contact the \cfNukuri\c- and ask for help, but nope, we're on our own. We... have to do our best to fight these damn things, all by ourselves. That's where you come in.\n" +"\n" +"It is your mission to put an end to this, there are people out there fighting, we don't know how many, who still haven't been evacuated. It's \cfHell on Earth\c- thanks to the amazing and great UAC shoving their stinky-ass fingers into what they shouldn't. Do they even know... How many of my friends I've lost... all the thousands, tens of thousands or even more, that just... couldn't make it. \cfWW3\c- was nothing compared to this. It's just... ugh... And the fucker has the BALLS to just go and act like everything's fine and will be fixed soon. I want to punch that smug bastard... damn it.\n" +"\n" +"*sigh*\n" +"\n" +"Enough grieving... it's all about the mission now. I seriously don't have much faith on the UAC's so-called \cf\"problem solver\"\c-, but WE can do it. Me and a couple others have joined up to make this happen, you're going to save those people. It'll be hard, I know, but you can do it, that's why I built you. If there's even a chance that you'll succeed, I want to tell you that I will personally reward you, \cfDemo-chan\c-. I'm not going to give you any details, I want it to be a surprise.\n" +"\n" +"We haven't been able to provide you with all the available equipment, there was no time for that. Instead, be on the lookout for strategically placed supplies along the way (hopefully the demons won't touch the stuff). I know that sounds kind of videogamey, and if I hear you complain you can eat my pants, I wasn't the one who made that decision. Whatever.\n" +"\n" +"You are our last hope, so fight, \cfDemo-chan\c-, fight for those you want to protect, for all of us... Make those bastards pay.\n" +"\n" +"Saya out."; SWWM_MISSION_DOOM6 = "Alright, \cfDemo-chan\c-, mission update. Those fucks have hostages. Namely, a HUGE bunch of people, I'm reading five digits here. These people are the unlucky ones who couldn't evacuate in time, being caught right at the start of it all. And the shelters are all locked away through some demonic mechanism. Those fuckers are probably keeping them alive to \"use\" them later, and we're not going to give them the chance to take those lives.\n" "\n" diff --git a/language.es_mission b/language.es_mission index b6c51c8c5..9b294be4c 100644 --- a/language.es_mission +++ b/language.es_mission @@ -74,6 +74,22 @@ SWWM_MISSION_DOOM5 = "Eres nuestra última esperanza, así que lucha, \cfDemo-chan\c-, lucha por aquellos que quieres proteger, por todos nosotros... Haz que esos bastardos lo paguen.\n" "\n" " — Saya"; +SWWM_MISSION_DOOM5_FROMDOOM1 = +"Bueno, AHORA SÍ, 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" +"Todo pasó tan rápido que... ni tuvimos tiempo de prepararnos. Ya se han ventilado media Tierra. Bueno exactamente todos los países del oeste, con epicentro en el territorio de la \cfUnión de Estados\c-, donde te vamos a mandar. Lo que más me repatina es que no puedo contactar con la \cfCapital Lunar\c-, es como si nos estuvieran ignorando a propósito. Hostia puta, podría haber sido nuestra oportunidad para contactar con los \cfNukuri\c- y pedir ayuda, pero nada, estamos solos. Tenemos... que hacer todo lo que podamos para luchar contra estas cosas, por nuestra cuenta. Ahí es donde entras en escena.\n" +"\n" +"Es tu misión poner fin a esto, hay gente ahí luchando, no sabemos cuanta, que no ha sido evacuada. Es el \cfInfierno en la Tierra\c- gracias a que las asombrosas y grandes mentes de la UAC metieran sus sucias pezuñas donde no les conviene. Acaso saben... cuantos de mis amigos he perdido... los miles... decenas de miles o más, que... no han podido. Comparado con esto la \cfTercera Guerra Mundial\c- no fue nada. Es que... ugh... y el muy capullo tiene los SANTOS COJONES de ir por ahí haciendo como que todo va bien y que se va a arreglar pronto. Es que le metía una hostia así al bastardo engreído ese... joder.\n" +"\n" +"*suspiro*\n" +"\n" +"Basta de lamentarse... lo importante ahora es la misión. En serio, no tengo mucha fe en ese tal \cf\"solucionador de problemas\"\c- de la UAC, pero NOSOTROS sí que podemos hacerlo. Nos hemos juntado yo y unos cuantos otros para hacerlo posible, vas a salvar a esa gente. Será difícil, lo sé, pero puedes hacerlo, por eso te he creado. Si hay una posibilidad de que lo consigas, quiero decirte que te recompensaré personalmente, \cfDemo-chan\c-. No te voy a dar detalles, quiero que sea una sorpresa.\n" +"\n" +"No hemos podido proveerte de todo el equipamiento disponible, no hay tiempo. En vez de eso, vete fijando por si encuentras provisiones colocadas estratégicamente por el camino (si hay suerte los demonios no tocarán nada). Se que suena muy a videojuego, y si te oigo quejarte me puedes comer los calzones, la decisión no fue mía. Pues eso.\n" +"\n" +"Eres nuestra última esperanza, así que lucha, \cfDemo-chan\c-, lucha por aquellos que quieres proteger, por todos nosotros... Haz que esos bastardos lo paguen.\n" +"\n" +" — Saya"; SWWM_MISSION_DOOM6 = "A ver, \cfDemo-chan\c-, últimas noticias para tu misión. Esos capullos tienen rehenes. Específicamente, un montón ENORME de gente, estoy leyendo cinco dígitos aquí. Estas personas tuvieron la mala suerte de no poder evacuar a tiempo, quedando atrapadas al principio de todo. Y los refugios están todos bloqueados por algún tipo de mecanismo demoníaco. Esos capullos probablemente los mantienen con vida para \"usarlos\" luego, y no les vamos a dar el gusto de acabar con esas vidas.\n" "\n" diff --git a/language.version b/language.version index 33e4499d6..cc201b404 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r301 \cu(Mon 22 Feb 17:48:28 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r301 \cu(2021-02-22 17:48:28)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r303 \cu(Mon 22 Feb 20:16:26 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r303 \cu(2021-02-22 20:16:26)\c-"; diff --git a/sndinfo.txt b/sndinfo.txt index e673290ac..ce4a556c1 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -412,6 +412,7 @@ demolitionist/buttslam sounds/demolitionist/demobutt.ogg demolitionist/smooch sounds/demolitionist/demokiss.ogg demolitionist/blowkiss sounds/demolitionist/demoblow.ogg demolitionist/petting sounds/demolitionist/demopat.ogg +demolitionist/knockout sounds/demolitionist/demoknockout.ogg $playersound demolitionist neutral *grunt DSEMPTY $playeralias demolitionist neutral *pain100 demolitionist/lopain diff --git a/sounds/demolitionist/demoknockout.ogg b/sounds/demolitionist/demoknockout.ogg new file mode 100644 index 000000000..e354760be Binary files /dev/null and b/sounds/demolitionist/demoknockout.ogg differ diff --git a/swwmcomp.acs b/swwmcomp.acs index 7930a6111..abc04250e 100644 --- a/swwmcomp.acs +++ b/swwmcomp.acs @@ -101,10 +101,15 @@ SCRIPT "DVACATION_BED" ( void ) if ( boinks >= 5 ) SetThingSpecial(667,0,0); // can headpat now } -// this one is for forcing episodes to continue seamlessly -// will be used eventually -SCRIPT "EPISODIC_CONTD" ( void ) +// WHACK +SCRIPT "E1M8_KNOCKOUT" ( void ) { - ScriptCall("SWWMUtility","WipeInventory",1); + Teleport(0,3); + SetPlayerProperty(0,1,PROP_TOTALLYFROZEN); + Delay(60); + AmbientSound("demolitionist/knockout",127); + Delay(5); + ScriptCall("SWWMUtility","EndLevelDie"); + Delay(100); Exit_Normal(0); } diff --git a/zscript/swwm_compat.zsc b/zscript/swwm_compat.zsc index b8eb325e5..36ce9a6b3 100644 --- a/zscript/swwm_compat.zsc +++ b/zscript/swwm_compat.zsc @@ -63,6 +63,79 @@ Class SWWMLevelCompatibility : LevelPostProcessor OffsetSectorPlane(155,1,-80.); SetLineSpecial(652,ACS_Execute,-Int('NERVE_EXITOPEN')); break; + // Doom E1M8 + case '97079958C7E89C1908890730B8B9FEB7': + // 1.1-1.2 + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E2M1"; + // no damage in exit sector + SetSectorSpecial(13,0); + // teleport sequence + for ( int i=299; i<=306; i++ ) + SetLineSpecial(i,ACS_Execute,-Int('E1M8_KNOCKOUT')); + // remove enemies + for ( int i=106; i<=112; i++ ) + SetThingEdNum(i,0); + for ( int i=118; i<=125; i++ ) + SetThingEdNum(i,0); + break; + case '058FB092EA1B70DA1E3CBF501C4A91A1': + // 1.666-1.9 + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E2M1"; + // no damage in exit sector + SetSectorSpecial(66,0); + // teleport sequence + for ( int i=299; i<=306; i++ ) + SetLineSpecial(i,ACS_Execute,-Int('E1M8_KNOCKOUT')); + // remove enemies + for ( int i=106; i<=112; i++ ) + SetThingEdNum(i,0); + for ( int i=118; i<=125; i++ ) + SetThingEdNum(i,0); + break; + // Doom E2M8 + case 'EFFE91DF41AD41F6973C06F0AD67DDB9': + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E3M1"; + break; + // Doom E3M8 + case 'EF128313112110ED6C1549AF96AF26C9': + level.nextsecretmap = level.nextmap; // so the handler can detect this + if ( Wads.FindLump("M_EPI4",0,1) != -1 ) level.nextmap = "E4M1"; + else if ( Wads.FindLump("M_HELL",0,1) != -1 ) level.nextmap = "MAP01"; + break; + // Doom E4M8 + case '2DC939E508AB8EB68AF79D5B60568711': + level.nextsecretmap = level.nextmap; // so the handler can detect this + if ( Wads.FindLump("M_EPI5",0,1) != -1 ) level.nextmap = "E5M1"; + else if ( Wads.FindLump("M_HELL",0,1) != -1 ) level.nextmap = "MAP01"; + break; + // SIGIL E5M8 + case '6EAD80DA1F30B4B3546FA294EEF9F87C': + level.nextsecretmap = level.nextmap; // so the handler can detect this + if ( Wads.FindLump("M_HELL",0,1) != -1 ) level.nextmap = "MAP01"; + break; + // Heretic E1M8 + case '27639D04F8090D57A47D354992435893': + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E2M1"; + break; + // Heretic E2M8 + case '5158C22A0F30CE5E558FD2A05D67685E': + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E3M1"; + break; + // Heretic E3M8 + case '4719C2C71EF28F52310B889DD5A9778B': + level.nextsecretmap = level.nextmap; // so the handler can detect this + if ( Wads.FindLump("EXTENDED",0,1) != -1 ) level.nextmap = "E4M1"; + break; + // Heretic E4M8 + case '30D1480A6D4F3A3153739D4CCF659C4E': + level.nextsecretmap = level.nextmap; // so the handler can detect this + level.nextmap = "E5M1"; + break; // Micro Slaughter Community Project MAP13 case 'E45AA3BE411845AA0DEE7CA5DAAB65FE': // reduce OBSCENELY EXCESSIVE number of cell packs in voodoo doll conveyors (400), which will cause immense lag when replaced with mod ammo diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 48720e4d0..43b2d3bc2 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -824,6 +824,15 @@ Class SWWMHandler : EventHandler let c = SWWMCredits.Find(players[i]); if ( c ) c.credits = c.hcredits = 0; } + // end of episode resets + if ( level.nextsecretmap.Left(6) == "enDSeQ" ) + { + for ( int i=0; i 0) && ((s.lastcluster != level.cluster) || !(level.clusterflags&LevelLocals.CLUSTER_HUB)) ) + if ( p.mo.FindInventory("InventoryWipeToken") || (swwm_pistolstart && (s.lstats.Size() > 0) && ((s.lastcluster != level.cluster) || !(level.clusterflags&LevelLocals.CLUSTER_HUB))) ) SWWMUtility.WipeInventory(p.mo,swwm_resetscore); } diff --git a/zscript/swwm_kbase.zsc b/zscript/swwm_kbase.zsc index f40c5cfd0..782f4acce 100644 --- a/zscript/swwm_kbase.zsc +++ b/zscript/swwm_kbase.zsc @@ -160,8 +160,8 @@ Class DemolitionistMenu : GenericMenu else if ( level.levelnum <= 32 ) clus = 8; missionstr = String.Format("$SWWM_MISSION_EVITERNITY%d",clus); } - // naive method to guess if this is sigil (also handle wadsmoosh, which uses cluster 25 instead) - else if ( ((clus == 5) || (clus == 25)) && (level.mapname.Left(2) == "E5") ) + // naive method to guess if this is sigil + else if ( (clus == 5) && (level.mapname.Left(2) == "E5") ) missionstr = String.Format("$SWWM_MISSION_SIGIL"); else missionstr = String.Format("$SWWM_MISSION_DOOM%d",clus); int csiz = stats.clustervisit.Size(); @@ -171,6 +171,17 @@ Class DemolitionistMenu : GenericMenu if ( !(StringTable.Localize(tmpstr) ~== tmpstr.Mid(1)) ) missionstr = tmpstr; } + // if we came from the doom 1 episodes, use the alt mission string for Doom 2 + bool fromdoomone = false; + for ( int i=0; i= 5) && (stats.clustervisit[i] != 25) ) continue; + fromdoomone = true; + break; + } + if ( !eviternity && (clus == 5) && fromdoomone ) + missionstr = "$SWWM_MISSION_DOOM5_FROMDOOM1"; if ( StringTable.Localize(missionstr) ~== missionstr.Mid(1) ) missionstr = "$SWWM_MISSION_NONE"; bool firstskip = false; @@ -180,6 +191,8 @@ Class DemolitionistMenu : GenericMenu 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 ) + xstr = "$SWWM_MISSION_DOOM5_FROMDOOM1"; if ( stats.secretdone[i] ) { String tmpstr = xstr.."_SECRET"; diff --git a/zscript/swwm_utility.zsc b/zscript/swwm_utility.zsc index 6e8a39776..645a34e62 100644 --- a/zscript/swwm_utility.zsc +++ b/zscript/swwm_utility.zsc @@ -178,6 +178,12 @@ Class SWWMUtility { if ( (l.special == Exit_Normal) || (l.special == Exit_Secret) || (l.special == Teleport_EndGame) || (l.special == Teleport_NewMap) ) return true; + // E1M8 compat + if ( (l.special == ACS_Execute) && (l.Args[0] == -Int('E1M8_KNOCKOUT')) ) + return true; + // spooktober™ + if ( ((l.special == ACS_Execute) || (l.special == ACS_ExecuteAlways)) && (l.Args[0] == -Int('MapFadeOut')) ) + return true; return false; } @@ -1392,8 +1398,17 @@ Class SWWMUtility } // full reset of inventory (excluding collectibles, and optionally resetting the score) - static play void WipeInventory( Actor mo, bool resetscore = false ) + static play void WipeInventory( Actor mo, bool resetscore = false, bool allplayers = false ) { + if ( allplayers ) + { + for ( int i=0; i