Skip to content

Commit

Permalink
Adjust SlimeEffect API, allow custom poison damage
Browse files Browse the repository at this point in the history
  • Loading branch information
Kaffeine committed Jan 21, 2024
1 parent f27d543 commit 45bf193
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 10 deletions.
8 changes: 3 additions & 5 deletions src/game/server/infclass/classes/humans/human.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2109,17 +2109,15 @@ bool CInfClassHuman::FindPortalPosition(vec2 *pPosition)
return false;
}

void CInfClassHuman::OnSlimeEffect(int Owner)
void CInfClassHuman::OnSlimeEffect(int Owner, int Damage, float DamageInterval)
{
int Count = Config()->m_InfSlimePoisonDamage;
if(GetPlayerClass() == PLAYERCLASS_BIOLOGIST)
{
// Note: actually probably the character 'll stay in the slime for
// more than 1 tick and it 'll result in 2 damage dealt
Count = 1;
Damage = 1;
}
const float Interval = 1.25f;
m_pCharacter->Poison(Count, Owner, EDamageType::SLUG_SLIME, Interval);
m_pCharacter->Poison(Damage, Owner, EDamageType::SLUG_SLIME, DamageInterval);
}

bool CInfClassHuman::HasWhiteHole() const
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/infclass/classes/humans/human.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class CInfClassHuman : public CInfClassPlayerClass
void OnGrenadeFired(WeaponFireContext *pFireContext) override;
void OnLaserFired(WeaponFireContext *pFireContext) override;

void OnSlimeEffect(int Owner) override;
void OnSlimeEffect(int Owner, int Damage, float DamageInterval) override;
bool HasWhiteHole() const;
void GiveWhiteHole();
void RemoveWhiteHole();
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/infclass/classes/infcplayerclass.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ class CInfClassPlayerClass
virtual void OnLaserFired(WeaponFireContext *pFireContext);
virtual void OnNinjaFired(WeaponFireContext *pFireContext);

virtual void OnSlimeEffect(int Owner) = 0;
virtual void OnSlimeEffect(int Owner, int Damage, float DamageInterval) = 0;
virtual void OnFloatingPointCollected(int Points);

virtual void GiveUpgrade() {}
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/infclass/classes/infected/infected.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -996,7 +996,7 @@ bool CInfClassInfected::HasHumansNearby()
return false;
}

void CInfClassInfected::OnSlimeEffect(int Owner)
void CInfClassInfected::OnSlimeEffect(int Owner, int Damage, float DamageInterval)
{
if(!m_pCharacter->IsAlive())
return;
Expand Down
2 changes: 1 addition & 1 deletion src/game/server/infclass/classes/infected/infected.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class CInfClassInfected : public CInfClassPlayerClass

void OnHammerFired(WeaponFireContext *pFireContext) override;

void OnSlimeEffect(int Owner) override;
void OnSlimeEffect(int Owner, int Damage, float DamageInterval) override;
void OnFloatingPointCollected(int Points) override;
void OnLaserWall();

Expand Down
12 changes: 11 additions & 1 deletion src/game/server/infclass/entities/slug-slime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ CSlugSlime::CSlugSlime(CGameContext *pGameContext, vec2 Pos, int Owner) :
{
m_StartTick = Server()->Tick();
m_EndTick = m_StartTick;

m_Damage = Config()->m_InfSlimePoisonDamage;
m_DamageInterval = 1.25f;

GameWorld()->InsertEntity(this);
}

Expand All @@ -35,7 +39,7 @@ void CSlugSlime::Tick()
if(!GameServer()->Collision()->AreConnected(p->m_Pos, m_Pos, 84.0f))
continue; // not in reach

p->GetClass()->OnSlimeEffect(m_Owner);
p->GetClass()->OnSlimeEffect(m_Owner, m_Damage, m_DamageInterval);
}

int ExistsForTicks = Server()->Tick() - m_StartTick;
Expand Down Expand Up @@ -81,3 +85,9 @@ bool CSlugSlime::Replenish(int PlayerID, int EndTick)
m_EndTick = EndTick;
return true;
}

void CSlugSlime::SetDamage(int Damage, float Interval)
{
m_Damage = Damage;
m_DamageInterval = Interval;
}
3 changes: 3 additions & 0 deletions src/game/server/infclass/entities/slug-slime.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ class CSlugSlime : public CPlacedObject
int GetEndTick() const { return m_EndTick; }

bool Replenish(int PlayerID, int EndTick);
void SetDamage(int Damage, float Interval);

private:
int m_StartTick = 0;
int m_EndTick = 0;
int m_Damage{};
float m_DamageInterval{};
};

#endif

0 comments on commit 45bf193

Please sign in to comment.