Rebalanced things across the board, buffing relatively weak weapons.

Double capacity with backpack for all ammo (except Redeemer, it just gets one extra).
Made Enhanced Shock Rifle ammo drain over time (1 unit per second).
Uncapped health and armor numbers in the HUD.
Fixed Jump Boots not persisting between levels.
Increased duration of invisibility.
Made translocator toggleable (currently requires manually selecting "apply changes" under the menu option).
This commit is contained in:
Marisa the Magician 2018-06-03 16:04:00 +02:00
commit 6c096e1b0f
19 changed files with 102 additions and 46 deletions

View file

@ -18,3 +18,4 @@ user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0)
user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8)
user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0)
user bool flak_footsteps = true;
server bool flak_translocator = false;

View file

@ -23,6 +23,8 @@ OptionMenu "UTOptionMenu"
Option "Enforcer Reloading", "flak_enforcerreload", "YesNo"
Option "Pulsegun Reloading", "flak_pulsereload", "YesNo"
Option "Redeemer Target Visuals", "flak_redeemerreadout", "YesNo"
Option "Enable Translocator", "flak_translocator", "YesNo"
Command "Apply Changes", "event refreshtrans"
StaticText " "
StaticText "HUD Options", "Gold"
Option "Show Weapon Bar", "flak_showweapons", "YesNo"

View file

@ -182,6 +182,7 @@ shock/ball expla02
$pitchshift shock/ball 5
$pitchshiftrange 0
sshock/blast expl2
sshock/dryfire aclick2
pulse/bolt pulseblt
pulse/down pulsedwn

BIN
sounds/aclick2.ogg Normal file

Binary file not shown.

View file

@ -26,7 +26,7 @@ Class BioAmmo : Ammo
Inventory.Amount 25;
Inventory.MaxAmount 100;
Ammo.BackpackAmount 50;
Ammo.BackpackMaxAmount 100;
Ammo.BackpackMaxAmount 200;
Ammo.DropAmount 10;
}
States
@ -329,7 +329,7 @@ Class BioGel : Actor
s.args[3] *= Scale.x;
invoker.deadtimer = -1;
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos);
A_Explode(Random[GES](15,25)*Scale.x,Min(150,Scale.x*25));
A_Explode(Random[GES](20,40)*Scale.x,Min(150,Scale.x*25));
A_PlaySound("ges/explode",CHAN_VOICE);
int numpt = Min(300,Scale.x*30)+Random[GES](-10,10);
for ( int i=0; i<numpt; i++ )
@ -344,7 +344,7 @@ Class BioGel : Actor
{
Obituary "%o drank a glass of %k's dripping green load.";
DamageType 'Slime';
DamageFunction Random[GES](20,30)*Scale.x;
DamageFunction Random[GES](20,40)*Scale.x;
RenderStyle "Add";
Radius 3;
Height 3;

View file

@ -67,7 +67,7 @@ Class UTChainsaw : UTWeapon
LineTrace(angle,90,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Chainsaw](16,22);
int dmg = Random[Chainsaw](20,30);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'slashed');
d.HitActor.vel -= x*(500/d.HitActor.mass);
vel += x*(100/mass);
@ -104,7 +104,7 @@ Class UTChainsaw : UTWeapon
LineTrace(angle,90,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Chainsaw](50,55);
int dmg = Random[Chainsaw](50,60);
if ( d.HitLocation.z >= (d.HitActor.pos.z+d.HitActor.height*0.8) )
dmg = d.HitActor.DamageMobj(invoker,self,dmg*2,'Decapitated');
else dmg = d.HitActor.DamageMobj(invoker,self,dmg,'slashed');

View file

