Minor fixes.

This commit is contained in:
Mari the Deer 2020-10-31 01:44:05 +01:00
commit 43f616b17b
9 changed files with 54 additions and 74 deletions

View file

@ -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.";

View file

@ -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.";

View file

@ -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)";

View file

@ -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;
}
}

View file

@ -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<MAXPLAYERS; i++ )
{
if ( !playeringame[i] || !players[i].mo ) continue;
np++;
if ( players[i].mo.CountInv("ExplodiumGun") > 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';

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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;