diff --git a/language.version b/language.version index cc61b4933..e3eee4e4f 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r716 \cu(Wed 30 Dec 22:30:44 CET 2020)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r717 \cu(Wed 30 Dec 23:52:15 CET 2020)"; diff --git a/modeldef.gesture b/modeldef.gesture index 975e9852a..4999f8437 100644 --- a/modeldef.gesture +++ b/modeldef.gesture @@ -240,6 +240,33 @@ Model "SWWMRedCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMRedCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMYellowCardGesture" { Path "models" @@ -335,6 +362,33 @@ Model "SWWMYellowCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMYellowCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMBlueCardGesture" { Path "models" @@ -430,6 +484,33 @@ Model "SWWMBlueCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMBlueCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMSilverCardGesture" { Path "models" @@ -525,6 +606,33 @@ Model "SWWMSilverCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMSilverCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMGreenCardGesture" { Path "models" @@ -620,6 +728,33 @@ Model "SWWMGreenCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMGreenCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMOrangeCardGesture" { Path "models" @@ -715,6 +850,33 @@ Model "SWWMOrangeCardGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMOrangeCardGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMRedSkullGesture" { Path "models" @@ -809,6 +971,33 @@ Model "SWWMRedSkullGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMRedSkullGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMYellowSkullGesture" { Path "models" @@ -903,6 +1092,33 @@ Model "SWWMYellowSkullGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMYellowSkullGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMBlueSkullGesture" { Path "models" @@ -997,6 +1213,33 @@ Model "SWWMBlueSkullGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMBlueSkullGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMGreenKeyGesture" { Path "models" @@ -1091,6 +1334,33 @@ Model "SWWMGreenKeyGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMGreenKeyGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMBlueKeyGesture" { Path "models" @@ -1185,6 +1455,33 @@ Model "SWWMBlueKeyGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMBlueKeyGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMYellowKeyGesture" { Path "models" @@ -1279,6 +1576,33 @@ Model "SWWMYellowKeyGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMYellowKeyGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} Model "SWWMRedKeyGesture" { Path "models" @@ -1373,4 +1697,31 @@ Model "SWWMRedKeyGesture" FrameIndex XZW3 X 0 78 FrameIndex XZW3 Y 0 79 } +Model "SWWMRedKeyGesture" +{ + Path "models" + Model 1 "QuickPunch1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + + AngleOffset -90 + Scale -0.005 0.0025 0.005 + + // Punch + FrameIndex XZW0 A 1 0 + FrameIndex XZW0 B 1 1 + FrameIndex XZW0 C 1 2 + FrameIndex XZW0 D 1 3 + FrameIndex XZW0 E 1 4 + FrameIndex XZW0 F 1 5 + FrameIndex XZW0 G 1 6 + FrameIndex XZW0 H 1 7 + FrameIndex XZW0 I 1 8 + FrameIndex XZW0 J 1 9 + FrameIndex XZW0 K 1 10 + FrameIndex XZW0 L 1 11 + FrameIndex XZW0 M 1 12 + FrameIndex XZW0 N 1 13 +} // TODO Collectible Gestures diff --git a/models/QuickPunch1st.blend b/models/QuickPunch1st.blend new file mode 100644 index 000000000..d006ef35c Binary files /dev/null and b/models/QuickPunch1st.blend differ diff --git a/models/QuickPunch1st_a.3d b/models/QuickPunch1st_a.3d new file mode 100644 index 000000000..9ea23b446 Binary files /dev/null and b/models/QuickPunch1st_a.3d differ diff --git a/models/QuickPunch1st_d.3d b/models/QuickPunch1st_d.3d new file mode 100644 index 000000000..7fabf5734 Binary files /dev/null and b/models/QuickPunch1st_d.3d differ diff --git a/zscript/swwm_funstuff.zsc b/zscript/swwm_funstuff.zsc index b16d2b146..61c2cf6ea 100644 --- a/zscript/swwm_funstuff.zsc +++ b/zscript/swwm_funstuff.zsc @@ -131,6 +131,7 @@ Class SWWMItemGesture : SWWMWeapon abstract action void A_FinishGesture() { + A_WeaponOffset(0,32); // fix key punch offset let gest = invoker.gest; if ( !gest ) { diff --git a/zscript/swwm_keys.zsc b/zscript/swwm_keys.zsc index 23848451d..283d99cde 100644 --- a/zscript/swwm_keys.zsc +++ b/zscript/swwm_keys.zsc @@ -321,6 +321,58 @@ Class SWWMKeyRed : SWWMKey // (yeah, I'm lazy, and there's a lot of keys) Class SWWMKeyGesture : SWWMItemGesture abstract { + // due to specifics™ we have to handle the punching here + override void DoEffect() + { + Super.DoEffect(); + if ( !Owner || !Owner.player || (Owner.player.Health <= 0) || (Owner.player.ReadyWeapon != self) ) + return; + PSprite psp = Owner.player.FindPSPrite(PSP_WEAPON+1); + if ( !(Owner.player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_USER1)) && !psp ) + { + // not punching, move weapon back + psp = Owner.player.FindPSPrite(PSP_WEAPON); + if ( psp ) + { + psp.oldx = psp.x; + psp.x = max(0,psp.x-8); + psp.oldy = psp.y; + psp.y = min(32,psp.y+4); + } + return; + } + if ( psp ) + { + // already punching, let's shift the weapon away + psp = Owner.player.FindPSPrite(PSP_WEAPON); + if ( psp ) + { + // shift away from center to center + psp.oldx = psp.x; + psp.x = min(70,psp.x+8); + psp.oldy = psp.y; + psp.y = max(16,psp.y-4); + } + return; + } + // start punch + if ( Owner.player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_USER1) ) + { + psp = Owner.player.FindPSPrite(PSP_WEAPON); + if ( psp && (psp.CurState == FindState("WaitingForEnd")) ) + return; + Owner.player.SetPSprite(PSP_WEAPON+1,FindState("Punch")); + psp = Owner.player.FindPSPrite(PSP_WEAPON+1); + if ( psp ) + { + psp.bAddWeapon = false; + psp.bAddBob = false; + psp.x = -50; + psp.y = 32; + } + } + } + States { Fire: @@ -330,8 +382,7 @@ Class SWWMKeyGesture : SWWMItemGesture abstract XZW1 GHIJKLMNO 4; XZW1 P 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP); XZW1 QRST 3; - XZW1 A -1 A_FinishGesture(); - Stop; + Goto WaitingForEnd; AltFire: XZW1 A 3 A_Jump(128,"Fire","AltFire2"); XZW1 U 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP); @@ -343,8 +394,7 @@ Class SWWMKeyGesture : SWWMItemGesture abstract XZW2 KL 3; XZW2 M 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP); XZW2 NOPQR 3; - XZW1 A -1 A_FinishGesture(); - Stop; + Goto WaitingForEnd; AltFire2: XZW1 A 3; XZW2 S 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP); @@ -361,8 +411,36 @@ Class SWWMKeyGesture : SWWMItemGesture abstract XZW3 T 4 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP); XZW3 UV 4; XZW3 WXY 3; + Goto WaitingForEnd; + WaitingForEnd: + XZW1 A 1 A_JumpIf(!player.FindPSprite(PSP_WEAPON+1),1); + Wait; XZW1 A -1 A_FinishGesture(); Stop; + // overlay for melee + Punch: + XZW0 ABC 1; + PunchHold: + 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 0 + { + if ( player.cmd.buttons&&(BT_ATTACK|BT_ALTATTACK|BT_USER1) ) + { + let psp = player.FindPSprite(PSP_WEAPON); + if ( psp && (psp.CurState != ResolveState("WaitingForEnd")) ) + return ResolveState("PunchHold"); + } + return ResolveState(null); + } + Stop; } } Class SWWMRedCardGesture : SWWMKeyGesture {}