@ -7,7 +7,7 @@ Class UTRocketAmmo : Ammo
Inventory.Amount 12;
Inventory.MaxAmount 48;
Ammo.BackpackAmount 12;
Ammo.BackpackMaxAmount 48;
Ammo.BackpackMaxAmount 96;
Ammo.DropAmount 3;
}
States
@ -105,7 +105,7 @@ Class UTRocket : Actor
Default
{
Obituary "%o was smacked down by %k's Rocket Launcher.";
DamageFunction Random[Eightball](70,80);
DamageFunction Random[Eightball](90,115);
DamageType 'RocketDeath';
Radius 2;
Height 2;
@ -129,7 +129,7 @@ Class UTRocket : Actor
A_SprayDecal("RocketBlast",150);
A_NoGravity();
A_SetScale(0.75);
A_Explode(Random[Eightball](60,70),100);
A_Explode(Random[Eightball](80,100),100);
A_QuakeEx(3,3,3,8,0,250,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
A_PlaySound("utrl/explode",CHAN_VOICE);
A_AlertMonsters();
@ -182,7 +182,7 @@ Class UTGrenade : UTRocket
Default
{
DamageFunction Random[Eightball](80,90);
DamageFunction Random[Eightball](90,120);
DamageType 'GrenadeDeath';
-NOGRAVITY;
+USEBOUNCESTATE;

View file

@ -33,7 +33,7 @@ Class FlakAmmo : Ammo
Inventory.Amount 10;
Inventory.MaxAmount 50;
Ammo.BackpackAmount 20;
Ammo.BackpackMaxAmount 50;
Ammo.BackpackMaxAmount 100;
Ammo.DropAmount 5;
}
States
@ -140,7 +140,7 @@ Class FlakChunk : Actor
Radius 2;
Height 2;
Speed 50;
DamageFunction Random[Flak](12,18);
DamageFunction Random[Flak](15,25);
DamageType 'Shredded';
BounceType "Doom";
BounceFactor 0.8;
@ -359,7 +359,7 @@ Class FlakSlug : Actor
{
Obituary "%o was ripped to shreds by %k's Flak Cannon.";
DamageType 'FlakDeath';
DamageFunction Random[Flak](60,80);
DamageFunction Random[Flak](80,90);
Radius 2;
Height 2;
Speed 40;
@ -386,7 +386,7 @@ Class FlakSlug : Actor
A_SprayDecal("RocketBlast",150);
A_NoGravity();
A_SetScale(1.2);
A_Explode(Random[Flak](40,60),80);
A_Explode(Random[Flak](70,80),80);
A_QuakeEx(4,4,4,8,0,200,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2);
A_PlaySound("flak/explode",CHAN_VOICE);
A_AlertMonsters();

View file

@ -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](50,60)*realcharge;
int dmg = Random[Impact](60,80)*realcharge;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact');
d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge;
if ( d.HitActor.bNOBLOOD )
@ -137,7 +137,7 @@ Class ImpactHammer : UTWeapon replaces Fist
double dscale = d.Distance/180.;
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Impact](16,20)*dscale;
int dmg = Random[Impact](25,35)*dscale;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'impact');
d.HitActor.vel = x*(500/d.HitActor.mass)*dscale;
}

View file

