Finished biorifle, began work on pulsegun.
Added some extra particle effects just for kicks. Made various actors freeze-aware. Tweaked a couple things here and there.
BIN
brightmaps/AmmoLedBase.png
Normal file
|
After Width: | Height: | Size: 246 B |
BIN
brightmaps/FlakAmmoLEDBase.png
Normal file
|
After Width: | Height: | Size: 135 B |
|
Before Width: | Height: | Size: 819 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 141 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 589 B |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 5.9 KiB |
BIN
brightmaps/JPammo_01.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
brightmaps/JPulseGun_02.png
Normal file
|
After Width: | Height: | Size: 683 B |
25
decaldef.txt
|
|
@ -25,6 +25,31 @@ decalgroup WallCrack
|
||||||
WallCrack2 1
|
WallCrack2 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decal BioSplat1
|
||||||
|
{
|
||||||
|
pic biosplat
|
||||||
|
shade "20 80 18"
|
||||||
|
x-scale 0.25
|
||||||
|
y-scale 0.25
|
||||||
|
randomflipx
|
||||||
|
randomflipy
|
||||||
|
}
|
||||||
|
decal BioSplat2
|
||||||
|
{
|
||||||
|
pic biospla2
|
||||||
|
shade "20 80 18"
|
||||||
|
x-scale 0.25
|
||||||
|
y-scale 0.25
|
||||||
|
randomflipx
|
||||||
|
randomflipy
|
||||||
|
}
|
||||||
|
|
||||||
|
decalgroup BioSplat
|
||||||
|
{
|
||||||
|
BioSplat1 1
|
||||||
|
BioSplat2 1
|
||||||
|
}
|
||||||
|
|
||||||
decal RocketBlast
|
decal RocketBlast
|
||||||
{
|
{
|
||||||
pic rcktblst
|
pic rcktblst
|
||||||
|
|
|
||||||
20
gldefs.txt
|
|
@ -58,3 +58,23 @@ Brightmap Texture "models/Jwhpick1.png"
|
||||||
{
|
{
|
||||||
Map "brightmaps/Jwhpick1.png"
|
Map "brightmaps/Jwhpick1.png"
|
||||||
}
|
}
|
||||||
|
Brightmap Texture "models/JPammo_01.png"
|
||||||
|
{
|
||||||
|
Map "brightmaps/JPammo_01.png"
|
||||||
|
}
|
||||||
|
Brightmap Texture "models/JPulseGun_02.png"
|
||||||
|
{
|
||||||
|
Map "brightmaps/JPulseGun_02.png"
|
||||||
|
}
|
||||||
|
Brightmap Texture "models/JPulsePickup_01.png"
|
||||||
|
{
|
||||||
|
Map "brightmaps/JPulseGun_02.png"
|
||||||
|
}
|
||||||
|
Brightmap Texture "models/AmmoLedBase.png"
|
||||||
|
{
|
||||||
|
Map "brightmaps/AmmoLedBase.png"
|
||||||
|
}
|
||||||
|
Brightmap Texture "models/FlakAmmoLEDBase.png"
|
||||||
|
{
|
||||||
|
Map "brightmaps/FlakAmmoLEDBase.png"
|
||||||
|
}
|
||||||
BIN
graphics/biospla2.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
graphics/biosplat.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
graphics/energymk.png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
431
modeldef.txt
|
|
@ -20,7 +20,150 @@ Model "BioGel"
|
||||||
Skin 0 "Jgreen.png"
|
Skin 0 "Jgreen.png"
|
||||||
Scale 0.08 0.08 0.08
|
Scale 0.08 0.08 0.08
|
||||||
RollOffset 90
|
RollOffset 90
|
||||||
DONTCULLBACKFACES
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
FrameIndex GELF A 0 0
|
||||||
|
FrameIndex GELF B 0 1
|
||||||
|
FrameIndex GELF C 0 2
|
||||||
|
FrameIndex GELF D 0 3
|
||||||
|
FrameIndex GELF E 0 4
|
||||||
|
FrameIndex GELF F 0 5
|
||||||
|
FrameIndex GELF G 0 6
|
||||||
|
FrameIndex GELF H 0 7
|
||||||
|
FrameIndex GELF I 0 8
|
||||||
|
FrameIndex GELF J 0 9
|
||||||
|
FrameIndex GELF K 0 10
|
||||||
|
FrameIndex GELF L 0 11
|
||||||
|
FrameIndex GELF M 0 12
|
||||||
|
// Hit
|
||||||
|
FrameIndex GELH A 0 14
|
||||||
|
FrameIndex GELH B 0 15
|
||||||
|
FrameIndex GELH C 0 16
|
||||||
|
FrameIndex GELH D 0 17
|
||||||
|
FrameIndex GELH E 0 18
|
||||||
|
FrameIndex GELH F 0 19
|
||||||
|
FrameIndex GELH G 0 20
|
||||||
|
FrameIndex GELH H 0 21
|
||||||
|
FrameIndex GELH I 0 22
|
||||||
|
FrameIndex GELH J 0 23
|
||||||
|
// Drip
|
||||||
|
FrameIndex GELD A 0 24
|
||||||
|
FrameIndex GELD B 0 25
|
||||||
|
FrameIndex GELD C 0 26
|
||||||
|
FrameIndex GELD D 0 27
|
||||||
|
FrameIndex GELD E 0 28
|
||||||
|
FrameIndex GELD F 0 29
|
||||||
|
FrameIndex GELD G 0 30
|
||||||
|
FrameIndex GELD H 0 31
|
||||||
|
FrameIndex GELD I 0 32
|
||||||
|
FrameIndex GELD J 0 33
|
||||||
|
FrameIndex GELD K 0 34
|
||||||
|
FrameIndex GELD L 0 35
|
||||||
|
FrameIndex GELD M 0 36
|
||||||
|
// Slide
|
||||||
|
FrameIndex GELS A 0 37
|
||||||
|
FrameIndex GELS B 0 38
|
||||||
|
FrameIndex GELS C 0 39
|
||||||
|
FrameIndex GELS D 0 40
|
||||||
|
FrameIndex GELS E 0 41
|
||||||
|
FrameIndex GELS F 0 42
|
||||||
|
FrameIndex GELS G 0 43
|
||||||
|
// Shrivel
|
||||||
|
FrameIndex GELX A 0 44
|
||||||
|
FrameIndex GELX B 0 45
|
||||||
|
FrameIndex GELX C 0 46
|
||||||
|
FrameIndex GELX D 0 47
|
||||||
|
FrameIndex GELX E 0 48
|
||||||
|
FrameIndex GELX F 0 49
|
||||||
|
FrameIndex GELX G 0 50
|
||||||
|
FrameIndex GELX H 0 51
|
||||||
|
FrameIndex GELX I 0 52
|
||||||
|
FrameIndex GELX J 0 53
|
||||||
|
FrameIndex GELX K 0 54
|
||||||
|
FrameIndex GELX L 0 55
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "BioSplash"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "BioGelm_d.3d"
|
||||||
|
Skin 0 "Jgreen.png"
|
||||||
|
Scale 0.08 0.08 0.08
|
||||||
|
RollOffset 90
|
||||||
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
FrameIndex GELF A 0 0
|
||||||
|
FrameIndex GELF B 0 1
|
||||||
|
FrameIndex GELF C 0 2
|
||||||
|
FrameIndex GELF D 0 3
|
||||||
|
FrameIndex GELF E 0 4
|
||||||
|
FrameIndex GELF F 0 5
|
||||||
|
FrameIndex GELF G 0 6
|
||||||
|
FrameIndex GELF H 0 7
|
||||||
|
FrameIndex GELF I 0 8
|
||||||
|
FrameIndex GELF J 0 9
|
||||||
|
FrameIndex GELF K 0 10
|
||||||
|
FrameIndex GELF L 0 11
|
||||||
|
FrameIndex GELF M 0 12
|
||||||
|
// Hit
|
||||||
|
FrameIndex GELH A 0 14
|
||||||
|
FrameIndex GELH B 0 15
|
||||||
|
FrameIndex GELH C 0 16
|
||||||
|
FrameIndex GELH D 0 17
|
||||||
|
FrameIndex GELH E 0 18
|
||||||
|
FrameIndex GELH F 0 19
|
||||||
|
FrameIndex GELH G 0 20
|
||||||
|
FrameIndex GELH H 0 21
|
||||||
|
FrameIndex GELH I 0 22
|
||||||
|
FrameIndex GELH J 0 23
|
||||||
|
// Drip
|
||||||
|
FrameIndex GELD A 0 24
|
||||||
|
FrameIndex GELD B 0 25
|
||||||
|
FrameIndex GELD C 0 26
|
||||||
|
FrameIndex GELD D 0 27
|
||||||
|
FrameIndex GELD E 0 28
|
||||||
|
FrameIndex GELD F 0 29
|
||||||
|
FrameIndex GELD G 0 30
|
||||||
|
FrameIndex GELD H 0 31
|
||||||
|
FrameIndex GELD I 0 32
|
||||||
|
FrameIndex GELD J 0 33
|
||||||
|
FrameIndex GELD K 0 34
|
||||||
|
FrameIndex GELD L 0 35
|
||||||
|
FrameIndex GELD M 0 36
|
||||||
|
// Slide
|
||||||
|
FrameIndex GELS A 0 37
|
||||||
|
FrameIndex GELS B 0 38
|
||||||
|
FrameIndex GELS C 0 39
|
||||||
|
FrameIndex GELS D 0 40
|
||||||
|
FrameIndex GELS E 0 41
|
||||||
|
FrameIndex GELS F 0 42
|
||||||
|
FrameIndex GELS G 0 43
|
||||||
|
// Shrivel
|
||||||
|
FrameIndex GELX A 0 44
|
||||||
|
FrameIndex GELX B 0 45
|
||||||
|
FrameIndex GELX C 0 46
|
||||||
|
FrameIndex GELX D 0 47
|
||||||
|
FrameIndex GELX E 0 48
|
||||||
|
FrameIndex GELX F 0 49
|
||||||
|
FrameIndex GELX G 0 50
|
||||||
|
FrameIndex GELX H 0 51
|
||||||
|
FrameIndex GELX I 0 52
|
||||||
|
FrameIndex GELX J 0 53
|
||||||
|
FrameIndex GELX K 0 54
|
||||||
|
FrameIndex GELX L 0 55
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "BioGlob"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "BioGelm_d.3d"
|
||||||
|
Skin 0 "Jgreen.png"
|
||||||
|
Scale 0.08 0.08 0.08
|
||||||
|
RollOffset 90
|
||||||
USEACTORPITCH
|
USEACTORPITCH
|
||||||
USEACTORROLL
|
USEACTORROLL
|
||||||
|
|
||||||
|
|
@ -123,6 +266,7 @@ Model "BioRifle"
|
||||||
PitchOffset 94.21875
|
PitchOffset 94.21875
|
||||||
Scale 0.125 0.06 0.125
|
Scale 0.125 0.06 0.125
|
||||||
Offset 9.8 -17.6 -10.4
|
Offset 9.8 -17.6 -10.4
|
||||||
|
INTERPOLATEDOUBLEDFRAMES
|
||||||
|
|
||||||
// select
|
// select
|
||||||
FrameIndex BIOS A 0 0
|
FrameIndex BIOS A 0 0
|
||||||
|
|
@ -229,7 +373,6 @@ Model "ShockRifleWave"
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 0 "shockrwm_d.3d"
|
Model 0 "shockrwm_d.3d"
|
||||||
Skin 0 "shocktt1.png"
|
Skin 0 "shocktt1.png"
|
||||||
DONTCULLBACKFACES
|
|
||||||
|
|
||||||
FrameIndex SWAV A 0 0
|
FrameIndex SWAV A 0 0
|
||||||
FrameIndex SWAV B 0 1
|
FrameIndex SWAV B 0 1
|
||||||
|
|
@ -284,7 +427,7 @@ Model "ShockRifle"
|
||||||
Skin 1 "asmd_t.png"
|
Skin 1 "asmd_t.png"
|
||||||
AngleOffset 270
|
AngleOffset 270
|
||||||
PitchOffset 90
|
PitchOffset 90
|
||||||
Scale -0.14 0.14 0.14
|
Scale -0.14 0.18 0.14
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
ROTATING
|
ROTATING
|
||||||
|
|
||||||
|
|
@ -297,7 +440,7 @@ Model "ShockRifle"
|
||||||
Skin 1 "asmd_t.png"
|
Skin 1 "asmd_t.png"
|
||||||
AngleOffset 270
|
AngleOffset 270
|
||||||
PitchOffset 90
|
PitchOffset 90
|
||||||
Scale -0.14 0.14 0.14
|
Scale -0.14 0.18 0.14
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
|
|
||||||
FrameIndex ASMP B 1 0
|
FrameIndex ASMP B 1 0
|
||||||
|
|
@ -366,6 +509,265 @@ Model "ShockRifle"
|
||||||
FrameIndex ASMA J 0 49
|
FrameIndex ASMA J 0 49
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// PULSE GUN
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
Model "PulseAmmo"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "PAmmo_d.3d"
|
||||||
|
Skin 0 "JPammo_01.png"
|
||||||
|
Scale -0.08 0.06 0.06
|
||||||
|
PitchOffset 90
|
||||||
|
ZOffset 6
|
||||||
|
|
||||||
|
FrameIndex PAMO A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "PulseGun"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 1 "PulsePickup_d.3d"
|
||||||
|
Skin 1 "JPulsePickup_01.png"
|
||||||
|
AngleOffset 270
|
||||||
|
PitchOffset 90
|
||||||
|
Scale -0.16 0.2 0.16
|
||||||
|
ZOffset 12
|
||||||
|
ROTATING
|
||||||
|
|
||||||
|
FrameIndex PGNP A 1 0
|
||||||
|
}
|
||||||
|
Model "PulseGun"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 1 "PulsePickup_d.3d"
|
||||||
|
Skin 1 "JPulsePickup_01.png"
|
||||||
|
AngleOffset 270
|
||||||
|
PitchOffset 90
|
||||||
|
Scale -0.16 0.2 0.16
|
||||||
|
ZOffset 12
|
||||||
|
|
||||||
|
FrameIndex PGNP B 1 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "PulseGun"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 2 "Flat_d.3d"
|
||||||
|
Skin 2 "MuzzyPulse.png"
|
||||||
|
PitchOffset 90
|
||||||
|
Scale 0.08 0.08 0.08
|
||||||
|
Offset 8.5 -20.0 -4.5
|
||||||
|
|
||||||
|
FrameIndex PMUZ A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Model "PulseGun"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "PulseGunR_d.3d"
|
||||||
|
SurfaceSkin 0 0 "AmmoLedBase.png"
|
||||||
|
SurfaceSkin 0 1 "JPulseGun_02.png"
|
||||||
|
SurfaceSkin 0 2 "JPulseGun_03.png"
|
||||||
|
PitchOffset 90
|
||||||
|
Scale 0.26 0.13 0.26
|
||||||
|
Offset 0.0 -10.5 -8.0
|
||||||
|
|
||||||
|
// Select
|
||||||
|
FrameIndex PGNS A 0 2
|
||||||
|
FrameIndex PGNS B 0 3
|
||||||
|
FrameIndex PGNS C 0 4
|
||||||
|
FrameIndex PGNS D 0 5
|
||||||
|
FrameIndex PGNS E 0 6
|
||||||
|
FrameIndex PGNS F 0 7
|
||||||
|
FrameIndex PGNS G 0 8
|
||||||
|
FrameIndex PGNS H 0 9
|
||||||
|
FrameIndex PGNS I 0 10
|
||||||
|
FrameIndex PGNS J 0 11
|
||||||
|
FrameIndex PGNS K 0 12
|
||||||
|
FrameIndex PGNS L 0 13
|
||||||
|
FrameIndex PGNS M 0 14
|
||||||
|
FrameIndex PGNS N 0 15
|
||||||
|
FrameIndex PGNS O 0 16
|
||||||
|
FrameIndex PGNS P 0 17
|
||||||
|
FrameIndex PGNS Q 0 18
|
||||||
|
FrameIndex PGNS R 0 19
|
||||||
|
FrameIndex PGNS S 0 20
|
||||||
|
FrameIndex PGNS T 0 21
|
||||||
|
FrameIndex PGNS U 0 22
|
||||||
|
FrameIndex PGNS V 0 23
|
||||||
|
FrameIndex PGNS W 0 24
|
||||||
|
// Cooldown
|
||||||
|
FrameIndex PGNC A 0 40
|
||||||
|
FrameIndex PGNC B 0 41
|
||||||
|
FrameIndex PGNC C 0 42
|
||||||
|
FrameIndex PGNC D 0 43
|
||||||
|
FrameIndex PGNC E 0 44
|
||||||
|
FrameIndex PGNC F 0 45
|
||||||
|
FrameIndex PGNC G 0 46
|
||||||
|
FrameIndex PGNC H 0 47
|
||||||
|
FrameIndex PGNC I 0 48
|
||||||
|
FrameIndex PGNC J 0 49
|
||||||
|
FrameIndex PGNC K 0 50
|
||||||
|
FrameIndex PGNC L 0 51
|
||||||
|
FrameIndex PGNC M 0 52
|
||||||
|
FrameIndex PGNC N 0 53
|
||||||
|
FrameIndex PGNC O 0 54
|
||||||
|
FrameIndex PGNC P 0 55
|
||||||
|
FrameIndex PGNC Q 0 56
|
||||||
|
FrameIndex PGNC R 0 57
|
||||||
|
FrameIndex PGNC S 0 58
|
||||||
|
FrameIndex PGNC T 0 59
|
||||||
|
FrameIndex PGNC U 0 60
|
||||||
|
FrameIndex PGNC V 0 61
|
||||||
|
FrameIndex PGNC W 0 62
|
||||||
|
FrameIndex PGNC X 0 63
|
||||||
|
FrameIndex PGNC Y 0 64
|
||||||
|
// Reload
|
||||||
|
FrameIndex PGNR A 0 65
|
||||||
|
FrameIndex PGNR B 0 66
|
||||||
|
FrameIndex PGNR C 0 67
|
||||||
|
FrameIndex PGNR D 0 68
|
||||||
|
FrameIndex PGNR E 0 69
|
||||||
|
FrameIndex PGNR F 0 70
|
||||||
|
FrameIndex PGNR G 0 71
|
||||||
|
FrameIndex PGNR H 0 72
|
||||||
|
FrameIndex PGNR I 0 73
|
||||||
|
FrameIndex PGNR J 0 74
|
||||||
|
FrameIndex PGNR K 0 75
|
||||||
|
FrameIndex PGNR L 0 76
|
||||||
|
FrameIndex PGNR M 0 77
|
||||||
|
FrameIndex PGNR N 0 78
|
||||||
|
FrameIndex PGNR O 0 79
|
||||||
|
FrameIndex PGNR P 0 80
|
||||||
|
FrameIndex PGNR Q 0 81
|
||||||
|
FrameIndex PGNR R 0 82
|
||||||
|
FrameIndex PGNR S 0 83
|
||||||
|
FrameIndex PGNR T 0 84
|
||||||
|
FrameIndex PGNR U 0 85
|
||||||
|
FrameIndex PGNR V 0 86
|
||||||
|
FrameIndex PGNR W 0 87
|
||||||
|
FrameIndex PGNR X 0 88
|
||||||
|
FrameIndex PGNR Y 0 89
|
||||||
|
FrameIndex PGNR Z 0 90
|
||||||
|
FrameIndex PGR2 A 0 91
|
||||||
|
FrameIndex PGR2 B 0 92
|
||||||
|
FrameIndex PGR2 C 0 93
|
||||||
|
FrameIndex PGR2 D 0 94
|
||||||
|
FrameIndex PGR2 E 0 95
|
||||||
|
FrameIndex PGR2 F 0 96
|
||||||
|
FrameIndex PGR2 G 0 97
|
||||||
|
FrameIndex PGR2 H 0 98
|
||||||
|
FrameIndex PGR2 I 0 99
|
||||||
|
FrameIndex PGR2 J 0 100
|
||||||
|
FrameIndex PGR2 K 0 101
|
||||||
|
FrameIndex PGR2 L 0 102
|
||||||
|
FrameIndex PGR2 M 0 103
|
||||||
|
FrameIndex PGR2 N 0 104
|
||||||
|
FrameIndex PGR2 O 0 105
|
||||||
|
FrameIndex PGR2 P 0 106
|
||||||
|
FrameIndex PGR2 Q 0 107
|
||||||
|
FrameIndex PGR2 R 0 108
|
||||||
|
FrameIndex PGR2 S 0 109
|
||||||
|
FrameIndex PGR2 T 0 110
|
||||||
|
FrameIndex PGR2 U 0 111
|
||||||
|
FrameIndex PGR2 V 0 112
|
||||||
|
FrameIndex PGR2 W 0 113
|
||||||
|
FrameIndex PGR2 X 0 114
|
||||||
|
// Bolt Start
|
||||||
|
FrameIndex PGBS A 0 115
|
||||||
|
FrameIndex PGBS B 0 116
|
||||||
|
FrameIndex PGBS C 0 117
|
||||||
|
FrameIndex PGBS D 0 118
|
||||||
|
FrameIndex PGBS E 0 119
|
||||||
|
// Bolt Loop
|
||||||
|
FrameIndex PGBL A 0 120
|
||||||
|
FrameIndex PGBL B 0 121
|
||||||
|
FrameIndex PGBL C 0 122
|
||||||
|
FrameIndex PGBL D 0 123
|
||||||
|
FrameIndex PGBL E 0 124
|
||||||
|
FrameIndex PGBL F 0 125
|
||||||
|
FrameIndex PGBL G 0 126
|
||||||
|
FrameIndex PGBL H 0 127
|
||||||
|
FrameIndex PGBL I 0 128
|
||||||
|
FrameIndex PGBL J 0 129
|
||||||
|
// Bolt End
|
||||||
|
FrameIndex PGBE A 0 130
|
||||||
|
FrameIndex PGBE B 0 131
|
||||||
|
FrameIndex PGBE C 0 132
|
||||||
|
FrameIndex PGBE D 0 133
|
||||||
|
FrameIndex PGBE E 0 134
|
||||||
|
// Idle
|
||||||
|
FrameIndex PGNI A 0 135
|
||||||
|
FrameIndex PGNI B 0 138
|
||||||
|
FrameIndex PGNI C 0 141
|
||||||
|
FrameIndex PGNI D 0 144
|
||||||
|
FrameIndex PGNI E 0 147
|
||||||
|
FrameIndex PGNI F 0 150
|
||||||
|
FrameIndex PGNI G 0 153
|
||||||
|
FrameIndex PGNI H 0 156
|
||||||
|
FrameIndex PGNI I 0 159
|
||||||
|
FrameIndex PGNI J 0 162
|
||||||
|
FrameIndex PGNI K 0 165
|
||||||
|
FrameIndex PGNI L 0 168
|
||||||
|
FrameIndex PGNI M 0 171
|
||||||
|
FrameIndex PGNI N 0 174
|
||||||
|
FrameIndex PGNI O 0 177
|
||||||
|
FrameIndex PGNI P 0 180
|
||||||
|
FrameIndex PGNI Q 0 183
|
||||||
|
FrameIndex PGNI R 0 186
|
||||||
|
FrameIndex PGNI S 0 189
|
||||||
|
FrameIndex PGNI T 0 192
|
||||||
|
FrameIndex PGNI U 0 195
|
||||||
|
FrameIndex PGNI V 0 198
|
||||||
|
FrameIndex PGNI W 0 201
|
||||||
|
FrameIndex PGNI X 0 204
|
||||||
|
FrameIndex PGNI Y 0 207
|
||||||
|
FrameIndex PGNI Z 0 210
|
||||||
|
// Fire Loop
|
||||||
|
FrameIndex PGNF A 0 215
|
||||||
|
FrameIndex PGNF B 0 216
|
||||||
|
FrameIndex PGNF C 0 217
|
||||||
|
FrameIndex PGNF D 0 218
|
||||||
|
FrameIndex PGNF E 0 219
|
||||||
|
FrameIndex PGNF F 0 220
|
||||||
|
FrameIndex PGNF G 0 221
|
||||||
|
FrameIndex PGNF H 0 222
|
||||||
|
FrameIndex PGNF I 0 223
|
||||||
|
FrameIndex PGNF J 0 224
|
||||||
|
FrameIndex PGNF K 0 225
|
||||||
|
FrameIndex PGNF L 0 226
|
||||||
|
FrameIndex PGNF M 0 227
|
||||||
|
FrameIndex PGNF N 0 228
|
||||||
|
FrameIndex PGNF O 0 229
|
||||||
|
FrameIndex PGNF P 0 230
|
||||||
|
FrameIndex PGNF Q 0 231
|
||||||
|
FrameIndex PGNF R 0 232
|
||||||
|
FrameIndex PGNF S 0 233
|
||||||
|
FrameIndex PGNF T 0 234
|
||||||
|
FrameIndex PGNF U 0 235
|
||||||
|
FrameIndex PGNF V 0 236
|
||||||
|
FrameIndex PGNF W 0 237
|
||||||
|
FrameIndex PGNF X 0 238
|
||||||
|
FrameIndex PGNF Y 0 239
|
||||||
|
FrameIndex PGNF Z 0 240
|
||||||
|
FrameIndex PGF2 A 0 241
|
||||||
|
FrameIndex PGF2 B 0 242
|
||||||
|
FrameIndex PGF2 C 0 243
|
||||||
|
FrameIndex PGF2 D 0 244
|
||||||
|
FrameIndex PGF2 E 0 245
|
||||||
|
FrameIndex PGF2 F 0 246
|
||||||
|
FrameIndex PGF2 G 0 247
|
||||||
|
FrameIndex PGF2 H 0 248
|
||||||
|
FrameIndex PGF2 I 0 249
|
||||||
|
FrameIndex PGF2 J 0 250
|
||||||
|
FrameIndex PGF2 K 0 251
|
||||||
|
FrameIndex PGF2 L 0 252
|
||||||
|
FrameIndex PGF2 M 0 253
|
||||||
|
FrameIndex PGF2 N 0 254
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// FLAK CANNON
|
// FLAK CANNON
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
@ -993,7 +1395,7 @@ Model "FlakCannon"
|
||||||
Skin 1 "flak_t.png"
|
Skin 1 "flak_t.png"
|
||||||
AngleOffset 90
|
AngleOffset 90
|
||||||
PitchOffset 90
|
PitchOffset 90
|
||||||
Scale 0.14 0.14 0.14
|
Scale 0.14 0.18 0.14
|
||||||
Offset 0 -18.9 0
|
Offset 0 -18.9 0
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
ROTATING
|
ROTATING
|
||||||
|
|
@ -1007,13 +1409,25 @@ Model "FlakCannon"
|
||||||
Skin 1 "flak_t.png"
|
Skin 1 "flak_t.png"
|
||||||
AngleOffset 90
|
AngleOffset 90
|
||||||
PitchOffset 90
|
PitchOffset 90
|
||||||
Scale 0.14 0.14 0.14
|
Scale 0.14 0.18 0.14
|
||||||
Offset 0 -18.9 0
|
Offset 0 -18.9 0
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
|
|
||||||
FrameIndex FPCK B 1 0
|
FrameIndex FPCK B 1 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Model "FlakCannon"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 2 "Flat_d.3d"
|
||||||
|
Skin 2 "Flakmuz.png"
|
||||||
|
PitchOffset 90
|
||||||
|
Scale 0.08 0.08 0.08
|
||||||
|
Offset 4.0 -20.0 -7.5
|
||||||
|
|
||||||
|
FrameIndex FMUZ A 0 0
|
||||||
|
}
|
||||||
|
|
||||||
Model "FlakCannon"
|
Model "FlakCannon"
|
||||||
{
|
{
|
||||||
Path "models"
|
Path "models"
|
||||||
|
|
@ -1133,7 +1547,6 @@ Model "ShockWave"
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 0 "shockwavem_d.3d"
|
Model 0 "shockwavem_d.3d"
|
||||||
Skin 0 "shockt1.png"
|
Skin 0 "shockt1.png"
|
||||||
DONTCULLBACKFACES
|
|
||||||
|
|
||||||
FrameIndex RWAV A 0 0
|
FrameIndex RWAV A 0 0
|
||||||
FrameIndex RWAV B 0 1
|
FrameIndex RWAV B 0 1
|
||||||
|
|
@ -1171,7 +1584,7 @@ Model "WarheadLauncher"
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 1 "whpick_d.3d"
|
Model 1 "whpick_d.3d"
|
||||||
Skin 1 "jwhpick1.png"
|
Skin 1 "jwhpick1.png"
|
||||||
Scale -0.2 0.2 0.2
|
Scale -0.2 0.24 0.24
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
AngleOffset 180
|
AngleOffset 180
|
||||||
ROTATING
|
ROTATING
|
||||||
|
|
@ -1183,7 +1596,7 @@ Model "WarheadLauncher"
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 1 "whpick_d.3d"
|
Model 1 "whpick_d.3d"
|
||||||
Skin 1 "jwhpick1.png"
|
Skin 1 "jwhpick1.png"
|
||||||
Scale -0.2 0.2 0.2
|
Scale -0.2 0.24 0.24
|
||||||
AngleOffset 180
|
AngleOffset 180
|
||||||
ZOffset 12
|
ZOffset 12
|
||||||
|
|
||||||
|
|
|
||||||
BIN
models/AmmoLedBase.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
BIN
models/Flat_a.3d
Normal file
BIN
models/Flat_d.3d
Normal file
BIN
models/JPammo_01.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
models/JPulseGun_02.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
models/JPulseGun_03.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
models/JPulsePickup_01.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
models/MuzzyPulse.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
models/PAmmo_a.3d
Normal file
BIN
models/PAmmo_d.3d
Normal file
BIN
models/PBolt_a.3d
Normal file
BIN
models/PBolt_d.3d
Normal file
BIN
models/PulseGunR_a.3d
Normal file
BIN
models/PulseGunR_d.3d
Normal file
BIN
models/PulsePickup_a.3d
Normal file
BIN
models/PulsePickup_d.3d
Normal file
BIN
models/pbolt0.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
models/pbolt1.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
models/pbolt2.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
models/pbolt3.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
models/pbolt4.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
models/sbolt0.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
models/sbolt1.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
models/sbolt2.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
models/sbolt3.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
models/sbolt4.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
|
@ -5,14 +5,14 @@ full UT weapon and item mod.
|
||||||
|
|
||||||
Currently implemented:
|
Currently implemented:
|
||||||
|
|
||||||
- ASMD Shock Rifle (slot 4)
|
|
||||||
- Flak Cannon (slot 8)
|
- Flak Cannon (slot 8)
|
||||||
|
- ASMD Shock Rifle (slot 4)
|
||||||
- Redeemer (slot 0)
|
- Redeemer (slot 0)
|
||||||
|
- GES Biorifle (slot 3)
|
||||||
|
|
||||||
In progress:
|
In progress:
|
||||||
|
|
||||||
- GES Biorifle (slot 3)
|
- Pulsegun (slot 5) (with beta animations)
|
||||||
|
|
||||||
To be done:
|
To be done:
|
||||||
|
|
||||||
|
|
@ -21,7 +21,6 @@ To be done:
|
||||||
- Translocator (slot 1)
|
- Translocator (slot 1)
|
||||||
- Enforcer (slot 2)
|
- Enforcer (slot 2)
|
||||||
- Dual Enforcers (slot 2)
|
- Dual Enforcers (slot 2)
|
||||||
- Pulsegun (slot 5)
|
|
||||||
- Ripper (slot 6)
|
- Ripper (slot 6)
|
||||||
- Minigun (slot 7)
|
- Minigun (slot 7)
|
||||||
- Rocket Launcher (slot 9)
|
- Rocket Launcher (slot 9)
|
||||||
|
|
|
||||||
30
sndinfo.txt
|
|
@ -1,7 +1,9 @@
|
||||||
ut/ammo ammopick
|
misc/i_pkup ammopick
|
||||||
ut/weapon weaponpk
|
misc/w_pkup weaponpk
|
||||||
$pitchshift ut/ammo 0
|
misc/spawn RespSnd2
|
||||||
$pitchshift ut/weapon 0
|
$pitchshift misc/i_pkup 0
|
||||||
|
$pitchshift misc/w_pkup 0
|
||||||
|
$pitchshift misc/spawn 0
|
||||||
|
|
||||||
flak/select pdown
|
flak/select pdown
|
||||||
flak/load hidraul2
|
flak/load hidraul2
|
||||||
|
|
@ -14,6 +16,7 @@ flak/bounce1 hit1
|
||||||
flak/bounce2 hit2
|
flak/bounce2 hit2
|
||||||
flak/bounce3 hit3
|
flak/bounce3 hit3
|
||||||
$random flak/bounce { flak/bounce1 flak/bounce2 flak/bounce3 }
|
$random flak/bounce { flak/bounce1 flak/bounce2 flak/bounce3 }
|
||||||
|
$limit flak/bounce 64
|
||||||
flak/explode expl04
|
flak/explode expl04
|
||||||
$pitchshift flak/select 0
|
$pitchshift flak/select 0
|
||||||
$pitchshift flak/load 0
|
$pitchshift flak/load 0
|
||||||
|
|
@ -50,10 +53,27 @@ $pitchshift warhead/fire 0
|
||||||
ges/hit gelhit
|
ges/hit gelhit
|
||||||
ges/select gelselec
|
ges/select gelselec
|
||||||
ges/fire gelshot
|
ges/fire gelshot
|
||||||
ges/charge bioaltrep
|
ges/charge bioaltrp
|
||||||
ges/explode explg02
|
ges/explode explg02
|
||||||
$pitchshift ges/hit 0
|
$pitchshift ges/hit 0
|
||||||
|
$limit ges/hit 64
|
||||||
$pitchshift ges/select 0
|
$pitchshift ges/select 0
|
||||||
$pitchshift ges/fire 0
|
$pitchshift ges/fire 0
|
||||||
$pitchshift ges/charge 0
|
$pitchshift ges/charge 0
|
||||||
$pitchshift ges/explode 0
|
$pitchshift ges/explode 0
|
||||||
|
$limit ges/explode 64
|
||||||
|
|
||||||
|
pulse/bolt pulseblt
|
||||||
|
pulse/down pulsedwn
|
||||||
|
pulse/hit pulseexp
|
||||||
|
pulse/fire pulsefir
|
||||||
|
pulse/fly pulsefly
|
||||||
|
pulse/select pulsepck
|
||||||
|
pulse/reload pulserel
|
||||||
|
$pitchshift pulse/bolt 0
|
||||||
|
$pitchshift pulse/down 0
|
||||||
|
$pitchshift pulse/hit 0
|
||||||
|
$pitchshift pulse/fire 0
|
||||||
|
$pitchshift pulse/fly 0
|
||||||
|
$pitchshift pulse/select 0
|
||||||
|
$pitchshift pulse/reload 0
|
||||||
|
|
|
||||||
BIN
sounds/PulseBlt.wav
Normal file
BIN
sounds/PulseDwn.wav
Normal file
BIN
sounds/PulseExp.wav
Normal file
BIN
sounds/PulseFir.wav
Normal file
BIN
sounds/PulseFly.wav
Normal file
BIN
sounds/PulsePck.wav
Normal file
BIN
sounds/PulseRel.wav
Normal file
BIN
sounds/RespSnd2.wav
Normal file
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/FGLOB0.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/FGLOC0.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/FGLOD0.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/FGLOE0.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
sprites/FGLOF0.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
sprites/FGLOG0.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
sprites/FGLOH0.png
Normal file
|
After Width: | Height: | Size: 3 KiB |
BIN
sprites/FGLOI0.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
sprites/FGLOJ0.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
sprites/FGLOK0.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
sprites/GEX1A0.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
sprites/GEX1B0.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
sprites/GEX1C0.png
Normal file
|
After Width: | Height: | Size: 462 B |
BIN
sprites/GEX1D0.png
Normal file
|
After Width: | Height: | Size: 1 KiB |
BIN
sprites/GEX1E0.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
BIN
sprites/GEX1F0.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
sprites/GEX1G0.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
sprites/GEX1H0.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
sprites/GEX1I0.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
sprites/GEX1J0.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
sprites/GEX1K0.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
sprites/PBALA0.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
sprites/PBALB0.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
sprites/PBALC0.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
sprites/PBALD0.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
sprites/PBALE0.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
sprites/PENDA0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
sprites/PENDB0.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
sprites/PENDC0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
sprites/PENDD0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
sprites/PHITA0.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
sprites/PHITB0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
sprites/PHITC0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
sprites/PHITD0.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -122,3 +122,4 @@ Sprite "FLKDG0",1,1{}
|
||||||
Sprite "FLKDH0",1,1{}
|
Sprite "FLKDH0",1,1{}
|
||||||
Sprite "FLKDI0",1,1{}
|
Sprite "FLKDI0",1,1{}
|
||||||
Sprite "FLKDJ0",1,1{}
|
Sprite "FLKDJ0",1,1{}
|
||||||
|
Sprite "FMUZA0",1,1{}
|
||||||
|
|
|
||||||
188
textures.pulse
Normal file
|
|
@ -0,0 +1,188 @@
|
||||||
|
Sprite "PAMOA0",1,1{}
|
||||||
|
Sprite "PGNPA0",1,1{}
|
||||||
|
Sprite "PGNPB0",1,1{}
|
||||||
|
Sprite "PGNSA0",1,1{}
|
||||||
|
Sprite "PGNSB0",1,1{}
|
||||||
|
Sprite "PGNSC0",1,1{}
|
||||||
|
Sprite "PGNSD0",1,1{}
|
||||||
|
Sprite "PGNSE0",1,1{}
|
||||||
|
Sprite "PGNSF0",1,1{}
|
||||||
|
Sprite "PGNSG0",1,1{}
|
||||||
|
Sprite "PGNSH0",1,1{}
|
||||||
|
Sprite "PGNSI0",1,1{}
|
||||||
|
Sprite "PGNSJ0",1,1{}
|
||||||
|
Sprite "PGNSK0",1,1{}
|
||||||
|
Sprite "PGNSL0",1,1{}
|
||||||
|
Sprite "PGNSM0",1,1{}
|
||||||
|
Sprite "PGNSN0",1,1{}
|
||||||
|
Sprite "PGNSO0",1,1{}
|
||||||
|
Sprite "PGNSP0",1,1{}
|
||||||
|
Sprite "PGNSQ0",1,1{}
|
||||||
|
Sprite "PGNSR0",1,1{}
|
||||||
|
Sprite "PGNSS0",1,1{}
|
||||||
|
Sprite "PGNST0",1,1{}
|
||||||
|
Sprite "PGNSU0",1,1{}
|
||||||
|
Sprite "PGNSV0",1,1{}
|
||||||
|
Sprite "PGNSW0",1,1{}
|
||||||
|
Sprite "PGNCA0",1,1{}
|
||||||
|
Sprite "PGNCB0",1,1{}
|
||||||
|
Sprite "PGNCC0",1,1{}
|
||||||
|
Sprite "PGNCD0",1,1{}
|
||||||
|
Sprite "PGNCE0",1,1{}
|
||||||
|
Sprite "PGNCF0",1,1{}
|
||||||
|
Sprite "PGNCG0",1,1{}
|
||||||
|
Sprite "PGNCH0",1,1{}
|
||||||
|
Sprite "PGNCI0",1,1{}
|
||||||
|
Sprite "PGNCJ0",1,1{}
|
||||||
|
Sprite "PGNCK0",1,1{}
|
||||||
|
Sprite "PGNCL0",1,1{}
|
||||||
|
Sprite "PGNCM0",1,1{}
|
||||||
|
Sprite "PGNCN0",1,1{}
|
||||||
|
Sprite "PGNCO0",1,1{}
|
||||||
|
Sprite "PGNCP0",1,1{}
|
||||||
|
Sprite "PGNCQ0",1,1{}
|
||||||
|
Sprite "PGNCR0",1,1{}
|
||||||
|
Sprite "PGNCS0",1,1{}
|
||||||
|
Sprite "PGNCT0",1,1{}
|
||||||
|
Sprite "PGNCU0",1,1{}
|
||||||
|
Sprite "PGNCV0",1,1{}
|
||||||
|
Sprite "PGNCW0",1,1{}
|
||||||
|
Sprite "PGNCX0",1,1{}
|
||||||
|
Sprite "PGNCY0",1,1{}
|
||||||
|
Sprite "PGNRA0",1,1{}
|
||||||
|
Sprite "PGNRB0",1,1{}
|
||||||
|
Sprite "PGNRC0",1,1{}
|
||||||
|
Sprite "PGNRD0",1,1{}
|
||||||
|
Sprite "PGNRE0",1,1{}
|
||||||
|
Sprite "PGNRF0",1,1{}
|
||||||
|
Sprite "PGNRG0",1,1{}
|
||||||
|
Sprite "PGNRH0",1,1{}
|
||||||
|
Sprite "PGNRI0",1,1{}
|
||||||
|
Sprite "PGNRJ0",1,1{}
|
||||||
|
Sprite "PGNRK0",1,1{}
|
||||||
|
Sprite "PGNRL0",1,1{}
|
||||||
|
Sprite "PGNRM0",1,1{}
|
||||||
|
Sprite "PGNRN0",1,1{}
|
||||||
|
Sprite "PGNRO0",1,1{}
|
||||||
|
Sprite "PGNRP0",1,1{}
|
||||||
|
Sprite "PGNRQ0",1,1{}
|
||||||
|
Sprite "PGNRR0",1,1{}
|
||||||
|
Sprite "PGNRS0",1,1{}
|
||||||
|
Sprite "PGNRT0",1,1{}
|
||||||
|
Sprite "PGNRU0",1,1{}
|
||||||
|
Sprite "PGNRV0",1,1{}
|
||||||
|
Sprite "PGNRW0",1,1{}
|
||||||
|
Sprite "PGNRX0",1,1{}
|
||||||
|
Sprite "PGNRY0",1,1{}
|
||||||
|
Sprite "PGNRZ0",1,1{}
|
||||||
|
Sprite "PGR2A0",1,1{}
|
||||||
|
Sprite "PGR2B0",1,1{}
|
||||||
|
Sprite "PGR2C0",1,1{}
|
||||||
|
Sprite "PGR2D0",1,1{}
|
||||||
|
Sprite "PGR2E0",1,1{}
|
||||||
|
Sprite "PGR2F0",1,1{}
|
||||||
|
Sprite "PGR2G0",1,1{}
|
||||||
|
Sprite "PGR2H0",1,1{}
|
||||||
|
Sprite "PGR2I0",1,1{}
|
||||||
|
Sprite "PGR2J0",1,1{}
|
||||||
|
Sprite "PGR2K0",1,1{}
|
||||||
|
Sprite "PGR2L0",1,1{}
|
||||||
|
Sprite "PGR2M0",1,1{}
|
||||||
|
Sprite "PGR2N0",1,1{}
|
||||||
|
Sprite "PGR2O0",1,1{}
|
||||||
|
Sprite "PGR2P0",1,1{}
|
||||||
|
Sprite "PGR2Q0",1,1{}
|
||||||
|
Sprite "PGR2R0",1,1{}
|
||||||
|
Sprite "PGR2S0",1,1{}
|
||||||
|
Sprite "PGR2T0",1,1{}
|
||||||
|
Sprite "PGR2U0",1,1{}
|
||||||
|
Sprite "PGR2V0",1,1{}
|
||||||
|
Sprite "PGR2W0",1,1{}
|
||||||
|
Sprite "PGR2X0",1,1{}
|
||||||
|
Sprite "PGBSA0",1,1{}
|
||||||
|
Sprite "PGBSB0",1,1{}
|
||||||
|
Sprite "PGBSC0",1,1{}
|
||||||
|
Sprite "PGBSD0",1,1{}
|
||||||
|
Sprite "PGBSE0",1,1{}
|
||||||
|
Sprite "PGBLA0",1,1{}
|
||||||
|
Sprite "PGBLB0",1,1{}
|
||||||
|
Sprite "PGBLC0",1,1{}
|
||||||
|
Sprite "PGBLD0",1,1{}
|
||||||
|
Sprite "PGBLE0",1,1{}
|
||||||
|
Sprite "PGBLF0",1,1{}
|
||||||
|
Sprite "PGBLG0",1,1{}
|
||||||
|
Sprite "PGBLH0",1,1{}
|
||||||
|
Sprite "PGBLI0",1,1{}
|
||||||
|
Sprite "PGBLJ0",1,1{}
|
||||||
|
Sprite "PGBEA0",1,1{}
|
||||||
|
Sprite "PGBEB0",1,1{}
|
||||||
|
Sprite "PGBEC0",1,1{}
|
||||||
|
Sprite "PGBED0",1,1{}
|
||||||
|
Sprite "PGBEE0",1,1{}
|
||||||
|
Sprite "PGNIA0",1,1{}
|
||||||
|
Sprite "PGNIB0",1,1{}
|
||||||
|
Sprite "PGNIC0",1,1{}
|
||||||
|
Sprite "PGNID0",1,1{}
|
||||||
|
Sprite "PGNIE0",1,1{}
|
||||||
|
Sprite "PGNIF0",1,1{}
|
||||||
|
Sprite "PGNIG0",1,1{}
|
||||||
|
Sprite "PGNIH0",1,1{}
|
||||||
|
Sprite "PGNII0",1,1{}
|
||||||
|
Sprite "PGNIJ0",1,1{}
|
||||||
|
Sprite "PGNIK0",1,1{}
|
||||||
|
Sprite "PGNIL0",1,1{}
|
||||||
|
Sprite "PGNIM0",1,1{}
|
||||||
|
Sprite "PGNIN0",1,1{}
|
||||||
|
Sprite "PGNIO0",1,1{}
|
||||||
|
Sprite "PGNIP0",1,1{}
|
||||||
|
Sprite "PGNIQ0",1,1{}
|
||||||
|
Sprite "PGNIR0",1,1{}
|
||||||
|
Sprite "PGNIS0",1,1{}
|
||||||
|
Sprite "PGNIT0",1,1{}
|
||||||
|
Sprite "PGNIU0",1,1{}
|
||||||
|
Sprite "PGNIV0",1,1{}
|
||||||
|
Sprite "PGNIW0",1,1{}
|
||||||
|
Sprite "PGNIX0",1,1{}
|
||||||
|
Sprite "PGNIY0",1,1{}
|
||||||
|
Sprite "PGNIZ0",1,1{}
|
||||||
|
Sprite "PGNFA0",1,1{}
|
||||||
|
Sprite "PGNFB0",1,1{}
|
||||||
|
Sprite "PGNFC0",1,1{}
|
||||||
|
Sprite "PGNFD0",1,1{}
|
||||||
|
Sprite "PGNFE0",1,1{}
|
||||||
|
Sprite "PGNFF0",1,1{}
|
||||||
|
Sprite "PGNFG0",1,1{}
|
||||||
|
Sprite "PGNFH0",1,1{}
|
||||||
|
Sprite "PGNFI0",1,1{}
|
||||||
|
Sprite "PGNFJ0",1,1{}
|
||||||
|
Sprite "PGNFK0",1,1{}
|
||||||
|
Sprite "PGNFL0",1,1{}
|
||||||
|
Sprite "PGNFM0",1,1{}
|
||||||
|
Sprite "PGNFN0",1,1{}
|
||||||
|
Sprite "PGNFO0",1,1{}
|
||||||
|
Sprite "PGNFP0",1,1{}
|
||||||
|
Sprite "PGNFQ0",1,1{}
|
||||||
|
Sprite "PGNFR0",1,1{}
|
||||||
|
Sprite "PGNFS0",1,1{}
|
||||||
|
Sprite "PGNFT0",1,1{}
|
||||||
|
Sprite "PGNFU0",1,1{}
|
||||||
|
Sprite "PGNFV0",1,1{}
|
||||||
|
Sprite "PGNFW0",1,1{}
|
||||||
|
Sprite "PGNFX0",1,1{}
|
||||||
|
Sprite "PGNFY0",1,1{}
|
||||||
|
Sprite "PGNFZ0",1,1{}
|
||||||
|
Sprite "PGF2A0",1,1{}
|
||||||
|
Sprite "PGF2B0",1,1{}
|
||||||
|
Sprite "PGF2C0",1,1{}
|
||||||
|
Sprite "PGF2D0",1,1{}
|
||||||
|
Sprite "PGF2E0",1,1{}
|
||||||
|
Sprite "PGF2F0",1,1{}
|
||||||
|
Sprite "PGF2G0",1,1{}
|
||||||
|
Sprite "PGF2H0",1,1{}
|
||||||
|
Sprite "PGF2I0",1,1{}
|
||||||
|
Sprite "PGF2J0",1,1{}
|
||||||
|
Sprite "PGF2K0",1,1{}
|
||||||
|
Sprite "PGF2L0",1,1{}
|
||||||
|
Sprite "PGF2M0",1,1{}
|
||||||
|
Sprite "PGF2N0",1,1{}
|
||||||
|
Sprite "PMUZA0",1,1{}
|
||||||
|
|
@ -5,5 +5,6 @@ version "3.3"
|
||||||
#include "zscript/utcommon.zsc"
|
#include "zscript/utcommon.zsc"
|
||||||
#include "zscript/biorifle.zsc"
|
#include "zscript/biorifle.zsc"
|
||||||
#include "zscript/shockrifle.zsc"
|
#include "zscript/shockrifle.zsc"
|
||||||
|
#include "zscript/pulsegun.zsc"
|
||||||
#include "zscript/flakcannon.zsc"
|
#include "zscript/flakcannon.zsc"
|
||||||
#include "zscript/warheadlauncher.zsc"
|
#include "zscript/warheadlauncher.zsc"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ Class BioAmmo : Ammo
|
||||||
{
|
{
|
||||||
Tag "Biosludge Ammo";
|
Tag "Biosludge Ammo";
|
||||||
Inventory.PickupMessage "You picked up the Biosludge Ammo.";
|
Inventory.PickupMessage "You picked up the Biosludge Ammo.";
|
||||||
Inventory.PickupSound "ut/ammo";
|
|
||||||
Inventory.Amount 25;
|
Inventory.Amount 25;
|
||||||
Inventory.MaxAmount 100;
|
Inventory.MaxAmount 100;
|
||||||
Ammo.BackpackAmount 50;
|
Ammo.BackpackAmount 50;
|
||||||
|
|
@ -21,10 +20,81 @@ Class BioAmmo : Ammo
|
||||||
|
|
||||||
Class BioHitbox : Actor
|
Class BioHitbox : Actor
|
||||||
{
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Radius 2;
|
||||||
|
Height 2;
|
||||||
|
+SHOOTABLE;
|
||||||
|
+NOGRAVITY;
|
||||||
|
+NOCLIP;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+NOBLOOD;
|
||||||
|
}
|
||||||
|
override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle )
|
||||||
|
{
|
||||||
|
if ( inflictor == target ) return 0;
|
||||||
|
if ( target && !target.InStateSequence(target.CurState,target.ResolveState("XDeath")) )
|
||||||
|
{
|
||||||
|
target.bAMBUSH = true;
|
||||||
|
target.ExplodeMissile(null,inflictor);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( !target )
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SetOrigin(target.pos-(0,0,height*0.5),true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class BioLight : DynamicLight
|
Class BioLight : DynamicLight
|
||||||
{
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
DynamicLight.Type "Point";
|
||||||
|
Args 64,255,48,8;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( !target )
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
args[LIGHT_INTENSITY] = 8*target.Scale.x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class BioXLight : DynamicLight
|
||||||
|
{
|
||||||
|
|
||||||
|
double lifetime;
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
DynamicLight.Type "Point";
|
||||||
|
Args 64,255,48,30;
|
||||||
|
}
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
lifetime = 1.0;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
|
args[LIGHT_RED] = 64*lifetime;
|
||||||
|
args[LIGHT_GREEN] = 255*lifetime;
|
||||||
|
args[LIGHT_BLUE] = 48*lifetime;
|
||||||
|
lifetime -= 0.05;
|
||||||
|
if ( lifetime <= 0 ) Destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class BioGel : Actor
|
Class BioGel : Actor
|
||||||
|
|
@ -41,35 +111,71 @@ Class BioGel : Actor
|
||||||
int deadtimer;
|
int deadtimer;
|
||||||
Line atline;
|
Line atline;
|
||||||
int atside;
|
int atside;
|
||||||
|
int rollvel, pitchvel, yawvel;
|
||||||
|
|
||||||
override void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
Super.PostBeginPlay();
|
Super.PostBeginPlay();
|
||||||
vel.z += 6;
|
vel.z += 6;
|
||||||
deadtimer = -1;
|
deadtimer = -1;
|
||||||
|
l = Spawn("BioLight",pos);
|
||||||
|
l.target = self;
|
||||||
|
b = Spawn("BioHitbox",pos);
|
||||||
|
b.target = self;
|
||||||
|
rollvel = FRandom[GES](10,30)*RandomPick[GES](-1,1);
|
||||||
|
pitchvel = FRandom[GES](10,30)*RandomPick[GES](-1,1);
|
||||||
|
yawvel = FRandom[GES](10,30)*RandomPick[GES](-1,1);
|
||||||
}
|
}
|
||||||
action void A_SetToSlope( double dang, bool ceil = false )
|
override int SpecialMissileHit( Actor victim )
|
||||||
{
|
{
|
||||||
vector3 fnormal;
|
if ( victim == b ) return 1;
|
||||||
if ( ceil ) fnormal = invoker.CurSector.floorplane.Normal;
|
if ( (victim is 'BioHitbox') && ((victim.target == master) || (victim.target.master == master)) ) return 1;
|
||||||
else fnormal = invoker.CurSector.ceilingplane.Normal;
|
return -1;
|
||||||
vector2 fnormalp1 = ((fnormal.x != 0) || (fnormal.y != 0))?(fnormal.x,fnormal.y).Unit():(0,0);
|
}
|
||||||
vector2 fnormalp2 = ((fnormal.x,fnormal.y).Length(),fnormal.z);
|
override void Tick()
|
||||||
double fang = atan2(fnormalp1.y,fnormalp1.x); // floor angle (not pitch!)
|
{
|
||||||
double fpitch = atan2(fnormalp2.x,fnormalp2.y); // floor pitch
|
Super.Tick();
|
||||||
double ddiff1 = cos(fang-(dang-90));
|
if ( globalfreeze || level.frozen ) return;
|
||||||
double ddiff2 = cos(fang-dang);
|
if ( !bNOGRAVITY )
|
||||||
invoker.pitch = -fpitch*ddiff2;
|
{
|
||||||
invoker.roll = fpitch*ddiff1;
|
A_SetRoll(roll+rollvel,SPF_INTERPOLATE);
|
||||||
invoker.angle = dang;
|
A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE);
|
||||||
|
A_SetPitch(pitch+yawvel,SPF_INTERPOLATE);
|
||||||
|
}
|
||||||
|
if ( !InStateSequence(CurState,FindState("XDeath")) && ((!bNOGRAVITY && !Random[GES](0,2)) || !Random[GES](0,10)) )
|
||||||
|
{
|
||||||
|
int numpt = Min(20,Scale.x*2)+Random[GES](-1,1);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](1,3);
|
||||||
|
A_SpawnParticle("40FF30",SPF_FULLBRIGHT,Random[GES](30,60),FRandom[GES](1.2,2.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,-0.2,3.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( deadtimer <= -1 ) return;
|
||||||
|
let bi = BlockThingsIterator.Create(self,4*Scale.x);
|
||||||
|
while ( bi.Next() )
|
||||||
|
{
|
||||||
|
if ( !bi.Thing || !bi.Thing.bSHOOTABLE || (bi.Thing == b) || ((bi.Thing is 'BioHitbox') && ((bi.Thing.target.master == self) || (bi.Thing.target == master))) ) continue;
|
||||||
|
if ( (Distance2D(bi.Thing)-bi.Thing.radius <= 4*Scale.x) && ((bi.Thing.pos.z <= pos.z+4*Scale.x) && (bi.Thing.pos.z+bi.Thing.height >= pos.z-4*Scale.x)) ) deadtimer = 0;
|
||||||
|
}
|
||||||
|
if ( deadtimer-- <= 0 )
|
||||||
|
{
|
||||||
|
deadtimer = -1;
|
||||||
|
SetStateLabel("XDeath");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// align self to what surface was hit, currently does not support 3d floors + slopes properly
|
// align self to what surface was hit, currently does not support 3d floors + slopes properly
|
||||||
virtual void AlignSelf()
|
virtual void AlignSelf()
|
||||||
{
|
{
|
||||||
Vector3 normal;
|
|
||||||
FLineTraceData d;
|
|
||||||
A_NoGravity();
|
A_NoGravity();
|
||||||
A_PlaySound("ges/hit");
|
A_Stop();
|
||||||
|
if ( bAMBUSH )
|
||||||
|
{
|
||||||
|
SetStateLabel("XDeath");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector3 normal = (0,0,0);
|
||||||
|
FLineTraceData d;
|
||||||
A_SetSize(0.1,0);
|
A_SetSize(0.1,0);
|
||||||
if ( BlockingLine )
|
if ( BlockingLine )
|
||||||
{
|
{
|
||||||
|
|
@ -84,7 +190,7 @@ Class BioGel : Actor
|
||||||
angle = atan2(normal.y,normal.x);
|
angle = atan2(normal.y,normal.x);
|
||||||
pitch = 0;
|
pitch = 0;
|
||||||
roll = 0;
|
roll = 0;
|
||||||
LineTrace(angle+180,8,0,data:d);
|
LineTrace(angle+180,172,0,TRF_THRUACTORS,data:d);
|
||||||
SetOrigin(d.HitLocation+normal*0.5,false);
|
SetOrigin(d.HitLocation+normal*0.5,false);
|
||||||
hittype = HIT_WALL;
|
hittype = HIT_WALL;
|
||||||
}
|
}
|
||||||
|
|
@ -108,22 +214,55 @@ Class BioGel : Actor
|
||||||
hittype = HIT_CEILING;
|
hittype = HIT_CEILING;
|
||||||
else hittype = HIT_FLOOR;
|
else hittype = HIT_FLOOR;
|
||||||
}
|
}
|
||||||
else SetStateLabel("Crash");
|
else
|
||||||
|
{
|
||||||
|
SetStateLabel("XDeath");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
A_PlaySound("ges/hit");
|
||||||
|
A_SprayDecal("BioSplat",-172);
|
||||||
|
int numpt = Min(100,Scale.x*10)+Random[GES](-5,5);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (normal+(FRandom[GES](-.8,.8),FRandom[GES](-.8,.8),FRandom[GES](-.8,.8))).unit()*FRandom[GES](3,6);
|
||||||
|
A_SpawnParticle("40FF30",SPF_FULLBRIGHT,Random[GES](30,60),FRandom[GES](1.2,3.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,-0.2,3.0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
action void A_DropDrip()
|
action void A_DropDrip()
|
||||||
{
|
{
|
||||||
// TODO
|
let d = Spawn("BioSplash",pos+cursector.ceilingplane.Normal*2*scale.x);
|
||||||
|
d.target = target;
|
||||||
|
d.angle = angle;
|
||||||
|
d.pitch = pitch;
|
||||||
|
d.roll = roll;
|
||||||
|
d.master = self;
|
||||||
|
d.scale = scale*0.5;
|
||||||
|
d.vel.z -= 6;
|
||||||
}
|
}
|
||||||
action void A_GelExplode()
|
action void A_GelExplode()
|
||||||
{
|
{
|
||||||
|
A_NoGravity();
|
||||||
|
A_Stop();
|
||||||
|
if ( invoker.l ) invoker.l.Destroy();
|
||||||
|
if ( invoker.b ) invoker.b.Destroy();
|
||||||
|
let s = Spawn("BioXLight",pos);
|
||||||
|
s.args[3] *= Scale.x;
|
||||||
|
invoker.deadtimer = -1;
|
||||||
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos);
|
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos);
|
||||||
A_Explode(Random[GES](15,20)*Scale.x,Min(250,Scale.x*75));
|
A_Explode(Random[GES](15,25)*Scale.x,Min(250,Scale.x*25));
|
||||||
A_PlaySound("ges/explode",CHAN_VOICE);
|
A_PlaySound("ges/explode",CHAN_VOICE);
|
||||||
// TODO particles
|
int numpt = Min(300,Scale.x*30)+Random[GES](-10,10);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](3,12);
|
||||||
|
A_SpawnParticle("40FF30",SPF_FULLBRIGHT,Random[GES](30,60),FRandom[GES](2.4,6.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,-0.2,3.0);
|
||||||
|
}
|
||||||
|
Scale *= 0.5;
|
||||||
}
|
}
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Obituary "%o drank a glass of %k's dripping green load.";
|
Obituary "%o drank a glass of %k's dripping green load.";
|
||||||
|
DamageType 'Slime';
|
||||||
RenderStyle "Add";
|
RenderStyle "Add";
|
||||||
Radius 4;
|
Radius 4;
|
||||||
Height 4;
|
Height 4;
|
||||||
|
|
@ -133,6 +272,7 @@ Class BioGel : Actor
|
||||||
-NOGRAVITY;
|
-NOGRAVITY;
|
||||||
+SKYEXPLODE;
|
+SKYEXPLODE;
|
||||||
+FORCERADIUSDMG;
|
+FORCERADIUSDMG;
|
||||||
|
+FORCEXYBILLBOARD;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
@ -142,9 +282,10 @@ Class BioGel : Actor
|
||||||
Death:
|
Death:
|
||||||
GELH A 1 Bright AlignSelf();
|
GELH A 1 Bright AlignSelf();
|
||||||
GELH BCDEFGHIJ 1 Bright;
|
GELH BCDEFGHIJ 1 Bright;
|
||||||
GELH J 0 Bright A_SetTics(Random[GES](10,30));
|
GELH J 1 Bright A_SetTics(Random[GES](10,30));
|
||||||
GELH J -1 Bright
|
GELH J -1 Bright
|
||||||
{
|
{
|
||||||
|
invoker.deadtimer = Random[GES](250,300);
|
||||||
if ( invoker.hittype == HIT_WALL ) return ResolveState("Slide");
|
if ( invoker.hittype == HIT_WALL ) return ResolveState("Slide");
|
||||||
else if ( invoker.hittype == HIT_CEILING ) return ResolveState("Drip");
|
else if ( invoker.hittype == HIT_CEILING ) return ResolveState("Drip");
|
||||||
return ResolveState(null);
|
return ResolveState(null);
|
||||||
|
|
@ -154,15 +295,17 @@ Class BioGel : Actor
|
||||||
GELD ABCDEFGH 4 Bright;
|
GELD ABCDEFGH 4 Bright;
|
||||||
GELD I 4 Bright A_DropDrip();
|
GELD I 4 Bright A_DropDrip();
|
||||||
GELD JKLM 4 Bright;
|
GELD JKLM 4 Bright;
|
||||||
GELD M -1 Bright;
|
GELH J -1 Bright;
|
||||||
Wait;
|
Stop;
|
||||||
Slide:
|
Slide:
|
||||||
GELS ABCDEFG 3 Bright;
|
GELS ABCDEF 3 Bright;
|
||||||
Wait;
|
GELS G -1 Bright;
|
||||||
|
Stop;
|
||||||
Crash:
|
Crash:
|
||||||
XDeath:
|
XDeath:
|
||||||
#### # 1 A_SetTics(Random[GES](1,3)); // TODO EXPLOSION
|
#### # 1 Bright A_SetTics(Random[GES](1,3));
|
||||||
TNT1 A 1 A_GelExplode();
|
GEX1 A 1 Bright A_GelExplode();
|
||||||
|
GEX1 BCDEFGHIJK 3 Bright;
|
||||||
Stop;
|
Stop;
|
||||||
Shrivel:
|
Shrivel:
|
||||||
GELX ABCDEFGHIJKL 1 Bright; // UNUSED
|
GELX ABCDEFGHIJKL 1 Bright; // UNUSED
|
||||||
|
|
@ -172,10 +315,31 @@ Class BioGel : Actor
|
||||||
|
|
||||||
Class BioGlob : BioGel
|
Class BioGlob : BioGel
|
||||||
{
|
{
|
||||||
|
int numsplash;
|
||||||
|
|
||||||
override void AlignSelf()
|
override void AlignSelf()
|
||||||
{
|
{
|
||||||
Super.AlignSelf();
|
Super.AlignSelf();
|
||||||
// TODO splashes
|
if ( !bAMBUSH ) numsplash = 2*Scale.x-1;
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
|
Vector3 ofs = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||||
|
for ( int i=0; i<2; i++ )
|
||||||
|
{
|
||||||
|
if ( numsplash-- <= 0 ) return;
|
||||||
|
Vector3 dir = (ofs+(FRandom[GES](-.8,.8),FRandom[GES](-.8,.8),FRandom[GES](-.8,.8))).unit();
|
||||||
|
let d = Spawn("BioSplash",pos+ofs*4);
|
||||||
|
d.target = target;
|
||||||
|
d.master = self;
|
||||||
|
d.scale *= FRandom[GES](0.5,0.7);
|
||||||
|
d.angle = atan2(dir.y,dir.x);
|
||||||
|
d.pitch = -asin(dir.z);
|
||||||
|
d.vel = (cos(d.angle)*cos(d.pitch),sin(d.angle)*cos(d.pitch),-sin(d.pitch))*d.speed*FRandom[GES](0.25,0.35);
|
||||||
|
d.vel.z -= 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -190,10 +354,58 @@ Class BioSplash : BioGel
|
||||||
|
|
||||||
Class BioRifle : UTWeapon
|
Class BioRifle : UTWeapon
|
||||||
{
|
{
|
||||||
|
double charge;
|
||||||
|
|
||||||
|
action void A_BioFire( bool alt = false )
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
if ( !alt )
|
||||||
|
{
|
||||||
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
|
}
|
||||||
|
A_PlaySound("ges/fire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
|
if ( alt ) A_QuakeEx(1+0.5*invoker.charge,1+0.5*invoker.charge,1+0.5*invoker.charge,5+1.2*invoker.charge,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05+0.01*invoker.charge);
|
||||||
|
else A_QuakeEx(1,1,1,5,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||||
|
Vector3 x, y, z;
|
||||||
|
double a, s;
|
||||||
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+8.0*y-5.0*z;
|
||||||
|
Actor p;
|
||||||
|
if ( alt )
|
||||||
|
{
|
||||||
|
p = Spawn("BioGlob",origin);
|
||||||
|
p.A_SetScale(1+0.8*invoker.charge);
|
||||||
|
}
|
||||||
|
else p = Spawn("BioGel",origin);
|
||||||
|
p.angle = angle;
|
||||||
|
p.pitch = BulletSlope();
|
||||||
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
|
p.target = self;
|
||||||
|
}
|
||||||
|
action void A_BeginCharge()
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
invoker.charge = 0;
|
||||||
|
A_PlaySound("ges/charge",CHAN_WEAPON);
|
||||||
|
}
|
||||||
|
action void A_ChargeUp()
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
if ( invoker.charge >= 5.1 ) return;
|
||||||
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
|
invoker.charge = min(5.1,invoker.charge+0.5);
|
||||||
|
}
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Tag "GES Bio Rifle";
|
Tag "GES Bio Rifle";
|
||||||
Inventory.PickupMessage "You got the GES BioRifle.";
|
Inventory.PickupMessage "You got the GES BioRifle.";
|
||||||
|
Weapon.UpSound "ges/select";
|
||||||
Weapon.SlotNumber 3;
|
Weapon.SlotNumber 3;
|
||||||
Weapon.AmmoType "BioAmmo";
|
Weapon.AmmoType "BioAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -211,16 +423,74 @@ Class BioRifle : UTWeapon
|
||||||
Ready:
|
Ready:
|
||||||
BIOS ABCDEFGHIJKLMNOPQRSTUV 1;
|
BIOS ABCDEFGHIJKLMNOPQRSTUV 1;
|
||||||
Idle:
|
Idle:
|
||||||
BIOI A 1 A_WeaponReady();
|
BIOI A 1
|
||||||
|
{
|
||||||
|
A_CheckReload();
|
||||||
|
A_WeaponReady();
|
||||||
|
}
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
Fire:
|
Fire:
|
||||||
BIOF ABCDEFGHI 1;
|
BIOF A 1 A_BioFire();
|
||||||
|
BIOF BCDEFGHI 1;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
AltFire:
|
AltFire:
|
||||||
BIOC ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
BIOC A 4 A_BeginCharge();
|
||||||
BIC2 ABCDE 1;
|
BIOC B 5 A_ChargeUp();
|
||||||
BIOM A 1;
|
BIOC CD 5;
|
||||||
|
BIOC E 0 A_Refire("AltFire2");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire2:
|
||||||
|
BIOC E 5 A_ChargeUp();
|
||||||
|
BIOC FG 5;
|
||||||
|
BIOC H 0 A_Refire("AltFire3");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire3:
|
||||||
|
BIOC H 5 A_ChargeUp();
|
||||||
|
BIOC IJ 5;
|
||||||
|
BIOC K 0 A_Refire("AltFire4");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire4:
|
||||||
|
BIOC K 5 A_ChargeUp();
|
||||||
|
BIOC LM 5;
|
||||||
|
BIOC N 0 A_Refire("AltFire5");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire5:
|
||||||
|
BIOC N 5 A_ChargeUp();
|
||||||
|
BIOC OP 5;
|
||||||
|
BIOC Q 0 A_Refire("AltFire6");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire6:
|
||||||
|
BIOC Q 5 A_ChargeUp();
|
||||||
|
BIOC RS 5;
|
||||||
|
BIOC T 0 A_Refire("AltFire7");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire7:
|
||||||
|
BIOC T 5 A_ChargeUp();
|
||||||
|
BIOC UV 5;
|
||||||
|
BIOC W 0 A_Refire("AltFire8");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire8:
|
||||||
|
BIOC W 5 A_ChargeUp();
|
||||||
|
BIOC XY 5;
|
||||||
|
BIOC Z 0 A_Refire("AltFire9");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire9:
|
||||||
|
BIOC Z 5 A_ChargeUp();
|
||||||
|
BIC2 AB 5;
|
||||||
|
BIC2 C 0 A_Refire("AltFire10");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltFire10:
|
||||||
|
BIC2 C 5 A_ChargeUp();
|
||||||
|
BIC2 DE 5;
|
||||||
|
BIOM A 0 A_Refire("AltHeld");
|
||||||
|
Goto AltRelease;
|
||||||
|
AltHeld:
|
||||||
|
BIOM A 5 { invoker.charge = min(5.1,invoker.charge+0.1); }
|
||||||
|
BIOM A 0 A_Refire("AltHeld");
|
||||||
|
AltRelease:
|
||||||
BIOE A 1;
|
BIOE A 1;
|
||||||
|
BIOF A 2 A_BioFire(true);
|
||||||
|
BIOF BCDEFGHI 2;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
Select:
|
Select:
|
||||||
BIOS A 1 A_Raise(int.max);
|
BIOS A 1 A_Raise(int.max);
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ Class FlakAmmo : Ammo
|
||||||
{
|
{
|
||||||
Tag "Flak Shells";
|
Tag "Flak Shells";
|
||||||
Inventory.PickupMessage "You picked up 10 Flak Shells.";
|
Inventory.PickupMessage "You picked up 10 Flak Shells.";
|
||||||
Inventory.PickupSound "ut/ammo";
|
|
||||||
Inventory.Amount 10;
|
Inventory.Amount 10;
|
||||||
Inventory.MaxAmount 50;
|
Inventory.MaxAmount 50;
|
||||||
Ammo.BackpackAmount 50;
|
Ammo.BackpackAmount 50;
|
||||||
|
|
@ -41,7 +40,7 @@ Class ChunkLight : DynamicLight
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
DynamicLight.Type "Point";
|
DynamicLight.Type "Point";
|
||||||
Args 255,224,8;
|
Args 255,224,128,8;
|
||||||
}
|
}
|
||||||
override void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
|
|
@ -55,6 +54,7 @@ Class ChunkLight : DynamicLight
|
||||||
Destroy();
|
Destroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
args[LIGHT_RED] = 255*target.alpha;
|
args[LIGHT_RED] = 255*target.alpha;
|
||||||
args[LIGHT_GREEN] = 224*target.alpha;
|
args[LIGHT_GREEN] = 224*target.alpha;
|
||||||
args[LIGHT_BLUE] = 128*target.alpha;
|
args[LIGHT_BLUE] = 128*target.alpha;
|
||||||
|
|
@ -84,6 +84,7 @@ Class ChunkTrail : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
A_SpawnParticle("FFFF00",SPF_FULLBRIGHT,1,8,startalphaf:alpha);
|
A_SpawnParticle("FFFF00",SPF_FULLBRIGHT,1,8,startalphaf:alpha);
|
||||||
A_SpawnParticle("E0A000",SPF_FULLBRIGHT,1,16,startalphaf:alpha*0.6);
|
A_SpawnParticle("E0A000",SPF_FULLBRIGHT,1,16,startalphaf:alpha*0.6);
|
||||||
A_SpawnParticle("804000",SPF_FULLBRIGHT,1,32,startalphaf:alpha*0.3);
|
A_SpawnParticle("804000",SPF_FULLBRIGHT,1,32,startalphaf:alpha*0.3);
|
||||||
|
|
@ -111,7 +112,7 @@ Class FlakChunk : Actor
|
||||||
{
|
{
|
||||||
Actor lasthit;
|
Actor lasthit;
|
||||||
ChunkTrail trail;
|
ChunkTrail trail;
|
||||||
double rollvel, pitchvel;
|
double rollvel, pitchvel, yawvel;
|
||||||
double lifetime, lifespeed;
|
double lifetime, lifespeed;
|
||||||
int lifetics;
|
int lifetics;
|
||||||
Default
|
Default
|
||||||
|
|
@ -119,7 +120,7 @@ Class FlakChunk : Actor
|
||||||
Obituary "%o was ripped to shreds by %k's Flak Cannon.";
|
Obituary "%o was ripped to shreds by %k's Flak Cannon.";
|
||||||
Radius 4;
|
Radius 4;
|
||||||
Height 4;
|
Height 4;
|
||||||
Speed 80;
|
Speed 50;
|
||||||
DamageFunction Random[Flak](12,18);
|
DamageFunction Random[Flak](12,18);
|
||||||
DamageType 'Shredded';
|
DamageType 'Shredded';
|
||||||
BounceType "Doom";
|
BounceType "Doom";
|
||||||
|
|
@ -142,12 +143,15 @@ Class FlakChunk : Actor
|
||||||
trail.target = self;
|
trail.target = self;
|
||||||
trail.speed = 0.5;
|
trail.speed = 0.5;
|
||||||
rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1);
|
rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1);
|
||||||
|
pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1);
|
||||||
|
yawvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1);
|
||||||
scale *= Frandom[Flak](0.8,1.2);
|
scale *= Frandom[Flak](0.8,1.2);
|
||||||
SetState(ResolveState("Spawn")+Random[Flak](0,3));
|
SetState(ResolveState("Spawn")+Random[Flak](0,3));
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
lifetics++;
|
lifetics++;
|
||||||
if ( lifetics > 3 )
|
if ( lifetics > 3 )
|
||||||
{
|
{
|
||||||
|
|
@ -160,15 +164,24 @@ Class FlakChunk : Actor
|
||||||
if ( InStateSequence(CurState,FindState("Death")) ) return;
|
if ( InStateSequence(CurState,FindState("Death")) ) return;
|
||||||
A_SetRoll(roll+rollvel,SPF_INTERPOLATE);
|
A_SetRoll(roll+rollvel,SPF_INTERPOLATE);
|
||||||
A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE);
|
A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE);
|
||||||
|
A_SetAngle(angle+pitchvel,SPF_INTERPOLATE);
|
||||||
}
|
}
|
||||||
action void A_HandleBounce()
|
action void A_HandleBounce()
|
||||||
{
|
{
|
||||||
A_SprayDecal("WallCrack",-8);
|
A_SprayDecal("WallCrack",-8);
|
||||||
|
int numpt = Random[Flak](8,12);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](2,4);
|
||||||
|
A_SpawnParticle("FFA000",SPF_FULLBRIGHT,Random[Flak](10,20),FRandom[Flak](1.2,3.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,3.0,-1,-0.25);
|
||||||
|
}
|
||||||
A_Gravity();
|
A_Gravity();
|
||||||
invoker.rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
|
invoker.rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
|
||||||
invoker.pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
|
invoker.pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
|
||||||
|
invoker.yawvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
|
||||||
vel = (vel.unit()+(FRandom[Flak](-0.4,0.4),FRandom[Flak](-0.4,0.4),FRandom[Flak](-0.4,0.4))).unit()*vel.length();
|
vel = (vel.unit()+(FRandom[Flak](-0.4,0.4),FRandom[Flak](-0.4,0.4),FRandom[Flak](-0.4,0.4))).unit()*vel.length();
|
||||||
A_PlaySound("flak/bounce",volume:0.3);
|
A_PlaySound("flak/bounce",volume:0.3);
|
||||||
|
A_AlertMonsters();
|
||||||
if ( vel.length() < 4.0 ) ExplodeMissile();
|
if ( vel.length() < 4.0 ) ExplodeMissile();
|
||||||
}
|
}
|
||||||
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
|
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
|
||||||
|
|
@ -177,6 +190,7 @@ Class FlakChunk : Actor
|
||||||
{
|
{
|
||||||
if ( target != lasthit ) target.SpawnBlood(pos,AngleTo(target),damage);
|
if ( target != lasthit ) target.SpawnBlood(pos,AngleTo(target),damage);
|
||||||
A_PlaySound("flak/meat",volume:0.3);
|
A_PlaySound("flak/meat",volume:0.3);
|
||||||
|
A_AlertMonsters();
|
||||||
}
|
}
|
||||||
lasthit = target;
|
lasthit = target;
|
||||||
return damage;
|
return damage;
|
||||||
|
|
@ -249,6 +263,7 @@ Class SlugSmoke : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
lifetime += lifespeed;
|
lifetime += lifespeed;
|
||||||
if ( waterlevel <= 0 ) A_SpawnParticle("AAAAAA",0,50,16.0,velx:FRandom[Flak](-0.5,0.5),vely:FRandom[Flak](-0.5,0.5),velz:FRandom[Flak](-0.5,0.5),accelz:0.05,startalphaf:scale.x,sizestep:1.0);
|
if ( waterlevel <= 0 ) A_SpawnParticle("AAAAAA",0,50,16.0,velx:FRandom[Flak](-0.5,0.5),vely:FRandom[Flak](-0.5,0.5),velz:FRandom[Flak](-0.5,0.5),accelz:0.05,startalphaf:scale.x,sizestep:1.0);
|
||||||
scale.x = max(0,1-lifetime);
|
scale.x = max(0,1-lifetime);
|
||||||
|
|
@ -278,6 +293,7 @@ Class SlugLight : DynamicLight
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
args[LIGHT_RED] = 255*lifetime;
|
args[LIGHT_RED] = 255*lifetime;
|
||||||
args[LIGHT_GREEN] = 224*lifetime;
|
args[LIGHT_GREEN] = 224*lifetime;
|
||||||
args[LIGHT_BLUE] = 128*lifetime;
|
args[LIGHT_BLUE] = 128*lifetime;
|
||||||
|
|
@ -320,6 +336,7 @@ Class FlakSlug : Actor
|
||||||
A_Explode(Random[Flak](60,80),150);
|
A_Explode(Random[Flak](60,80),150);
|
||||||
A_QuakeEx(4,4,4,8,0,200,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
A_QuakeEx(4,4,4,8,0,200,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||||
A_PlaySound("flak/explode",CHAN_VOICE);
|
A_PlaySound("flak/explode",CHAN_VOICE);
|
||||||
|
A_AlertMonsters();
|
||||||
if ( !Tracer ) Spawn("SlugSmoke",pos);
|
if ( !Tracer ) Spawn("SlugSmoke",pos);
|
||||||
Spawn("SlugLight",pos);
|
Spawn("SlugLight",pos);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -337,6 +354,12 @@ Class FlakSlug : Actor
|
||||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed*FRandom[Flak](0.5,1.5);
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed*FRandom[Flak](0.5,1.5);
|
||||||
p.target = target;
|
p.target = target;
|
||||||
}
|
}
|
||||||
|
int numpt = Random[Flak](40,80);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](2,4);
|
||||||
|
A_SpawnParticle("FFA000",SPF_FULLBRIGHT,Random[Flak](20,40),FRandom[Flak](4.8,7.2),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,3.0,-1,-0.25);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
@ -356,6 +379,7 @@ Class FlakSlug : Actor
|
||||||
|
|
||||||
Class FlakLight : DynamicLight
|
Class FlakLight : DynamicLight
|
||||||
{
|
{
|
||||||
|
int cnt;
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
DynamicLight.Type "Point";
|
DynamicLight.Type "Point";
|
||||||
|
|
@ -376,57 +400,14 @@ Class FlakLight : DynamicLight
|
||||||
Destroy();
|
Destroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SetOrigin(target.pos,true);
|
if ( target.player ) SetOrigin(target.pos+(0,0,target.player.viewheight),true);
|
||||||
}
|
else SetOrigin(target.pos,true);
|
||||||
}
|
if ( cnt++ > 2 ) Destroy();
|
||||||
|
|
||||||
Class FlakMuzzle : Actor
|
|
||||||
{
|
|
||||||
Vector3 ofs;
|
|
||||||
|
|
||||||
override void PostBeginPlay()
|
|
||||||
{
|
|
||||||
Super.PostBeginPlay();
|
|
||||||
let l = Spawn("FlakLight",pos);
|
|
||||||
l.target = self;
|
|
||||||
if ( target ) ofs = target.Vec3To(self);
|
|
||||||
else ofs = (0,0,0);
|
|
||||||
}
|
|
||||||
override void Tick()
|
|
||||||
{
|
|
||||||
Super.Tick();
|
|
||||||
if ( !target )
|
|
||||||
{
|
|
||||||
Destroy();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
bInvisible = (target != players[consoleplayer].camera);
|
|
||||||
SetOrigin(target.Vec3Offset(ofs.x-target.vel.x,ofs.y-target.vel.y,ofs.z-target.vel.z),true);
|
|
||||||
}
|
|
||||||
Default
|
|
||||||
{
|
|
||||||
RenderStyle "Add";
|
|
||||||
Radius 0.1;
|
|
||||||
Height 0;
|
|
||||||
Scale 0.08;
|
|
||||||
+NOGRAVITY;
|
|
||||||
+NOBLOCKMAP;
|
|
||||||
+DONTSPLASH;
|
|
||||||
}
|
|
||||||
States
|
|
||||||
{
|
|
||||||
Spawn:
|
|
||||||
FMUZ A 3 Bright;
|
|
||||||
Stop;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class FlakCannon : UTWeapon
|
Class FlakCannon : UTWeapon
|
||||||
{
|
{
|
||||||
action void A_Selecting()
|
|
||||||
{
|
|
||||||
A_PlaySound("flak/select",CHAN_WEAPON);
|
|
||||||
}
|
|
||||||
action void A_Loading( bool first = false )
|
action void A_Loading( bool first = false )
|
||||||
{
|
{
|
||||||
if ( first ) A_PlaySound("flak/load",CHAN_WEAPON);
|
if ( first ) A_PlaySound("flak/load",CHAN_WEAPON);
|
||||||
|
|
@ -439,13 +420,15 @@ Class FlakCannon : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("flak/fire",CHAN_WEAPON);
|
A_PlaySound("flak/fire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
A_QuakeEx(1,1,1,3,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
A_QuakeEx(1,1,1,3,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
double a, s;
|
||||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+2.0*y-3.0*z;
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+2.0*y-3.0*z;
|
||||||
let m = Spawn("FlakMuzzle",pos+(0,0,player.viewheight)+20.0*x+5.0*y-3.0*z);
|
A_Overlay(-2,"MuzzleFlash");
|
||||||
m.target = self;
|
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||||
|
A_OverlayRenderstyle(-2,STYLE_Add);
|
||||||
[x, y, z] = Matrix4.GetAxes(BulletSlope(),angle,roll);
|
[x, y, z] = Matrix4.GetAxes(BulletSlope(),angle,roll);
|
||||||
Actor p;
|
Actor p;
|
||||||
for ( int i=0; i<8; i++ )
|
for ( int i=0; i<8; i++ )
|
||||||
|
|
@ -459,6 +442,12 @@ Class FlakCannon : UTWeapon
|
||||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
p.target = self;
|
p.target = self;
|
||||||
}
|
}
|
||||||
|
int numpt = Random[Flak](20,30);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (x+(FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8))).unit()*FRandom[Flak](2,4);
|
||||||
|
A_SpawnParticle("FFA000",SPF_FULLBRIGHT,Random[Flak](10,20),FRandom[Flak](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,-0.1,3.0,-1,-0.25);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
action void A_FireSlug()
|
action void A_FireSlug()
|
||||||
{
|
{
|
||||||
|
|
@ -467,24 +456,33 @@ Class FlakCannon : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("flak/altfire",CHAN_WEAPON);
|
A_PlaySound("flak/altfire",CHAN_WEAPON);
|
||||||
A_QuakeEx(2,2,2,10,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_AlertMonsters();
|
||||||
|
A_QuakeEx(2,2,2,6,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
double a, s;
|
||||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+2.0*y-3.0*z;
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+2.0*y-3.0*z;
|
||||||
let m = Spawn("FlakMuzzle",pos+(0,0,player.viewheight)+20.0*x+5.0*y-3.0*z);
|
A_Overlay(-2,"MuzzleFlash");
|
||||||
m.target = self;
|
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||||
|
A_OverlayRenderstyle(-2,STYLE_Add);
|
||||||
Actor p = Spawn("FlakSlug",origin);
|
Actor p = Spawn("FlakSlug",origin);
|
||||||
p.angle = angle;
|
p.angle = angle;
|
||||||
p.pitch = BulletSlope();
|
p.pitch = BulletSlope();
|
||||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
p.target = self;
|
p.target = self;
|
||||||
|
int numpt = Random[Flak](10,15);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (x+(FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8))).unit()*FRandom[Flak](2,4);
|
||||||
|
A_SpawnParticle("FFA000",SPF_FULLBRIGHT,Random[Flak](10,20),FRandom[Flak](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,-0.1,3.0,-1,-0.25);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Tag "Flak Cannon";
|
Tag "Flak Cannon";
|
||||||
Inventory.PickupMessage "You got the Flak Cannon.";
|
Inventory.PickupMessage "You got the Flak Cannon.";
|
||||||
|
Weapon.UpSound "flak/select";
|
||||||
Weapon.SlotNumber 8;
|
Weapon.SlotNumber 8;
|
||||||
Weapon.AmmoType "FlakAmmo";
|
Weapon.AmmoType "FlakAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -500,8 +498,7 @@ Class FlakCannon : UTWeapon
|
||||||
FPCK B -1;
|
FPCK B -1;
|
||||||
Stop;
|
Stop;
|
||||||
Ready:
|
Ready:
|
||||||
FLKS A 1 A_Selecting();
|
FLKS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||||
FLKS BCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
|
||||||
FKS2 ABC 1;
|
FKS2 ABC 1;
|
||||||
FLKL A 1 A_Loading(true);
|
FLKL A 1 A_Loading(true);
|
||||||
FLKL BCDEFGHIJKLMNO 1;
|
FLKL BCDEFGHIJKLMNO 1;
|
||||||
|
|
@ -534,5 +531,12 @@ Class FlakCannon : UTWeapon
|
||||||
FLKD ABCDEFGHIJ 2;
|
FLKD ABCDEFGHIJ 2;
|
||||||
FLKD J 1 A_Lower(int.max);
|
FLKD J 1 A_Lower(int.max);
|
||||||
Wait;
|
Wait;
|
||||||
|
MuzzleFlash:
|
||||||
|
FMUZ A 3 Bright
|
||||||
|
{
|
||||||
|
let l = Spawn("FlakLight",pos);
|
||||||
|
l.target = self;
|
||||||
|
}
|
||||||
|
Stop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
316
zscript/pulsegun.zsc
Normal file
|
|
@ -0,0 +1,316 @@
|
||||||
|
Class PulseAmmo : Ammo
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Tag "Pulse Cell";
|
||||||
|
Inventory.PickupMessage "You picked up a Pulse Cell.";
|
||||||
|
Inventory.Amount 25;
|
||||||
|
Inventory.MaxAmount 200;
|
||||||
|
Ammo.BackpackAmount 50;
|
||||||
|
Ammo.BackpackMaxAmount 400;
|
||||||
|
Ammo.DropAmount 25;
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
PAMO A -1;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class PulseBall : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
RenderStyle "Add";
|
||||||
|
PROJECTILE;
|
||||||
|
Scale 0.2;
|
||||||
|
Speed 30;
|
||||||
|
}
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
A_PlaySound("pulse/fly",CHAN_BODY,0.8,true,8.0);
|
||||||
|
}
|
||||||
|
action void A_BallExp()
|
||||||
|
{
|
||||||
|
A_SetScale(0.45);
|
||||||
|
A_PlaySound("pulse/hit",CHAN_BODY);
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
PBAL ABCDE 1 Bright;
|
||||||
|
Loop;
|
||||||
|
Death:
|
||||||
|
TNT1 A 0 A_BallExp();
|
||||||
|
PBAL ABCDE 3 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class PulseBolt : Actor
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Class StarterBolt : PulseBolt
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Class PulseGun : UTWeapon
|
||||||
|
{
|
||||||
|
int clipcount;
|
||||||
|
double sangle;
|
||||||
|
StarterBolt beam;
|
||||||
|
|
||||||
|
Property ClipCount : clipcount;
|
||||||
|
|
||||||
|
action void A_Reloading()
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
invoker.clipcount = Min(50,weap.Ammo1.Amount);
|
||||||
|
A_PlaySound("pulse/reload",CHAN_WEAPON);
|
||||||
|
}
|
||||||
|
action void A_DrainAmmo()
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
|
invoker.clipcount--;
|
||||||
|
A_AlertMonsters();
|
||||||
|
Vector3 x, y, z;
|
||||||
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+4.5*y-2.4*z;
|
||||||
|
int numpt = Random[Pulse](2,5);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4);
|
||||||
|
A_SpawnParticle("A0FFA0",SPF_FULLBRIGHT,Random[Pulse](10,20),FRandom[Pulse](1.2,2.4),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1);
|
||||||
|
A_SpawnParticle("60C040",SPF_FULLBRIGHT,Random[Pulse](15,25),FRandom[Pulse](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
action void A_PulseRefire( statelabel flash = null )
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap || !player ) return;
|
||||||
|
if ( (invoker.clipcount <= 0) || (weap.Ammo1.Amount <= 0) )
|
||||||
|
{
|
||||||
|
A_ClearRefire();
|
||||||
|
if ( weap.bAltFire ) player.setpsprite(PSP_WEAPON,weap.FindState("AltRelease"));
|
||||||
|
else player.setpsprite(PSP_WEAPON,weap.FindState("Release"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
A_Refire(flash);
|
||||||
|
}
|
||||||
|
action void A_PulseFire()
|
||||||
|
{
|
||||||
|
Weapon weap = Weapon(invoker);
|
||||||
|
if ( !weap ) return;
|
||||||
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
|
invoker.clipcount--;
|
||||||
|
A_AlertMonsters();
|
||||||
|
A_QuakeEx(1,1,1,2,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||||
|
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+4.0*y-2.0*z;
|
||||||
|
origin += y*cos(invoker.sangle)*4.0+z*sin(invoker.sangle)*4.0;
|
||||||
|
invoker.sangle += 100;
|
||||||
|
Actor p = Spawn("PulseBall",origin);
|
||||||
|
p.angle = angle;
|
||||||
|
p.pitch = BulletSlope();
|
||||||
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
|
p.target = self;
|
||||||
|
int numpt = Random[Pulse](2,5);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4);
|
||||||
|
A_SpawnParticle("A0FFA0",SPF_FULLBRIGHT,Random[Pulse](10,20),FRandom[Pulse](1.2,2.4),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1);
|
||||||
|
A_SpawnParticle("60C040",SPF_FULLBRIGHT,Random[Pulse](15,25),FRandom[Pulse](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
action void A_StartBeam()
|
||||||
|
{
|
||||||
|
A_PlaySound("pulse/bolt",CHAN_WEAPON,1.0,true);
|
||||||
|
invoker.beam = StarterBolt(Spawn("StarterBolt",pos));
|
||||||
|
invoker.beam.target = self;
|
||||||
|
}
|
||||||
|
action void A_StopBeam()
|
||||||
|
{
|
||||||
|
A_StopSound(CHAN_WEAPON);
|
||||||
|
if ( invoker.beam ) invoker.beam.Destroy();
|
||||||
|
}
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Tag "Pulse Gun";
|
||||||
|
Inventory.PickupMessage "You got a Pulse Gun";
|
||||||
|
Weapon.UpSound "pulse/select";
|
||||||
|
Weapon.SlotNumber 5;
|
||||||
|
Weapon.AmmoType "PulseAmmo";
|
||||||
|
Weapon.AmmoUse 1;
|
||||||
|
Weapon.AmmoType2 "PulseAmmo";
|
||||||
|
Weapon.AmmoUse2 1;
|
||||||
|
Weapon.AmmoGive 60;
|
||||||
|
PulseGun.ClipCount 50;
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
PGNP A -1;
|
||||||
|
Stop;
|
||||||
|
PGNP B -1;
|
||||||
|
Stop;
|
||||||
|
Ready:
|
||||||
|
PGNS ABCDEFGHIJKLMNOPQRSTUVW 1;
|
||||||
|
Idle:
|
||||||
|
PGNI A 1
|
||||||
|
{
|
||||||
|
A_CheckReload();
|
||||||
|
if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) return A_Jump(255,"Reload");
|
||||||
|
A_WeaponReady(WRF_ALLOWRELOAD);
|
||||||
|
return A_JumpIf(!Random[Pulse](0,300),1);
|
||||||
|
}
|
||||||
|
Wait;
|
||||||
|
PGNI ABCDEFGHIJKLMNOPQRSTUVWXYZ 1
|
||||||
|
{
|
||||||
|
A_CheckReload();
|
||||||
|
A_WeaponReady(WRF_ALLOWRELOAD);
|
||||||
|
}
|
||||||
|
Goto Idle;
|
||||||
|
Fire:
|
||||||
|
PGNI A 0 A_PlaySound("pulse/fire",CHAN_WEAPON,1.0,true);
|
||||||
|
Hold:
|
||||||
|
PGNF A 1 A_PulseFire();
|
||||||
|
PGNF B 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF C 1 A_PulseFire();
|
||||||
|
PGNF D 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF E 1 A_PulseFire();
|
||||||
|
PGNF F 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF G 1 A_PulseFire();
|
||||||
|
PGNF H 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF I 1 A_PulseFire();
|
||||||
|
PGNF J 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF K 1 A_PulseFire();
|
||||||
|
PGNF L 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF M 1 A_PulseFire();
|
||||||
|
PGNF N 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF O 1 A_PulseFire();
|
||||||
|
PGNF P 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF Q 1 A_PulseFire();
|
||||||
|
PGNF R 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF S 1 A_PulseFire();
|
||||||
|
PGNF T 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF U 1 A_PulseFire();
|
||||||
|
PGNF V 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF W 1 A_PulseFire();
|
||||||
|
PGNF X 1;
|
||||||
|
PGNF Y 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGNF Y 1 A_PulseFire();
|
||||||
|
PGNF Z 1;
|
||||||
|
PGF2 A 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 A 1 A_PulseFire();
|
||||||
|
PGF2 B 1;
|
||||||
|
PGF2 C 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 C 1 A_PulseFire();
|
||||||
|
PGF2 D 1;
|
||||||
|
PGF2 E 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 E 1 A_PulseFire();
|
||||||
|
PGF2 F 1;
|
||||||
|
PGF2 G 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 G 1 A_PulseFire();
|
||||||
|
PGF2 H 1;
|
||||||
|
PGF2 I 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 I 1 A_PulseFire();
|
||||||
|
PGF2 J 1;
|
||||||
|
PGF2 K 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 K 1 A_PulseFire();
|
||||||
|
PGF2 L 1;
|
||||||
|
PGF2 M 0 A_PulseRefire(1);
|
||||||
|
Goto Release;
|
||||||
|
PGF2 M 1 A_PulseFire();
|
||||||
|
PGF2 N 1;
|
||||||
|
PGNF A 0 A_PulseRefire("Hold");
|
||||||
|
Release:
|
||||||
|
PGNC A 0 A_PlaySound("pulse/down",CHAN_WEAPON);
|
||||||
|
PGNC ABCDEFGHIJKLMNOPQRSTUVWXY 1;
|
||||||
|
PGNI A 1;
|
||||||
|
Goto Idle;
|
||||||
|
AltFire:
|
||||||
|
PGBS ABCDE 1;
|
||||||
|
PGBL A 0 A_StartBeam();
|
||||||
|
AltHold:
|
||||||
|
PGBL A 1 A_DrainAmmo();
|
||||||
|
PGBL B 1;
|
||||||
|
PGBL C 0 A_PulseRefire(1);
|
||||||
|
Goto AltRelease;
|
||||||
|
PGBL C 1 A_DrainAmmo();
|
||||||
|
PGBL D 1;
|
||||||
|
PGBL E 0 A_PulseRefire(1);
|
||||||
|
Goto AltRelease;
|
||||||
|
PGBL E 1 A_DrainAmmo();
|
||||||
|
PGBL F 1;
|
||||||
|
PGBL G 0 A_PulseRefire(1);
|
||||||
|
Goto AltRelease;
|
||||||
|
PGBL G 1 A_DrainAmmo();
|
||||||
|
PGBL H 1;
|
||||||
|
PGBL I 0 A_PulseRefire(1);
|
||||||
|
Goto AltRelease;
|
||||||
|
PGBL I 1 A_DrainAmmo();
|
||||||
|
PGBL J 1;
|
||||||
|
PGBL A 0 A_PulseRefire("AltHold");
|
||||||
|
AltRelease:
|
||||||
|
PGBE A 0 A_StopBeam();
|
||||||
|
PGBE ABCDE 1;
|
||||||
|
Goto Idle;
|
||||||
|
Reload:
|
||||||
|
PGNI A 1 A_JumpIf(invoker.clipcount >= 50,"Idle");
|
||||||
|
PGNR A 1 A_Reloading();
|
||||||
|
PGNR BCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||||
|
PGR2 ABCDEFGHIJKLMNOPQRSTUVWX 1;
|
||||||
|
Goto Idle;
|
||||||
|
Deselect:
|
||||||
|
PGNS WVUTSRQPONMLKJIHGFEDCBA 1;
|
||||||
|
PGNS A 1 A_Lower(int.max);
|
||||||
|
Wait;
|
||||||
|
Select:
|
||||||
|
PGNS A 1 A_Raise(int.max);
|
||||||
|
Wait;
|
||||||
|
MuzzleFlash:
|
||||||
|
PMUZ A 1 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,6 @@ Class ShockAmmo : Ammo
|
||||||
{
|
{
|
||||||
Tag "ShockCore";
|
Tag "ShockCore";
|
||||||
Inventory.PickupMessage "You picked up a Shock Core.";
|
Inventory.PickupMessage "You picked up a Shock Core.";
|
||||||
Inventory.PickupSound "ut/ammo";
|
|
||||||
Inventory.Amount 10;
|
Inventory.Amount 10;
|
||||||
Inventory.MaxAmount 50;
|
Inventory.MaxAmount 50;
|
||||||
Ammo.BackpackAmount 50;
|
Ammo.BackpackAmount 50;
|
||||||
|
|
@ -56,6 +55,7 @@ Class ShockRifleWave : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
alpha -= 1/50.;
|
alpha -= 1/50.;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
@ -83,6 +83,7 @@ Class ShockBeamRing : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
alpha -= 1./ReactionTime;
|
alpha -= 1./ReactionTime;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
@ -139,6 +140,7 @@ Class ShockBeam : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
if ( !moving ) return;
|
if ( !moving ) return;
|
||||||
// step trace
|
// step trace
|
||||||
tracedir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
tracedir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||||
|
|
@ -147,12 +149,13 @@ Class ShockBeam : Actor
|
||||||
// spawn particles
|
// spawn particles
|
||||||
for ( int i=0; i<t.Results.Distance; i+=80 )
|
for ( int i=0; i<t.Results.Distance; i+=80 )
|
||||||
Spawn("ShockBeamLight",Vec3Offset(tracedir.x*i,tracedir.y*i,tracedir.z*i));
|
Spawn("ShockBeamLight",Vec3Offset(tracedir.x*i,tracedir.y*i,tracedir.z*i));
|
||||||
for ( int i=0; i<t.Results.Distance; i+=8 )
|
for ( int i=0; i<t.Results.Distance; i+=4 )
|
||||||
{
|
{
|
||||||
A_SpawnParticle("F0A0FF",SPF_FULLBRIGHT,15,2,0,tracedir.x*i,tracedir.y*i,tracedir.z*i,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:1,sizestep:-.1);
|
Vector3 pofs = tracedir*FRandom[ASMD](-4,4)+(FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1));
|
||||||
A_SpawnParticle("A040FF",SPF_FULLBRIGHT,20,4,0,tracedir.x*i,tracedir.y*i,tracedir.z*i,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.75,sizestep:-.1);
|
A_SpawnParticle("C0A0FF",SPF_FULLBRIGHT,15,2,0,tracedir.x*i+pofs.x,tracedir.y*i+pofs.y,tracedir.z*i+pofs.z,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:1,sizestep:-.1);
|
||||||
A_SpawnParticle("8020FF",SPF_FULLBRIGHT,25,6,0,tracedir.x*i,tracedir.y*i,tracedir.z*i,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.5,sizestep:-.1);
|
A_SpawnParticle("8040FF",SPF_FULLBRIGHT,20,4,0,tracedir.x*i+pofs.x,tracedir.y*i+pofs.y,tracedir.z*i+pofs.z,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.75,sizestep:-.1);
|
||||||
A_SpawnParticle("602080",SPF_FULLBRIGHT,30,8,0,tracedir.x*i,tracedir.y*i,tracedir.z*i,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.25,sizestep:-.1);
|
A_SpawnParticle("5020FF",SPF_FULLBRIGHT,25,6,0,tracedir.x*i+pofs.x,tracedir.y*i+pofs.y,tracedir.z*i+pofs.z,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.5,sizestep:-.1);
|
||||||
|
A_SpawnParticle("402080",SPF_FULLBRIGHT,30,8,0,tracedir.x*i+pofs.x,tracedir.y*i+pofs.y,tracedir.z*i+pofs.z,FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),FRandom[ASMD](-.1,.1),startalphaf:.25,sizestep:-.1);
|
||||||
}
|
}
|
||||||
if ( totaldist >= 10000.0 )
|
if ( totaldist >= 10000.0 )
|
||||||
{
|
{
|
||||||
|
|
@ -192,6 +195,18 @@ Class ShockBeam : Actor
|
||||||
r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x);
|
r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x);
|
||||||
r.pitch = asin(-t.Results.HitVector.z);
|
r.pitch = asin(-t.Results.HitVector.z);
|
||||||
A_PlaySound("shock/blast",CHAN_WEAPON,attenuation:0.5);
|
A_PlaySound("shock/blast",CHAN_WEAPON,attenuation:0.5);
|
||||||
|
int numpt = Random[ASMD](200,300);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](2,8);
|
||||||
|
A_SpawnParticle("C0A0FF",SPF_FULLBRIGHT,Random[ASMD](20,80),FRandom[ASMD](1.6,4.8),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-.05);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("8040FF",SPF_FULLBRIGHT,Random[ASMD](30,100),FRandom[ASMD](3.2,9.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.75,-1,-.05);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("5020FF",SPF_FULLBRIGHT,Random[ASMD](40,120),FRandom[ASMD](4.8,11.2),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-.05);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("402080",SPF_FULLBRIGHT,Random[ASMD](50,140),FRandom[ASMD](5.6,12.8),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.25,-1,-.05);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -231,6 +246,19 @@ Class ShockBeam : Actor
|
||||||
Spawn("ShockBeamLight",pos);
|
Spawn("ShockBeamLight",pos);
|
||||||
A_QuakeEx(2,2,2,5,0,120,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(2,2,2,5,0,120,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
A_PlaySound("shock/hit",CHAN_VOICE);
|
A_PlaySound("shock/hit",CHAN_VOICE);
|
||||||
|
A_AlertMonsters();
|
||||||
|
int numpt = Random[ASMD](20,50);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("C0A0FF",SPF_FULLBRIGHT,Random[ASMD](20,40),FRandom[ASMD](1.6,2.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("8040FF",SPF_FULLBRIGHT,Random[ASMD](30,50),FRandom[ASMD](3.2,4.8),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.75,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("5020FF",SPF_FULLBRIGHT,Random[ASMD](40,60),FRandom[ASMD](4.8,5.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("402080",SPF_FULLBRIGHT,Random[ASMD](50,70),FRandom[ASMD](5.6,6.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.25,-1,-.1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
@ -313,6 +341,7 @@ Class ShockExplLight : DynamicLight
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
args[LIGHT_RED] = 160*lifetime;
|
args[LIGHT_RED] = 160*lifetime;
|
||||||
args[LIGHT_GREEN] = 128*lifetime;
|
args[LIGHT_GREEN] = 128*lifetime;
|
||||||
args[LIGHT_BLUE] = 255*lifetime;
|
args[LIGHT_BLUE] = 255*lifetime;
|
||||||
|
|
@ -368,6 +397,19 @@ Class ShockBall : Actor
|
||||||
A_PlaySound("shock/hit",CHAN_VOICE);
|
A_PlaySound("shock/hit",CHAN_VOICE);
|
||||||
A_PlaySound("shock/ball",CHAN_WEAPON);
|
A_PlaySound("shock/ball",CHAN_WEAPON);
|
||||||
A_QuakeEx(4,4,4,30,0,200,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
A_QuakeEx(4,4,4,30,0,200,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
||||||
|
A_AlertMonsters();
|
||||||
|
int numpt = Random[ASMD](50,100);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
Vector3 pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("C0A0FF",SPF_FULLBRIGHT,Random[ASMD](20,40),FRandom[ASMD](1.6,2.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("8040FF",SPF_FULLBRIGHT,Random[ASMD](30,50),FRandom[ASMD](3.2,4.8),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.75,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("5020FF",SPF_FULLBRIGHT,Random[ASMD](40,60),FRandom[ASMD](4.8,5.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-.1);
|
||||||
|
pvel = (FRandom[ASMD](-1,1),FRandom[ASMD](-1,1),FRandom[ASMD](-1,1)).unit()*FRandom[ASMD](3,12);
|
||||||
|
A_SpawnParticle("402080",SPF_FULLBRIGHT,Random[ASMD](50,70),FRandom[ASMD](5.6,6.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.25,-1,-.1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
|
|
@ -398,10 +440,6 @@ Class ShockBall : Actor
|
||||||
|
|
||||||
Class ShockRifle : UTWeapon
|
Class ShockRifle : UTWeapon
|
||||||
{
|
{
|
||||||
action void A_Selecting()
|
|
||||||
{
|
|
||||||
A_PlaySound("shock/select",CHAN_WEAPON);
|
|
||||||
}
|
|
||||||
action void A_ShockFire()
|
action void A_ShockFire()
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
|
|
@ -409,9 +447,9 @@ Class ShockRifle : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("shock/fire",CHAN_WEAPON);
|
A_PlaySound("shock/fire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
A_QuakeEx(3,3,3,4,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(3,3,3,4,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
|
||||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+3.0*y-4.0*z;
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+3.0*y-4.0*z;
|
||||||
Actor p = Spawn("ShockBeam",origin);
|
Actor p = Spawn("ShockBeam",origin);
|
||||||
|
|
@ -426,9 +464,9 @@ Class ShockRifle : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("shock/altfire",CHAN_WEAPON);
|
A_PlaySound("shock/altfire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
A_QuakeEx(3,3,3,8,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(3,3,3,8,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
|
||||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+3.0*y-4.0*z;
|
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+3.0*y-4.0*z;
|
||||||
Actor p = Spawn("ShockBall",origin);
|
Actor p = Spawn("ShockBall",origin);
|
||||||
|
|
@ -442,6 +480,7 @@ Class ShockRifle : UTWeapon
|
||||||
{
|
{
|
||||||
Tag "Shock Rifle";
|
Tag "Shock Rifle";
|
||||||
Inventory.PickupMessage "You got the ASMD Shock Rifle.";
|
Inventory.PickupMessage "You got the ASMD Shock Rifle.";
|
||||||
|
Weapon.UpSound "shock/select";
|
||||||
Weapon.SlotNumber 4;
|
Weapon.SlotNumber 4;
|
||||||
Weapon.AmmoType "ShockAmmo";
|
Weapon.AmmoType "ShockAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -457,8 +496,7 @@ Class ShockRifle : UTWeapon
|
||||||
ASMP B -1;
|
ASMP B -1;
|
||||||
Stop;
|
Stop;
|
||||||
Ready:
|
Ready:
|
||||||
ASMS A 1 A_Selecting();
|
ASMS ABCDEFGHIJKLMNO 1;
|
||||||
ASMS BCDEFGHIJKLMNO 1;
|
|
||||||
Idle:
|
Idle:
|
||||||
ASMI A 1
|
ASMI A 1
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,11 @@ Class UTWeapon : Weapon
|
||||||
|
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Inventory.PickupSound "ut/weapon";
|
|
||||||
Weapon.BobStyle "Smooth";
|
Weapon.BobStyle "Smooth";
|
||||||
Weapon.BobSpeed 1.5;
|
Weapon.BobSpeed 1.5;
|
||||||
Weapon.BobRangeX 0.2;
|
Weapon.BobRangeX 0.2;
|
||||||
Weapon.BobRangeY 0.4;
|
Weapon.BobRangeY 0.4;
|
||||||
|
+WEAPON.NOALERT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ Class WarheadAmmo : Ammo
|
||||||
{
|
{
|
||||||
Tag "Redeemer Missile";
|
Tag "Redeemer Missile";
|
||||||
Inventory.PickupMessage "You picked up a Redeemer Missile.";
|
Inventory.PickupMessage "You picked up a Redeemer Missile.";
|
||||||
Inventory.PickupSound "ut/ammo";
|
|
||||||
Inventory.Amount 1;
|
Inventory.Amount 1;
|
||||||
Inventory.MaxAmount 2;
|
Inventory.MaxAmount 2;
|
||||||
Ammo.BackpackAmount 0;
|
Ammo.BackpackAmount 0;
|
||||||
|
|
@ -48,6 +47,7 @@ Class ShockWave : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
if ( alpha <= 0 ) return;
|
if ( alpha <= 0 ) return;
|
||||||
icount++;
|
icount++;
|
||||||
if ( icount == 4 ) Spawn("WarheadSubExplosion",pos);
|
if ( icount == 4 ) Spawn("WarheadSubExplosion",pos);
|
||||||
|
|
@ -136,6 +136,12 @@ Class WarheadHitbox : Actor
|
||||||
}
|
}
|
||||||
SetOrigin(target.pos-(0,0,height*0.5),true);
|
SetOrigin(target.pos-(0,0,height*0.5),true);
|
||||||
}
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
TNT1 A 10 A_AlertMonsters(0,AMF_TARGETEMITTER);
|
||||||
|
Wait;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Class WarheadExplodLight : DynamicLight
|
Class WarheadExplodLight : DynamicLight
|
||||||
|
|
@ -155,6 +161,7 @@ Class WarheadExplodLight : DynamicLight
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
args[LIGHT_RED] = 255*lifetime;
|
args[LIGHT_RED] = 255*lifetime;
|
||||||
args[LIGHT_GREEN] = 192*lifetime;
|
args[LIGHT_GREEN] = 192*lifetime;
|
||||||
args[LIGHT_BLUE] = 128*lifetime;
|
args[LIGHT_BLUE] = 128*lifetime;
|
||||||
|
|
@ -218,6 +225,7 @@ Class WarShell : Actor
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
if ( vel.length() > 0 )
|
if ( vel.length() > 0 )
|
||||||
{
|
{
|
||||||
Vector3 dir = vel.unit();
|
Vector3 dir = vel.unit();
|
||||||
|
|
@ -251,6 +259,7 @@ Class WarShell : Actor
|
||||||
A_SprayDecal("BigBlast");
|
A_SprayDecal("BigBlast");
|
||||||
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
|
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
|
||||||
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
|
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
|
||||||
|
A_AlertMonsters();
|
||||||
A_SetRenderStyle(1.0,STYLE_Add);
|
A_SetRenderStyle(1.0,STYLE_Add);
|
||||||
Spawn("WarheadExplodLight",pos);
|
Spawn("WarheadExplodLight",pos);
|
||||||
let s = Spawn("ShockWave",pos);
|
let s = Spawn("ShockWave",pos);
|
||||||
|
|
@ -264,6 +273,7 @@ Class WarShell : Actor
|
||||||
A_SprayDecal("BigBlast");
|
A_SprayDecal("BigBlast");
|
||||||
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
|
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
|
||||||
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
|
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
|
||||||
|
A_AlertMonsters();
|
||||||
A_SetRenderStyle(1.0,STYLE_Add);
|
A_SetRenderStyle(1.0,STYLE_Add);
|
||||||
Spawn("WarheadExplodLight",pos);
|
Spawn("WarheadExplodLight",pos);
|
||||||
}
|
}
|
||||||
|
|
@ -299,6 +309,7 @@ Class GuidedWarShell : WarShell
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
Actor.Tick();
|
Actor.Tick();
|
||||||
|
if ( globalfreeze || level.frozen ) return;
|
||||||
if ( !bMISSILE ) return;
|
if ( !bMISSILE ) return;
|
||||||
if ( !target || !target.player || (target.Health <= 0) )
|
if ( !target || !target.player || (target.Health <= 0) )
|
||||||
{
|
{
|
||||||
|
|
@ -475,10 +486,6 @@ Class RedeemerHUDHandler : EventHandler
|
||||||
Class WarheadLauncher : UTWeapon
|
Class WarheadLauncher : UTWeapon
|
||||||
{
|
{
|
||||||
Actor guided;
|
Actor guided;
|
||||||
action void A_Selecting()
|
|
||||||
{
|
|
||||||
A_PlaySound("warhead/select",CHAN_WEAPON);
|
|
||||||
}
|
|
||||||
action void A_WarheadFire()
|
action void A_WarheadFire()
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
|
|
@ -486,6 +493,7 @@ Class WarheadLauncher : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
double a, s;
|
||||||
|
|
@ -505,6 +513,7 @@ Class WarheadLauncher : UTWeapon
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
||||||
|
A_AlertMonsters();
|
||||||
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
double a, s;
|
double a, s;
|
||||||
|
|
@ -524,6 +533,7 @@ Class WarheadLauncher : UTWeapon
|
||||||
{
|
{
|
||||||
Tag "Redeemer";
|
Tag "Redeemer";
|
||||||
Inventory.PickupMessage "You got the Redeemer.";
|
Inventory.PickupMessage "You got the Redeemer.";
|
||||||
|
Weapon.UpSound "warhead/select";
|
||||||
Weapon.SlotNumber 0;
|
Weapon.SlotNumber 0;
|
||||||
Weapon.AmmoType "WarheadAmmo";
|
Weapon.AmmoType "WarheadAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -539,8 +549,7 @@ Class WarheadLauncher : UTWeapon
|
||||||
RDMP B -1;
|
RDMP B -1;
|
||||||
Stop;
|
Stop;
|
||||||
Ready:
|
Ready:
|
||||||
WARS A 1 A_Selecting();
|
WARS ABCDEFGHIJKLMNO 1;
|
||||||
WARS BCDEFGHIJKLMNO 1;
|
|
||||||
Idle:
|
Idle:
|
||||||
WARI A 1
|
WARI A 1
|
||||||
{
|
{
|
||||||
|
|
|
||||||