Implemented Enforcer (with dual option). Tweaked some offsets on junk. Added clip count displays.

Only 4 weapons remaining...
This commit is contained in:
Marisa the Magician 2018-05-27 17:13:58 +02:00
commit bef29efba3
15 changed files with 1210 additions and 88 deletions

View file

@ -135,3 +135,38 @@ decal ImpactMark
x-scale 0.25
y-scale 0.25
}
decal Pock1
{
pic pock0_t
shade "00 00 00"
x-scale 0.1
y-scale 0.1
randomflipx
randomflipy
}
decal Pock2
{
pic pock2_t
shade "00 00 00"
x-scale 0.1
y-scale 0.1
randomflipx
randomflipy
}
decal Pock3
{
pic pock4_t
shade "00 00 00"
x-scale 0.1
y-scale 0.1
randomflipx
randomflipy
}
decalgroup Pock
{
Pock1 1
Pock2 1
Pock3 1
}

View file

@ -10,6 +10,22 @@ Model "EClip"
FrameIndex ECLP A 0 0
}
Model "UTCasing"
{
Path "models"
Model 0 "Shellc_d.3d"
Skin 0 "Shellcase1.png"
Scale -0.014 0.014 0.0168
ZOffset 1
USEACTORPITCH
USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "Enforcer"
{
Path "models"
@ -35,3 +51,342 @@ Model "Enforcer"
FrameIndex ENFP B 1 0
}
Model "Enforcer"
{
Path "models"
Model 3 "Flat_d.3d"
Skin 3 "EMuz1.png"
PitchOffset 90
Scale 0.04 0.04 0.04
Offset 10.4 -25.0 -2.9
FrameIndex EMUZ A 3 0
}
Model "Enforcer"
{
Path "models"
Model 3 "Flat_d.3d"
Skin 3 "EMuz1.png"
PitchOffset 90
Scale 0.04 0.04 0.04
Offset 1.9 -25.0 -9.3
FrameIndex EMUZ B 3 0
}
Model "Enforcer"
{
Path "models"
Model 3 "Flat_d.3d"
Skin 3 "EMuz1.png"
PitchOffset 90
Scale 0.04 0.04 0.04
Offset -10.4 -25.0 -2.9
FrameIndex EMUZ C 3 0
}
Model "Enforcer"
{
Path "models"
Model 3 "Flat_d.3d"
Skin 3 "EMuz1.png"
PitchOffset 90
Scale 0.04 0.04 0.04
Offset -1.9 -25.0 -9.3
FrameIndex EMUZ D 3 0
}
Model "Enforcer"
{
Path "models"
Model 0 "AutoMR_d.3d"
SurfaceSkin 0 0 "Jtutot1.png"
SurfaceSkin 0 1 "Jtutot2.png"
SurfaceSkin 0 2 "Jtutot3.png"
SurfaceSkin 0 3 "Jtutot4.png"
Scale 0.14 0.08 0.12
Offset 8.6 -12.8 -13.5
PitchOffset 90
// Fire
FrameIndex ENFF A 0 6
FrameIndex ENFF B 0 7
FrameIndex ENFF C 0 8
FrameIndex ENFF D 0 9
FrameIndex ENFF E 0 10
FrameIndex ENFF F 0 11
FrameIndex ENFF G 0 12
FrameIndex ENFF H 0 13
FrameIndex ENFF I 0 14
FrameIndex ENFF J 0 15
// Reload
FrameIndex ENFR A 0 22
FrameIndex ENFR B 0 23
FrameIndex ENFR C 0 24
FrameIndex ENFR D 0 25
FrameIndex ENFR E 0 26
FrameIndex ENFR F 0 27
FrameIndex ENFR G 0 28
FrameIndex ENFR H 0 29
FrameIndex ENFR I 0 30
FrameIndex ENFR J 0 31
FrameIndex ENFR K 0 32
FrameIndex ENFR L 0 33
FrameIndex ENFR M 0 34
FrameIndex ENFR N 0 35
FrameIndex ENFR O 0 36
FrameIndex ENFR P 0 37
FrameIndex ENFR Q 0 38
FrameIndex ENFR R 0 39
FrameIndex ENFR S 0 40
FrameIndex ENFR T 0 41
FrameIndex ENFR U 0 42
FrameIndex ENFR V 0 43
FrameIndex ENFR W 0 44
FrameIndex ENFR X 0 45
FrameIndex ENFR Y 0 46
FrameIndex ENFR Z 0 47
FrameIndex ENR2 A 0 48
FrameIndex ENR2 B 0 49
// Select
FrameIndex ENFS A 0 60
FrameIndex ENFS B 0 61
FrameIndex ENFS C 0 62
FrameIndex ENFS D 0 63
FrameIndex ENFS E 0 64
FrameIndex ENFS F 0 65
FrameIndex ENFS G 0 66
FrameIndex ENFS H 0 67
FrameIndex ENFS I 0 68
FrameIndex ENFS J 0 69
FrameIndex ENFS K 0 70
FrameIndex ENFS L 0 71
FrameIndex ENFS M 0 72
FrameIndex ENFS N 0 73
FrameIndex ENFS O 0 74
FrameIndex ENFS P 0 75
FrameIndex ENFS Q 0 76
FrameIndex ENFS R 0 77
FrameIndex ENFS S 0 78
FrameIndex ENFS T 0 79
FrameIndex ENFS U 0 80
FrameIndex ENFS V 0 81
FrameIndex ENFS W 0 82
FrameIndex ENFS X 0 83
FrameIndex ENFS Y 0 84
FrameIndex ENFS Z 0 85
// Idle
FrameIndex ENFI A 0 86
FrameIndex ENFI B 0 87
// Twiddle
FrameIndex ENFT A 0 87
FrameIndex ENFT B 0 88
FrameIndex ENFT C 0 89
FrameIndex ENFT D 0 90
FrameIndex ENFT E 0 91
FrameIndex ENFT F 0 92
FrameIndex ENFT G 0 93
FrameIndex ENFT H 0 94
FrameIndex ENFT I 0 95
FrameIndex ENFT J 0 96
FrameIndex ENFT K 0 97
FrameIndex ENFT L 0 98
FrameIndex ENFT M 0 99
FrameIndex ENFT N 0 100
FrameIndex ENFT O 0 101
FrameIndex ENFT P 0 102
FrameIndex ENFT Q 0 103
FrameIndex ENFT R 0 104
FrameIndex ENFT S 0 105
FrameIndex ENFT T 0 106
FrameIndex ENFT U 0 107
FrameIndex ENFT V 0 108
FrameIndex ENFT W 0 109
FrameIndex ENFT X 0 110
FrameIndex ENFT Y 0 111
// Down
FrameIndex ENFD A 0 115
FrameIndex ENFD B 0 116
FrameIndex ENFD C 0 117
FrameIndex ENFD D 0 118
FrameIndex ENFD E 0 119
FrameIndex ENFD F 0 120
FrameIndex ENFD G 0 121
FrameIndex ENFD H 0 122
FrameIndex ENFD I 0 123
FrameIndex ENFD J 0 124
FrameIndex ENFD K 0 125
FrameIndex ENFD L 0 126
// T1
FrameIndex ENFA A 0 130
FrameIndex ENFA B 0 131
FrameIndex ENFA C 0 132
FrameIndex ENFA D 0 133
FrameIndex ENFA E 0 134
FrameIndex ENFA F 0 135
// Alt Fire
FrameIndex ENFA G 0 136
FrameIndex ENFA H 0 137
FrameIndex ENFA I 0 138
FrameIndex ENFA J 0 139
FrameIndex ENFA K 0 140
FrameIndex ENFA L 0 141
FrameIndex ENFA M 0 142
FrameIndex ENFA N 0 143
// T2
FrameIndex ENFA O 0 144
FrameIndex ENFA P 0 145
FrameIndex ENFA Q 0 146
FrameIndex ENFA R 0 147
FrameIndex ENFA S 0 148
FrameIndex ENFA T 0 149
FrameIndex ENFA U 0 150
}
Model "Enforcer"
{
Path "models"
Model 2 "AutoML_d.3d"
SurfaceSkin 2 0 "Jtutot1.png"
SurfaceSkin 2 1 "Jtutot2.png"
SurfaceSkin 2 2 "Jtutot3.png"
SurfaceSkin 2 3 "Jtutot4.png"
Scale 0.14 0.08 0.12
Offset -8.8 -12.8 -13.5
PitchOffset 90
// Fire
FrameIndex 2NFF A 2 6
FrameIndex 2NFF B 2 7
FrameIndex 2NFF C 2 8
FrameIndex 2NFF D 2 9
FrameIndex 2NFF E 2 10
FrameIndex 2NFF F 2 11
FrameIndex 2NFF G 2 12
FrameIndex 2NFF H 2 13
FrameIndex 2NFF I 2 14
FrameIndex 2NFF J 2 15
// Reload
FrameIndex 2NFR A 2 22
FrameIndex 2NFR B 2 23
FrameIndex 2NFR C 2 24
FrameIndex 2NFR D 2 25
FrameIndex 2NFR E 2 26
FrameIndex 2NFR F 2 27
FrameIndex 2NFR G 2 28
FrameIndex 2NFR H 2 29
FrameIndex 2NFR I 2 30
FrameIndex 2NFR J 2 31
FrameIndex 2NFR K 2 32
FrameIndex 2NFR L 2 33
FrameIndex 2NFR M 2 34
FrameIndex 2NFR N 2 35
FrameIndex 2NFR O 2 36
FrameIndex 2NFR P 2 37
FrameIndex 2NFR Q 2 38
FrameIndex 2NFR R 2 39
FrameIndex 2NFR S 2 40
FrameIndex 2NFR T 2 41
FrameIndex 2NFR U 2 42
FrameIndex 2NFR V 2 43
FrameIndex 2NFR W 2 44
FrameIndex 2NFR X 2 45
FrameIndex 2NFR Y 2 46
FrameIndex 2NFR Z 2 47
FrameIndex 2NR2 A 2 48
FrameIndex 2NR2 B 2 49
// Select
FrameIndex 2NFS A 2 60
FrameIndex 2NFS B 2 61
FrameIndex 2NFS C 2 62
FrameIndex 2NFS D 2 63
FrameIndex 2NFS E 2 64
FrameIndex 2NFS F 2 65
FrameIndex 2NFS G 2 66
FrameIndex 2NFS H 2 67
FrameIndex 2NFS I 2 68
FrameIndex 2NFS J 2 69
FrameIndex 2NFS K 2 70
FrameIndex 2NFS L 2 71
FrameIndex 2NFS M 2 72
FrameIndex 2NFS N 2 73
FrameIndex 2NFS O 2 74
FrameIndex 2NFS P 2 75
FrameIndex 2NFS Q 2 76
FrameIndex 2NFS R 2 77
FrameIndex 2NFS S 2 78
FrameIndex 2NFS T 2 79
FrameIndex 2NFS U 2 80
FrameIndex 2NFS V 2 81
FrameIndex 2NFS W 2 82
FrameIndex 2NFS X 2 83
FrameIndex 2NFS Y 2 84
FrameIndex 2NFS Z 2 85
// Idle
FrameIndex 2NFI A 2 86
FrameIndex 2NFI B 2 87
// Twiddle
FrameIndex 2NFT A 2 87
FrameIndex 2NFT B 2 88
FrameIndex 2NFT C 2 89
FrameIndex 2NFT D 2 90
FrameIndex 2NFT E 2 91
FrameIndex 2NFT F 2 92
FrameIndex 2NFT G 2 93
FrameIndex 2NFT H 2 94
FrameIndex 2NFT I 2 95
FrameIndex 2NFT J 2 96
FrameIndex 2NFT K 2 97
FrameIndex 2NFT L 2 98
FrameIndex 2NFT M 2 99
FrameIndex 2NFT N 2 100
FrameIndex 2NFT O 2 101
FrameIndex 2NFT P 2 102
FrameIndex 2NFT Q 2 103
FrameIndex 2NFT R 2 104
FrameIndex 2NFT S 2 105
FrameIndex 2NFT T 2 106
FrameIndex 2NFT U 2 107
FrameIndex 2NFT V 2 108
FrameIndex 2NFT W 2 109
FrameIndex 2NFT X 2 110
FrameIndex 2NFT Y 2 111
// Down
FrameIndex 2NFD A 2 115
FrameIndex 2NFD B 2 116
FrameIndex 2NFD C 2 117
FrameIndex 2NFD D 2 118
FrameIndex 2NFD E 2 119
FrameIndex 2NFD F 2 120
FrameIndex 2NFD G 2 121
FrameIndex 2NFD H 2 122
FrameIndex 2NFD I 2 123
FrameIndex 2NFD J 2 124
FrameIndex 2NFD K 2 125
FrameIndex 2NFD L 2 126
// T1
FrameIndex 2NFA A 2 130
FrameIndex 2NFA B 2 131
FrameIndex 2NFA C 2 132
FrameIndex 2NFA D 2 133
FrameIndex 2NFA E 2 134
FrameIndex 2NFA F 2 135
// Alt Fire
FrameIndex 2NFA G 2 136
FrameIndex 2NFA H 2 137
FrameIndex 2NFA I 2 138
FrameIndex 2NFA J 2 139
FrameIndex 2NFA K 2 140
FrameIndex 2NFA L 2 141
FrameIndex 2NFA M 2 142
FrameIndex 2NFA N 2 143
// T2
FrameIndex 2NFA O 2 144
FrameIndex 2NFA P 2 145
FrameIndex 2NFA Q 2 146
FrameIndex 2NFA R 2 147
FrameIndex 2NFA S 2 148
FrameIndex 2NFA T 2 149
FrameIndex 2NFA U 2 150
}

View file

@ -44,7 +44,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 A 0 0
}
@ -58,7 +58,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 B 0 0
}
@ -72,7 +72,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 C 0 0
}
@ -86,7 +86,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 D 0 0
}
@ -100,7 +100,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 E 0 0
}
@ -114,7 +114,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 F 0 0
}
@ -128,7 +128,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 G 0 0
}
@ -142,7 +142,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 H 0 0
}
@ -156,7 +156,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 I 0 0
}
@ -170,7 +170,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 J 0 0
}
@ -184,7 +184,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 K 0 0
}
@ -198,7 +198,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH1 L 0 0
}
@ -213,7 +213,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 A 1 0
}
@ -227,7 +227,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 B 1 0
}
@ -241,7 +241,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 C 1 0
}
@ -255,7 +255,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 D 1 0
}
@ -269,7 +269,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 E 1 0
}
@ -283,7 +283,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 F 1 0
}
@ -297,7 +297,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 G 1 0
}
@ -311,7 +311,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 H 1 0
}
@ -325,7 +325,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 I 1 0
}
@ -339,7 +339,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 J 1 0
}
@ -353,7 +353,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 K 1 0
}
@ -367,7 +367,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH2 L 1 0
}
@ -382,7 +382,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 A 2 0
}
@ -396,7 +396,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 B 2 0
}
@ -410,7 +410,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 C 2 0
}
@ -424,7 +424,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 D 2 0
}
@ -438,7 +438,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 E 2 0
}
@ -452,7 +452,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 F 2 0
}
@ -466,7 +466,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 G 2 0
}
@ -480,7 +480,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 H 2 0
}
@ -494,7 +494,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 I 2 0
}
@ -508,7 +508,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 J 2 0
}
@ -522,7 +522,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 K 2 0
}
@ -536,7 +536,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH3 L 2 0
}
@ -551,7 +551,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 A 3 0
}
@ -565,7 +565,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 B 3 0
}
@ -579,7 +579,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 C 3 0
}
@ -593,7 +593,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 D 3 0
}
@ -607,7 +607,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 E 3 0
}
@ -621,7 +621,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 F 3 0
}
@ -635,7 +635,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 G 3 0
}
@ -649,7 +649,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 H 3 0
}
@ -663,7 +663,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 I 3 0
}
@ -677,7 +677,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 J 3 0
}
@ -691,7 +691,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 K 3 0
}
@ -705,7 +705,7 @@ Model "FlakChunk"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
Rotation-Center 0 0 2
FrameIndex FCH4 L 3 0
}
@ -747,7 +747,7 @@ Model "FlakCannon"
Scale 0.08 0.08 0.08
Offset 4.0 -25.0 -7.5
FrameIndex FMUZ A 0 0
FrameIndex FMUZ A 2 0
}
Model "FlakCannon"

