Merge devel/2a9eb0e1b1d72fc76c6386bd05b62ec10df9762c

This commit is contained in:
Marisa the Magician 2019-01-24 22:42:35 +01:00
commit 31dc0db166
20 changed files with 99 additions and 65 deletions

View file

@ -559,7 +559,7 @@ HardwareShader PostProcess scene
Texture StaticTexture "textures/static1.png"
Uniform float Timer
}
SkyBox "BlueSky" fliptop
SkyBox "KGDaySky" fliptop
{
"graphics/SkySetB_front.png"
"graphics/SkySetB_right.png"

View file

@ -64,7 +64,7 @@ Model "UTHealthBox"
Model 0 "hboxbeta_d.3d"
// indices start at 1 for this mesh
SurfaceSkin 0 1 "jhboxbeta1.png"
SurfaceSkin 0 2 "fizzfull"
SurfaceSkin 0 2 "fizzside"
SurfaceSkin 0 3 "fizzfull"
Scale 0.08 0.08 0.096
ZOffset 4

View file

@ -35,7 +35,7 @@ Model "ShockRifleWave"
Path "models"
Model 0 "shockrwm_d.3d"
Skin 0 "shocktt1.png"
Scale 1.2 1.0 1.0
Scale 0.6 0.5 0.5
PitchOffset 90
FrameIndex SWAV A 0 0
@ -47,7 +47,7 @@ Model "SuperShockRifleWave"
Path "models"
Model 0 "shockrwm_d.3d"
Skin 0 "sshocktt1.png"
Scale 1.2 1.0 1.0
Scale 0.6 0.5 1.5
PitchOffset 90
FrameIndex SWAV A 0 0

View file

@ -7,12 +7,11 @@ vec4 ProcessTexel()
{
vec2 coord = vTexCoord.st;
vec2 dist = 2.0*texture(warptex,vTexCoord.st).xy-1.0;
dist.x *= abs(mod(dist.y+timer*3.34536,4)-2)-1;
coord.x += dist.x*0.12;
dist.y *= abs(mod(dist.x+timer*3.34536,4)-2)-1;
coord.y += dist.y*0.12;
dist = 2.0*texture(warptex,vTexCoord.st*2.0).xy-1.0;
dist.y *= abs(mod(dist.x+timer*5.45363,4)-2)-1;
coord.y -= dist.y*0.09;
coord.y = clamp(coord.y,0.0,1.0);
coord.x += timer*0.5346;
return getTexel(coord);
}

View file

@ -5,14 +5,12 @@ void main()
vec2 sz = textureSize(InputTexture,0);
vec2 px = 1.0/vec2(1920.0);
px.y *= sz.x/sz.y;
float cnt = 1.0;
for ( int j=-5; j<=5; j++ ) for ( int i=-5; i<=5; i++ )
for ( int j=-1; j<=1; j++ ) for ( int i=-1; i<=1; i++ )
{
nc = TexCoord+px*vec2(i,j);
tinted += texture(InputTexture,nc);
cnt += 1.0;
}
tinted /= cnt;
tinted /= 10.0;
vec2 coord = TexCoord;
coord *= 4.0;
coord.y *= px.x/px.y;

View file

@ -527,8 +527,8 @@ Class BioGel : Actor
Radius 3;
Height 3;
Scale 2;
Speed 18;
Gravity 0.5;
Speed 11;
Gravity 0.25;
PROJECTILE;
-NOGRAVITY;
+SKYEXPLODE;

View file

@ -111,7 +111,7 @@ Class UTRocket : Actor
DamageType 'RocketDeath';
Radius 2;
Height 2;
Speed 20;
Speed 15;
PROJECTILE;
+SKYEXPLODE;
+EXPLODEONWATER;
@ -145,21 +145,21 @@ Class UTRocket : Actor
int numpt = Random[Eightball](15,30);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](1,4);
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](1,3);
let s = Spawn("UTSmoke",pos);
s.vel = pvel;
}
numpt = Random[Eightball](10,20);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](2,8);
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](2,6);
let s = Spawn("UTSpark",pos);
s.vel = pvel;
}
numpt = Random[Eightball](35,70);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](4,36);
Vector3 pvel = (FRandom[Eightball](-1,1),FRandom[Eightball](-1,1),FRandom[Eightball](-1,1)).unit()*FRandom[Eightball](2,12);
let s = Spawn("UTChip",pos);
s.vel = pvel;
s.scale *= FRandom[Eightball](0.9,2.7);
@ -192,9 +192,9 @@ Class UTRocket : Actor
A_RocketSeek();
}
vel += invoker.Acceleration/TICRATE;
if ( vel.length() > 45. ) vel = Vel.unit()*45.;
if ( vel.length() > 30. ) vel = Vel.unit()*30.;
Vector3 dir = vel.unit();
if ( waterlevel <= 0 ) vel = dir*min(vel.length()+1,32);
if ( waterlevel <= 0 ) vel = dir*min(vel.length()+1,24);
angle = atan2(dir.y,dir.x);
pitch = asin(-dir.z);
for ( int i=0; i<3; i++ )
@ -228,7 +228,8 @@ Class UTGrenade : UTRocket
WallBounceFactor 0.75;
BounceFactor 0.75;
ReactionTime 85;
Speed 20;
Speed 15;
Gravity 0.35;
}
override void PostBeginPlay()
{
@ -309,7 +310,8 @@ Class UTRocketLauncher : UTWeapon
{
LockedTarget = null;
LockedOn = false;
Owner.A_PlaySound("utrl/seeklost",CHAN_WEAPON);
if ( Owner.player.ReadyWeapon == self )
Owner.A_PlaySound("utrl/seeklost",CHAN_WEAPON);
}
if ( LockedTarget ) crosshair = 99;
else crosshair = 0;
@ -368,7 +370,7 @@ Class UTRocketLauncher : UTWeapon
Vector3 dir = (x2+cos(a)*y2*s*0.004+sin(a)*z2*s*0.004).unit();
p = Spawn("UTGrenade",origin+cos(a)*y*s+sin(a)*z*s);
p.vel = x*(vel dot x)*0.4 + dir*p.speed*FRandom[Eightball](1.0,1.2);
p.vel.z += 6;
p.vel.z += 3.5;
p.target = self;
}
}