@ -31,9 +31,9 @@ Class MiniAmmo : Ammo
Tag "Large Bullets";
Inventory.PickupMessage "You picked up 50 bullets.";
Inventory.Amount 50;
Inventory.MaxAmount 199;
Inventory.MaxAmount 200;
Ammo.BackpackAmount 100;
Ammo.BackpackMaxAmount 199;
Ammo.BackpackMaxAmount 400;
Ammo.DropAmount 20;
}
States
@ -122,7 +122,7 @@ Class Minigun : UTWeapon
LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Minigun](9,15); // fun fact: the Minigun is one of the few weapons that has actual RNG damage in UT (and it's exactly this damage)
int dmg = Random[Minigun](12,18); // fun fact: the Minigun is one of the few weapons that has actual RNG damage in UT
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot');
if ( d.HitActor.bNOBLOOD )
{

View file

@ -196,10 +196,10 @@ Class PowerUTInvisibility : PowerInvisibility
{
Default
{
Powerup.Duration -50;
Powerup.Strength 95;
Powerup.Mode "Translucent";
Powerup.Color "FFFFFF", 0.15;
Powerup.Duration -80;
Powerup.Strength 90;
Powerup.Mode "Additive";
Powerup.Color "FFFFFF", 0.1;
}
override void EndEffect()
{
@ -297,6 +297,7 @@ Class UTJumpBoots : Inventory replaces RadSuit
+INVENTORY.ALWAYSPICKUP;
Inventory.Amount 3;
Inventory.MaxAmount 3;
Inventory.InterHubAmount 3;
Inventory.PickupMessage "You picked up the AntiGrav boots.";
Inventory.PickupSound "boot/pickup";
Inventory.RespawnTics 1050;
@ -350,6 +351,7 @@ Class PowerJumpBoots_HighJump : PowerHighJump
{
Powerup.Strength 3;
Powerup.Duration int.max;
+INVENTORY.PERSISTENTPOWER;
}
}
Class PowerJumpBoots_IronFeet : PowerIronFeet
@ -358,6 +360,7 @@ Class PowerJumpBoots_IronFeet : PowerIronFeet
{
Powerup.Duration int.max;
Powerup.Color "00 00 00", 0.0;
+INVENTORY.PERSISTENTPOWER;
}
override void AbsorbDamage( int damage, Name damageType, out int newdamage )
{

View file

@ -23,9 +23,9 @@ Class PulseAmmo : Ammo
Tag "Pulse Cell";
Inventory.PickupMessage "You picked up a Pulse Cell.";
Inventory.Amount 25;
Inventory.MaxAmount 199;
Inventory.MaxAmount 200;
Ammo.BackpackAmount 50;
Ammo.BackpackMaxAmount 199;
Ammo.BackpackMaxAmount 400;
Ammo.DropAmount 10;
}
States
@ -142,7 +142,7 @@ Class PulseBall : Actor
Obituary "%o ate %k's burning plasma death.";
DamageType 'Pulsed';
RenderStyle "Add";
DamageFunction Random[Pulse](15,25);
DamageFunction Random[Pulse](20,30);
PROJECTILE;
+EXPLODEONWATER;
+SKYEXPLODE;
@ -315,12 +315,12 @@ Class PulseBolt : Actor
if ( !damagedactor )
{
accdamage = min(0.5*(level.time-lasthit),0.1);
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](65,75)*accdamage,'zapped');
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped');
accdamage = 0;
}
else if ( t.Results.HitActor != damagedactor )
{
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](65,75)*accdamage,'zapped');
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped');
accdamage = 0;
}
lasthit = level.time;
@ -328,10 +328,11 @@ Class PulseBolt : Actor
accdamage += 1./TICRATE;
if ( accdamage > 0.22 )
{
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](65,75)*accdamage,'zapped');
t.Results.HitActor.DamageMobj(self,target,Random[Pulse](70,80)*accdamage,'zapped');
accdamage = 0;
}
}
if ( t.Results.HitType == TRACE_HitWall ) t.Results.HitLine.RemoteActivate(tracer,t.Results.Side,SPAC_Impact,t.Results.HitPos);
int numpt = Random[Pulse](10,20)*!Random[Pulse](0,2);
for ( int i=0; i<numpt; i++ )
{

View file

@ -7,7 +7,7 @@ Class RipperAmmo : Ammo
Inventory.Amount 25;
Inventory.MaxAmount 75;
Ammo.BackpackAmount 50;
Ammo.BackpackMaxAmount 75;
Ammo.BackpackMaxAmount 150;
Ammo.DropAmount 10;
}
States
@ -58,7 +58,7 @@ Class Razor2 : Actor
Radius 2;
Height 2;
Speed 50;
DamageFunction Random[Ripper](20,30);
DamageFunction Random[Ripper](30,40);
DamageType 'Ripper';
Obituary "%k ripped a chunk of meat out of %o with the Ripper.";
BounceType "Doom";
@ -183,7 +183,7 @@ Class Razor2Alt : Razor2
{
Default
{
DamageFunction Random[Ripper](25,34);
DamageFunction Random[Ripper](40,60);
DamageType 'RipperAltDealth';
BounceType "None";
-CANBOUNCEWATER;
@ -199,7 +199,7 @@ Class Razor2Alt : Razor2
Spawn("Razor2AltLight",pos);
A_AlertMonsters();
A_SprayDecal("RazorBlast",20);
A_Explode(Random[Ripper](20,34),120);
A_Explode(Random[Ripper](30,50),120);
A_QuakeEx(3,3,3,10,0,180,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
int numpt = Random[Ripper](10,20);
Vector3 x = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));

View file

@ -7,7 +7,7 @@ Class ShockAmmo : Ammo
Inventory.Amount 10;
Inventory.MaxAmount 50;
Ammo.BackpackAmount 20;
Ammo.BackpackMaxAmount 50;
Ammo.BackpackMaxAmount 100;
Ammo.DropAmount 5;
}
States
@ -1021,6 +1021,17 @@ Class EnhancedShockAmmo : Ammo
Class EnhancedShockRifle : UTWeapon replaces InvulnerabilitySphere
{
int ticcnt;
override void Tick()
{
Super.Tick();
if ( !Owner ) return;
ticcnt++;
if ( ticcnt < 35 ) return;
ticcnt = 0;
DepleteAmmo(false,true,1);
}
action void A_SShockFire()
{
Weapon weap = Weapon(invoker);
@ -1073,6 +1084,9 @@ Class EnhancedShockRifle : UTWeapon replaces InvulnerabilitySphere
Weapon.AmmoType2 "EnhancedShockAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 25;
+WEAPON.AMMO_OPTIONAL;
+WEAPON.ALT_AMMO_OPTIONAL;
+WEAPON.CHEATNOTWEAPON;
}
States
{
@ -1084,20 +1098,27 @@ Class EnhancedShockRifle : UTWeapon replaces InvulnerabilitySphere
Ready:
ASMS ABCDEFGHIJKLMNO 1 A_WeaponReady(WRF_NOFIRE);
Idle:
ASMI A 1
{
A_CheckReload();
A_WeaponReady();
}
ASMI A 1 A_WeaponReady();
Wait;
Fire:
ASMI A 0 A_JumpIfNoAmmo("DryFire");
ASMF A 1 A_SShockFire();
ASMF BCDEFGHIJ 2;
Goto Idle;
AltFire:
ASMI A 0 A_JumpIfNoAmmo("DryFire");
ASMA A 1 A_SShockAlt();
ASMA BCDEFGHIJ 2;
Goto Idle;
DryFire:
ASMA I 3
{
A_PlaySound("sshock/dryfire",CHAN_WEAPON);
A_AlertMonsters();
}
ASMA J 4;
ASMI A 10;
Goto Idle;
Deselect:
ASMD ABCDEFG 1;
ASMD G 1 A_Lower(int.max);

View file

@ -7,7 +7,7 @@ Class RifleAmmo : Ammo
Inventory.Amount 10;
Inventory.MaxAmount 50;
Ammo.BackpackAmount 20;
Ammo.BackpackMaxAmount 50;
Ammo.BackpackMaxAmount 100;
Ammo.DropAmount 5;
}
States
@ -87,9 +87,9 @@ Class SniperRifle : UTWeapon
LineTrace(angle,10000,BulletSlope(),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = Random[Sniper](40,50);
int dmg = Random[Sniper](45,60);
if ( d.HitLocation.z >= (d.HitActor.pos.z+d.HitActor.height*0.8) )
dmg = d.HitActor.DamageMobj(invoker,self,dmg+65,'Decapitated');
dmg = d.HitActor.DamageMobj(invoker,self,dmg+70,'Decapitated');
else dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot');
if ( d.HitActor.bNOBLOOD )
{

View file

@ -370,6 +370,7 @@ Class Translocator : UTWeapon
Weapon.SlotNumber 1;
Weapon.SelectionOrder 10;
+WEAPON.NO_AUTO_SWITCH;
+WEAPON.CHEATNOTWEAPON;
}
States
{

View file

@ -7,7 +7,6 @@ Class UTPlayer : DoomPlayer
Default
{
Player.StartItem "Enforcer";
Player.StartItem "Translocator";
Player.StartItem "ImpactHammer";
Player.StartItem "MiniAmmo", 30;
Player.DamageScreenColor "FF 00 00", 1.0;
@ -755,9 +754,36 @@ Class UTMainHandler : StaticEventHandler
}
}
override void PlayerEntered( PlayerEvent e )
{
if ( CVar.GetCVar('flak_translocator').GetBool() )
players[e.playernumber].mo.GiveInventory("Translocator",1);
}
override void PlayerRespawned( PlayerEvent e )
{
if ( CVar.GetCVar('flak_translocator').GetBool() )
players[e.playernumber].mo.GiveInventory("Translocator",1);
}
override void NetworkProcess( ConsoleEvent e )
{
if ( e.Name ~== "refreshtrans" )
{
if ( CVar.GetCVar('flak_translocator').GetBool() )
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] ) players[i].mo.GiveInventory("Translocator",1);
}
else
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] ) players[i].mo.TakeInventory("Translocator",1);
}
}
}
override void ConsoleProcess( ConsoleEvent e )
{
if ( e.Name ~== "refreshmenu" ) StartMenu();
if ( e.Name ~== "refreshtrans" ) EventHandler.SendNetworkEvent("refreshtrans");
}
override void WorldTick()

