1.1.3 mini-update:
- Added hacky ammo displays. - Removed swingers. - Updated patron credits.
29
Readme.md
|
|
@ -1,9 +1,8 @@
|
|||
# DOOM TOURNAMENT
|
||||
|
||||
What began as a test for importing UT vertex meshes has turned into an actual
|
||||
full UT weapon and item mod.
|
||||
What began as a test for importing UT vertex meshes has turned into an actual 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
|
||||
|
||||
|
|
@ -49,8 +48,6 @@ This mod requires GZDoom 4.2.4 or later.
|
|||
- "Instant Rocket" mode toggleable with reload
|
||||
- Scaling/Customization options for the HUD
|
||||
- UT-like player movement physics
|
||||
- Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be
|
||||
toggled)
|
||||
- UT-like weapon dropping style
|
||||
- UT player classes
|
||||
- Heretic compatibility
|
||||
|
|
@ -61,29 +58,23 @@ This mod requires GZDoom 4.2.4 or later.
|
|||
- Hexen compatibility
|
||||
- Fancy titlemap
|
||||
- Semi-accurate UT sound behaviour
|
||||
- Hacky cameratexture ammo counters for Pulsegun, Minigun, Flak Cannon and rocket launcher
|
||||
|
||||
## In progress
|
||||
|
||||
- N/A this is the 1.1.2 release.
|
||||
- N/A this is the 1.1.3 release.
|
||||
|
||||
## Planned
|
||||
|
||||
- Stuff for 1.2
|
||||
- Touch up blood/gibbing features. At the moment, Nashgore is still a
|
||||
superior alternative.
|
||||
- Refactor everything, backporting many fixes and improvements from SWWM GZ.
|
||||
- Touch up blood/gibbing features. At the moment, Nashgore is still a superior alternative.
|
||||
- Help screens describing items and stuff (maybe?).
|
||||
- Chex Quest compatibility ?
|
||||
- Strife compatibility ????
|
||||
- Stuff for much later
|
||||
- Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher
|
||||
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)
|
||||
- Add weapon attachment support to player models when that is also added in
|
||||
(at the moment all player models have an integrated placeholder weapon)
|
||||
- Proper scripted textures for ammo counters, if they are ever implemented.
|
||||
- Redo player models once GZDoom gets a well deserved model animation system 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
|
||||
|
||||
- Biorifle sludge doesn't attach properly when it lands on the edge between
|
||||
sectors. This is most noticeable with moving sectors and 3d floors. This
|
||||
might be fixed once there's virtuals for world collision.
|
||||
- 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.
|
||||
|
|
|
|||
|
|
@ -4,3 +4,7 @@ texture static1
|
|||
range static4 tics 1
|
||||
texture invis00
|
||||
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_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_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_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)
|
||||
|
|
|
|||
12
gldefs.txt
|
|
@ -431,14 +431,6 @@ HardwareShader Texture "models/JPulsePickup_01.png"
|
|||
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||
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"
|
||||
{
|
||||
Shader "shaders/glsl/AmbientGlow.fp"
|
||||
|
|
@ -614,10 +606,6 @@ Brightmap Texture "models/Eight_t4.png"
|
|||
{
|
||||
Map "brightmaps/Eight_t4.png"
|
||||
}
|
||||
Brightmap Texture "models/miniammoledbase.png"
|
||||
{
|
||||
Map "brightmaps/fullbright.png"
|
||||
}
|
||||
HardwareShader Texture "models/tloc1_.png"
|
||||
{
|
||||
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
|
||||
|
|
|
|||
14
menudef.txt
|
|
@ -31,8 +31,6 @@ OptionMenu "UTOptionMenu"
|
|||
Option "$FLAK_SAWAMMO", "flak_sawammo", "YesNo"
|
||||
Option "$FLAK_ZOOMSND", "flak_zoomsound", "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
|
||||
StaticText " "
|
||||
StaticText "$FLAK_IOPTS", "Gold"
|
||||
|
|
@ -98,11 +96,13 @@ OptionMenu "UTCreditsMenu"
|
|||
StaticText "Epic Games", "White"
|
||||
StaticText " "
|
||||
StaticText "$FLAK_CPATRON", "Gold"
|
||||
StaticText "Christian Grab, john, Alexa Jones-Gonzales,", "White"
|
||||
StaticText "Jonas Höglund, Valerie Thiessen, Corey Hectus,", "White"
|
||||
StaticText "dac, Pietro Gagliardi, Artem Bashev,", "White"
|
||||
StaticText "Xada Xephron, Zard1084, NekoMithos,", "White"
|
||||
StaticText "Max Zeal, m8f, 3d0xp0xy", "White"
|
||||
StaticText "Snacks, Artem Bashev, john,", "White"
|
||||
StaticText "Jonas Höglund, Lilian Lamp, Valerie Thiessen,", "White"
|
||||
StaticText "Corey Hectus, Dac, Pietro Gagliardi, Xada Xephron,", "White"
|
||||
StaticText "Alexa Jones-Gonzales, John, NekoMithos,", "White"
|
||||
StaticText "bouncytem, Figo, Holly_Rook,", "White"
|
||||
StaticText "Namsan, YaGirlJuniper, Ashley Lambert,", "White"
|
||||
StaticText "LordMisfit, m8f, 3d0xp0xy", "White"
|
||||
StaticText " "
|
||||
StaticText "$FLAK_CTHANK", "Gold"
|
||||
StaticText "KynikossDragonn, Raffine52, KeksDose, Skerion", "White"
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ Model "UTRocketLauncher"
|
|||
SurfaceSkin 0 1 "Eight_t2.png"
|
||||
SurfaceSkin 0 2 "Eight_t3.png"
|
||||
SurfaceSkin 0 3 "Eight_t4.png"
|
||||
SurfaceSkin 0 4 "miniammoledbase.png"
|
||||
SurfaceSkin 0 4 "RAmmoLed"
|
||||
Scale -0.2 0.22 0.2
|
||||
Offset 3.4 -9.2 -8.5
|
||||
AngleOffset 94
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ Model "FlakCannon"
|
|||
SurfaceSkin 0 1 "flak_t2.png"
|
||||
SurfaceSkin 0 2 "flak_t3.png"
|
||||
SurfaceSkin 0 3 "flak_t4.png"
|
||||
SurfaceSkin 0 4 "flakammoledbase.png"
|
||||
SurfaceSkin 0 4 "FlakALed"
|
||||
AngleOffset 90
|
||||
PitchOffset 180
|
||||
RollOffset 178
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ Model "Minigun"
|
|||
SurfaceSkin 0 1 "Mini_t2.png"
|
||||
SurfaceSkin 0 2 "Mini_t3.png"
|
||||
SurfaceSkin 0 3 "Mini_t4.png"
|
||||
SurfaceSkin 0 4 "miniammoledbase.png"
|
||||
SurfaceSkin 0 4 "MiniALed"
|
||||
Scale 0.12 -0.08 0.12
|
||||
Offset 1.8 -19.9 -13.8
|
||||
AngleOffset 90
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ Model "PulseGun"
|
|||
Path "models"
|
||||
Model 0 "PulseGunR_d.3d"
|
||||
// indices start at 1 for this model
|
||||
SurfaceSkin 0 1 "AmmoLedBase.png"
|
||||
SurfaceSkin 0 1 "PAmmoLed"
|
||||
SurfaceSkin 0 2 "JPulseGun_02.png"
|
||||
SurfaceSkin 0 3 "JPulseGun_03.png"
|
||||
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/compat.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.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.pitch = BulletSlope();
|
||||
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;
|
||||
}
|
||||
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 ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
|
|
|
|||
|
|
@ -124,7 +124,6 @@ Class UTChainsaw : UTWeapon
|
|||
{
|
||||
invoker.ammocharge += 10./TICRATE;
|
||||
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;
|
||||
if ( invoker.sawcnt > 0.15 )
|
||||
{
|
||||
|
|
@ -177,7 +176,6 @@ Class UTChainsaw : UTWeapon
|
|||
{
|
||||
invoker.ammocharge += 20./TICRATE;
|
||||
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();
|
||||
A_AlertMonsters();
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -233,7 +231,6 @@ Class UTChainsaw : UTWeapon
|
|||
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);
|
||||
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;
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
@ -334,14 +331,9 @@ Class UTChainsaw : UTWeapon
|
|||
{
|
||||
A_StopSound(CHAN_WEAPONMISC);
|
||||
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 F 2
|
||||
{
|
||||
A_Overlay(PSP_WEAPON+1,"AltFireSwipes");
|
||||
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](0.8,1.2),0),0,2,6,SWING_Spring,1,3);
|
||||
}
|
||||
CSWA F 2 A_Overlay(PSP_WEAPON+1,"AltFireSwipes");
|
||||
CSWA GHIJ 2;
|
||||
CSWA K 2 A_Vibrate(true);
|
||||
CSWA K 0
|
||||
|
|
|
|||
|
|
@ -294,6 +294,22 @@ Class UTRocketLauncher : UTWeapon
|
|||
int locktics;
|
||||
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()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
|
@ -366,8 +382,6 @@ Class UTRocketLauncher : UTWeapon
|
|||
UTPlayer(self).PlayAttacking3();
|
||||
A_AlertMonsters();
|
||||
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;
|
||||
double a, s;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
|
|||
|
|
@ -367,7 +367,6 @@ Class Enforcer : UTWeapon
|
|||
else A_Overlay(-3,"LeftMuzzleFlash");
|
||||
A_OverlayFlags(-3,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
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
|
||||
{
|
||||
|
|
@ -375,7 +374,6 @@ Class Enforcer : UTWeapon
|
|||
else A_Overlay(-2,"MuzzleFlash");
|
||||
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
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;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
|
|||
|
|
@ -637,6 +637,22 @@ Class FlakMag : UTCasing
|
|||
|
||||
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 )
|
||||
{
|
||||
if ( first ) A_StartSound("flak/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
|
||||
|
|
@ -651,7 +667,6 @@ Class FlakCannon : UTWeapon
|
|||
A_StartSound("flak/fire",CHAN_WEAPON);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -710,7 +725,6 @@ Class FlakCannon : UTWeapon
|
|||
A_StartSound("flak/altfire",CHAN_WEAPON);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ Class ImpactHammer : UTWeapon
|
|||
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));
|
||||
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) )
|
||||
{
|
||||
player.SetPSprite(PSP_WEAPON,ResolveState("Release"));
|
||||
|
|
@ -90,7 +89,6 @@ Class ImpactHammer : UTWeapon
|
|||
A_StopSound(CHAN_WEAPONMISC);
|
||||
A_StartSound("impact/release",CHAN_WEAPON);
|
||||
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);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
@ -155,7 +153,6 @@ Class ImpactHammer : UTWeapon
|
|||
if ( !weap ) return;
|
||||
A_StartSound("impact/fire",CHAN_WEAPON);
|
||||
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_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
|
|
|
|||
|
|
@ -74,6 +74,22 @@ Class Minigun : UTWeapon
|
|||
{
|
||||
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 )
|
||||
{
|
||||
Weapon weap = Weapon(invoker);
|
||||
|
|
@ -89,16 +105,8 @@ Class Minigun : UTWeapon
|
|||
invoker.FireEffect();
|
||||
UTMainHandler.DoFlash(self,Color(32,255,255,0),1);
|
||||
A_AlertMonsters();
|
||||
if ( alt )
|
||||
{
|
||||
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);
|
||||
}
|
||||
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);
|
||||
let l = Spawn("MinigunLight",pos);
|
||||
l.target = self;
|
||||
if ( !alt ) MinigunLight(l).cnt--;
|
||||
|
|
|
|||
|
|
@ -566,6 +566,22 @@ Class PulseGun : UTWeapon
|
|||
|
||||
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()
|
||||
{
|
||||
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);
|
||||
invoker.FireEffect();
|
||||
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();
|
||||
Vector3 x, y, z;
|
||||
[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;
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
|
||||
A_Overlay(-2,"MuzzleFlash");
|
||||
|
|
|
|||
|
|
@ -251,16 +251,8 @@ Class Ripper2 : UTWeapon
|
|||
invoker.FireEffect();
|
||||
UTMainHandler.DoFlash(self,Color(8,0,255,255),1);
|
||||
A_AlertMonsters();
|
||||
if ( alt )
|
||||
{
|
||||
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);
|
||||
}
|
||||
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);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
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);
|
||||
if ( t.Results.HitActor is 'ShockHitbox' )
|
||||
{
|
||||
if ( target )
|
||||
{
|
||||
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);
|
||||
}
|
||||
if ( target ) target.TakeInventory('ShockAmmo',2);
|
||||
let b = t.Results.HitActor.target;
|
||||
UTMainHandler.DoBlast(b,250,70000);
|
||||
b.ExplodeMissile(null,self);
|
||||
|
|
@ -581,11 +577,7 @@ Class SuperShockBeam : Actor
|
|||
ExplodeMissile(null,t.Results.HitActor);
|
||||
if ( t.Results.HitActor is 'ShockHitbox' )
|
||||
{
|
||||
if ( target )
|
||||
{
|
||||
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);
|
||||
}
|
||||
if ( target ) target.TakeInventory('EnhancedShockAmmo',1);
|
||||
let b = t.Results.HitActor.target;
|
||||
UTMainHandler.DoBlast(b,400,70000);
|
||||
b.ExplodeMissile(null,self);
|
||||
|
|
@ -1069,7 +1061,6 @@ Class ShockRifle : UTWeapon
|
|||
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -1107,7 +1098,6 @@ Class ShockRifle : UTWeapon
|
|||
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -1252,7 +1242,6 @@ Class EnhancedShockRifle : UTWeapon
|
|||
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -1290,7 +1279,6 @@ Class EnhancedShockRifle : UTWeapon
|
|||
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
|
||||
Vector3 x, y, z;
|
||||
|
|
|
|||
|
|
@ -84,17 +84,10 @@ Class SniperRifle : UTWeapon
|
|||
UTMainHandler.DoFlash(self,Color(32,0,0,255),1);
|
||||
A_StartSound("sniper/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_AlertMonsters();
|
||||
if ( zoomed )
|
||||
{
|
||||
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));
|
||||
}
|
||||
if ( zoomed ) A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09);
|
||||
else
|
||||
{
|
||||
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_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
A_OverlayRenderstyle(-2,STYLE_Add);
|
||||
|
|
|
|||
|
|
@ -393,7 +393,6 @@ Class Translocator : UTWeapon
|
|||
if ( !weap ) return;
|
||||
A_StartSound("transloc/throw",CHAN_WEAPON);
|
||||
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();
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
@ -415,7 +414,6 @@ Class Translocator : UTWeapon
|
|||
if ( !weap ) return;
|
||||
A_StartSound("transloc/return",CHAN_WEAPON);
|
||||
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();
|
||||
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
|
||||
{
|
||||
Color col;
|
||||
|
|
@ -3628,24 +3566,6 @@ Class UTMainHandler : EventHandler
|
|||
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()
|
||||
{
|
||||
if ( !ispb && !isbd ) return;
|
||||
|
|
|
|||
|
|
@ -685,8 +685,6 @@ Class WarheadLauncher : UTWeapon
|
|||
A_StartSound("warhead/fire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
invoker.FireEffect();
|
||||
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_QuakeEx(6,6,6,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||
Vector3 x, y, z;
|
||||
|
|
|
|||