View file

@ -103,6 +103,7 @@ Class UTCasing : Actor
+USEBOUNCESTATE;
+INTERPOLATEANGLES;
Mass 1;
Gravity 0.35;
BounceType "Hexen";
WallBounceFactor 0.65;
BounceFactor 0.65;
@ -126,7 +127,7 @@ Class UTCasing : Actor
if ( deadtimer > 300 ) A_FadeOut(0.05);
return;
}
heat -= 0.02;
heat -= 0.05;
if ( heat <= 0 ) return;
let s = Spawn("UTSmallSmoke",pos);
s.alpha *= heat;
@ -376,7 +377,7 @@ Class Enforcer : UTWeapon
}
origin += x*8.0+ydir*y*6.0-z*2.0;
let c = Spawn("UTCasing",origin);
c.vel = x*FRandom[Junk](-2,2)+y*ydir*FRandom[Junk](3,6)+z*FRandom[Junk](3,5);
c.vel = x*FRandom[Junk](-1.5,1.5)+y*ydir*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )

View file

@ -163,7 +163,7 @@ Class FlakChunk : Actor
Obituary "%o was ripped to shreds by %k's Flak Cannon.";
Radius 2;
Height 2;
Speed 50;
Speed 32;
DamageFunction Random[Flak](15,20);
DamageType 'Shredded';
BounceType "Hexen";
@ -243,13 +243,16 @@ Class FlakChunk : Actor
}
else A_SprayDecal("WallCrack",-8);
A_Gravity();
gravity = 0.35;
invoker.rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
invoker.pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
invoker.yawvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
vel = (vel.unit()+(FRandom[Flak](-0.2,0.2),FRandom[Flak](-0.2,0.2),FRandom[Flak](-0.2,0.2))).unit()*vel.length();
// TODO chunks in vanilla have a special variation on the standard reflect formula that causes them to bounce differently when hitting a surface head-on
// (0.5 to 0.8 reduction perpendicular to the surface normal, to be specific)
// I have no idea how I'll even implement this reduction reliably
A_PlaySound("flak/bounce",volume:0.3);
A_AlertMonsters();
bBOUNCEAUTOOFFFLOORONLY = true;
if ( vel.length() < 5.0 ) ExplodeMissile();
}
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
@ -386,7 +389,8 @@ Class FlakSlug : Actor
DamageType 'FlakDeath';
Radius 2;
Height 2;
Speed 40;
Gravity 0.35;
Speed 20;
PROJECTILE;
-NOGRAVITY;
+SKYEXPLODE;
@ -398,7 +402,7 @@ Class FlakSlug : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
vel.z += 4;
vel.z += 3;
}
override void Tick()
{
@ -423,16 +427,26 @@ Class FlakSlug : Actor
double a, s;
[x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll);
Actor p;
Vector3 spawnofs;
if ( BlockingMobj ) spawnofs = level.Vec3Diff(pos,BlockingMobj.Vec3Offset(0,0,BlockingMobj.height/2)).unit()*8;
else if ( BlockingFloor ) spawnofs = BlockingFloor.floorplane.Normal*8;
else if ( BlockingCeiling ) spawnofs = BlockingCeiling.ceilingplane.Normal*8;
else if ( BlockingLine )
{
spawnofs = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit()*8;
if ( !BlockingLine.sidedef[1] || (CurSector == BlockingLine.frontsector) )
spawnofs *= -1;
}
for ( int i=0; i<5; i++ )
{
p = Spawn("FlakChunk",pos);
p = Spawn("FlakChunk",Vec3Offset(spawnofs.x,spawnofs.y,spawnofs.z));
p.bHITOWNER = true;
a = FRandom[Flak](0,360);
s = FRandom[Flak](0,0.2);
s = FRandom[Flak](0,0.1);
Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
p.angle = atan2(dir.y,dir.x);
p.pitch = -asin(dir.z);
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed*FRandom[Flak](0.5,1.5);
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Flak](-3,3));
p.target = target;
}
int numpt = Random[Flak](8,12);
@ -521,16 +535,25 @@ Class FlakCannon : UTWeapon
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-2,STYLE_Add);
[x, y, z] = dt_Matrix4.GetAxes(BulletSlope(),angle,roll);
Vector3 offsets[8]; // vanilla adds these to each chunk
offsets[0] = (0,0,0);
offsets[1] = -z;
offsets[2] = 2*y+z;
offsets[3] = -y;
offsets[4] = 2*y-z;
offsets[5] = (0,0,0);
offsets[6] = y-z;
offsets[7] = 2*y+z;
Actor p;
for ( int i=0; i<6; i++ )
for ( int i=0; i<8; i++ )
{
p = Spawn("FlakChunk",origin);
p = Spawn("FlakChunk",level.Vec3Offset(origin,offsets[i]));
a = FRandom[Flak](0,360);
s = FRandom[Flak](0,0.2);
s = FRandom[Flak](0,0.1);
Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
p.angle = atan2(dir.y,dir.x);
p.pitch = -asin(dir.z);
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+FRandom[Flak](-3,3));
p.target = self;
}
int numpt = Random[Flak](20,30);

