NSMonster: add spawn key 'reserve_ammo', which should be self explanatory. See docs otherwise.

This commit is contained in:
Marco Cawthorne 2023-09-18 17:57:47 -07:00
parent c8d29078da
commit c920dc2df0
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
2 changed files with 33 additions and 1 deletions

View File

@ -268,6 +268,7 @@ capable of fighting if prompted to.
- "reload_count" : how many ranged attacks until reload. Only affects primary ranged attacks.
- "reload_delay" : Time between reloads in seconds. Requires `reload_count` to be set > 0.
- "snd_reload" : SoundDef to play when reloading.
- "reserve_ammo" : The amount of reserve ammo. -1 is infinite (default)
- "attack_cone" : Cone in which to attack.
- "attack_accuracy" : Accuracy (or rather, lack of) multiplier.
@ -552,6 +553,7 @@ private:
float m_flReloadCount;
float m_flReloadDelay;
string m_sndReload;
float m_flReserveAmmo;
string m_sndRangedAttack2;

View File

@ -88,6 +88,8 @@ NSMonster::NSMonster(void)
m_flSpecial1Range =
m_flSpecial2Range = -1.0f;
m_flReserveAmmo = -1; /* unlimited */
m_bWeaponStartsDrawn = true;
m_flWalkSpeed = autocvar_ai_walkSpeed;
@ -193,6 +195,7 @@ NSMonster::Save(float handle)
SaveFloat(handle, "m_flReloadCount", m_flReloadCount);
SaveFloat(handle, "m_flReloadDelay", m_flReloadDelay);
SaveString(handle, "m_sndReload", m_sndReload);
SaveFloat(handle, "m_flReserveAmmo", m_flReserveAmmo);
SaveString(handle, "m_sndRangedAttack2", m_sndRangedAttack2);
SaveBool(handle, "m_bWeaponStartsDrawn", m_bWeaponStartsDrawn);
SaveString(handle, "m_strBodyOnDraw", m_strBodyOnDraw);
@ -426,6 +429,9 @@ NSMonster::Restore(string strKey, string strValue)
case "m_sndReload":
m_sndReload = ReadString(strValue);
break;
case "m_flReserveAmmo":
m_flReserveAmmo = ReadFloat(strValue);
break;
case "m_sndRangedAttack2":
m_sndRangedAttack2 = ReadString(strValue);
break;
@ -991,8 +997,29 @@ NSMonster::AttackRanged(void)
/* can't shoot anything ranged anymore, need to reload. */
if (m_flReloadCount)
if (_m_flReloadTracker > m_flReloadCount) {
float startAmmo = 0;
float actReload = FramegroupForAct(ACT_RELOAD);
_m_flReloadTracker = 0;
/* out of ammo, cannot reload */
if (m_flReserveAmmo == 0) {
//NSMonster_Log("Out of ammo!");
return 0;
}
/* do we not have unlimited ammo? */
if (m_flReserveAmmo != -1) {
m_flReserveAmmo -= m_flReloadCount;
NSMonster_Log("Reserve ammo: %d", m_flReserveAmmo);
/* oh no, we're below 0 in terms of ammo. */
if (m_flReserveAmmo < 0) {
startAmmo = -m_flReserveAmmo;
m_flReserveAmmo = 0; /* we're fully emptied now */
}
}
NSMonster_Log("Starting at %d bullets", startAmmo);
_m_flReloadTracker = startAmmo;
AnimPlay(actReload);
StartSoundDef(m_sndReload, CHAN_WEAPON, true);
_m_bShouldThrow = false;
@ -1769,6 +1796,9 @@ NSMonster::SpawnKey(string strKey, string strValue)
case "snd_reload":
m_sndReload = ReadString(strValue);
break;
case "reserve_ammo":
m_flReserveAmmo = ReadFloat(strValue);
break;
case "def_attack_special":
case "def_attack_special_1":
m_defSpecial1 = ReadString(strValue);