Flamethrower partially implemented.

I decided on making it default to the old style. The alternate model will be available as a separate add-on, rather than use a cvar, because damn if that was complicated to add.
Fix Impaler select anim when thrown and picked back up.
This commit is contained in:
Marisa the Magician 2019-09-22 02:56:00 +02:00
commit 0cd7b432e2
24 changed files with 537 additions and 24 deletions

View file

@ -59,6 +59,8 @@
changes to accomodate for it. I still think the texture sucks. It should be changes to accomodate for it. I still think the texture sucks. It should be
switchable, just like how you can change weapon sprites in Smooth Doom. switchable, just like how you can change weapon sprites in Smooth Doom.
- Ammo is just a recolored explosive barrel. - Ammo is just a recolored explosive barrel.
- Decided to default to the old model instead of the new one.
- Need to re-add the flame.
### Quadshot ### Quadshot

View file

@ -38,9 +38,6 @@ server bool sting_riflel = false; // old rifle flashlight
server bool sting_razor = false; // razorjack blade charging server bool sting_razor = false; // razorjack blade charging
// hold primary fire to increase the // hold primary fire to increase the
// spin up to 3 levels // spin up to 3 levels
server bool sting_flamet = false; // use flamethrower model based on old
// design and texture rather than the
// modern redesign
server bool sting_automags = false; // automag dual wielding server bool sting_automags = false; // automag dual wielding
// oldskool did this, and you'll come // oldskool did this, and you'll come
// to realize that it wasn't a good // to realize that it wasn't a good

View file

