Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions zscript/FollowerWeapon.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ class FollowerWeapon abstract
// So if it starts at 0 and you want to reset the loop, set it internally to -1 to compensate.
abstract play FireSequenceResult DoFiringSequence(out int ticker, Actor trgt);
abstract play bool DoReloadSequence(out int ticker);
abstract play void OnRecruit();
abstract play void OnTransfer(HDWeapon wpn);
abstract play void OnBackTransfer(HDWeapon wpn);

Expand Down
36 changes: 32 additions & 4 deletions zscript/Recruitment.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -99,19 +99,47 @@ extend class FollowerHandler
recruit.Translation = m.Translation;
recruit.voicepitch = m.voicepitch;

FollowerWeapon fw;

switch (m.wep)
{
case HDOperator.HDMW_SMG:
case -HDOperator.HDMW_SMG: FollowerWeapon.CreateAndAdd('FW_SMG', recruit); break;
case -HDOperator.HDMW_SMG: fw = FollowerWeapon.CreateAndAdd('FW_SMG', recruit); break;

case HDOperator.HDMW_HUNTER:
case -HDOperator.HDMW_HUNTER: FollowerWeapon.CreateAndAdd('FW_Hunter', recruit); break;
case -HDOperator.HDMW_HUNTER: fw = FollowerWeapon.CreateAndAdd('FW_Hunter', recruit); break;

case HDOperator.HDMW_ZM66:
case -HDOperator.HDMW_ZM66: FollowerWeapon.CreateAndAdd('FW_ZM66', recruit); break;
case -HDOperator.HDMW_ZM66: fw = FollowerWeapon.CreateAndAdd('FW_ZM66', recruit); break;

case HDOperator.HDMW_ROCKET:
case -HDOperator.HDMW_ROCKET: FollowerWeapon.CreateAndAdd('FW_RocketLauncher', recruit); break;
case -HDOperator.HDMW_ROCKET: fw = FollowerWeapon.CreateAndAdd('FW_RocketLauncher', recruit); break;
}

if (fw) {
fw.OnRecruit();

class<HDAmmo> fwAmmo;
class<HDMagAmmo> fwMag;
int fwAmt;

[fwAmmo, fwMag, fwAmt] = fw.GetAmmoType();

let numMags = random(0, 5);
let numAmmo = random(0, fwAmt * numMags);
if (fwMag) {
for (let i = 0; i < numMags; i++) {
let spawned = HDMagAmmo(Actor.Spawn(fwMag, recruit.pos));
spawned.SyncAmount();

if (!recruit.AddMag(spawned, flags: HDFollower.FIF_FORCE)) spawned.destroy();
}
} else if (fwAmmo) {
for (let i = 0; i < numAmmo; i++) {
let spawned = HDAmmo(Actor.Spawn(fwAmmo, recruit.pos));
if (!recruit.AddItem(spawned, flags: HDFollower.FIF_FORCE)) spawned.destroy();
}
}
}

let Armor = HDArmourWorn(m.FindInventory('HDArmourWorn'));
Expand Down
9 changes: 9 additions & 0 deletions zscript/Weapons/Boss.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,15 @@ class FW_Boss : FollowerWeapon
Mag = 0;
}

override void OnRecruit()
{
Mag = random(0, 10);
ChamberedRound = random(0, 2);

frontreticle = random(0, 2);
customchamb = !random(0, 3);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[BOSSS_MAG];
Expand Down
5 changes: 5 additions & 0 deletions zscript/Weapons/Brontornis.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,11 @@ class FW_Bronto : FollowerWeapon
return ChamberedRound == CRType_Chambered ? RResult_MagFull : Super.TryReload(flags);
}

override void OnRecruit()
{
ChamberedRound = random(0, 2);
}

override void OnTransfer(HDWeapon wpn)
{
ChamberedRound = wpn.WeaponStatus[BRONS_CHAMBER];
Expand Down
18 changes: 18 additions & 0 deletions zscript/Weapons/Hunter.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,24 @@ class FW_Hunter : FollowerWeapon
return WPriority_VeryHigh;
}

override void OnRecruit()
{
if (!random(0, 7)) choke = random(0, 7);

if (!random(0, 32)) {
semi = 0;
fullauto = 1;
} else if (!random(0, 7)) {
semi = 1;
fullauto = 0;
}

int tubesize = semi ? 5 : 7;

Mag = random(0, tubesize);
ChamberedRound = random(0, 2);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[HUNTS_TUBE];
Expand Down
13 changes: 13 additions & 0 deletions zscript/Weapons/Liberator.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,19 @@ class FW_Liberator : FollowerWeapon
return WPriority_Medium;
}

override void OnRecruit()
{
Mag = random(0, 30);
ChamberedRound = random(0, 2);

nogl = !random(0, 2);
nobull = !random(0, 3);
noauto = !random(0, 5);
lefty = !random(0, 5);
altreticle = !random(0, 2);
frontreticle = !random(0, 2);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[LIBS_MAG];
Expand Down
8 changes: 8 additions & 0 deletions zscript/Weapons/RocketLauncher.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,14 @@ class FW_RocketLauncher : FollowerWeapon
return otherFollowersSafe && otherPlayersSafe;
}

override void OnRecruit()
{
Mag = random(0, 5);
ChamberedRound = random(0, 2);

nomag = random(0, 3);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[RLS_MAG];
Expand Down
9 changes: 9 additions & 0 deletions zscript/Weapons/SMG.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ class FW_SMG : FollowerWeapon
return WPriority_Lowest;
}

override void OnRecruit()
{
Mag = random(0,30);
ChamberedRound = random(0,2);

fireswitch = random(0, 3);
reflexsight = !random(0,2);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[SMGS_MAG];
Expand Down
9 changes: 9 additions & 0 deletions zscript/Weapons/ZM66.zsc
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@ class FW_ZM66 : FollowerWeapon
return WPriority_High;
}

override void OnRecruit()
{
Mag = random(0, 51);
ChamberedRound = random(0, 2);

nogl = !random(0, 2);
noauto = !random(0, 3);
}

override void OnTransfer(HDWeapon wpn)
{
Mag = wpn.WeaponStatus[ZM66S_MAG];
Expand Down