Properly handle Thraddash-Ilwrath mission overlap (bug #530)

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1635 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2005-04-15 09:35:59 +00:00
parent 259e07aa17
commit 67acdcb955
+67 -41
View File
@@ -495,13 +495,24 @@ thradd_mission (void)
MissionState = GET_GAME_STATE (THRADD_MISSION);
if (ThraddPtr->ShipInfo.actual_strength && MissionState < 3)
{
if (MissionState & 1)
{
COORD x, y;
if (MissionState < 2)
{ /* attacking */
x = 4879;
y = 7201;
}
else
{ /* returning */
x = 2535;
y = 8358;
}
if (MissionState == 1)
{ /* arrived at Kohr-Ah, engaging */
SIZE strength_loss;
AddEvent (RELATIVE_EVENT, 0, 14, 0, ADVANCE_THRADD_MISSION);
strength_loss = (SIZE)(ThraddPtr->ShipInfo.actual_strength >> 1);
ThraddPtr->ShipInfo.energy_level =
(BYTE)(-strength_loss / 14);
ThraddPtr->ShipInfo.growth_fract =
@@ -510,25 +521,21 @@ thradd_mission (void)
}
else
{
COORD x, y;
if (MissionState == 0)
{
x = 4879;
y = 7201;
}
else
{
x = 2535;
y = 8358;
if (MissionState != 0)
{ /* stop losses */
ThraddPtr->ShipInfo.energy_level = 0;
ThraddPtr->ShipInfo.growth_fract = 0;
}
SetRaceDest (THRADDASH_SHIP, x, y, 14, ADVANCE_THRADD_MISSION);
}
SetRaceDest (THRADDASH_SHIP, x, y, 14, ADVANCE_THRADD_MISSION);
}
++MissionState;
SET_GAME_STATE (THRADD_MISSION, MissionState);
if (MissionState == 4 && GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH))
{ /* returned home - notify the Ilwrath */
AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_ILWRATH_MISSION);
}
SET_GAME_STATE (THRADD_MISSION, MissionState + 1);
UnlockStarShip (&GLOBAL (avail_race_q), hThradd);
}
@@ -536,6 +543,7 @@ thradd_mission (void)
static void
ilwrath_mission (void)
{
BYTE ThraddState;
HSTARSHIP hIlwrath, hThradd;
EXTENDED_SHIP_FRAGMENTPTR IlwrathPtr, ThraddPtr;
@@ -556,37 +564,55 @@ ilwrath_mission (void)
}
else if (IlwrathPtr->ShipInfo.actual_strength)
{
if (IlwrathPtr->ShipInfo.dest_loc.x != 2500
|| IlwrathPtr->ShipInfo.dest_loc.y != 8070)
if (!GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)
&& (IlwrathPtr->ShipInfo.dest_loc.x != 2500
|| IlwrathPtr->ShipInfo.dest_loc.y != 8070))
{
SetRaceDest (ILWRATH_SHIP, 2500, 8070, 90,
ADVANCE_ILWRATH_MISSION);
}
else
{
#define MADD_LENGTH 128
SIZE strength_loss;
SET_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1);
SET_GAME_STATE (HELIX_UNPROTECTED, 1);
strength_loss = (SIZE)IlwrathPtr->ShipInfo.actual_strength;
IlwrathPtr->ShipInfo.energy_level =
(BYTE)(-strength_loss / MADD_LENGTH);
IlwrathPtr->ShipInfo.growth_fract =
(BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH);
SetRaceDest (ILWRATH_SHIP,
(2500 + 2535) >> 1, (8070 + 8358) >> 1,
MADD_LENGTH - 1, ADVANCE_ILWRATH_MISSION);
if (IlwrathPtr->ShipInfo.days_left == 0)
{ /* arrived for battle */
SET_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1);
SET_GAME_STATE (HELIX_UNPROTECTED, 1);
strength_loss = (SIZE)IlwrathPtr->ShipInfo.actual_strength;
IlwrathPtr->ShipInfo.energy_level =
(BYTE)(-strength_loss / MADD_LENGTH);
IlwrathPtr->ShipInfo.growth_fract =
(BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH);
SetRaceDest (ILWRATH_SHIP,
(2500 + 2535) >> 1, (8070 + 8358) >> 1,
MADD_LENGTH - 1, ADVANCE_ILWRATH_MISSION);
strength_loss = (SIZE)ThraddPtr->ShipInfo.actual_strength;
ThraddPtr->ShipInfo.energy_level =
(BYTE)(-strength_loss / MADD_LENGTH);
ThraddPtr->ShipInfo.growth_fract =
(BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH);
SetRaceDest (THRADDASH_SHIP,
(2500 + 2535) >> 1, (8070 + 8358) >> 1,
MADD_LENGTH, (BYTE)~0);
SET_GAME_STATE (THRADD_VISITS, 0);
if (ThraddPtr->ShipInfo.ship_flags & GOOD_GUY)
ActivateStarShip (THRADDASH_SHIP, -1);
strength_loss = (SIZE)ThraddPtr->ShipInfo.actual_strength;
ThraddPtr->ShipInfo.energy_level =
(BYTE)(-strength_loss / MADD_LENGTH);
ThraddPtr->ShipInfo.growth_fract =
(BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH);
SET_GAME_STATE (THRADD_VISITS, 0);
if (ThraddPtr->ShipInfo.ship_flags & GOOD_GUY)
ActivateStarShip (THRADDASH_SHIP, -1);
}
ThraddState = GET_GAME_STATE (THRADD_MISSION);
if (ThraddState == 0 || ThraddState > 3)
{ /* never went to Kohr-Ah or returned */
SetRaceDest (THRADDASH_SHIP,
(2500 + 2535) >> 1, (8070 + 8358) >> 1,
IlwrathPtr->ShipInfo.days_left + 1, (BYTE)~0);
}
else if (ThraddState < 3)
{ /* recall on the double */
SetRaceDest (THRADDASH_SHIP, 2535, 8358, 10,
ADVANCE_THRADD_MISSION);
SET_GAME_STATE (THRADD_MISSION, 3);
}
}
}