diff --git a/TODO.md b/TODO.md index f4806c681..00fdb1216 100644 --- a/TODO.md +++ b/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) diff --git a/graphics/HUD/DualExplodiumDisplay.png b/graphics/HUD/DualExplodiumDisplay.png new file mode 100644 index 000000000..2629aa7c3 Binary files /dev/null and b/graphics/HUD/DualExplodiumDisplay.png differ diff --git a/graphics/HUD/Icons/W_ExplodiumGun2.png b/graphics/HUD/Icons/W_ExplodiumGun2.png new file mode 100644 index 000000000..a361a50e4 Binary files /dev/null and b/graphics/HUD/Icons/W_ExplodiumGun2.png differ diff --git a/language.version b/language.version index 7c5e3b47a..f51aa1aaf 100644 --- a/language.version +++ b/language.version @@ -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)"; diff --git a/modeldef.explodiumgun b/modeldef.explodiumgun index f0686a0ce..840ffec52 100644 --- a/modeldef.explodiumgun +++ b/modeldef.explodiumgun @@ -340,3 +340,4 @@ Model "ExplodiumGun" FrameIndex XZW9 V 1 234 FrameIndex XZW9 W 1 235 } + diff --git a/modeldef.explodiumgun2 b/modeldef.explodiumgun2 new file mode 100644 index 000000000..bddb7acaf --- /dev/null +++ b/modeldef.explodiumgun2 @@ -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 +} diff --git a/models/ExplodiumGun1stL_a.3d b/models/ExplodiumGun1stL_a.3d new file mode 100644 index 000000000..785c0fb63 Binary files /dev/null and b/models/ExplodiumGun1stL_a.3d differ diff --git a/models/ExplodiumGun1stL_d.3d b/models/ExplodiumGun1stL_d.3d new file mode 100644 index 000000000..8fe36e65f Binary files /dev/null and b/models/ExplodiumGun1stL_d.3d differ diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 7b6e0f81d..7bb47d105 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -1573,7 +1573,13 @@ Class SWWMHandler : EventHandler t.uid = e.Args[1]; t.type = MenuTransaction.TT_ITEMUSE; let w = (Class)(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)); diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index 136a0c977..069f7e83e 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -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 ) { diff --git a/zscript/swwm_menu.zsc b/zscript/swwm_menu.zsc index eaa1d51af..b26615978 100644 --- a/zscript/swwm_menu.zsc +++ b/zscript/swwm_menu.zsc @@ -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