From 75e3ef30fce045017331020bebfc688f258d43a9 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sat, 19 Sep 2020 11:20:53 +0200 Subject: [PATCH] First batch of changes: - Fix score being reset on coop respawn. - Remove slight vertical offset of ground dash, not needed when we have NOFRICTION. - Disable stair downstepping while dashing. - Add crit sound for buttslams when they kill something. - Clean up some more stuff on map transitions (e.g.: dash/stomp canceling) - Korax messages show with a colored name now, for zazz. - Removed hitscan parrying, as it's odd and unpredictable. - Adjusted how wall detection works in dashes, should work better with stairs. - Allow down-dashes in mid-air when jumping is disabled, so you can still groundslam. --- TODO.md | 1 - language.version | 2 +- sndinfo.txt | 1 + sounds/demolitionist/demobutt.ogg | Bin 0 -> 46954 bytes zscript/swwm_handler.zsc | 21 ++++++++- zscript/swwm_hud.zsc | 2 +- zscript/swwm_inventory.zsc | 73 ------------------------------ zscript/swwm_player.zsc | 68 ++++++++++++++++++++-------- 8 files changed, 72 insertions(+), 96 deletions(-) create mode 100644 sounds/demolitionist/demobutt.ogg diff --git a/TODO.md b/TODO.md index 5b9758fb8..f4806c681 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,6 @@ - Extra Demolitionist animations (swimming, additional gestures) - Dual wielding Explodium Gun - Quick grenade function (Explodium Mag) - - Parrying for hitscan weapons (currently parrying only handles vanilla LineAttack) - Fun options - Omnibusting (all weapons can bust walls) - Infinite fuel diff --git a/language.version b/language.version index 843aae16c..819e2f6aa 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- 0.9b r549 (Tue 15 Sep 19:18:10 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- 0.9b r549 (Sat 19 Sep 11:20:53 CEST 2020)"; diff --git a/sndinfo.txt b/sndinfo.txt index a5d0e2ff3..931a4548d 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -357,6 +357,7 @@ $random demolitionist/whitm { demolitionist/whitm1 demolitionist/whitm2 demoliti demolitionist/whitl1 sounds/demolitionist/demowhitl1.ogg demolitionist/whitl2 sounds/demolitionist/demowhitl2.ogg $random demolitionist/whitl { demolitionist/whitl1 demolitionist/whitl2 } +demolitionist/buttslam sounds/demolitionist/demobutt.ogg $playersound demolitionist neutral *grunt DSEMPTY $playeralias demolitionist neutral *pain100 demolitionist/lopain diff --git a/sounds/demolitionist/demobutt.ogg b/sounds/demolitionist/demobutt.ogg new file mode 100644 index 0000000000000000000000000000000000000000..70b4345812dc4c84e95921c906012c711e0b67de GIT binary patch literal 46954 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 literal 0 HcmV?d00001 diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 8bbc98221..7514b9371 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -571,7 +571,7 @@ Class SWWMHandler : EventHandler override void PlayerEntered( PlayerEvent e ) { - // create some static thinkers for this player + // create some static thinkers for this player if needed PlayerInfo p = players[e.playernumber]; SWWMTradeHistory th = SWWMTradeHistory.Find(p); if ( !th ) @@ -634,13 +634,30 @@ Class SWWMHandler : EventHandler // reset combat tracker if ( !swwm_notrack ) SWWMCombatTracker.Spawn(players[e.playernumber].mo); - // initialize some player vars if ( p.mo is 'Demolitionist' ) { + // reinitialize Demolitionist(p.mo).dashfuel = Demolitionist(p.mo).default.dashfuel; Demolitionist(p.mo).last_boost = 0; Demolitionist(p.mo).last_kick = 0; + // cancel dash/boost + p.mo.A_StopSound(CHAN_JETPACK); + Demolitionist(p.mo).fuelcooldown = 0.; + Demolitionist(p.mo).dashcooldown = 0.; + Demolitionist(p.mo).dashboost = 0.; + Demolitionist(p.mo).dashsnd = false; + // prevent sudden stomping if we were previously falling + Demolitionist(p.mo).lastvelz = p.mo.vel.z; + // early cancel gestures + if ( p.ReadyWeapon is 'SWWMGesture' ) + { + p.PendingWeapon = SWWMGesture(p.ReadyWeapon).formerweapon; + p.SetPSprite(PSP_WEAPON,p.ReadyWeapon.ResolveState("Deselect")); + } } + // reset score (optional) if inventory should be cleared + if ( level.removeitems && !e.IsReturn && swwm_resetscore ) + c.credits = c.hcredits = 0; } override void PlayerRespawned( PlayerEvent e ) diff --git a/zscript/swwm_hud.zsc b/zscript/swwm_hud.zsc index 49ec08162..8a5493afd 100644 --- a/zscript/swwm_hud.zsc +++ b/zscript/swwm_hud.zsc @@ -173,7 +173,7 @@ Class SWWMStatusBar : BaseStatusBar { // treat as chat message printlevel = PRINT_CHAT; - outline = "Korax: "..outline; + outline = "\cmKorax\c-: "..outline; } let m = new("MsgLine"); m.str = outline.Left(outline.Length()-1); // strip newline diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index ebd209706..c9c926997 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -739,13 +739,7 @@ Class ParryField : Actor +NOCLIP; +DONTSPLASH; +NOTELEPORT; - +SHOOTABLE; - +NONSHOOTABLE; - +NOBLOOD; - +DONTTHRUST; +NOINTERACTION; - Health int.max; - Mass int.max; Radius 20; Height 40; } @@ -814,73 +808,6 @@ Class ParryField : Actor } if ( --special1 <= 0 ) Destroy(); } - - override bool CanCollideWith( Actor other, bool passive ) - { - return false; - } - - override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) - { - if ( (flags&DMG_INFLICTOR_IS_PUFF) && (source != master) ) - { - Vector3 vdir = (cos(angle),sin(angle),0); - Vector3 vpos = inflictor.pos; // puff goes here - let raging = RagekitPower(master.FindInventory("RagekitPower")); - let i = Spawn(raging?"BigPunchImpact":"PunchImpact",vpos); - if ( raging ) raging.DoHitFX(); - i.angle = angle+180; - i.bAMBUSH = true; - // deflect hitscan - A_StartSound("misc/ricochet",CHAN_VOICE,CHANF_OVERLAP,.7); - A_QuakeEx(3,3,3,10,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.2); - A_StartSound("demolitionist/parry",CHAN_WEAPON); - double mult = 1.5; - if ( raging ) mult = 8.; - if ( (level.maptime > lasteggtic) && !Random[Parry](0,4) ) - { - for ( int i=1; i<6; i++ ) - { - let r = Spawn("ParryRing",vpos); - r.specialf1 = i*.04; - } - mult *= 2.; - A_StartSound("misc/soulsparry",CHAN_ITEM,CHANF_OVERLAP,1.,.5); - lasteggtic = level.maptime+5; - } - // three options: - switch ( Random[Parry](0,7) ) - { - case 0: - case 1: - case 2: - // 1. just block the bullet, making it bounce off - let b = Spawn("ReflectedBullet",vpos); - b.angle = angle; - b.target = master; - b.vel = (-vdir+(FRandom[Parry](-.4,.4),FRandom[Parry](-.4,.4),FRandom[Parry](-.4,.4))).unit()*FRandom[Parry](1,2)*mult+(0,0,4); - break; - case 3: - case 4: - case 5: - // 2. ricochet in random direction - Vector3 rdir = (-vdir+(FRandom[Parry](-.6,.6),FRandom[Parry](-.6,.6),FRandom[Parry](-.6,.6))).unit(); - bSHOOTABLE = false; - master.LineAttack(atan2(rdir.y,rdir.x),8000,asin(-rdir.z),int(damage*mult),mod,inflictor.GetClass(),LAF_ABSPOSITION,null,vpos.z,vpos.x,vpos.y); - bSHOOTABLE = true; - break; - case 6: - case 7: - // 3. ricochet directly back to source - Vector3 tdir = source?(level.Vec3Diff(vpos,source.Vec3Offset(0,0,source.height/2))).unit():(-vdir); - bSHOOTABLE = false; - master.LineAttack(atan2(tdir.y,tdir.x),8000,asin(-tdir.z),int(damage*mult),mod,inflictor.GetClass(),LAF_ABSPOSITION,null,vpos.z,vpos.x,vpos.y); - bSHOOTABLE = true; - break; - } - } - return 0; - } } Class UseList diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 40a9f45c9..1550278d5 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -275,14 +275,7 @@ Class Demolitionist : PlayerPawn override void GiveDefaultInventory() { Super.GiveDefaultInventory(); - // reset score (optional) - if ( swwm_resetscore ) - { - let creds = SWWMCredits.Find(player); - if ( creds ) creds.credits = creds.hcredits = 0; - } // preloaded gun - let dp = DeepImpact(FindInventory("DeepImpact")); let eg = ExplodiumGun(FindInventory("ExplodiumGun")); if ( !eg ) return; eg.clipcount = 7; @@ -719,7 +712,13 @@ Class Demolitionist : PlayerPawn if ( raging ) flg |= DMG_FOILINVUL; if ( !a.player && !a.bDONTBLAST ) a.bBLASTED = true; int dmg = int(15+spd*2.5); - if ( dir dot viewdir < -.3 ) dmg *= 3; // BUTTSLAM + bool buttslam = false; + // BUTTSLAM + if ( dir dot viewdir < -.3 ) + { + dmg *= 3; + buttslam = true; + } if ( a.bSHOOTABLE ) { dmg = a.DamageMobj(self,self,dmg,'Dash',flg); @@ -728,6 +727,12 @@ Class Demolitionist : PlayerPawn a.TraceBleed(dmg,self); a.SpawnBlood(level.Vec3Offset(pos,diff/2),atan2(dir.y,dir.x)+180,dmg); } + if ( buttslam && (!a || (a.Health <= 0)) ) + { + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHAN_OVERLAP,1.,.2); + Spawn("SWWMItemFog",level.Vec3Offset(pos,diff/2)); + A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); + } } if ( raging ) { @@ -760,7 +765,13 @@ Class Demolitionist : PlayerPawn // see if we can bust it let tempme = new("LineTracer"); // gross hack to pass needed data int dmg = int(128+spd*20); - if ( dir dot viewdir < -.3 ) dmg *= 3; // BUTTSLAM + bool buttslam = false; + // BUTTSLAM + if ( dir dot viewdir < -.3 ) + { + dmg *= 3; + buttslam = true; + } if ( ff ) tempme.Results.ffloor = ff; tempme.Results.HitSector = CeilingSector; tempme.Results.HitType = TRACE_HitCeiling; @@ -774,6 +785,12 @@ Class Demolitionist : PlayerPawn A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); busted = true; raging.DoHitFX(); + if ( buttslam ) + { + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); + Spawn("SWWMItemFog",Vec3Offset(0,0,Height)); + A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); + } } } if ( !busted ) @@ -802,9 +819,12 @@ Class Demolitionist : PlayerPawn // check for wall collision FCheckPosition tm; Vector2 steppy = dir.xy*spd/8.; + Vector3 oldpos = pos; + bool oldthru = bTHRUACTORS; + bTHRUACTORS = true; for ( int i=1; i<=8; i++ ) { - if ( (spd > 0) && !bumped && !CheckMove(Vec2Offset(steppy.x*i,steppy.y*i),PCM_DROPOFF|PCM_NOACTORS,tm) && BlockingLine ) + if ( (spd > 0) && !bumped && !TryMove(Vec2Offset(steppy.x,steppy.y),1,false,tm) && BlockingLine ) { Vector3 wallnorm = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit(); int lside = 1; @@ -821,7 +841,13 @@ Class Demolitionist : PlayerPawn // see if we can bust it let tempme = new("LineTracer"); // gross hack to pass needed data int dmg = int(128+spd*20); - if ( dir dot viewdir < -.3 ) dmg *= 3; // BUTTSLAM + bool buttslam = false; + // BUTTSLAM + if ( dir dot viewdir < -.3 ) + { + dmg *= 3; + buttslam = true; + } tempme.Results.HitLine = BlockingLine; tempme.Results.HitType = TRACE_HitWall; tempme.Results.Side = lside; @@ -844,6 +870,12 @@ Class Demolitionist : PlayerPawn ps.special1 = int(15+spd*2.5); A_StartSound("demolitionist/bump",CHAN_DAMAGE,CHANF_OVERLAP); raging.DoHitFX(); + if ( buttslam ) + { + A_StartSound("demolitionist/buttslam",CHAN_DAMAGE,CHANF_OVERLAP,1.,.2); + Spawn("SWWMItemFog",Vec3Offset(dir.x*radius,dir.y*radius,(tempme.Results.Tier==TIER_UPPER)?Height:(tempme.Results.Tier==TIER_LOWER)?0:(Height/2))); + A_QuakeEx(8,8,8,8,0,3000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:1.); + } continue; } } @@ -873,6 +905,8 @@ Class Demolitionist : PlayerPawn break; } } + SetOrigin(oldpos,true); + bTHRUACTORS = oldthru; } else if ( isboosting && (dashboost > 0.) ) { @@ -964,8 +998,8 @@ Class Demolitionist : PlayerPawn } override void MovePlayer() { - if ( InStateSequence(CurState,FindState("Dash")) ) - player.cmd.forwardmove = player.cmd.sidemove = 0; + bool isdashing = InStateSequence(CurState,FindState("Dash")); + if ( isdashing ) player.cmd.forwardmove = player.cmd.sidemove = 0; if ( (waterlevel < 2) && (bFly || bFlyCheat) && !(player.cheats&CF_NOCLIP2) ) { player.onground = false; @@ -1049,7 +1083,7 @@ Class Demolitionist : PlayerPawn guidepitch *= .9; guideroll *= .9; // anchor to ground when going down steps - if ( lastground && !player.onground && !bFly && !bFlyCheat && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) ) + if ( lastground && !player.onground && !bFly && !bFlyCheat && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) && !isdashing ) { // test for gap crossing (i.e: climbing up platforms with holes between them) Vector3 storepos = pos; @@ -1082,12 +1116,10 @@ Class Demolitionist : PlayerPawn if ( fm ) dodge += (fm>0)?X:-X; if ( sm ) dodge += (sm>0)?Y:-Y; if ( player.cmd.buttons&BT_CROUCH ) dodge = (0,0,-1); // death from above - if ( player.onground ) dodge.z = max(0,dodge.z); if ( dodge == (0,0,0) ) dodge.xy = RotateVector((1,0),angle); - if ( (waterlevel < 2) && !(bFly || bFlyCheat) ) - dodge.z += (player.cmd.buttons&BT_CROUCH)?-.05:.15; if ( !level.IsJumpingAllowed() ) dodge.z = min(0,dodge.z); - if ( (dodge.length() > 0) && (dashcooldown <= 0) && (dashfuel > 20.) && player.cmd.buttons&BT_USER2 && (player.onground || level.IsJumpingAllowed()) && (gamestate == GS_LEVEL) ) + if ( player.onground ) dodge.z = max(0,dodge.z); + if ( (dodge.length() > 0) && (dashcooldown <= 0) && (dashfuel > 20.) && player.cmd.buttons&BT_USER2 && (player.onground || level.IsJumpingAllowed() || (player.cmd.buttons&BT_CROUCH)) && (gamestate == GS_LEVEL) ) { dashdir = dodge.unit(); dashcooldown = 10;