Added lesser variants to shock core and biorifle ammo for balance.

Added "dropped ammo" properties to all weapons, also for balance.
Silence warnings about floating point truncation.
This commit is contained in:
Marisa the Magician 2018-06-13 13:24:57 +02:00
commit 569ef037ec
20 changed files with 154 additions and 72 deletions

View file

@ -15,7 +15,7 @@ Class UTArmor : Armor
int saved;
if ( (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) )
{
saved = damage*absorb/100.;
saved = int(damage*absorb/100.);
if ( amount <= saved ) saved = amount;
newdamage -= saved;
amount -= saved;

View file

@ -2,8 +2,8 @@ Class Tier3Ammo : RandomSpawner2 replaces Shell
{
Default
{
DropItem "BioAmmo", 255, 1;
DropItem "ShockAmmo", 255, 1;
DropItem "BioAmmo2", 255, 1;
DropItem "ShockAmmo2", 255, 1;
}
}
Class Tier3Ammo2 : Tier3Ammo replaces ShellBox {}
@ -37,6 +37,24 @@ Class BioAmmo : Ammo
}
}
Class BioAmmo2 : BioAmmo // small variant
{
Default
{
Tag "Biosludge Ammo";
Inventory.PickupMessage "You picked up the Small Biosludge Ammo.";
Inventory.Amount 10;
Ammo.DropAmount 5;
Scale 0.5;
}
States
{
Spawn:
BIOA A -1;
Stop;
}
}
Class BioSpark : Actor
{
Default
@ -139,7 +157,7 @@ Class BioLight : DynamicLight
Destroy();
return;
}
args[LIGHT_INTENSITY] = 8*target.Scale.x;
args[LIGHT_INTENSITY] = int(8*target.Scale.x);
}
}
@ -161,9 +179,9 @@ Class BioXLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 64*lifetime;
args[LIGHT_GREEN] = 255*lifetime;
args[LIGHT_BLUE] = 48*lifetime;
args[LIGHT_RED] = int(64*lifetime);
args[LIGHT_GREEN] = int(255*lifetime);
args[LIGHT_BLUE] = int(48*lifetime);
lifetime -= 0.05;
if ( lifetime <= 0 ) Destroy();
}
@ -187,7 +205,7 @@ Class BioGel : Actor
int atplane;
Sector atsector;
double atz;
int rollvel, pitchvel, yawvel;
double rollvel, pitchvel, yawvel;
Vector3 normal;
override void PostBeginPlay()
@ -252,7 +270,7 @@ Class BioGel : Actor
}
if ( !InStateSequence(CurState,FindState("XDeath")) && ((!bNOGRAVITY && !Random[GES](0,2)) || !Random[GES](0,10)) )
{
int numpt = Min(20,Scale.x*2)+Random[GES](-1,1);
int numpt = Min(20,int(Scale.x*2))+Random[GES](-1,1);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](1,3);
@ -355,7 +373,7 @@ Class BioGel : Actor
}
A_PlaySound("ges/hit");
A_SprayDecal("BioSplat",-172);
int numpt = Min(100,Scale.x*10)+Random[GES](-5,5);
int numpt = Min(100,int(Scale.x*10))+Random[GES](-5,5);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (normal+(FRandom[GES](-.8,.8),FRandom[GES](-.8,.8),FRandom[GES](-.8,.8))).unit()*FRandom[GES](3,6);
@ -381,19 +399,19 @@ Class BioGel : Actor
if ( invoker.l ) invoker.l.Destroy();
if ( invoker.b ) invoker.b.Destroy();
let s = Spawn("BioXLight",pos);
s.args[3] *= Scale.x;
s.args[3] = int(s.args[3]*Scale.x);
invoker.deadtimer = -2;
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos);
A_Explode(Random[GES](20,40)*Scale.x,Min(150,Scale.x*25));
A_Explode(int(Random[GES](20,40)*Scale.x),Min(150,int(Scale.x*25)));
A_PlaySound("ges/explode",CHAN_VOICE);
int numpt = Min(300,Scale.x*30)+Random[GES](-10,10);
int numpt = Min(300,int(Scale.x*30))+Random[GES](-10,10);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](3,12);
let s = Spawn("BioSpark",pos);
s.vel = pvel;
}
numpt = Min(100,Scale.x*10)+Random[GES](-4,4);
numpt = Min(100,int(Scale.x*10))+Random[GES](-4,4);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](1.2,2.4);
@ -487,7 +505,7 @@ Class BioGlob : BioGel
override void AlignSelf()
{
Super.AlignSelf();
if ( !bAMBUSH ) numsplash = 2*Scale.x-1;
if ( !bAMBUSH ) numsplash = int(2*Scale.x)-1;
}
override void Tick()
{
@ -536,7 +554,7 @@ Class BioRifle : UTWeapon
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(48,0,255,0),1);
A_AlertMonsters();
if ( alt ) A_QuakeEx(1+0.5*invoker.charge,1+0.5*invoker.charge,1+0.5*invoker.charge,5+1.2*invoker.charge,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05+0.01*invoker.charge);
if ( alt ) A_QuakeEx(1+int(0.5*invoker.charge),1+int(0.5*invoker.charge),1+int(0.5*invoker.charge),5+int(1.2*invoker.charge),0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05+0.01*invoker.charge);
else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
Vector3 x, y, z;
double a, s;
@ -593,6 +611,7 @@ Class BioRifle : UTWeapon
Weapon.AmmoType2 "BioAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 25;
UTWeapon.DropAmmo 5;
}
States
{

View file

@ -413,6 +413,7 @@ Class UTRocketLauncher : UTWeapon
Weapon.AmmoType2 "UTRocketAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 6;
UTWeapon.DropAmmo 3;
}
States
{

View file

@ -53,7 +53,7 @@ Class BulletImpact : Actor
{
Super.PostBeginPlay();
A_SprayDecal("Pock",-20);
int numpt = Random[Enforcer](5,10)*scale.x*4;
int numpt = int(Random[Enforcer](5,10)*scale.x*4);
Vector3 x = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
for ( int i=0; i<numpt; i++ )
{
@ -62,14 +62,14 @@ Class BulletImpact : Actor
s.vel = pvel;
s.SetShade(Color(1,1,1)*Random[Enforcer](128,192));
}
numpt = Random[Enforcer](3,8)*scale.x*4;
numpt = int(Random[Enforcer](3,8)*scale.x*4);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1)).unit()*FRandom[Enforcer](2,8);
let s = Spawn("UTSpark",pos+x*2);
s.vel = pvel;
}
numpt = Random[Enforcer](2,5)*scale.x*4;
numpt = int(Random[Enforcer](2,5)*scale.x*4);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1),FRandom[Enforcer](-1,1)).unit()*FRandom[Enforcer](2,8);
@ -386,6 +386,7 @@ Class Enforcer : UTWeapon replaces Pistol
Weapon.AmmoUse2 1;
Weapon.AmmoGive 30;
Weapon.Kickback 180;
UTWeapon.DropAmmo 10;
Enforcer.ClipCount 20;
Enforcer.SlaveClipCount 20;
}