View file

@ -331,8 +331,8 @@ Model "UTChip"
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 0.5
ZOffset 2
Rotation-Center 0 0 0
ZOffset 1
FrameIndex CHIP A 0 0
FrameIndex CHIP B 0 1

View file

@ -45,7 +45,7 @@ Model "PulseGun"
Scale 0.08 0.08 0.08
Offset 8.5 -25.0 -4.5
FrameIndex PMUZ A 0 0
FrameIndex PMUZ A 2 0
}
Model "PulseGun"

BIN
models/EMuz1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -33,11 +33,11 @@ Currently implemented:
- Impact Hammer (slot 1)
- Chainsaw (slot 1)
- Translocator (slot 1)
- Enforcer (slot 2)
- Dual Enforcers (slot 2)
In progress:
- Enforcer (slot 2)
- Dual Enforcers (slot 2)
- Ripper (slot 6)
- Minigun (slot 7)
- Rocket Launcher (slot 9)

View file

@ -139,6 +139,16 @@ transloc/spark tdisrupt
transloc/bounce hit1
transloc/hum targeth
enforcer/select cocking
enforcer/shoot e_shot
enforcer/reload reload
enforcer/click click
bullet/casing shell2
bullet/hit1 impact1
bullet/hit2 impact2
$random bullet/hit { bullet/hit1 bullet/hit2 }
ges/hit gelhit
ges/select gelselec
ges/fire gelshot