View file

@ -151,7 +151,7 @@ Class Minigun : UTWeapon
t.pitch = asin(-dir.z);
MinigunTracer(t).dest = d.HitLocation;
}
for ( int i=0; i<4; i++ )
for ( int i=0; i<2; i++ )
{
let s = Spawn("UTViewSmoke",origin);
UTViewSmoke(s).ofs = (10,2,-2);
@ -162,7 +162,7 @@ Class Minigun : UTWeapon
}
origin += x*8.0+y*5.0-z*5.0;
let c = Spawn("UTCasing",origin);
c.vel = x*FRandom[Junk](-2,2)+y*FRandom[Junk](3,6)+z*FRandom[Junk](3,5);
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
c.Scale *= 0.5;
}

View file

@ -78,7 +78,7 @@ Class DamageAmplifier : Powerup
override void EndEffect()
{
Super.EndEffect();
PrintPickupMessage(true,"Damage Amplifier has worn off.");
if ( EffectTics <= 0 ) PrintPickupMessage(true,"Damage Amplifier has worn off.");
}
override bool isBlinking()
@ -217,7 +217,7 @@ Class PowerUTInvisibility : PowerInvisibility
override void EndEffect()
{
Super.EndEffect();
PrintPickupMessage(true,"Invisibility has worn off.");
if ( EffectTics <= 0 ) PrintPickupMessage(true,"Invisibility has worn off.");
}
}