View file

@ -77,9 +77,9 @@ Class ChunkLight : DynamicLight
return;
}
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*(10-target.frame)*0.1;
args[LIGHT_GREEN] = 224*(10-target.frame)*0.1;
args[LIGHT_BLUE] = 128*(10-target.frame)*0.1;
args[LIGHT_RED] = int(255*(10-target.frame)*0.1);
args[LIGHT_GREEN] = int(224*(10-target.frame)*0.1);
args[LIGHT_BLUE] = int(128*(10-target.frame)*0.1);
}
}
@ -345,9 +345,9 @@ Class SlugLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime;
args[LIGHT_GREEN] = 224*lifetime;
args[LIGHT_BLUE] = 128*lifetime;
args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = int(224*lifetime);
args[LIGHT_BLUE] = int(128*lifetime);
lifetime -= 0.05;
if ( lifetime <= 0 ) Destroy();
}
@ -577,6 +577,7 @@ Class FlakCannon : UTWeapon
Weapon.AmmoType2 "FlakAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 10;
UTWeapon.DropAmmo 5;
}
States
{

View file

@ -58,7 +58,7 @@ Class ImpactHammer : UTWeapon replaces Fist
invoker.count = 0;
A_AlertMonsters();
}
A_QuakeEx(clamp(invoker.chargesize*3,0,3),clamp(invoker.chargesize*3,0,3),clamp(invoker.chargesize*3,0,3),amt+1,0,96,"",QF_RELATIVE,rollIntensity:clamp(invoker.chargesize*0.3,0,0.3));
A_QuakeEx(clamp(int(invoker.chargesize*3),0,3),clamp(int(invoker.chargesize*3),0,3),clamp(int(invoker.chargesize*3),0,3),amt+1,0,96,"",QF_RELATIVE,rollIntensity:clamp(invoker.chargesize*0.3,0,0.3));
}
action void A_FireBlast()
{
@ -75,7 +75,7 @@ Class ImpactHammer : UTWeapon replaces Fist
LineTrace(angle,80,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Impact](60,80)*realcharge;
int dmg = int(Random[Impact](60,80)*realcharge);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge;
if ( d.HitActor.bNOBLOOD )
@ -93,7 +93,7 @@ Class ImpactHammer : UTWeapon replaces Fist
else if ( d.HitType != TRACE_HitNone )
{
realcharge = max(1.0,realcharge);
int dmg = Random[Impact](16,24)*realcharge; // It's a flat damage of 36 on UT, but I think it's more fair for it to scale
int dmg = int(Random[Impact](16,24)*realcharge); // It's a flat damage of 36 on UT, but I think it's more fair for it to scale
dmg = DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
TraceBleed(dmg,invoker);
vel -= x*(1200/mass)*realcharge;
@ -102,7 +102,7 @@ Class ImpactHammer : UTWeapon replaces Fist
p.pitch = asin(-d.HitDir.z);
if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4);
}
A_QuakeEx(realcharge*6,realcharge*6,realcharge*6,16,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:realcharge*0.2);
A_QuakeEx(int(realcharge*6),int(realcharge*6),int(realcharge*6),16,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:realcharge*0.2);
realcharge = max(1.0,realcharge);
int numpt = Random[Impact](5,10);
for ( int i=0; i<numpt; i++ )
@ -137,13 +137,13 @@ Class ImpactHammer : UTWeapon replaces Fist
double dscale = d.Distance/180.;
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Impact](25,35)*dscale;
int dmg = int(Random[Impact](25,35)*dscale);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
d.HitActor.vel = x*(500/d.HitActor.mass)*dscale;
}
else if ( d.HitType != TRACE_HitNone )
{
int dmg = Random[Impact](16,24)*dscale;
int dmg = int(Random[Impact](16,24)*dscale);
dmg = DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
vel -= x*(600/mass)*dscale;
if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4);