View file

@ -1,3 +1,255 @@
Sprite "ECLPA0",1,1{}
Sprite "ENFPA0",1,1{}
Sprite "ENFPB0",1,1{}
Sprite "ENFFA0",1,1{}
Sprite "ENFFB0",1,1{}
Sprite "ENFFC0",1,1{}
Sprite "ENFFD0",1,1{}
Sprite "ENFFE0",1,1{}
Sprite "ENFFF0",1,1{}
Sprite "ENFFG0",1,1{}
Sprite "ENFFH0",1,1{}
Sprite "ENFFI0",1,1{}
Sprite "ENFFJ0",1,1{}
Sprite "ENFRA0",1,1{}
Sprite "ENFRB0",1,1{}
Sprite "ENFRC0",1,1{}
Sprite "ENFRD0",1,1{}
Sprite "ENFRE0",1,1{}
Sprite "ENFRF0",1,1{}
Sprite "ENFRG0",1,1{}
Sprite "ENFRH0",1,1{}
Sprite "ENFRI0",1,1{}
Sprite "ENFRJ0",1,1{}
Sprite "ENFRK0",1,1{}
Sprite "ENFRL0",1,1{}
Sprite "ENFRM0",1,1{}
Sprite "ENFRN0",1,1{}
Sprite "ENFRO0",1,1{}
Sprite "ENFRP0",1,1{}
Sprite "ENFRQ0",1,1{}
Sprite "ENFRR0",1,1{}
Sprite "ENFRS0",1,1{}
Sprite "ENFRT0",1,1{}
Sprite "ENFRU0",1,1{}
Sprite "ENFRV0",1,1{}
Sprite "ENFRW0",1,1{}
Sprite "ENFRX0",1,1{}
Sprite "ENFRY0",1,1{}
Sprite "ENFRZ0",1,1{}
Sprite "ENR2A0",1,1{}
Sprite "ENR2B0",1,1{}
Sprite "ENFSA0",1,1{}
Sprite "ENFSB0",1,1{}
Sprite "ENFSC0",1,1{}
Sprite "ENFSD0",1,1{}
Sprite "ENFSE0",1,1{}
Sprite "ENFSF0",1,1{}
Sprite "ENFSG0",1,1{}
Sprite "ENFSH0",1,1{}
Sprite "ENFSI0",1,1{}
Sprite "ENFSJ0",1,1{}
Sprite "ENFSK0",1,1{}
Sprite "ENFSL0",1,1{}
Sprite "ENFSM0",1,1{}
Sprite "ENFSN0",1,1{}
Sprite "ENFSO0",1,1{}
Sprite "ENFSP0",1,1{}
Sprite "ENFSQ0",1,1{}
Sprite "ENFSR0",1,1{}
Sprite "ENFSS0",1,1{}
Sprite "ENFST0",1,1{}
Sprite "ENFSU0",1,1{}
Sprite "ENFSV0",1,1{}
Sprite "ENFSW0",1,1{}
Sprite "ENFSX0",1,1{}
Sprite "ENFSY0",1,1{}
Sprite "ENFSZ0",1,1{}
Sprite "ENFIA0",1,1{}
Sprite "ENFIB0",1,1{}
Sprite "ENFTA0",1,1{}
Sprite "ENFTB0",1,1{}
Sprite "ENFTC0",1,1{}
Sprite "ENFTD0",1,1{}
Sprite "ENFTE0",1,1{}
Sprite "ENFTF0",1,1{}
Sprite "ENFTG0",1,1{}
Sprite "ENFTH0",1,1{}
Sprite "ENFTI0",1,1{}
Sprite "ENFTJ0",1,1{}
Sprite "ENFTK0",1,1{}
Sprite "ENFTL0",1,1{}
Sprite "ENFTM0",1,1{}
Sprite "ENFTN0",1,1{}
Sprite "ENFTO0",1,1{}
Sprite "ENFTP0",1,1{}
Sprite "ENFTQ0",1,1{}
Sprite "ENFTR0",1,1{}
Sprite "ENFTS0",1,1{}
Sprite "ENFTT0",1,1{}
Sprite "ENFTU0",1,1{}
Sprite "ENFTV0",1,1{}
Sprite "ENFTW0",1,1{}
Sprite "ENFTX0",1,1{}
Sprite "ENFTY0",1,1{}
Sprite "ENFDA0",1,1{}
Sprite "ENFDB0",1,1{}
Sprite "ENFDC0",1,1{}
Sprite "ENFDD0",1,1{}
Sprite "ENFDE0",1,1{}
Sprite "ENFDF0",1,1{}
Sprite "ENFDG0",1,1{}
Sprite "ENFDH0",1,1{}
Sprite "ENFDI0",1,1{}
Sprite "ENFDJ0",1,1{}
Sprite "ENFDK0",1,1{}
Sprite "ENFDL0",1,1{}
Sprite "ENFAA0",1,1{}
Sprite "ENFAB0",1,1{}
Sprite "ENFAC0",1,1{}
Sprite "ENFAD0",1,1{}
Sprite "ENFAE0",1,1{}
Sprite "ENFAF0",1,1{}
Sprite "ENFAG0",1,1{}
Sprite "ENFAH0",1,1{}
Sprite "ENFAI0",1,1{}
Sprite "ENFAJ0",1,1{}
Sprite "ENFAK0",1,1{}
Sprite "ENFAL0",1,1{}
Sprite "ENFAM0",1,1{}
Sprite "ENFAN0",1,1{}
Sprite "ENFAO0",1,1{}
Sprite "ENFAP0",1,1{}
Sprite "ENFAQ0",1,1{}
Sprite "ENFAR0",1,1{}
Sprite "ENFAS0",1,1{}
Sprite "ENFAT0",1,1{}
Sprite "ENFAU0",1,1{}
Sprite "2NFFA0",1,1{}
Sprite "2NFFB0",1,1{}
Sprite "2NFFC0",1,1{}
Sprite "2NFFD0",1,1{}
Sprite "2NFFE0",1,1{}
Sprite "2NFFF0",1,1{}
Sprite "2NFFG0",1,1{}
Sprite "2NFFH0",1,1{}
Sprite "2NFFI0",1,1{}
Sprite "2NFFJ0",1,1{}
Sprite "2NFRA0",1,1{}
Sprite "2NFRB0",1,1{}
Sprite "2NFRC0",1,1{}
Sprite "2NFRD0",1,1{}
Sprite "2NFRE0",1,1{}
Sprite "2NFRF0",1,1{}
Sprite "2NFRG0",1,1{}
Sprite "2NFRH0",1,1{}
Sprite "2NFRI0",1,1{}
Sprite "2NFRJ0",1,1{}
Sprite "2NFRK0",1,1{}
Sprite "2NFRL0",1,1{}
Sprite "2NFRM0",1,1{}
Sprite "2NFRN0",1,1{}
Sprite "2NFRO0",1,1{}
Sprite "2NFRP0",1,1{}
Sprite "2NFRQ0",1,1{}
Sprite "2NFRR0",1,1{}
Sprite "2NFRS0",1,1{}
Sprite "2NFRT0",1,1{}
Sprite "2NFRU0",1,1{}
Sprite "2NFRV0",1,1{}
Sprite "2NFRW0",1,1{}
Sprite "2NFRX0",1,1{}
Sprite "2NFRY0",1,1{}
Sprite "2NFRZ0",1,1{}
Sprite "2NR2A0",1,1{}
Sprite "2NR2B0",1,1{}
Sprite "2NFSA0",1,1{}
Sprite "2NFSB0",1,1{}
Sprite "2NFSC0",1,1{}
Sprite "2NFSD0",1,1{}
Sprite "2NFSE0",1,1{}
Sprite "2NFSF0",1,1{}
Sprite "2NFSG0",1,1{}
Sprite "2NFSH0",1,1{}
Sprite "2NFSI0",1,1{}
Sprite "2NFSJ0",1,1{}
Sprite "2NFSK0",1,1{}
Sprite "2NFSL0",1,1{}
Sprite "2NFSM0",1,1{}
Sprite "2NFSN0",1,1{}
Sprite "2NFSO0",1,1{}
Sprite "2NFSP0",1,1{}
Sprite "2NFSQ0",1,1{}
Sprite "2NFSR0",1,1{}
Sprite "2NFSS0",1,1{}
Sprite "2NFST0",1,1{}
Sprite "2NFSU0",1,1{}
Sprite "2NFSV0",1,1{}
Sprite "2NFSW0",1,1{}
Sprite "2NFSX0",1,1{}
Sprite "2NFSY0",1,1{}
Sprite "2NFSZ0",1,1{}
Sprite "2NFIA0",1,1{}
Sprite "2NFIB0",1,1{}
Sprite "2NFTA0",1,1{}
Sprite "2NFTB0",1,1{}
Sprite "2NFTC0",1,1{}
Sprite "2NFTD0",1,1{}
Sprite "2NFTE0",1,1{}
Sprite "2NFTF0",1,1{}
Sprite "2NFTG0",1,1{}
Sprite "2NFTH0",1,1{}
Sprite "2NFTI0",1,1{}
Sprite "2NFTJ0",1,1{}
Sprite "2NFTK0",1,1{}
Sprite "2NFTL0",1,1{}
Sprite "2NFTM0",1,1{}
Sprite "2NFTN0",1,1{}
Sprite "2NFTO0",1,1{}
Sprite "2NFTP0",1,1{}
Sprite "2NFTQ0",1,1{}
Sprite "2NFTR0",1,1{}
Sprite "2NFTS0",1,1{}
Sprite "2NFTT0",1,1{}
Sprite "2NFTU0",1,1{}
Sprite "2NFTV0",1,1{}
Sprite "2NFTW0",1,1{}
Sprite "2NFTX0",1,1{}
Sprite "2NFTY0",1,1{}
Sprite "2NFDA0",1,1{}
Sprite "2NFDB0",1,1{}
Sprite "2NFDC0",1,1{}
Sprite "2NFDD0",1,1{}
Sprite "2NFDE0",1,1{}
Sprite "2NFDF0",1,1{}
Sprite "2NFDG0",1,1{}
Sprite "2NFDH0",1,1{}
Sprite "2NFDI0",1,1{}
Sprite "2NFDJ0",1,1{}
Sprite "2NFDK0",1,1{}
Sprite "2NFDL0",1,1{}
Sprite "2NFAA0",1,1{}
Sprite "2NFAB0",1,1{}
Sprite "2NFAC0",1,1{}
Sprite "2NFAD0",1,1{}
Sprite "2NFAE0",1,1{}
Sprite "2NFAF0",1,1{}
Sprite "2NFAG0",1,1{}
Sprite "2NFAH0",1,1{}
Sprite "2NFAI0",1,1{}
Sprite "2NFAJ0",1,1{}
Sprite "2NFAK0",1,1{}
Sprite "2NFAL0",1,1{}
Sprite "2NFAM0",1,1{}
Sprite "2NFAN0",1,1{}
Sprite "2NFAO0",1,1{}
Sprite "2NFAP0",1,1{}
Sprite "2NFAQ0",1,1{}
Sprite "2NFAR0",1,1{}
Sprite "2NFAS0",1,1{}
Sprite "2NFAT0",1,1{}
Sprite "2NFAU0",1,1{}
Sprite "EMUZA0",1,1{}
Sprite "EMUZB0",1,1{}
Sprite "EMUZC0",1,1{}
Sprite "EMUZD0",1,1{}

