Gesture "weapon" fixups, to prepare for collectibles.

Split quick grenade into a separate model.
This commit is contained in:
Mari the Deer 2020-12-11 17:49:22 +01:00
commit 1ed441a0ef
13 changed files with 345 additions and 247 deletions

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r670 \cu(Fri 11 Dec 13:25:44 CET 2020)";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r671 \cu(Fri 11 Dec 17:49:22 CET 2020)";

View file

@ -607,138 +607,3 @@ Model "Demolitionist"
FrameIndex XZWZ S 1 20
SurfaceSkin 1 1 "DemoFace_Dead.png"
}
Model "SWWMGesture"
{
Path "models"
Model 0 "GestureArms_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
// Wave
FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
FrameIndex XZW1 H 0 7
FrameIndex XZW1 I 0 8
FrameIndex XZW1 J 0 9
FrameIndex XZW1 K 0 10
FrameIndex XZW1 L 0 11
FrameIndex XZW1 M 0 12
FrameIndex XZW1 N 0 13
FrameIndex XZW1 O 0 14
// Thumbs Up
FrameIndex XZW1 P 0 17
FrameIndex XZW1 Q 0 18
FrameIndex XZW1 R 0 19
FrameIndex XZW1 S 0 20
FrameIndex XZW1 T 0 21
FrameIndex XZW1 U 0 22
FrameIndex XZW1 V 0 23
FrameIndex XZW1 W 0 24
FrameIndex XZW1 X 0 25
FrameIndex XZW1 Y 0 26
FrameIndex XZW1 Z 0 27
FrameIndex XZW2 A 0 28
FrameIndex XZW2 B 0 29
FrameIndex XZW2 C 0 30
FrameIndex XZW2 D 0 31
FrameIndex XZW2 E 0 32
FrameIndex XZW2 F 0 33
// Victory
FrameIndex XZW2 G 0 35
FrameIndex XZW2 H 0 36
FrameIndex XZW2 I 0 37
FrameIndex XZW2 J 0 38
FrameIndex XZW2 K 0 39
FrameIndex XZW2 L 0 40
FrameIndex XZW2 M 0 41
FrameIndex XZW2 N 0 42
FrameIndex XZW2 O 0 43
FrameIndex XZW2 P 0 44
FrameIndex XZW2 Q 0 45
FrameIndex XZW2 R 0 46
FrameIndex XZW2 S 0 47
FrameIndex XZW2 T 0 48
FrameIndex XZW2 U 0 49
FrameIndex XZW2 V 0 50
FrameIndex XZW2 W 0 51
FrameIndex XZW2 X 0 52
FrameIndex XZW2 Y 0 53
// Blow Kiss
FrameIndex XZW2 Z 0 55
FrameIndex XZW3 A 0 56
FrameIndex XZW3 B 0 57
FrameIndex XZW3 C 0 58
FrameIndex XZW3 D 0 59
FrameIndex XZW3 E 0 60 // smooch
FrameIndex XZW3 F 0 61
FrameIndex XZW3 G 0 62
FrameIndex XZW3 H 0 63
FrameIndex XZW3 I 0 64
FrameIndex XZW3 J 0 65
FrameIndex XZW3 K 0 66 // blow
FrameIndex XZW3 L 0 67
FrameIndex XZW3 M 0 68
FrameIndex XZW3 N 0 69
FrameIndex XZW3 O 0 70
FrameIndex XZW3 P 0 71
FrameIndex XZW3 Q 0 72
FrameIndex XZW3 R 0 73
// Quick Grenade
SurfaceSkin 0 3 "ExplodiumGun.png"
FrameIndex XZW3 S 0 75
FrameIndex XZW3 T 0 76
FrameIndex XZW3 U 0 77
FrameIndex XZW3 V 0 78
FrameIndex XZW3 W 0 79
FrameIndex XZW3 X 0 80 // arm
FrameIndex XZW3 Y 0 81
FrameIndex XZW3 Z 0 82
FrameIndex XZW4 A 0 83
FrameIndex XZW4 B 0 84
FrameIndex XZW4 C 0 85
FrameIndex XZW4 D 0 86 // swing
FrameIndex XZW4 E 0 87
FrameIndex XZW4 F 0 88
FrameIndex XZW4 G 0 89
FrameIndex XZW4 H 0 90
SurfaceSkin 0 3 ""
FrameIndex XZW4 I 0 91 // throw
FrameIndex XZW4 J 0 92
FrameIndex XZW4 K 0 93
FrameIndex XZW4 L 0 94
FrameIndex XZW4 M 0 95
// Headpat
FrameIndex XZW4 N 0 97
FrameIndex XZW4 O 0 98
FrameIndex XZW4 P 0 99
FrameIndex XZW4 Q 0 100
FrameIndex XZW4 R 0 101
FrameIndex XZW4 S 0 102 // patstart
FrameIndex XZW4 T 0 103
FrameIndex XZW4 U 0 104
FrameIndex XZW4 V 0 105
FrameIndex XZW4 W 0 106
FrameIndex XZW4 X 0 107 // patpat
FrameIndex XZW4 Y 0 108
FrameIndex XZW4 Z 0 109
FrameIndex XZW5 A 0 110
FrameIndex XZW5 B 0 111
FrameIndex XZW5 C 0 112
FrameIndex XZW5 D 0 113 // patend
FrameIndex XZW5 E 0 114
FrameIndex XZW5 F 0 115
FrameIndex XZW5 G 0 116
FrameIndex XZW5 H 0 117
FrameIndex XZW5 I 0 118
FrameIndex XZW5 J 0 119
// TODO Collectible Gestures
}

147
modeldef.gesture Normal file
View file

@ -0,0 +1,147 @@
Model "SWWMGesture"
{
Path "models"
Model 0 "GestureArms_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
// Initial
FrameIndex XZW1 A 0 0
// Wave
FrameIndex XZW1 B 0 1
FrameIndex XZW1 C 0 2
FrameIndex XZW1 D 0 3
FrameIndex XZW1 E 0 4
FrameIndex XZW1 F 0 5
FrameIndex XZW1 G 0 6
FrameIndex XZW1 H 0 7
FrameIndex XZW1 I 0 8
FrameIndex XZW1 J 0 9
FrameIndex XZW1 K 0 10
FrameIndex XZW1 L 0 11
FrameIndex XZW1 M 0 12
FrameIndex XZW1 N 0 13
FrameIndex XZW1 O 0 14
FrameIndex XZW1 P 0 15
// Thumbs Up
FrameIndex XZW1 Q 0 17
FrameIndex XZW1 R 0 18
FrameIndex XZW1 S 0 19
FrameIndex XZW1 T 0 20
FrameIndex XZW1 U 0 21
FrameIndex XZW1 V 0 22
FrameIndex XZW1 W 0 23
FrameIndex XZW1 X 0 24
FrameIndex XZW1 Y 0 25
FrameIndex XZW1 Z 0 26
FrameIndex XZW2 A 0 27
FrameIndex XZW2 B 0 28
FrameIndex XZW2 C 0 29
FrameIndex XZW2 D 0 30
FrameIndex XZW2 E 0 31
FrameIndex XZW2 F 0 32
FrameIndex XZW2 G 0 33
// Victory
FrameIndex XZW2 H 0 35
FrameIndex XZW2 I 0 36
FrameIndex XZW2 J 0 37
FrameIndex XZW2 K 0 38
FrameIndex XZW2 L 0 39
FrameIndex XZW2 M 0 40
FrameIndex XZW2 N 0 41
FrameIndex XZW2 O 0 42
FrameIndex XZW2 P 0 43
FrameIndex XZW2 Q 0 44
FrameIndex XZW2 R 0 45
FrameIndex XZW2 S 0 46
FrameIndex XZW2 T 0 47
FrameIndex XZW2 U 0 48
FrameIndex XZW2 V 0 49
FrameIndex XZW2 W 0 50
FrameIndex XZW2 X 0 51
FrameIndex XZW2 Y 0 52
FrameIndex XZW2 Z 0 53
// Blow Kiss
FrameIndex XZW3 A 0 55
FrameIndex XZW3 B 0 56
FrameIndex XZW3 C 0 57
FrameIndex XZW3 D 0 58
FrameIndex XZW3 E 0 59
FrameIndex XZW3 F 0 60 // smooch
FrameIndex XZW3 G 0 61
FrameIndex XZW3 H 0 62
FrameIndex XZW3 I 0 63
FrameIndex XZW3 J 0 64
FrameIndex XZW3 K 0 65
FrameIndex XZW3 L 0 66 // blow
FrameIndex XZW3 M 0 67
FrameIndex XZW3 N 0 68
FrameIndex XZW3 O 0 69
FrameIndex XZW3 P 0 70
FrameIndex XZW3 Q 0 71
FrameIndex XZW3 R 0 72
FrameIndex XZW3 S 0 73
// Headpat
FrameIndex XZW3 T 0 75
FrameIndex XZW3 U 0 76
FrameIndex XZW3 V 0 77
FrameIndex XZW3 W 0 78
FrameIndex XZW3 X 0 79
FrameIndex XZW3 Y 0 80 // patstart
FrameIndex XZW3 Z 0 81
FrameIndex XZW4 A 0 82
FrameIndex XZW4 B 0 83
FrameIndex XZW4 C 0 84
FrameIndex XZW4 D 0 85 // patpat
FrameIndex XZW4 E 0 86
FrameIndex XZW4 F 0 87
FrameIndex XZW4 G 0 88
FrameIndex XZW4 H 0 89
FrameIndex XZW4 I 0 90
FrameIndex XZW4 J 0 91 // patend
FrameIndex XZW4 K 0 92
FrameIndex XZW4 L 0 93
FrameIndex XZW4 M 0 94
FrameIndex XZW4 N 0 95
FrameIndex XZW4 O 0 96
FrameIndex XZW4 P 0 97
}
Model "SWWMGesture"
{
Path "models"
Model 0 "Grenade1st_d.3d"
SurfaceSkin 0 0 "DemoTags.png"
SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "ExplodiumGun.png"
AngleOffset -90
Scale -0.005 0.0025 0.005
// Quick Grenade
FrameIndex XZW4 Q 0 0
FrameIndex XZW4 R 0 1
FrameIndex XZW4 S 0 2
FrameIndex XZW4 T 0 3
FrameIndex XZW4 U 0 4
FrameIndex XZW4 V 0 5 // arm
FrameIndex XZW4 W 0 6
FrameIndex XZW4 X 0 7
FrameIndex XZW4 Y 0 8
FrameIndex XZW4 Z 0 9
FrameIndex XZW5 A 0 10
FrameIndex XZW5 B 0 11 // swing
FrameIndex XZW5 C 0 12
FrameIndex XZW5 D 0 13
FrameIndex XZW5 E 0 14
FrameIndex XZW5 F 0 15
SurfaceSkin 0 3 ""
FrameIndex XZW5 G 0 16 // throw
FrameIndex XZW5 H 0 17
FrameIndex XZW5 I 0 18
FrameIndex XZW5 J 0 19
FrameIndex XZW5 K 0 20
}
// TODO Collectible Gestures

