Fix/drag unconscious softlock

Same logic but cleaned up version of https://github.com/1dot13/source/pull/602 which Tais contributed with Claude Code's help

Most calls to SOLDIERTYPE::IsDragging() aren't supposed to have a side effect of cancelling a drag, being simple queries.
Changing the default to reflect that is right move.

Assisted-by: Claude:
This commit is contained in:
Marco Antonio J. Costa
2026-06-01 21:45:55 -03:00
committed by majcosta
parent 8b3e417872
commit b4176bb2d9
4 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -1380,7 +1380,7 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
}
// Flugente: dragging someone
if ( pSoldier->IsDragging( false ) )
if ( pSoldier->IsDragging() )
{
movementAPCost *= gItemSettings.fDragAPCostModifier;
}
+3 -3
View File
@@ -9046,7 +9046,7 @@ void CalculateSoldierAniSpeed( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pStatsSoldier
}
// Flugente: drag people
if ( pSoldier->IsDragging( false ) )
if ( pSoldier->IsDragging() )
{
pSoldier->sAniDelay = gItemSettings.fDragAPCostModifier * pSoldier->sAniDelay;
}
@@ -11516,7 +11516,7 @@ void SOLDIERTYPE::MoveMerc( FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckR
// Flugente: as we move a tile, we would now be too far away to drag someone.
// So remember whether we were dragging (we have to set our position now, otherwise the person we drag woul soon occupy our gridno).
BOOLEAN currentlydragging = this->IsDragging();
BOOLEAN currentlydragging = this->IsDragging(true);
INT32 sOldGridNo = this->sGridNo;
// OK, set new position
@@ -24226,7 +24226,7 @@ BOOLEAN SOLDIERTYPE::CanBreakWindow(void)
BOOLEAN SOLDIERTYPE::CanStartDrag(void)
{
if (!this->IsDragging(false) && this->CanDragInPrinciple())
if (!this->IsDragging() && this->CanDragInPrinciple())
{
INT32 sNewGridNo = NewGridNo(this->sGridNo, DirectionInc(this->ubDirection));
+1 -1
View File
@@ -2056,7 +2056,7 @@ public:
BOOLEAN CanDragPerson(SoldierID usID, BOOLEAN fCheckStance = FALSE);
BOOLEAN CanDragCorpse(UINT16 usCorpseNum, BOOLEAN fCheckStance = FALSE);
BOOLEAN CanDragStructure(INT32 sGridNo, BOOLEAN fCheckStance = FALSE);
BOOLEAN IsDragging(bool aStopIfConditionNotSatisfied = true);
BOOLEAN IsDragging(bool aStopIfConditionNotSatisfied = false);
void SetDragOrderPerson( SoldierID usID );
void SetDragOrderCorpse( UINT32 uiCorpseID );
void SetDragOrderStructure( INT32 sGridNo );
+1 -1
View File
@@ -2221,7 +2221,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
// sevenfm: also stop dragging
if (gusSelectedSoldier != NOBODY &&
gusSelectedSoldier &&
gusSelectedSoldier->IsDragging(false))
gusSelectedSoldier->IsDragging())
{
gusSelectedSoldier->CancelDrag();
DirtyMercPanelInterface(gusSelectedSoldier, DIRTYLEVEL2);