View file

@ -58,7 +58,8 @@ Class UTChainsaw : UTWeapon replaces Chainsaw
LineTrace(angle,90,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
d.HitActor.DamageMobj(invoker,self,20,'slashed');
int dmg = Random[Chainsaw](16,22);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'slashed');
d.HitActor.vel -= x*(500/d.HitActor.mass);
vel += x*(100/mass);
if ( d.HitActor.player ) d.HitActor.A_QuakeEx(5,5,5,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25);
@ -70,8 +71,8 @@ Class UTChainsaw : UTWeapon replaces Chainsaw
}
else
{
d.HitActor.TraceBleed(20,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(-d.HitDir.y,-d.HitDir.x),20);
d.HitActor.TraceBleed(dmg,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
}
}
else if ( d.HitType != TRACE_HitNone )
@ -94,7 +95,8 @@ Class UTChainsaw : UTWeapon replaces Chainsaw
LineTrace(angle,90,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
d.HitActor.DamageMobj(invoker,self,110,'Decapitated');
int dmg = Random[Chainsaw](100,110);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Decapitated');
d.HitActor.vel = -y*(1200/d.HitActor.mass);
vel += x*(100/mass);
if ( d.HitActor.player ) d.HitActor.A_QuakeEx(5,5,5,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25);
@ -106,8 +108,8 @@ Class UTChainsaw : UTWeapon replaces Chainsaw
}
else
{
d.HitActor.TraceBleed(110,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(-d.HitDir.y,-d.HitDir.x),110);
d.HitActor.TraceBleed(dmg,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
}
}
else if ( d.HitType != TRACE_HitNone )

