1.1.3 mini-update:
- Added hacky ammo displays. - Removed swingers. - Updated patron credits.
29
Readme.md
|
|
@ -1,9 +1,8 @@
|
||||||
# DOOM TOURNAMENT
|
# DOOM TOURNAMENT
|
||||||
|
|
||||||
What began as a test for importing UT vertex meshes has turned into an actual
|
What began as a test for importing UT vertex meshes has turned into an actual full UT weapon and item mod.
|
||||||
full UT weapon and item mod.
|
|
||||||
|
|
||||||
This mod requires GZDoom 4.2.4 or later.
|
This mod requires GZDoom 4.3 or later.
|
||||||
|
|
||||||
## Currently implemented
|
## Currently implemented
|
||||||
|
|
||||||
|
|
@ -49,8 +48,6 @@ This mod requires GZDoom 4.2.4 or later.
|
||||||
- "Instant Rocket" mode toggleable with reload
|
- "Instant Rocket" mode toggleable with reload
|
||||||
- Scaling/Customization options for the HUD
|
- Scaling/Customization options for the HUD
|
||||||
- UT-like player movement physics
|
- UT-like player movement physics
|
||||||
- Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be
|
|
||||||
toggled)
|
|
||||||
- UT-like weapon dropping style
|
- UT-like weapon dropping style
|
||||||
- UT player classes
|
- UT player classes
|
||||||
- Heretic compatibility
|
- Heretic compatibility
|
||||||
|
|
@ -61,29 +58,23 @@ This mod requires GZDoom 4.2.4 or later.
|
||||||
- Hexen compatibility
|
- Hexen compatibility
|
||||||
- Fancy titlemap
|
- Fancy titlemap
|
||||||
- Semi-accurate UT sound behaviour
|
- Semi-accurate UT sound behaviour
|
||||||
|
- Hacky cameratexture ammo counters for Pulsegun, Minigun, Flak Cannon and rocket launcher
|
||||||
|
|
||||||
## In progress
|
## In progress
|
||||||
|
|
||||||
- N/A this is the 1.1.2 release.
|
- N/A this is the 1.1.3 release.
|
||||||
|
|
||||||
## Planned
|
## Planned
|
||||||
|
|
||||||
- Stuff for 1.2
|
- Stuff for 1.2
|
||||||
- Touch up blood/gibbing features. At the moment, Nashgore is still a
|
- Refactor everything, backporting many fixes and improvements from SWWM GZ.
|
||||||
superior alternative.
|
- Touch up blood/gibbing features. At the moment, Nashgore is still a superior alternative.
|
||||||
- Help screens describing items and stuff (maybe?).
|
- Help screens describing items and stuff (maybe?).
|
||||||
- Chex Quest compatibility ?
|
|
||||||
- Strife compatibility ????
|
|
||||||
- Stuff for much later
|
- Stuff for much later
|
||||||
- Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher
|
- Proper scripted textures for ammo counters, if they are ever implemented.
|
||||||
once scripted textures are implemented
|
- Redo player models once GZDoom gets a well deserved model animation system overhaul (mainly to clean up the current, messy implementation of this).
|
||||||
- Redo player models once GZDoom gets a well deserved model animation system
|
- Add weapon attachment support to player models when that is also added in (at the moment all player models have an integrated placeholder weapon).
|
||||||
overhaul (mainly to clean up the current, messy implementation of this)
|
|
||||||
- Add weapon attachment support to player models when that is also added in
|
|
||||||
(at the moment all player models have an integrated placeholder weapon)
|
|
||||||
|
|
||||||
## Known bugs
|
## Known bugs
|
||||||
|
|
||||||
- Biorifle sludge doesn't attach properly when it lands on the edge between
|
- Biorifle sludge doesn't attach properly when it lands on the edge between sectors. This is most noticeable with moving sectors and 3d floors. It doesn't seem like there's an easy fix for this.
|
||||||
sectors. This is most noticeable with moving sectors and 3d floors. This
|
|
||||||
might be fixed once there's virtuals for world collision.
|
|
||||||
|
|
|
||||||
|
|
@ -4,3 +4,7 @@ texture static1
|
||||||
range static4 tics 1
|
range static4 tics 1
|
||||||
texture invis00
|
texture invis00
|
||||||
range invis31 tics 2
|
range invis31 tics 2
|
||||||
|
cameratexture PAmmoLed 256 128
|
||||||
|
cameratexture FlakALed 128 64
|
||||||
|
cameratexture MiniALed 64 64
|
||||||
|
cameratexture RAmmoLed 64 64
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,6 @@ server int flak_taptics = 8; // maximum delay in tics between double taps for
|
||||||
server bool flak_nobosstelefrag = false; // disable telefragging of boss monsters (useful when translocator is enabled)
|
server bool flak_nobosstelefrag = false; // disable telefragging of boss monsters (useful when translocator is enabled)
|
||||||
server bool flak_nowalkdrop = false; // [GLITCHY] don't drop off ledges while holding walk key
|
server bool flak_nowalkdrop = false; // [GLITCHY] don't drop off ledges while holding walk key
|
||||||
server bool flak_corpsedamage = false; // [WIP/EXPERIMENTAL] allow corpses to take damage and be gibbed, currently just causes a jump to XDeath until gore system is implemented
|
server bool flak_corpsedamage = false; // [WIP/EXPERIMENTAL] allow corpses to take damage and be gibbed, currently just causes a jump to XDeath until gore system is implemented
|
||||||
server bool flak_swingers = true; // weapon recoil that affects player view
|
|
||||||
server float flak_swingerstrength = 0.5; // strength of visual recoil
|
|
||||||
server bool flak_radboots = true; // jump boots protect against damaging floors (this is to account for the lack of a radsuit)
|
server bool flak_radboots = true; // jump boots protect against damaging floors (this is to account for the lack of a radsuit)
|
||||||
server bool flak_blood = true; // [WIP] use doom tournament blood (disable if using another gore mod)
|
server bool flak_blood = true; // [WIP] use doom tournament blood (disable if using another gore mod)
|
||||||
server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod)
|
server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod)
|
||||||
|
|
|
||||||
12
gldefs.txt
|
|
@ -431,14 +431,6 @@ HardwareShader Texture "models/JPulsePickup_01.png"
|
||||||
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
Texture "brighttex" "brightmaps/JPulsePickup_01.png"
|
Texture "brighttex" "brightmaps/JPulsePickup_01.png"
|
||||||
}
|
}
|
||||||
Brightmap Texture "models/AmmoLedBase.png"
|
|
||||||
{
|
|
||||||
Map "brightmaps/fullbright.png"
|
|
||||||
}
|
|
||||||
Brightmap Texture "models/FlakAmmoLEDBase.png"
|
|
||||||
{
|
|
||||||
Map "brightmaps/fullbright.png"
|
|
||||||
}
|
|
||||||
HardwareShader Texture "models/AToxSuit1.png"
|
HardwareShader Texture "models/AToxSuit1.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/AmbientGlow.fp"
|
Shader "shaders/glsl/AmbientGlow.fp"
|
||||||
|
|
@ -614,10 +606,6 @@ Brightmap Texture "models/Eight_t4.png"
|
||||||
{
|
{
|
||||||
Map "brightmaps/Eight_t4.png"
|
Map "brightmaps/Eight_t4.png"
|
||||||
}
|
}
|
||||||
Brightmap Texture "models/miniammoledbase.png"
|
|
||||||
{
|
|
||||||
Map "brightmaps/fullbright.png"
|
|
||||||
}
|
|
||||||
HardwareShader Texture "models/tloc1_.png"
|
HardwareShader Texture "models/tloc1_.png"
|
||||||
{
|
{
|
||||||
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||||
|
|
|
||||||
14
menudef.txt
|
|
@ -31,8 +31,6 @@ OptionMenu "UTOptionMenu"
|
||||||
Option "$FLAK_SAWAMMO", "flak_sawammo", "YesNo"
|
Option "$FLAK_SAWAMMO", "flak_sawammo", "YesNo"
|
||||||
Option "$FLAK_ZOOMSND", "flak_zoomsound", "YesNo"
|
Option "$FLAK_ZOOMSND", "flak_zoomsound", "YesNo"
|
||||||
Option "$FLAK_ZSHADER", "flak_zoomshader", "YesNo"
|
Option "$FLAK_ZSHADER", "flak_zoomshader", "YesNo"
|
||||||
Option "$FLAK_RECOIL", "flak_swingers", "YesNo"
|
|
||||||
Slider "$FLAK_RSTRENGTH", "flak_swingerstrength", 0.0, 1.0, 0.1, 1
|
|
||||||
Slider "$FLAK_FSTRENGTH", "flak_flashstrength", 0.0, 1.0, 0.1, 1
|
Slider "$FLAK_FSTRENGTH", "flak_flashstrength", 0.0, 1.0, 0.1, 1
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$FLAK_IOPTS", "Gold"
|
StaticText "$FLAK_IOPTS", "Gold"
|
||||||
|
|
@ -98,11 +96,13 @@ OptionMenu "UTCreditsMenu"
|
||||||
StaticText "Epic Games", "White"
|
StaticText "Epic Games", "White"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$FLAK_CPATRON", "Gold"
|
StaticText "$FLAK_CPATRON", "Gold"
|
||||||
StaticText "Christian Grab, john, Alexa Jones-Gonzales,", "White"
|
StaticText "Snacks, Artem Bashev, john,", "White"
|
||||||
StaticText "Jonas Höglund, Valerie Thiessen, Corey Hectus,", "White"
|
StaticText "Jonas Höglund, Lilian Lamp, Valerie Thiessen,", "White"
|
||||||
StaticText "dac, Pietro Gagliardi, Artem Bashev,", "White"
|
StaticText "Corey Hectus, Dac, Pietro Gagliardi, Xada Xephron,", "White"
|
||||||
StaticText "Xada Xephron, Zard1084, NekoMithos,", "White"
|
StaticText "Alexa Jones-Gonzales, John, NekoMithos,", "White"
|
||||||
StaticText "Max Zeal, m8f, 3d0xp0xy", "White"
|
StaticText "bouncytem, Figo, Holly_Rook,", "White"
|
||||||
|
StaticText "Namsan, YaGirlJuniper, Ashley Lambert,", "White"
|
||||||
|
StaticText "LordMisfit, m8f, 3d0xp0xy", "White"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "$FLAK_CTHANK", "Gold"
|
StaticText "$FLAK_CTHANK", "Gold"
|
||||||
StaticText "KynikossDragonn, Raffine52, KeksDose, Skerion", "White"
|
StaticText "KynikossDragonn, Raffine52, KeksDose, Skerion", "White"
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ Model "UTRocketLauncher"
|
||||||
SurfaceSkin 0 1 "Eight_t2.png"
|
SurfaceSkin 0 1 "Eight_t2.png"
|
||||||
SurfaceSkin 0 2 "Eight_t3.png"
|
SurfaceSkin 0 2 "Eight_t3.png"
|
||||||
SurfaceSkin 0 3 "Eight_t4.png"
|
SurfaceSkin 0 3 "Eight_t4.png"
|
||||||
SurfaceSkin 0 4 "miniammoledbase.png"
|
SurfaceSkin 0 4 "RAmmoLed"
|
||||||
Scale -0.2 0.22 0.2
|
Scale -0.2 0.22 0.2
|
||||||
Offset 3.4 -9.2 -8.5
|
Offset 3.4 -9.2 -8.5
|
||||||
AngleOffset 94
|
AngleOffset 94
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ Model "FlakCannon"
|
||||||
SurfaceSkin 0 1 "flak_t2.png"
|
SurfaceSkin 0 1 "flak_t2.png"
|
||||||
SurfaceSkin 0 2 "flak_t3.png"
|
SurfaceSkin 0 2 "flak_t3.png"
|
||||||
SurfaceSkin 0 3 "flak_t4.png"
|
SurfaceSkin 0 3 "flak_t4.png"
|
||||||
SurfaceSkin 0 4 "flakammoledbase.png"
|
SurfaceSkin 0 4 "FlakALed"
|
||||||
AngleOffset 90
|
AngleOffset 90
|
||||||
PitchOffset 180
|
PitchOffset 180
|
||||||
RollOffset 178
|
RollOffset 178
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Model "Minigun"
|
||||||
SurfaceSkin 0 1 "Mini_t2.png"
|
SurfaceSkin 0 1 "Mini_t2.png"
|
||||||
SurfaceSkin 0 2 "Mini_t3.png"
|
SurfaceSkin 0 2 "Mini_t3.png"
|
||||||
SurfaceSkin 0 3 "Mini_t4.png"
|
SurfaceSkin 0 3 "Mini_t4.png"
|
||||||
SurfaceSkin 0 4 "miniammoledbase.png"
|
SurfaceSkin 0 4 "MiniALed"
|
||||||
Scale 0.12 -0.08 0.12
|
Scale 0.12 -0.08 0.12
|
||||||
Offset 1.8 -19.9 -13.8
|
Offset 1.8 -19.9 -13.8
|
||||||
AngleOffset 90
|
AngleOffset 90
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ Model "PulseGun"
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 0 "PulseGunR_d.3d"
|
Model 0 "PulseGunR_d.3d"
|
||||||
// indices start at 1 for this model
|
// indices start at 1 for this model
|
||||||
SurfaceSkin 0 1 "AmmoLedBase.png"
|
SurfaceSkin 0 1 "PAmmoLed"
|
||||||
SurfaceSkin 0 2 "JPulseGun_02.png"
|
SurfaceSkin 0 2 "JPulseGun_02.png"
|
||||||
SurfaceSkin 0 3 "JPulseGun_03.png"
|
SurfaceSkin 0 3 "JPulseGun_03.png"
|
||||||
AngleOffset 90
|
AngleOffset 90
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 107 B |
BIN
sprites/ammoled/AMCBA0.png
Normal file
|
After Width: | Height: | Size: 83 B |
|
Before Width: | Height: | Size: 1,021 B After Width: | Height: | Size: 1,021 B |
|
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
BIN
sprites/ammoled/AMLDC0.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
sprites/ammoled/AMLDD0.png
Normal file
|
After Width: | Height: | Size: 84 B |
BIN
sprites/ammoled/LFN1A0.png
Normal file
|
After Width: | Height: | Size: 434 B |
BIN
sprites/ammoled/LFN1B0.png
Normal file
|
After Width: | Height: | Size: 344 B |
BIN
sprites/ammoled/LFN1C0.png
Normal file
|
After Width: | Height: | Size: 420 B |
BIN
sprites/ammoled/LFN1D0.png
Normal file
|
After Width: | Height: | Size: 413 B |
BIN
sprites/ammoled/LFN1E0.png
Normal file
|
After Width: | Height: | Size: 406 B |
BIN
sprites/ammoled/LFN1F0.png
Normal file
|
After Width: | Height: | Size: 422 B |
BIN
sprites/ammoled/LFN1G0.png
Normal file
|
After Width: | Height: | Size: 424 B |
BIN
sprites/ammoled/LFN1H0.png
Normal file
|
After Width: | Height: | Size: 379 B |
BIN
sprites/ammoled/LFN1I0.png
Normal file
|
After Width: | Height: | Size: 436 B |
BIN
sprites/ammoled/LFN1J0.png
Normal file
|
After Width: | Height: | Size: 431 B |
BIN
sprites/ammoled/LFN2A0.png
Normal file
|
After Width: | Height: | Size: 333 B |
BIN
sprites/ammoled/LFN2B0.png
Normal file
|
After Width: | Height: | Size: 295 B |
BIN
sprites/ammoled/LFN2C0.png
Normal file
|
After Width: | Height: | Size: 327 B |
BIN
sprites/ammoled/LFN2D0.png
Normal file
|
After Width: | Height: | Size: 321 B |
BIN
sprites/ammoled/LFN2E0.png
Normal file
|
After Width: | Height: | Size: 316 B |
BIN
sprites/ammoled/LFN2F0.png
Normal file
|
After Width: | Height: | Size: 329 B |
BIN
sprites/ammoled/LFN2G0.png
Normal file
|
After Width: | Height: | Size: 328 B |
BIN
sprites/ammoled/LFN2H0.png
Normal file
|
After Width: | Height: | Size: 309 B |
BIN
sprites/ammoled/LFN2I0.png
Normal file
|
After Width: | Height: | Size: 323 B |
BIN
sprites/ammoled/LFN2J0.png
Normal file
|
After Width: | Height: | Size: 330 B |
|
|
@ -27,3 +27,4 @@ version "4.3"
|
||||||
#include "zscript/uthud.zsc"
|
#include "zscript/uthud.zsc"
|
||||||
#include "zscript/compat.zsc"
|
#include "zscript/compat.zsc"
|
||||||
#include "zscript/utmenu.zsc"
|
#include "zscript/utmenu.zsc"
|
||||||
|
#include "zscript/ammoled.zsc"
|
||||||
|
|
|
||||||
192
zscript/ammoled.zsc
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
const PULSELEDBASE = 60000;
|
||||||
|
const FLAKLEDBASE = 61000;
|
||||||
|
const MINILEDBASE = 62000;
|
||||||
|
const ROCKETLEDBASE = 63000;
|
||||||
|
|
||||||
|
Class PulseGunLED : Actor
|
||||||
|
{
|
||||||
|
Actor base, digits[3], bar;
|
||||||
|
transient PulseGun mygun;
|
||||||
|
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
SetOrigin((PULSELEDBASE+64,128,99),false);
|
||||||
|
pitch = 90;
|
||||||
|
if ( !base ) base = Spawn("AmmoLEDScreen",(PULSELEDBASE+128,0,0));
|
||||||
|
for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(PULSELEDBASE+99,104+48*i,1));
|
||||||
|
if ( !bar ) bar = Spawn("AmmoCountBar",(PULSELEDBASE+110,30,1));
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
if ( !mygun ) return;
|
||||||
|
base.SetState(base.SpawnState);
|
||||||
|
int amo = flak_pulsereload?mygun.ClipCount:mygun.Ammo1.Amount;
|
||||||
|
int mamo = flak_pulsereload?mygun.default.ClipCount:mygun.Ammo1.MaxAmount;
|
||||||
|
digits[0].SetState(digits[0].SpawnState+1+((amo/100)%10));
|
||||||
|
digits[1].SetState(digits[1].SpawnState+1+((amo/10)%10));
|
||||||
|
digits[2].SetState(digits[2].SpawnState+1+(amo%10));
|
||||||
|
if ( amo < 10 )
|
||||||
|
{
|
||||||
|
digits[0].SetShade(Color(255,0,0));
|
||||||
|
digits[1].SetShade(Color(255,0,0));
|
||||||
|
digits[2].SetShade(Color(255,0,0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
digits[0].SetShade(Color(0,0,255));
|
||||||
|
digits[1].SetShade(Color(0,0,255));
|
||||||
|
digits[2].SetShade(Color(0,0,255));
|
||||||
|
}
|
||||||
|
bar.scale.x = amo/double(mamo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class FlakCannonLED : Actor
|
||||||
|
{
|
||||||
|
Actor base, digits[3];
|
||||||
|
transient FlakCannon mygun;
|
||||||
|
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
SetOrigin((FLAKLEDBASE+32,64,45),false);
|
||||||
|
pitch = 90;
|
||||||
|
if ( !base ) base = Spawn("AmmoLEDScreen",(FLAKLEDBASE+64,0,0));
|
||||||
|
for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(FLAKLEDBASE+51,54+20*i,1));
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
if ( !mygun ) return;
|
||||||
|
base.SetState(base.SpawnState+1);
|
||||||
|
int amo = mygun.Ammo1.Amount;
|
||||||
|
digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10));
|
||||||
|
digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10));
|
||||||
|
digits[2].SetState(digits[2].SpawnState+11+(amo%10));
|
||||||
|
digits[0].SetShade(Color(255,0,0));
|
||||||
|
digits[1].SetShade(Color(255,0,0));
|
||||||
|
digits[2].SetShade(Color(255,0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class MinigunLED : Actor
|
||||||
|
{
|
||||||
|
Actor base, digits[3];
|
||||||
|
transient Minigun mygun;
|
||||||
|
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
SetOrigin((MINILEDBASE+32,32,18),false);
|
||||||
|
pitch = 90;
|
||||||
|
if ( !base ) base = Spawn("AmmoLEDScreen",(MINILEDBASE+64,0,0));
|
||||||
|
for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(MINILEDBASE+51,22+20*i,1));
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
if ( !mygun ) return;
|
||||||
|
base.SetState(base.SpawnState+2);
|
||||||
|
int amo = mygun.Ammo1.Amount;
|
||||||
|
digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10));
|
||||||
|
digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10));
|
||||||
|
digits[2].SetState(digits[2].SpawnState+11+(amo%10));
|
||||||
|
digits[0].SetShade(Color(255,0,0));
|
||||||
|
digits[1].SetShade(Color(255,0,0));
|
||||||
|
digits[2].SetShade(Color(255,0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class UTRocketLauncherLED : Actor
|
||||||
|
{
|
||||||
|
Actor base, digits[3];
|
||||||
|
transient UTRocketLauncher mygun;
|
||||||
|
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
SetOrigin((ROCKETLEDBASE+32,32,18),false);
|
||||||
|
pitch = 90;
|
||||||
|
if ( !base ) base = Spawn("AmmoLEDScreen",(ROCKETLEDBASE+64,0,0));
|
||||||
|
for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(ROCKETLEDBASE+51,22+20*i,1));
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
if ( !mygun ) return;
|
||||||
|
base.SetState(base.SpawnState+3);
|
||||||
|
int amo = mygun.Ammo1.Amount;
|
||||||
|
digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10));
|
||||||
|
digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10));
|
||||||
|
digits[2].SetState(digits[2].SpawnState+11+(amo%10));
|
||||||
|
digits[0].SetShade(Color(255,0,0));
|
||||||
|
digits[1].SetShade(Color(255,0,0));
|
||||||
|
digits[2].SetShade(Color(255,0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class LEDFont : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
RenderStyle "Shaded";
|
||||||
|
StencilColor "FF 00 00";
|
||||||
|
Radius .1;
|
||||||
|
Height 0.;
|
||||||
|
RenderRadius 256;
|
||||||
|
+NOBLOCKMAP;
|
||||||
|
+NOGRAVITY;
|
||||||
|
+NOINTERACTION;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+FLATSPRITE;
|
||||||
|
+YFLIP; // flatsprites™
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
TNT1 A -1;
|
||||||
|
LFN1 ABCDEFGHIJ -1 Bright;
|
||||||
|
LFN2 ABCDEFGHIJ -1 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class AmmoCountBar : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Radius .1;
|
||||||
|
Height 0.;
|
||||||
|
RenderRadius 256;
|
||||||
|
+NOBLOCKMAP;
|
||||||
|
+NOGRAVITY;
|
||||||
|
+NOINTERACTION;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+FLATSPRITE;
|
||||||
|
+XFLIP; // flatsprites™
|
||||||
|
+YFLIP; // flatsprites™
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
AMCB A -1 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class AmmoLEDScreen : Actor
|
||||||
|
{
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Radius .1;
|
||||||
|
Height 0.;
|
||||||
|
RenderRadius 256;
|
||||||
|
+NOBLOCKMAP;
|
||||||
|
+NOGRAVITY;
|
||||||
|
+NOINTERACTION;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+FLATSPRITE;
|
||||||
|
+XFLIP; // flatsprites™
|
||||||
|
+YFLIP; // flatsprites™
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
AMLD ABCD -1 Bright;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -720,13 +720,8 @@ Class BioRifle : UTWeapon
|
||||||
{
|
{
|
||||||
p = Spawn("BioGlob",origin);
|
p = Spawn("BioGlob",origin);
|
||||||
p.A_SetScale(1.0+invoker.charge*0.8);
|
p.A_SetScale(1.0+invoker.charge*0.8);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),1+invoker.charge*0.3,-0.1,3,SWING_Spring,3,2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
p = Spawn("BioGel",origin);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),2,-0.5,2,SWING_Spring,2,2);
|
|
||||||
}
|
}
|
||||||
|
else p = Spawn("BioGel",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;
|
||||||
|
|
@ -763,7 +758,6 @@ Class BioRifle : UTWeapon
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
invoker.special1 = 2;
|
invoker.special1 = 2;
|
||||||
UTMainHandler.DoSwing(self,(FRandom[GES](-1,1),FRandom[GES](-1,1)),0.02*invoker.charge,0,5,SWING_Spring,0,2);
|
|
||||||
if ( invoker.charge >= 5.1 ) return;
|
if ( invoker.charge >= 5.1 ) return;
|
||||||
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;
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,6 @@ Class UTChainsaw : UTWeapon
|
||||||
{
|
{
|
||||||
invoker.ammocharge += 10./TICRATE;
|
invoker.ammocharge += 10./TICRATE;
|
||||||
A_QuakeEx(2,2,2,2,0,1,"",QF_RELATIVE,rollIntensity:0.15);
|
A_QuakeEx(2,2,2,2,0,1,"",QF_RELATIVE,rollIntensity:0.15);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring);
|
|
||||||
invoker.sawcnt += 1./TICRATE;
|
invoker.sawcnt += 1./TICRATE;
|
||||||
if ( invoker.sawcnt > 0.15 )
|
if ( invoker.sawcnt > 0.15 )
|
||||||
{
|
{
|
||||||
|
|
@ -177,7 +176,6 @@ Class UTChainsaw : UTWeapon
|
||||||
{
|
{
|
||||||
invoker.ammocharge += 20./TICRATE;
|
invoker.ammocharge += 20./TICRATE;
|
||||||
A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE,rollIntensity:0.15);
|
A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE,rollIntensity:0.15);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring);
|
|
||||||
if ( initial ) invoker.FireEffect();
|
if ( initial ) invoker.FireEffect();
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -233,7 +231,6 @@ Class UTChainsaw : UTWeapon
|
||||||
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE,rollIntensity:0.4);
|
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE,rollIntensity:0.4);
|
||||||
}
|
}
|
||||||
else A_QuakeEx(0,0,0,2,0,1,"",QF_RELATIVE,rollIntensity:0.2);
|
else A_QuakeEx(0,0,0,2,0,1,"",QF_RELATIVE,rollIntensity:0.2);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.25,-0.1,2,SWING_Spring);
|
|
||||||
if ( bAlt || Random[Chainsaw](0,2) ) return;
|
if ( bAlt || Random[Chainsaw](0,2) ) return;
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
@ -334,14 +331,9 @@ Class UTChainsaw : UTWeapon
|
||||||
{
|
{
|
||||||
A_StopSound(CHAN_WEAPONMISC);
|
A_StopSound(CHAN_WEAPONMISC);
|
||||||
A_StartSound("chainsaw/fire",CHAN_WEAPON);
|
A_StartSound("chainsaw/fire",CHAN_WEAPON);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-0.8,-1.2),FRandom[Chainsaw](-0.4,-0.7)),0,1,5,SWING_Spring,6,3);
|
|
||||||
}
|
}
|
||||||
CSWA ABCDE 2 A_Vibrate(true);
|
CSWA ABCDE 2 A_Vibrate(true);
|
||||||
CSWA F 2
|
CSWA F 2 A_Overlay(PSP_WEAPON+1,"AltFireSwipes");
|
||||||
{
|
|
||||||
A_Overlay(PSP_WEAPON+1,"AltFireSwipes");
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](0.8,1.2),0),0,2,6,SWING_Spring,1,3);
|
|
||||||
}
|
|
||||||
CSWA GHIJ 2;
|
CSWA GHIJ 2;
|
||||||
CSWA K 2 A_Vibrate(true);
|
CSWA K 2 A_Vibrate(true);
|
||||||
CSWA K 0
|
CSWA K 0
|
||||||
|
|
|
||||||
|
|
@ -294,6 +294,22 @@ Class UTRocketLauncher : UTWeapon
|
||||||
int locktics;
|
int locktics;
|
||||||
bool bSingleRocket;
|
bool bSingleRocket;
|
||||||
|
|
||||||
|
UTRocketLauncherLED ammoled;
|
||||||
|
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( !ammoled )
|
||||||
|
{
|
||||||
|
let ti = ThinkerIterator.Create("UTRocketLauncherLED");
|
||||||
|
while ( ammoled=UTRocketLauncherLED(ti.Next()) ) break;
|
||||||
|
if ( !ammoled ) ammoled = UTRocketLauncherLED(Spawn("UTRocketLauncherLED"));
|
||||||
|
}
|
||||||
|
if ( !Owner || !Owner.player || (Owner != players[consoleplayer].Camera) ) return;
|
||||||
|
ammoled.mygun = self;
|
||||||
|
TexMan.SetCameraToTexture(ammoled,"RAmmoLed",90);
|
||||||
|
}
|
||||||
|
|
||||||
override void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
Super.PostBeginPlay();
|
Super.PostBeginPlay();
|
||||||
|
|
@ -366,8 +382,6 @@ Class UTRocketLauncher : UTWeapon
|
||||||
UTPlayer(self).PlayAttacking3();
|
UTPlayer(self).PlayAttacking3();
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05);
|
A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05);
|
||||||
for ( int i=0; i<num; i++ )
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Eightball](0.4,-0.8),FRandom[Eightball](-0.5,0.5)),1,-0.2,Random[Eightball](3,4),SWING_Spring,Random[Eightball](2,5),Random[Eightball](2,4));
|
|
||||||
Vector3 x, y, z, x2, y2, z2;
|
Vector3 x, y, z, x2, y2, z2;
|
||||||
double a, s;
|
double a, s;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,6 @@ Class Enforcer : UTWeapon
|
||||||
else A_Overlay(-3,"LeftMuzzleFlash");
|
else A_Overlay(-3,"LeftMuzzleFlash");
|
||||||
A_OverlayFlags(-3,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
A_OverlayFlags(-3,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||||
A_OverlayRenderstyle(-3,STYLE_Add);
|
A_OverlayRenderstyle(-3,STYLE_Add);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Enforcer](0.5,0.2),FRandom[Enforcer](-0.3,0.2)),2,0,1,SWING_Spring,0,2);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -375,7 +374,6 @@ Class Enforcer : UTWeapon
|
||||||
else A_Overlay(-2,"MuzzleFlash");
|
else A_Overlay(-2,"MuzzleFlash");
|
||||||
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||||
A_OverlayRenderstyle(-2,STYLE_Add);
|
A_OverlayRenderstyle(-2,STYLE_Add);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Enforcer](-0.2,-0.5),FRandom[Enforcer](-0.3,0.2)),2,0,1,SWING_Spring,0,2);
|
|
||||||
}
|
}
|
||||||
Vector3 x, y, z, x2, y2, z2;
|
Vector3 x, y, z, x2, y2, z2;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
|
||||||
|
|
@ -637,6 +637,22 @@ Class FlakMag : UTCasing
|
||||||
|
|
||||||
Class FlakCannon : UTWeapon
|
Class FlakCannon : UTWeapon
|
||||||
{
|
{
|
||||||
|
FlakCannonLED ammoled;
|
||||||
|
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( !ammoled )
|
||||||
|
{
|
||||||
|
let ti = ThinkerIterator.Create("FlakCannonLED");
|
||||||
|
while ( ammoled=FlakCannonLED(ti.Next()) ) break;
|
||||||
|
if ( !ammoled ) ammoled = FlakCannonLED(Spawn("FlakCannonLED"));
|
||||||
|
}
|
||||||
|
if ( !Owner || !Owner.player || (Owner != players[consoleplayer].Camera) ) return;
|
||||||
|
ammoled.mygun = self;
|
||||||
|
TexMan.SetCameraToTexture(ammoled,"FlakALed",90);
|
||||||
|
}
|
||||||
|
|
||||||
action void A_Loading( bool first = false )
|
action void A_Loading( bool first = false )
|
||||||
{
|
{
|
||||||
if ( first ) A_StartSound("flak/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
|
if ( first ) A_StartSound("flak/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
|
||||||
|
|
@ -651,7 +667,6 @@ Class FlakCannon : UTWeapon
|
||||||
A_StartSound("flak/fire",CHAN_WEAPON);
|
A_StartSound("flak/fire",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(160,255,96,0),1);
|
UTMainHandler.DoFlash(self,Color(160,255,96,0),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -710,7 +725,6 @@ Class FlakCannon : UTWeapon
|
||||||
A_StartSound("flak/altfire",CHAN_WEAPON);
|
A_StartSound("flak/altfire",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,255,96,0),1);
|
UTMainHandler.DoFlash(self,Color(128,255,96,0),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ Class ImpactHammer : UTWeapon
|
||||||
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
||||||
}
|
}
|
||||||
A_QuakeEx(clamp(int(invoker.chargesize),0,2),clamp(int(invoker.chargesize),0,2),clamp(int(invoker.chargesize),0,2),2,0,96,"",QF_RELATIVE,rollIntensity:clamp(invoker.chargesize*0.3,0,0.3));
|
A_QuakeEx(clamp(int(invoker.chargesize),0,2),clamp(int(invoker.chargesize),0,2),clamp(int(invoker.chargesize),0,2),2,0,96,"",QF_RELATIVE,rollIntensity:clamp(invoker.chargesize*0.3,0,0.3));
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Impact](-1,1),FRandom[Impact](-1,1)),invoker.chargesize*0.1,0,1,SWING_Spring);
|
|
||||||
if ( !(player.cmd.buttons&BT_ATTACK) )
|
if ( !(player.cmd.buttons&BT_ATTACK) )
|
||||||
{
|
{
|
||||||
player.SetPSprite(PSP_WEAPON,ResolveState("Release"));
|
player.SetPSprite(PSP_WEAPON,ResolveState("Release"));
|
||||||
|
|
@ -90,7 +89,6 @@ Class ImpactHammer : UTWeapon
|
||||||
A_StopSound(CHAN_WEAPONMISC);
|
A_StopSound(CHAN_WEAPONMISC);
|
||||||
A_StartSound("impact/release",CHAN_WEAPON);
|
A_StartSound("impact/release",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),3,-0.8,3,SWING_Spring,3,2);
|
|
||||||
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
@ -155,7 +153,6 @@ Class ImpactHammer : UTWeapon
|
||||||
if ( !weap ) return;
|
if ( !weap ) return;
|
||||||
A_StartSound("impact/fire",CHAN_WEAPON);
|
A_StartSound("impact/fire",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),2,-0.6,2,SWING_Spring,1,2);
|
|
||||||
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
|
||||||
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,22 @@ Class Minigun : UTWeapon
|
||||||
{
|
{
|
||||||
int bcnt, tcnt;
|
int bcnt, tcnt;
|
||||||
|
|
||||||
|
MinigunLED ammoled;
|
||||||
|
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( !ammoled )
|
||||||
|
{
|
||||||
|
let ti = ThinkerIterator.Create("MinigunLED");
|
||||||
|
while ( ammoled=MinigunLED(ti.Next()) ) break;
|
||||||
|
if ( !ammoled ) ammoled = MinigunLED(Spawn("MinigunLED"));
|
||||||
|
}
|
||||||
|
if ( !Owner || !Owner.player || (Owner != players[consoleplayer].Camera) ) return;
|
||||||
|
ammoled.mygun = self;
|
||||||
|
TexMan.SetCameraToTexture(ammoled,"MiniALed",90);
|
||||||
|
}
|
||||||
|
|
||||||
action void A_FireBullet( bool alt = false )
|
action void A_FireBullet( bool alt = false )
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
|
|
@ -89,16 +105,8 @@ Class Minigun : UTWeapon
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(32,255,255,0),1);
|
UTMainHandler.DoFlash(self,Color(32,255,255,0),1);
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
if ( alt )
|
if ( alt ) A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12);
|
||||||
{
|
else A_QuakeEx(1,1,1,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
|
||||||
A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Minigun](-1,1),FRandom[Minigun](-1,1)),0.5,0,1,SWING_Spring,0,3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
A_QuakeEx(1,1,1,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Minigun](-1,1),FRandom[Minigun](-1,1)),0.3,0,1,SWING_Spring,0,3);
|
|
||||||
}
|
|
||||||
let l = Spawn("MinigunLight",pos);
|
let l = Spawn("MinigunLight",pos);
|
||||||
l.target = self;
|
l.target = self;
|
||||||
if ( !alt ) MinigunLight(l).cnt--;
|
if ( !alt ) MinigunLight(l).cnt--;
|
||||||
|
|
|
||||||
|
|
@ -566,6 +566,22 @@ Class PulseGun : UTWeapon
|
||||||
|
|
||||||
Property ClipCount : clipcount;
|
Property ClipCount : clipcount;
|
||||||
|
|
||||||
|
PulseGunLED ammoled;
|
||||||
|
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( !ammoled )
|
||||||
|
{
|
||||||
|
let ti = ThinkerIterator.Create("PulseGunLED");
|
||||||
|
while ( ammoled=PulseGunLED(ti.Next()) ) break;
|
||||||
|
if ( !ammoled ) ammoled = PulseGunLED(Spawn("PulseGunLED"));
|
||||||
|
}
|
||||||
|
if ( !Owner || !Owner.player || (Owner != players[consoleplayer].Camera) ) return;
|
||||||
|
ammoled.mygun = self;
|
||||||
|
TexMan.SetCameraToTexture(ammoled,"PAmmoLed",90);
|
||||||
|
}
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
if ( !flak_pulsereload ) return Super.GetClipAmount();
|
if ( !flak_pulsereload ) return Super.GetClipAmount();
|
||||||
|
|
@ -592,7 +608,6 @@ Class PulseGun : UTWeapon
|
||||||
if ( !flak_pulsereload && (invoker.clipcount <= 0) ) invoker.clipcount = min(invoker.default.clipcount,weap.Ammo1.Amount);
|
if ( !flak_pulsereload && (invoker.clipcount <= 0) ) invoker.clipcount = min(invoker.default.clipcount,weap.Ammo1.Amount);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(32,128,255,128),1);
|
UTMainHandler.DoFlash(self,Color(32,128,255,128),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Pulse](-1,1),FRandom[Pulse](-1,1)),0.1,-0.02,3,SWING_Spring,0,2);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
@ -653,7 +668,6 @@ Class PulseGun : UTWeapon
|
||||||
if ( !flak_pulsereload && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50;
|
if ( !flak_pulsereload && (invoker.clipcount <=0) ) invoker.clipcount = (weap.Ammo1.Amount>0)?Min(50,weap.Ammo1.Amount):50;
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(32,128,255,128),1);
|
UTMainHandler.DoFlash(self,Color(32,128,255,128),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Pulse](-1,-1),FRandom[Pulse](-1,1)),0.3,-0.1,2,SWING_Spring,0,3);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||||
A_Overlay(-2,"MuzzleFlash");
|
A_Overlay(-2,"MuzzleFlash");
|
||||||
|
|
|
||||||
|
|
@ -251,16 +251,8 @@ Class Ripper2 : UTWeapon
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(8,0,255,255),1);
|
UTMainHandler.DoFlash(self,Color(8,0,255,255),1);
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
if ( alt )
|
if ( alt ) A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
{
|
else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
|
||||||
A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),3,-0.5,3,SWING_Spring,5,4);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),1,-0.3,2,SWING_Spring,2,2);
|
|
||||||
}
|
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+6*y-4*z);
|
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+6*y-4*z);
|
||||||
|
|
|
||||||
|
|
@ -344,11 +344,7 @@ Class ShockBeam : Actor
|
||||||
ExplodeMissile(null,t.Results.HitActor);
|
ExplodeMissile(null,t.Results.HitActor);
|
||||||
if ( t.Results.HitActor is 'ShockHitbox' )
|
if ( t.Results.HitActor is 'ShockHitbox' )
|
||||||
{
|
{
|
||||||
if ( target )
|
if ( target ) target.TakeInventory('ShockAmmo',2);
|
||||||
{
|
|
||||||
target.TakeInventory('ShockAmmo',2);
|
|
||||||
UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),5,-1,3,SWING_Spring,3,6);
|
|
||||||
}
|
|
||||||
let b = t.Results.HitActor.target;
|
let b = t.Results.HitActor.target;
|
||||||
UTMainHandler.DoBlast(b,250,70000);
|
UTMainHandler.DoBlast(b,250,70000);
|
||||||
b.ExplodeMissile(null,self);
|
b.ExplodeMissile(null,self);
|
||||||
|
|
@ -581,11 +577,7 @@ Class SuperShockBeam : Actor
|
||||||
ExplodeMissile(null,t.Results.HitActor);
|
ExplodeMissile(null,t.Results.HitActor);
|
||||||
if ( t.Results.HitActor is 'ShockHitbox' )
|
if ( t.Results.HitActor is 'ShockHitbox' )
|
||||||
{
|
{
|
||||||
if ( target )
|
if ( target ) target.TakeInventory('EnhancedShockAmmo',1);
|
||||||
{
|
|
||||||
target.TakeInventory('EnhancedShockAmmo',1);
|
|
||||||
UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),10,-2,3,SWING_Spring,3,6);
|
|
||||||
}
|
|
||||||
let b = t.Results.HitActor.target;
|
let b = t.Results.HitActor.target;
|
||||||
UTMainHandler.DoBlast(b,400,70000);
|
UTMainHandler.DoBlast(b,400,70000);
|
||||||
b.ExplodeMissile(null,self);
|
b.ExplodeMissile(null,self);
|
||||||
|
|
@ -1069,7 +1061,6 @@ Class ShockRifle : UTWeapon
|
||||||
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
|
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),2,-0.3,3,SWING_Spring,0,4);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -1107,7 +1098,6 @@ Class ShockRifle : UTWeapon
|
||||||
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
|
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),3,-0.4,3,SWING_Spring,0,4);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -1252,7 +1242,6 @@ Class EnhancedShockRifle : UTWeapon
|
||||||
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
|
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),4,-0.6,3,SWING_Spring,0,4);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
@ -1290,7 +1279,6 @@ Class EnhancedShockRifle : UTWeapon
|
||||||
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
|
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),6,-0.8,3,SWING_Spring,0,4);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
|
||||||
|
|
@ -84,17 +84,10 @@ Class SniperRifle : UTWeapon
|
||||||
UTMainHandler.DoFlash(self,Color(32,0,0,255),1);
|
UTMainHandler.DoFlash(self,Color(32,0,0,255),1);
|
||||||
A_StartSound("sniper/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("sniper/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
if ( zoomed )
|
if ( zoomed ) A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09);
|
||||||
{
|
|
||||||
A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09);
|
|
||||||
for ( int i=0; i<3; i++ )
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),2,-0.5,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
A_QuakeEx(3,3,3,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12);
|
A_QuakeEx(3,3,3,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12);
|
||||||
for ( int i=0; i<3; i++ )
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),4,-1,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5));
|
|
||||||
A_Overlay(-2,"MuzzleFlash");
|
A_Overlay(-2,"MuzzleFlash");
|
||||||
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||||
A_OverlayRenderstyle(-2,STYLE_Add);
|
A_OverlayRenderstyle(-2,STYLE_Add);
|
||||||
|
|
|
||||||
|
|
@ -393,7 +393,6 @@ Class Translocator : UTWeapon
|
||||||
if ( !weap ) return;
|
if ( !weap ) return;
|
||||||
A_StartSound("transloc/throw",CHAN_WEAPON);
|
A_StartSound("transloc/throw",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,0.4),FRandom[Translocator](-0.2,0.7)),2,-0.3,3,SWING_Spring,2,3);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||||
|
|
@ -415,7 +414,6 @@ Class Translocator : UTWeapon
|
||||||
if ( !weap ) return;
|
if ( !weap ) return;
|
||||||
A_StartSound("transloc/return",CHAN_WEAPON);
|
A_StartSound("transloc/return",CHAN_WEAPON);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,-0.4),FRandom[Translocator](-0.2,0.7)),3,-1,2,SWING_Spring,2,2);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
if ( invoker.module && invoker.module.bAMBUSH )
|
if ( invoker.module && invoker.module.bAMBUSH )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2869,68 +2869,6 @@ Class UTBulletTrail : LineTracer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Enum ESwingMode
|
|
||||||
{
|
|
||||||
SWING_Straight, // constant increment
|
|
||||||
SWING_Spring, // bounces back after a delay
|
|
||||||
};
|
|
||||||
|
|
||||||
Class Swinger : Thinker
|
|
||||||
{
|
|
||||||
Actor target;
|
|
||||||
Vector2 dir;
|
|
||||||
double inc, rmul;
|
|
||||||
int steps, mode, delay;
|
|
||||||
double str, tstr;
|
|
||||||
int cnt, cstate;
|
|
||||||
|
|
||||||
Enum ESwingerState
|
|
||||||
{
|
|
||||||
STATE_Initial,
|
|
||||||
STATE_Wait,
|
|
||||||
STATE_Return,
|
|
||||||
};
|
|
||||||
|
|
||||||
override void Tick()
|
|
||||||
{
|
|
||||||
if ( !target ) cstate = -1;
|
|
||||||
switch ( cstate )
|
|
||||||
{
|
|
||||||
case STATE_Initial:
|
|
||||||
target.A_SetAngle(target.angle+dir.x*str*flak_swingerstrength,SPF_INTERPOLATE);
|
|
||||||
target.A_SetPitch(target.pitch+dir.y*str*flak_swingerstrength,SPF_INTERPOLATE);
|
|
||||||
str += inc;
|
|
||||||
if ( ++cnt >= steps )
|
|
||||||
{
|
|
||||||
cnt = 0;
|
|
||||||
str = tstr/steps;
|
|
||||||
cstate = (mode==SWING_Straight)?(-1):(delay>0)?STATE_Wait:STATE_Return;
|
|
||||||
}
|
|
||||||
else tstr += str;
|
|
||||||
break;
|
|
||||||
case STATE_Wait:
|
|
||||||
if ( ++cnt >= delay )
|
|
||||||
{
|
|
||||||
cnt = 0;
|
|
||||||
cstate = STATE_Return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case STATE_Return:
|
|
||||||
target.A_SetAngle(target.angle-dir.x*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE);
|
|
||||||
target.A_SetPitch(target.pitch-dir.y*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE);
|
|
||||||
if ( ++cnt >= steps*rmul )
|
|
||||||
{
|
|
||||||
cnt = 0;
|
|
||||||
cstate = -1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Destroy();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Class GenericFlash : HUDMessageBase
|
Class GenericFlash : HUDMessageBase
|
||||||
{
|
{
|
||||||
Color col;
|
Color col;
|
||||||
|
|
@ -3628,24 +3566,6 @@ Class UTMainHandler : EventHandler
|
||||||
else Victim.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.Mass));
|
else Victim.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.Mass));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DoSwing( Actor target, Vector2 dir, double initial, double inc, int steps, int mode = 0, int delay = 0, double rmul = 1.0 )
|
|
||||||
{
|
|
||||||
if ( !flak_swingers ) return;
|
|
||||||
let s = new("Swinger");
|
|
||||||
s.ChangeStatNum(Thinker.STAT_USER);
|
|
||||||
s.target = target;
|
|
||||||
s.dir = dir;
|
|
||||||
s.inc = inc;
|
|
||||||
s.rmul = rmul;
|
|
||||||
s.steps = steps;
|
|
||||||
s.mode = mode;
|
|
||||||
s.delay = delay;
|
|
||||||
s.cnt = 0;
|
|
||||||
s.cstate = 0;
|
|
||||||
s.str = initial;
|
|
||||||
s.tstr = initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
override void UiTick()
|
override void UiTick()
|
||||||
{
|
{
|
||||||
if ( !ispb && !isbd ) return;
|
if ( !ispb && !isbd ) return;
|
||||||
|
|
|
||||||
|
|
@ -685,8 +685,6 @@ Class WarheadLauncher : UTWeapon
|
||||||
A_StartSound("warhead/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
A_StartSound("warhead/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(128,255,128,128),1);
|
UTMainHandler.DoFlash(self,Color(128,255,128,128),1);
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Warhead](0.6,1.2),FRandom[Warhead](0.2,0.5)),4,-1,3,SWING_Spring,2,5);
|
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Warhead](0.2,0.5),FRandom[Warhead](-0.9,-1.5)),4,-0.6,5,SWING_Spring,3,3);
|
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_QuakeEx(6,6,6,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
A_QuakeEx(6,6,6,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
|
|
|
||||||