0.9.4b release: Dual Explodium Guns.
This commit is contained in:
parent
a8a74556a8
commit
2ddf41d16d
13 changed files with 908 additions and 14 deletions
1
TODO.md
1
TODO.md
|
|
@ -1,7 +1,6 @@
|
|||
**Not so fundamental things during first beta:**
|
||||
|
||||
- Extra Demolitionist animations (swimming, additional gestures)
|
||||
- Dual wielding Explodium Gun
|
||||
- Quick grenade function (Explodium Mag)
|
||||
- Fun options
|
||||
- Omnibusting (all weapons can bust walls)
|
||||
|
|
|
|||
BIN
graphics/HUD/DualExplodiumDisplay.png
Normal file
BIN
graphics/HUD/DualExplodiumDisplay.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 547 B |
BIN
graphics/HUD/Icons/W_ExplodiumGun2.png
Normal file
BIN
graphics/HUD/Icons/W_ExplodiumGun2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.3b r553 \cu(Sun 20 Sep 15:05:43 CEST 2020)";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.4b r553 \cu(Sun 20 Sep 22:03:46 CEST 2020)";
|
||||
|
|
|
|||
|
|
@ -340,3 +340,4 @@ Model "ExplodiumGun"
|
|||
FrameIndex XZW9 V 1 234
|
||||
FrameIndex XZW9 W 1 235
|
||||
}
|
||||
|
||||
|
|
|
|||
374
modeldef.explodiumgun2
Normal file
374
modeldef.explodiumgun2
Normal file
|
|
@ -0,0 +1,374 @@
|
|||
Model "DualExplodiumGun"
|
||||
{
|
||||
Path "models/extra"
|
||||
|
||||
Model 2 "Flat_d.3d"
|
||||
Scale 0.1 0.1 0.1
|
||||
RollOffset 90
|
||||
AngleOffset 90
|
||||
|
||||
// Right
|
||||
Offset 28 -60 -12
|
||||
Skin 2 "ExploMuz0.png"
|
||||
FrameIndex XZWZ A 2 0
|
||||
Skin 2 "ExploMuz1.png"
|
||||
FrameIndex XZWZ B 2 0
|
||||
Skin 2 "ExploMuz2.png"
|
||||
FrameIndex XZWZ C 2 0
|
||||
Skin 2 "ExploMuz3.png"
|
||||
FrameIndex XZWZ D 2 0
|
||||
Skin 2 "ExploMuz4.png"
|
||||
FrameIndex XZWZ E 2 0
|
||||
Skin 2 "ExploMuz5.png"
|
||||
FrameIndex XZWZ F 2 0
|
||||
Skin 2 "ExploMuz6.png"
|
||||
FrameIndex XZWZ G 2 0
|
||||
Skin 2 "ExploMuz7.png"
|
||||
FrameIndex XZWZ H 2 0
|
||||
Skin 2 "ExploMuz8.png"
|
||||
FrameIndex XZWZ I 2 0
|
||||
Skin 2 "ExploMuz9.png"
|
||||
FrameIndex XZWZ J 2 0
|
||||
|
||||
// Left
|
||||
Offset -28 -60 -12
|
||||
Skin 2 "ExploMuz0.png"
|
||||
FrameIndex XZWZ K 2 0
|
||||
Skin 2 "ExploMuz1.png"
|
||||
FrameIndex XZWZ L 2 0
|
||||
Skin 2 "ExploMuz2.png"
|
||||
FrameIndex XZWZ M 2 0
|
||||
Skin 2 "ExploMuz3.png"
|
||||
FrameIndex XZWZ N 2 0
|
||||
Skin 2 "ExploMuz4.png"
|
||||
FrameIndex XZWZ O 2 0
|
||||
Skin 2 "ExploMuz5.png"
|
||||
FrameIndex XZWZ P 2 0
|
||||
Skin 2 "ExploMuz6.png"
|
||||
FrameIndex XZWZ Q 2 0
|
||||
Skin 2 "ExploMuz7.png"
|
||||
FrameIndex XZWZ R 2 0
|
||||
Skin 2 "ExploMuz8.png"
|
||||
FrameIndex XZWZ S 2 0
|
||||
Skin 2 "ExploMuz9.png"
|
||||
FrameIndex XZWZ T 2 0
|
||||
}
|
||||
|
||||
Model "DualExplodiumGun"
|
||||
{
|
||||
Path "models"
|
||||
|
||||
Model 1 "ExplodiumGun1st_d.3d"
|
||||
SurfaceSkin 1 0 "DemoTags.png"
|
||||
SurfaceSkin 1 1 "DemoArms.png"
|
||||
SurfaceSkin 1 2 "DemoSoft.png"
|
||||
SurfaceSkin 1 3 "ExplodiumGun.png"
|
||||
SurfaceSkin 1 5 "ExplodiumGun.png"
|
||||
|
||||
Scale -0.005 0.0025 0.005
|
||||
AngleOffset -90
|
||||
Offset 3 0 -2
|
||||
|
||||
//// RIGHT
|
||||
// Still
|
||||
FrameIndex XZW2 A 1 0
|
||||
// Deselect
|
||||
FrameIndex XZWA T 1 1
|
||||
FrameIndex XZWA U 1 2
|
||||
FrameIndex XZWA V 1 3
|
||||
FrameIndex XZWA W 1 4
|
||||
// Select
|
||||
FrameIndex XZW2 B 1 5
|
||||
FrameIndex XZW2 C 1 6
|
||||
FrameIndex XZW2 D 1 7
|
||||
FrameIndex XZW2 E 1 8
|
||||
FrameIndex XZW2 F 1 9
|
||||
FrameIndex XZW2 G 1 10
|
||||
FrameIndex XZW2 H 1 11
|
||||
// Fire
|
||||
SurfaceSkin 1 4 "ExplodiumCasing.png" // show casing
|
||||
FrameIndex XZW2 I 1 13
|
||||
FrameIndex XZW2 J 1 14
|
||||
FrameIndex XZW2 K 1 15
|
||||
FrameIndex XZW2 L 1 16
|
||||
FrameIndex XZW2 M 1 17
|
||||
FrameIndex XZW2 N 1 18
|
||||
FrameIndex XZW2 O 1 19
|
||||
FrameIndex XZW2 P 1 20
|
||||
FrameIndex XZW2 Q 1 21
|
||||
FrameIndex XZW2 R 1 22
|
||||
FrameIndex XZW2 S 1 23
|
||||
SurfaceSkin 1 4 "" // hide casing
|
||||
// Reload (Part 1)
|
||||
FrameIndex XZW2 T 1 25
|
||||
FrameIndex XZW2 U 1 26
|
||||
FrameIndex XZW2 V 1 27
|
||||
FrameIndex XZW2 W 1 28
|
||||
FrameIndex XZW2 X 1 29
|
||||
FrameIndex XZW2 Y 1 30
|
||||
FrameIndex XZW2 Z 1 31
|
||||
FrameIndex XZW3 A 1 32
|
||||
FrameIndex XZW3 B 1 33
|
||||
FrameIndex XZW3 C 1 34
|
||||
FrameIndex XZW3 D 1 35
|
||||
FrameIndex XZW3 E 1 36
|
||||
FrameIndex XZW3 F 1 37
|
||||
FrameIndex XZW3 G 1 38
|
||||
FrameIndex XZW3 H 1 39
|
||||
FrameIndex XZW3 I 1 40
|
||||
// Reload (Part 1 w/ Empty Mag)
|
||||
SurfaceSkin 1 5 "ExplodiumGun_EmptyMag.png" // empty mag
|
||||
FrameIndex XZW3 J 1 25
|
||||
FrameIndex XZW3 K 1 26
|
||||
FrameIndex XZW3 L 1 27
|
||||
FrameIndex XZW3 M 1 28
|
||||
FrameIndex XZW3 N 1 29
|
||||
FrameIndex XZW3 O 1 30
|
||||
FrameIndex XZW3 P 1 31
|
||||
FrameIndex XZW3 Q 1 32
|
||||
FrameIndex XZW3 R 1 33
|
||||
FrameIndex XZW3 S 1 34
|
||||
FrameIndex XZW3 T 1 35
|
||||
FrameIndex XZW3 U 1 36
|
||||
FrameIndex XZW3 V 1 37
|
||||
FrameIndex XZW3 W 1 38
|
||||
FrameIndex XZW3 X 1 39
|
||||
FrameIndex XZW3 Y 1 40
|
||||
// Reload (Part 2)
|
||||
SurfaceSkin 1 5 "" // hide mag
|
||||
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
|
||||
FrameIndex XZW3 Z 1 41
|
||||
FrameIndex XZW4 A 1 42
|
||||
FrameIndex XZW4 B 1 43
|
||||
FrameIndex XZW4 C 1 44
|
||||
FrameIndex XZW4 D 1 45
|
||||
FrameIndex XZW4 E 1 46
|
||||
FrameIndex XZW4 F 1 47
|
||||
FrameIndex XZW4 G 1 48
|
||||
SurfaceSkin 1 6 "" // hide new mag
|
||||
FrameIndex XZW4 H 1 49
|
||||
FrameIndex XZW4 I 1 50
|
||||
FrameIndex XZW4 J 1 51
|
||||
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
|
||||
FrameIndex XZW4 K 1 52
|
||||
FrameIndex XZW4 L 1 53
|
||||
FrameIndex XZW4 M 1 54
|
||||
FrameIndex XZW4 N 1 55
|
||||
FrameIndex XZW4 O 1 56
|
||||
FrameIndex XZW4 P 1 57
|
||||
FrameIndex XZW4 Q 1 58
|
||||
FrameIndex XZW4 R 1 59
|
||||
FrameIndex XZW4 S 1 60
|
||||
FrameIndex XZW4 T 1 61
|
||||
FrameIndex XZW4 U 1 62
|
||||
FrameIndex XZW4 V 1 63
|
||||
// Slide
|
||||
FrameIndex XZW4 W 1 65
|
||||
FrameIndex XZW4 X 1 66
|
||||
FrameIndex XZW4 Y 1 67
|
||||
FrameIndex XZW4 Z 1 68
|
||||
FrameIndex XZW5 A 1 69
|
||||
FrameIndex XZW5 B 1 70
|
||||
FrameIndex XZW5 C 1 71
|
||||
FrameIndex XZW5 D 1 72
|
||||
FrameIndex XZW5 E 1 73
|
||||
FrameIndex XZW5 F 1 74
|
||||
FrameIndex XZW5 G 1 75
|
||||
FrameIndex XZW5 H 1 76
|
||||
FrameIndex XZW5 I 1 77
|
||||
FrameIndex XZW5 J 1 78
|
||||
FrameIndex XZW5 K 1 79
|
||||
FrameIndex XZW5 L 1 80
|
||||
FrameIndex XZW5 M 1 81
|
||||
// Melee
|
||||
FrameIndex XZW7 T 1 177
|
||||
FrameIndex XZW7 U 1 178
|
||||
FrameIndex XZW7 V 1 179
|
||||
Offset 0 0 -2
|
||||
FrameIndex XZW7 W 1 180
|
||||
FrameIndex XZW7 X 1 181
|
||||
FrameIndex XZW7 Y 1 182
|
||||
FrameIndex XZW7 Z 1 183
|
||||
FrameIndex XZW8 A 1 184
|
||||
FrameIndex XZW8 B 1 185
|
||||
FrameIndex XZW8 C 1 186
|
||||
FrameIndex XZW8 D 1 187
|
||||
FrameIndex XZW8 E 1 188
|
||||
FrameIndex XZW8 F 1 189
|
||||
Offset 3 0 -2
|
||||
// Spin Gun
|
||||
FrameIndex XZW9 A 1 213
|
||||
FrameIndex XZW9 B 1 214
|
||||
FrameIndex XZW9 C 1 215
|
||||
FrameIndex XZW9 D 1 216
|
||||
FrameIndex XZW9 E 1 217
|
||||
FrameIndex XZW9 F 1 218
|
||||
FrameIndex XZW9 G 1 219
|
||||
FrameIndex XZW9 H 1 220
|
||||
FrameIndex XZW9 I 1 221
|
||||
FrameIndex XZW9 J 1 222
|
||||
FrameIndex XZW9 K 1 223
|
||||
FrameIndex XZW9 L 1 224
|
||||
FrameIndex XZW9 M 1 225
|
||||
FrameIndex XZW9 N 1 226
|
||||
FrameIndex XZW9 O 1 227
|
||||
FrameIndex XZW9 P 1 228
|
||||
FrameIndex XZW9 Q 1 229
|
||||
FrameIndex XZW9 R 1 230
|
||||
FrameIndex XZW9 S 1 231
|
||||
FrameIndex XZW9 T 1 232
|
||||
FrameIndex XZW9 U 1 233
|
||||
FrameIndex XZW9 V 1 234
|
||||
FrameIndex XZW9 W 1 235
|
||||
//// LEFT
|
||||
Model 1 "ExplodiumGun1stL_d.3d"
|
||||
Offset -3 0 -2
|
||||
// Still
|
||||
FrameIndex XZWB A 1 0
|
||||
// Deselect
|
||||
FrameIndex XZWA P 1 1
|
||||
FrameIndex XZWA Q 1 2
|
||||
FrameIndex XZWA R 1 3
|
||||
FrameIndex XZWA S 1 4
|
||||
// Select
|
||||
FrameIndex XZWB B 1 5
|
||||
FrameIndex XZWB C 1 6
|
||||
FrameIndex XZWB D 1 7
|
||||
FrameIndex XZWB E 1 8
|
||||
FrameIndex XZWB F 1 9
|
||||
FrameIndex XZWB G 1 10
|
||||
FrameIndex XZWB H 1 11
|
||||
// Fire
|
||||
SurfaceSkin 1 4 "ExplodiumCasing.png" // show casing
|
||||
FrameIndex XZWB I 1 13
|
||||
FrameIndex XZWB J 1 14
|
||||
FrameIndex XZWB K 1 15
|
||||
FrameIndex XZWB L 1 16
|
||||
FrameIndex XZWB M 1 17
|
||||
FrameIndex XZWB N 1 18
|
||||
FrameIndex XZWB O 1 19
|
||||
FrameIndex XZWB P 1 20
|
||||
FrameIndex XZWB Q 1 21
|
||||
FrameIndex XZWB R 1 22
|
||||
FrameIndex XZWB S 1 23
|
||||
SurfaceSkin 1 4 "" // hide casing
|
||||
// Reload (Part 1)
|
||||
FrameIndex XZWB T 1 25
|
||||
FrameIndex XZWB U 1 26
|
||||
FrameIndex XZWB V 1 27
|
||||
FrameIndex XZWB W 1 28
|
||||
FrameIndex XZWB X 1 29
|
||||
FrameIndex XZWB Y 1 30
|
||||
FrameIndex XZWB Z 1 31
|
||||
FrameIndex XZWC A 1 32
|
||||
FrameIndex XZWC B 1 33
|
||||
FrameIndex XZWC C 1 34
|
||||
FrameIndex XZWC D 1 35
|
||||
FrameIndex XZWC E 1 36
|
||||
FrameIndex XZWC F 1 37
|
||||
FrameIndex XZWC G 1 38
|
||||
FrameIndex XZWC H 1 39
|
||||
FrameIndex XZWC I 1 40
|
||||
// Reload (Part 1 w/ Empty Mag)
|
||||
SurfaceSkin 1 5 "ExplodiumGun_EmptyMag.png" // empty mag
|
||||
FrameIndex XZWC J 1 25
|
||||
FrameIndex XZWC K 1 26
|
||||
FrameIndex XZWC L 1 27
|
||||
FrameIndex XZWC M 1 28
|
||||
FrameIndex XZWC N 1 29
|
||||
FrameIndex XZWC O 1 30
|
||||
FrameIndex XZWC P 1 31
|
||||
FrameIndex XZWC Q 1 32
|
||||
FrameIndex XZWC R 1 33
|
||||
FrameIndex XZWC S 1 34
|
||||
FrameIndex XZWC T 1 35
|
||||
FrameIndex XZWC U 1 36
|
||||
FrameIndex XZWC V 1 37
|
||||
FrameIndex XZWC W 1 38
|
||||
FrameIndex XZWC X 1 39
|
||||
FrameIndex XZWC Y 1 40
|
||||
// Reload (Part 2)
|
||||
SurfaceSkin 1 5 "" // hide mag
|
||||
SurfaceSkin 1 6 "ExplodiumGun.png" // show new mag
|
||||
FrameIndex XZWC Z 1 41
|
||||
FrameIndex XZWD A 1 42
|
||||
FrameIndex XZWD B 1 43
|
||||
FrameIndex XZWD C 1 44
|
||||
FrameIndex XZWD D 1 45
|
||||
FrameIndex XZWD E 1 46
|
||||
FrameIndex XZWD F 1 47
|
||||
FrameIndex XZWD G 1 48
|
||||
SurfaceSkin 1 6 "" // hide new mag
|
||||
FrameIndex XZWD H 1 49
|
||||
FrameIndex XZWD I 1 50
|
||||
FrameIndex XZWD J 1 51
|
||||
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
|
||||
FrameIndex XZWD K 1 52
|
||||
FrameIndex XZWD L 1 53
|
||||
FrameIndex XZWD M 1 54
|
||||
FrameIndex XZWD N 1 55
|
||||
FrameIndex XZWD O 1 56
|
||||
FrameIndex XZWD P 1 57
|
||||
FrameIndex XZWD Q 1 58
|
||||
FrameIndex XZWD R 1 59
|
||||
FrameIndex XZWD S 1 60
|
||||
FrameIndex XZWD T 1 61
|
||||
FrameIndex XZWD U 1 62
|
||||
FrameIndex XZWD V 1 63
|
||||
// Slide
|
||||
FrameIndex XZWD W 1 65
|
||||
FrameIndex XZWD X 1 66
|
||||
FrameIndex XZWD Y 1 67
|
||||
FrameIndex XZWD Z 1 68
|
||||
FrameIndex XZWE A 1 69
|
||||
FrameIndex XZWE B 1 70
|
||||
FrameIndex XZWE C 1 71
|
||||
FrameIndex XZWE D 1 72
|
||||
FrameIndex XZWE E 1 73
|
||||
FrameIndex XZWE F 1 74
|
||||
FrameIndex XZWE G 1 75
|
||||
FrameIndex XZWE H 1 76
|
||||
FrameIndex XZWE I 1 77
|
||||
FrameIndex XZWE J 1 78
|
||||
FrameIndex XZWE K 1 79
|
||||
FrameIndex XZWE L 1 80
|
||||
FrameIndex XZWE M 1 81
|
||||
// Melee
|
||||
FrameIndex XZWG T 1 177
|
||||
FrameIndex XZWG U 1 178
|
||||
FrameIndex XZWG V 1 179
|
||||
FrameIndex XZWG W 1 180
|
||||
FrameIndex XZWG X 1 181
|
||||
FrameIndex XZWG Y 1 182
|
||||
FrameIndex XZWG Z 1 183
|
||||
FrameIndex XZWH A 1 184
|
||||
FrameIndex XZWH B 1 185
|
||||
FrameIndex XZWH C 1 186
|
||||
FrameIndex XZWH D 1 187
|
||||
FrameIndex XZWH E 1 188
|
||||
FrameIndex XZWH F 1 189
|
||||
// Spin Gun
|
||||
FrameIndex XZWH A 1 213
|
||||
FrameIndex XZWH B 1 214
|
||||
FrameIndex XZWH C 1 215
|
||||
FrameIndex XZWH D 1 216
|
||||
FrameIndex XZWH E 1 217
|
||||
FrameIndex XZWH F 1 218
|
||||
FrameIndex XZWH G 1 219
|
||||
FrameIndex XZWH H 1 220
|
||||
FrameIndex XZWH I 1 221
|
||||
FrameIndex XZWH J 1 222
|
||||
FrameIndex XZWH K 1 223
|
||||
FrameIndex XZWH L 1 224
|
||||
FrameIndex XZWH M 1 225
|
||||
FrameIndex XZWH N 1 226
|
||||
FrameIndex XZWH O 1 227
|
||||
FrameIndex XZWH P 1 228
|
||||
FrameIndex XZWH Q 1 229
|
||||
FrameIndex XZWH R 1 230
|
||||
FrameIndex XZWH S 1 231
|
||||
FrameIndex XZWH T 1 232
|
||||
FrameIndex XZWH U 1 233
|
||||
FrameIndex XZWH V 1 234
|
||||
FrameIndex XZWH W 1 235
|
||||
}
|
||||
BIN
models/ExplodiumGun1stL_a.3d
Normal file
BIN
models/ExplodiumGun1stL_a.3d
Normal file
Binary file not shown.
BIN
models/ExplodiumGun1stL_d.3d
Normal file
BIN
models/ExplodiumGun1stL_d.3d
Normal file
Binary file not shown.
|
|
@ -1573,7 +1573,13 @@ Class SWWMHandler : EventHandler
|
|||
t.uid = e.Args[1];
|
||||
t.type = MenuTransaction.TT_ITEMUSE;
|
||||
let w = (Class<Weapon>)(item);
|
||||
if ( w ) t.result = (players[e.Args[0]].PendingWeapon==Weapon(i));
|
||||
if ( w )
|
||||
{
|
||||
t.result = (players[e.Args[0]].PendingWeapon==Weapon(i));
|
||||
// dual wield gun support
|
||||
if ( (i is 'ExplodiumGun') && (players[e.Args[0]].PendingWeapon==Weapon(i).SisterWeapon) )
|
||||
t.result = true;
|
||||
}
|
||||
else t.result = rslt;
|
||||
t.used = item;
|
||||
t.usedup = (!i||(i.Amount<=0));
|
||||
|
|
|
|||
|
|
@ -912,6 +912,7 @@ Class SWWMWeapon : Weapon abstract
|
|||
Property DropAmmoType : dropammotype;
|
||||
|
||||
FlagDef NoFirstGive : SWeaponFlags, 0; // don't give ammo on first pickup (for weapons with a clip count)
|
||||
FlagDef HideInMenu : SWeaponFlags, 1; // don't show in inventory menu (usually for sister weapons)
|
||||
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1669,7 +1669,9 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
// alphabetically sorted inventory
|
||||
for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv )
|
||||
{
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
|
||||
// no hidden weapons
|
||||
if ( (inv is 'SWWMWeapon') && SWWMWeapon(inv).bHIDEINMENU ) continue;
|
||||
String tag = inv.GetTag();
|
||||
bool greater = false;
|
||||
for ( int i=0; i<invlist.Size(); i++ )
|
||||
|
|
@ -1841,7 +1843,9 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
// alphabetically sorted inventory
|
||||
for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv )
|
||||
{
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
|
||||
// no hidden weapons
|
||||
if ( (inv is 'SWWMWeapon') && SWWMWeapon(inv).bHIDEINMENU ) continue;
|
||||
String tag = inv.GetTag();
|
||||
bool greater = false;
|
||||
for ( int i=0; i<invlist.Size(); i++ )
|
||||
|
|
|
|||
|
|
@ -279,8 +279,12 @@ Class Demolitionist : PlayerPawn
|
|||
// preloaded gun
|
||||
let eg = ExplodiumGun(FindInventory("ExplodiumGun"));
|
||||
if ( !eg ) return;
|
||||
eg.clipcount = 7;
|
||||
eg.clipcount = eg.default.clipcount;
|
||||
eg.chambered = true;
|
||||
let eg2 = DualExplodiumGun(eg.SisterWeapon);
|
||||
if ( !eg2 ) return;
|
||||
eg2.clipcount = eg2.default.clipcount;
|
||||
eg2.chambered = true;
|
||||
}
|
||||
override void ClearInventory()
|
||||
{
|
||||
|
|
@ -2492,6 +2496,7 @@ Class SWWMGesture : SWWMWeapon
|
|||
{
|
||||
+WEAPON.CHEATNOTWEAPON;
|
||||
+WEAPON.WIMPY_WEAPON;
|
||||
+SWWMWEAPON.HIDEINMENU;
|
||||
+INVENTORY.UNDROPPABLE;
|
||||
+INVENTORY.UNTOSSABLE;
|
||||
+INVENTORY.UNCLEARABLE;
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ Class ExplodiumGun : SWWMWeapon
|
|||
{
|
||||
int clipcount;
|
||||
bool chambered;
|
||||
bool preinit;
|
||||
transient ui TextureID WeaponBox;
|
||||
transient ui Font TewiFont;
|
||||
|
||||
|
|
@ -310,6 +311,38 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-19,by-14,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
if ( (item.GetClass() == 'ExplodiumGun') && !item.ShouldStay() )
|
||||
{
|
||||
if ( (Amount+item.Amount > MaxAmount) && (Stamina > 0) )
|
||||
{
|
||||
// sell excess
|
||||
int sellprice = int(Stamina*.5);
|
||||
SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_GOLD);
|
||||
SWWMCredits.Give(Owner.player,sellprice);
|
||||
if ( Owner.player )
|
||||
Console.Printf(StringTable.Localize("$SWWM_SELLEXTRA"),Owner.player.GetUserName(),GetTag(),sellprice);
|
||||
item.bPickupGood = true;
|
||||
}
|
||||
// give a spare
|
||||
if ( Amount < MaxAmount )
|
||||
{
|
||||
Amount++;
|
||||
// if the gun has status info, override our sister
|
||||
let eg = ExplodiumGun(item);
|
||||
if ( eg && eg.preinit )
|
||||
{
|
||||
DualExplodiumGun(SisterWeapon).chambered = eg.chambered;
|
||||
DualExplodiumGun(SisterWeapon).clipcount = eg.clipcount;
|
||||
}
|
||||
item.bPickupGood = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return Weapon.HandlePickup(item);
|
||||
}
|
||||
|
||||
action void A_Schutt()
|
||||
{
|
||||
let weap = Weapon(invoker);
|
||||
|
|
@ -440,6 +473,40 @@ Class ExplodiumGun : SWWMWeapon
|
|||
return true;
|
||||
}
|
||||
|
||||
override bool Use( bool pickup )
|
||||
{
|
||||
// switch to dual if already selected
|
||||
if ( Owner.player && (Owner.player.ReadyWeapon == self) && (Amount > 1) )
|
||||
{
|
||||
Owner.player.PendingWeapon = SisterWeapon;
|
||||
return false;
|
||||
}
|
||||
return Super.Use(pickup);
|
||||
}
|
||||
|
||||
override Inventory CreateTossable (int amt)
|
||||
{
|
||||
let copy = ExplodiumGun(Inventory.CreateTossable(1));
|
||||
if ( !copy ) return null;
|
||||
// destroy sister weapon if we're removing ourselves
|
||||
if ( copy == self )
|
||||
{
|
||||
if ( SisterWeapon )
|
||||
{
|
||||
SisterWeapon.SisterWeapon = null;
|
||||
SisterWeapon.Destroy();
|
||||
}
|
||||
}
|
||||
else if ( SisterWeapon )
|
||||
{
|
||||
// pass sister's clipcount and chamber status to copy
|
||||
copy.chambered = DualExplodiumGun(SisterWeapon).chambered;
|
||||
copy.clipcount = DualExplodiumGun(SisterWeapon).clipcount;
|
||||
copy.preinit = true; // signal that this copy has preset info
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_EXPLODIUM";
|
||||
|
|
@ -449,9 +516,9 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Weapon.UpSound "explodium/select";
|
||||
Weapon.SlotNumber 2;
|
||||
Weapon.SelectionOrder 1000;
|
||||
//Weapon.SlotPriority 1.;
|
||||
//Inventory.MaxAmount 2;
|
||||
//Weapon.SisterWeapon "DualExplodiumGun";
|
||||
Weapon.SlotPriority 1.;
|
||||
Inventory.MaxAmount 2;
|
||||
Weapon.SisterWeapon "DualExplodiumGun";
|
||||
Stamina 8000;
|
||||
ExplodiumGun.ClipCount 7;
|
||||
+WEAPON.EXPLOSIVE;
|
||||
|
|
@ -609,10 +676,162 @@ Class ExplodiumGun : SWWMWeapon
|
|||
}
|
||||
}
|
||||
|
||||
// TODO Dual Explodium Guns (eventually)
|
||||
/*
|
||||
Class DualExplodiumGun : ExplodiumGun
|
||||
// Dual Explodium Guns
|
||||
Class DualExplodiumGun : SWWMWeapon
|
||||
{
|
||||
int clipcount;
|
||||
bool chambered;
|
||||
transient ui TextureID WeaponBox;
|
||||
transient ui Font TewiFont;
|
||||
|
||||
Property ClipCount : ClipCount;
|
||||
|
||||
override void DrawWeapon( double TicFrac, double bx, double by, Vector2 hs, Vector2 ss )
|
||||
{
|
||||
if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/DualExplodiumDisplay.png",TexMan.Type_Any);
|
||||
if ( !TewiFont ) TewiFont = Font.GetFont('TewiShaded');
|
||||
Screen.DrawTexture(WeaponBox,false,bx-48,by-22,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( ExplodiumGun(SisterWeapon).chambered ) Screen.DrawText(TewiFont,Font.CR_FIRE,bx-22,by-21,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1);
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-19,by-14,String.Format("%d",max(ExplodiumGun(SisterWeapon).clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( chambered ) Screen.DrawText(TewiFont,Font.CR_FIRE,bx-46,by-21,"⁺¹",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Spacing,-1);
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,bx-43,by-14,String.Format("%d",max(clipcount,0)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
|
||||
action void A_LeftFlash( StateLabel flashlabel = null )
|
||||
{
|
||||
if ( !player || !player.ReadyWeapon )
|
||||
return;
|
||||
Weapon weap = player.ReadyWeapon;
|
||||
State flashstate = null;
|
||||
if ( !flashlabel )
|
||||
{
|
||||
if ( weap.bAltFire )
|
||||
flashstate = weap.FindState('LeftAltFlash');
|
||||
if ( !flashstate )
|
||||
flashstate = weap.FindState('LeftFlash');
|
||||
}
|
||||
else flashstate = weap.FindState(flashlabel);
|
||||
player.SetPSprite(PSP_FLASH+1,flashstate);
|
||||
A_OverlayFlags(PSP_FLASH+1,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
A_OverlayRenderStyle(PSP_FLASH+1,STYLE_Add);
|
||||
}
|
||||
|
||||
action void A_Schutt( int side = 1 )
|
||||
{
|
||||
let weap = Weapon(invoker);
|
||||
if ( !weap ) return;
|
||||
if ( side == 1 )
|
||||
{
|
||||
ExplodiumGun(invoker.SisterWeapon).chambered = ExplodiumGun(invoker.SisterWeapon).clipcount;
|
||||
ExplodiumGun(invoker.SisterWeapon).clipcount = max(ExplodiumGun(invoker.SisterWeapon).clipcount-1,0);
|
||||
}
|
||||
else if ( side == -1 )
|
||||
{
|
||||
invoker.chambered = invoker.clipcount;
|
||||
invoker.clipcount = max(invoker.clipcount-1,0);
|
||||
}
|
||||
A_StartSound("explodium/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_QuakeEx(5,5,5,3,0,10,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.5);
|
||||
A_ZoomFactor(.96,ZOOM_INSTANT);
|
||||
A_ZoomFactor(1.);
|
||||
if ( side == 1 )
|
||||
A_SWWMFlash("Flash");
|
||||
else if ( side == -1 )
|
||||
A_LeftFlash("LeftFlash");
|
||||
SWWMHandler.DoFlash(self,Color(64,255,224,64),3);
|
||||
A_AlertMonsters(5000);
|
||||
A_PlayerFire();
|
||||
Vector3 x, y, z, x2, y2, z2;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
SWWMUtility.DoKnockback(self,-x,4000.);
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+3.5*side*y-2*z);
|
||||
double a = FRandom[Spread](0,360), s = FRandom[Spread](0,.002);
|
||||
[x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
|
||||
FLineTraceData d;
|
||||
LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION|TRF_NOSKY,origin.z,origin.x,origin.y,d);
|
||||
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
|
||||
if ( d.HitType == TRACE_HitActor )
|
||||
{
|
||||
int dmg = 25;
|
||||
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000);
|
||||
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Explodium',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
|
||||
if ( d.HitActor.bNOBLOOD || d.HitActor.bINVULNERABLE )
|
||||
{
|
||||
let p = Spawn("SWWMBulletImpact",d.HitLocation);
|
||||
p.angle = atan2(d.HitDir.y,d.HitDir.x)+180;
|
||||
p.pitch = asin(d.HitDir.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
d.HitActor.TraceBleed(dmg,self);
|
||||
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
|
||||
}
|
||||
let b = Spawn("ExplodiumBulletImpact",d.HitLocation-d.HitDir*4.);
|
||||
b.angle = atan2(d.HitDir.y,d.HitDir.x)+180;
|
||||
b.pitch = asin(d.HitDir.z);
|
||||
b.target = self;
|
||||
}
|
||||
else if ( d.HitType != TRACE_HitNone )
|
||||
{
|
||||
Vector3 hitnormal = -d.HitDir;
|
||||
if ( d.HitType == TRACE_HitFloor )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.top.Normal;
|
||||
else hitnormal = d.HitSector.floorplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitCeiling )
|
||||
{
|
||||
if ( d.Hit3DFloor ) hitnormal = -d.Hit3DFloor.bottom.Normal;
|
||||
else hitnormal = d.HitSector.ceilingplane.Normal;
|
||||
}
|
||||
else if ( d.HitType == TRACE_HitWall )
|
||||
{
|
||||
hitnormal = (-d.HitLine.delta.y,d.HitLine.delta.x,0).unit();
|
||||
if ( !d.LineSide ) hitnormal *= -1;
|
||||
}
|
||||
let p = Spawn("SWWMBulletImpact",d.HitLocation+hitnormal*0.01);
|
||||
p.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
p.pitch = asin(-hitnormal.z);
|
||||
if ( d.HitLine ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation);
|
||||
let b = Spawn("ExplodiumBulletImpact",d.HitLocation+hitnormal*4.);
|
||||
b.angle = atan2(hitnormal.y,hitnormal.x);
|
||||
b.pitch = asin(-hitnormal.z);
|
||||
b.target = self;
|
||||
}
|
||||
for ( int i=0; i<6; i++ )
|
||||
{
|
||||
let s = Spawn("SWWMViewSmoke",origin);
|
||||
SWWMViewSmoke(s).ofs = (15,5*side,-3);
|
||||
s.target = self;
|
||||
s.alpha *= 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
action void A_DropMag( int side = 1 )
|
||||
{
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x-2*side*y-10*z);
|
||||
let c = Spawn("ExplodiumMag",origin);
|
||||
c.angle = angle;
|
||||
c.pitch = pitch;
|
||||
c.vel = x*FRandom[Junk](-.5,.5)+y*side*FRandom[Junk](-1.2,.3)-(0,0,FRandom[Junk](2,3));
|
||||
c.vel += vel*.5;
|
||||
}
|
||||
|
||||
action void A_DropCasing( int side = 1 )
|
||||
{
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+8*side*y-10*z);
|
||||
let c = Spawn("ExplodiumCasing",origin);
|
||||
c.angle = angle;
|
||||
c.pitch = pitch;
|
||||
c.vel = x*FRandom[Junk](-.5,.5)+y*side*FRandom[Junk](2,4)-(0,0,FRandom[Junk](2,3));
|
||||
c.vel += vel*.5;
|
||||
}
|
||||
|
||||
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
|
||||
{
|
||||
if ( (firemode == PrimaryFire) || (firemode == AltFire) )
|
||||
|
|
@ -620,11 +839,296 @@ Class DualExplodiumGun : ExplodiumGun
|
|||
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
|
||||
}
|
||||
|
||||
override bool ReportHUDAmmo()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
override Inventory CreateTossable( int amt )
|
||||
{
|
||||
// disallow dropping if weapon isn't ready for switching
|
||||
if ( (Owner.player.ReadyWeapon == self) && (!(Owner.player.WeaponState&WF_WEAPONSWITCHOK) || (Owner.player.WeaponState&WF_DISABLESWITCH)) )
|
||||
return null;
|
||||
// forcibly switch back to sister weapon
|
||||
if ( Owner.player.ReadyWeapon == self )
|
||||
{
|
||||
Owner.player.ReadyWeapon = SisterWeapon;
|
||||
Owner.player.SetPSprite(PSP_WEAPON,SisterWeapon.FindState("Ready"));
|
||||
Owner.player.SetPSprite(PSP_WEAPON+1,null); // delete left weapon psprite
|
||||
}
|
||||
// call toss on sister
|
||||
return SisterWeapon.CreateTossable(amt);
|
||||
}
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_EXPLODIUM2";
|
||||
Obituary "$O_EXPLODIUM";
|
||||
Inventory.Icon "graphics/HUD/Icons/W_ExplodiumGun2.png";
|
||||
Weapon.UpSound "explodium/select";
|
||||
Weapon.SisterWeapon "ExplodiumGun";
|
||||
Weapon.SlotPriority 2.;
|
||||
Weapon.SlotNumber 2;
|
||||
Weapon.SelectionOrder 950;
|
||||
Weapon.SlotPriority 2.;
|
||||
DualExplodiumGun.ClipCount 7;
|
||||
+WEAPON.EXPLOSIVE;
|
||||
+SWWMWEAPON.HIDEINMENU;
|
||||
}
|
||||
}*/
|
||||
States
|
||||
{
|
||||
Select:
|
||||
XZW2 B 2 A_FullRaise();
|
||||
XZW2 C 2;
|
||||
XZW2 D 2 { player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftSelect")); }
|
||||
XZW2 EFGHAA 2;
|
||||
Goto Ready;
|
||||
LeftSelect:
|
||||
XZWB BCDEFGH 2;
|
||||
Goto LeftReady;
|
||||
Ready:
|
||||
XZW2 A 1
|
||||
{
|
||||
let sis = player.FindPSprite(PSP_WEAPON+1);
|
||||
if ( !sis )
|
||||
{
|
||||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReady"));
|
||||
sis = player.FindPSprite(PSP_WEAPON+1);
|
||||
}
|
||||
if ( sis.CurState.InStateSequence(ResolveState("LeftReady")) )
|
||||
{
|
||||
if ( (ExplodiumGun(invoker.SisterWeapon).clipcount <= 0) && !ExplodiumGun(invoker.SisterWeapon).chambered )
|
||||
player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
|
||||
else if ( (ExplodiumGun(invoker.SisterWeapon).clipcount > 0) && !ExplodiumGun(invoker.SisterWeapon).chambered )
|
||||
player.SetPSprite(PSP_WEAPON,ResolveState("PreSlide"));
|
||||
else if ( (invoker.clipcount <= 0) && !invoker.chambered )
|
||||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReload"));
|
||||
else if ( (invoker.clipcount > 0) && !invoker.chambered )
|
||||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftPreSlide"));
|
||||
else if ( (player.cmd.buttons&BT_RELOAD) && (ExplodiumGun(invoker.SisterWeapon).clipcount < ExplodiumGun(invoker.SisterWeapon).default.clipcount) )
|
||||
player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
|
||||
else if ( (player.cmd.buttons&BT_RELOAD) && (invoker.clipcount < invoker.default.clipcount) )
|
||||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftReload"));
|
||||
else A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1);
|
||||
}
|
||||
else
|
||||
{
|
||||
int flg = WRF_NOSWITCH|WRF_NOSECONDARY;
|
||||
if ( !ExplodiumGun(invoker.SisterWeapon).chambered )
|
||||
flg |= WRF_NOPRIMARY;
|
||||
A_WeaponReady(flg);
|
||||
}
|
||||
}
|
||||
Wait;
|
||||
LeftReady:
|
||||
XZWB A 1
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ALTATTACK && invoker.chambered )
|
||||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftFire"));
|
||||
}
|
||||
Wait;
|
||||
Fire:
|
||||
XZW2 A 1 A_Schutt();
|
||||
XZW2 IJKLMNOPQR 1;
|
||||
XZW2 S 2 A_DropCasing();
|
||||
Goto Ready;
|
||||
LeftFire:
|
||||
XZWB A 1 A_Schutt(-1);
|
||||
XZWB IJKLMNOPQR 1;
|
||||
XZWB S 2 A_DropCasing(-1);
|
||||
Goto LeftReady;
|
||||
Lower:
|
||||
XZW2 A 2;
|
||||
XZW7 TUV 2;
|
||||
XZW7 W -1;
|
||||
Stop;
|
||||
LeftLower:
|
||||
XZWB A 2;
|
||||
XZWG TUV 2;
|
||||
XZWG W -1;
|
||||
Stop;
|
||||
Raise:
|
||||
XZW7 WVUT 2;
|
||||
XZW2 A 1;
|
||||
Goto Ready;
|
||||
LeftRaise:
|
||||
XZWG WVUT 2;
|
||||
XZWB A 1;
|
||||
Goto LeftReady;
|
||||
Reload:
|
||||
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower")); }
|
||||
XZW2 A 1
|
||||
{
|
||||
A_PlayerReload();
|
||||
if ( ExplodiumGun(invoker.SisterWeapon).clipcount <= 0 ) return ResolveState("ReloadEmpty");
|
||||
return ResolveState(null);
|
||||
}
|
||||
XZW2 TUVWXYZ 1;
|
||||
XZW3 A 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZW3 B 1 { ExplodiumGun(invoker.SisterWeapon).clipcount = 0; }
|
||||
XZW3 C 1;
|
||||
XZW3 D 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW3 EFGH 1;
|
||||
XZW3 I 1 A_DropMag();
|
||||
Goto ReloadEnd;
|
||||
ReloadEmpty:
|
||||
XZW2 A 1;
|
||||
XZW3 JKLMNOP 1;
|
||||
XZW3 Q 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZW3 RS 1;
|
||||
XZW3 T 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW3 UVWX 1;
|
||||
XZW3 Y 1 A_DropMag();
|
||||
Goto ReloadEnd;
|
||||
ReloadEnd:
|
||||
XZW3 Z 1;
|
||||
XZW4 ABCDE 1;
|
||||
XZW4 F 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW4 GHIJKLMNOPQ 1;
|
||||
XZW4 R 1
|
||||
{
|
||||
A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
ExplodiumGun(invoker.SisterWeapon).clipcount = ExplodiumGun(invoker.SisterWeapon).default.clipcount;
|
||||
}
|
||||
XZW4 STUV 1;
|
||||
XZW2 A 0 A_JumpIf(!ExplodiumGun(invoker.SisterWeapon).chambered,"Slide");
|
||||
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise")); }
|
||||
Goto Ready;
|
||||
PreSlide:
|
||||
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftLower")); }
|
||||
Slide:
|
||||
XZW2 A 1;
|
||||
XZW4 WXY 1;
|
||||
XZW5 A 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZW5 BC 1;
|
||||
XZW5 D 1
|
||||
{
|
||||
ExplodiumGun(invoker.SisterWeapon).chambered = true;
|
||||
ExplodiumGun(invoker.SisterWeapon).clipcount--;
|
||||
}
|
||||
XZW5 EFG 1;
|
||||
XZW5 H 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW5 IJKLM 1;
|
||||
XZW2 A 9 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftRaise")); }
|
||||
Goto Ready;
|
||||
LeftReload:
|
||||
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Lower")); }
|
||||
XZWB A 1
|
||||
{
|
||||
A_PlayerReload();
|
||||
if ( invoker.clipcount <= 0 ) return ResolveState("LeftReloadEmpty");
|
||||
return ResolveState(null);
|
||||
}
|
||||
XZWB TUVWXYZ 1;
|
||||
XZWC A 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZWC B 1 { invoker.clipcount = 0; }
|
||||
XZWC C 1;
|
||||
XZWC D 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWC EFGH 1;
|
||||
XZWC I 1 A_DropMag(-1);
|
||||
Goto LeftReloadEnd;
|
||||
LeftReloadEmpty:
|
||||
XZWB A 1;
|
||||
XZWC JKLMNOP 1;
|
||||
XZWC Q 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZWC RS 1;
|
||||
XZWC T 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWC UVWX 1;
|
||||
XZWC Y 1 A_DropMag(-1);
|
||||
Goto LeftReloadEnd;
|
||||
LeftReloadEnd:
|
||||
XZWC Z 1;
|
||||
XZWD ABCDE 1;
|
||||
XZWD F 1 A_StartSound("explodium/magin",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWD GHIJKLMNOPQ 1;
|
||||
XZWD R 1
|
||||
{
|
||||
A_StartSound("explodium/jamitin",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.clipcount = invoker.default.clipcount;
|
||||
}
|
||||
XZWD STUV 1;
|
||||
XZWB A 0 A_JumpIf(!invoker.chambered,"LeftSlide");
|
||||
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Raise")); }
|
||||
Goto LeftReady;
|
||||
LeftPreSlide:
|
||||
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Lower")); }
|
||||
LeftSlide:
|
||||
XZWB A 1;
|
||||
XZWD WXY 1;
|
||||
XZWE A 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
|
||||
XZWE BC 1;
|
||||
XZWE D 1
|
||||
{
|
||||
invoker.chambered = true;
|
||||
invoker.clipcount--;
|
||||
}
|
||||
XZWE EFG 1;
|
||||
XZWE H 1 A_StartSound("explodium/slideforward",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWE IJKLM 1;
|
||||
XZWB A 9 { player.SetPSPrite(PSP_WEAPON,ResolveState("Raise")); }
|
||||
Goto LeftReady;
|
||||
Zoom:
|
||||
XZW2 A 1 A_StartSound("explodium/speen",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW9 ABCDEFG 1;
|
||||
XZW9 H 1 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftZoom")); }
|
||||
XZW9 IJKLMNOPQRSTUVW 1;
|
||||
XZW2 A 9;
|
||||
Goto Ready;
|
||||
LeftZoom:
|
||||
XZWB A 1;
|
||||
XZWH ABCDEFGHIJKLMNOPQRSTUVW 1;
|
||||
Goto LeftReady;
|
||||
User1:
|
||||
XZW2 A 1 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftUser1")); }
|
||||
XZW7 TU 1;
|
||||
User1Hold:
|
||||
XZW7 V 1
|
||||
{
|
||||
A_PlayerMelee(true);
|
||||
A_StartSound("demolitionist/swing",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_Parry(9);
|
||||
}
|
||||
XZW7 WX 1;
|
||||
XZW7 Y 1 A_Melee();
|
||||
XZW7 Z 2;
|
||||
XZW8 ABCDE 2;
|
||||
XZW8 F 1 A_JumpIf(player.cmd.buttons&BT_USER1,"User1Hold");
|
||||
XZW2 B 0 { invoker.PlayUpSound(self); player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftSelect")); }
|
||||
Goto Select;
|
||||
LeftUser1:
|
||||
XZWB A 1;
|
||||
XZWG TUV 1;
|
||||
XZWB B -1;
|
||||
Stop;
|
||||
Deselect:
|
||||
XZW2 A 2 A_StartSound("explodium/deselect",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWA T 2;
|
||||
XZWA U 2 { player.SetPSPrite(PSP_WEAPON+1,ResolveState("LeftDeselect")); }
|
||||
XZWA VW 2;
|
||||
XZW2 BBB 2;
|
||||
XZW2 B -1 A_FullLower();
|
||||
Stop;
|
||||
LeftDeselect:
|
||||
XZWB A 2;
|
||||
XZWA PQRS 2;
|
||||
XZWB B 2;
|
||||
Stop;
|
||||
Flash:
|
||||
XZWZ A 2
|
||||
{
|
||||
let psp = player.GetPSprite(PSP_FLASH);
|
||||
psp.frame = Random[GunFlash](0,9);
|
||||
let l = Spawn("SWWMWeaponLight",pos);
|
||||
l.target = self;
|
||||
}
|
||||
Stop;
|
||||
LeftFlash:
|
||||
XZWZ K 2
|
||||
{
|
||||
let psp = player.GetPSprite(PSP_FLASH+1);
|
||||
psp.frame = Random[GunFlash](10,19);
|
||||
let l = Spawn("SWWMWeaponLight",pos);
|
||||
l.target = self;
|
||||
}
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue