Corrected the spin behavior of the Redeemer Missile's outer reticle.
Added optional fancy screen shader to Redeemer.
This commit is contained in:
parent
f9629a70d2
commit
80ed7e0939
6 changed files with 65 additions and 15 deletions
|
|
@ -20,3 +20,4 @@ user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0)
|
||||||
user bool flak_footsteps = true;
|
user bool flak_footsteps = true;
|
||||||
server bool flak_translocator = false;
|
server bool flak_translocator = false;
|
||||||
user bool flak_noswitchdeemer = true; // don't switch to redeemer when out of ammo
|
user bool flak_noswitchdeemer = true; // don't switch to redeemer when out of ammo
|
||||||
|
user bool flak_deemershader = false;
|
||||||
|
|
|
||||||
|
|
@ -573,3 +573,10 @@ Object "UTGoldKey"
|
||||||
{
|
{
|
||||||
Frame "UKEY" { light "UTGoldKeyLight" }
|
Frame "UKEY" { light "UTGoldKeyLight" }
|
||||||
}
|
}
|
||||||
|
HardwareShader PostProcess scene
|
||||||
|
{
|
||||||
|
Name "RedeemerView"
|
||||||
|
Shader "shaders/glsl/RedeemerView.fp" 330
|
||||||
|
Texture StaticTexture "textures/static1.png"
|
||||||
|
Uniform float Timer
|
||||||
|
}
|
||||||
|
|
|
||||||
BIN
graphics/AroDup.png
Normal file
BIN
graphics/AroDup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 261 B |
|
|
@ -23,6 +23,7 @@ OptionMenu "UTOptionMenu"
|
||||||
Option "Enforcer Reloading", "flak_enforcerreload", "YesNo"
|
Option "Enforcer Reloading", "flak_enforcerreload", "YesNo"
|
||||||
Option "Pulsegun Reloading", "flak_pulsereload", "YesNo"
|
Option "Pulsegun Reloading", "flak_pulsereload", "YesNo"
|
||||||
Option "Redeemer Target Visuals", "flak_redeemerreadout", "YesNo"
|
Option "Redeemer Target Visuals", "flak_redeemerreadout", "YesNo"
|
||||||
|
Option "Redeemer View Shader", "flak_deemershader", "YesNo"
|
||||||
Option "No Redeemer Autoswitch", "flak_noswitchdeemer", "YesNo"
|
Option "No Redeemer Autoswitch", "flak_noswitchdeemer", "YesNo"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
Option "Enable Translocator", "flak_translocator", "YesNo"
|
Option "Enable Translocator", "flak_translocator", "YesNo"
|
||||||
|
|
|
||||||
24
shaders/glsl/RedeemerView.fp
Normal file
24
shaders/glsl/RedeemerView.fp
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 tinted = texture(InputTexture,TexCoord);
|
||||||
|
vec2 nc;
|
||||||
|
vec2 px = 1.0/textureSize(InputTexture,0);
|
||||||
|
float cnt = 1.0;
|
||||||
|
for ( int j=-5; j<=5; j++ ) for ( int i=-5; i<=5; i++ )
|
||||||
|
{
|
||||||
|
nc = TexCoord+px*vec2(i,j);
|
||||||
|
tinted += texture(InputTexture,nc);
|
||||||
|
cnt += 1.0;
|
||||||
|
}
|
||||||
|
tinted /= cnt;
|
||||||
|
vec2 coord = TexCoord;
|
||||||
|
coord *= 4.0;
|
||||||
|
coord.y *= px.x/px.y;
|
||||||
|
vec2 tc;
|
||||||
|
tc.x = coord.x*cos(Timer)-coord.y*sin(Timer);
|
||||||
|
tc.y = coord.x*sin(Timer)+coord.y*cos(Timer);
|
||||||
|
tinted = mix(tinted,texture(StaticTexture,tc),0.3);
|
||||||
|
tinted = pow(tinted,vec4(0.7,1.1,1.3,1.0));
|
||||||
|
tinted *= vec4(1.2,0.6,0.5,1.0);
|
||||||
|
FragColor = tinted;
|
||||||
|
}
|
||||||
|
|
@ -441,29 +441,30 @@ Class RedeemerHUD : HUDMessageBase
|
||||||
Actor Camera;
|
Actor Camera;
|
||||||
Vector3 ViewPos;
|
Vector3 ViewPos;
|
||||||
double ViewAngle, ViewPitch, ViewRoll, LagRoll, LagRoll2;
|
double ViewAngle, ViewPitch, ViewRoll, LagRoll, LagRoll2;
|
||||||
TextureID reticle1, reticle2, mark, readout;
|
TextureID reticle1, reticle2, arrow, mark, readout;
|
||||||
Font whfont;
|
Font whfont;
|
||||||
ThinkerIterator t;
|
ThinkerIterator t;
|
||||||
MidTracer tr;
|
MidTracer tr;
|
||||||
Array<TargetActor> ta;
|
Array<TargetActor> ta;
|
||||||
Shape2D rreticle;
|
Shape2D sshape, darrow;
|
||||||
|
|
||||||
RedeemerHUD Init()
|
RedeemerHUD Init()
|
||||||
{
|
{
|
||||||
reticle1 = TexMan.CheckForTexture("GuidedX1",TexMan.Type_Any);
|
reticle1 = TexMan.CheckForTexture("GuidedX1",TexMan.Type_Any);
|
||||||
reticle2 = TexMan.CheckForTexture("GuidedX2",TexMan.Type_Any);
|
reticle2 = TexMan.CheckForTexture("GuidedX2",TexMan.Type_Any);
|
||||||
|
arrow = TexMan.CheckForTexture("AroDup",TexMan.Type_Any);
|
||||||
mark = TexMan.CheckForTexture("Crosshr6",TexMan.Type_Any);
|
mark = TexMan.CheckForTexture("Crosshr6",TexMan.Type_Any);
|
||||||
readout = TexMan.CheckForTexture("Readout",TexMan.Type_Any);
|
readout = TexMan.CheckForTexture("Readout",TexMan.Type_Any);
|
||||||
whfont = Font.GetFont('WHFONT');
|
whfont = Font.GetFont('WHFONT');
|
||||||
t = ThinkerIterator.Create("Actor");
|
t = ThinkerIterator.Create("Actor");
|
||||||
tr = new("MidTracer");
|
tr = new("MidTracer");
|
||||||
rreticle = new("Shape2D");
|
sshape = new("Shape2D");
|
||||||
rreticle.PushCoord((0,0));
|
sshape.PushCoord((0,0));
|
||||||
rreticle.PushCoord((1,0));
|
sshape.PushCoord((1,0));
|
||||||
rreticle.PushCoord((0,1));
|
sshape.PushCoord((0,1));
|
||||||
rreticle.PushCoord((1,1));
|
sshape.PushCoord((1,1));
|
||||||
rreticle.PushTriangle(0,3,1);
|
sshape.PushTriangle(0,3,1);
|
||||||
rreticle.PushTriangle(0,2,3);
|
sshape.PushTriangle(0,2,3);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
override bool Tick()
|
override bool Tick()
|
||||||
|
|
@ -508,24 +509,34 @@ Class RedeemerHUD : HUDMessageBase
|
||||||
}
|
}
|
||||||
// reticle
|
// reticle
|
||||||
Vector2 vs = (640,640/Screen.GetAspectRatio());
|
Vector2 vs = (640,640/Screen.GetAspectRatio());
|
||||||
Vector2 mid, siz;
|
Vector2 mid, siz, siz2;
|
||||||
[mid, siz] = Screen.VirtualToRealCoords(vs*0.5,(128,128),vs,false,false);
|
[mid, siz] = Screen.VirtualToRealCoords(vs*0.5,(128,128),vs,false,false);
|
||||||
|
[mid, siz2] = Screen.VirtualToRealCoords(vs*0.5,(8,4),vs,false,false);
|
||||||
Vector2 verts[4];
|
Vector2 verts[4];
|
||||||
verts[0] = (-siz.x,-siz.y);
|
verts[0] = (-siz.x,-siz.y);
|
||||||
verts[1] = (siz.x,-siz.y);
|
verts[1] = (siz.x,-siz.y);
|
||||||
verts[2] = (-siz.x,siz.y);
|
verts[2] = (-siz.x,siz.y);
|
||||||
verts[3] = (siz.x,siz.y);
|
verts[3] = (siz.x,siz.y);
|
||||||
rreticle.Clear(Shape2D.C_Verts);
|
sshape.Clear(Shape2D.C_Verts);
|
||||||
|
double rrot = -LagRoll2*2;
|
||||||
for ( int i=0; i<4; i++ )
|
for ( int i=0; i<4; i++ )
|
||||||
rreticle.PushVertex(mid+(verts[i].x*cos(LagRoll2)-verts[i].y*sin(LagRoll2),verts[i].x*sin(LagRoll2)+verts[i].y*cos(LagRoll2)));
|
sshape.PushVertex(mid+(verts[i].x*cos(rrot)-verts[i].y*sin(rrot),verts[i].x*sin(rrot)+verts[i].y*cos(rrot)));
|
||||||
Screen.DrawShape(reticle1,false,rreticle,DTA_RenderStyle,(1|2<<8|1<<16));
|
Screen.DrawShape(reticle1,false,sshape,DTA_RenderStyle,(1|2<<8|1<<16));
|
||||||
|
sshape.Clear(Shape2D.C_Verts);
|
||||||
|
verts[0] = (-siz2.x,siz.y+siz2.y);
|
||||||
|
verts[1] = (siz2.x,siz.y+siz2.y);
|
||||||
|
verts[2] = (-siz2.x,siz.y+3*siz2.y);
|
||||||
|
verts[3] = (siz2.x,siz.y+3*siz2.y);
|
||||||
|
for ( int i=0; i<4; i++ )
|
||||||
|
sshape.PushVertex(mid+(verts[i].x*cos(rrot)-verts[i].y*sin(rrot),verts[i].x*sin(rrot)+verts[i].y*cos(rrot)));
|
||||||
|
Screen.DrawShape(arrow,false,sshape,DTA_RenderStyle,(1|2<<8|1<<16));
|
||||||
Screen.DrawTexture(reticle2,false,vs.x*0.5,vs.y*0.5,DTA_VirtualWidthF,vs.x,DTA_VirtualHeightF,vs.y,DTA_KeepRatio,true,DTA_RenderStyle,(1|2<<8|1<<16));
|
Screen.DrawTexture(reticle2,false,vs.x*0.5,vs.y*0.5,DTA_VirtualWidthF,vs.x,DTA_VirtualHeightF,vs.y,DTA_KeepRatio,true,DTA_RenderStyle,(1|2<<8|1<<16));
|
||||||
// faux assembly readout
|
// faux assembly readout
|
||||||
int numreadouts = Screen.GetHeight()/128+2;
|
int numreadouts = int(vs.y/128+2);
|
||||||
for ( int i=0; i<numreadouts; i++ )
|
for ( int i=0; i<numreadouts; i++ )
|
||||||
{
|
{
|
||||||
int scroll = (gametic*5)%128;
|
int scroll = (gametic*5)%128;
|
||||||
Screen.DrawTexture(readout,false,0,i*128-scroll,DTA_RenderStyle,(1|2<<8|1<<16));
|
Screen.DrawTexture(readout,false,0,i*128-scroll,DTA_VirtualWidthF,vs.x,DTA_VirtualHeightF,vs.y,DTA_KeepRatio,true,DTA_RenderStyle,(1|2<<8|1<<16));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -558,9 +569,11 @@ Class RedeemerHUDStatic : HUDMessageBase
|
||||||
Class RedeemerHUDHandler : EventHandler
|
Class RedeemerHUDHandler : EventHandler
|
||||||
{
|
{
|
||||||
ui RedeemerHUD rhud;
|
ui RedeemerHUD rhud;
|
||||||
|
transient ui CVar deemershader;
|
||||||
|
|
||||||
override void RenderOverlay( RenderEvent e )
|
override void RenderOverlay( RenderEvent e )
|
||||||
{
|
{
|
||||||
|
if ( !deemershader ) deemershader = CVar.GetCVar('flak_deemershader',players[consoleplayer]);
|
||||||
if ( e.Camera is 'GuidedWarShell' )
|
if ( e.Camera is 'GuidedWarShell' )
|
||||||
{
|
{
|
||||||
if ( !rhud )
|
if ( !rhud )
|
||||||
|
|
@ -573,9 +586,12 @@ Class RedeemerHUDHandler : EventHandler
|
||||||
rhud.ViewAngle = e.ViewAngle;
|
rhud.ViewAngle = e.ViewAngle;
|
||||||
rhud.ViewPitch = e.ViewPitch;
|
rhud.ViewPitch = e.ViewPitch;
|
||||||
rhud.ViewRoll = e.ViewRoll;
|
rhud.ViewRoll = e.ViewRoll;
|
||||||
|
Shader.SetEnabled(players[consoleplayer],"RedeemerView",deemershader.GetBool());
|
||||||
|
Shader.SetUniform1f(players[consoleplayer],"RedeemerView","Timer",gametic+e.fractic);
|
||||||
}
|
}
|
||||||
else if ( rhud )
|
else if ( rhud )
|
||||||
{
|
{
|
||||||
|
Shader.SetEnabled(players[consoleplayer],"RedeemerView",false);
|
||||||
StatusBar.DetachMessage(rhud);
|
StatusBar.DetachMessage(rhud);
|
||||||
rhud.Destroy();
|
rhud.Destroy();
|
||||||
StatusBar.AttachMessage(new("RedeemerHUDStatic").Init(),0,StatusBar.HUDMSGLayer_UnderHUD);
|
StatusBar.AttachMessage(new("RedeemerHUDStatic").Init(),0,StatusBar.HUDMSGLayer_UnderHUD);
|
||||||
|
|
@ -732,3 +748,4 @@ Class WarheadLauncher : UTWeapon replaces BFG9000
|
||||||
Wait;
|
Wait;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue