Combat Hammer plunging attack (release alt fire while falling).

This commit is contained in:
Marisa the Magician 2024-03-17 20:58:31 +01:00
parent 8804366137
commit e50d186a09
5 changed files with 73 additions and 10 deletions

View File

@ -44,6 +44,7 @@ HardwareShader PostProcess beforebloom
Shader "shaders/pp/WindBlur.fp" 330
Uniform float Speed
Uniform float Fade
Uniform vec2 WindDir
}
HardwareShader PostProcess beforebloom
{

View File

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1111 \cu(Wed 13 Mar 20:54:20 CET 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1111 \cu(2024-03-13 20:54:20)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1112 \cu(Sun 17 Mar 20:58:31 CET 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1112 \cu(2024-03-17 20:58:31)\c-";

View File

@ -12,7 +12,7 @@ void main()
res += w*texture(InputTexture,s);
sum += w;
w *= .95;
s.x -= d;
s -= d*WindDir;
}
res /= sum;
FragColor = mix(texture(InputTexture,TexCoord),vec4(res.rgb,1.),Fade*.75);

View File

@ -6,6 +6,7 @@ Class ItamexHammer : SWWMWeapon
double charge;
int hitcnt, spintime;
transient ui SmoothDynamicValueInterpolator ChargeInter;
bool bSpinning, bFalling;
override void HudTick()
{
@ -43,6 +44,22 @@ Class ItamexHammer : SWWMWeapon
A_BumpFOV(.95);
A_QuakeEx(.5,.5,.5,15,0,1,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.1);
}
action void A_HammerAltFallHit()
{
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
if ( vel.z > -25 ) vel.z = max(-25.,vel.z-4.);
if ( invoker.hitcnt > 0 ) invoker.hitcnt--;
else if ( A_Melee(int(100+invoker.charge*2.),"itamex/hit",2.,1.1,1.2,MELEE_Rip|MELEE_FleshSound|MELEE_HammerHit|MELEE_Vertical|MELEE_ExtraWide|MELEE_ForceBust) )
{
A_BumpFOV(.9);
A_QuakeEx(5.,5.,5.,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.35);
A_AlertMonsters(swwm_uncapalert?0:800);
A_WeaponOffset(0,-64,WOF_ADD|WOF_INTERPOLATE);
SWWMUtility.DoKnockback(self,-(x.x,x.y,x.z*.1),1500.*invoker.charge);
invoker.hitcnt = 3;
return;
}
}
override void DoEffect()
{
@ -50,9 +67,9 @@ Class ItamexHammer : SWWMWeapon
if ( !Owner && !Owner.player && (Owner.player.ReadyWeapon != self) ) return;
let psp = Owner.player.FindPSprite(PSP_WEAPON);
if ( !psp ) return;
if ( Owner.IsActorPlayingSound(CHAN_WEAPONEXTRA,"itamex/spin") )
psp.x += charge*.05;
if ( bSpinning ) psp.x += charge*.05;
psp.x *= .8;
psp.y = (psp.y-32.)*.8+32.;
}
action void A_ChargeUp()
@ -60,6 +77,7 @@ Class ItamexHammer : SWWMWeapon
A_SetAngle(angle+invoker.charge*.2,SPF_INTERPOLATE);
A_SetPitch(pitch*.9,SPF_INTERPOLATE);
invoker.charge = min(100.,invoker.charge+20.);
invoker.bSpinning = true;
if ( !IsActorPlayingSound(CHAN_WEAPONEXTRA,"itamex/spin") )
A_StartSound("itamex/spin",CHAN_WEAPONEXTRA,CHANF_LOOP,.2);
A_SoundVolume(CHAN_WEAPONEXTRA,(invoker.charge/100.)**.5);
@ -105,6 +123,7 @@ Class ItamexHammer : SWWMWeapon
if ( invoker.charge <= 30. )
{
A_StartSound("itamex/swing",CHAN_WEAPON,CHANF_OVERLAP);
invoker.bSpinning = false;
return ResolveState("ZoomEnd");
}
return ResolveState(null);
@ -156,6 +175,10 @@ Class ItamexHammer : SWWMWeapon
action void A_AltHit()
{
// stop extended fall
invoker.bFalling = false;
A_StopSound(CHAN_WEAPONEXTRA);
A_WeaponOffset(0,32,WOF_INTERPOLATE);
if ( (pos.z <= floorz+16) && (pitch > -15) )
{
A_StopSound(CHAN_WEAPONEXTRA2);
@ -234,9 +257,16 @@ Class ItamexHammer : SWWMWeapon
XZW2 PQRST 3;
Goto Ready;
Ready:
XZW2 A 0
{
}
XZW2 A 1
{
A_WeaponOffset(0,32,WOF_INTERPOLATE); // ensure we're back to normal offsets just in case
// ensure we're back to normal just in case
A_StopSound(CHAN_WEAPONEXTRA);
invoker.bSpinning = false;
invoker.bFalling = false;
A_WeaponOffset(0,32,WOF_INTERPOLATE);
A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1);
}
Wait;
@ -283,9 +313,18 @@ Class ItamexHammer : SWWMWeapon
XZW5 A 1 A_BumpView(3.);
XZW5 B 1
{
if ( !player.onground && (pos.z > floorz+32) && (vel.z < 0) )
{
invoker.hitcnt = 0;
invoker.bFalling = true;
A_StartSound("itamex/spin",CHAN_WEAPONEXTRA,CHANF_LOOP);
return ResolveState("AltFall");
}
A_BumpView(3.);
A_HammerAltHit();
return ResolveState(null);
}
AltReleaseStop:
XZW5 CD 1 A_BumpView(4.);
XZW5 E 1 A_AltHit();
XZW5 FGHIJKLMN 2;
@ -293,6 +332,16 @@ Class ItamexHammer : SWWMWeapon
XZW5 PQRS 2;
XZW5 TUVW 3;
Goto Ready;
AltFall:
XZW5 B 1
{
A_BumpView(3.);
A_HammerAltFallHit();
return A_JumpIf(player.onground,1);
}
Wait;
XZW5 B 1;
Goto AltReleaseStop;
Zoom:
XZW2 A 2 A_StartSound("itamex/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 XYZ 2 A_BumpAngle(-2,tics:2);

View File

@ -134,11 +134,24 @@ extend Class SWWMHandler
noiz = min(lastdmg*.03*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),3.5);
PPShader.SetUniform1f("Glitch","str2",noiz);
}
if ( (demo.player.ReadyWeapon is 'ItamexHammer') && demo.IsActorPlayingSound(CHAN_WEAPONEXTRA,"itamex/spin") )
if ( demo.player.ReadyWeapon is 'ItamexHammer' )
{
PPShader.SetEnabled("WindBlur",true);
PPShader.SetUniform1f("WindBlur","Speed",ItamexHammer(demo.player.ReadyWeapon).charge/100.);
PPShader.SetUniform1f("WindBlur","Fade",(ItamexHammer(demo.player.ReadyWeapon).charge/100.)**.5);
let ham = ItamexHammer(demo.player.ReadyWeapon);
PPShader.SetEnabled("WindBlur",ham.bFalling||ham.bSpinning);
if ( ham.bFalling )
{
double hamfact = clamp(-demo.vel.z/25.,0.,1.);
PPShader.SetUniform1f("WindBlur","Speed",hamfact);
PPShader.SetUniform1f("WindBlur","Fade",hamfact**.5);
PPShader.SetUniform2f("WindBlur","WindDir",(0.,1.));
}
else if ( ham.bSpinning )
{
double hamfact = clamp(ham.charge/100.,0.,1.);
PPShader.SetUniform1f("WindBlur","Speed",hamfact);
PPShader.SetUniform1f("WindBlur","Fade",hamfact**.5);
PPShader.SetUniform2f("WindBlur","WindDir",(1.,0.));
}
}
else PPShader.SetEnabled("WindBlur",false);
if ( !demo.InStateSequence(demo.CurState,demo.FindState("Dash")) )