From 883e770899fa092af31e96e1b86a0380eca79bc8 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Fri, 22 Oct 2021 17:26:48 +0200 Subject: [PATCH] "Demoslayer" fun option (enemies drop health). --- cvarinfo.base | 1 + language.def_menu | 2 + language.es_menu | 2 + language.version | 4 +- menudef.txt | 1 + zscript/handler/swwm_handler_damage.zsc | 14 ++- zscript/items/swwm_basehealth.zsc | 1 + zscript/swwm_player_fx.zsc | 122 ++++++++++++++++++++++++ 8 files changed, 144 insertions(+), 3 deletions(-) diff --git a/cvarinfo.base b/cvarinfo.base index 72c45da97..c9b668e57 100644 --- a/cvarinfo.base +++ b/cvarinfo.base @@ -120,6 +120,7 @@ nosave bool swwm_weapontooltips = true; // shows a tooltip on weapon operation nosave string swwm_tooltipshown = ""; // which weapons have already had their tooltips displayed nosave noarchive bool swwm_tooltipnote = false; // set if the note on how to disable tooltips was already displayed nosave bool swwm_nointertips = false; // hides intermission tips, in case you don't want to see them +server bool swwm_demoslayer = false; // if you're below 100hp, enemies drop healing orbs when you kill them // 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 6ba09d025..46f46b8cc 100644 --- a/language.def_menu +++ b/language.def_menu @@ -205,6 +205,7 @@ SWWM_RESETTOOLTIPS = "Reset Weapon Tooltips"; SWWM_CRESET = "Reset to Defaults"; SWWM_ARESET = "Wipe Achievements"; SWWM_NOINTERTIPS = "Hide Intermission Tips"; +SWWM_DEMOSLAYER = "Demoslayer Mode"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -361,6 +362,7 @@ TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resets weapon tooltips so you can see them al TOOLTIP_EVENT_SWWMRESETCVARS = "Resets all the mod's settings to their original values."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Erases all your archievement progress."; TOOLTIP_SWWM_NOINTERTIPS = "Hides intermission tips, in case you don't want to see them."; +TOOLTIP_SWWM_DEMOSLAYER = "If you're below 100 health, killed enemies will drop health orbs."; TOOLTIP_SWWMMINIMAPMENU = "Configure the minimap."; TOOLTIP_SWWMACHIEVEMENTMENU = "View your achievements."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; diff --git a/language.es_menu b/language.es_menu index b939105f0..d03b73194 100644 --- a/language.es_menu +++ b/language.es_menu @@ -204,6 +204,7 @@ SWWM_RESETTOOLTIPS = "Resetear Ayuda de Armas"; SWWM_CRESET = "Restaurar Predeterminado"; SWWM_ARESET = "Borrar Logros"; SWWM_NOINTERTIPS = "Ocultar Consejos de Intermisión"; +SWWM_DEMOSLAYER = "Modo Demoslayer"; SWWM_MMTITLE = "Opciones de Minimapa"; SWWM_MM_ENABLE = "Mostrar Minimapa"; SWWM_MM_ROTATE = "Rotar Minimapa"; @@ -360,6 +361,7 @@ TOOLTIP_EVENT_SWWMRESETTOOLTIPS = "Resetea la ayuda de armas para que puedas vol TOOLTIP_EVENT_SWWMRESETCVARS = "Resetea todas las opciones del mod a sus valores originales."; TOOLTIP_EVENT_SWWMRESETACHIEVEMENTS = "Borra todo tu progreso de logros."; TOOLTIP_SWWM_NOINTERTIPS = "Oculta los consejos de intermisión, por si no quieres verlos."; +TOOLTIP_SWWM_DEMOSLAYER = "Si tienes menos de 100 puntos de vida, los enemigos que mates soltarán orbes de salud."; TOOLTIP_SWWMMINIMAPMENU = "Configura el minimapa."; TOOLTIP_SWWMACHIEVEMENTMENU = "Revisa tus logros."; TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación."; diff --git a/language.version b/language.version index 991805cf5..50520b273 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.31 r2 \cu(Fri 22 Oct 13:06:38 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.1.31 r2 \cu(2021-10-22 13:06:38)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.32 \cu(Fri 22 Oct 17:27:17 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.1.32 \cu(2021-10-22 17:27:17)\c-"; diff --git a/menudef.txt b/menudef.txt index b42ee3faf..08048d5fe 100644 --- a/menudef.txt +++ b/menudef.txt @@ -159,6 +159,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_OMNIBUST", "swwm_omnibust", "YesNo" Option "$SWWM_SUPERFUEL", "swwm_superfuel", "YesNo" Option "$SWWM_PARTYTIME", "swwm_partytime", "YesNo" + Option "$SWWM_DEMOSLAYER", "swwm_demoslayer", "YesNo" Option "$SWWM_FUNTRAILS", "swwm_funtrails", "SWWMFunTrails" TrapOption "$SWWM_ENGINE", "swwm_engine" StaticText " " diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index 486cd6f46..5bbba337d 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -186,7 +186,7 @@ extend Class SWWMHandler } int pnum = src.PlayerNumber(); // achievement stuff - if ( e.Thing.IsHostile(src) ) + if ( e.Thing.IsHostile(src) && (e.Thing.bISMONSTER || e.Thing.player) ) { if ( (e.Thing.bBOSS||e.Thing.FindInventory("BossMarker")) && ((e.DamageType == 'Dash') || (e.DamageType == 'Buttslam')) ) SWWMUtility.AchievementProgressInc('swwm_progress_bossdash',1,src.player); @@ -218,6 +218,18 @@ extend Class SWWMHandler onehpspree[pnum]++; SWWMUtility.AchievementProgress('swwm_progress_onehp',onehpspree[pnum],src.player); } + // tasty treats + if ( swwm_demoslayer && (src.Health < 100) ) + { + int amt = clamp(min(-e.Thing.Health,-e.Thing.GetGibHealth())/5,0,20); + for ( int i=0; i mdist ) continue; + mdist = dist; + np = i; + } + if ( np == -1 ) return; + let mo = players[np].mo; + if ( SWWMUtility.BoxIntersect(self,mo,pad:8) ) + { + int flg = CHANF_OVERLAP|CHANF_MAYBE_LOCAL; + if ( mo.CheckLocalView() ) flg |= CHANF_NOPAUSE; + mo.A_StartSound("misc/health_pkup",CHAN_ITEM,flg); + int hp = int(ceil(abs(scale.x*10))); + mo.GiveBody(hp,100); + SWWMHandler.HealthFlash(np); + SWWMScoreObj.Spawn(hp,mo.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+mo.Height/2),ST_Health); + Destroy(); + return; + } + if ( isFrozen() ) return; + Vector3 dirto = level.Vec3Diff(pos,mo.Vec3Offset(0,0,mo.Height/2)); + double distto = dirto.length(); + dirto /= distto; + vel += dirto*((600.-distto)/400.)**2.; + vel.z += .2; + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + SpriteOffset = (0,-4); + Scale.x *= RandomPick[Junk](-1,-1); + Scale.y *= RandomPick[Junk](-1,-1); + } + States + { + Spawn: + BLPF E -1 Bright; + Stop; + } +} +Class HealthOrbTrail : Actor +{ + Default + { + RenderStyle "Add"; + Radius .1; + Height 0.; + Scale .25; + Alpha .5; + +FORCEXYBILLBOARD; + +NOGRAVITY; + +NOBLOCKMAP; + +DONTSPLASH; + +NOTELEPORT; + +NOINTERACTION; + } + override void Tick() + { + if ( isFrozen() ) return; + alpha *= .9; + scale *= 1.05; + if ( alpha < .05 ) Destroy(); + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + SpriteOffset = (0,-4); + } + States + { + Spawn: + BLPS E -1 Bright; + Stop; + } +} + Class DashTrail : Actor { Default