View file

@ -170,7 +170,7 @@ Class PulseBall : Actor
+SKYEXPLODE;
+FORCEXYBILLBOARD;
Scale 0.19;
Speed 29;
Speed 22;
Radius 2;
Height 2;
}

View file

@ -56,7 +56,7 @@ Class Razor2 : Actor
{
Radius 2;
Height 2;
Speed 27;
Speed 25;
DamageFunction (Random[Ripper](20,25)*((DamageType=='Decapitated')?3:1.0));
DamageType 'Shredded';
Obituary "%k ripped a chunk of meat out of %o with the Ripper.";

View file

@ -934,7 +934,7 @@ Class SuperShockBall : Actor
Radius 2;
Height 2;
Scale 0.5;
Speed 25;
Speed 24;
PROJECTILE;
+FORCEXYBILLBOARD;
+SKYEXPLODE;

View file

@ -154,7 +154,7 @@ Class SniperRifle : UTWeapon
origin += x*8.0+y*6.0-z*9.0;
let c = Spawn("UTCasing",origin);
c.scale *= 1.25;
c.vel = x*FRandom[Junk](-2,2)+y*FRandom[Junk](3,6)+z*FRandom[Junk](3,5);
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )
{

View file

@ -121,7 +121,7 @@ Class TranslocatorModule : Actor
{
Radius 2;
Height 2;
Speed 25;
Speed 16;
PROJECTILE;
-NOGRAVITY;
+USEBOUNCESTATE;
@ -133,6 +133,7 @@ Class TranslocatorModule : Actor
BounceType "Hexen";
BounceFactor 0.3;
WallBounceFactor 0.3;
Gravity 0.35;
}
override void PostBeginPlay()

View file

@ -853,7 +853,7 @@ Class UTSpark : Actor
+DONTSPLASH;
BounceType "Doom";
BounceFactor 0.4;
Gravity 0.5;
Gravity 0.2;
Scale 0.05;
}
override void Tick()
@ -927,7 +927,7 @@ Class UTChip : Actor
+INTERPOLATEANGLES;
BounceType "Doom";
BounceFactor 0.3;
Gravity 0.7;
Gravity 0.35;
Scale 0.2;
}
override void PostBeginPlay()
@ -1539,6 +1539,17 @@ Class UTMainHandler : StaticEventHandler
override void WorldLoaded( WorldEvent e )
{
if ( gamestate != GS_LEVEL || e.IsSaveGame ) return;
// just replace the -noflat- with a better scaled version and change the sky
if ( !flak_doomtest )
{
if ( level.GetChecksum() ~== "FBC3B6622A8B74AE06DE01E70007AC33" )
{
TexMan.ReplaceTextures("-noflat-","DefTex",0);
TextureID skytx = TexMan.CheckForTexture("BlueSky",TexMan.Type_Any);
level.ChangeSky(skytx,skytx);
}
return;
}
// prettify Kinsie's test map for a more Unreal feel
if ( level.GetChecksum() ~== "FBC3B6622A8B74AE06DE01E70007AC33" )
{
@ -1549,7 +1560,7 @@ Class UTMainHandler : StaticEventHandler
return;
}
TextureID deftex = TexMan.CheckForTexture("-noflat-",TexMan.Type_Any);
TextureID skytx = TexMan.CheckForTexture("BlueSky",TexMan.Type_Any);
TextureID skytx = TexMan.CheckForTexture("KGDaySky",TexMan.Type_Any);
TextureID baseflor = TexMan.CheckForTexture("rClfFlr0",TexMan.Type_Any);
TextureID baseceil = TexMan.CheckForTexture("rClfBas0",TexMan.Type_Any);
TextureID basewall = TexMan.CheckForTexture("uAlnWl2b",TexMan.Type_Any);
@ -1558,7 +1569,7 @@ Class UTMainHandler : StaticEventHandler
level.ChangeSky(skytx,skytx);
for ( int i=0; i<level.sectors.size(); i++ )
{
level.sectors[i].lightlevel = 0;
level.sectors[i].lightlevel = min(level.sectors[i].lightlevel,64);
level.sectors[i].SetPlaneLight(0,0);
level.sectors[i].SetPlaneLight(1,0);
// open some ceilings

View file

@ -62,6 +62,7 @@ Class UTBloodDrop : Actor
Default
{
Scale 0.24;
Gravity 0.8;
Mass 1;
Radius 2;
Height 2;
@ -119,8 +120,8 @@ Class UTBloodSpurt : Actor
ang = angle+FRandom[Blood](-3,3)*str;
pt = pitch+FRandom[Blood](-3,3)*str;
Vector3 dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),-sin(pt));
d.vel = dir*str*FRandom[Blood](0.8,1.2);
d.vel.z += str*0.8;
d.vel = dir*str*FRandom[Blood](0.4,0.8);
d.vel.z += str*0.5;
d.scale *= str*0.15*FRandom[Blood](0.6,1.4);
}
Destroy();
@ -292,6 +293,7 @@ Class UTGib : Actor
BounceType "Hexen";
BounceFactor 0.8;
WallBounceFactor 0.8;
Gravity 0.6;
+ROLLSPRITE;
+ROLLCENTER;
+INTERPOLATEANGLES;

