From 30d53ef991718f4f5d6e8cf71f8471a6337be062 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sun, 7 Nov 2021 11:21:46 +0100 Subject: [PATCH] Cherrypicked changes from devel. --- language.def_menu | 6 +- language.es_menu | 6 +- language.version | 4 +- zmapinfo.txt | 7 ++- zscript/handler/swwm_handler_damage.zsc | 36 ++++++++--- zscript/menu/swwm_menus.zsc | 11 +++- zscript/swwm_player_fx.zsc | 84 ++++++++++++++++++++++--- 7 files changed, 122 insertions(+), 32 deletions(-) diff --git a/language.def_menu b/language.def_menu index 3016abfa0..57ac9d194 100644 --- a/language.def_menu +++ b/language.def_menu @@ -25,9 +25,9 @@ SWWM_SKEASY = "\cdTaking It Easy~\c-"; SWWM_SKNORMAL = "\cfAdequate Adventure\c-"; SWWM_SKHARD = "\ciModerate Challenge\c-"; SWWM_SKHARDCORE = "\cgI'm A Masochist\c-"; -SWWM_SKHARDCORECONFIRM = "\cgYou think the mod's too easy?\nPrepare yourself.\c-\n\n(Press Y for a challenge)"; +SWWM_SKHARDCORECONFIRM = "\cgYou think the mod's too easy?\nPrepare yourself.\c-\n\n\cfFast monsters\n1.5x monster health & damage\n25% extra aggressiveness\nCheats are disabled\nCoop monsters will spawn\nThe store is disabled\nCan only revive once\c-\n\n(Press Y for a challenge)"; SWWM_SKLUNATIC = "\crI WANT DIE\c-"; -SWWM_SKLUNATICCONFIRM = "\crYou will die, you will suffer.\nThat, I can guarantee.\c-\n\n(Press Y to die instantly)"; +SWWM_SKLUNATICCONFIRM = "\crYou will die, you will suffer.\nThat, I can guarantee.\c-\n\n\cfAll changes from Masochist\n+\n2x speedup for all enemy actions\nEnemy projectiles will multiply\nAdditional enemies may spawn\nEnemies react instantly\nEnemies don't flinch\nInfighting is disabled\c-\n\n(Press Y to die instantly)"; // mod menu SWWM_MTITLE = "SWWM GZ Options"; SWWM_PTITLE = "Player Options"; @@ -369,7 +369,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_SWWM_DEMOSLAYER = "Killed enemies may drop health and armor 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 839d964ba..85679a6eb 100644 --- a/language.es_menu +++ b/language.es_menu @@ -25,9 +25,9 @@ SWWM_SKEASY = "\cdCon Calmita~\c-"; SWWM_SKNORMAL = "\cfAventura Adecuada\c-"; SWWM_SKHARD = "\ciDesafío Moderado\c-"; SWWM_SKHARDCORE = "\cgSoy Masoca\c-"; -SWWM_SKHARDCORECONFIRM = "\cg¿Crees que el mod es demasiado fácil?\nPues prepárate.\c-\n\n(Pulsa Y para un desafío)"; +SWWM_SKHARDCORECONFIRM = "\cg¿Crees que el mod es muy fácil?\nPues prepárate.\c-\n\n\cfMonstruos rápidos\n1.5x salud y daño de monstruos\n25% de agresividad extra\nTrucos deshabilitados\nMonstruos de cooperativo\nLa tienda está desactivada\nSolo se puede revivir una vez\c-\n\n(Pulsa Y para un desafío)"; SWWM_SKLUNATIC = "\crINTENTA MUERTE\c-"; -SWWM_SKLUNATICCONFIRM = "\crVas a morir, vas a sufrir.\nEso te lo puedo garantizar.\c-\n\n(Pulsa Y para morir al instante)"; +SWWM_SKLUNATICCONFIRM = "\crVas a morir, vas a sufrir.\nEso te lo puedo garantizar.\c-\n\n\cfTodos los cambios de Masoca\n+\nDoble velocidad de enemigos\nProyectiles enemigos duplicados\nPueden aparecer enemigos extra\nReflejos instantáneos de enemigo\nLos enemigos no se estremecen\nLos enemigos no pelean entre si\c-\n\n(Pulsa Y para morir al instante)"; // mod menu SWWM_MTITLE = "Opciones de SWWM GZ"; SWWM_PTITLE = "Opciones de Jugador"; @@ -368,7 +368,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_SWWM_DEMOSLAYER = "Los enemigos que mates soltarán orbes de salud y armadura."; 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 b205b5821..ed00424e5 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.40 \cu(Fri 5 Nov 23:29:26 CET 2021)\c-"; -SWWM_SHORTVER="\cw1.1.40 \cu(2021-11-05 23:29:26)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.41 \cu(Sun 7 Nov 11:21:58 CET 2021)\c-"; +SWWM_SHORTVER="\cw1.1.41 \cu(2021-11-07 11:21:58)\c-"; diff --git a/zmapinfo.txt b/zmapinfo.txt index a2ff65f77..1039d2880 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -134,6 +134,7 @@ Skill normal } Skill hard { + MonsterHealth = 1.25 DamageFactor = 1.25 SpawnFilter = hard ACSReturn = 3 @@ -143,7 +144,7 @@ Skill hardcore { DisableCheats FastMonsters - HealthFactor = 1.5 + MonsterHealth = 1.5 DamageFactor = 1.5 Aggressiveness = 0.25 SpawnFilter = nightmare @@ -155,12 +156,12 @@ Skill hardcore Skill lunatic { DisableCheats - HealthFactor = 2.0 + MonsterHealth = 2.0 DamageFactor = 2.0 Aggressiveness = 1.0 SpawnFilter = nightmare SpawnMulti - TotalInfighting + NoInfighting InstantReaction NoPain ACSReturn = 4 diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index dcb521c24..a60f9c57e 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -219,17 +219,35 @@ extend Class SWWMHandler SWWMUtility.AchievementProgress('swwm_progress_onehp',onehpspree[pnum],src.player); } // tasty treats - if ( swwm_demoslayer && (src.Health < 100) ) + if ( swwm_demoslayer ) { - int amt = clamp(e.Thing.SpawnHealth()/20,1,10); - if ( e.Thing.Health < (e.Thing.GetGibHealth()*2) ) amt *= 3; - else if ( e.Thing.Health < e.Thing.GetGibHealth() ) amt *= 2; - for ( int i=0; il1)?1:3; theight += fontheight*scl; } y -= theight/2; for ( int i=0; il1)?1.:3.; Screen.DrawText(textfont,OptionMenuSettings.mFontColorValue,destWidth/2-mMessage.StringWidth(i)*(scl/2.),y,mMessage.StringAt(i),DTA_VirtualWidth,destWidth,DTA_VirtualHeight,destHeight,DTA_KeepRatio,true,DTA_ScaleX,scl,DTA_ScaleY,scl); y += fontheight*scl; } diff --git a/zscript/swwm_player_fx.zsc b/zscript/swwm_player_fx.zsc index aac8d9e52..05fc3c95d 100644 --- a/zscript/swwm_player_fx.zsc +++ b/zscript/swwm_player_fx.zsc @@ -2,8 +2,12 @@ // drop from monsters when using "Demoslayer" fun option // heals up to 100 HP when touched -Class HealthOrb : Actor +Class SlayerOrb : Actor abstract { + Class tclass; + + Property TrailClass : tclass; + Default { RenderStyle "Add"; @@ -24,13 +28,16 @@ Class HealthOrb : Actor +CANBOUNCEWATER; +FORCEXYBILLBOARD; } + virtual void PickedUp( int np, PlayerPawn mo ) + { + } override void Tick() { Vector3 oldp = pos; Super.Tick(); if ( !isFrozen() ) { - let t = Spawn("HealthOrbTrail",pos); + let t = Spawn(tclass,pos); t.scale *= abs(scale.x); t.alpha *= alpha; scale *= .995; @@ -55,13 +62,7 @@ Class HealthOrb : Actor let mo = players[np].mo; if ( (GetAge() > 5) && 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); + PickedUp(np,mo); Destroy(); return; } @@ -80,14 +81,65 @@ Class HealthOrb : Actor Scale.x *= RandomPick[Junk](-1,-1); Scale.y *= RandomPick[Junk](-1,-1); } +} +Class HealthOrb : SlayerOrb +{ + Default + { + SlayerOrb.TrailClass "HealthOrbTrail"; + } + override void PickedUp( int np, PlayerPawn mo ) + { + 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); + } States { Spawn: BLPF E -1 Bright; Stop; + } } -Class HealthOrbTrail : Actor +Class ArmorOrb : SlayerOrb +{ + Default + { + SlayerOrb.TrailClass "ArmorOrbTrail"; + } + override void PickedUp( int np, PlayerPawn mo ) + { + int flg = CHANF_OVERLAP|CHANF_MAYBE_LOCAL; + if ( mo.CheckLocalView() ) flg |= CHANF_NOPAUSE; + mo.A_StartSound("misc/armor_pkup",CHAN_ITEM,flg); + int hp = int(ceil(abs(scale.x*10))); + let n = mo.FindInventory("ArmorNugget"); + if ( !n ) + { + n = Inventory(Spawn("ArmorNugget")); + n.AttachToOwner(mo); + SWWMLoreLibrary.Add(mo.player,"Nugget"); + n.Amount = 0; + } + if ( n.Amount < 100 ) n.Amount = min(n.Amount+hp,100); + SWWMHandler.ArmorFlash(np); + SWWMScoreObj.Spawn(hp,mo.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+mo.Height/2),ST_Armor); + } + States + { + Spawn: + BLPF D -1 Bright; + Stop; + + } +} + +Class SlayerOrbTrail : Actor abstract { Default { @@ -115,6 +167,9 @@ Class HealthOrbTrail : Actor Super.PostBeginPlay(); SpriteOffset = (0,-4); } +} +Class HealthOrbTrail : SlayerOrbTrail +{ States { Spawn: @@ -122,6 +177,15 @@ Class HealthOrbTrail : Actor Stop; } } +Class ArmorOrbTrail : SlayerOrbTrail +{ + States + { + Spawn: + BLPS D -1 Bright; + Stop; + } +} Class DashTrail : Actor {