Dispersion Pistol fully implemented.
Jump boots (mostly) implemented (replacement feature not done yet). Various adjustments. DamNums coloring support.
This commit is contained in:
parent
442dfd818c
commit
ce68db4b36
22 changed files with 822 additions and 36 deletions
|
|
@ -8,6 +8,7 @@ Doom Tournament (currently the devel branch is required).
|
|||
|
||||
## Currently Implemented
|
||||
|
||||
- Dispersion Pistol (slot 1) (replaces fist)
|
||||
- Automag (slot 2) (replaces pistol)
|
||||
- Dual Automags
|
||||
- Stinger (slot 3) (replaces shotguns)
|
||||
|
|
@ -37,7 +38,6 @@ Doom Tournament (currently the devel branch is required).
|
|||
## In progress
|
||||
|
||||
- Flak Cannon (slot 6) (replaces rocket launcher)
|
||||
- Dispersion Pistol (slot 1) (replaces fist)
|
||||
|
||||
- Flashlight (replaces light amplifier)
|
||||
- Searchlight (must be placed manually for balance reasons)
|
||||
|
|
@ -71,6 +71,7 @@ Doom Tournament (currently the devel branch is required).
|
|||
- Autocannon (slot 0) (replaces bfg9000)
|
||||
|
||||
- Motion Detector (replaces computer map)
|
||||
- Light & Dark Flares
|
||||
- Minigun Sentry (rare spawn in backpacks)
|
||||
|
||||
## Known bugs
|
||||
|
|
|
|||
56
gldefs.txt
56
gldefs.txt
|
|
@ -186,6 +186,62 @@ Object FlareThrownX
|
|||
frame "FLAR" { light "FLARELIGHT" }
|
||||
}
|
||||
|
||||
FlickerLight2 DAMMOLIGHT1
|
||||
{
|
||||
Color 0.2 0.2 1.0
|
||||
Size 72
|
||||
SecondarySize 80
|
||||
Interval 0.1
|
||||
}
|
||||
FlickerLight2 DAMMOLIGHT2
|
||||
{
|
||||
Color 0.2 1.0 0.2
|
||||
Size 72
|
||||
SecondarySize 80
|
||||
Interval 0.1
|
||||
}
|
||||
FlickerLight2 DAMMOLIGHT3
|
||||
{
|
||||
Color 1.0 1.0 0.2
|
||||
Size 72
|
||||
SecondarySize 80
|
||||
Interval 0.1
|
||||
}
|
||||
FlickerLight2 DAMMOLIGHT4
|
||||
{
|
||||
Color 1.0 0.6 0.2
|
||||
Size 72
|
||||
SecondarySize 80
|
||||
Interval 0.1
|
||||
}
|
||||
FlickerLight2 DAMMOLIGHT5
|
||||
{
|
||||
Color 1.0 0.2 0.2
|
||||
Size 72
|
||||
SecondarySize 80
|
||||
Interval 0.1
|
||||
}
|
||||
Object DispersionAmmo
|
||||
{
|
||||
Frame "DISM" { light "DAMMOLIGHT1" }
|
||||
}
|
||||
Object DAmmo2
|
||||
{
|
||||
Frame "DISM" { light "DAMMOLIGHT2" }
|
||||
}
|
||||
Object DAmmo3
|
||||
{
|
||||
Frame "DISM" { light "DAMMOLIGHT3" }
|
||||
}
|
||||
Object DAmmo4
|
||||
{
|
||||
Frame "DISM" { light "DAMMOLIGHT4" }
|
||||
}
|
||||
Object DAmmo5
|
||||
{
|
||||
Frame "DISM" { light "DAMMOLIGHT5" }
|
||||
}
|
||||
|
||||
// Shaders / Brightmaps
|
||||
HardwareShader Texture "graphics/MenuBarr.png"
|
||||
{
|
||||
|
|
|
|||
10
language.txt
10
language.txt
|
|
@ -1,4 +1,14 @@
|
|||
[default eng enc ena enz eni ens enj enb enl ent enw]
|
||||
/* DamNums support */
|
||||
DAMNUM_TYPECOLOR_DAMMO1 = "DamBlue";
|
||||
DAMNUM_TYPECOLOR_DAMMO2 = "DamGreen";
|
||||
DAMNUM_TYPECOLOR_DAMMO3 = "DamYellow";
|
||||
DAMNUM_TYPECOLOR_DAMMO4 = "DamOrange";
|
||||
DAMNUM_TYPECOLOR_DAMMO5 = "DamRed";
|
||||
DAMNUM_TYPECOLOR_STINGER = "DamTeal";
|
||||
DAMNUM_TYPECOLOR_EXPLODED = "DamGold";
|
||||
DAMNUM_TYPECOLOR_STUNNED = "DamLightBlue";
|
||||
DAMNUM_TYPECOLOR_IMPALER = "DamMagenta";
|
||||
/* Obituaries */
|
||||
O_DPISTOL = "%o was killed by %k's Dispersion Pistol. What a loser!";
|
||||
O_AUTOMAG = "%o got gatted by %k's Automag.";
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ OptionMenu "UnrealOptionMenu"
|
|||
StaticText "$STING_POPTS", "Gold"
|
||||
Option "$STING_TELEHAND", "sting_telegun", "YesNo"
|
||||
Option "$STING_FLARES", "sting_flares", "YesNo"
|
||||
Command "$FLAK_APPLY", "event refreshtrans"
|
||||
Command "$FLAK_APPLY", "netevent refreshtrans"
|
||||
Option "$STING_STINGER", "sting_stinger", "YesNo"
|
||||
Option "$STING_RIFLE", "sting_rifle", "YesNo"
|
||||
Option "$STING_RIFLEL", "sting_riflel", "YesNo"
|
||||
|
|
|
|||
181
modeldef.dpistol
181
modeldef.dpistol
|
|
@ -40,6 +40,187 @@ Model "WeaponPowerUpX"
|
|||
FrameIndex WPOW T 0 19
|
||||
}
|
||||
|
||||
Model "DispersionAmmo"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "DispM1_d.3d"
|
||||
Scale 0.3 0.18 0.096
|
||||
Offset 8 0 0
|
||||
AngleOffset 90
|
||||
|
||||
PITCHFROMMOMENTUM
|
||||
DONTCULLBACKFACES
|
||||
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBA0.png"
|
||||
SurfaceSkin 0 1 "ArcB1.png"
|
||||
FrameIndex DISM A 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBB0.png"
|
||||
SurfaceSkin 0 1 "ArcB2.png"
|
||||
FrameIndex DISM B 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBC0.png"
|
||||
SurfaceSkin 0 1 "ArcB3.png"
|
||||
FrameIndex DISM C 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBD0.png"
|
||||
SurfaceSkin 0 1 "ArcB4.png"
|
||||
FrameIndex DISM D 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBE0.png"
|
||||
SurfaceSkin 0 1 "ArcB5.png"
|
||||
FrameIndex DISM E 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBD0.png"
|
||||
SurfaceSkin 0 1 "ArcB6.png"
|
||||
FrameIndex DISM F 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBC0.png"
|
||||
SurfaceSkin 0 1 "ArcB7.png"
|
||||
FrameIndex DISM G 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETBB0.png"
|
||||
SurfaceSkin 0 1 "ArcB8.png"
|
||||
FrameIndex DISM H 0 0
|
||||
}
|
||||
Model "DAmmo2"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "DispM1_d.3d"
|
||||
Scale 0.3 0.18 0.096
|
||||
Offset 8 0 0
|
||||
AngleOffset 90
|
||||
|
||||
PITCHFROMMOMENTUM
|
||||
DONTCULLBACKFACES
|
||||
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGA0.png"
|
||||
SurfaceSkin 0 1 "ArcG1.png"
|
||||
FrameIndex DISM A 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGB0.png"
|
||||
SurfaceSkin 0 1 "ArcG2.png"
|
||||
FrameIndex DISM B 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGC0.png"
|
||||
SurfaceSkin 0 1 "ArcG3.png"
|
||||
FrameIndex DISM C 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGD0.png"
|
||||
SurfaceSkin 0 1 "ArcG4.png"
|
||||
FrameIndex DISM D 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGE0.png"
|
||||
SurfaceSkin 0 1 "ArcG5.png"
|
||||
FrameIndex DISM E 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGD0.png"
|
||||
SurfaceSkin 0 1 "ArcG6.png"
|
||||
FrameIndex DISM F 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGC0.png"
|
||||
SurfaceSkin 0 1 "ArcG7.png"
|
||||
FrameIndex DISM G 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETGB0.png"
|
||||
SurfaceSkin 0 1 "ArcG8.png"
|
||||
FrameIndex DISM H 0 0
|
||||
}
|
||||
Model "DAmmo3"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "DispM1_d.3d"
|
||||
Scale 0.3 0.18 0.096
|
||||
Offset 8 0 0
|
||||
AngleOffset 90
|
||||
|
||||
PITCHFROMMOMENTUM
|
||||
DONTCULLBACKFACES
|
||||
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYA0.png"
|
||||
SurfaceSkin 0 1 "ArcY1.png"
|
||||
FrameIndex DISM A 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYB0.png"
|
||||
SurfaceSkin 0 1 "ArcY2.png"
|
||||
FrameIndex DISM B 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYC0.png"
|
||||
SurfaceSkin 0 1 "ArcY3.png"
|
||||
FrameIndex DISM C 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYD0.png"
|
||||
SurfaceSkin 0 1 "ArcY4.png"
|
||||
FrameIndex DISM D 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYE0.png"
|
||||
SurfaceSkin 0 1 "ArcY5.png"
|
||||
FrameIndex DISM E 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYD0.png"
|
||||
SurfaceSkin 0 1 "ArcY6.png"
|
||||
FrameIndex DISM F 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYC0.png"
|
||||
SurfaceSkin 0 1 "ArcY7.png"
|
||||
FrameIndex DISM G 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETYB0.png"
|
||||
SurfaceSkin 0 1 "ArcY8.png"
|
||||
FrameIndex DISM H 0 0
|
||||
}
|
||||
Model "DAmmo4"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "DispM1_d.3d"
|
||||
Scale 0.3 0.18 0.096
|
||||
Offset 8 0 0
|
||||
AngleOffset 90
|
||||
|
||||
PITCHFROMMOMENTUM
|
||||
DONTCULLBACKFACES
|
||||
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOA0.png"
|
||||
SurfaceSkin 0 1 "ArcO1.png"
|
||||
FrameIndex DISM A 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOB0.png"
|
||||
SurfaceSkin 0 1 "ArcO2.png"
|
||||
FrameIndex DISM B 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOC0.png"
|
||||
SurfaceSkin 0 1 "ArcO3.png"
|
||||
FrameIndex DISM C 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOD0.png"
|
||||
SurfaceSkin 0 1 "ArcO4.png"
|
||||
FrameIndex DISM D 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOE0.png"
|
||||
SurfaceSkin 0 1 "ArcO5.png"
|
||||
FrameIndex DISM E 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOD0.png"
|
||||
SurfaceSkin 0 1 "ArcO6.png"
|
||||
FrameIndex DISM F 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOC0.png"
|
||||
SurfaceSkin 0 1 "ArcO7.png"
|
||||
FrameIndex DISM G 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETOB0.png"
|
||||
SurfaceSkin 0 1 "ArcO8.png"
|
||||
FrameIndex DISM H 0 0
|
||||
}
|
||||
Model "DAmmo5"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "DispM1_d.3d"
|
||||
Scale 0.3 0.18 0.096
|
||||
Offset 8 0 0
|
||||
AngleOffset 90
|
||||
|
||||
PITCHFROMMOMENTUM
|
||||
DONTCULLBACKFACES
|
||||
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRA0.png"
|
||||
SurfaceSkin 0 1 "ArcR1.png"
|
||||
FrameIndex DISM A 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRB0.png"
|
||||
SurfaceSkin 0 1 "ArcR2.png"
|
||||
FrameIndex DISM B 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRC0.png"
|
||||
SurfaceSkin 0 1 "ArcR3.png"
|
||||
FrameIndex DISM C 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRD0.png"
|
||||
SurfaceSkin 0 1 "ArcR4.png"
|
||||
FrameIndex DISM D 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRE0.png"
|
||||
SurfaceSkin 0 1 "ArcR5.png"
|
||||
FrameIndex DISM E 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRD0.png"
|
||||
SurfaceSkin 0 1 "ArcR6.png"
|
||||
FrameIndex DISM F 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRC0.png"
|
||||
SurfaceSkin 0 1 "ArcR7.png"
|
||||
FrameIndex DISM G 0 0
|
||||
SurfaceSkin 0 0 "sprites/dpistol/DETRB0.png"
|
||||
SurfaceSkin 0 1 "ArcR8.png"
|
||||
FrameIndex DISM H 0 0
|
||||
}
|
||||
|
||||
Model "DispersionPistol"
|
||||
{
|
||||
Path "models"
|
||||
|
|
|
|||
|
|
@ -381,3 +381,14 @@ Model "FlareThrownX"
|
|||
|
||||
FrameIndex FLAR A 0 1
|
||||
}
|
||||
|
||||
Model "UJumpBoots"
|
||||
{
|
||||
Path "models"
|
||||
Model 0 "lboot_d.3d"
|
||||
Skin 0 "Jlboot1.png"
|
||||
Scale 0.06 0.06 0.072
|
||||
ZOffset 6
|
||||
|
||||
FrameIndex JBUT A 0 0
|
||||
}
|
||||
|
|
|
|||
BIN
models/lboot_a.3d
Normal file
BIN
models/lboot_a.3d
Normal file
Binary file not shown.
BIN
models/lboot_d.3d
Normal file
BIN
models/lboot_d.3d
Normal file
Binary file not shown.
|
|
@ -135,6 +135,11 @@ u1/metalfootstep2 metwalk2
|
|||
u1/metalfootstep3 metwalk3
|
||||
$random u1/metalfootstep { u1/metalfootstep1 u1/metalfootstep2 u1/metalfootstep3 }
|
||||
|
||||
u1/bootfootstep1 lbootwk1
|
||||
u1/bootfootstep2 lbootwk2
|
||||
u1/bootfootstep3 lbootwk3
|
||||
$random u1/bootfootstep { u1/bootfootstep1 u1/bootfootstep2 u1/bootfootstep3 }
|
||||
|
||||
misc/secret secret
|
||||
misc/i_pkup ammosnd
|
||||
misc/p_pkup genpicks
|
||||
|
|
|
|||
BIN
sounds/lbootwk1.ogg
Normal file
BIN
sounds/lbootwk1.ogg
Normal file
Binary file not shown.
BIN
sounds/lbootwk2.ogg
Normal file
BIN
sounds/lbootwk2.ogg
Normal file
Binary file not shown.
BIN
sounds/lbootwk3.ogg
Normal file
BIN
sounds/lbootwk3.ogg
Normal file
Binary file not shown.
|
|
@ -1 +1,3 @@
|
|||
DamTeal="0:255=%[0,0,0]:[0.30,0.76,1.20]"
|
||||
DamMagenta="0:255=%[0,0,0]:[1.50,0.30,1.50]"
|
||||
RedIcon="0:255=#[255,0,0]"
|
||||
|
|
|
|||
|
|
@ -222,7 +222,6 @@ Class ASMDSpark : Actor
|
|||
+FORCEXYBILLBOARD;
|
||||
+THRUACTORS;
|
||||
+ROLLSPRITE;
|
||||
+ROLLCENTER;
|
||||
+NOTELEPORT;
|
||||
+DONTSPLASH;
|
||||
+CANBOUNCEWATER;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Class WeaponPowerUp : Inventory
|
|||
override bool TryPickup( in out Actor toucher )
|
||||
{
|
||||
if ( !toucher.FindInventory("DispersionPistol") ) return false;
|
||||
let damo = DispersionAmmo(toucher.FindInventory("DispersionAmmo"));
|
||||
let damo = DefaultAmmo(toucher.FindInventory("DefaultAmmo"));
|
||||
if ( damo )
|
||||
{
|
||||
damo.BackpackMaxAmount = damo.MaxAmount = min(90,damo.MaxAmount+10);
|
||||
|
|
@ -60,7 +60,7 @@ Class WeaponPowerUpX : ASMDAmmoX
|
|||
}
|
||||
}
|
||||
|
||||
Class DispersionAmmo : Ammo
|
||||
Class DefaultAmmo : Ammo
|
||||
{
|
||||
double rechargephase, rechargespeed;
|
||||
|
||||
|
|
@ -85,6 +85,361 @@ Class DispersionAmmo : Ammo
|
|||
}
|
||||
}
|
||||
|
||||
Class DispExLight1 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "DBlue";
|
||||
Args 0,0,0,80;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
Class DispExLight2 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "DGreen";
|
||||
Args 0,0,0,80;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
Class DispExLight3 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "DYellow";
|
||||
Args 0,0,0,80;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
Class DispExLight4 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "DOrange";
|
||||
Args 0,0,0,80;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
Class DispExLight5 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "DRed";
|
||||
Args 0,0,0,80;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
|
||||
Class DispBurst1 : ASMDSpark
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFB ABCDEFG 1 Bright
|
||||
{
|
||||
A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
vel *= 0.95;
|
||||
}
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class DispBurst2 : DispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFG ABCDEFG 1 Bright
|
||||
{
|
||||
A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
vel *= 0.95;
|
||||
}
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class DispBurst3 : DispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFY ABCDEFG 1 Bright
|
||||
{
|
||||
A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
vel *= 0.95;
|
||||
}
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class DispBurst4 : DispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFO ABCDEFG 1 Bright
|
||||
{
|
||||
A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
vel *= 0.95;
|
||||
}
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class DispBurst5 : DispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFR ABCDEFG 1 Bright
|
||||
{
|
||||
A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
vel *= 0.95;
|
||||
}
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class ViewDispBurst1 : ViewASMDSpark
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFB ABCDEFG 1 Bright A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class ViewDispBurst2 : ViewDispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFG ABCDEFG 1 Bright A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class ViewDispBurst3 : ViewDispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFY ABCDEFG 1 Bright A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class ViewDispBurst4 : ViewDispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFO ABCDEFG 1 Bright A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
Class ViewDispBurst5 : ViewDispBurst1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DEFR ABCDEFG 1 Bright A_FadeOut(FRandom[ASMD](0.0,0.3));
|
||||
Loop;
|
||||
}
|
||||
}
|
||||
|
||||
Class DispExplo1 : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
Scale 0.4;
|
||||
+NOGRAVITY;
|
||||
+NOBLOCKMAP;
|
||||
Radius 0.1;
|
||||
Height 0;
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
Scale.x *= RandomPick[DPistol](-1,1);
|
||||
Scale.y *= RandomPick[DPistol](-1,1);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DSEB ABCDEFGHIJ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class DispExplo2 : DispExplo1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DISE ABCDEFGHIJ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class DispExplo3 : DispExplo1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DSEY ABCDEFGHIJ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class DispExplo4 : DispExplo1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DSEO ABCDEFGHIJ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class DispExplo5 : DispExplo1
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DSER ABCDEFGHIJ 2 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
// yes this is the projectile class name, blame Epic
|
||||
Class DispersionAmmo : Actor
|
||||
{
|
||||
Class<Actor> LightClass, BurstClass, ExploClass;
|
||||
double mult;
|
||||
|
||||
Property LightClass : LightClass;
|
||||
Property BurstClass : BurstClass;
|
||||
Property ExploClass : ExploClass;
|
||||
|
||||
action void A_DispTrail()
|
||||
{
|
||||
Vector3 x, y, z, dir;
|
||||
double a, s;
|
||||
Actor p;
|
||||
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
a = FRandom[DPistol](0,360);
|
||||
s = FRandom[ASMD](0,0.35);
|
||||
dir = (-x+y*cos(a)*s+z*sin(a)*s).unit();
|
||||
p = Spawn(invoker.BurstClass,level.Vec3Offset(pos,scale.x*(dir*16.+x*32.)));
|
||||
p.A_SetScale(0.1*min(0.8+invoker.mult*0.75,1.5));
|
||||
p.vel = vel*0.5+dir*FRandom[DPistol](3,8);
|
||||
}
|
||||
}
|
||||
action void A_DispExpl()
|
||||
{
|
||||
UTMainHandler.DoKnockback(tracer,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch)),6000);
|
||||
A_AlertMonsters();
|
||||
A_SprayDecal("RazorBlast",20);
|
||||
Spawn(invoker.LightClass,pos);
|
||||
Actor a;
|
||||
double ang, pt;
|
||||
int numpt = int(Random[DPistol](12,18)*invoker.mult);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
a = Spawn(invoker.BurstClass,pos);
|
||||
a.A_SetScale(0.2*min(0.8+invoker.mult*0.75,1.5));
|
||||
ang = FRandom[DPistol](0,360);
|
||||
pt = FRandom[DPistol](-90,90);
|
||||
a.vel = (cos(ang)*cos(pt),sin(ang)*cos(pt),-sin(pt))*FRandom[DPistol](6,16);
|
||||
a.alpha *= 2.;
|
||||
}
|
||||
a = Spawn(invoker.ExploClass,pos);
|
||||
a.A_SetScale(min(0.8+invoker.mult*0.8,2.5));
|
||||
if ( !bAMBUSH ) return;
|
||||
UTMainHandler.DoBlast(self,120,6000);
|
||||
A_Explode(GetMissileDamage(0,0),120);
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
A_PlaySound("dpistol/fly",CHAN_VOICE,.9,true,2.);
|
||||
mult = max(1.,mult);
|
||||
}
|
||||
Default
|
||||
{
|
||||
Obituary "$O_DPISTOL";
|
||||
DamageFunction (15*mult);
|
||||
DamageType 'DAmmo1';
|
||||
Scale 0.8;
|
||||
Radius 4;
|
||||
Height 4;
|
||||
Speed 25;
|
||||
RenderStyle "Add";
|
||||
PROJECTILE;
|
||||
+FORCEXYBILLBOARD;
|
||||
+SKYEXPLODE;
|
||||
+EXPLODEONWATER;
|
||||
+FORCERADIUSDMG;
|
||||
+NODAMAGETHRUST;
|
||||
+INTERPOLATEANGLES;
|
||||
+HITTRACER;
|
||||
DispersionAmmo.LightClass "DispExLight1";
|
||||
DispersionAmmo.BurstClass "DispBurst1";
|
||||
DispersionAmmo.ExploClass "DispExplo1";
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
DISM AABBCCDDEEFFGGHH 1 Bright A_DispTrail();
|
||||
Loop;
|
||||
Death:
|
||||
TNT1 A 1
|
||||
{
|
||||
A_PlaySound("dpistol/hit",CHAN_VOICE);
|
||||
A_DispExpl();
|
||||
}
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Class DAmmo2 : DispersionAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
DamageFunction (25*mult);
|
||||
DamageType 'DAmmo2';
|
||||
DispersionAmmo.LightClass "DispExLight2";
|
||||
DispersionAmmo.BurstClass "DispBurst2";
|
||||
DispersionAmmo.ExploClass "DispExplo2";
|
||||
}
|
||||
}
|
||||
Class DAmmo3 : DispersionAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
DamageFunction (40*mult);
|
||||
DamageType 'DAmmo3';
|
||||
DispersionAmmo.LightClass "DispExLight3";
|
||||
DispersionAmmo.BurstClass "DispBurst3";
|
||||
DispersionAmmo.ExploClass "DispExplo3";
|
||||
}
|
||||
}
|
||||
Class DAmmo4 : DispersionAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
DamageFunction (55*mult);
|
||||
DamageType 'DAmmo4';
|
||||
DispersionAmmo.LightClass "DispExLight4";
|
||||
DispersionAmmo.BurstClass "DispBurst4";
|
||||
DispersionAmmo.ExploClass "DispExplo4";
|
||||
}
|
||||
}
|
||||
Class DAmmo5 : DispersionAmmo
|
||||
{
|
||||
Default
|
||||
{
|
||||
DamageFunction (75*mult);
|
||||
DamageType 'DAmmo5';
|
||||
DispersionAmmo.LightClass "DispExLight5";
|
||||
DispersionAmmo.BurstClass "DispBurst5";
|
||||
DispersionAmmo.ExploClass "DispExplo5";
|
||||
}
|
||||
}
|
||||
|
||||
Class DispLight1 : EnforcerLight
|
||||
{
|
||||
Default
|
||||
|
|
@ -127,42 +482,64 @@ Class DispersionPistol : UnrealWeapon
|
|||
bool pendingupgrade;
|
||||
double chargesize, count;
|
||||
bool bCharging;
|
||||
int MainUse, ChargeUse;
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( sting_dpistol ) AmmoUse2 = 1;
|
||||
else AmmoUse2 = AmmoUse1/2;
|
||||
if ( MainUse < 1 ) MainUse = 1;
|
||||
if ( sting_dpistol ) ChargeUse = 1;
|
||||
else ChargeUse = max(1,MainUse/2);
|
||||
}
|
||||
action void A_DispFire()
|
||||
{
|
||||
Weapon weap = Weapon(invoker);
|
||||
if ( !weap ) return;
|
||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
DispersionAmmo(weap.Ammo1).rechargephase = 0;
|
||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
||||
A_PlaySound("dpistol/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.,pitch:1.2);
|
||||
double mult = Amplifier.GetMult(self,80);
|
||||
invoker.FireEffect();
|
||||
switch ( invoker.upgradelevel )
|
||||
Class<Actor> proj, part;
|
||||
int ulevel = invoker.upgradelevel;
|
||||
if ( !(sv_infiniteammo || FindInventory('PowerInfiniteAmmo',true)) )
|
||||
{
|
||||
if ( weap.Ammo1.Amount < max(10,invoker.MainUse) )
|
||||
{
|
||||
weap.Ammo1.Amount -= 1;
|
||||
ulevel = 0;
|
||||
}
|
||||
else weap.Ammo1.Amount -= invoker.MainUse;
|
||||
}
|
||||
switch ( ulevel )
|
||||
{
|
||||
case 0:
|
||||
proj = "DispersionAmmo";
|
||||
part = "ViewDispBurst1";
|
||||
UTMainHandler.DoFlash(self,Color(80,96,64,255),1);
|
||||
A_Overlay(PSP_FLASH,"Flash1");
|
||||
break;
|
||||
case 1:
|
||||
proj = "DAmmo2";
|
||||
part = "ViewDispBurst2";
|
||||
UTMainHandler.DoFlash(self,Color(80,64,255,96),1);
|
||||
A_Overlay(PSP_FLASH,"Flash2");
|
||||
break;
|
||||
case 2:
|
||||
proj = "DAmmo3";
|
||||
part = "ViewDispBurst3";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,255,96),1);
|
||||
A_Overlay(PSP_FLASH,"Flash3");
|
||||
break;
|
||||
case 3:
|
||||
proj = "DAmmo4";
|
||||
part = "ViewDispBurst4";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,160,64),1);
|
||||
A_Overlay(PSP_FLASH,"Flash4");
|
||||
break;
|
||||
default:
|
||||
proj = "DAmmo5";
|
||||
part = "ViewDispBurst5";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,96,64),1);
|
||||
A_Overlay(PSP_FLASH,"Flash5");
|
||||
break;
|
||||
|
|
@ -172,6 +549,23 @@ Class DispersionPistol : UnrealWeapon
|
|||
UTMainHandler.DoSwing(self,(FRandom[DPistol](-0.1,-0.3),FRandom[DPistol](-0.1,0.3)),2,-0.3,3,SWING_Spring,0,3);
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10*x+3*y-3*z;
|
||||
Actor p = Spawn(proj,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;
|
||||
DispersionAmmo(p).mult = mult;
|
||||
int numpt = Random[DPistol](10,20);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn(part,origin);
|
||||
ViewASMDSpark(s).ofs = (10,3,-3);
|
||||
s.target = self;
|
||||
ViewASMDSpark(s).vvel += (FRandom[ASMD](0.5,2.0),FRandom[ASMD](-1.5,1.5),FRandom[ASMD](-1.5,1.5));
|
||||
}
|
||||
}
|
||||
action void A_DispAltFire()
|
||||
{
|
||||
|
|
@ -181,30 +575,41 @@ Class DispersionPistol : UnrealWeapon
|
|||
invoker.bCharging = false;
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayAttacking();
|
||||
DispersionAmmo(weap.Ammo1).rechargephase = 0;
|
||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
||||
A_PlaySound("dpistol/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.);
|
||||
double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50);
|
||||
invoker.FireEffect();
|
||||
int ulevel = sting_dpistol?0:invoker.upgradelevel;
|
||||
Class<Actor> proj, part;
|
||||
switch ( ulevel )
|
||||
{
|
||||
case 0:
|
||||
proj = "DispersionAmmo";
|
||||
part = "ViewDispBurst1";
|
||||
UTMainHandler.DoFlash(self,Color(80,96,64,255),1);
|
||||
A_Overlay(PSP_FLASH,"Flash1");
|
||||
break;
|
||||
case 1:
|
||||
proj = "DAmmo2";
|
||||
part = "ViewDispBurst2";
|
||||
UTMainHandler.DoFlash(self,Color(80,64,255,96),1);
|
||||
A_Overlay(PSP_FLASH,"Flash2");
|
||||
break;
|
||||
case 2:
|
||||
proj = "DAmmo3";
|
||||
part = "ViewDispBurst3";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,255,96),1);
|
||||
A_Overlay(PSP_FLASH,"Flash3");
|
||||
break;
|
||||
case 3:
|
||||
proj = "DAmmo4";
|
||||
part = "ViewDispBurst4";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,160,64),1);
|
||||
A_Overlay(PSP_FLASH,"Flash4");
|
||||
break;
|
||||
default:
|
||||
proj = "DAmmo5";
|
||||
part = "ViewDispBurst5";
|
||||
UTMainHandler.DoFlash(self,Color(80,255,96,64),1);
|
||||
A_Overlay(PSP_FLASH,"Flash5");
|
||||
break;
|
||||
|
|
@ -216,12 +621,32 @@ Class DispersionPistol : UnrealWeapon
|
|||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
int qs = int(1+invoker.chargesize*0.3);
|
||||
A_QuakeEx(qs,qs,qs,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10*x+3*y-3*z;
|
||||
Actor p = Spawn(proj,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;
|
||||
p.bAMBUSH = true;
|
||||
double scl = 0.5+invoker.chargesize*0.6;
|
||||
p.scale *= scl;
|
||||
DispersionAmmo(p).mult = scl*mult*1.1;
|
||||
int numpt = Random[DPistol](10,20);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn(part,origin);
|
||||
ViewASMDSpark(s).ofs = (10,3,-3);
|
||||
s.target = self;
|
||||
ViewASMDSpark(s).vvel += (FRandom[ASMD](0.5,2.0),FRandom[ASMD](-1.5,1.5),FRandom[ASMD](-1.5,1.5));
|
||||
}
|
||||
}
|
||||
action bool A_DispCharge()
|
||||
{
|
||||
Weapon weap = Weapon(invoker);
|
||||
if ( !weap ) return false;
|
||||
DispersionAmmo(weap.Ammo1).rechargephase = 0;
|
||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
||||
UTMainHandler.DoSwing(self,(FRandom[DPistol](-1,1),FRandom[DPistol](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring);
|
||||
A_WeaponOffset(FRandom[DPistol](-1,1)*1.2*invoker.chargesize,32+FRandom[DPistol](-1,1)*1.2*invoker.chargesize);
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
|
|
@ -229,16 +654,14 @@ Class DispersionPistol : UnrealWeapon
|
|||
invoker.count += 1./35.;
|
||||
if ( invoker.count < 0.3 ) return false;
|
||||
invoker.count = 0;
|
||||
weap.DepleteAmmo(weap.bAltFire,true,1);
|
||||
if ( (weap.Ammo1.Amount <= 0) || (invoker.chargesize >= 5.) )
|
||||
return true;
|
||||
if ( invoker.chargesize >= 5. ) return true;
|
||||
if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) )
|
||||
{
|
||||
if ( weap.Ammo1.Amount < invoker.ChargeUse ) return true;
|
||||
weap.Ammo1.Amount -= invoker.ChargeUse;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
|
||||
{
|
||||
if ( bCharging ) return true;
|
||||
return Super.CheckAmmo(fireMode,autoSwitch,requireAmmo,ammocount);
|
||||
}
|
||||
Default
|
||||
{
|
||||
Tag "$T_DPISTOL";
|
||||
|
|
@ -246,9 +669,9 @@ Class DispersionPistol : UnrealWeapon
|
|||
Weapon.UpSound "dpistol/select";
|
||||
Weapon.SlotNumber 1;
|
||||
Weapon.SelectionOrder 1;
|
||||
Weapon.AmmoType "DispersionAmmo";
|
||||
Weapon.AmmoType "DefaultAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "DispersionAmmo";
|
||||
Weapon.AmmoType2 "DefaultAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 50;
|
||||
UTWeapon.DropAmmo 25;
|
||||
|
|
@ -294,7 +717,9 @@ Class DispersionPistol : UnrealWeapon
|
|||
TNT1 A 1
|
||||
{
|
||||
A_CheckReload();
|
||||
A_WeaponReady();
|
||||
let weap = Weapon(invoker);
|
||||
if ( weap && weap.Ammo1.Amount > 0 ) A_WeaponReady();
|
||||
else A_WeaponReady(WRF_NOFIRE);
|
||||
}
|
||||
Wait;
|
||||
Idle:
|
||||
|
|
@ -423,7 +848,7 @@ Class DispersionPistol : UnrealWeapon
|
|||
#### # 0
|
||||
{
|
||||
A_Overlay(-9999,"Null");
|
||||
invoker.AmmoUse1 = min(6,invoker.upgradelevel+1);
|
||||
invoker.MainUse = min(6,invoker.upgradelevel+1);
|
||||
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle");
|
||||
else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1");
|
||||
else if ( invoker.upgradelevel == 2 ) return ResolveState("Upgrade2");
|
||||
|
|
|
|||
|
|
@ -570,8 +570,8 @@ Class FlareThrown : Actor
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
FLAR A -1;
|
||||
Stop;
|
||||
FLAR A 1 A_JumpIf(ReactionTime<=0,"Death");
|
||||
Wait;
|
||||
Bounce:
|
||||
FLAR A 0
|
||||
{
|
||||
|
|
@ -697,11 +697,24 @@ Class FlareThrownX : Actor
|
|||
}
|
||||
}
|
||||
|
||||
Class LightFlare : UnrealInventory
|
||||
Class BetaFlare : UnrealInventory
|
||||
{
|
||||
Class<Actor> ThrownClass;
|
||||
|
||||
Property ThrownClass : ThrownClass;
|
||||
|
||||
override bool TryPickup( in out Actor toucher )
|
||||
{
|
||||
if ( !sting_flares ) return false; // not allowed
|
||||
return Super.TryPickup(toucher);
|
||||
}
|
||||
}
|
||||
|
||||
Class LightFlare : BetaFlare
|
||||
{
|
||||
}
|
||||
|
||||
Class DarkFlare : UnrealInventory
|
||||
Class DarkFlare : BetaFlare
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ Class StingerProjectile : Actor
|
|||
Default
|
||||
{
|
||||
Obituary "$O_STINGER";
|
||||
DamageType 'shot';
|
||||
DamageType 'Stinger';
|
||||
DamageFunction Random[Stinger](15,25);
|
||||
Speed 40;
|
||||
Radius 2;
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ Class ShieldBelt : UnrealArmor
|
|||
Tag "$T_SHIELDBELT";
|
||||
+COUNTITEM;
|
||||
+INVENTORY.BIGPOWERUP;
|
||||
+INVENTORY.ALWAYSPICKUP;
|
||||
Inventory.Amount 100;
|
||||
Inventory.MaxAmount 100;
|
||||
Inventory.InterHubAmount 100;
|
||||
|
|
@ -228,6 +229,7 @@ Class PowerShield : UnrealArmor
|
|||
Tag "$T_POWERSHIELD";
|
||||
+COUNTITEM;
|
||||
+INVENTORY.BIGPOWERUP;
|
||||
+INVENTORY.ALWAYSPICKUP;
|
||||
Inventory.Amount 200;
|
||||
Inventory.MaxAmount 200;
|
||||
Inventory.InterHubAmount 200;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ Class UPlayer : UTPlayer
|
|||
Player.StartItem "Automag";
|
||||
Player.StartItem "DispersionPistol";
|
||||
Player.StartItem "UMiniAmmo", 30;
|
||||
Player.StartItem "DispersionAmmo", 50;
|
||||
Player.StartItem "DefaultAmmo", 50;
|
||||
}
|
||||
|
||||
// Have to modify the give cheat to handle UT armor
|
||||
|
|
@ -124,7 +124,7 @@ Class UPlayer : UTPlayer
|
|||
let type = (class<Inventory>)(AllActorClasses[i]);
|
||||
if ( !type ) continue;
|
||||
let def = GetDefaultByType (type);
|
||||
if ( def.Icon.isValid() && (def.MaxAmount > 1) &&
|
||||
if ( def.Icon.isValid() && ((def.MaxAmount > 1) || (type is 'UnrealInventory')) &&
|
||||
!(type is "PuzzleItem") && !(type is "Powerup") && !(type is "Ammo") && !(type is "Armor") )
|
||||
{
|
||||
// Do not give replaced items unless using "give everything"
|
||||
|
|
@ -177,7 +177,7 @@ Class UPlayer : UTPlayer
|
|||
override void PlayFootstep( double vol )
|
||||
{
|
||||
let boot = UJumpBoots(FindInventory("UJumpBoots"));
|
||||
if ( boot && boot.bActive ) A_PlaySound("u1/metalfootstep",CHAN_5,min(1.,vol*2));
|
||||
if ( boot ) A_PlaySound("u1/bootfootstep",CHAN_5,min(1.,vol*2));
|
||||
else A_PlaySound("ut/playerfootstep",CHAN_5,vol);
|
||||
}
|
||||
}
|
||||
|
|
@ -467,6 +467,17 @@ Class UPlayerMale : UPlayer
|
|||
}
|
||||
Class UPlayerMale1 : UPlayerMale
|
||||
{
|
||||
override void PlayFootstep( double vol )
|
||||
{
|
||||
let boot = UJumpBoots(FindInventory("UJumpBoots"));
|
||||
if ( boot ) A_PlaySound("u1/bootfootstep",CHAN_5,min(1.,vol*2));
|
||||
else
|
||||
{
|
||||
double ang = level.time/(20*TICRATE/35.)*360.;
|
||||
if ( sin(ang) > 0 ) A_PlaySound("u1/metalfootstep",CHAN_5,min(1.,vol*2));
|
||||
else A_PlaySound("ut/playerfootstep",CHAN_5,vol);
|
||||
}
|
||||
}
|
||||
Default
|
||||
{
|
||||
Player.DisplayName "$N_MALE1";
|
||||
|
|
@ -541,6 +552,7 @@ Class UnrealInventory : Inventory
|
|||
{
|
||||
Super.AttachToOwner(other);
|
||||
Charge = DefaultCharge;
|
||||
InterHubAmount = MaxAmount; // it's annoying to set this per-subclass
|
||||
}
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
|
|
@ -560,11 +572,15 @@ Class UnrealInventory : Inventory
|
|||
if ( bDROPPED && (pos.z <= floorz) )
|
||||
vel.xy *= 0;
|
||||
}
|
||||
override void DetachFromOwner()
|
||||
{
|
||||
Super.DetachFromOwner();
|
||||
// deactivate
|
||||
bActive = false;
|
||||
}
|
||||
override void OnDrop( Actor dropper )
|
||||
{
|
||||
Super.OnDrop(dropper);
|
||||
// deactivate
|
||||
bActive = false;
|
||||
// drop like weapons
|
||||
Vector2 hofs = RotateVector((dropper.radius,0),dropper.angle);
|
||||
SetOrigin(dropper.Vec3Offset(hofs.x,hofs.y,dropper.height*0.5),false);
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ Class UnrealHUD : BaseStatusBar
|
|||
OldAmmo[15] = "Big083";
|
||||
OldAmmo[16] = "Smini083";
|
||||
OldAmmo[17] = "Peace083";
|
||||
OldAmmoType[0] = "DispersionAmmo";
|
||||
OldAmmoType[0] = "DefaultAmmo";
|
||||
OldAmmoType[1] = "UMiniAmmo";
|
||||
OldAmmoType[2] = "StingerAmmo";
|
||||
OldAmmoType[3] = "AsmdAmmo";
|
||||
|
|
@ -233,7 +233,7 @@ Class UnrealHUD : BaseStatusBar
|
|||
Screen.DrawTexture(IconBase,false,CurX,CurY,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true);
|
||||
Screen.DrawTexture(i.Icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_TopOffset,0,DTA_LeftOffset,0);
|
||||
}
|
||||
if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) && (UnrealInventory(i).Charge < UnrealInventory(i).DefaultCharge) )
|
||||
if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) )
|
||||
Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(UnrealInventory(i).Charge/double(UnrealInventory(i).DefaultCharge)),28.));
|
||||
else if ( (i is 'UTArmor') && !HudMode )
|
||||
Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(i.Amount/double(i.MaxAmount)),28.));
|
||||
|
|
|
|||
|
|
@ -186,6 +186,49 @@ Class AmpSound : Actor
|
|||
|
||||
Class UJumpBoots : UnrealInventory
|
||||
{
|
||||
int draincnt;
|
||||
Default
|
||||
{
|
||||
Tag "$T_JUMPBOOTS";
|
||||
+COUNTITEM;
|
||||
+INVENTORY.BIGPOWERUP;
|
||||
+INVENTORY.ALWAYSPICKUP;
|
||||
Inventory.MaxAmount 3;
|
||||
Inventory.Icon "I_Boots";
|
||||
Inventory.PickupMessage "$I_JUMPBOOTS";
|
||||
Inventory.RespawnTics 1050;
|
||||
UnrealInventory.Charge 3;
|
||||
}
|
||||
override bool Use( bool pickup )
|
||||
{
|
||||
if ( pickup ) return false;
|
||||
bActive = !bActive;
|
||||
Owner.A_PlaySound("boot/pickup",CHAN_ITEM);
|
||||
if ( bActive ) Owner.GiveInventory("PowerJumpBoots_HighJump",1);
|
||||
else Owner.TakeInventory("PowerJumpBoots_HighJump",1);
|
||||
return false;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( !Owner || !Owner.player ) return;
|
||||
draincnt++;
|
||||
if ( (draincnt >= 700) || (bActive && (owner.player.jumptics == -1)) )
|
||||
{
|
||||
draincnt = 0;
|
||||
charge--;
|
||||
Owner.A_PlaySound("boot/jump",CHAN_BODY);
|
||||
}
|
||||
else if ( (charge <= 0) && owner.player.onground )
|
||||
{
|
||||
if ( Owner.CheckLocalView() ) Console.Printf(StringTable.Localize("$D_JUMPBOOTS"));
|
||||
Amount--;
|
||||
Owner.TakeInventory("PowerJumpBoots_HighJump",1);
|
||||
charge = defaultcharge;
|
||||
bActive = false;
|
||||
if ( Amount <= 0 ) DepleteOrDestroy();
|
||||
}
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
|
@ -206,6 +249,23 @@ Class UJumpBoots : UnrealInventory
|
|||
}
|
||||
// TODO replace self with asbestos/toxin suits or scuba
|
||||
}
|
||||
override void AttachToOwner( Actor Other )
|
||||
{
|
||||
Super.AttachToOwner(Other);
|
||||
Other.GiveInventory("PowerJumpBoots_IronFeet",1);
|
||||
}
|
||||
override void DetachFromOwner()
|
||||
{
|
||||
Super.DetachFromOwner();
|
||||
Owner.TakeInventory("PowerJumpBoots_HighJump",1);
|
||||
Owner.TakeInventory("PowerJumpBoots_IronFeet",1);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
JBUT A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class MotionDetector : UnrealInventory
|
||||
|
|
|
|||
|
|
@ -4,4 +4,9 @@ Class UTranslocatorAmmo : Ammo
|
|||
|
||||
Class UTranslocator : UnrealWeapon
|
||||
{
|
||||
override bool TryPickup( in out Actor toucher )
|
||||
{
|
||||
if ( !sting_telegun ) return false; // not allowed
|
||||
return Super.TryPickup(toucher);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue