Remove fat chodes, Silver Bullet reimplemented.

This commit is contained in:
Mari the Deer 2022-10-07 20:13:10 +02:00
commit 62d10ed11c
46 changed files with 333 additions and 1413 deletions

View file

@ -175,12 +175,12 @@ Class SWWMStatusBar : BaseStatusBar
int tclabel, tcvalue, tcextra, tccompl, tcsucks;
String tclabel_s, tcextra_s;
int AmmoFlash[19]; // flash when new ammo is received
int AmmoOldAmounts[19]; // to detect when to flash
int AmmoMaxFlash[19]; // flash when ammo max amount changes
int AmmoOldMaxAmounts[19]; // to detect when to flash
Class<SWWMAmmo> AmmoSlots[19]; // ammo type on each slot
String AmmoNames[19]; // ammo 4-letter names
int AmmoFlash[18]; // flash when new ammo is received
int AmmoOldAmounts[18]; // to detect when to flash
int AmmoMaxFlash[18]; // flash when ammo max amount changes
int AmmoOldMaxAmounts[18]; // to detect when to flash
Class<SWWMAmmo> AmmoSlots[18]; // ammo type on each slot
String AmmoNames[18]; // ammo 4-letter names
int HealthFlash; // flash when healing
int LastHealth; // to detect when to flash
int LagHealth[10]; // for delayed decay bar
@ -944,7 +944,7 @@ Class SWWMStatusBar : BaseStatusBar
for ( int i=9; i>0; i-- )
LagHealth[i] = LagHealth[i-1];
// ammo updates
for ( int i=0; i<19; i++ )
for ( int i=0; i<18; i++ )
{
let a = SWWMAmmo(CPlayer.mo.FindInventory(AmmoSlots[i]));
int amt = 0;
@ -1299,14 +1299,13 @@ Class SWWMStatusBar : BaseStatusBar
AmmoSlots[8] = 'SparksterBAmmo';
AmmoSlots[9] = 'SparksterRAmmo';
AmmoSlots[10] = 'SilverBulletAmmo';
AmmoSlots[11] = 'SilverBulletAmmo2';
AmmoSlots[12] = 'RayAmmo';
AmmoSlots[13] = 'CandyGunAmmo';
AmmoSlots[14] = 'CandyGunSpares';
AmmoSlots[15] = 'MisterAmmo';
AmmoSlots[16] = 'MisterGAmmo';
AmmoSlots[17] = 'YnykronAmmo';
AmmoSlots[18] = 'UltimateAmmo';
AmmoSlots[11] = 'RayAmmo';
AmmoSlots[12] = 'CandyGunAmmo';
AmmoSlots[13] = 'CandyGunSpares';
AmmoSlots[14] = 'MisterAmmo';
AmmoSlots[15] = 'MisterGAmmo';
AmmoSlots[16] = 'YnykronAmmo';
AmmoSlots[17] = 'UltimateAmmo';
AmmoNames[0] = "SHOT";
AmmoNames[1] = "GOLD";
AmmoNames[2] = "SCRW";
@ -1318,14 +1317,13 @@ Class SWWMStatusBar : BaseStatusBar
AmmoNames[8] = "KINY";
AmmoNames[9] = "NOKR";
AmmoNames[10] = "RIFL";
AmmoNames[11] = "CHOD";
AmmoNames[12] = "BOLT";
AmmoNames[13] = "CAND";
AmmoNames[14] = "CGUN";
AmmoNames[15] = "MSTR";
AmmoNames[16] = "MGRN";
AmmoNames[17] = "CRYS";
AmmoNames[18] = "ULTI";
AmmoNames[11] = "BOLT";
AmmoNames[12] = "CAND";
AmmoNames[13] = "CGUN";
AmmoNames[14] = "MSTR";
AmmoNames[15] = "MGRN";
AmmoNames[16] = "CRYS";
AmmoNames[17] = "ULTI";
for ( int i=0; i<18; i++ )
{
AmmoFlash[i] = 0;
@ -2694,7 +2692,7 @@ Class SWWMStatusBar : BaseStatusBar
OwnedWeapons.Push(SWWMWeapon(i));
}
String str;
for ( int i=18; i>=0; i-- )
for ( int i=17; i>=0; i-- )
{
let a = AmmoSlots[i];
// check if owned

View file

@ -328,9 +328,9 @@ Class SilverBulletAmmo : SWWMAmmo
SWWMAmmo.PickupTag "XSBMAG";
Stamina 70000;
Inventory.Amount 1;
Inventory.MaxAmount 3;
Inventory.MaxAmount 5;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 6;
Ammo.BackpackMaxAmount 11;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "SilverBullets";
+FLOATBOB;
@ -347,33 +347,6 @@ Class SilverBulletAmmo : SWWMAmmo
}
}
Class SilverBulletAmmo2 : SWWMAmmo
{
Default
{
Tag "$T_FCBMAG";
SWWMAmmo.PickupTag "FCBMAG";
Stamina 80000;
Inventory.Amount 1;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "SilverBullets2";
+FLOATBOB;
FloatBobStrength 0.25;
Radius 10;
Height 26;
Accuracy 80;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class SilverBullets : MagAmmo
{
Default
@ -397,7 +370,7 @@ Class SilverBullets : MagAmmo
Stop;
}
}
Class SilverBullets_2 : SilverBullets
Class SilverBullets2 : SilverBullets
{
Default
{
@ -406,47 +379,7 @@ Class SilverBullets_2 : SilverBullets
Height 24;
}
}
Class SilverBullets_3 : SilverBullets
{
Default
{
Inventory.Amount 3;
Radius 6;
Height 24;
}
}
Class SilverBullets2 : MagAmmo
{
Default
{
Tag "$T_FCBBULLET";
MagAmmo.PickupTag "FCBBULLET";
Stamina -15000;
MagAmmo.ParentAmmo "SilverBulletAmmo2";
MagAmmo.ClipSize 5;
Inventory.MaxAmount 5;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
Height 22;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class SilverBullets2_2 : SilverBullets2
{
Default
{
Inventory.Amount 2;
Radius 6;
Height 24;
}
}
Class SilverBullets2_3 : SilverBullets2
Class SilverBullets3 : SilverBullets
{
Default
{

View file

@ -216,11 +216,7 @@ Class SWWMCellAmmoBig : SWWMAmmoSpawner
bool aex = SWWMUtility.ItemExists('SilverBullet',ownedonly:enemydrop),
bex = SWWMUtility.ItemExists('RayKhom',ownedonly:enemydrop);
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return Random[Replacements](0,2)?'RayBolt5':'RayAmmo';
if ( aex )
{
if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBullets_2':'SilverBullets2_2';
return Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2';
}
if ( aex ) return Random[Replacements](0,3)?'SilverBullets3':'SilverBulletAmmo';
}
bool aex = SWWMUtility.ItemExists('Sparkster',ownedonly:enemydrop),
bex = SWWMUtility.ItemExists('ModernSparkster',ownedonly:enemydrop);

View file

@ -891,11 +891,11 @@ Class RewardCandyGun : ChanceboxReward
override void SpawnReward( Vector3 pos )
{
SpawnCenter(pos,"CandyGun");
SpawnCircle(pos,6,"CandyGunBullets");
SpawnCircle(pos,7,"CandyGunBullets");
}
}
// TODO ray-khom bolts all over
// them silver bullets, of two types
// them silver bullets
Class RewardSilverBullets : ChanceboxReward
{
override bool CheckRequirements()
@ -905,7 +905,7 @@ Class RewardSilverBullets : ChanceboxReward
override void SpawnReward( Vector3 pos )
{
SpawnCircle(pos,3,"SilverBullets2");
SpawnCircle(pos,4,"SilverBullets");
SpawnCircle(pos,6,"SilverBullets",3.);
}
}

View file

@ -174,7 +174,7 @@ Class SWWMStats : SWWMStaticThinker
else if ( (inflictor is 'HellblazerMissile') || (inflictor is 'HellblazerArm') ) which = 'Hellblazer';
else if ( (inflictor is 'QuadProj') || (inflictor is 'QuadExplArm') || (inflictor is 'OnFire') ) which = 'Quadravol';
else if ( (inflictor is 'BigBiospark') || (inflictor is 'BiosparkBall') || (inflictor is 'BiosparkBeamImpact') || (inflictor is 'BiosparkComboImpact') || (inflictor is 'BiosparkComboImpactSub') || (inflictor is 'BiosparkBeam') || (inflictor is 'BiosparkArc') || (inflictor is 'BiosparkCore') ) which = 'Sparkster';
else if ( (inflictor is 'SilverAirRip') || (inflictor is 'SilverAirRip2') || (inflictor is 'SilverImpact') || (inflictor is 'FatChodeImpact') || (inflictor is 'FatChodeExplosionArm') ) which = 'SilverBullet';
else if ( (inflictor is 'SilverAirRip') || (inflictor is 'SilverImpact') ) which = 'SilverBullet';
else if ( (inflictor is 'CandyBeam') || (inflictor is 'CandyPop') || (inflictor is 'CandyMagArm') || (inflictor is 'CandyGunProj') || (inflictor is 'CandyMagProj') || (inflictor is 'CandyBulletImpact') ) which = 'CandyGun';
else if ( (inflictor is 'MisterBulletImpact') || (inflictor is 'MisterPop') || (inflictor is 'MisterFuzzy') || (inflictor is 'MisterGrenade') || (inflictor is 'MisterRailBeam') ) which = 'MisterRifle';
else if ( (inflictor is 'YnykronBeam') || (inflictor is 'YnykronImpact') || (inflictor is 'YnykronSingularity') || (inflictor is 'YnykronCloud') || (inflictor is 'YnykronVoidBeam') || (inflictor is 'YnykronLightningArc') || (inflictor is 'YnykronLightningImpact') ) which = 'Ynykron';

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,6 @@ Class SilverBulletCasing : SWWMCasing
BounceSound "silverbullet/casing";
}
}
Class SilverBulletCasing2 : SilverBulletCasing {}
Class SilverBulletMag : SWWMCasing
{
@ -36,7 +35,6 @@ Class SilverBulletMag : SWWMCasing
Stop;
}
}
Class SilverBulletMag2 : SilverBulletMag {}
Class SilverAirRip : Actor
{
@ -83,17 +81,6 @@ Class SilverAirRip : Actor
Stop;
}
}
Class SilverAirRip2 : SilverAirRip
{
Default
{
Obituary "$O_SILVERBULLET2";
}
override void Explode()
{
SWWMUtility.DoExplosion(self,20,2000,30,ignoreme:target);
}
}
Class SilverImpact : Actor
{
@ -178,246 +165,3 @@ Class SilverImpact : Actor
Stop;
}
}
Class ExploLight3 : PaletteLight
{
Default
{
ReactionTime 30;
Args 0,0,0,250;
}
}
Class FatChodeRing : Actor
{
Default
{
RenderStyle "Add";
Scale 3.;
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOBLOCKMAP;
+FORCEXYBILLBOARD;
+NOTELEPORT;
+NOINTERACTION;
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
XRG0 ABCDEFGHIJKLMNOPQRSTUVWX 1 Bright A_SetScale(scale.x*1.06);
Stop;
}
}
Class FatChodeImpact : Actor
{
double realangle, realpitch;
Default
{
Obituary "$O_SILVERBULLET2";
DamageType 'Explodium';
RenderStyle "Add";
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOBLOCKMAP;
+FORCEXYBILLBOARD;
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+NOTELEPORT;
+NOINTERACTION;
Scale 4.5;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
SWWMUtility.DoExplosion(self,600,40000,250,120,DE_THRUWALLS|DE_EXTRAZTHRUST);
A_AlertMonsters(swwm_uncapalert?0:8000);
A_QuakeEx(7,7,7,50,0,2000,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:800,rollIntensity:1.);
A_StartSound("silverbullet/chode",CHAN_VOICE,CHANF_DEFAULT,1.,.35);
A_SprayDecal("BigPock",-64);
A_SprayDecal("HugeWallCrack",-64);
A_SprayDecal("WumboRocketBlast",-64);
Scale *= FRandom[ExploS](0.8,1.1);
Scale.x *= RandomPick[ExploS](-1,1);
Scale.y *= RandomPick[ExploS](-1,1);
int numpt = Random[Silverbullet](15,25);
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (x+SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*.4).unit()*FRandom[Silverbullet](.4,2.);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.scale *= 1.8;
s.special1 = Random[Silverbullet](1,4);
s.SetShade(Color(1,1,1)*Random[Silverbullet](96,192));
}
numpt = Random[Silverbullet](6,9);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*FRandom[Silverbullet](2,8);
let s = Spawn("SWWMSpark",pos);
s.scale *= 1.3;
s.vel = pvel;
}
numpt = Random[Silverbullet](10,15);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (x+SWWMUtility.Vec3FromAngles(FRandom[Silverbullet](0,360),FRandom[Silverbullet](-90,90))*.6).unit()*FRandom[Silverbullet](6,20);
let s = Spawn("SWWMChip",pos);
s.scale *= 1.6;
s.vel = pvel;
}
numpt = Random[Silverbullet](16,20);
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("FatChodeExtraArm",pos);
s.target = target;
}
numpt = Random[Silverbullet](8,10);
Vector3 y, z, dir;
double a, s;
[x, y, z] = swwm_CoordUtil.GetAxes(realpitch,realangle,0);
for ( int i=0; i<numpt; i++ )
{
let e = Spawn("FatChodeExplosionArm",pos);
e.target = target;
a = FRandom[Silverbullet](0,360);
s = FRandom[Silverbullet](0,.2);
dir = SWWMUtility.ConeSpread(x,y,z,a,s);
e.angle = atan2(dir.y,dir.x);
e.pitch = asin(-dir.z);
}
Spawn("ExploLight3",pos);
Spawn("FatChodeRing",pos);
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
XEX1 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ 1 Bright;
Stop;
}
}
Class FatChodeExtraArm : ExplodiumMagArm
{
Default
{
Obituary "$O_SILVERBULLET2";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
vel *= 1.5;
}
}
Class FatChodeExplosionTrail : Actor
{
Default
{
RenderStyle "Add";
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOBLOCKMAP;
+FORCEXYBILLBOARD;
+NOTELEPORT;
+NOINTERACTION;
Scale 3.;
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
XEX1 ACEGIKMOQSUWY[ 1 Bright;
Stop;
}
}
Class FatChodeExplosionArm : Actor
{
Default
{
Obituary "$O_SILVERBULLET2";
DamageType 'Explodium';
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOBLOCKMAP;
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+NOINTERACTION;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
reactiontime = Random[ExploS](15,20);
vel = SWWMUtility.Vec3FromAngles(angle,pitch)*FRandom[ExploS](20.,30.);
}
States
{
Spawn:
TNT1 A 1
{
if ( !(ReactionTime%2) )
SWWMUtility.DoExplosion(self,10+reactiontime,8000+1500*reactiontime,80+5*reactiontime,50,DE_THRUWALLS);
if ( level.IsPointInLevel(pos) )
{
A_SprayDecal("HugeRocketBlast",-32);
Spawn("FatChodeExplosionTrail",pos);
Vector3 pvel = SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*FRandom[ExploS](1,5);
let s = Spawn("SWWMHalfSmoke",pos);
s.vel = pvel+vel*.2;
s.SetShade(Color(1,1,1)*Random[ExploS](64,224));
s.special1 = Random[ExploS](1,4);
s.scale *= 2.4;
s.alpha *= .1+.4*(ReactionTime/15.);
}
A_CountDown();
}
Wait;
}
}

View file

@ -179,17 +179,15 @@ extend Class Sparkster
// Silver Bullet JET
extend Class SilverBullet
{
ui TextureID WeaponBox[2], ZoomBar, RoundTex[4];
ui TextureID WeaponBox[2], ZoomBar, RoundTex[2];
override void DrawWeapon( double TicFrac, double bx, double by, double hs, Vector2 ss )
{
if ( !WeaponBox[0] ) WeaponBox[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletDisplay.png");
if ( !WeaponBox[1] ) WeaponBox[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomDisplay.png");
if ( !ZoomBar ) ZoomBar = TexMan.CheckForTexture("graphics/HUD/SilverBulletZoomBar.png");
if ( !RoundTex[0] ) RoundTex[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSB.png");
if ( !RoundTex[1] ) RoundTex[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCB.png");
if ( !RoundTex[2] ) RoundTex[2] = TexMan.CheckForTexture("graphics/HUD/SilverBulletXSBCasing.png");
if ( !RoundTex[3] ) RoundTex[3] = TexMan.CheckForTexture("graphics/HUD/SilverBulletFCBCasing.png");
if ( !RoundTex[0] ) RoundTex[0] = TexMan.CheckForTexture("graphics/HUD/SilverBulletRound.png");
if ( !RoundTex[1] ) RoundTex[1] = TexMan.CheckForTexture("graphics/HUD/SilverBulletCasing.png");
double zl = clamp(ZoomInter?ZoomInter.GetValue(TicFrac):(zoomlevel*10),0.,160.);
if ( zl >= 10. )
{
@ -199,9 +197,9 @@ extend Class SilverBullet
Screen.DrawTexture(ZoomBar,false,bx-18,by-37,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,zw);
}
Screen.DrawTexture(WeaponBox[0],false,bx-20,by-29,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
if ( chambered ) Screen.DrawTexture(RoundTex[fcbchambered+fired*2],false,bx-18,by-27,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
if ( chambered ) Screen.DrawTexture(RoundTex[fired],false,bx-18,by-27,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
for ( int i=0; i<clipcount; i++ )
Screen.DrawTexture(RoundTex[fcbloaded],false,bx-18,by-(22-i*4),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
Screen.DrawTexture(RoundTex[0],false,bx-18,by-(22-i*4),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}
}