View file

@ -215,6 +215,7 @@ Class Minigun : UTWeapon
Weapon.AmmoUse2 1;
Weapon.AmmoGive 50;
Weapon.Kickback 180;
UTWeapon.DropAmmo 20;
}
States
{

View file

@ -454,9 +454,9 @@ Class mkLight : DynamicLight
else SetOrigin(target.vec3Offset(0,0,target.height*0.75),true);
A_SetAngle(target.angle,SPF_INTERPOLATE);
A_SetPitch(target.pitch,SPF_INTERPOLATE);
args[LIGHT_RED] = GetDefaultByType(GetClass()).args[LIGHT_RED]*clamp(Inventory(master).amount/40.,0.,1.);
args[LIGHT_GREEN] = GetDefaultByType(GetClass()).args[LIGHT_GREEN]*clamp(Inventory(master).amount/40.,0.,1.);
args[LIGHT_BLUE] = GetDefaultByType(GetClass()).args[LIGHT_BLUE]*clamp(Inventory(master).amount/40.,0.,1.);
args[LIGHT_RED] = int(GetDefaultByType(GetClass()).args[LIGHT_RED]*clamp(Inventory(master).amount/40.,0.,1.));
args[LIGHT_GREEN] = int(GetDefaultByType(GetClass()).args[LIGHT_GREEN]*clamp(Inventory(master).amount/40.,0.,1.));
args[LIGHT_BLUE] = int(GetDefaultByType(GetClass()).args[LIGHT_BLUE]*clamp(Inventory(master).amount/40.,0.,1.));
bDORMANT = (target.health <= 0);
if ( Inventory(target) && target.bInvisible ) bDORMANT = true;
// alert monsters hit by the light
@ -501,9 +501,9 @@ Class mkLight3 : DynamicLight
Destroy();
return;
}
args[LIGHT_RED] = GetDefaultByType(GetClass()).args[LIGHT_RED]*clamp(Inventory(master).amount/40,0.,1.);
args[LIGHT_GREEN] = GetDefaultByType(GetClass()).args[LIGHT_GREEN]*clamp(Inventory(master).amount/40,0.,1.);
args[LIGHT_BLUE] = GetDefaultByType(GetClass()).args[LIGHT_BLUE]*clamp(Inventory(master).amount/40,0.,1.);
args[LIGHT_RED] = int(GetDefaultByType(GetClass()).args[LIGHT_RED]*clamp(Inventory(master).amount/40,0.,1.));
args[LIGHT_GREEN] = int(GetDefaultByType(GetClass()).args[LIGHT_GREEN]*clamp(Inventory(master).amount/40,0.,1.));
args[LIGHT_BLUE] = int(GetDefaultByType(GetClass()).args[LIGHT_BLUE]*clamp(Inventory(master).amount/40,0.,1.));
SetOrigin(target.vec3Offset(0,0,target.height*0.5),true);
}
}