@ -813,6 +813,10 @@ HardwareShader Texture "models/ElecFX.png"
{ {
Shader "shaders/glsl/ElecFX.fp" Shader "shaders/glsl/ElecFX.fp"
} }
HardwareShader Texture "models/FlametFX.png"
{
Shader "shaders/glsl/FlametFX.fp"
}
// PP shaders // PP shaders
HardwareShader PostProcess scene HardwareShader PostProcess scene
{ {

View file

@ -233,7 +233,6 @@ STING_RIFLEL = "Rifle flashlight";
STING_RAZOR = "Razorjack charging"; STING_RAZOR = "Razorjack charging";
STING_EHOLD = "Loaded Eightball can be held for 2 seconds"; STING_EHOLD = "Loaded Eightball can be held for 2 seconds";
STING_BHOLD = "Charged Biorifle can be held for 2 seconds"; STING_BHOLD = "Charged Biorifle can be held for 2 seconds";
STING_FLAMET = "Old Flamethrower model";
STING_DOPTS = "Weapon dual wielding"; STING_DOPTS = "Weapon dual wielding";
STING_AUTODUAL = "Automags"; STING_AUTODUAL = "Automags";
STING_PROTODUAL = "Protomags"; STING_PROTODUAL = "Protomags";
@ -470,7 +469,6 @@ STING_RIFLEL = "Linterna de Rifle";
STING_RAZOR = "Carga de Razorjack"; STING_RAZOR = "Carga de Razorjack";
STING_EHOLD = "El Eightball se puede mantener cargado por 2 segundos"; STING_EHOLD = "El Eightball se puede mantener cargado por 2 segundos";
STING_BHOLD = "El Biorifle se puede mantener cargado por 2 segundos"; STING_BHOLD = "El Biorifle se puede mantener cargado por 2 segundos";
STING_FLAMET = "Modelo viejo de Lanzallamas";
STING_DOPTS = "Armas a dos manos"; STING_DOPTS = "Armas a dos manos";
STING_AUTODUAL = "Autoarmas"; STING_AUTODUAL = "Autoarmas";
STING_PROTODUAL = "Protoarmas"; STING_PROTODUAL = "Protoarmas";

View file

@ -33,7 +33,6 @@ OptionMenu "UnrealOptionMenu"
Option "$STING_RAZOR", "sting_razor", "YesNo" Option "$STING_RAZOR", "sting_razor", "YesNo"
Option "$STING_EHOLD", "sting_ehold", "YesNo" Option "$STING_EHOLD", "sting_ehold", "YesNo"
Option "$STING_BHOLD", "sting_bhold", "YesNo" Option "$STING_BHOLD", "sting_bhold", "YesNo"
Option "$STING_FLAMET", "sting_flamet", "YesNo"
StaticText " " StaticText " "
StaticText "$STING_DOPTS", "Gold" StaticText "$STING_DOPTS", "Gold"
Option "$STING_AUTODUAL", "sting_automags", "YesNo" Option "$STING_AUTODUAL", "sting_automags", "YesNo"

View file

@ -15,7 +15,8 @@ Model "UFlamethrower"
{ {
Path "models" Path "models"
Model 1 "FlameTPick_d.3d" Model 1 "FlameTPick_d.3d"
Skin 1 "JNapalm1_.png" SurfaceSkin 1 0 "JNapalm1_.png"
SurfaceSkin 1 1 "Flamet_.png"
ZOffset 10 ZOffset 10
AngleOffset -90 AngleOffset -90
Scale 0.1 0.1 0.12 Scale 0.1 0.1 0.12
@ -30,16 +31,254 @@ Model "UFlamethrower"
Model "UFlamethrower" Model "UFlamethrower"
{ {
Path "models" Path "models"
Model 3 "FlameTOldPick_d.3d" Model 2 "FlameT_d.3d"
SurfaceSkin 3 0 "JNapalm1_.png" SurfaceSkin 2 2 "FlametFX.png"
SurfaceSkin 3 1 "Flamet_.png"
ZOffset 10
AngleOffset -90 AngleOffset -90
Scale 0.1 0.1 0.12 Scale 0.1 -0.06 0.1
Offset 5 -8 -6
FrameIndex OFLP B 3 0 // Down
FrameIndex FLFD A 2 1
ZOffset 12 FrameIndex FLFD B 2 2
ROTATING FrameIndex FLFD C 2 3
FrameIndex OFLP A 3 0 FrameIndex FLFD D 2 4
// Select
FrameIndex FLFS A 2 16
FrameIndex FLFS B 2 17
FrameIndex FLFS C 2 18
FrameIndex FLFS D 2 19
// Idle
FrameIndex FLFI A 2 20
FrameIndex FLFI B 2 21
FrameIndex FLFI C 2 22
FrameIndex FLFI D 2 23
FrameIndex FLFI E 2 24
FrameIndex FLFI F 2 25
FrameIndex FLFI G 2 26
// PreFire
FrameIndex FLFF A 2 27
FrameIndex FLFF B 2 28
FrameIndex FLFF C 2 29
FrameIndex FLFF D 2 30
FrameIndex FLFF E 2 31
// Fire
FrameIndex FLFF F 2 32
FrameIndex FLFF G 2 33
FrameIndex FLFF H 2 34
FrameIndex FLFF I 2 35
FrameIndex FLFF J 2 36
FrameIndex FLFF K 2 37
// PostFire
FrameIndex FLFF L 2 38
FrameIndex FLFF M 2 39
FrameIndex FLFF N 2 40
FrameIndex FLFF O 2 41
FrameIndex FLFF P 2 42
// AltFireStart
FrameIndex FLFA A 2 43
FrameIndex FLFA B 2 44
FrameIndex FLFA C 2 45
FrameIndex FLFA D 2 46
FrameIndex FLFA E 2 47
// AltFireRep
FrameIndex FLFA F 2 48
FrameIndex FLFA G 2 49
FrameIndex FLFA H 2 50
FrameIndex FLFA I 2 51
FrameIndex FLFA J 2 52
FrameIndex FLFA K 2 53
FrameIndex FLFA L 2 54
// AltFireRelease
FrameIndex FLFA M 2 55
FrameIndex FLFA N 2 56
FrameIndex FLFA O 2 57
FrameIndex FLFA P 2 58
FrameIndex FLFA Q 2 59
FrameIndex FLFA R 2 60
FrameIndex FLFA S 2 61
FrameIndex FLFA T 2 62
FrameIndex FLFA U 2 63
FrameIndex FLFA V 2 64
FrameIndex FLFA W 2 65
FrameIndex FLFA X 2 66
// AltFireEnd
FrameIndex FLFA Y 2 67
FrameIndex FLFA Z 2 68
FrameIndex FLFA [ 2 69
FrameIndex FLFA \ 2 70
FrameIndex FLFA ] 2 71
FrameIndex FFA2 A 2 72
FrameIndex FFA2 B 2 73
FrameIndex FFA2 C 2 74
FrameIndex FFA2 D 2 75
// Twiddle
FrameIndex FLFT A 2 76
FrameIndex FLFT B 2 77
FrameIndex FLFT C 2 78
FrameIndex FLFT D 2 79
FrameIndex FLFT E 2 80
FrameIndex FLFT F 2 81
FrameIndex FLFT G 2 82
FrameIndex FLFT H 2 83
FrameIndex FLFT I 2 84
FrameIndex FLFT J 2 85
FrameIndex FLFT K 2 86
FrameIndex FLFT L 2 87
FrameIndex FLFT M 2 88
FrameIndex FLFT N 2 89
FrameIndex FLFT O 2 90
FrameIndex FLFT P 2 91
FrameIndex FLFT Q 2 92
FrameIndex FLFT R 2 93
FrameIndex FLFT S 2 94
FrameIndex FLFT T 2 95
FrameIndex FLFT U 2 96
FrameIndex FLFT V 2 97
FrameIndex FLFT W 2 98
FrameIndex FLFT X 2 99
FrameIndex FLFT Y 2 100
FrameIndex FLFT Z 2 101
FrameIndex FLFT [ 2 102
FrameIndex FLFT \ 2 103
FrameIndex FLFT ] 2 104
FrameIndex FFT2 A 2 105
FrameIndex FFT2 B 2 106
FrameIndex FFT2 C 2 107
FrameIndex FFT2 D 2 108
FrameIndex FFT2 E 2 109
FrameIndex FFT2 F 2 110
}
Model "UFlamethrower"
{
Path "models"
Model 0 "FlameT_d.3d"
SurfaceSkin 0 0 "Flamet.png"
SurfaceSkin 0 1 "Automa1.png"
AngleOffset -90
Scale 0.1 -0.06 0.1
Offset 5 -8 -6
// Down
FrameIndex FLMD A 0 1
FrameIndex FLMD B 0 2
FrameIndex FLMD C 0 3
FrameIndex FLMD D 0 4
FrameIndex FLMD E 0 5
FrameIndex FLMD F 0 6
FrameIndex FLMD G 0 7
FrameIndex FLMD H 0 8
FrameIndex FLMD I 0 9
FrameIndex FLMD J 0 10
// Select
FrameIndex FLMS A 0 10
FrameIndex FLMS B 0 11
FrameIndex FLMS C 0 12
FrameIndex FLMS D 0 13
FrameIndex FLMS E 0 14
FrameIndex FLMS F 0 15
FrameIndex FLMS G 0 16
FrameIndex FLMS H 0 17
FrameIndex FLMS I 0 18
FrameIndex FLMS J 0 19
// Idle
FrameIndex FLMI A 0 20
FrameIndex FLMI B 0 21
FrameIndex FLMI C 0 22
FrameIndex FLMI D 0 23
FrameIndex FLMI E 0 24
FrameIndex FLMI F 0 25
FrameIndex FLMI G 0 26
// PreFire
FrameIndex FLMF A 0 27
FrameIndex FLMF B 0 28
FrameIndex FLMF C 0 29
FrameIndex FLMF D 0 30
FrameIndex FLMF E 0 31
// Fire
FrameIndex FLMF F 0 32
FrameIndex FLMF G 0 33
FrameIndex FLMF H 0 34
FrameIndex FLMF I 0 35
FrameIndex FLMF J 0 36
FrameIndex FLMF K 0 37
// PostFire
FrameIndex FLMF L 0 38
FrameIndex FLMF M 0 39
FrameIndex FLMF N 0 40
FrameIndex FLMF O 0 41
FrameIndex FLMF P 0 42
// AltFireStart
FrameIndex FLMA A 0 43
FrameIndex FLMA B 0 44
FrameIndex FLMA C 0 45
FrameIndex FLMA D 0 46
FrameIndex FLMA E 0 47
// AltFireRep
FrameIndex FLMA F 0 48
FrameIndex FLMA G 0 49
FrameIndex FLMA H 0 50
FrameIndex FLMA I 0 51
FrameIndex FLMA J 0 52
FrameIndex FLMA K 0 53
FrameIndex FLMA L 0 54
// AltFireRelease
FrameIndex FLMA M 0 55
FrameIndex FLMA N 0 56
FrameIndex FLMA O 0 57
FrameIndex FLMA P 0 58
FrameIndex FLMA Q 0 59
FrameIndex FLMA R 0 60
FrameIndex FLMA S 0 61
FrameIndex FLMA T 0 62
FrameIndex FLMA U 0 63
FrameIndex FLMA V 0 64
FrameIndex FLMA W 0 65
FrameIndex FLMA X 0 66
// AltFireEnd
FrameIndex FLMA Y 0 67
FrameIndex FLMA Z 0 68
FrameIndex FLMA [ 0 69
FrameIndex FLMA \ 0 70
FrameIndex FLMA ] 0 71
FrameIndex FLA2 A 0 72
FrameIndex FLA2 B 0 73
FrameIndex FLA2 C 0 74
FrameIndex FLA2 D 0 75
// Twiddle
FrameIndex FLMT A 0 76
FrameIndex FLMT B 0 77
FrameIndex FLMT C 0 78
FrameIndex FLMT D 0 79
FrameIndex FLMT E 0 80
FrameIndex FLMT F 0 81
FrameIndex FLMT G 0 82
FrameIndex FLMT H 0 83
FrameIndex FLMT I 0 84
FrameIndex FLMT J 0 85
FrameIndex FLMT K 0 86
FrameIndex FLMT L 0 87
FrameIndex FLMT M 0 88
FrameIndex FLMT N 0 89
FrameIndex FLMT O 0 90
FrameIndex FLMT P 0 91
FrameIndex FLMT Q 0 92
FrameIndex FLMT R 0 93
FrameIndex FLMT S 0 94
FrameIndex FLMT T 0 95
FrameIndex FLMT U 0 96
FrameIndex FLMT V 0 97
FrameIndex FLMT W 0 98
FrameIndex FLMT X 0 99
FrameIndex FLMT Y 0 100
FrameIndex FLMT Z 0 101
FrameIndex FLMT [ 0 102
FrameIndex FLMT \ 0 103
FrameIndex FLMT ] 0 104
FrameIndex FLT2 A 0 105
FrameIndex FLT2 B 0 106
FrameIndex FLT2 C 0 107
FrameIndex FLT2 D 0 108
FrameIndex FLT2 E 0 109
FrameIndex FLT2 F 0 110
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/FlametFX.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

50
shaders/glsl/FlametFX.fp Normal file
View file

@ -0,0 +1,50 @@
/* https://www.shadertoy.com/view/XsXSWS */
vec2 hash( vec2 p )
{
p = vec2( dot(p,vec2(127.1,311.7)),
dot(p,vec2(269.5,183.3)) );
return -1.0 + 2.0*fract(sin(p)*43758.5453123);
}
float noise( in vec2 p )
{
const float K1 = 0.366025404; // (sqrt(3)-1)/2;
const float K2 = 0.211324865; // (3-sqrt(3))/6;
vec2 i = floor( p + (p.x+p.y)*K1 );
vec2 a = p - i + (i.x+i.y)*K2;
vec2 o = (a.x>a.y) ? vec2(1.0,0.0) : vec2(0.0,1.0);
vec2 b = a - o + K2;
vec2 c = a - 1.0 + 2.0*K2;
vec3 h = max( 0.5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0.0 );
vec3 n = h*h*h*h*vec3( dot(a,hash(i+0.0)), dot(b,hash(i+o)), dot(c,hash(i+1.0)));
return dot( n, vec3(70.0) );
}
float fbm(vec2 uv)
{
float f;
mat2 m = mat2( 1.6, 1.2, -1.2, 1.6 );
f = 0.5000*noise( uv ); uv = m*uv;
f += 0.2500*noise( uv ); uv = m*uv;
f += 0.1250*noise( uv ); uv = m*uv;
f += 0.0625*noise( uv ); uv = m*uv;
f = 0.5 + 0.5*f;
return f;
}
vec4 ProcessTexel()
{
vec2 uv = vTexCoord.st;
uv.y = 1.0-uv.y;
vec2 q = uv;
float T3 = 1.2*timer;
q.x = mod(q.x,1.)-0.5;
q.y -= 0.2;
float n = fbm(q*vec2(1.2,.3) - vec2(0,T3));
float c = 1. - 12. * pow( max( 0., length(q*vec2(1.+q.y*1.25,.85) ) - n * max( 0., q.y+.15 ) ),1.5 );
float c1 = n * c * (1.5-pow(1.25*uv.y,4.));
c1=clamp(c1,0.,1.);
vec3 col = vec3(c1*c1*c1*c1,1.2*c1*c1*c1,1.7*c1*c1);
return vec4(col,1.0);
}

View file

@ -317,6 +317,14 @@ flamegun/alt flamgalt
flamegun/exp expl04 flamegun/exp expl04
$limit flamegun/exp 16 $limit flamegun/exp 16
flamet/select flamtsel
flamet/idle flamtidl
flamet/down flamtide
flamet/fire flamtfir
flamet/fireend flamtstp
flamet/charge flamtchg
flamet/altfire flamtalt
translator/event transa3 translator/event transa3
detector/start detact detector/start detact

View file

@ -1,6 +1,4 @@
Sprite "FLMAA0",1,1{} Sprite "FLMAA0",1,1{}
Sprite "FLMPA0",1,1{} Sprite "FLMPA0",1,1{}
Sprite "OFLPA0",1,1{}
Sprite "FLMSA0",1,1{} Sprite "FLMSA0",1,1{}
Sprite "OFLSA0",1,1{}
Sprite "NAPAA0",1,1{} Sprite "NAPAA0",1,1{}

View file

@ -106,6 +106,7 @@ Class Impaler : UnrealWeapon
IMPI A 0 IMPI A 0
{ {
let weap = Weapon(invoker); let weap = Weapon(invoker);
invoker.HasGem = false;
if ( (invoker.ClipCount>=0) || (weap.Ammo1.Amount > 0) ) if ( (invoker.ClipCount>=0) || (weap.Ammo1.Amount > 0) )
return ResolveState("Reload"); return ResolveState("Reload");
return ResolveState("Idle"); return ResolveState("Idle");

View file

@ -19,6 +19,14 @@ Class FlameAmmo : Ammo
} }
} }
Class UFlameTrail : Actor
{
}
Class OnFire : Thinker
{
}
Class UFlame : Actor Class UFlame : Actor
{ {
} }
@ -30,7 +38,75 @@ Class UNapalm : Actor
Class UFlamethrower : UnrealWeapon Class UFlamethrower : UnrealWeapon
{ {
bool bCharging; bool bCharging;
double ChargeSize, Count;
override Inventory CreateTossable( int amt )
{
if ( Owner.player && (Owner.player.ReadyWeapon == self) )
Owner.A_PlaySound("flamet/down",CHAN_6,Dampener.Active(self)?.1:1.);
return Super.CreateTossable(amt);
}
action void A_FireFlame()
{
let weap = Weapon(invoker);
if ( (weap.Ammo1.Amount <= 0) || !(player.cmd.buttons&BT_ATTACK) )
{
player.SetPSPrite(PSP_WEAPON,invoker.FindState("Release"));
return;
}
invoker.count += 10./TICRATE;
while ( invoker.count > 1. )
{
weap.DepleteAmmo(weap.bAltFire,true,1);
invoker.count -= 1.;
}
}
action void A_BeginFlame()
{
let weap = Weapon(invoker);
weap.DepleteAmmo(weap.bAltFire,true,1);
invoker.count = 0;
A_PlaySound("flamet/fire",CHAN_WEAPON,Dampener.Active(self)?.1:1.,true);
A_Overlay(-9999,"Dummy2");
}
action void A_BeginCharge()
{
let weap = Weapon(invoker);
weap.DepleteAmmo(weap.bAltFire,true,1);
invoker.count = invoker.chargesize = 0;
A_PlaySound("flamet/charge",CHAN_WEAPON,Dampener.Active(self)?.1:1.);
A_Overlay(-9999,"Dummy3");
}
action void A_ChargeUp()
{
let weap = Weapon(invoker);
if ( (invoker.chargesize < 4.9) && (weap.Ammo1.Amount > 0) )
{
invoker.count += 40./TICRATE;
while ( invoker.count > 1. )
{
invoker.chargesize += 0.05;
weap.DepleteAmmo(weap.bAltFire,true,1);
invoker.count -= 1.;
}
}
double ox = FRandom[Flamet](-1,1)*invoker.chargesize*0.3;
double oy = FRandom[Flamet](-1,1)*invoker.chargesize*0.3;
A_WeaponOffset(ox,32+oy);
A_OverlayOffset(-2,-ox,-oy);
A_SoundVolume(CHAN_WEAPON,Dampener.Active(self)?.1:1.);
if ( (weap.Ammo1.Amount <= 0) || (invoker.chargesize >= 4.9) || !(player.cmd.buttons&BT_ALTATTACK) )
player.SetPSPrite(PSP_WEAPON,invoker.FindState("AltRelease"));
}
action void A_FireNapalm()
{
A_Overlay(-9999,"Null");
A_WeaponOffset(0,32);
A_OverlayOffset(-2,0,0);
invoker.bCharging = false;
A_PlaySound("flamet/altfire",CHAN_WEAPON,Dampener.Active(self)?.1:1.);
if ( self is 'UTPlayer' ) UTPlayer(self).PlayAttacking3();
}
Default Default
{ {
Tag "$T_FLAMETHROWER"; Tag "$T_FLAMETHROWER";
@ -42,20 +118,161 @@ Class UFlamethrower : UnrealWeapon
Weapon.AmmoType "FlameAmmo"; Weapon.AmmoType "FlameAmmo";
Weapon.AmmoUse 1; Weapon.AmmoUse 1;
Weapon.AmmoType2 "FlameAmmo"; Weapon.AmmoType2 "FlameAmmo";
Weapon.AmmoUse2 30; Weapon.AmmoUse2 1;
Weapon.AmmoGive 100; Weapon.AmmoGive 100;
UTWeapon.DropAmmo 50; UTWeapon.DropAmmo 50;
} }
States States
{ {
Spawn: Spawn:
FLMP A 1 A_JumpIf(sting_flamet,2); FLMP A -1;
Stop;
FLMP B -1;
Stop;
Select:
FLMS A 1 A_Raise(int.max);
Wait; Wait;
FLMP B 1 A_JumpIf(sting_flamet,2); Ready:
FLMS ABCDEF 2 A_WeaponReady(WRF_NOFIRE);
FLMS G 0
{
A_PlaySound("flamet/idle",CHAN_6,Dampener.Active(self)?.1:1.,true);
A_Overlay(-2,"FlameReady");
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderStyle(-2,STYLE_Add);
}
FLMS GHIJ 2 A_WeaponReady(WRF_NOFIRE);
Goto Idle;
Dummy:
TNT1 A 1
{
A_CheckReload();
A_WeaponReady();
}
Wait; Wait;
OFLP A 1 A_JumpIf(!sting_flamet,"Spawn"); Idle:
FLMI A 0 A_Overlay(-9999,"Dummy");
FLMI ABCDEFG 12 A_SoundVolume(CHAN_6,Dampener.Active(self)?.1:1.);
FLMI A 0 A_Jump(20,"Twiddle");
Goto Idle+1;
Twiddle:
#### # 2
{
A_SoundVolume(CHAN_6,Dampener.Active(self)?.1:1.);
player.SetPSprite(-2,ResolveState("FlameTwiddle"));
}
FLMT ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 2 A_SoundVolume(CHAN_6,Dampener.Active(self)?.1:1.);
FLT2 ABCDEF 2 A_SoundVolume(CHAN_6,Dampener.Active(self)?.1:1.);
Goto Idle+1;
Fire:
#### # 2
{
A_Overlay(-9999,"Null");
player.SetPSprite(-2,ResolveState("FlameFire"));
}
FLMF ABCDE 2;
FLMF F 0 A_BeginFlame();
Goto Hold;
Dummy2:
TNT1 A 1 A_FireFlame();
Wait; Wait;
OFLP B 1 A_JumpIf(!sting_flamet,"Spawn+1"); Hold:
FLMF FGHIJK 2 A_SoundVolume(CHAN_WEAPON,Dampener.Active(self)?.1:1.);
Loop;
Release:
#### # 2
{
A_Overlay(-9999,"Null");
player.SetPSprite(-2,ResolveState("FlameRelease"));
A_PlaySound("flamet/fireend",CHAN_WEAPON,Dampener.Active(self)?.1:1.);
A_ClearRefire();
}
FLMF MNOP 2;
Goto Idle;
AltFire:
#### # 2
{
A_Overlay(-9999,"Null");
player.SetPSprite(-2,ResolveState("FlameAltFire"));
invoker.bCharging = true;
}
FLMA ABCDE 2;
FLMA F 0 A_BeginCharge();
Goto AltHold;
Dummy3:
TNT1 A 1 A_ChargeUp();
Wait; Wait;
AltHold:
FLMA FIGHLKGJHLGFHJGILHFKGFKHIGKGHL 10;
Loop;
AltRelease:
FLMA M 0
{
A_FireNapalm();
player.SetPSprite(-2,ResolveState("FlameAltRelease"));
}
FLMA MNOPQRSTUVWX 2;
FLMA Y 0
{
if ( invoker.CheckAmmo(1,false,true) )
A_Refire("GotoAltHold");
}
FLMA Y 0 A_ClearRefire();
FLMA YZ[\] 2;
FLA2 ABCD 2;
Goto Idle;
GotoAltHold:
FLMA Y 0
{
player.SetPSprite(-2,ResolveState("FlameAltHold"));
}
Goto AltHold;
Deselect:
#### # 1
{
A_Overlay(-9999,"Null");
A_PlaySound("flamet/down",CHAN_6,Dampener.Active(self)?.1:1.);
player.SetPSprite(-2,ResolveState("FlameDeselect"));
}
FLMD ABCDEFHIJ 1;
FLMD J 1 A_Lower(int.max);
Wait;
FlameReady:
FLFS ABCD 2 Bright;
Goto FlameIdle;
FlameIdle:
FLFI ABCDEFG 12 Bright;
Loop;
FlameTwiddle:
#### # 2 Bright;
FLFT ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] 2 Bright;
FFT2 ABCDEF 2 Bright;
Goto FlameIdle;
FlameFire:
#### # 1 Bright;
FLFF ABCDE 2 Bright;
Goto FlameHold;
FlameHold:
FLFF FGHIJK 2 Bright;
Loop;
FlameRelease:
#### # 2 Bright;
FLFF MNOP 2 Bright;
Goto FlameIdle;
FlameAltFire:
#### # 2 Bright;
FLFA ABCDE 2 Bright;
Goto FlameAltHold;
FlameAltHold:
FLFA FIGHLKGJHLGFHJGILHFKGFKHIGKGHL 10 Bright;
Loop;
FlameAltRelease:
FLFA MNOPQRSTUVWXYZ[\] 2 Bright;
FFA2 ABCD 2 Bright;
Goto FlameIdle;
FlameDeselect:
#### # 1 Bright;
FLFD ABCD 2 Bright;
Stop;
} }
} }