View file

@ -42,9 +42,6 @@ Class UTHud : BaseStatusBar
double CurX, CurY;
double FracTic;
// Ugh...
const TINTSTYLE = (1|2<<8|1<<16|12<<24);
override void Init()
{
Super.Init();
@ -211,7 +208,7 @@ Class UTHud : BaseStatusBar
if ( opacity == -1 ) opacity = self.opacity;
if ( opacity >= 16 ) Screen.DrawTexture(tx,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_FillColor,bgcolor);
double alpha = clamp(opacity/15.,0.0,1.0);
Screen.DrawTexture(tx,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_RenderStyle,TINTSTYLE,DTA_FillColor,(tint!="Black")?tint:tintcolor);
Screen.DrawTexture(tx,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_LegacyRenderStyle,STYLE_AddShaded,DTA_FillColor,(tint!="Black")?tint:tintcolor);
}
private void UTDrawPlainTex( TextureID tx, double sx = 1.0, int opacity = -1 )
{
@ -264,13 +261,13 @@ Class UTHud : BaseStatusBar
if ( value < 0 )
{
if ( opacity+7 > 15 ) Screen.DrawTexture(BigNum[11],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_FillColor,bgcolor);
Screen.DrawTexture(BigNum[11],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_RenderStyle,TINTSTYLE,DTA_FillColor,DrawColor);
Screen.DrawTexture(BigNum[11],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_LegacyRenderStyle,STYLE_AddShaded,DTA_FillColor,DrawColor);
CurX += step;
}
for ( int i=0; i<digits.length(); i++ )
{
if ( opacity+7 > 15 ) Screen.DrawTexture(BigNum[digits.CharCodeAt(i)-0x30],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_FillColor,bgcolor);
Screen.DrawTexture(BigNum[digits.CharCodeAt(i)-0x30],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_RenderStyle,TINTSTYLE,DTA_FillColor,DrawColor);
Screen.DrawTexture(BigNum[digits.CharCodeAt(i)-0x30],false,CurX/ss,CurY/ss,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_Alpha,alpha,DTA_LegacyRenderStyle,STYLE_AddShaded,DTA_FillColor,DrawColor);
CurX += ((i<digits.length()-1)&&(digits.CharAt(i+1)=="1"))?step*0.5:step;
}
}

