diff --git a/FuturePlans.md b/FuturePlans.md index 69c932ba2..96bb6fc7f 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -104,3 +104,20 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Manual reloading and weapon maintenance - Alternate mobility options (no jetpack) - Non-instant item usage +* **DLC Weaponset 2:** + - [1] Hand of Divine *(Total Madness)* + - [2] Protonic Cannon *(UnSX 3)* + - [3] Zipnic AP Mag *(UnSX)* + - [4] Mortal Rifle *(UnSX)* + - [5] Microgravity Manipulator *(Ultra Suite)* + - [6] Skull Launcher *(Weirdweapons)* + - [7] Sparkster Carbine *(UnSX)* + - [8] Mirkal *(SWWM Platinum Ep1)* + - [9] Rafan-Kos *(UnSX)* + - [0] Mespei Artifact *(SWWM)* +* **DLC Itemset:** + - Satellite *(Total Destruction)* + - Safety Tether *(Original)* + - Devastation Sigil *(SWWM)* + - Black Matter Armor *(SWWM)* + - Angel of Death *(Total Destruction, SWWM Platinum Ep2)* \ No newline at end of file diff --git a/cvarinfo.txt b/cvarinfo.txt index 4b39bff03..3fddd8103 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -109,6 +109,8 @@ nosave noarchive bool swwm_oldcheat = false; // set to true if you used a SWWM P server bool swwm_selflight = true; // player emits light server bool swwm_usetopickup = false; // allow item pickup only by pressing use server bool swwm_meleepickup = false; // allow picking up items through melee +nosave bool swwm_buttsfx = true; // buttslam homerun SFX +nosave int swwm_sewercount = 0; // I'm sorry Civvie // minimap settings nosave bool swwm_mm_enable = true; // show a minimap below the score counter diff --git a/language.def_menu b/language.def_menu index a245a8f1f..814722bbe 100644 --- a/language.def_menu +++ b/language.def_menu @@ -188,6 +188,7 @@ SWWM_ATITLE = "Achievements"; SWWM_SELFLIGHT = "Self-Lighting"; SWWM_USETOPICKUP = "Exclusive Use To Pickup"; SWWM_MELEEPICKUP = "Allow Item Pickup Through Melee"; +SWWM_BUTTSFX = "Slapping Buttcheeks"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -326,6 +327,7 @@ TOOLTIP_SWWM_PLAYTIME = "Your total play time with this mod loaded."; TOOLTIP_SWWM_SELFLIGHT = "Emit blue light from the player's face. Disable if this causes performance issues."; TOOLTIP_SWWM_USETOPICKUP = "Prevents picking up mod items through touch, exclusively requiring a use action instead."; TOOLTIP_SWWM_MELEEPICKUP = "Allows picking up items though melee attacks. Do note that some weapons have an extended melee range, allowing you to grab things from farther away."; +TOOLTIP_SWWM_BUTTSFX = "The Demolitionist's buttcheeks will VERY AUDIBLY slap upon executing a successful buttslam."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; TOOLTIP_SWWM_MM_ROTATE = "Rotates the minimap view."; TOOLTIP_SWWM_MM_GRID = "Shows a 128x128 grid on the minimap."; diff --git a/language.es_menu b/language.es_menu index c7af24a40..e45cf866e 100644 --- a/language.es_menu +++ b/language.es_menu @@ -187,6 +187,7 @@ SWWM_ATITLE = "Logros"; SWWM_SELFLIGHT = "Luz Propia"; SWWM_USETOPICKUP = "Uso Exclusivo para Recoger"; SWWM_MELEEPICKUP = "Permitir Recoger Ítems con Melé"; +SWWM_BUTTSFX = "Azote de Nalgas"; SWWM_MMTITLE = "Opciones de Minimapa"; SWWM_MM_ENABLE = "Mostrar Minimapa"; SWWM_MM_ROTATE = "Rotar Minimapa"; @@ -325,6 +326,7 @@ TOOLTIP_SWWM_PLAYTIME = "Tu tiempo de juego total con este mod cargado."; TOOLTIP_SWWM_SELFLIGHT = "Emite luz azul desde la cara del jugador. Desactiva si causa problemas de rendimiento."; TOOLTIP_SWWM_USETOPICKUP = "Evita recoger ítems del mod al tocarlos, en su lugar requiriendo exclusivamente una acción de uso."; TOOLTIP_SWWM_MELEEPICKUP = "Permite recoger ítems por medio de ataques a melé. Ten en cuenta que algunas armas tienen un rango de melé extendido, permitiéndote alcanzar cosas desde una mayor distancia."; +TOOLTIP_SWWM_BUTTSFX = "Las nalgas de la Demolicionista emitiran un azote MUY SONORO al ejecutar exitosamente un golpe de culo."; TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación."; TOOLTIP_SWWM_MM_ROTATE = "Gira la vista del minimapa."; TOOLTIP_SWWM_MM_GRID = "Muestra una cuadrícula de 128x128 en el minimapa."; diff --git a/language.version b/language.version index 951191498..af7e5d1ad 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r521 \cu(Tue 1 Jun 16:52:15 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r521 \cu(2021-06-01 16:52:15)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r522 \cu(Wed 2 Jun 01:16:49 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r522 \cu(2021-06-02 01:16:49)\c-"; diff --git a/menudef.txt b/menudef.txt index 0cabb2384..321f843d8 100644 --- a/menudef.txt +++ b/menudef.txt @@ -149,6 +149,7 @@ OptionMenu "SWWMOptionMenu" StaticText " " StaticText "$SWWM_FTITLE", "Blue" Option "$SWWM_FUNTAGS", "swwm_funtags", "YesNo" + Option "$SWWM_BUTTSFX", "swwm_buttsfx", "YesNo" Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" diff --git a/sndinfo.txt b/sndinfo.txt index 2608c3c2e..d60033b53 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -408,7 +408,11 @@ $random demolitionist/whitm { demolitionist/whitm1 demolitionist/whitm2 demoliti demolitionist/whitl1 sounds/demolitionist/demowhitl1.ogg demolitionist/whitl2 sounds/demolitionist/demowhitl2.ogg $random demolitionist/whitl { demolitionist/whitl1 demolitionist/whitl2 } -demolitionist/buttslam sounds/demolitionist/demobutt.ogg +demolitionist/buttslam1 sounds/demolitionist/demobutt1.ogg +demolitionist/buttslam2 sounds/demolitionist/demobutt2.ogg +demolitionist/buttslam3 sounds/demolitionist/demobutt3.ogg +$random demolitionist/buttslam { demolitionist/buttslam1 demolitionist/buttslam2 demolitionist/buttslam3 } +demolitionist/buttslamx sounds/demolitionist/demoxbutt.ogg demolitionist/smooch sounds/demolitionist/demokiss.ogg demolitionist/blowkiss sounds/demolitionist/demoblow.ogg demolitionist/petting sounds/demolitionist/demopat.ogg @@ -924,6 +928,7 @@ misc/achievement2 sounds/YAY.ogg misc/orbexplode sounds/ORBEXPLODE.ogg misc/omgfart sounds/omgfart.ogg misc/voice sounds/dlgvoice.ogg +misc/sewercount sounds/sewercount.ogg misc/gibber1 sounds/general/Gib1.ogg misc/gibber2 sounds/general/Gib2.ogg misc/gibber3 sounds/general/Gib3.ogg diff --git a/sounds/demolitionist/demobutt.ogg b/sounds/demolitionist/demobutt.ogg deleted file mode 100644 index 70b434581..000000000 Binary files a/sounds/demolitionist/demobutt.ogg and /dev/null differ diff --git a/sounds/demolitionist/demobutt1.ogg b/sounds/demolitionist/demobutt1.ogg new file mode 100644 index 000000000..0561b3e6a Binary files /dev/null and b/sounds/demolitionist/demobutt1.ogg differ diff --git a/sounds/demolitionist/demobutt2.ogg b/sounds/demolitionist/demobutt2.ogg new file mode 100644 index 000000000..96d51151c Binary files /dev/null and b/sounds/demolitionist/demobutt2.ogg differ diff --git a/sounds/demolitionist/demobutt3.ogg b/sounds/demolitionist/demobutt3.ogg new file mode 100644 index 000000000..58d5cc276 Binary files /dev/null and b/sounds/demolitionist/demobutt3.ogg differ diff --git a/sounds/demolitionist/demoxbutt.ogg b/sounds/demolitionist/demoxbutt.ogg new file mode 100644 index 000000000..00f603b3f Binary files /dev/null and b/sounds/demolitionist/demoxbutt.ogg differ diff --git a/sounds/sewercount.ogg b/sounds/sewercount.ogg new file mode 100644 index 000000000..4440f2e3e Binary files /dev/null and b/sounds/sewercount.ogg differ diff --git a/zscript/handler/swwm_handler_cheats.zsc b/zscript/handler/swwm_handler_cheats.zsc index 36a578c7f..1ce890465 100644 --- a/zscript/handler/swwm_handler_cheats.zsc +++ b/zscript/handler/swwm_handler_cheats.zsc @@ -8,6 +8,14 @@ extend Class SWWMHandler transient ui int rss; transient ui Font kfnt; ui bool nostalgic; + transient int sewercnt; + + private ui void CheatUITick() + { + if ( !sewercnt || (sewercnt < gametic) ) return; + let m = new("SWWMSewerCount").Init(); + StatusBar.AttachMessage(m,-1111); + } private void CheatEvent( ConsoleEvent e ) { @@ -311,7 +319,7 @@ extend Class SWWMHandler if ( consoleplayer == e.Args[0] ) { Console.Printf("\cyLet's mop up that big mess over there.\c-"); - S_StartSound("misc/buyinv",CHAN_ITEM,CHANF_UI); + S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); } let cc = SWWMCorpseCleaner(ThinkerIterator.Create("SWWMCorpseCleaner",Thinker.STAT_USER).Next()); if ( !cc ) @@ -322,6 +330,51 @@ extend Class SWWMHandler } else cc.Init(players[e.Args[0]].mo); } + else if ( e.Name ~== "swwmsewercountcheat" ) + { + if ( consoleplayer == e.Args[0] ) + { + let cv = CVar.FindCVar('swwm_sewercount'); + int cur = max(0,cv.GetInt()); + if ( cur == 0 ) Console.Printf("\cyIt begins.\c-"); + else switch ( Random[HudStuff](0,9) ) + { + case 0: + Console.Printf("\cyAnother one?\c-"); + break; + case 1: + Console.Printf("\cyOh hi Civvie.\c-"); + break; + case 2: + Console.Printf("\cyIt does stink.\c-"); + break; + case 3: + Console.Printf("\cyGod, imagine the smell...\c-"); + break; + case 4: + Console.Printf("\cyObligatory sewer level?\c-"); + break; + case 5: + Console.Printf("\cyYup! It's another sewer.\c-"); + break; + case 6: + Console.Printf("\cyOh boy here we go...\c-"); + break; + case 7: + Console.Printf("\cyIt smells, boy does it smell.\c-"); + break; + case 8: + Console.Printf("\cyPlease don't sue me, Civvie.\c-"); + break; + case 9: + Console.Printf("\cyOnce more, from the top!\c-"); + break; + } + S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI); + cv.SetInt(cur+1); + sewercnt = gametic; + } + } } private ui bool CheatInput( InputEvent e ) @@ -330,7 +383,7 @@ extend Class SWWMHandler String cht[] = { "swwmlodsofemone", "swwmdeeplore", "swwmfroggygang", "swwmforgetaboutit", - "swwmmisterproper", + "swwmmisterproper", "swwmstinky", // SWWM Platinum cheats "swwmimstuck", "swwmarmojumbo", "swwmdangimhealthy", "swwmwarriorofzaemonath", "swwmpowerparp", "swwmcannotseemyhands", @@ -343,7 +396,7 @@ extend Class SWWMHandler String cmd[] = { "swwmmoneycheat", "swwmlorecheat", "swwmfroggycheat", "swwmamnesiacheat", - "swwmjanitorcheat", + "swwmjanitorcheat", "swwmsewercountcheat", // SWWM Platinum cheats "swwmsafecheat", "swwmweaponcheat", "swwmhealcheat", "swwmynykroncheat", "swwmgravcheat", "swwminvischeat", @@ -364,7 +417,7 @@ extend Class SWWMHandler if ( kstr != cht[i].Left(kstr.length()) ) continue; matchany = true; if ( kstr != cht[i] ) continue; - if ( (i > 4) && !swwm_oldcheat ) + if ( (i > 5) && !swwm_oldcheat ) { let m = new("SWWMSecretZanavethMessage").Init(); StatusBar.AttachMessage(m,-1232); diff --git a/zscript/hud/swwm_hudextra.zsc b/zscript/hud/swwm_hudextra.zsc index 5b8de86ba..3d29d1fb6 100644 --- a/zscript/hud/swwm_hudextra.zsc +++ b/zscript/hud/swwm_hudextra.zsc @@ -223,6 +223,34 @@ Class SWWMAchievementNotification : HUDMessageBase } } +Class SWWMSewerCount : HUDMessageBase +{ + int tics; + String str; + + SWWMSewerCount Init() + { + tics = 150; + str = String.Format("Sewer Count: %d",swwm_sewercount); + return self; + } + + override bool Tick() + { + if ( tics == 100 ) S_StartSound("misc/sewercount",CHAN_VOICE,CHANF_UI,1.,0.); + return (tics--<=0); + } + + override void Draw( int bottom, int visibility ) + { + if ( tics > 100 ) return; + double alph = clamp(tics/20.,0.,1.); + double x = (Screen.GetWidth()-(newsmallfont.StringWidth(str)*CleanXFac*2))/2; + double y = int(Screen.GetHeight()*.75)-(newsmallfont.GetHeight()*CleanYFac*2)/2; + Screen.DrawText(newsmallfont,Font.CR_GREEN,x,y,str,DTA_ScaleX,CleanXFac*2,DTA_ScaleY,CleanYFac*2,DTA_Alpha,alph); + } +} + // Secret dialogue Class SWWMSecretZanavethMessage : HUDMessageBase { diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 5f8a08438..1c8bef642 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -127,6 +127,7 @@ Class SWWMHandler : EventHandler OnelinerUITick(); FlashUITick(); VanillaBossUITick(); + CheatUITick(); } override void WorldLinePreActivated( WorldEvent e ) diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 7b725bb3e..7a31fd2b2 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -1160,10 +1160,12 @@ Class Demolitionist : PlayerPawn } if ( buttslam && (!a || (a.Health <= 0)) ) { - A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHAN_OVERLAP,1.,.2); + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.4); + if ( swwm_buttsfx ) A_StartSound("demolitionist/buttslamx",CHAN_DAMAGE,CHAN_OVERLAP,1.,.2); Spawn("SWWMItemFog",level.Vec3Offset(pos,diff/2)); A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); mystats.buttslams++; + lastbump *= .8; } } if ( raging ) @@ -1223,10 +1225,12 @@ Class Demolitionist : PlayerPawn busted = true; if ( buttslam ) { - A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.4); + if ( swwm_buttsfx ) A_StartSound("demolitionist/buttslamx",CHAN_DAMAGE,CHAN_OVERLAP,1.,.2); Spawn("SWWMItemFog",Vec3Offset(0,0,Height)); A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); mystats.buttslams++; + lastbump *= .8; } } } @@ -1319,10 +1323,12 @@ Class Demolitionist : PlayerPawn A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); if ( buttslam ) { - A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.4); + if ( swwm_buttsfx ) A_StartSound("demolitionist/buttslamx",CHAN_DAMAGE,CHAN_OVERLAP,1.,.2); Spawn("SWWMItemFog",Vec3Offset(dir.x*radius,dir.y*radius,(tempme.Results.Tier==TIER_UPPER)?Height:(tempme.Results.Tier==TIER_LOWER)?0:(Height/2))); A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); mystats.buttslams++; + lastbump *= .8; } if ( raging ) continue; // don't stop }