From 98012daf262ce4f44f143b52d107c8a63abbe6f3 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Thu, 8 Apr 2021 15:56:18 +0200 Subject: [PATCH] A couple tweaks. --- FuturePlans.md | 9 ++ achievements.lst | 151 ++++++++++--------- language.version | 4 +- zscript/handler/swwm_handler_worldthings.zsc | 2 +- zscript/items/swwm_funstuff.zsc | 23 +-- zscript/kbase/swwm_kbase.zsc | 4 + zscript/swwm_player.zsc | 7 +- zscript/utility/swwm_utility.zsc | 6 + 8 files changed, 118 insertions(+), 88 deletions(-) diff --git a/FuturePlans.md b/FuturePlans.md index a1a7384dc..0bbdd13e9 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -19,6 +19,15 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - [Heretic] Manarock *("A delicacy for gods, but instantly deadly for mortals")* - [Heretic] Lithium - Volume One *(A work of art, one of the finest graphic novels)* - [Hexen] Rubber Duck *("Is this some kind of convoluted joke from those two?")* +* **More achievements:** + - [Doom] Heck No *(Instakill 10 Archviles)* + - Kaboom *(Kill 30 enemies with planted Explodium Mags)* + - OH YEAH *(Bust through 20 doors)* + - [Doom] Goodbye Franchise *(Rescue Commander Keen)* + - Pacifist *(Finish a map without killing anything)* + - Untouchable *(Finish a map without taking damage)* + - Under Pressure *(Break a crusher)* + - The Longest Journey *(Walk a total of 1000km)* * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** * **Replace all hitscan with *"light projectiles"*** * **Leaning and a lot of other stuff involving ViewAngles and ViewPos** diff --git a/achievements.lst b/achievements.lst index 439bbd45d..237a86a82 100644 --- a/achievements.lst +++ b/achievements.lst @@ -5,78 +5,79 @@ # handling in zscript (usually for cases where this is dynamic, like # the "all collectibles" achievement) # hasformat: the TXT string has a %d in it to substitute for maxval -abort,0,no -acid,200,yes -allcoll,-1,no -allitems,30,yes -allkills,30,yes -allsecrets,30,yes -anom,25,yes -anone,0,no -balls,10,yes -barrier,25,yes -bonk,300,yes -bossdash,10,yes -brake,30,yes -bune,200,yes -bustin,40,yes -butts,100,yes -cheat,0,no -cliffyb,0,no -clonk,0,no -conga,15,yes -#dab,100,yes -#dakka,60,no -dime,0,no -dosh,1000000000,no -everything,0,no -ezkill,100,yes -flight,2000,yes -friend,30,yes -fuel,400,yes -#fuller,0,no -gcsandwich,25,yes -#gepgun,30,yes -ghost,25,yes -gib,1000,yes -golden,24,yes -gravity,25,yes -#hnd,6,yes -jump,100,yes -lead,1500,yes -#lightning,0,no -ligma,0,no -love,20,yes -#mashiro,0,no -mbf,0,no -mega,1000000,no -moth,50,yes -nice,0,no -oneguy,0,no -onestanding,0,no -oopsie,0,no -par,30,yes -parry,100,yes -#pene,20,yes -plush,20,yes -rage,25,yes -reflect,20,yes -refresh,25,yes -#roast,30,yes -salt,0,no -sanic,800,yes -sekiro,0,no -shame,0,no -shock,30,yes -slayer,40,yes -slemg,50,yes -sneeze,20,yes -step,60,yes -stomp,50,yes -sunny,25,yes -tele,0,no -thicc,100,yes -thruwall,25,yes -wantdie,0,no -wave,0,no -yeet,0,no +# gametype: the game this belongs to (any, doom, heretic, hexen, raven, etc.) +abort,0,no,any +acid,200,yes,any +allcoll,-1,no,any +allitems,30,yes,any +allkills,30,yes,any +allsecrets,30,yes,nothexen +anom,25,yes,any +anone,0,no,any +balls,10,yes,any +barrier,25,yes,doom +bonk,300,yes,any +bossdash,10,yes,any +brake,30,yes,any +bune,200,yes,any +bustin,40,yes,any +butts,100,yes,any +cheat,0,no,any +cliffyb,0,no,nothexen +clonk,0,no,any +conga,15,yes,any +#dab,100,yes,any +#dakka,60,no,any +dime,0,no,any +dosh,1000000000,no,any +everything,0,no,any +ezkill,100,yes,any +flight,2000,yes,any +friend,30,yes,any +fuel,400,yes,any +#fuller,0,no,any +gcsandwich,25,yes,any +#gepgun,30,yes,any +ghost,25,yes,any +gib,1000,yes,any +golden,24,yes,any +gravity,25,yes,raven +#hnd,6,yes,any +jump,100,yes,any +lead,1500,yes,any +#lightning,0,no,any +ligma,0,no,any +love,20,yes,any +#mashiro,0,no,any +mbf,0,no,doom +mega,1000000,no,any +moth,50,yes,any +nice,0,no,any +oneguy,0,no,any +onestanding,0,no,any +oopsie,0,no,any +par,30,yes,nothexen +parry,100,yes,any +#pene,20,yes,any +plush,20,yes,any +rage,25,yes,any +reflect,20,yes,any +refresh,25,yes,any +#roast,30,yes,any +salt,0,no,any +sanic,800,yes,any +sekiro,0,no,any +shame,0,no,any +shock,30,yes,any +slayer,40,yes,any +slemg,50,yes,any +sneeze,20,yes,any +step,60,yes,any +stomp,50,yes,any +sunny,25,yes,any +tele,0,no,any +thicc,100,yes,any +thruwall,25,yes,any +wantdie,0,no,any +wave,0,no,any +yeet,0,no,doom diff --git a/language.version b/language.version index 751a74ffe..d8522c02c 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r433 \cu(Wed 7 Apr 11:17:04 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r433 \cu(2021-04-07 11:17:04)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r435 \cu(Thu 8 Apr 15:57:28 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r435 \cu(2021-04-08 15:57:28)\c-"; diff --git a/zscript/handler/swwm_handler_worldthings.zsc b/zscript/handler/swwm_handler_worldthings.zsc index cc37748bc..b5c248e05 100644 --- a/zscript/handler/swwm_handler_worldthings.zsc +++ b/zscript/handler/swwm_handler_worldthings.zsc @@ -49,7 +49,7 @@ extend Class SWWMHandler return false; } - private static bool ShouldSpawnGold() + static bool ShouldSpawnGold() { int totalneeded = 0; // check "free space" in player inventories diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index c000f94cb..1641bc763 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -18,6 +18,10 @@ Class FroggyChair : Actor +NOBLOOD; +INTERPOLATEANGLES; +FORCEPAIN; + +CANPASS; + +NOBLOCKMONST; + +MOVEWITHSECTOR; + +SLIDESONWALLS; } private void BeginCarry( Actor carrier ) { @@ -728,12 +732,12 @@ Class Chancebox : Actor // no candidates? just burst into treats if ( Random[Chancebox](0,1) ) { - let a = Spawn(!Random[Chancebox](0,2)?"GoldShell":Random[Chancebox](0,1)?"GrilledCheeseSandwich":"YnykronAmmo",pos); + let a = Spawn((!Random[Chancebox](0,2)&&SWWMUtility.ItemExists("Spreadgun"))?"GoldShell":(Random[Chancebox](0,1)&&SWWMUtility.ItemExists("Ynykron"))?"YnykronAmmo":"GrilledCheeseSandwich",pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); } - else if ( !Random[Chancebox](0,2) ) + else if ( !Random[Chancebox](0,2) && SWWMUtility.ItemExists("CandyGun") ) { for ( int i=0; i<=6; i++ ) { @@ -744,7 +748,7 @@ Class Chancebox : Actor if ( i > 0 ) a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](1,2); } } - else if ( !Random[Chancebox](0,2) ) + else if ( !Random[Chancebox](0,2) && SWWMUtility.ItemExists("SilverBullet") ) { for ( int i=0; i<3; i++ ) { @@ -763,7 +767,7 @@ Class Chancebox : Actor a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](3,4); } } - else if ( Random[Chancebox](0,1) ) + else if ( Random[Chancebox](0,1) && SWWMUtility.ItemExists("Hellblazer") ) { let a = Spawn("HellblazerWarheads",pos); a.bDROPPED = false; @@ -794,7 +798,7 @@ Class Chancebox : Actor a.vel.xy = (cos(i*45),sin(i*45))*FRandom[Chancebox](5,6); } } - else if ( Random[Chancebox](0,1) ) + else if ( Random[Chancebox](0,1) && SWWMUtility.ItemExists("Spreadgun") ) { let a = Spawn("BlackShell",pos); a.bDROPPED = false; @@ -802,7 +806,7 @@ Class Chancebox : Actor a.vel.z = FRandom[Chancebox](2,4); for ( int i=0; i<3; i++ ) { - a = Spawn("BlueShell",pos); + a = Spawn("WhiteShell",pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); @@ -810,7 +814,7 @@ Class Chancebox : Actor } for ( int i=0; i<8; i++ ) { - a = Spawn((i%2)?"WhiteShell":"PurpleShell",pos); + a = Spawn((i%2)?"PurpleShell":"BlueShell",pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); @@ -827,13 +831,14 @@ Class Chancebox : Actor } else if ( Random[Chancebox](0,1) ) { + Class which = Random[Chancebox](1,0)?"HealthNuggetItem":"ArmorNuggetItem"; for ( int i=0; i<20; i++ ) { - let a = Spawn("HealthNuggetItem",pos); + let a = Spawn(which,pos); a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,8); - a.vel.xy = (cos(i*3.6),sin(i*3.6))*FRandom[Chancebox](1,8); + a.vel.xy = (cos(i*18),sin(i*18))*FRandom[Chancebox](1,8); } } else diff --git a/zscript/kbase/swwm_kbase.zsc b/zscript/kbase/swwm_kbase.zsc index 8cf755178..3571f9233 100644 --- a/zscript/kbase/swwm_kbase.zsc +++ b/zscript/kbase/swwm_kbase.zsc @@ -2308,6 +2308,10 @@ Class DemolitionistMenu : GenericMenu if ( !type ) continue; // no collectibles if ( type is 'SWWMCollectible' ) continue; + // no barriers outside doom + if ( !(gameinfo.gametype&GAME_DOOM) && (type is 'EBarrier') ) continue; + // no gravity outside raven + if ( !(gameinfo.gametype&GAME_RAVEN) && (type is 'GravitySuppressor') ) continue; // can't sell candygun spares if ( sub && (type is 'CandyGunSpares') ) continue; let cur = players[consoleplayer].mo.FindInventory(type); diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 1197835ad..f40d3f1be 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -335,7 +335,12 @@ Class Demolitionist : PlayerPawn { let type = (class)(AllActorClasses[i]); if ( !type ) continue; - if ( !(gameinfo.gametype&GAME_Hexen) && (type is 'AmmoFabricator') ) continue; // no fabricators before hexen + // no fabricators before hexen + if ( !(gameinfo.gametype&GAME_Hexen) && (type is 'AmmoFabricator') ) continue; + // no barriers outside doom + if ( !(gameinfo.gametype&GAME_DOOM) && (type is 'EBarrier') ) continue; + // no gravity outside raven + if ( !(gameinfo.gametype&GAME_RAVEN) && (type is 'GravitySuppressor') ) continue; // Don't give maxed items let owned = FindInventory(type); if ( owned && (owned.Amount >= owned.MaxAmount) ) continue; diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index 600705f59..f7b5ac715 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -48,6 +48,12 @@ Class SWWMUtility continue; Array ln; list[i].Split(ln,",",0); + // game filtering + if ( !(gameinfo.gametype&GAME_DOOM) && (ln[3] ~== "doom") ) continue; + else if ( !(gameinfo.gametype&GAME_HERETIC) && (ln[3] ~== "heretic") ) continue; + else if ( !(gameinfo.gametype&GAME_HEXEN) && (ln[3] ~== "hexen") ) continue; + else if ( !(gameinfo.gametype&GAME_RAVEN) && (ln[3] ~== "raven") ) continue; + else if ( !(gameinfo.gametype&(GAME_DOOM|GAME_HERETIC)) && (ln[3] ~== "nothexen") ) continue; let ac = new("SWWMAchievement"); ac.basename = ln[0]; ac.maxval = ln[1].ToInt();