View file

@ -246,7 +246,7 @@ Class WarShell : Actor
Obituary "%o was vaporized by %k's Redeemer!!";
Radius 2;
Height 2;
Speed 12;
Speed 6;
DamageType 'RedeemerDeath';
DamageFactor 1000;
PROJECTILE;
@ -282,9 +282,9 @@ Class WarShell : Actor
if ( waterlevel > 0 )
{
vel *= 0.98;
if ( vel.length() < 12 ) vel += vel.unit();
if ( vel.length() < 6 ) vel += vel.unit()*0.35;
}
else if ( vel.length() < 40 ) vel += vel.unit();
else if ( vel.length() < 20 ) vel += vel.unit()*0.35;
}
}
action void A_Trail()
@ -535,8 +535,8 @@ Class RedeemerHUD : HUDMessageBase
}
for ( int i=0; i<ta.Size(); i++ )
{
Screen.DrawTexture(mark,false,ta[i].vpos.x,ta[i].vpos.y,DTA_RenderStyle,(1|2<<8|1<<16));
Screen.DrawText(whfont,Font.CR_UNTRANSLATED,(ta[i].vpos.x-whfont.StringWidth(ta[i].diststr)/2)-12,ta[i].vpos.y+8,ta[i].diststr,DTA_RenderStyle,(1|2<<8|1<<16));
Screen.DrawTexture(mark,false,ta[i].vpos.x,ta[i].vpos.y,DTA_LegacyRenderStyle,STYLE_Add);
Screen.DrawText(whfont,Font.CR_UNTRANSLATED,(ta[i].vpos.x-whfont.StringWidth(ta[i].diststr)/2)-12,ta[i].vpos.y+8,ta[i].diststr,DTA_LegacyRenderStyle,STYLE_Add);
}
}
// reticle
@ -553,7 +553,7 @@ Class RedeemerHUD : HUDMessageBase
double rrot = -LagRoll2*2;
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(reticle1,false,sshape,DTA_RenderStyle,(1|2<<8|1<<16));
Screen.DrawShape(reticle1,false,sshape,DTA_LegacyRenderStyle,STYLE_Add);
sshape.Clear(Shape2D.C_Verts);
verts[0] = (-siz2.x,siz.y+siz2.y);
verts[1] = (siz2.x,siz.y+siz2.y);
@ -561,14 +561,14 @@ Class RedeemerHUD : HUDMessageBase
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.DrawShape(arrow,false,sshape,DTA_LegacyRenderStyle,STYLE_Add);
Screen.DrawTexture(reticle2,false,vs.x*0.5,vs.y*0.5,DTA_VirtualWidthF,vs.x,DTA_VirtualHeightF,vs.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add);
// faux assembly readout
int numreadouts = int(vs.y/128+2);
for ( int i=0; i<numreadouts; i++ )
{
int scroll = (gametic*5)%128;
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));
Screen.DrawTexture(readout,false,0,i*128-scroll,DTA_VirtualWidthF,vs.x,DTA_VirtualHeightF,vs.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add);
}
}
}