Binary file not shown.

BIN
models/DemoFace_Head.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/Grenade1st.blend Normal file

Binary file not shown.

BIN
models/Grenade1st_a.3d Normal file

Binary file not shown.

BIN
models/Grenade1st_d.3d Normal file

Binary file not shown.

View file

@ -24,6 +24,14 @@ Collectible pickup animations:
- Kirin Manga
- Kirin Plush
Key pickup animations:
- Keycard
- Skull key
- Heretic Yellow Key
- Heretic Green Key
- Heretic Blue Key
- Heretic Red Key
# Post-release stuff
Character models:

View file

@ -535,7 +535,7 @@ Class Demolitionist : PlayerPawn
}
// quick grenade
if ( (player.playerstate != PST_DEAD) && (player.cmd.buttons&BT_USER4) )
SWWMGesture.SetGesture(self,-1);
SWWMGesture.SetGesture(self,GS_Grenade);
}
override void Tick()
{
@ -3067,7 +3067,7 @@ Class HeadpatTracker : Actor
if ( user is 'Demolitionist' )
{
patter = user;
let g = SWWMGesture.SetGesture(Demolitionist(patter),-2);
let g = SWWMGesture.SetGesture(Demolitionist(patter),GS_Headpat);
if ( !g ) return false; // can't headpat at the moment
patting = true;
g.pats = self;
@ -3088,6 +3088,70 @@ Class HHitList
Vector3 dir;
}
enum EGestureSlot
{
// keys
GS_RedKeycard = -250,
GS_BlueKeycard,
GS_YellowKeycard,
GS_RedSkull,
GS_BlueSkull,
GS_YellowSkull,
GS_GreenKeycard,
GS_SilverKeycard,
GS_OrangeKeycard,
GS_YellowKey,
GS_GreenKey,
GS_BlueKey,
GS_RedKey,
// key re-use
GS_RedKeycard2 = -200,
GS_BlueKeycard2,
GS_YellowKeycard2,
GS_RedSkull2,
GS_BlueSkull2,
GS_YellowSkull2,
GS_GreenKeycard2,
GS_SilverKeycard2,
GS_OrangeKeycard2,
GS_YellowKey2,
GS_GreenKey2,
GS_BlueKey2,
GS_RedKey2,
// collectibles
GS_MashiroPlush = -150,
GS_AkariProject,
GS_LoveSignals,
GS_NutatcoBar,
GS_FrispyCorn,
GS_DemoPlush,
GS_SayaBean,
GS_KirinCummies,
GS_MilkBreads,
GS_KirinManga,
GS_KirinPlush,
// collectible re-use
GS_MashiroPlush2 = -100,
GS_AkariProject2,
GS_LoveSignals2,
GS_NutatcoBar2,
GS_FrispyCorn2,
GS_DemoPlush2,
GS_SayaBean2,
GS_KirinCummies2,
GS_MilkBreads2,
GS_KirinManga2,
GS_KirinPlush2,
// special use
GS_Headpat = -50,
GS_Grenade,
// general gestures
GS_Wave = 0,
GS_ThumbsUp,
GS_Victory,
GS_BlowKiss
};
// First person gestures
Class SWWMGesture : SWWMWeapon
{
@ -3107,6 +3171,16 @@ Class SWWMGesture : SWWMWeapon
{
return false;
}
override void DoEffect()
{
Super.DoEffect();
if ( Owner && Owner.player && (Owner.player.ReadyWeapon == self) && (Owner.Health <= 0) )
{
let psp = Owner.player.FindPSprite(PSP_WEAPON);
if ( psp && (psp.CurState != ResolveState("Deselect")) )
Owner.player.SetPSprite(PSP_WEAPON,ResolveState("Deselect"));
}
}
static SWWMGesture SetGesture( PlayerPawn mo, int which = 0 )
{
@ -3119,8 +3193,8 @@ Class SWWMGesture : SWWMWeapon
// already gesturing
// just queue another one
let g = SWWMGesture(mo.player.ReadyWeapon);
if ( which <= -100 ) g.squeue.Push(which); // collectable gestures have a dedicated array
if ( which <= -1 ) return null; // special gestures can't be queued
if ( which < -50 ) g.squeue.Push(which); // collectable gestures have a dedicated array
if ( which < 0 ) return null; // special gestures can't be queued
else
{
g.nextgesture = which;
@ -3343,149 +3417,153 @@ Class SWWMGesture : SWWMWeapon
States
{
Select:
TNT1 A 1
{
A_FullRaise();
if ( Health <= 0 ) A_FinishGesture();
}
XZW1 A 1 A_FullRaise();
Goto Ready;
Ready:
TNT1 A 1
XZW1 A 1
{
switch ( invoker.whichgesture )
{
case -2:
case GS_Headpat:
return ResolveState("Headpat");
case -1:
case GS_Grenade:
return ResolveState("QuickGrenade");
case 1:
case GS_Wave:
return ResolveState("Wave");
case GS_ThumbsUp:
return ResolveState("Approve");
case 2:
case GS_Victory:
return ResolveState("Victory");
case 3:
case GS_BlowKiss:
return ResolveState("BlowKiss");
}
return ResolveState("Wave");
return ResolveState("NoGesture");
}
Wait;
Fire:
TNT1 A 1;
XZW1 A 1;
Goto Ready;
Headpat:
TNT1 A 0 A_JumpIf(CountInv("RagekitPower"),"Ragepat");
TNT1 A 3 A_CallPlayerGesture("Headpat","Headpat");
XZW4 NO 3;
XZW4 P 2 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 QR 2;
XZW4 STUV 1;
XZW4 W 2;
XZW4 X 2 A_Headpat();
XZW4 YZ 2;
XZW5 ABC 1;
XZW4 STUV 1;
XZW4 W 2;
XZW4 X 2 A_Headpat();
XZW4 YZ 2;
XZW5 ABC 1;
XZW5 DE 2;
XZW5 F 2 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 GHIJ 3;
TNT1 A 4 A_HeadpatEnd();
TNT1 A -1 A_FinishGesture();
Ragepat:
TNT1 A 3 A_CallPlayerGesture("Ragepat","Ragepat");
XZW4 NO 2;
XZW4 P 1 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 QR 1;
XZW4 SU 1;
XZW4 W 1;
XZW4 X 1 A_Headpat();
XZW4 YZ 1;
XZW5 AC 1;
XZW4 SU 1;
XZW4 W 1;
XZW4 X 1 A_Headpat();
XZW4 YZ 1;
XZW5 AC 1;
XZW4 SU 1;
XZW4 W 1;
XZW4 X 1 A_Headpat();
XZW4 YZ 1;
XZW5 AC 1;
XZW4 SU 1;
XZW4 W 1;
XZW4 X 1 A_Headpat();
XZW4 YZ 1;
XZW5 AC 1;
XZW5 DE 1;
XZW5 F 1 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 GHIJ 2;
TNT1 A 4 A_HeadpatEnd();
TNT1 A -1 A_FinishGesture();
QuickGrenade:
TNT1 A 3;
XZW3 S 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 A 0 A_JumpIf(CountInv("RagekitPower"),"Ragepat");
XZW1 A 3 A_CallPlayerGesture("Headpat","Headpat");
XZW3 TU 3;
XZW3 V 3 A_PlayerReload();
XZW3 W 2 A_StartSound("explodium/magpin",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 XY 2;
XZW3 Z 3;
XZW4 A 2
XZW3 V 2 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 WX 2;
XZW3 YZ 1;
XZW4 AB 1;
XZW4 C 2;
XZW4 D 2 A_Headpat();
XZW4 EF 2;
XZW4 GHI 1;
XZW3 YZ 1;
XZW4 AB 1;
XZW4 C 2;
XZW4 D 2 A_Headpat();
XZW4 EF 2;
XZW4 GHI 1;
XZW4 JK 2;
XZW4 L 2 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 MNOP 3;
XZW1 A 0 A_HeadpatEnd();
XZW1 A -1 A_FinishGesture();
Stop;
Ragepat:
XZW1 A 3 A_CallPlayerGesture("Ragepat","Ragepat");
XZW3 TU 2;
XZW3 V 1 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 WX 1;
XZW3 Y 1;
XZW4 AC 1;
XZW4 D 1 A_Headpat();
XZW4 EF 1;
XZW4 GI 1;
XZW3 Y 1;
XZW4 AC 1;
XZW4 D 1 A_Headpat();
XZW4 EF 1;
XZW4 GI 1;
XZW3 Y 1;
XZW4 AC 1;
XZW4 D 1 A_Headpat();
XZW4 EF 1;
XZW4 GI 1;
XZW3 Y 1;
XZW4 AC 1;
XZW4 D 1 A_Headpat();
XZW4 EF 1;
XZW4 GIJK 1;
XZW4 L 1 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 MNOP 2;
XZW1 A 0 A_HeadpatEnd();
XZW1 A -1 A_FinishGesture();
Stop;
QuickGrenade:
XZW4 Q 3;
XZW4 R 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 ST 3;
XZW4 U 3 A_PlayerReload();
XZW4 V 2 A_StartSound("explodium/magpin",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 WX 2;
XZW4 Y 3;
XZW4 Z 2
{
A_StartSound("explodium/throwmag",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerMelee();
}
XZW4 BC 2;
XZW4 DEFGH 2;
XZW4 I 2 A_ThrowMag();
XZW4 JKLM 3;
TNT1 A 4;
TNT1 A 0 A_JumpIf(player.cmd.buttons&BT_USER4,"QuickGrenade");
TNT1 A -1 A_FinishGesture();
XZW5 AB 2;
XZW5 CDEF 2;
XZW5 G 2 A_ThrowMag();
XZW5 HIJ 3;
XZW5 K 4;
XZW4 Q 0 A_JumpIf(player.cmd.buttons&BT_USER4,"QuickGrenade");
XZW4 Q -1 A_FinishGesture();
Stop;
Wave:
TNT1 A 3 A_CallPlayerGesture("Wave","CrouchWave");
XZW1 AB 3;
XZW1 A 3 A_CallPlayerGesture("Wave","CrouchWave");
XZW1 B 3;
XZW1 C 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 DEFGHIJ 3;
XZW1 K 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 LMNO 3;
TNT1 A -1 A_FinishGesture();
XZW1 LMNOP 3;
XZW1 A -1 A_FinishGesture();
Stop;
Approve:
TNT1 A 3 A_CallPlayerGesture("Approve","CrouchApprove");
XZW1 PQ 3;
XZW1 R 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 STUVWX 3;
XZW1 Y 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 Z 3;
XZW2 ABCDEF 3;
TNT1 A -1 A_FinishGesture();
XZW1 A 3 A_CallPlayerGesture("Approve","CrouchApprove");
XZW1 QR 3;
XZW1 S 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW1 TUVWXY 3;
XZW1 Z 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 A 3;
XZW2 BCDEFG 3;
XZW1 A -1 A_FinishGesture();
Stop;
Victory:
TNT1 A 3 A_CallPlayerGesture("Victory","CrouchVictory");
XZW2 GH 3;
XZW2 I 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 JKLMNOPQ 3;
XZW2 R 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 STUVWXY 3;
TNT1 A -1 A_FinishGesture();
XZW1 A 3 A_CallPlayerGesture("Victory","CrouchVictory");
XZW2 HI 3;
XZW2 J 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 KLMNOPQR 3;
XZW2 S 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 TUVWXYZ 3;
XZW1 A -1 A_FinishGesture();
Stop;
BlowKiss:
TNT1 A 3 A_CallPlayerGesture("BlowKiss","CrouchBlowKiss");
XZW2 Z 3;
XZW1 A 3 A_CallPlayerGesture("BlowKiss","CrouchBlowKiss");
XZW3 A 3;
XZW3 B 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 CD 3;
XZW3 E 3 A_Smooch();
XZW3 FGHI 3;
XZW3 J 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 K 3 A_BlowKiss();
XZW3 LMNOPQR 3;
TNT1 A -1 A_FinishGesture();
XZW3 B 3;
XZW3 C 3 A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 DE 3;
XZW3 F 3 A_Smooch();
XZW3 GHIJ 3;
XZW3 K 3 A_StartSound("demolitionist/handsdown",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 L 3 A_BlowKiss();
XZW3 MNOPQRS 3;
XZW1 A -1 A_FinishGesture();
Stop;
NoGesture:
XZW1 A 1 A_FinishGesture();
Goto Deselect;
Deselect:
TNT1 A -1 A_FullLower();
XZW1 A -1 A_FullLower();
Stop;
}
}