Allow firing of different muzzles on different frames after use

This commit is contained in:
2024-12-21 11:37:52 +00:00
parent e9006addd0
commit 8f65fa6bc5
16 changed files with 444 additions and 465 deletions
+161 -183
View File
@@ -2,303 +2,281 @@ digraph {
graph [rankdir=LR];
subgraph 1 {
1 [shape=box
,label="HELD {_ibtHeld = TIMESCROLLER}"];
2 [shape=box
,label="HELD {_ibtHeld = TIMESTOPPER}"];
3 [shape=box
,label="HELD {_ibtHeld = REWINDER}"];
11 [shape=box
,label="EQUIP {_ibtEquip = FUELPACK}"];
15 [shape=box
,label="AMMOMAG {_ibtAmmoMag = TINMAG}"];
19 [shape=box
,label="HELD {_ibtHeld = BANGSTICK {_xNum = 1}}"];
23 [shape=box
,label="EQUIP {_ibtEquip = FUELPACK}"];
5 [shape=box
,label="AMMOMAG {_ibtAmmoMag = TINMAG}"];
9 [shape=box
,label="HELD {_ibtHeld = BANGSTICK {_xNum = 1}}"];
13 [shape=box
,label="HELD {_ibtHeld = PISTOL}"];
25 [shape=box
15 [shape=box
,label="HELD {_ibtHeld = AUTOPISTOL}"];
27 [shape=box
17 [shape=box
,label="HELD {_ibtHeld = SMG}"];
30 [shape=box
20 [shape=box
,label="HELD {_ibtHeld = MACHINEPISTOL}"];
32 [shape=box
22 [shape=box
,label="HELD {_ibtHeld = BANGCONE}"];
35 [shape=box
25 [shape=box
,label="HELD {_ibtHeld = BLUNDERBUSS}"];
37 [shape=box
27 [shape=box
,label="HELD {_ibtHeld = GRAPECANNON {_xNum = 1}}"];
39 [shape=box
29 [shape=box
,label="HELD {_ibtHeld = RIFLE}"];
41 [shape=box
31 [shape=box
,label="HELD {_ibtHeld = VOLLEYGUN {_xNum = 3}}"];
43 [shape=box
33 [shape=box
,label="HELD {_ibtHeld = AUTORIFLE}"];
45 [shape=box
35 [shape=box
,label="HELD {_ibtHeld = BURSTRIFLE}"];
47 [shape=box
37 [shape=box
,label="HELD {_ibtHeld = MINIGUNX {_xNum = 3}}"];
50 [shape=box
40 [shape=box
,label="HELD {_ibtHeld = SNIPERRIFLE}"];
51 [shape=box
41 [shape=box
,label="HELD {_ibtHeld = AMR}"];
54 [shape=box
44 [shape=box
,label="HELD {_ibtHeld = AUTOAMR}"];
56 [shape=box
46 [shape=box
,label="HELD {_ibtHeld = LAUNCHER}"];
59 [shape=box
49 [shape=box
,label="HELD {_ibtHeld = LAUNCHERX {_xNum = 2}}"];
63 [shape=box
53 [shape=box
,label="HELD {_ibtHeld = FLAMESPITTER}"];
67 [shape=box
57 [shape=box
,label="HELD {_ibtHeld = BLOWTORCH}"];
69 [shape=box
59 [shape=box
,label="HELD {_ibtHeld = FLAMETHROWER}"];
71 [shape=box
61 [shape=box
,label="HELD {_ibtHeld = FLAMEWALL}"];
73 [shape=box
63 [shape=box
,label="HELD {_ibtHeld = FLAMETORRENT}"];
75 [shape=box
65 [shape=box
,label="HELD {_ibtHeld = LASER}"];
79 [shape=box
69 [shape=box
,label="HELD {_ibtHeld = SPARKGUN}"];
81 [shape=box
71 [shape=box
,label="HELD {_ibtHeld = TESLAGUN}"];
83 [shape=box
,label="HELD {_ibtHeld = BLINKER}"];
86 [shape=box
73 [shape=box
,label="HELD {_ibtHeld = BLINKERUNSAFE}"];
88 [shape=box
74 [shape=box
,label="HELD {_ibtHeld = BLINKER}"];
77 [shape=box
,label="EQUIP {_ibtEquip = MAGSHIELD}"];
91 [shape=box
80 [shape=box
,label="EQUIP {_ibtEquip = POWERLEGS}"];
97 [shape=box
86 [shape=box
,label="HELD {_ibtHeld = FLATSHIELD}"];
107 [shape=box
,label="HELD {_ibtHeld = DETECTOR ITEMDETECTOR}"];
110 [shape=box
,label="HELD {_ibtHeld = DETECTOR WALLDETECTOR}"];
112 [shape=box
96 [shape=box
,label="HELD {_ibtHeld = DETECTOR ITEMDETECTOR}"];
99 [shape=box
,label="HELD {_ibtHeld = DETECTOR WALLDETECTOR}"];
101 [shape=box
,label="HELD {_ibtHeld = DETECTOR CREATUREDETECTOR}"];
114 [shape=box
103 [shape=box
,label="HELD {_ibtHeld = TORCH}"];
115 [shape=box
104 [shape=box
,label="AMMOMAG {_ibtAmmoMag = BATTERY}"];
118 [shape=box
107 [shape=box
,label="EQUIP {_ibtEquip = HEADLAMP}"];
119 [shape=box
108 [shape=box
,label="EQUIP {_ibtEquip = HAT}"];
121 [shape=box
110 [shape=box
,label="HELD {_ibtHeld = BANGSTICK {_xNum = 2}}"];
}
subgraph 2 {
0 [shape=point];
4 [shape=point];
8 [shape=point];
10 [shape=point];
12 [shape=point];
14 [shape=point];
18 [shape=point];
22 [shape=point];
16 [shape=point];
19 [shape=point];
21 [shape=point];
24 [shape=point];
26 [shape=point];
29 [shape=point];
31 [shape=point];
28 [shape=point];
30 [shape=point];
32 [shape=point];
34 [shape=point];
36 [shape=point];
38 [shape=point];
40 [shape=point];
39 [shape=point];
42 [shape=point];
44 [shape=point];
46 [shape=point];
49 [shape=point];
43 [shape=point];
45 [shape=point];
48 [shape=point];
50 [shape=point];
52 [shape=point];
53 [shape=point];
55 [shape=point];
56 [shape=point];
58 [shape=point];
60 [shape=point];
62 [shape=point];
66 [shape=point];
64 [shape=point];
68 [shape=point];
70 [shape=point];
72 [shape=point];
74 [shape=point];
78 [shape=point];
80 [shape=point];
76 [shape=point];
79 [shape=point];
82 [shape=point];
83 [shape=point];
84 [shape=point];
85 [shape=point];
87 [shape=point];
90 [shape=point];
93 [shape=point];
94 [shape=point];
89 [shape=point];
92 [shape=point];
95 [shape=point];
96 [shape=point];
98 [shape=point];
100 [shape=point];
103 [shape=point];
102 [shape=point];
106 [shape=point];
109 [shape=point];
111 [shape=point];
113 [shape=point];
115 [shape=point];
117 [shape=point];
120 [shape=point];
122 [shape=point];
124 [shape=point];
126 [shape=point];
128 [shape=point];
}
0 -> 1 [xlabel="",tailport=e];
2 -> 0 [xlabel=1
,arrowhead=onone
,headport=w];
3 -> 0 [xlabel=1
,arrowhead=onone
,headport=w];
4 -> 1 [xlabel="",tailport=e];
8 -> 1 [xlabel="",tailport=e];
10 -> 11 [xlabel="",tailport=e];
4 -> 5 [xlabel="",tailport=e];
8 -> 9 [xlabel="",tailport=e];
9 -> 12 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 28 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 30 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 30 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 30 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 109 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 113 [xlabel=1
,arrowhead=onone
,headport=w];
9 -> 115 [xlabel=1
,arrowhead=onone
,headport=w];
12 -> 13 [xlabel="",tailport=e];
13 -> 14 [xlabel=1
,arrowhead=onone
,headport=w];
14 -> 15 [xlabel="",tailport=e];
18 -> 19 [xlabel="",tailport=e];
19 -> 22 [xlabel=1
15 -> 16 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 38 [xlabel=1
15 -> 19 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 40 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 40 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 40 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 120 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 124 [xlabel=1
,arrowhead=onone
,headport=w];
19 -> 126 [xlabel=1
,arrowhead=onone
,headport=w];
22 -> 23 [xlabel="",tailport=e];
23 -> 24 [xlabel=1
16 -> 17 [xlabel="",tailport=e];
19 -> 20 [xlabel="",tailport=e];
21 -> 22 [xlabel="",tailport=e];
22 -> 24 [xlabel=1
,arrowhead=onone
,headport=w];
24 -> 25 [xlabel="",tailport=e];
25 -> 26 [xlabel=1
,arrowhead=onone
,headport=w];
25 -> 29 [xlabel=1
,arrowhead=onone
,headport=w];
26 -> 27 [xlabel="",tailport=e];
29 -> 30 [xlabel="",tailport=e];
31 -> 32 [xlabel="",tailport=e];
32 -> 34 [xlabel=1
27 -> 117 [xlabel=1
,arrowhead=onone
,headport=w];
28 -> 29 [xlabel="",tailport=e];
29 -> 32 [xlabel=1
,arrowhead=onone
,headport=w];
29 -> 34 [xlabel=1
,arrowhead=onone
,headport=w];
29 -> 42 [xlabel=1
,arrowhead=onone
,headport=w];
30 -> 31 [xlabel="",tailport=e];
31 -> 36 [xlabel=1
,arrowhead=onone
,headport=w];
31 -> 113 [xlabel=1
,arrowhead=onone
,headport=w];
32 -> 33 [xlabel="",tailport=e];
34 -> 35 [xlabel="",tailport=e];
35 -> 36 [xlabel=1
,arrowhead=onone
,headport=w];
36 -> 37 [xlabel="",tailport=e];
37 -> 128 [xlabel=1
37 -> 115 [xlabel=1
,arrowhead=onone
,headport=w];
38 -> 39 [xlabel="",tailport=e];
39 -> 42 [xlabel=1
39 -> 40 [xlabel="",tailport=e];
41 -> 39 [xlabel=1
,arrowhead=onone
,headport=w];
39 -> 44 [xlabel=1
41 -> 43 [xlabel=1
,arrowhead=onone
,headport=w];
39 -> 52 [xlabel=1
42 -> 41 [xlabel="",tailport=e];
43 -> 44 [xlabel="",tailport=e];
45 -> 46 [xlabel="",tailport=e];
46 -> 48 [xlabel=1
,arrowhead=onone
,headport=w];
40 -> 41 [xlabel="",tailport=e];
41 -> 46 [xlabel=1
48 -> 49 [xlabel="",tailport=e];
49 -> 50 [xlabel=1
,arrowhead=onone
,headport=w];
41 -> 124 [xlabel=1
,arrowhead=onone
,headport=w];
42 -> 43 [xlabel="",tailport=e];
44 -> 45 [xlabel="",tailport=e];
46 -> 47 [xlabel="",tailport=e];
47 -> 126 [xlabel=1
,arrowhead=onone
,headport=w];
49 -> 50 [xlabel="",tailport=e];
51 -> 49 [xlabel=1
52 -> 53 [xlabel="",tailport=e];
53 -> 56 [xlabel=1
,arrowhead=onone
,headport=w];
51 -> 53 [xlabel=1
,arrowhead=onone
,headport=w];
52 -> 51 [xlabel="",tailport=e];
53 -> 54 [xlabel="",tailport=e];
55 -> 56 [xlabel="",tailport=e];
56 -> 58 [xlabel=1
53 -> 58 [xlabel=1
,arrowhead=onone
,headport=w];
56 -> 57 [xlabel="",tailport=e];
58 -> 59 [xlabel="",tailport=e];
59 -> 60 [xlabel=1
,arrowhead=onone
,headport=w];
59 -> 62 [xlabel=1
,arrowhead=onone
,headport=w];
60 -> 61 [xlabel="",tailport=e];
62 -> 63 [xlabel="",tailport=e];
63 -> 66 [xlabel=1
,arrowhead=onone
,headport=w];
63 -> 68 [xlabel=1
,arrowhead=onone
,headport=w];
66 -> 67 [xlabel="",tailport=e];
64 -> 65 [xlabel="",tailport=e];
68 -> 69 [xlabel="",tailport=e];
69 -> 70 [xlabel=1
,arrowhead=onone
,headport=w];
69 -> 72 [xlabel=1
,arrowhead=onone
,headport=w];
70 -> 71 [xlabel="",tailport=e];
72 -> 73 [xlabel="",tailport=e];
74 -> 75 [xlabel="",tailport=e];
78 -> 79 [xlabel="",tailport=e];
79 -> 80 [xlabel=1
,arrowhead=onone
,headport=w];
80 -> 81 [xlabel="",tailport=e];
82 -> 83 [xlabel="",tailport=e];
83 -> 85 [xlabel=1
74 -> 72 [xlabel=1
,arrowhead=onone
,headport=w];
76 -> 77 [xlabel="",tailport=e];
79 -> 80 [xlabel="",tailport=e];
85 -> 86 [xlabel="",tailport=e];
87 -> 88 [xlabel="",tailport=e];
90 -> 91 [xlabel="",tailport=e];
96 -> 97 [xlabel="",tailport=e];
95 -> 96 [xlabel="",tailport=e];
98 -> 99 [xlabel="",tailport=e];
100 -> 101 [xlabel=""
,tailport=e];
102 -> 103 [xlabel=""
,tailport=e];
103 -> 106 [xlabel=1
,arrowhead=onone
,headport=w];
104 -> 102 [xlabel=1
,arrowhead=onone
,headport=w];
106 -> 107 [xlabel=""
,tailport=e];
108 -> 106 [xlabel=1
,arrowhead=onone
,headport=w];
109 -> 110 [xlabel=""
,tailport=e];
111 -> 112 [xlabel=""
,tailport=e];
113 -> 114 [xlabel=""
,tailport=e];
114 -> 117 [xlabel=1
,arrowhead=onone
,headport=w];
115 -> 113 [xlabel=1
,arrowhead=onone
,headport=w];
117 -> 118 [xlabel=""
,tailport=e];
119 -> 117 [xlabel=1
,arrowhead=onone
,headport=w];
120 -> 121 [xlabel=""
,tailport=e];
121 -> 122 [xlabel=1
110 -> 111 [xlabel=1
,arrowhead=onone
,headport=w];
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -1
View File
@@ -123,7 +123,14 @@ inventoryX c = case c of
'B' ->
[ wristArmour
, wristArmour
, autoRifle
, volleyGun 5
, tinMag
, tinMag
, tinMag
, tinMag
, tinMag
, burstRifle
, bangCone
, tinMag
, smg
, tinMag
+2
View File
@@ -39,6 +39,7 @@ data ItemUse
, _heldAim :: AimParams
, _heldParams :: HeldParams
, _heldTriggerType :: TriggerType
, _heldFrame :: Int
}
| UseEquip { _uequipEffect :: EquipEffect }
| UseAttach {_uaParams :: AttachParams}
@@ -163,6 +164,7 @@ data Muzzle = Muzzle
, _mzFlareType :: FlareType
, _mzEffect :: MuzzleEffect
, _mzAmmoPerShot :: AmmoPerShot
, _mzFrame :: Int
-- , _mzChargeRequirement :: Maybe Int
-- , _mzRecoil :: Float
-- , _mzTorque :: Float
+2 -1
View File
@@ -42,7 +42,8 @@ defaultBulletWeapon :: Item
defaultBulletWeapon =
defaultHeldItem
& itAmmoSlots .~ singleAmmo BulletAmmo
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 15 0) 0 0.01 0 PistolFlare MuzzleShootBullet (UseExactly 1)]
& itUse . heldAim . aimMuzzles .~
[Muzzle (V2 15 0) 0 0.01 0 PistolFlare MuzzleShootBullet (UseExactly 1) 0]
defaultItEffect :: ItEffect
defaultItEffect =
+1 -2
View File
@@ -1,14 +1,12 @@
module Dodge.Default.Item.Use (
module Dodge.Default.Item.Use,
module Dodge.Default.Item.Use.AimParams,
module Dodge.Default.Item.Use.Consumption,
module Dodge.Default.Item.Use.Equipment,
) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Data.Item.Use
import Dodge.Default.Item.Use.AimParams
import Dodge.Default.Item.Use.Consumption
import Dodge.Default.Item.Use.Equipment
--defaultLeftUse :: ItemUse
@@ -42,4 +40,5 @@ defaultHeldUse = UseHeld
, _weaponRepeat = []
}
, _heldTriggerType = HammerTrigger
, _heldFrame = 0
}
+1
View File
@@ -24,6 +24,7 @@ defaultAimParams =
, _mzFlareType = DefaultFlareType
, _mzEffect = MuzzleShootBullet
, _mzAmmoPerShot = UseExactly 1
, _mzFrame = 0
}
]
}
@@ -1,9 +0,0 @@
module Dodge.Default.Item.Use.Consumption where
--import Control.Lens
import Dodge.Data.Item.Use.Consumption
--import Dodge.Item.Weapon.Bullet
--import Dodge.Reloading.Action
defaultLeftLoadable :: LeftConsumption
defaultLeftLoadable = AutoRecharging 10 10 100 100
+5 -2
View File
@@ -93,12 +93,14 @@ heldEffectMuzzles t cr w =
-- need to be careful about inventory lock or item ids here
doWeaponRepetitions :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
doWeaponRepetitions itm cr = case itm ^? ldtValue . itUse . heldParams . weaponRepeat of
Just (x : xs) -> cWorld . lWorld . delayedEvents .++~ ((x : xs) <&> (,WdWdFromItCrixWdWd upitm (_crID cr) ItCrWdItemHeldEffect))
Just xs -> cWorld . lWorld . delayedEvents .++~ map f xs
_ -> id
where
upitm =
f x = (x,WdWdFromItCrixWdWd (upitm x) (_crID cr) ItCrWdItemHeldEffect)
upitm x =
itm & ldtValue . itUse . heldParams . weaponRepeat .~ []
& ldtValue . itUse . heldTriggerType .~ AutoTrigger
& ldtValue . itUse . heldFrame .~ x
applyCME :: Item -> Creature -> CumulativeMuzzleEffect -> World -> World
applyCME itm cr cme
@@ -174,6 +176,7 @@ loadMuzzle ::
Muzzle ->
(LabelDoubleTree ComposeLinkType Item, Maybe (Muzzle, Int, LabelDoubleTree ComposeLinkType Item))
loadMuzzle t@(LDT _ l _) mz = fromMaybe (t, Nothing) $ do
guard $ mz ^? mzFrame == t ^? ldtValue . itUse . heldFrame
let as = _mzAmmoSlot mz
amamount = _mzAmmoPerShot mz
(i, (_, mag)) <- findWithIx (isAmmoIntLink as . fst) l
+8 -3
View File
@@ -41,11 +41,16 @@ volleyGun i =
<*> pure PistolFlare
<*> pure MuzzleShootBullet
<*> pure (UseExactly 1)
<*> ZipList [0..i-1]
)
& itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i
& itUse . heldParams . recoil .~ 20 + 10 * fromIntegral i
& itUse . heldParams . weaponInvLock .~ i + 1
-- & itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i
-- & itUse . heldParams . recoil .~ 20 + 10 * fromIntegral i
& itUse . heldParams . torqueAfter .~ 0
& itUse . heldParams . recoil .~ 0
& itType .~ HELD (VOLLEYGUN i)
& itAmmoSlots .~ IM.fromList (zip [0..i-1] $ repeat BulletAmmo)
& itUse . heldParams . weaponRepeat .~ [1..i-1]
rifle :: Item
rifle =
@@ -90,7 +95,7 @@ miniGunX i =
& itUse . heldAim . aimTurnSpeed .~ 0.5
& itUse . heldAim . aimMuzzles
.~ replicate i
(Muzzle (V2 30 0) 0 0.05 0 MiniGunFlare MuzzleShootBullet (UseExactly 1))
(Muzzle (V2 30 0) 0 0.05 0 MiniGunFlare MuzzleShootBullet (UseExactly 1) 0)
& itUse . heldParams . recoil .~ 10 * fromIntegral i
& itUse . heldParams . torqueAfter .~ 0.04 + 0.02 * fromIntegral i
& itUse . heldParams . sidePush .~ 10 * fromIntegral i
+1 -1
View File
@@ -14,7 +14,7 @@ bangCone =
& itUse . heldDelay . rateMax .~ 20
& itUse . heldAim . aimMuzzles
.~ replicate 15
(Muzzle (V2 15 0) 0 0.5 0 DefaultFlareType MuzzleShootBullet (UseExactly 1))
(Muzzle (V2 15 0) 0 0.5 0 DefaultFlareType MuzzleShootBullet (UseExactly 1) 0)
& itUse . heldParams . muzVel .~ UniRandFloat 0.5 0.8
& itUse . heldParams . rifling .~ UniRandFloat 0.3 0.8
& itUse . heldParams . recoil .~ 150
+1
View File
@@ -36,6 +36,7 @@ launcherX i =
<*> pure DefaultFlareType
<*> pure MuzzleLauncher
<*> pure (UseExactly 1)
<*> pure 0
)
& itAmmoSlots .~ IM.fromList [(j,LauncherAmmo) | j <- [0..i-1]]
where
+1
View File
@@ -85,6 +85,7 @@ flameThrower =
, _nzCurrentWalkAngle = 0
}
(UseExactly 1)
0
]
& itAmmoSlots .~ singleAmmo GasAmmo
& itType .~ HELD FLAMETHROWER
+1 -1
View File
@@ -22,7 +22,7 @@ bangStick i =
& itType .~ HELD (BANGSTICK i)
& itUse . heldDelay . rateMax .~ 8
& itUse . heldAim . aimMuzzles
.~ [Muzzle (V2 10 0) a 0.01 0 DefaultFlareType MuzzleShootBullet (UseExactly 1)
.~ [Muzzle (V2 10 0) a 0.01 0 DefaultFlareType MuzzleShootBullet (UseExactly 1) 0
| a <- spreadAroundCenter i baseStickSpread]
baseStickSpread :: Float
-2
View File
@@ -2,8 +2,6 @@ module Dodge.Item.InventoryColor (
itemInvColor,
) where
--import Dodge.Data.Item.Use.Consumption.Ammo
import Color
import Control.Lens
import Dodge.Data.ComposedItem
+251 -259
View File
File diff suppressed because it is too large Load Diff