View file

@ -335,7 +335,7 @@ Class UTHud : BaseStatusBar
CurX += 8*hudsize*HScale;
CurY += 14*hudsize*HScale;
if ( !showstatus && b ) DrawColor = GoldColor;
UTDrawBigNum(Min(199,allarmor),hudsize);
UTDrawBigNum(allarmor,hudsize);
DrawColor = WhiteColor;
if ( !showstatus && !showweapons )
{
@ -358,14 +358,14 @@ Class UTHud : BaseStatusBar
DrawColor = LerpColor(WhiteColor,blinkcolor,blinky);
CurX += 8*hudsize*HScale;
CurY += 14*hudsize*HScale;
UTDrawBigNum(max(0,CPlayer.mo.Health),hudsize);
UTDrawBigNum(Max(0,CPlayer.mo.Health),hudsize);
}
else
{
UTDrawTintedTex(Boxes[2],hudsize);
CurX += 8*hudsize*HScale;
CurY += 14*hudsize*HScale;
UTDrawBigNum(Clamp(CPlayer.mo.Health,0,199),hudsize);
UTDrawBigNum(Max(0,CPlayer.mo.Health),hudsize);
}
}
private void DrawWeapons()

View file

@ -8,7 +8,7 @@ Class WarheadAmmo : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 2;
Ammo.BackpackMaxAmount 3;
Ammo.DropAmount 1;
Inventory.RespawnTics 2100;
}