View file

@ -146,7 +146,7 @@ Class PulseBallLight : DynamicLight
return;
}
SetOrigin(target.pos,true);
args[LIGHT_INTENSITY] = 10+sin(gametic*80+pulseofs)*5;
args[LIGHT_INTENSITY] = 10+int(sin(gametic*80+pulseofs)*5);
}
}
@ -168,8 +168,8 @@ Class PulseExplLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 64*lifetime;
args[LIGHT_GREEN] = 255*lifetime;
args[LIGHT_RED] = int(64*lifetime);
args[LIGHT_GREEN] = int(255*lifetime);
lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy();
}
@ -391,12 +391,12 @@ Class PulseBolt : Actor
if ( !damagedactor )
{
accdamage = min(0.5*(level.time-lasthit),0.1);
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped',DMG_USEANGLE,atan2(x.y,x.x));
t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,80)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x));
accdamage = 0;
}
else if ( t.Results.HitActor != damagedactor )
{
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped',DMG_USEANGLE,atan2(x.y,x.x));
t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,80)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x));
accdamage = 0;
}
lasthit = level.time;
@ -404,7 +404,7 @@ Class PulseBolt : Actor
accdamage += 1./TICRATE;
if ( accdamage > 0.22 )
{
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped',DMG_USEANGLE,atan2(x.y,x.x));
t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,80)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x));
accdamage = 0;
}
}
@ -446,7 +446,7 @@ Class PulseBolt : Actor
}
else if ( damagedactor )
{
damagedactor.DamageMobj(self,target,Random[Pulse](65,75)*accdamage,'zapped');
damagedactor.DamageMobj(self,target,int(Random[Pulse](65,75)*accdamage),'zapped');
accdamage = 0;
damagedactor = null;
}
@ -716,6 +716,7 @@ Class PulseGun : UTWeapon
Weapon.AmmoUse2 1;
Weapon.AmmoGive 60;
PulseGun.ClipCount 50;
UTWeapon.DropAmmo 15;
}
States
{

View file

@ -171,9 +171,9 @@ Class Razor2AltLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime;
args[LIGHT_GREEN] = 240*lifetime;
args[LIGHT_BLUE] = 224*lifetime;
args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = int(240*lifetime);
args[LIGHT_BLUE] = int(224*lifetime);
lifetime -= 0.05;
if ( lifetime <= 0 ) Destroy();
}
@ -258,6 +258,7 @@ Class Ripper2 : UTWeapon
Weapon.AmmoType2 "RipperAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 15;
UTWeapon.DropAmmo 5;
}
action void A_RazorFire( bool alt = false )
{

View file

@ -18,6 +18,23 @@ Class ShockAmmo : Ammo
}
}
Class ShockAmmo2 : ShockAmmo
{
Default
{
Tag "Used Shock Core";
Inventory.PickupMessage "You picked up a used Shock Core.";
Inventory.Amount 3;
Ammo.DropAmount 3;
}
States
{
Spawn:
SHOA A -1;
Stop;
}
}
Class ShockBeamTracer : LineTracer
{
Actor owner, ignore, lasthit;
@ -728,9 +745,9 @@ Class ShockExplLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 160*lifetime;
args[LIGHT_GREEN] = 128*lifetime;
args[LIGHT_BLUE] = 255*lifetime;
args[LIGHT_RED] = int(160*lifetime);
args[LIGHT_GREEN] = int(128*lifetime);
args[LIGHT_BLUE] = int(255*lifetime);
lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy();
}
@ -754,9 +771,9 @@ Class SuperShockExplLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime;
args[LIGHT_GREEN] = 160*lifetime;
args[LIGHT_BLUE] = 128*lifetime;
args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = int(160*lifetime);
args[LIGHT_BLUE] = int(128*lifetime);
lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy();
}
@ -1046,6 +1063,7 @@ Class ShockRifle : UTWeapon
Weapon.AmmoType2 "ShockAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 20;
UTWeapon.DropAmmo 5;
}
States
{
@ -1218,6 +1236,7 @@ Class EnhancedShockRifle : UTWeapon replaces InvulnerabilitySphere
Weapon.AmmoType2 "EnhancedShockAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 25;
UTWeapon.DropAmmo 5;
+WEAPON.AMMO_OPTIONAL;
+WEAPON.ALT_AMMO_OPTIONAL;
+WEAPON.CHEATNOTWEAPON;

View file

@ -155,6 +155,7 @@ Class SniperRifle : UTWeapon
Weapon.AmmoUse2 1;
Weapon.AmmoGive 8;
Weapon.Kickback 250;
UTWeapon.DropAmmo 2;
}
States
{

View file

@ -197,12 +197,18 @@ Class RandomSpawner2 : RandomSpawner
{
spawned.SetState(spawned.ResolveState("Spawn")+1);
Inventory(spawned).bALWAYSPICKUP = true;
if ( UTWeapon(spawned).DropAmmo > 0 )
Weapon(spawned).AmmoGive1 = min(UTWeapon(spawned).DropAmmo,Weapon(spawned).AmmoGive1);
}
}
}
Class UTWeapon : Weapon
{
int DropAmmo;
Property DropAmmo: DropAmmo;
// Drawstuffs under HUD
virtual ui void PreRender( double lbottom ) {}
// Drawstuffs over HUD
@ -272,9 +278,9 @@ Class UTTeleportLight : DynamicLight
Destroy();
return;
}
args[LIGHT_RED] = 128*alpha;
args[LIGHT_GREEN] = 160*alpha;
args[LIGHT_BLUE] = 255*alpha;
args[LIGHT_RED] = int(128*alpha);
args[LIGHT_GREEN] = int(160*alpha);
args[LIGHT_BLUE] = int(255*alpha);
args[LIGHT_INTENSITY] = Random[Tele](10,14)*8;
alpha -= 1./35;
}
@ -295,9 +301,9 @@ Class UTItemLight : DynamicLight
Destroy();
return;
}
args[LIGHT_RED] = 255*alpha;
args[LIGHT_GREEN] = 224*alpha;
args[LIGHT_BLUE] = 160*alpha;
args[LIGHT_RED] = int(255*alpha);
args[LIGHT_GREEN] = int(224*alpha);
args[LIGHT_BLUE] = int(160*alpha);
args[LIGHT_INTENSITY] = Random[Tele](6,8)*8;
alpha -= 3./35;
}

