From a45a8c77421bd33bc825ebfdefec41fc86b3fbad Mon Sep 17 00:00:00 2001 From: smallmodel <15067410+smallmodel@users.noreply.github.com> Date: Wed, 16 Aug 2023 02:31:12 +0200 Subject: [PATCH] Fixed sentient linking/unlinking --- code/fgame/sentient.cpp | 61 ++++++----------------------------------- 1 file changed, 8 insertions(+), 53 deletions(-) diff --git a/code/fgame/sentient.cpp b/code/fgame/sentient.cpp index 984be9a5..967f1de0 100644 --- a/code/fgame/sentient.cpp +++ b/code/fgame/sentient.cpp @@ -803,19 +803,7 @@ Sentient::Sentient() Sentient::~Sentient() { - if (m_NextSentient) { - m_NextSentient->m_PrevSentient = m_PrevSentient; - } - - if (m_PrevSentient) { - m_PrevSentient->m_NextSentient = m_NextSentient; - } else { - level.m_HeadSentient[m_Team] = m_NextSentient; - } - - m_PrevSentient = NULL; - m_NextSentient = NULL; - + Unlink(); DisbandSquadMate(this); SentientList.RemoveObject((Sentient *)this); @@ -829,7 +817,7 @@ void Sentient::Link() m_PrevSentient = NULL; m_NextSentient = level.m_HeadSentient[m_Team]; if (m_NextSentient) { - m_PrevSentient = this; + m_NextSentient->m_PrevSentient = this; } level.m_HeadSentient[m_Team] = this; } @@ -2500,26 +2488,9 @@ void Sentient::EventGerman(Event *ev) DisbandSquadMate(this); } - if (m_NextSentient) { - m_NextSentient->m_PrevSentient = m_PrevSentient; - } - - if (m_PrevSentient) { - m_PrevSentient->m_NextSentient = m_NextSentient; - } else { - level.m_HeadSentient[m_Team] = m_NextSentient; - } - - m_NextSentient = NULL; - m_Team = TEAM_GERMAN; - m_PrevSentient = NULL; - - m_NextSentient = level.m_HeadSentient[TEAM_GERMAN]; - if (m_NextSentient) { - m_NextSentient->m_PrevSentient = this; - } - - level.m_HeadSentient[m_Team] = this; + Unlink(); + m_Team = TEAM_GERMAN; + Link(); if (bRejoinSquads) { JoinNearbySquads(1024.0f); @@ -2541,26 +2512,10 @@ void Sentient::EventAmerican(Event *ev) DisbandSquadMate(this); } - if (m_NextSentient) { - m_NextSentient->m_PrevSentient = m_PrevSentient; - } - if (m_PrevSentient) { - m_PrevSentient->m_NextSentient = m_NextSentient; - } else { - level.m_HeadSentient[m_Team] = m_NextSentient; - } - - m_NextSentient = NULL; - m_PrevSentient = NULL; - m_Team = TEAM_AMERICAN; - - m_NextSentient = level.m_HeadSentient[TEAM_AMERICAN]; - if (m_NextSentient) { - m_NextSentient->m_PrevSentient = this; - } - - level.m_HeadSentient[m_Team] = this; + Unlink(); + m_Team = TEAM_AMERICAN; + Link(); if (bRejoinSquads) { JoinNearbySquads(1024);