Skip to content

Commit

Permalink
Merge pull request #44 from UndeadZeratul/main
Browse files Browse the repository at this point in the history
Add X-Pulse ThunderBuster FAK Upgrades
  • Loading branch information
UndeadZeratul authored Mar 19, 2024
2 parents cdcb3c5 + 39118a2 commit 7c0b529
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 1 deletion.
3 changes: 2 additions & 1 deletion zscript.zs
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,5 @@ const HDLD_DSD = "dsd";
#include "zscript/accensus/items/FAK Upgrades/FAK Potetobloke.zs"
#include "zscript/accensus/items/FAK Upgrades/FAK Mohl.zs"
#include "zscript/accensus/items/FAK Upgrades/FAK Peppergrinder.zs"
#include "zscript/accensus/items/FAK Upgrades/FAK Radtech.zs"
#include "zscript/accensus/items/FAK Upgrades/FAK Radtech.zs"
#include "zscript/accensus/items/FAK Upgrades/FAK XPulse.zs"
118 changes: 118 additions & 0 deletions zscript/accensus/items/FAK Upgrades/FAK XPulse.zs
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
class FAK_XPulseTB_Chiller : FAK_Upgrade
{
override string GetItem() { return "CrossPulseThunderBuster"; }
override string GetDisplayName() { return "Chiller"; }
override int GetCost() { return 3; }
override void DoUpgrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] |= 128; }
override void DoDowngrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] &= ~128; GiveCore(wpn.owner, 1.0); }
override int HasUpgrade(HDWeapon wpn, HDPickup pkp) { return wpn.WeaponStatus[TBS_FLAGS] & 128 > 0; }
}

class FAK_XPulseTB_Stabilizer : FAK_Upgrade
{
override string GetItem() { return "CrossPulseThunderBuster"; }
override string GetDisplayName() { return "Stabilizer"; }
override int GetCost() { return 3; }
override void DoUpgrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] |= 256; }
override void DoDowngrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] &= ~256; GiveCore(wpn.owner, 1.0); }
override int HasUpgrade(HDWeapon wpn, HDPickup pkp) { return wpn.WeaponStatus[TBS_FLAGS] & 256 > 0; }
}

class FAK_XPulseTB_Amplifier : FAK_Upgrade
{
override string GetItem() { return "CrossPulseThunderBuster"; }
override string GetDisplayName() { return "Amplifier"; }
override int GetCost() { return 3; }
override void DoUpgrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] |= 512; }
override void DoDowngrade(HDWeapon wpn, HDPickup pkp) { wpn.WeaponStatus[TBS_FLAGS] &= ~512; GiveCore(wpn.owner, 1.0); }
override int HasUpgrade(HDWeapon wpn, HDPickup pkp) { return wpn.WeaponStatus[TBS_FLAGS] & 512 > 0; }
}

class FAK_XPulseTB_ThunderBuster : FAK_Upgrade
{
override string GetItem() { return "CrossPulseThunderBuster"; }
override string GetDisplayName() { return "Cross Pulse"; }
override void DoUpgrade(HDWeapon wpn, HDPickup pkp) { }
override int HasUpgrade(HDWeapon wpn, HDPickup pkp) { return true; }
override void DoDowngrade(HDWeapon wpn, HDPickup pkp) {
Actor plr = wpn.owner;

int flags = wpn.WeaponStatus[TBS_FLAGS];
int battery = wpn.WeaponStatus[TBS_BATTERY];
wpn.Destroy();

Name cls = 'ThunderBuster';
HDWeapon tb;

if (plr.FindInventory(cls)) {
tb = HDWeapon(Actor.Spawn(cls, plr.pos + (0, 0, plr.height / 2)));
tb.angle = plr.angle;
tb.A_ChangeVelocity(1, 0, 1, CVF_RELATIVE);
} else {
tb = HDWeapon(plr.GiveInventoryType(cls));
}

tb.WeaponStatus[TBS_FLAGS] = flags;
tb.WeaponStatus[TBS_BATTERY] = battery;

GiveCore(plr, 1.0);
}
override bool CheckPrerequisites(HDWeapon wpn, HDPickup pkp)
{
Name cls = 'ThunderBuster';
return (class<Actor>)(cls);
}
override string GetFailMessage(HDWeapon wpn, HDPickup pkp, int type)
{
Name cls = 'ThunderBuster';
if (type == FMType_Requirements && !((class<Actor>)(cls)))
{
return "You don't have an assembly core.";
}
return Super.GetFailMessage(wpn, pkp, type);
}
}

class FAK_ThunderBuster_XPulseTB : FAK_Upgrade
{
override string GetItem() { return "ThunderBuster"; }
override string GetDisplayName() { return "Cross Pulse"; }
override int GetCost() { return 5; }
override void DoUpgrade(HDWeapon wpn, HDPickup pkp)
{
Actor plr = wpn.owner;

int flags = wpn.WeaponStatus[TBS_FLAGS];
int battery = wpn.WeaponStatus[TBS_BATTERY];
wpn.Destroy();

Name cls = 'CrossPulseThunderBuster';
HDWeapon xtb;

if (plr.FindInventory(cls)) {
xtb = HDWeapon(Actor.Spawn(cls, plr.pos + (0, 0, plr.height / 2)));
xtb.angle = plr.angle;
xtb.A_ChangeVelocity(1, 0, 1, CVF_RELATIVE);
} else {
xtb = HDWeapon(plr.GiveInventoryType(cls));
}

xtb.WeaponStatus[TBS_FLAGS] = flags;
xtb.WeaponStatus[TBS_BATTERY] = battery;
}
override int HasUpgrade(HDWeapon wpn, HDPickup pkp) { return false; }
override bool CheckPrerequisites(HDWeapon wpn, HDPickup pkp)
{
Name cls = 'CrossPulseThunderBuster';
return (class<Actor>)(cls);
}
override string GetFailMessage(HDWeapon wpn, HDPickup pkp, int type)
{
Name cls = 'CrossPulseThunderBuster';
if (type == FMType_Requirements && !((class<Actor>)(cls)))
{
return "You don't have a Cross Pulse Modification Kit on hand.";
}
return Super.GetFailMessage(wpn, pkp, type);
}
}

0 comments on commit 7c0b529

Please sign in to comment.