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

BIN
brightmaps/JShockCore_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

View file

@ -126,6 +126,14 @@ HardwareShader Texture "models/JShockCore.png"
{ {
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp" Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
} }
/*Brightmap Texture "models/JShockCore_2.png"
{
Map "brightmaps/JShockCore_2.png"
}*/
HardwareShader Texture "models/JShockCore_2.png"
{
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
}
/*Brightmap Texture "models/SASMD_t.png" /*Brightmap Texture "models/SASMD_t.png"
{ {
Map "brightmaps/ASMD_t.png" Map "brightmaps/ASMD_t.png"

View file

@ -10,6 +10,18 @@ Model "BioAmmo"
FrameIndex BIOA A 0 0 FrameIndex BIOA A 0 0
} }
Model "BioAmmo2"
{
Path "models"
Model 0 "BioAmmoM_d.3d"
Skin 0 "Jbammo1.png"
Scale 0.08 0.096 0.08
PitchOffset 180
RollOffset 90
ZOffset 4
FrameIndex BIOA A 0 0
}
Model "BioGel" Model "BioGel"
{ {

View file

@ -8,6 +8,16 @@ Model "ShockAmmo"
FrameIndex SHOA A 0 0 FrameIndex SHOA A 0 0
} }
Model "ShockAmmo2"
{
Path "models"
Model 0 "ShockCoreM_d.3d"
Skin 0 "JShockCore_2.png"
Scale 0.11 0.11 0.132
ZOffset 12
FrameIndex SHOA A 0 0
}
Model "EnhancedShockAmmo" Model "EnhancedShockAmmo"
{ {

BIN
models/JShockCore_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

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

View file

@ -2,8 +2,8 @@ Class Tier3Ammo : RandomSpawner2 replaces Shell
{ {
Default Default
{ {
DropItem "BioAmmo", 255, 1; DropItem "BioAmmo2", 255, 1;
DropItem "ShockAmmo", 255, 1; DropItem "ShockAmmo2", 255, 1;
} }
} }
Class Tier3Ammo2 : Tier3Ammo replaces ShellBox {} 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 Class BioSpark : Actor
{ {
Default Default
@ -139,7 +157,7 @@ Class BioLight : DynamicLight
Destroy(); Destroy();
return; 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(); Super.Tick();
if ( globalfreeze || level.frozen ) return; if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 64*lifetime; args[LIGHT_RED] = int(64*lifetime);
args[LIGHT_GREEN] = 255*lifetime; args[LIGHT_GREEN] = int(255*lifetime);
args[LIGHT_BLUE] = 48*lifetime; args[LIGHT_BLUE] = int(48*lifetime);
lifetime -= 0.05; lifetime -= 0.05;
if ( lifetime <= 0 ) Destroy(); if ( lifetime <= 0 ) Destroy();
} }
@ -187,7 +205,7 @@ Class BioGel : Actor
int atplane; int atplane;
Sector atsector; Sector atsector;
double atz; double atz;
int rollvel, pitchvel, yawvel; double rollvel, pitchvel, yawvel;
Vector3 normal; Vector3 normal;
override void PostBeginPlay() override void PostBeginPlay()
@ -252,7 +270,7 @@ Class BioGel : Actor
} }
if ( !InStateSequence(CurState,FindState("XDeath")) && ((!bNOGRAVITY && !Random[GES](0,2)) || !Random[GES](0,10)) ) 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++ ) 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); 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_PlaySound("ges/hit");
A_SprayDecal("BioSplat",-172); 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++ ) 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); 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.l ) invoker.l.Destroy();
if ( invoker.b ) invoker.b.Destroy(); if ( invoker.b ) invoker.b.Destroy();
let s = Spawn("BioXLight",pos); let s = Spawn("BioXLight",pos);
s.args[3] *= Scale.x; s.args[3] = int(s.args[3]*Scale.x);
invoker.deadtimer = -2; invoker.deadtimer = -2;
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos); 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); 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++ ) 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); Vector3 pvel = (FRandom[GES](-1,1),FRandom[GES](-1,1),FRandom[GES](-1,1)).unit()*FRandom[GES](3,12);
let s = Spawn("BioSpark",pos); let s = Spawn("BioSpark",pos);
s.vel = pvel; 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++ ) 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); 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() override void AlignSelf()
{ {
Super.AlignSelf(); Super.AlignSelf();
if ( !bAMBUSH ) numsplash = 2*Scale.x-1; if ( !bAMBUSH ) numsplash = int(2*Scale.x)-1;
} }
override void Tick() override void Tick()
{ {
@ -536,7 +554,7 @@ Class BioRifle : UTWeapon
invoker.FireEffect(); invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(48,0,255,0),1); UTMainHandler.DoFlash(self,Color(48,0,255,0),1);
A_AlertMonsters(); 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); else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
Vector3 x, y, z; Vector3 x, y, z;
double a, s; double a, s;
@ -593,6 +611,7 @@ Class BioRifle : UTWeapon
Weapon.AmmoType2 "BioAmmo"; Weapon.AmmoType2 "BioAmmo";
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 25; Weapon.AmmoGive 25;
UTWeapon.DropAmmo 5;
} }
States States
{ {

View file

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

View file

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

View file

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

View file

@ -58,7 +58,7 @@ Class ImpactHammer : UTWeapon replaces Fist
invoker.count = 0; invoker.count = 0;
A_AlertMonsters(); 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() 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); LineTrace(angle,80,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor ) 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); dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge; d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge;
if ( d.HitActor.bNOBLOOD ) if ( d.HitActor.bNOBLOOD )
@ -93,7 +93,7 @@ Class ImpactHammer : UTWeapon replaces Fist
else if ( d.HitType != TRACE_HitNone ) else if ( d.HitType != TRACE_HitNone )
{ {
realcharge = max(1.0,realcharge); 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); dmg = DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
TraceBleed(dmg,invoker); TraceBleed(dmg,invoker);
vel -= x*(1200/mass)*realcharge; vel -= x*(1200/mass)*realcharge;
@ -102,7 +102,7 @@ Class ImpactHammer : UTWeapon replaces Fist
p.pitch = asin(-d.HitDir.z); p.pitch = asin(-d.HitDir.z);
if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4); 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); realcharge = max(1.0,realcharge);
int numpt = Random[Impact](5,10); int numpt = Random[Impact](5,10);
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
@ -137,13 +137,13 @@ Class ImpactHammer : UTWeapon replaces Fist
double dscale = d.Distance/180.; double dscale = d.Distance/180.;
if ( d.HitType == TRACE_HitActor ) 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); dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
d.HitActor.vel = x*(500/d.HitActor.mass)*dscale; d.HitActor.vel = x*(500/d.HitActor.mass)*dscale;
} }
else if ( d.HitType != TRACE_HitNone ) 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); dmg = DamageMobj(invoker,self,dmg,'impact',DMG_THRUSTLESS);
vel -= x*(600/mass)*dscale; vel -= x*(600/mass)*dscale;
if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4); 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.AmmoUse2 1;
Weapon.AmmoGive 50; Weapon.AmmoGive 50;
Weapon.Kickback 180; Weapon.Kickback 180;
UTWeapon.DropAmmo 20;
} }
States States
{ {

View file

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

View file

@ -146,7 +146,7 @@ Class PulseBallLight : DynamicLight
return; return;
} }
SetOrigin(target.pos,true); 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(); Super.Tick();
if ( globalfreeze || level.frozen ) return; if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 64*lifetime; args[LIGHT_RED] = int(64*lifetime);
args[LIGHT_GREEN] = 255*lifetime; args[LIGHT_GREEN] = int(255*lifetime);
lifetime -= 1./ReactionTime; lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy(); if ( lifetime <= 0 ) Destroy();
} }
@ -391,12 +391,12 @@ Class PulseBolt : Actor
if ( !damagedactor ) if ( !damagedactor )
{ {
accdamage = min(0.5*(level.time-lasthit),0.1); 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; accdamage = 0;
} }
else if ( t.Results.HitActor != damagedactor ) 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; accdamage = 0;
} }
lasthit = level.time; lasthit = level.time;
@ -404,7 +404,7 @@ Class PulseBolt : Actor
accdamage += 1./TICRATE; accdamage += 1./TICRATE;
if ( accdamage > 0.22 ) 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; accdamage = 0;
} }
} }
@ -446,7 +446,7 @@ Class PulseBolt : Actor
} }
else if ( damagedactor ) 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; accdamage = 0;
damagedactor = null; damagedactor = null;
} }
@ -716,6 +716,7 @@ Class PulseGun : UTWeapon
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 60; Weapon.AmmoGive 60;
PulseGun.ClipCount 50; PulseGun.ClipCount 50;
UTWeapon.DropAmmo 15;
} }
States States
{ {

View file

@ -171,9 +171,9 @@ Class Razor2AltLight : DynamicLight
{ {
Super.Tick(); Super.Tick();
if ( globalfreeze || level.frozen ) return; if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime; args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = 240*lifetime; args[LIGHT_GREEN] = int(240*lifetime);
args[LIGHT_BLUE] = 224*lifetime; args[LIGHT_BLUE] = int(224*lifetime);
lifetime -= 0.05; lifetime -= 0.05;
if ( lifetime <= 0 ) Destroy(); if ( lifetime <= 0 ) Destroy();
} }
@ -258,6 +258,7 @@ Class Ripper2 : UTWeapon
Weapon.AmmoType2 "RipperAmmo"; Weapon.AmmoType2 "RipperAmmo";
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 15; Weapon.AmmoGive 15;
UTWeapon.DropAmmo 5;
} }
action void A_RazorFire( bool alt = false ) 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 Class ShockBeamTracer : LineTracer
{ {
Actor owner, ignore, lasthit; Actor owner, ignore, lasthit;
@ -728,9 +745,9 @@ Class ShockExplLight : DynamicLight
{ {
Super.Tick(); Super.Tick();
if ( globalfreeze || level.frozen ) return; if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 160*lifetime; args[LIGHT_RED] = int(160*lifetime);
args[LIGHT_GREEN] = 128*lifetime; args[LIGHT_GREEN] = int(128*lifetime);
args[LIGHT_BLUE] = 255*lifetime; args[LIGHT_BLUE] = int(255*lifetime);
lifetime -= 1./ReactionTime; lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy(); if ( lifetime <= 0 ) Destroy();
} }
@ -754,9 +771,9 @@ Class SuperShockExplLight : DynamicLight
{ {
Super.Tick(); Super.Tick();
if ( globalfreeze || level.frozen ) return; if ( globalfreeze || level.frozen ) return;
args[LIGHT_RED] = 255*lifetime; args[LIGHT_RED] = int(255*lifetime);
args[LIGHT_GREEN] = 160*lifetime; args[LIGHT_GREEN] = int(160*lifetime);
args[LIGHT_BLUE] = 128*lifetime; args[LIGHT_BLUE] = int(128*lifetime);
lifetime -= 1./ReactionTime; lifetime -= 1./ReactionTime;
if ( lifetime <= 0 ) Destroy(); if ( lifetime <= 0 ) Destroy();
} }
@ -1046,6 +1063,7 @@ Class ShockRifle : UTWeapon
Weapon.AmmoType2 "ShockAmmo"; Weapon.AmmoType2 "ShockAmmo";
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 20; Weapon.AmmoGive 20;
UTWeapon.DropAmmo 5;
} }
States States
{ {
@ -1218,6 +1236,7 @@ Class EnhancedShockRifle : UTWeapon replaces InvulnerabilitySphere
Weapon.AmmoType2 "EnhancedShockAmmo"; Weapon.AmmoType2 "EnhancedShockAmmo";
Weapon.AmmoUse2 1; Weapon.AmmoUse2 1;
Weapon.AmmoGive 25; Weapon.AmmoGive 25;
UTWeapon.DropAmmo 5;
+WEAPON.AMMO_OPTIONAL; +WEAPON.AMMO_OPTIONAL;
+WEAPON.ALT_AMMO_OPTIONAL; +WEAPON.ALT_AMMO_OPTIONAL;
+WEAPON.CHEATNOTWEAPON; +WEAPON.CHEATNOTWEAPON;

View file

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

View file

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

View file

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

View file

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