View file

@ -15,23 +15,154 @@ Class EClip : MiniAmmo replaces Clip
}
}
Class EnforcerLight : DynamicLight
{
int cnt;
Default
{
DynamicLight.Type "Point";
args 255,224,64,150;
}
override void Tick()
{
Super.Tick();
if ( !target )
{
Destroy();
return;
}
if ( target.player ) SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true);
else SetOrigin(target.pos,true);
if ( cnt++ > 2 ) Destroy();
}
}
Class BulletImpact : Actor
{
Default
{
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_SprayDecal("Pock",20);
int numpt = Random[Enforcer](5,10);
Vector3 x = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (-x+(FRandom[Enforcer](-.8,.8),FRandom[Enforcer](-.8,.8),FRandom[Enforcer](-.8,.8))).unit()*FRandom[Enforcer](0.1,1.2);
let s = Spawn("UTSmoke",pos);
s.vel = pvel;
s.SetShade(Color(1,1,1)*Random[Enforcer](128,192));
}
numpt = Random[Enforcer](3,8);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1)).unit()*FRandom[Enforcer](2,8);
let s = Spawn("UTSpark",pos);
s.vel = pvel;
}
numpt = Random[Enforcer](2,5);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1)).unit()*FRandom[Enforcer](2,8);
let s = Spawn("UTChip",pos);
s.vel = pvel;
}
A_PlaySound("bullet/hit",CHAN_VOICE,attenuation:4.0);
Destroy();
}
}
Class UTCasing : Actor
{
int deadtimer;
double pitchvel, anglevel;
Default
{
Radius 2;
Height 0;
+NOBLOCKMAP;
+MISSILE;
+MOVEWITHSECTOR;
+THRUACTORS;
+USEBOUNCESTATE;
BounceType "Doom";
BounceFactor 0.65;
BounceSound "bullet/casing";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
deadtimer = 0;
pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
}
override void Tick()
{
Super.Tick();
if ( InStateSequence(CurState,ResolveState("Death")) )
{
deadtimer++;
if ( deadtimer > 300 ) A_FadeOut(0.05);
return;
}
}
States
{
Spawn:
PCAS A 1
{
A_SetAngle(angle+anglevel,SPF_INTERPOLATE);
A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE);
}
Loop;
Bounce:
PCAS A 0
{
pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
vel = (vel.unit()+(FRandom[Junk](-.2,.2),FRandom[Junk](-.2,.2),FRandom[Junk](-.2,.2))).unit()*vel.length();
}
Goto Spawn;
Death:
PCAS A -1
{
A_SetPitch(0);
A_SetRoll(FRandom[Junk](0,360));
}
Stop;
}
}
Class Enforcer : UTWeapon replaces Pistol
{
bool Akimbo;
int ClipCount, SlaveClipCount;
bool SlaveActive, SlaveDown, SlaveReload, SlaveAltFire;
int SlaveRefire;
override string PickupMessage()
property ClipCount : ClipCount;
property SlaveClipCount : SlaveClipCount;
override void PostRender()
{
if ( Owner.CountInv(GetClass()) ) return "You picked up another Enforcer!";
else return PickupMsg;
if ( !CVar.GetCVar('flak_enforcerreload').GetBool() ) return;
if ( Amount > 1 ) Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,Screen.GetHeight()*0.88,String.Format("L Clip: % 2d / 20\nR Clip: % 2d / 20",slaveclipcount,clipcount));
else Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,Screen.GetHeight()*0.88,String.Format("Clip: % 2d / 20",clipcount));
}
override bool HandlePickup (Inventory item)
{
if ( item.GetClass() == GetClass() )
{
if ( !Enforcer(item).Akimbo )
if ( item.Amount == 1 )
{
Enforcer(item).Akimbo = true;
item.bPickupGood = true;
item.SetTag("Dual Enforcers");
}
@ -42,15 +173,183 @@ Class Enforcer : UTWeapon replaces Pistol
override Inventory CreateTossable( int amt )
{
// TODO separate drops
return Super.CreateTossable(amt);
Inventory inv = Super.CreateTossable(amt);
if ( inv )
{
SetTag("Enforcer");
inv.SetTag("Enforcer");
if ( Owner && (Owner.player.ReadyWeapon == self) )
{
// delete the slave overlay
PSprite psp;
for ( psp = Owner.player.psprites; psp; psp = psp.next )
{
if ( (psp.Caller == self) && (psp.id == 2) ) psp.Destroy();
slaveactive = false;
slavedown = false;
}
}
}
return inv;
}
action void A_EnforcerRefire( statelabel flash = null, bool slave = false )
{
Weapon weap = Weapon(invoker);
if ( !weap || !player ) return;
if ( slave )
{
if ( invoker.slaveclipcount < 5 ) A_PlaySound("enforcer/click",CHAN_7);
if ( (invoker.slaveclipcount <= 0) || (weap.Ammo1.Amount <= 0) )
{
invoker.slaverefire = 0;
return;
}
bool pending = (player.PendingWeapon != WP_NOCHANGE) && (player.WeaponState & WF_REFIRESWITCHOK);
if ( (player.cmd.buttons&BT_ATTACK) && !invoker.slavealtfire && !pending && (player.health > 0) )
{
invoker.slaverefire++;
if ( player.ReadyWeapon.CheckAmmo(Weapon.PrimaryFire,true) )
player.setpsprite(2,flash?ResolveState(flash):ResolveState("LeftHold"));
}
else if ( (player.cmd.buttons&BT_ALTATTACK) && invoker.slavealtfire && !pending && (player.health > 0) )
{
invoker.slaverefire++;
if ( player.ReadyWeapon.CheckAmmo(Weapon.AltFire,true) )
player.setpsprite(2,flash?ResolveState(flash):ResolveState("LeftAltHold"));
}
else
{
invoker.slaverefire = 0;
player.ReadyWeapon.CheckAmmo(invoker.slavealtfire?Weapon.AltFire:Weapon.PrimaryFire,true);
}
}
else
{
if ( invoker.clipcount < 5 ) A_PlaySound("enforcer/click",CHAN_WEAPON);
if ( (invoker.clipcount <= 0) || (weap.Ammo1.Amount <= 0) )
{
A_ClearRefire();
return;
}
A_Refire(flash);
}
}
action void A_LeftWeaponReady()
{
Weapon weap = Weapon(invoker);
if ( !weap || !player ) return;
if ( player.cmd.buttons&BT_ATTACK && !player.ReadyWeapon.bAltFire )
{
invoker.slaverefire = 0;
invoker.slavealtfire = false;
player.setpsprite(2,ResolveState("LeftFire"));
}
else if ( player.cmd.buttons&BT_ALTATTACK && player.ReadyWeapon.bAltFire )
{
invoker.slaverefire = 0;
invoker.slavealtfire = true;
player.setpsprite(2,ResolveState("LeftAltFire"));
}
}
action void A_EnforcerFire( bool alt = false, bool slave = false )
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
if ( slave )
{
invoker.slaveclipcount--;
if ( !CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.slaveclipcount <=0) ) invoker.slaveclipcount = Min(20,weap.Ammo1.Amount);
}
else
{
invoker.clipcount--;
if ( !CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.clipcount <=0) ) invoker.clipcount = Min(20,weap.Ammo1.Amount);
}
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(32,255,128,0),1);
A_PlaySound("enforcer/shoot",slave?CHAN_7:CHAN_WEAPON);
A_AlertMonsters();
A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
if ( slave )
{
if ( alt ) A_Overlay(-3,"LeftAltMuzzleFlash");
else A_Overlay(-3,"LeftMuzzleFlash");
A_OverlayFlags(-3,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-3,STYLE_Add);
}
else
{
if ( alt ) A_Overlay(-2,"AltMuzzleFlash");
else A_Overlay(-2,"MuzzleFlash");
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-2,STYLE_Add);
}
Vector3 x, y, z;
double a;
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x;
int ydir = slave?-1:1;
if ( alt ) origin = origin-z*9.0+ydir*y*1.0;
else origin = origin-z*2.0+ydir*y*6.0;
double ang = angle;
double pt = BulletSlope();
if ( alt )
{
ang += FRandom[Enforcer](-3,3);
pt += FRandom[Enforcer](-3,3);
}
else
{
ang += FRandom[Enforcer](-0.4,0.4);
pt += FRandom[Enforcer](-0.4,0.4);
}
FLineTraceData d;
LineTrace(ang,10000,pt,TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Enforcer](15,20);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot');
if ( d.HitActor.bNOBLOOD )
{
let p = Spawn("BulletImpact",d.HitLocation-d.HitDir*4);
p.angle = atan2(d.HitDir.y,d.HitDir.x);
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);
}
}
else if ( d.HitType != TRACE_HitNone )
{
let p = Spawn("BulletImpact",d.HitLocation-d.HitDir*4);
p.angle = atan2(d.HitDir.y,d.HitDir.x);
p.pitch = asin(-d.HitDir.z);
if ( d.HitLine ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation);
}
origin += x*8.0+ydir*y*6.0-z*2.0;
let c = Spawn("UTCasing",origin);
c.vel = x*FRandom[Junk](-2,2)+y*ydir*FRandom[Junk](3,6)+z*FRandom[Junk](3,5);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )
{
if ( Amount > 1 ) return "%k riddled %o full of holes with the Dual Enforcers.";
return "%k riddled %o full of holes with the Enforcer.";
}
Default
{
Tag "Enforcer";
Inventory.PickupMessage "You picked up an Enforcer.";
Weapon.UpSound "";
Inventory.PickupMessage "You picked up another Enforcer!";
Inventory.MaxAmount 2;
Weapon.UpSound "enforcer/select";
Weapon.SlotNumber 2;
Weapon.SelectionOrder 8;
Weapon.AmmoType "MiniAmmo";
@ -58,6 +357,8 @@ Class Enforcer : UTWeapon replaces Pistol
Weapon.AmmoType2 "MiniAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 30;
Enforcer.ClipCount 20;
Enforcer.SlaveClipCount 20;
}
States
{
@ -66,5 +367,168 @@ Class Enforcer : UTWeapon replaces Pistol
Stop;
ENFP B -1;
Stop;
Select:
ENFS A 1 A_Raise(int.max);
Ready:
ENFS A 0
{
invoker.slavedown = false;
if ( !invoker.slaveactive && (CountInv("Enforcer") > 1) )
A_Overlay(2,"LeftReady");
}
ENFS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
Idle:
ENFI A 0 A_Overlay(-9999,"Dummy");
ENFI AB 30;
ENFI A 0 A_Jump(50,"Twiddle");
Goto Idle+1;
LeftReady:
2NFS A 0
{
A_PlaySound("enforcer/select",CHAN_7);
invoker.slaveactive = true;
}
2NFS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
LeftIdle:
2NFI A 0 A_Overlay(-9998,"LeftDummy");
2NFI AB 30;
2NFI A 0 A_Jump(50,"LeftTwiddle");
Goto LeftIdle+1;
Twiddle:
ENFT ABCDEFGHIJKLMNOPQRSTUVWXY 2;
Goto Idle+1;
LeftTwiddle:
2NFT ABCDEFGHIJKLMNOPQRSTUVWXY 2;
Goto LeftIdle+1;
Dummy:
TNT1 A 1
{
if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) A_Overlay(PSP_WEAPON,"Reload");
if ( CVar.GetCVar('flak_enforcerreload').GetBool() && ((invoker.clipcount < min(20,invoker.Ammo1.Amount)) || (invoker.slaveclipcount < min(20,invoker.Ammo1.Amount))) ) A_WeaponReady(WRF_ALLOWRELOAD);
else A_WeaponReady();
if ( !invoker.slaveactive && (CountInv("Enforcer") > 1) ) A_Overlay(2,"LeftReady");
}
Wait;
LeftDummy:
TNT1 A 1
{
if ( health <= 0 )
{
invoker.slaveactive = false;
A_Overlay(2,"LeftDeselect");
}
if ( CVar.GetCVar('flak_enforcerreload').GetBool() && (invoker.slavereload || (invoker.slaveclipcount < 0)) ) A_Overlay(2,"LeftReload");
if ( invoker.slavedown ) A_Overlay(2,"LeftDeselect");
A_LeftWeaponReady();
}
Wait;
Fire:
ENFF A 0 A_Overlay(-9999,"Null");
Hold:
ENFF A 0 A_EnforcerFire();
ENFF ABCDEFGHI 1;
ENFF J 3 A_EnforcerRefire();
Goto Idle;
LeftFire:
2NFI A 0 A_Overlay(-9998,"Null");
2NFI A 1 A_SetTics(Random[Enforcer](0,5));
LeftHold:
2NFF A 0 A_EnforcerFire(false,true);
2NFF ABCDEFGHI 1;
2NFF J 3 A_EnforcerRefire("LeftHold",true);
Goto LeftIdle;
AltFire:
ENFA A 0 A_Overlay(-9999,"Null");
ENFA ABCDEF 1;
AltHold:
ENFA G 0 A_EnforcerFire(true);
ENFA GHIJKLMN 1;
ENFA G 0 A_EnforcerRefire();
ENFA OPQRSTU 1;
Goto Idle;
LeftAltFire:
2NFI A 0 A_Overlay(-9998,"Null");
2NFI A 1 A_SetTics(Random[Enforcer](0,5));
2NFI A 0;
2NFA ABCDEF 1;
LeftAltHold:
2NFA G 0 A_EnforcerFire(true,true);
2NFA GHIJKLMN 1;
2NFA G 0 A_EnforcerRefire("LeftAltHold",true);
2NFA OPQRSTU 1;
Goto LeftIdle;
Reload:
ENFR A 0
{
invoker.slavereload = ((player.cmd.buttons&BT_RELOAD)&&(invoker.slaveclipcount < min(20,invoker.Ammo1.Amount)))||(invoker.slaveclipcount <= 0);
return A_JumpIf(invoker.clipcount>=min(20,invoker.Ammo1.Amount),"Idle");
}
ENFR A 0
{
invoker.clipcount = Min(20,invoker.Ammo1.Amount);
A_Overlay(-9999,"Null");
A_PlaySound("enforcer/click",CHAN_WEAPON);
}
ENFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
ENR2 AB 1;
ENR2 B 30 A_PlaySound("enforcer/reload",CHAN_WEAPON);
ENFS A 0 A_PlaySound("enforcer/select",CHAN_WEAPON);
Goto Ready;
LeftReload:
2NFR A 0
{
invoker.slaveclipcount = Min(20,invoker.Ammo1.Amount);
invoker.slavereload = false;
A_Overlay(-9998,"Null");
A_PlaySound("enforcer/click",CHAN_7);
}
2NFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
2NR2 AB 1;
2NR2 B 30 A_PlaySound("enforcer/reload",CHAN_7);
2NFS A 0 A_PlaySound("enforcer/select",CHAN_7);
Goto LeftReady;
Deselect:
ENFI A 1 { invoker.slavedown = true; }
ENFD A 0 A_Overlay(-9999,"Null");
ENFD A 0 A_JumpIf(invoker.slaveactive,"Deselect");
ENFD ABCDEFGHIJKL 1;
ENFD L 1 A_Lower(int.max);
Wait;
LeftDeselect:
2NFD A 0
{
A_Overlay(-9998,"Null");
invoker.slaveactive = false;
}
2NFD ABCDEFGHIJKL 1;
Stop;
MuzzleFlash:
EMUZ A 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AltMuzzleFlash:
EMUZ B 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
LeftMuzzleFlash:
EMUZ C 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
LeftAltMuzzleFlash:
EMUZ D 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
}
}

