From 43f616b17bad0d5f4093ad7b2d8f8cedfaaf6dbb Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sat, 31 Oct 2020 01:44:05 +0100 Subject: [PATCH] Minor fixes. --- language.def_base | 2 +- language.es_base | 2 +- language.version | 2 +- zscript/swwm_ammo.zsc | 15 ++++--- zscript/swwm_handler.zsc | 89 +++++++++++++------------------------- zscript/swwm_inventory.zsc | 5 ++- zscript/swwm_player.zsc | 8 ++-- zscript/swwm_powerup.zsc | 2 +- zscript/swwm_splode.zsc | 3 ++ 9 files changed, 54 insertions(+), 74 deletions(-) diff --git a/language.def_base b/language.def_base index 7a1d10128..316e373c2 100644 --- a/language.def_base +++ b/language.def_base @@ -912,7 +912,7 @@ SWWM_SELLEXTRA = "\cf%s\cf sold an extra %s\cf. +%d\c-"; // intermission tips SWWM_NINTERTIP = "69"; SWWM_INTERTIP = "Tip #%d:"; -SWWM_INTERTIP1 = "The Demolitionist is immune to drowning, poison and even fall damage (excluding instant kill pits, e.g. in Hexen)."; +SWWM_INTERTIP1 = "The Demolitionist is immune to drowning, poison and even fall damage (excluding instant kill pits)."; SWWM_INTERTIP2 = "The Explodium Gun's altfire has an explosive yield proportional to the bullets left in the mag."; SWWM_INTERTIP3 = "Your fuel regenerates over time, but the more you use the impulsor, the longer this will take."; SWWM_INTERTIP4 = "The Pusher has a chance to slip off your hands on altfire if it doesn't land a hit, however as a ranged attack it may still be effective."; diff --git a/language.es_base b/language.es_base index bea3f5d7d..9be14e4e4 100644 --- a/language.es_base +++ b/language.es_base @@ -848,7 +848,7 @@ SWWM_NEWLORE = "Hay nuevas entradas disponibles en la Biblioteca."; SWWM_SELLEXTRA = "\cf%s\cf vendió un %s\cf extra. +%d\c-"; // intermission tips SWWM_INTERTIP = "Consejo #%d:"; -SWWM_INTERTIP1 = "La Demolicionista es inmune al ahogamiento, veneno e incluso daño por caída (excluyendo hoyos de muerte instantánea, por ejemplo en Hexen)."; +SWWM_INTERTIP1 = "La Demolicionista es inmune al ahogamiento, veneno e incluso daño por caída (excluyendo hoyos de muerte instantánea)."; SWWM_INTERTIP2 = "El fuego secundario de la Pistola de Explodium tiene una carga explosiva proporcional al número de balas restantes en el cargador."; SWWM_INTERTIP3 = "Tu combustible se regenera con el tiempo, pero cuanto más uses el propulsor, más tardará."; SWWM_INTERTIP4 = "El Pusher puede resbalarse de tus manos con el fuego secundario si no le da a nada, sin embargo esto puede ser efectivo como ataque a distancia."; diff --git a/language.version b/language.version index 4235b8d6f..b037bdcc8 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r586 \cu(Fri 30 Oct 13:21:11 CET 2020)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r587 \cu(Sat 31 Oct 01:44:05 CET 2020)"; diff --git a/zscript/swwm_ammo.zsc b/zscript/swwm_ammo.zsc index c4b86ac27..8949f67ff 100644 --- a/zscript/swwm_ammo.zsc +++ b/zscript/swwm_ammo.zsc @@ -1293,6 +1293,7 @@ Class CandyGunSpares : Ammo Inventory.Icon "graphics/HUD/Icons/W_CandyGun.png"; Inventory.Amount 1; Inventory.MaxAmount 4; + Ammo.BackpackAmount 0; Ammo.BackpackMaxAmount 4; } } @@ -1495,8 +1496,8 @@ Class FabricatorTier1 : AmmoFabricator Inventory.Icon "graphics/HUD/Icons/I_Fabricator1.png"; Inventory.PickupMessage "$T_FABRICATOR1"; Inventory.MaxAmount 20; - AmmoFabricator.Budget 5000; - AmmoFabricator.PerType 2; + AmmoFabricator.Budget 3000; + AmmoFabricator.PerType 1; AmmoFabricator.MaxUnitPrice 2500; } } @@ -1511,8 +1512,8 @@ Class FabricatorTier2 : AmmoFabricator Inventory.PickupMessage "$T_FABRICATOR2"; Inventory.MaxAmount 15; AmmoFabricator.Budget 15000; - AmmoFabricator.PerType 4; - AmmoFabricator.MaxUnitPrice 10000; + AmmoFabricator.PerType 2; + AmmoFabricator.MaxUnitPrice 12000; } } Class FabricatorTier3 : AmmoFabricator @@ -1525,8 +1526,8 @@ Class FabricatorTier3 : AmmoFabricator Inventory.Icon "graphics/HUD/Icons/I_Fabricator3.png"; Inventory.PickupMessage "$T_FABRICATOR3"; Inventory.MaxAmount 10; - AmmoFabricator.Budget 150000; - AmmoFabricator.PerType 8; + AmmoFabricator.Budget 80000; + AmmoFabricator.PerType 4; AmmoFabricator.MaxUnitPrice 80000; } } @@ -1540,7 +1541,7 @@ Class FabricatorTier4 : AmmoFabricator Inventory.MaxAmount 5; AmmoFabricator.Budget int.max; AmmoFabricator.PerType int.max; - AmmoFabricator.MaxUnitPrice int.max; + AmmoFabricator.MaxUnitPrice 1000000; -INVENTORY.AUTOACTIVATE; } } diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index a66c42146..c77534bf8 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -1341,6 +1341,19 @@ Class SWWMHandler : EventHandler e.Replacee = 'Sorcerer2'; } + // do any players not own dual guns yet + private bool ShouldSpawnDualExpl() + { + int np = 0, ng = 0; + for ( int i=0; i 1 ) ng++; + } + return (ng < np); + } + override void CheckReplacement( ReplaceEvent e ) { // respect final replacements @@ -1385,30 +1398,22 @@ Class SWWMHandler : EventHandler else if ( e.Replacee is 'KeyBlue' ) e.Replacement = 'SWWMKeyBlue'; else if ( e.Replacee is 'KeyYellow' ) e.Replacement = 'SWWMKeyYellow'; else if ( e.Replacee.GetClassName() == 'KeyRed' ) e.Replacement = 'SWWMKeyRed'; - else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) e.Replacement = 'PusherWeapon'; + else if ( (e.Replacee is 'Chainsaw') || (e.Replacee is 'Gauntlets') || (e.Replacee is 'FWeapAxe') ) + { + if ( ShouldSpawnDualExpl() ) e.Replacement = Random[Replacements](0,1)?'ExplodiumGun':'PusherWeapon'; + else e.Replacement = 'PusherWeapon'; + } else if ( (e.Replacee is 'Fist') || (e.Replacee is 'Staff') ) e.Replacement = 'DeepImpact'; else if ( (e.Replacee is 'Pistol') || (e.Replacee is 'GoldWand') || (e.Replacee is 'FWeapFist') || (e.Replacee is 'CWeapMace') || (e.Replacee is 'MWeapWand') ) e.Replacement = 'ExplodiumGun'; else if ( (e.Replacee is 'Shotgun') || (e.Replacee is 'CWeapStaff') ) e.Replacement = 'Spreadgun'; else if ( (e.Replacee is 'SuperShotgun') || (e.Replacee is 'MWeapFrost') ) e.Replacement = 'Wallbuster'; - else if ( e.Replacee is 'Crossbow' ) - { - if ( Random[Replacements](0,2) ) e.Replacement = 'Spreadgun'; - else e.Replacement = 'Wallbuster'; - } - else if ( (e.Replacee is 'Chaingun') || (e.Replacee is 'Blaster') || (e.Replacee is 'FWeapHammer') ) e.Replacement = 'Eviscerator'; - else if ( (e.Replacee is 'RocketLauncher') || (e.Replacee is 'PhoenixRod') || (e.Replacee is 'FWeaponPiece3') ) e.Replacement = 'Hellblazer'; - else if ( (e.Replacee is 'PlasmaRifle') || (e.Replacee is 'SkullRod') ) - { - if ( Random[Replacements](0,2) ) e.Replacement = 'Sparkster'; - else e.Replacement = 'SilverBullet'; - } + else if ( e.Replacee is 'Crossbow' ) e.Replacement = Random[Replacements](0,2)?'Spreadgun':'Wallbuster'; + else if ( (e.Replacee is 'Chaingun') || (e.Replacee is 'Blaster') || (e.Replacee is 'FWeapHammer') ) e.Replacement = 'Hellblazer'; + else if ( (e.Replacee is 'RocketLauncher') || (e.Replacee is 'PhoenixRod') || (e.Replacee is 'FWeaponPiece3') ) e.Replacement = 'Eviscerator'; + else if ( (e.Replacee is 'PlasmaRifle') || (e.Replacee is 'SkullRod') ) e.Replacement = Random[Replacements](0,2)?'Sparkster':'SilverBullet'; else if ( e.Replacee is 'CWeapFlame' ) e.Replacement = 'Sparkster'; else if ( e.Replacee is 'MWeapLightning' ) e.Replacement = 'SilverBullet'; - else if ( (e.Replacee is 'BFG9000') || (e.Replacee is 'Mace') ) - { - if ( Random[Replacements](0,2) ) e.Replacement = 'CandyGun'; - else e.Replacement = 'Ynykron'; - } + else if ( (e.Replacee is 'BFG9000') || (e.Replacee is 'Mace') ) e.Replacement = Random[Replacements](0,2)?'CandyGun':'Ynykron'; else if ( e.Replacee is 'CWeaponPiece2' ) e.Replacement = 'CandyGun'; else if ( e.Replacee is 'MWeaponPiece1' ) e.Replacement = 'Ynykron'; else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') ) @@ -1499,35 +1504,10 @@ Class SWWMHandler : EventHandler break; } } - else if ( e.Replacee == 'ClipBox' ) - { - if ( Random[Replacements](0,3) ) e.Replacement = 'EvisceratorShell'; - else if ( Random[Replacements](0,4) ) e.Replacement = 'EvisceratorTrioSpawn'; - else e.Replacement = 'EvisceratorSixPack'; - } + else if ( e.Replacee == 'ClipBox' ) e.Replacement = Random[Replacements](0,3)?'EvisceratorShell':Random[Replacements](0,4)?'EvisceratorTrioSpawn':'EvisceratorSixPack'; else if ( e.Replacee == 'BlasterAmmo' ) e.Replacement = 'EvisceratorShell'; - else if ( e.Replacee == 'BlasterHefty' ) - { - if ( Random[Replacements](0,4) ) e.Replacement = 'EvisceratorTrioSpawn'; - else e.Replacement = 'EvisceratorSixPack'; - } - else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') ) - { - switch ( Random[Replacements](0,6) ) - { - case 0: - case 1: - case 2: - case 3: - e.Replacement = 'HellblazerMissiles'; - break; - case 4: - case 5: - case 6: - e.Replacement = 'HellblazerCrackshots'; - break; - } - } + else if ( e.Replacee == 'BlasterHefty' ) e.Replacement = Random[Replacements](0,4)?'EvisceratorTrioSpawn':'EvisceratorSixPack'; + else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') ) e.Replacement = Random[Replacements](0,2)?'HellblazerMissiles':'HellblazerCrackshots'; else if ( (e.Replacee == 'RocketBox') || (e.Replacee == 'PhoenixRodHefty') || (e.Replacee == 'MaceHefty') ) { switch ( Random[Replacements](0,11) ) @@ -1561,7 +1541,8 @@ Class SWWMHandler : EventHandler } else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') ) { - if ( Random[Replacements](0,3) ) e.Replacement = 'SparkUnit'; + if ( Random[Replacements](0,2) ) e.Replacement = Random[Replacements](0,2)?'HellblazerRavagers':'HellblazerWarheads'; + else if ( Random[Replacements](0,3) ) e.Replacement = 'SparkUnit'; else if ( !Random[Replacements](0,3) ) e.Replacement = 'CandyGunBullets'; else e.Replacement = Random[Replacements](0,2)?'SilverBullets':'SilverBullets2'; } @@ -1592,17 +1573,9 @@ Class SWWMHandler : EventHandler else if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'HealthNuggetItem'; else if ( e.Replacee == 'Stimpack' ) e.Replacement = 'TetraHealthItem'; else if ( e.Replacee == 'Medikit' ) e.Replacement = 'CubeHealthItem'; - else if ( e.Replacee == 'ArtiHealth' ) - { - if ( gameinfo.gametype&GAME_Heretic && Random[Replacements](0,1) ) e.Replacement = 'CubeHealthItem'; - else e.Replacement = 'TetraHealthItem'; - } - else if ( (e.Replacee == 'Soulsphere') || (e.Replacee == 'ArtiSuperHealth') ) - { - if ( gameinfo.gametype&GAME_Hexen ) e.Replacement = 'CubeHealthItem'; - else e.Replacement = 'RefresherItem'; - } - else if ( e.Replacee == 'ArtiHealingRadius' ) e.Replacement = 'RefresherItem'; + else if ( e.Replacee == 'ArtiHealth' ) e.Replacement = Random[Replacements](0,1)?'CubeHealthItem':'TetraHealthItem'; + else if ( (e.Replacee == 'Soulsphere') || (e.Replacee == 'ArtiSuperHealth') ) e.Replacement = 'RefresherItem'; + else if ( e.Replacee == 'ArtiHealingRadius' ) e.Replacement = 'SWWMNothing'; else if ( (e.Replacee == 'Megasphere') || (e.Replacee == 'ArtiEgg') || (e.Replacee == 'PlatinumHelm') ) e.Replacement = 'GrilledCheeseSandwich'; else if ( (e.Replacee == 'Blursphere') || (e.Replacee == 'ArtiInvisibility') || (e.Replacee == 'AmuletOfWarding') ) e.Replacement = 'GhostArtifact'; else if ( e.Replacee == 'Radsuit' ) e.Replacement = 'EBarrier'; diff --git a/zscript/swwm_inventory.zsc b/zscript/swwm_inventory.zsc index 5d6eeba97..6f27f14ef 100644 --- a/zscript/swwm_inventory.zsc +++ b/zscript/swwm_inventory.zsc @@ -1144,7 +1144,7 @@ Class SWWMWeapon : Weapon abstract if ( ch_hp.GetInt() >= 2 ) { int hp = Clamp(Owner.Health,0,200); - double sat = (hp<150)?1.:(1.-(health-150)/100.); + double sat = (hp<150)?1.:(1.-(hp-150)/100.); Vector3 rgb = SWWMUtility.HSVtoRGB((hp/300.,sat,1.)); col = Color(int(rgb.x*255),int(rgb.y*255),int(rgb.z*255)); } @@ -1165,7 +1165,8 @@ Class SWWMWeapon : Weapon abstract else if ( hp < .85 ) col = Color(int((.6-hp)*255/.3),255,0); else col = Color(0,255,0); } - return ctr.Results.HitPos, col; + if ( ctr.Results.HitType == TRACE_HitNone ) return level.Vec3Offset(origin,x*10000.), col; + else return ctr.Results.HitPos, col; } // where the trace is coming from relative to eyes virtual clearscope Vector3 GetTraceOffset() const diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 84436972c..be433a9ee 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -80,6 +80,7 @@ Class Demolitionist : PlayerPawn DamageFactor "Drowning", 0.; DamageFactor "Poison", 0.; DamageFactor "PoisonCloud", 0.; + DamageFactor "Falling", 0.; Demolitionist.DashFuel 240.; +NOBLOOD; +DONTGIB; @@ -541,6 +542,10 @@ Class Demolitionist : PlayerPawn override void Tick() { Super.Tick(); + // can't be poisoned + PoisonDurationReceived = 0; + PoisonPeriodReceived = 0; + PoisonDamageReceived = 0; if ( !player ) return; if ( !selflight ) { @@ -990,9 +995,6 @@ Class Demolitionist : PlayerPawn // no damage whatsoever if ( scriptedinvul ) return 0; - // completely nullify non-lethal fall damage - if ( (mod == 'Falling') && (damage < TELEFRAG_DAMAGE) ) - damage = 0; if ( damage <= 0 ) { lastdamage = 0; diff --git a/zscript/swwm_powerup.zsc b/zscript/swwm_powerup.zsc index fd86b39ed..889a1a77e 100644 --- a/zscript/swwm_powerup.zsc +++ b/zscript/swwm_powerup.zsc @@ -91,7 +91,7 @@ Class GrilledCheeseSandwich : Inventory } if ( (Owner.Health-damage <= 0) && (Amount > 0) ) { - if ( (damageType == 'Falling') || (damageType == 'InstantDeath') ) + if ( damageType == 'InstantDeath' ) SafeTeleport(); // get out of pits newdamage = 0; if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA); diff --git a/zscript/swwm_splode.zsc b/zscript/swwm_splode.zsc index f955f3721..27d1da000 100644 --- a/zscript/swwm_splode.zsc +++ b/zscript/swwm_splode.zsc @@ -358,6 +358,9 @@ Class ExplodiumGun : SWWMWeapon DualExplodiumGun(SisterWeapon).chambered = eg.chambered; DualExplodiumGun(SisterWeapon).clipcount = eg.clipcount; } + // autoswitch if enabled + if ( !Owner.player.GetNeverSwitch() ) + Owner.player.PendingWeapon = SisterWeapon; item.bPickupGood = true; } return true;