View file

@ -300,18 +300,18 @@ Class UTHud : BaseStatusBar
if ( CPlayer.GetGender() == 1 )
{
UTDrawTintedTex(Woman[0],hudsize*statussize,min(opacity,15),dollcolor);
if ( a ) UTDrawTintedTex(Woman[1],hudsize*statussize,min(opacity,15)*(a.Amount/double(a.MaxAmount)),dollcolor);
if ( t ) UTDrawTintedTex(Woman[2],hudsize*statussize,min(opacity,15)*(t.Amount/double(t.MaxAmount)),dollcolor);
if ( j ) UTDrawTintedTex(Woman[3],hudsize*statussize,min(opacity,15)*(j.Amount/double(j.MaxAmount)),dollcolor);
if ( s ) UTDrawTintedTex(Woman[4],hudsize*statussize,min(opacity,15)*(s.Amount/double(s.MaxAmount)),GoldColor);
if ( a ) UTDrawTintedTex(Woman[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor);
if ( t ) UTDrawTintedTex(Woman[2],hudsize*statussize,int(min(opacity,15)*(t.Amount/double(t.MaxAmount))),dollcolor);
if ( j ) UTDrawTintedTex(Woman[3],hudsize*statussize,int(min(opacity,15)*(j.Amount/double(j.MaxAmount))),dollcolor);
if ( s ) UTDrawTintedTex(Woman[4],hudsize*statussize,int(min(opacity,15)*(s.Amount/double(s.MaxAmount))),GoldColor);
}
else
{
UTDrawTintedTex(Man[0],hudsize*statussize,min(opacity,15),dollcolor);
if ( a ) UTDrawTintedTex(Man[1],hudsize*statussize,min(opacity,15)*(a.Amount/double(a.MaxAmount)),dollcolor);
if ( t ) UTDrawTintedTex(Man[2],hudsize*statussize,min(opacity,15)*(t.Amount/double(t.MaxAmount)),dollcolor);
if ( j ) UTDrawTintedTex(Man[3],hudsize*statussize,min(opacity,15)*(j.Amount/double(j.MaxAmount)),dollcolor);
if ( s ) UTDrawTintedTex(Man[4],hudsize*statussize,min(opacity,15)*(s.Amount/double(s.MaxAmount)),GoldColor);
if ( a ) UTDrawTintedTex(Man[1],hudsize*statussize,int(min(opacity,15)*(a.Amount/double(a.MaxAmount))),dollcolor);
if ( t ) UTDrawTintedTex(Man[2],hudsize*statussize,int(min(opacity,15)*(t.Amount/double(t.MaxAmount))),dollcolor);
if ( j ) UTDrawTintedTex(Man[3],hudsize*statussize,int(min(opacity,15)*(j.Amount/double(j.MaxAmount))),dollcolor);
if ( s ) UTDrawTintedTex(Man[4],hudsize*statussize,int(min(opacity,15)*(s.Amount/double(s.MaxAmount))),GoldColor);
}
}
DrawColor = WhiteColor;
@ -617,7 +617,7 @@ Class UTHud : BaseStatusBar
}
int protrusion = GetProtrusion(swidth/hres);
[tmp,tmp,hres] = StatusbarToRealCoords(0,0,protrusion);
width += (swidth-hres)/scale.X;
width += int((swidth-hres)/scale.X);
if ( am_showtime )
{
printtext = level.TimeFormatted();

View file

@ -69,7 +69,7 @@ Class ShockWave : Actor
if ( (dist > olddmgradius) || (dir dot a.vel < 0) )
{
if ( !a.bDONTTHRUST ) a.vel += dir*((moscale+20)/a.mass);
a.DamageMobj(self,target,moscale,'RedeemerDeath',DMG_THRUSTLESS);
a.DamageMobj(self,target,int(moscale),'RedeemerDeath',DMG_THRUSTLESS);
}
}
olddmgradius = dmgradius;
@ -163,9 +163,9 @@ Class WarheadExplodLight : DynamicLight
{
Super.Tick();
if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime;
args[LIGHT_GREEN] = 192*lifetime;
args[LIGHT_BLUE] = 128*lifetime;
args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = int(192*lifetime);
args[LIGHT_BLUE] = int(128*lifetime);
lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy();
}
@ -663,6 +663,7 @@ Class WarheadLauncher : UTWeapon replaces BFG9000
Inventory.RespawnTics 2100;
+INVENTORY.ALWAYSPICKUP;
+WEAPON.NOAUTOFIRE;
UTWeapon.DropAmmo 1;
}
States
{