View file

@ -461,14 +461,7 @@ Class FlakLight : DynamicLight
Default
{
DynamicLight.Type "Point";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
args[LIGHT_INTENSITY] = 150;
args[LIGHT_RED] = 255;
args[LIGHT_GREEN] = 224;
args[LIGHT_BLUE] = 128;
args 255,224,128,150;
}
override void Tick()
{

View file

@ -75,7 +75,8 @@ Class ImpactHammer : UTWeapon replaces Fist
LineTrace(angle,80,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
d.HitActor.DamageMobj(invoker,self,60*realcharge,'impact');
int dmg = Random[Impact](50,60)*realcharge;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact');
d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge;
if ( d.HitActor.bNOBLOOD )
{
@ -85,15 +86,16 @@ Class ImpactHammer : UTWeapon replaces Fist
}
else
{
d.HitActor.TraceBleed(60*realcharge,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(-d.HitDir.y,-d.HitDir.x),60*realcharge);
d.HitActor.TraceBleed(dmg,invoker);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
}
}
else if ( d.HitType != TRACE_HitNone )
{
realcharge = max(1.0,realcharge);
DamageMobj(invoker,self,24*realcharge,'impact'); // It's a flat damage of 36 on UT, but I think it's more fair for it to scale
TraceBleed(24*realcharge,invoker);
int dmg = Random[Impact](16,24)*realcharge; // It's a flat damage of 36 on UT, but I think it's more fair for it to scale
dmg = DamageMobj(invoker,self,dmg,'impact');
TraceBleed(dmg,invoker);
vel -= x*(1200/mass)*realcharge;
let p = Spawn("HammerImpact",d.HitLocation-d.HitDir*4);
p.angle = atan2(d.HitDir.y,d.HitDir.x);
@ -135,12 +137,14 @@ Class ImpactHammer : UTWeapon replaces Fist
double dscale = d.Distance/180.;
if ( d.HitType == TRACE_HitActor )
{
d.HitActor.DamageMobj(invoker,self,20*dscale,'impact');
int dmg = Random[Impact](16,20)*dscale;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact');
d.HitActor.vel = x*(500/d.HitActor.mass)*dscale;
}
else if ( d.HitType != TRACE_HitNone )
{
DamageMobj(invoker,self,24*dscale,'impact');
int dmg = Random[Impact](16,24)*dscale;
dmg = DamageMobj(invoker,self,dmg,'impact');
vel -= x*(600/mass)*dscale;
if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4);
}

View file

@ -330,6 +330,12 @@ Class PulseGun : UTWeapon
Property ClipCount : clipcount;
override void PostRender()
{
if ( !CVar.GetCVar('flak_pulsereload').GetBool() ) return;
Screen.DrawText(confont,Font.CR_GREEN,Screen.GetWidth()*0.01,Screen.GetHeight()*0.88,String.Format("Clip: % 2d / 50",clipcount));
}
action void A_Reloading()
{
Weapon weap = Weapon(invoker);

View file

@ -2,9 +2,10 @@ Class UTPlayer : DoomPlayer
{
Default
{
Player.StartItem "ImpactHammer";
Player.StartItem "Translocator";
Player.StartItem "MiniAmmo", 30;
Player.StartItem "Enforcer";
Player.StartItem "Translocator";
Player.StartItem "ImpactHammer";
}
// Have to modify the give cheat to handle UT armor