A couple more things, including an ambient glow shader effect, some more item replacements, and menu options.
Damage Amplifier has been implemented. Armor items are being worked on. Powerups will come later, then I'll continue doing more weapons.
This commit is contained in:
parent
bcab8e79ae
commit
5248ac8fd6
108 changed files with 920 additions and 175 deletions
|
|
@ -201,7 +201,7 @@ Class WarShell : Actor
|
|||
Obituary "%o was vaporized by %k's Redeemer!!";
|
||||
Radius 4;
|
||||
Height 4;
|
||||
Speed 5;
|
||||
Speed 2;
|
||||
DamageType 'RedeemerDeath';
|
||||
PROJECTILE;
|
||||
+FORCEXYBILLBOARD;
|
||||
|
|
@ -228,17 +228,30 @@ Class WarShell : Actor
|
|||
{
|
||||
Super.Tick();
|
||||
if ( globalfreeze || level.frozen ) return;
|
||||
if ( vel.length() < 10 ) vel *= 1.1;
|
||||
if ( !bMISSILE ) return;
|
||||
if ( vel.length() > 0 )
|
||||
{
|
||||
if ( waterlevel > 0 )
|
||||
{
|
||||
vel *= 0.98;
|
||||
if ( vel.length() < 5 ) vel += vel.unit()*0.5;
|
||||
}
|
||||
else if ( vel.length() < 10 ) vel += vel.unit()*0.5;
|
||||
}
|
||||
}
|
||||
action void A_Trail()
|
||||
{
|
||||
Vector3 taildir = -(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||
if ( waterlevel > 0 )
|
||||
{
|
||||
for ( int i=0; i<8; i++ )
|
||||
A_SpawnParticle("6060FF",0,Random[Warhead](10,30),FRandom[Warhead](2,4),0,taildir.x*32,taildir.y*32,taildir.z*32,taildir.x*2+FRandom[Warhead](-.5,.5),taildir.y*2+FRandom[Warhead](-.5,.5),taildir.z*2+FRandom[Warhead](-.5,.5),accelz:0.2,fadestepf:0);
|
||||
return;
|
||||
}
|
||||
for ( int i=0; i<8; i++ )
|
||||
A_SpawnParticle("404040",0,20,2,0,taildir.x*32,taildir.y*32,taildir.z*32,taildir.x*2+FRandom[Warhead](-.5,.5),taildir.y*2+FRandom[Warhead](-.5,.5),taildir.z*2+FRandom[Warhead](-.5,.5),accelz:0.1,sizestep:1);
|
||||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
A_SpawnParticle("FFA020",SPF_FULLBRIGHT,10,6,0,taildir.x*35+FRandom[Warhead](-1,1),taildir.y*35+FRandom[Warhead](-1,1),taildir.z*35+FRandom[Warhead](-1,1),taildir.x*4+FRandom[Warhead](-.25,.25),taildir.y*4+FRandom[Warhead](-.25,.25),taildir.z*4+FRandom[Warhead](-.25,.25));
|
||||
}
|
||||
}
|
||||
action void A_Vaporize()
|
||||
{
|
||||
|
|
@ -328,11 +341,12 @@ Class GuidedWarShell : WarShell
|
|||
A_SetPitch(destpitch,SPF_INTERPOLATE);
|
||||
A_SetRoll(destroll,SPF_INTERPOLATE);
|
||||
vel = vel.length()*(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||
if ( vel.length() < 10 )
|
||||
if ( waterlevel > 0 )
|
||||
{
|
||||
Vector3 dir = vel.unit();
|
||||
vel += dir*1;
|
||||
vel *= 0.98;
|
||||
if ( vel.length() < 5 ) vel += vel.unit()*0.5;
|
||||
}
|
||||
else if ( vel.length() < 10 ) vel += vel.unit()*0.5;
|
||||
}
|
||||
lagangle2 = lagangle2*0.95+lagangle*0.05;
|
||||
lagpitch2 = lagpitch2*0.95+lagpitch*0.05;
|
||||
|
|
@ -394,21 +408,24 @@ Class RedeemerHUD : HUDMessageBase
|
|||
if ( visibility != StatusBar.HUDMSGLayer_UnderHUD ) return;
|
||||
Screen.Dim("Red",0.5,0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
// shootable targetting
|
||||
t.Reinit();
|
||||
Actor a;
|
||||
Vector3 vdir = (cos(ViewAngle)*cos(ViewPitch),sin(ViewAngle)*cos(ViewPitch),-sin(ViewPitch));
|
||||
while ( a = Actor(t.Next()) )
|
||||
if ( CVar.GetCVar('flak_redeemerreadout',players[consoleplayer]).GetBool() )
|
||||
{
|
||||
Vector3 tdir = Level.Vec3Diff(ViewPos,a.Pos+(0,0,a.Height*0.5));
|
||||
if ( !a.bSHOOTABLE || (a.Health <= 0) || ((Camera is 'GuidedWarShell') && (a == GuidedWarShell(Camera).b)) || (tdir.length() > 2000) || (acos(tdir.unit() dot vdir) > players[consoleplayer].FOV) || tr.Trace(ViewPos,Camera.CurSector,tdir.unit(),tdir.length(),0) ) continue;
|
||||
Vector3 wpos = ViewPos+tdir;
|
||||
Vector3 spos = mkCoordUtil.WorldToScreen(wpos,ViewPos,ViewPitch,ViewAngle,ViewRoll,players[consoleplayer].FOV);
|
||||
if ( spos.z > 1.0 ) continue;
|
||||
Vector2 vpos = mkCoordUtil.ToViewport(spos);
|
||||
Screen.DrawTexture(mark,false,vpos.x,vpos.y);
|
||||
String diststr = String.Format("%f",tdir.length());
|
||||
diststr.Replace(".","");
|
||||
Screen.DrawText(whfont,Font.CR_UNTRANSLATED,(vpos.x-whfont.StringWidth(diststr)/2)-12,vpos.y+8,diststr);
|
||||
t.Reinit();
|
||||
Actor a;
|
||||
Vector3 vdir = (cos(ViewAngle)*cos(ViewPitch),sin(ViewAngle)*cos(ViewPitch),-sin(ViewPitch));
|
||||
while ( a = Actor(t.Next()) )
|
||||
{
|
||||
Vector3 tdir = Level.Vec3Diff(ViewPos,a.Pos+(0,0,a.Height*0.5));
|
||||
if ( !a.bSHOOTABLE || (a.Health <= 0) || ((Camera is 'GuidedWarShell') && (a == GuidedWarShell(Camera).b)) || (tdir.length() > 2000) || (acos(tdir.unit() dot vdir) > players[consoleplayer].FOV) || tr.Trace(ViewPos,Camera.CurSector,tdir.unit(),tdir.length(),0) ) continue;
|
||||
Vector3 wpos = ViewPos+tdir;
|
||||
Vector3 spos = mkCoordUtil.WorldToScreen(wpos,ViewPos,ViewPitch,ViewAngle,ViewRoll,players[consoleplayer].FOV);
|
||||
if ( spos.z > 1.0 ) continue;
|
||||
Vector2 vpos = mkCoordUtil.ToViewport(spos);
|
||||
Screen.DrawTexture(mark,false,vpos.x,vpos.y);
|
||||
String diststr = String.Format("%f",tdir.length());
|
||||
diststr.Replace(".","");
|
||||
Screen.DrawText(whfont,Font.CR_UNTRANSLATED,(vpos.x-whfont.StringWidth(diststr)/2)-12,vpos.y+8,diststr);
|
||||
}
|
||||
}
|
||||
// other stuff
|
||||
Screen.DrawTexture(reticle,false,320,240,DTA_VirtualWidth,640,DTA_VirtualHeight,480);
|
||||
|
|
@ -484,6 +501,7 @@ Class WarheadLauncher : UTWeapon replaces BFG9000
|
|||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
||||
invoker.FireEffect();
|
||||
A_AlertMonsters();
|
||||
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||
Vector3 x, y, z;
|
||||
|
|
@ -518,6 +536,7 @@ Class WarheadLauncher : UTWeapon replaces BFG9000
|
|||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
A_PlaySound("warhead/fire",CHAN_WEAPON);
|
||||
invoker.FireEffect();
|
||||
A_AlertMonsters();
|
||||
A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
|
||||
Vector3 x, y, z;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue