Stinger visual beautification completed.
Fixed sprite naming conflict with doom barrels. Added player portraits to class selection menu Removed leftover files.
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
|
@ -44,23 +44,48 @@ Model "StingerProjectile"
|
||||||
Scale 0.03 0.03 0.036
|
Scale 0.03 0.03 0.036
|
||||||
AngleOffset -90
|
AngleOffset -90
|
||||||
PITCHFROMMOMENTUM
|
PITCHFROMMOMENTUM
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
FrameIndex TPRJ A 0 0
|
FrameIndex TPRJ A 0 0
|
||||||
}
|
}
|
||||||
Model "StingerProjectile"
|
|
||||||
|
Model "StingerChunk"
|
||||||
{
|
{
|
||||||
Path "models"
|
Path "models"
|
||||||
Model 1 "burst_d.3d"
|
Model 0 "burstx_d.3d"
|
||||||
Skin 1 "Jburst1.png"
|
Skin 0 "JBurst1.png"
|
||||||
Scale 0.4 0.4 0.48
|
Scale 0.2 0.2 0.24
|
||||||
AngleOffset 90
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
FrameIndex TPRJ B 1 0
|
FrameIndex CHIP A 0 0
|
||||||
FrameIndex TPRJ C 1 1
|
FrameIndex CHIP B 0 1
|
||||||
FrameIndex TPRJ D 1 2
|
FrameIndex CHIP C 0 2
|
||||||
FrameIndex TPRJ E 1 3
|
FrameIndex CHIP D 0 3
|
||||||
FrameIndex TPRJ F 1 4
|
FrameIndex CHIP E 0 4
|
||||||
FrameIndex TPRJ G 1 5
|
FrameIndex CHIP F 0 5
|
||||||
|
FrameIndex CHIP G 0 6
|
||||||
|
FrameIndex CHIP H 0 7
|
||||||
|
FrameIndex CHIP I 0 8
|
||||||
|
}
|
||||||
|
Model "ViewStingerChunk"
|
||||||
|
{
|
||||||
|
Path "models"
|
||||||
|
Model 0 "burstx_d.3d"
|
||||||
|
Skin 0 "JBurst1.png"
|
||||||
|
Scale 0.08 0.08 0.096
|
||||||
|
USEACTORPITCH
|
||||||
|
USEACTORROLL
|
||||||
|
|
||||||
|
FrameIndex CHIP A 0 0
|
||||||
|
FrameIndex CHIP B 0 1
|
||||||
|
FrameIndex CHIP C 0 2
|
||||||
|
FrameIndex CHIP D 0 3
|
||||||
|
FrameIndex CHIP E 0 4
|
||||||
|
FrameIndex CHIP F 0 5
|
||||||
|
FrameIndex CHIP G 0 6
|
||||||
|
FrameIndex CHIP H 0 7
|
||||||
|
FrameIndex CHIP I 0 8
|
||||||
}
|
}
|
||||||
|
|
||||||
Model "Stinger"
|
Model "Stinger"
|
||||||
|
|
|
||||||
BIN
models/burstx_a.3d
Normal file
BIN
models/burstx_d.3d
Normal file
BIN
palettes/Blue4.pal
Normal file
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 3 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
|
@ -43,9 +43,107 @@ Class StingerBurstLight : PaletteLight
|
||||||
{
|
{
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Tag "Blue3";
|
Tag "Blue4";
|
||||||
Args 0,0,0,30;
|
Args 0,0,0,30;
|
||||||
ReactionTime 10;
|
ReactionTime 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class StingerChunk : Actor
|
||||||
|
{
|
||||||
|
int deadtimer;
|
||||||
|
double rollvel, anglevel, pitchvel;
|
||||||
|
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
Radius 2;
|
||||||
|
Height 2;
|
||||||
|
+NOBLOCKMAP;
|
||||||
|
+MISSILE;
|
||||||
|
+MOVEWITHSECTOR;
|
||||||
|
+THRUACTORS;
|
||||||
|
+NOTELEPORT;
|
||||||
|
+DONTSPLASH;
|
||||||
|
+INTERPOLATEANGLES;
|
||||||
|
BounceType "Doom";
|
||||||
|
BounceFactor 0.4;
|
||||||
|
Gravity 0.35;
|
||||||
|
}
|
||||||
|
override void PostBeginPlay()
|
||||||
|
{
|
||||||
|
Super.PostBeginPlay();
|
||||||
|
deadtimer = 0;
|
||||||
|
anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
rollvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
frame = Random[Junk](0,8);
|
||||||
|
scale *= Frandom[Junk](0.4,0.8);
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Super.Tick();
|
||||||
|
if ( isFrozen() ) return;
|
||||||
|
if ( InStateSequence(CurState,ResolveState("Death")) )
|
||||||
|
{
|
||||||
|
deadtimer++;
|
||||||
|
if ( deadtimer > 60 ) A_FadeOut(0.05);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
States
|
||||||
|
{
|
||||||
|
Spawn:
|
||||||
|
CHIP # 1
|
||||||
|
{
|
||||||
|
angle += anglevel;
|
||||||
|
pitch += pitchvel;
|
||||||
|
roll += rollvel;
|
||||||
|
}
|
||||||
|
Loop;
|
||||||
|
Bounce:
|
||||||
|
CHIP # 0
|
||||||
|
{
|
||||||
|
anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
rollvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
|
||||||
|
}
|
||||||
|
Goto Spawn;
|
||||||
|
Death:
|
||||||
|
CHIP # -1;
|
||||||
|
Stop;
|
||||||
|
Dummy:
|
||||||
|
CHIP ABCDEFGHI -1;
|
||||||
|
Stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Class ViewStingerChunk : StingerChunk
|
||||||
|
{
|
||||||
|
Vector3 ofs, vvel;
|
||||||
|
Default
|
||||||
|
{
|
||||||
|
+NOCLIP;
|
||||||
|
+NOGRAVITY;
|
||||||
|
-MISSILE;
|
||||||
|
BounceType "None";
|
||||||
|
}
|
||||||
|
override void Tick()
|
||||||
|
{
|
||||||
|
Actor.Tick();
|
||||||
|
if ( !target || !target.player )
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector3 x, y, z;
|
||||||
|
[x, y, z] = dt_CoordUtil.GetAxes(target.pitch,target.angle,target.roll);
|
||||||
|
Vector3 origin = x*ofs.x+y*ofs.y+z*ofs.z+(0,0,target.player.viewz);
|
||||||
|
SetOrigin(target.Vec2OffsetZ(origin.x,origin.y,origin.z),true);
|
||||||
|
bInvisible = (players[consoleplayer].camera != target);
|
||||||
|
if ( isFrozen() ) return;
|
||||||
|
ofs += vvel;
|
||||||
|
scale *= 0.75;
|
||||||
|
if ( scale.x <= 0.01 ) Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,6 +170,35 @@ Class StingerProjectile : Actor
|
||||||
}
|
}
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
action void A_StingerHit()
|
||||||
|
{
|
||||||
|
if ( !Random[Stinger](0,2) ) A_PlaySound("stinger/hit2",CHAN_BODY,0.5,pitch:FRandom[Stinger](0.5,1.5));
|
||||||
|
else A_PlaySound("stinger/hit",CHAN_BODY,0.6);
|
||||||
|
A_SprayDecal("WallCrack",20);
|
||||||
|
A_AlertMonsters();
|
||||||
|
Spawn("StingerBurstLight",pos);
|
||||||
|
double ang, pt;
|
||||||
|
int numpt = Random[Stinger](4,8);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
pt = FRandom[Stinger](-90,90);
|
||||||
|
let c = Spawn("StingerChunk",pos);
|
||||||
|
c.angle = ang;
|
||||||
|
c.pitch = pt;
|
||||||
|
c.vel = (cos(ang)*cos(pt),sin(ang)*cos(pt),-sin(pt))*FRandom[Stinger](3,9);
|
||||||
|
}
|
||||||
|
numpt = Random[Stinger](6,12);
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
pt = FRandom[Stinger](-90,90);
|
||||||
|
let c = Spawn("UTSmoke",pos);
|
||||||
|
c.vel = (cos(ang)*cos(pt),sin(ang)*cos(pt),-sin(pt))*FRandom[Stinger](0.3,0.8);
|
||||||
|
c.SetShade(Color(1,3,4)*Random[Stinger](48,63));
|
||||||
|
c.alpha *= 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
@ -79,14 +206,7 @@ Class StingerProjectile : Actor
|
||||||
Stop;
|
Stop;
|
||||||
Death:
|
Death:
|
||||||
Crash:
|
Crash:
|
||||||
TNT1 A 0
|
TNT1 A 1 A_StingerHit();
|
||||||
{
|
|
||||||
if ( !Random[Stinger](0,2) ) A_PlaySound("stinger/hit2",CHAN_BODY,0.5,pitch:FRandom[Stinger](0.5,1.5));
|
|
||||||
else A_PlaySound("stinger/hit",CHAN_BODY,0.6);
|
|
||||||
A_AlertMonsters();
|
|
||||||
Spawn("StingerBurstLight",pos);
|
|
||||||
}
|
|
||||||
TPRJ BCDEFG 2 Bright;
|
|
||||||
Stop;
|
Stop;
|
||||||
XDeath:
|
XDeath:
|
||||||
TNT1 A 1;
|
TNT1 A 1;
|
||||||
|
|
@ -145,12 +265,34 @@ Class Stinger : UnrealWeapon
|
||||||
A_QuakeEx(1,1,1,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
A_QuakeEx(1,1,1,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||||
Vector3 x, y, z;
|
Vector3 x, y, z;
|
||||||
[x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll);
|
[x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll);
|
||||||
Vector3 origin = (pos.x,pos.y,player.viewz)+5.0*x+8.0*y-8.0*z;
|
Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+5.0*x+8.0*y-8.0*z;
|
||||||
Actor p = Spawn("StingerProjectile",origin);
|
Actor p = Spawn("StingerProjectile",origin);
|
||||||
p.angle = angle;
|
p.angle = angle;
|
||||||
p.pitch = BulletSlope();
|
p.pitch = BulletSlope();
|
||||||
|
p.roll = FRandom[Stinger](0,360);
|
||||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
p.target = self;
|
p.target = self;
|
||||||
|
int numpt = Random[Stinger](5,9);
|
||||||
|
double ang;
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
let s = Spawn("ViewStingerChunk",origin);
|
||||||
|
ViewStingerChunk(s).ofs = (8,2,-2);
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
ViewStingerChunk(s).vvel = (FRandom[Stinger](0.2,1.2),0,0)+(0,cos(ang),sin(ang))*FRandom[Stinger](0.3,0.9);
|
||||||
|
s.target = self;
|
||||||
|
}
|
||||||
|
for ( int i=0; i<12; i++ )
|
||||||
|
{
|
||||||
|
let s = Spawn("UTViewSmoke",origin);
|
||||||
|
UTViewSmoke(s).ofs = (16,4,-4);
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
UTViewSmoke(s).vvel = (FRandom[Stinger](0,0.4),0,0)+(0,cos(ang),sin(ang))*FRandom[Stinger](0.2,0.5);
|
||||||
|
s.target = self;
|
||||||
|
s.scale *= 1.5;
|
||||||
|
s.alpha *= 0.3;
|
||||||
|
s.SetShade(Color(1,3,4)*Random[Stinger](31,63));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
action void A_StingerAltFire()
|
action void A_StingerAltFire()
|
||||||
{
|
{
|
||||||
|
|
@ -183,8 +325,30 @@ Class Stinger : UnrealWeapon
|
||||||
p = Spawn("StingerProjectile",origin);
|
p = Spawn("StingerProjectile",origin);
|
||||||
p.angle = atan2(dir.y,dir.x);
|
p.angle = atan2(dir.y,dir.x);
|
||||||
p.pitch = asin(-dir.z);
|
p.pitch = asin(-dir.z);
|
||||||
|
p.roll = FRandom[Stinger](0,360);
|
||||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||||
p.target = self;
|
p.target = self;
|
||||||
|
int numpt = Random[Stinger](5,9);
|
||||||
|
double ang;
|
||||||
|
for ( int i=0; i<numpt; i++ )
|
||||||
|
{
|
||||||
|
let s = Spawn("ViewStingerChunk",origin);
|
||||||
|
ViewStingerChunk(s).ofs = (8,2,-2);
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
ViewStingerChunk(s).vvel = (FRandom[Stinger](0.2,1.2),0,0)+(0,cos(ang),sin(ang))*FRandom[Stinger](0.3,0.9);
|
||||||
|
s.target = self;
|
||||||
|
}
|
||||||
|
for ( int i=0; i<12; i++ )
|
||||||
|
{
|
||||||
|
let s = Spawn("UTViewSmoke",origin);
|
||||||
|
UTViewSmoke(s).ofs = (16,4,-4);
|
||||||
|
ang = FRandom[Stinger](0,360);
|
||||||
|
UTViewSmoke(s).vvel = (FRandom[Stinger](0,0.4),0,0)+(0,cos(ang),sin(ang))*FRandom[Stinger](0.2,0.5);
|
||||||
|
s.target = self;
|
||||||
|
s.scale *= 1.5;
|
||||||
|
s.alpha *= 0.3;
|
||||||
|
s.SetShade(Color(1,3,4)*Random[Stinger](48,63));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
|
||||||
|
|
@ -330,7 +330,6 @@ Class UPlayerFemale1 : UPlayerFemale
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Player.DisplayName "$N_FEMALE1";
|
Player.DisplayName "$N_FEMALE1";
|
||||||
Player.Portrait "";
|
|
||||||
UTPlayer.VoiceType VOICE_FemaleTwo;
|
UTPlayer.VoiceType VOICE_FemaleTwo;
|
||||||
-NOMENU;
|
-NOMENU;
|
||||||
}
|
}
|
||||||
|
|
@ -347,7 +346,6 @@ Class UPlayerFemale2 : UPlayerFemale
|
||||||
{
|
{
|
||||||
Player.SoundClass "ufemale";
|
Player.SoundClass "ufemale";
|
||||||
Player.DisplayName "$N_FEMALE2";
|
Player.DisplayName "$N_FEMALE2";
|
||||||
Player.Portrait "";
|
|
||||||
-NOMENU;
|
-NOMENU;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
@ -472,7 +470,6 @@ Class UPlayerMale1 : UPlayerMale
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Player.DisplayName "$N_MALE1";
|
Player.DisplayName "$N_MALE1";
|
||||||
Player.Portrait "";
|
|
||||||
-NOMENU;
|
-NOMENU;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
@ -488,7 +485,6 @@ Class UPlayerMale2 : UPlayerMale
|
||||||
{
|
{
|
||||||
Player.SoundClass "umale2";
|
Player.SoundClass "umale2";
|
||||||
Player.DisplayName "$N_MALE2";
|
Player.DisplayName "$N_MALE2";
|
||||||
Player.Portrait "";
|
|
||||||
-NOMENU;
|
-NOMENU;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
@ -504,7 +500,6 @@ Class UPlayerMale3 : UPlayerMale
|
||||||
{
|
{
|
||||||
Player.SoundClass "umale3";
|
Player.SoundClass "umale3";
|
||||||
Player.DisplayName "$N_MALE3";
|
Player.DisplayName "$N_MALE3";
|
||||||
Player.Portrait "";
|
|
||||||
UTPlayer.VoiceType VOICE_MaleTwo;
|
UTPlayer.VoiceType VOICE_MaleTwo;
|
||||||
-NOMENU;
|
-NOMENU;
|
||||||
}
|
}
|
||||||
|
|
|
||||||