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" Texture StaticTexture "textures/static1.png"
Uniform float Timer Uniform float Timer
} }
SkyBox "BlueSky" fliptop SkyBox "KGDaySky" fliptop
{ {
"graphics/SkySetB_front.png" "graphics/SkySetB_front.png"
"graphics/SkySetB_right.png" "graphics/SkySetB_right.png"

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -111,7 +111,7 @@ Class UTRocket : Actor
DamageType 'RocketDeath'; DamageType 'RocketDeath';
Radius 2; Radius 2;
Height 2; Height 2;
Speed 20; Speed 15;
PROJECTILE; PROJECTILE;
+SKYEXPLODE; +SKYEXPLODE;
+EXPLODEONWATER; +EXPLODEONWATER;
@ -145,21 +145,21 @@ Class UTRocket : Actor
int numpt = Random[Eightball](15,30); int numpt = Random[Eightball](15,30);
for ( int i=0; i<numpt; i++ ) 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); let s = Spawn("UTSmoke",pos);
s.vel = pvel; s.vel = pvel;
} }
numpt = Random[Eightball](10,20); numpt = Random[Eightball](10,20);
for ( int i=0; i<numpt; i++ ) 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); let s = Spawn("UTSpark",pos);
s.vel = pvel; s.vel = pvel;
} }
numpt = Random[Eightball](35,70); numpt = Random[Eightball](35,70);
for ( int i=0; i<numpt; i++ ) 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); let s = Spawn("UTChip",pos);
s.vel = pvel; s.vel = pvel;
s.scale *= FRandom[Eightball](0.9,2.7); s.scale *= FRandom[Eightball](0.9,2.7);
@ -192,9 +192,9 @@ Class UTRocket : Actor
A_RocketSeek(); A_RocketSeek();
} }
vel += invoker.Acceleration/TICRATE; vel += invoker.Acceleration/TICRATE;
if ( vel.length() > 45. ) vel = Vel.unit()*45.; if ( vel.length() > 30. ) vel = Vel.unit()*30.;
Vector3 dir = vel.unit(); 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); angle = atan2(dir.y,dir.x);
pitch = asin(-dir.z); pitch = asin(-dir.z);
for ( int i=0; i<3; i++ ) for ( int i=0; i<3; i++ )
@ -228,7 +228,8 @@ Class UTGrenade : UTRocket
WallBounceFactor 0.75; WallBounceFactor 0.75;
BounceFactor 0.75; BounceFactor 0.75;
ReactionTime 85; ReactionTime 85;
Speed 20; Speed 15;
Gravity 0.35;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {
@ -309,7 +310,8 @@ Class UTRocketLauncher : UTWeapon
{ {
LockedTarget = null; LockedTarget = null;
LockedOn = false; 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; if ( LockedTarget ) crosshair = 99;
else crosshair = 0; 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(); 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 = 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 = 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; p.target = self;
} }
} }

View file

@ -103,6 +103,7 @@ Class UTCasing : Actor
+USEBOUNCESTATE; +USEBOUNCESTATE;
+INTERPOLATEANGLES; +INTERPOLATEANGLES;
Mass 1; Mass 1;
Gravity 0.35;
BounceType "Hexen"; BounceType "Hexen";
WallBounceFactor 0.65; WallBounceFactor 0.65;
BounceFactor 0.65; BounceFactor 0.65;
@ -126,7 +127,7 @@ Class UTCasing : Actor
if ( deadtimer > 300 ) A_FadeOut(0.05); if ( deadtimer > 300 ) A_FadeOut(0.05);
return; return;
} }
heat -= 0.02; heat -= 0.05;
if ( heat <= 0 ) return; if ( heat <= 0 ) return;
let s = Spawn("UTSmallSmoke",pos); let s = Spawn("UTSmallSmoke",pos);
s.alpha *= heat; s.alpha *= heat;
@ -376,7 +377,7 @@ Class Enforcer : UTWeapon
} }
origin += x*8.0+ydir*y*6.0-z*2.0; origin += x*8.0+ydir*y*6.0-z*2.0;
let c = Spawn("UTCasing",origin); 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 ) 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."; Obituary "%o was ripped to shreds by %k's Flak Cannon.";
Radius 2; Radius 2;
Height 2; Height 2;
Speed 50; Speed 32;
DamageFunction Random[Flak](15,20); DamageFunction Random[Flak](15,20);
DamageType 'Shredded'; DamageType 'Shredded';
BounceType "Hexen"; BounceType "Hexen";
@ -243,13 +243,16 @@ Class FlakChunk : Actor
} }
else A_SprayDecal("WallCrack",-8); else A_SprayDecal("WallCrack",-8);
A_Gravity(); A_Gravity();
gravity = 0.35;
invoker.rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed); 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.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); 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(); 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_PlaySound("flak/bounce",volume:0.3);
A_AlertMonsters(); A_AlertMonsters();
bBOUNCEAUTOOFFFLOORONLY = true;
if ( vel.length() < 5.0 ) ExplodeMissile(); if ( vel.length() < 5.0 ) ExplodeMissile();
} }
override int DoSpecialDamage( Actor target, int damage, Name damagetype ) override int DoSpecialDamage( Actor target, int damage, Name damagetype )
@ -386,7 +389,8 @@ Class FlakSlug : Actor
DamageType 'FlakDeath'; DamageType 'FlakDeath';
Radius 2; Radius 2;
Height 2; Height 2;
Speed 40; Gravity 0.35;
Speed 20;
PROJECTILE; PROJECTILE;
-NOGRAVITY; -NOGRAVITY;
+SKYEXPLODE; +SKYEXPLODE;
@ -398,7 +402,7 @@ Class FlakSlug : Actor
override void PostBeginPlay() override void PostBeginPlay()
{ {
Super.PostBeginPlay(); Super.PostBeginPlay();
vel.z += 4; vel.z += 3;
} }
override void Tick() override void Tick()
{ {
@ -423,16 +427,26 @@ Class FlakSlug : Actor
double a, s; double a, s;
[x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll); [x, y, z] = dt_Matrix4.GetAxes(pitch,angle,roll);
Actor p; 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++ ) for ( int i=0; i<5; i++ )
{ {
p = Spawn("FlakChunk",pos); p = Spawn("FlakChunk",Vec3Offset(spawnofs.x,spawnofs.y,spawnofs.z));
p.bHITOWNER = true; p.bHITOWNER = true;
a = FRandom[Flak](0,360); 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(); Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
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.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; p.target = target;
} }
int numpt = Random[Flak](8,12); int numpt = Random[Flak](8,12);
@ -521,16 +535,25 @@ Class FlakCannon : UTWeapon
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-2,STYLE_Add); A_OverlayRenderstyle(-2,STYLE_Add);
[x, y, z] = dt_Matrix4.GetAxes(BulletSlope(),angle,roll); [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; 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); 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(); Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
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.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; p.target = self;
} }
int numpt = Random[Flak](20,30); int numpt = Random[Flak](20,30);

