Cherrypicked changes from devel.

This commit is contained in:
Mari the Deer 2021-11-07 11:21:46 +01:00
commit 30d53ef991
7 changed files with 122 additions and 32 deletions

View file

@ -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 = "\cr \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.";

View file

@ -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.";

View file

@ -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-";

View file

@ -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

View file

@ -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; i<amt; i++ )
if ( src.Health < 100 )
{
let a = Actor.Spawn("HealthOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = (cos(ang),sin(ang))*FRandom[Junk](4,8);
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; i<amt; i++ )
{
if ( !Random[Junk](0,2) ) continue;
let a = Actor.Spawn("HealthOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = (cos(ang),sin(ang))*FRandom[Junk](4,8);
}
}
if ( src.CountInv("ArmorNugget") < 100 )
{
int amt = clamp(e.Thing.SpawnHealth()/40,1,5);
if ( e.Thing.Health < (e.Thing.GetGibHealth()*2) ) amt *= 3;
else if ( e.Thing.Health < e.Thing.GetGibHealth() ) amt *= 2;
for ( int i=0; i<amt; i++ )
{
if ( Random[Junk](0,1) ) continue;
let a = Actor.Spawn("ArmorOrb",e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
a.vel.z = FRandom[Junk](4,16);
double ang = FRandom[Junk](0,360);
a.vel.xy = (cos(ang),sin(ang))*FRandom[Junk](4,8);
}
}
}
}

View file

@ -599,15 +599,22 @@ Class SWWMMessageBox : MessageBoxMenu
double y = destHeight/2;
int c = mMessage.Count();
int theight = 0;
int l1 = c;
for ( int i=0; i<c; i++ )
{
int scl = ((i==c-1)||(mMessage.StringWidth(i)==0))?2:3;
if ( mMessage.StringWidth(i) != 0 ) continue;
l1 = i;
break;
}
for ( int i=0; i<c; i++ )
{
int scl = ((i==c-1)||(mMessage.StringWidth(i)==0))?2:(i>l1)?1:3;
theight += fontheight*scl;
}
y -= theight/2;
for ( int i=0; i<c; i++ )
{
double scl = ((i==c-1)||(mMessage.StringWidth(i)==0))?2.:3.;
double scl = ((i==c-1)||(mMessage.StringWidth(i)==0))?2.:(i>l1)?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;
}

View file

@ -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<Actor> 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
{