From 6c096e1b0f9dc3ebb8aac8941a190b3ee6e91f5e Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sun, 3 Jun 2018 16:04:00 +0200 Subject: [PATCH] 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). --- cvarinfo.txt | 1 + menudef.txt | 2 ++ sndinfo.txt | 1 + sounds/aclick2.ogg | Bin 0 -> 5047 bytes zscript/biorifle.zsc | 6 +++--- zscript/chainsaw.zsc | 4 ++-- zscript/eightball.zsc | 8 ++++---- zscript/flakcannon.zsc | 8 ++++---- zscript/impacthammer.zsc | 4 ++-- zscript/minigun.zsc | 6 +++--- zscript/powerups.zsc | 11 +++++++---- zscript/pulsegun.zsc | 13 +++++++------ zscript/ripper.zsc | 8 ++++---- zscript/shockrifle.zsc | 33 +++++++++++++++++++++++++++------ zscript/sniperrifle.zsc | 6 +++--- zscript/translocator.zsc | 1 + zscript/utcommon.zsc | 28 +++++++++++++++++++++++++++- zscript/uthud.zsc | 6 +++--- zscript/warheadlauncher.zsc | 2 +- 19 files changed, 102 insertions(+), 46 deletions(-) create mode 100644 sounds/aclick2.ogg diff --git a/cvarinfo.txt b/cvarinfo.txt index e1d998c..938fe54 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -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; diff --git a/menudef.txt b/menudef.txt index fa48fbd..f1e3b8a 100644 --- a/menudef.txt +++ b/menudef.txt @@ -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" diff --git a/sndinfo.txt b/sndinfo.txt index 1a5bc75..92965c6 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -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 diff --git a/sounds/aclick2.ogg b/sounds/aclick2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..daeedf227b43fc44b32c59810ac48c81f87d9ced GIT binary patch literal 5047 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 (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'); diff --git a/zscript/eightball.zsc b/zscript/eightball.zsc index e54e4f8..c192ddc 100644 --- a/zscript/eightball.zsc +++ b/zscript/eightball.zsc @@ -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; diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index b28faaa..b415982 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -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(); diff --git a/zscript/impacthammer.zsc b/zscript/impacthammer.zsc index 31a12ad..19e8dfc 100644 --- a/zscript/impacthammer.zsc +++ b/zscript/impacthammer.zsc @@ -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; } diff --git a/zscript/minigun.zsc b/zscript/minigun.zsc index 4ef5870..84c7b0b 100644 --- a/zscript/minigun.zsc +++ b/zscript/minigun.zsc @@ -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 ) { diff --git a/zscript/powerups.zsc b/zscript/powerups.zsc index 84c24f2..78de916 100644 --- a/zscript/powerups.zsc +++ b/zscript/powerups.zsc @@ -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 ) { diff --git a/zscript/pulsegun.zsc b/zscript/pulsegun.zsc index a553376..e2f863c 100644 --- a/zscript/pulsegun.zsc +++ b/zscript/pulsegun.zsc @@ -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= (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 ) { diff --git a/zscript/translocator.zsc b/zscript/translocator.zsc index cefa5b6..9872a1b 100644 --- a/zscript/translocator.zsc +++ b/zscript/translocator.zsc @@ -370,6 +370,7 @@ Class Translocator : UTWeapon Weapon.SlotNumber 1; Weapon.SelectionOrder 10; +WEAPON.NO_AUTO_SWITCH; + +WEAPON.CHEATNOTWEAPON; } States { diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index 19a8ca9..573a030 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -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