View file

@ -151,7 +151,7 @@ Class Minigun : UTWeapon
t.pitch = asin(-dir.z); t.pitch = asin(-dir.z);
MinigunTracer(t).dest = d.HitLocation; MinigunTracer(t).dest = d.HitLocation;
} }
for ( int i=0; i<4; i++ ) for ( int i=0; i<2; i++ )
{ {
let s = Spawn("UTViewSmoke",origin); let s = Spawn("UTViewSmoke",origin);
UTViewSmoke(s).ofs = (10,2,-2); UTViewSmoke(s).ofs = (10,2,-2);
@ -162,7 +162,7 @@ Class Minigun : UTWeapon
} }
origin += x*8.0+y*5.0-z*5.0; origin += x*8.0+y*5.0-z*5.0;
let c = Spawn("UTCasing",origin); 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; c.Scale *= 0.5;
} }

View file

@ -78,7 +78,7 @@ Class DamageAmplifier : Powerup
override void EndEffect() override void EndEffect()
{ {
Super.EndEffect(); Super.EndEffect();
PrintPickupMessage(true,"Damage Amplifier has worn off."); if ( EffectTics <= 0 ) PrintPickupMessage(true,"Damage Amplifier has worn off.");
} }
override bool isBlinking() override bool isBlinking()
@ -217,7 +217,7 @@ Class PowerUTInvisibility : PowerInvisibility
override void EndEffect() override void EndEffect()
{ {
Super.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; +SKYEXPLODE;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
Scale 0.19; Scale 0.19;
Speed 29; Speed 22;
Radius 2; Radius 2;
Height 2; Height 2;
} }

View file

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

View file

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

View file

@ -154,7 +154,7 @@ Class SniperRifle : UTWeapon
origin += x*8.0+y*6.0-z*9.0; origin += x*8.0+y*6.0-z*9.0;
let c = Spawn("UTCasing",origin); let c = Spawn("UTCasing",origin);
c.scale *= 1.25; 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 ) override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )
{ {

View file

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

View file

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

View file

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

View file

@ -42,9 +42,6 @@ Class UTHud : BaseStatusBar
double CurX, CurY; double CurX, CurY;
double FracTic; double FracTic;
// Ugh...
const TINTSTYLE = (1|2<<8|1<<16|12<<24);
override void Init() override void Init()
{ {
Super.Init(); Super.Init();
@ -211,7 +208,7 @@ Class UTHud : BaseStatusBar
if ( opacity == -1 ) opacity = self.opacity; 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); 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); 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 ) private void UTDrawPlainTex( TextureID tx, double sx = 1.0, int opacity = -1 )
{ {
@ -264,13 +261,13 @@ Class UTHud : BaseStatusBar
if ( value < 0 ) 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); 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; CurX += step;
} }
for ( int i=0; i<digits.length(); i++ ) 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); 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; 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!!"; Obituary "%o was vaporized by %k's Redeemer!!";
Radius 2; Radius 2;
Height 2; Height 2;
Speed 12; Speed 6;
DamageType 'RedeemerDeath'; DamageType 'RedeemerDeath';
DamageFactor 1000; DamageFactor 1000;
PROJECTILE; PROJECTILE;
@ -282,9 +282,9 @@ Class WarShell : Actor
if ( waterlevel > 0 ) if ( waterlevel > 0 )
{ {
vel *= 0.98; 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() action void A_Trail()
@ -535,8 +535,8 @@ Class RedeemerHUD : HUDMessageBase
} }
for ( int i=0; i<ta.Size(); i++ ) 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.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_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_LegacyRenderStyle,STYLE_Add);
} }
} }
// reticle // reticle
@ -553,7 +553,7 @@ Class RedeemerHUD : HUDMessageBase
double rrot = -LagRoll2*2; double rrot = -LagRoll2*2;
for ( int i=0; i<4; i++ ) 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))); 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); sshape.Clear(Shape2D.C_Verts);
verts[0] = (-siz2.x,siz.y+siz2.y); verts[0] = (-siz2.x,siz.y+siz2.y);
verts[1] = (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); verts[3] = (siz2.x,siz.y+3*siz2.y);
for ( int i=0; i<4; i++ ) 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))); 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.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_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_LegacyRenderStyle,STYLE_Add);
// faux assembly readout // faux assembly readout
int numreadouts = int(vs.y/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_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);
} }
} }
} }