From 4fc0713ec2101d8567dc2f0f549841f4fe1ef47a Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Mon, 25 Jan 2021 21:14:52 +0100 Subject: [PATCH] Implement "emergency melee" for cases where the player has no weapons whatsoever. --- language.version | 4 ++-- modeldef.gesture | 27 +++++++++++++++++++++++++++ zscript/swwm_player.zsc | 34 +++++++++++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/language.version b/language.version index 9799d79df..e6dc7fe50 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r232 \cu(Mon 25 Jan 17:32:44 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r232 \cu(2021-01-25 17:32:44)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r232 \cu(Mon 25 Jan 21:14:52 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r232 \cu(2021-01-25 21:14:52)\c-"; diff --git a/modeldef.gesture b/modeldef.gesture index 4999f8437..efc821221 100644 --- a/modeldef.gesture +++ b/modeldef.gesture @@ -144,6 +144,33 @@ Model "SWWMGesture" FrameIndex XZW5 J 0 19 FrameIndex XZW5 K 0 20 } +Model "SWWMGesture" +{ + Path "models" + Model 0 "QuickPunch1st_d.3d" + SurfaceSkin 0 0 "DemoTags.png" + SurfaceSkin 0 1 "DemoArms.png" + SurfaceSkin 0 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 0 0 + FrameIndex XZW0 B 0 1 + FrameIndex XZW0 C 0 2 + FrameIndex XZW0 D 0 3 + FrameIndex XZW0 E 0 4 + FrameIndex XZW0 F 0 5 + FrameIndex XZW0 G 0 6 + FrameIndex XZW0 H 0 7 + FrameIndex XZW0 I 0 8 + FrameIndex XZW0 J 0 9 + FrameIndex XZW0 K 0 10 + FrameIndex XZW0 L 0 11 + FrameIndex XZW0 M 0 12 + FrameIndex XZW0 N 0 13 +} // Key Gestures Model "SWWMRedCardGesture" { diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 310034928..54121b3e0 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -596,9 +596,15 @@ Class Demolitionist : PlayerPawn if ( player.onground && (player.jumptics < -18) ) player.jumptics = 0; } - // quick grenade - if ( (player.playerstate != PST_DEAD) && (player.cmd.buttons&BT_USER4) ) - SWWMGesture.SetGesture(self,GS_Grenade); + if ( player.playerstate != PST_DEAD ) + { + // quick grenade + if ( player.cmd.buttons&BT_USER4 ) + SWWMGesture.SetGesture(self,GS_Grenade); + // emergency melee with no weapon + else if ( !player.ReadyWeapon && (player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_USER1)) ) + SWWMGesture.SetGesture(self,GS_EmptyMelee); + } } override void Tick() { @@ -3348,6 +3354,7 @@ enum EGestureSlot // special use GS_Headpat = -50, GS_Grenade, + GS_EmptyMelee, // no gesture GS_Null = 0, // general gestures @@ -3694,6 +3701,8 @@ Class SWWMGesture : SWWMWeapon return ResolveState("Headpat"); case GS_Grenade: return ResolveState("QuickGrenade"); + case GS_EmptyMelee: + return ResolveState("EmptyMelee"); case GS_Wave: return ResolveState("Wave"); case GS_ThumbsUp: @@ -3784,6 +3793,25 @@ Class SWWMGesture : SWWMWeapon XZW4 Q 0 A_JumpIf(player.cmd.buttons&BT_USER4,"QuickGrenade"); XZW4 Q -1 A_FinishGesture(); Stop; + EmptyMelee: + XZW0 ABC 1; + XZW0 D 1 + { + A_PlayerMelee(true); + A_StartSound("demolitionist/swing",CHAN_WEAPON,CHANF_OVERLAP); + A_Parry(9); + } + XZW0 EF 1; + XZW0 G 1 A_Melee(); + XZW0 HIJKLMN 2; + XZW0 A -1 + { + if ( player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_USER1) ) + return ResolveState("EmptyMelee")+3; + A_FinishGesture(); + return ResolveState(null); + } + Stop; Wave: XZW1 A 3 A_CallPlayerGesture("Wave","CrouchWave"); XZW1 B 3;