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:
+48
-22
@@ -495,13 +495,24 @@ thradd_mission (void)
|
|||||||
MissionState = GET_GAME_STATE (THRADD_MISSION);
|
MissionState = GET_GAME_STATE (THRADD_MISSION);
|
||||||
if (ThraddPtr->ShipInfo.actual_strength && MissionState < 3)
|
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;
|
SIZE strength_loss;
|
||||||
|
|
||||||
AddEvent (RELATIVE_EVENT, 0, 14, 0, ADVANCE_THRADD_MISSION);
|
|
||||||
strength_loss = (SIZE)(ThraddPtr->ShipInfo.actual_strength >> 1);
|
strength_loss = (SIZE)(ThraddPtr->ShipInfo.actual_strength >> 1);
|
||||||
|
|
||||||
ThraddPtr->ShipInfo.energy_level =
|
ThraddPtr->ShipInfo.energy_level =
|
||||||
(BYTE)(-strength_loss / 14);
|
(BYTE)(-strength_loss / 14);
|
||||||
ThraddPtr->ShipInfo.growth_fract =
|
ThraddPtr->ShipInfo.growth_fract =
|
||||||
@@ -510,25 +521,21 @@ thradd_mission (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
COORD x, y;
|
if (MissionState != 0)
|
||||||
|
{ /* stop losses */
|
||||||
if (MissionState == 0)
|
|
||||||
{
|
|
||||||
x = 4879;
|
|
||||||
y = 7201;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x = 2535;
|
|
||||||
y = 8358;
|
|
||||||
|
|
||||||
ThraddPtr->ShipInfo.energy_level = 0;
|
ThraddPtr->ShipInfo.energy_level = 0;
|
||||||
ThraddPtr->ShipInfo.growth_fract = 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);
|
UnlockStarShip (&GLOBAL (avail_race_q), hThradd);
|
||||||
}
|
}
|
||||||
@@ -536,6 +543,7 @@ thradd_mission (void)
|
|||||||
static void
|
static void
|
||||||
ilwrath_mission (void)
|
ilwrath_mission (void)
|
||||||
{
|
{
|
||||||
|
BYTE ThraddState;
|
||||||
HSTARSHIP hIlwrath, hThradd;
|
HSTARSHIP hIlwrath, hThradd;
|
||||||
EXTENDED_SHIP_FRAGMENTPTR IlwrathPtr, ThraddPtr;
|
EXTENDED_SHIP_FRAGMENTPTR IlwrathPtr, ThraddPtr;
|
||||||
|
|
||||||
@@ -556,15 +564,20 @@ ilwrath_mission (void)
|
|||||||
}
|
}
|
||||||
else if (IlwrathPtr->ShipInfo.actual_strength)
|
else if (IlwrathPtr->ShipInfo.actual_strength)
|
||||||
{
|
{
|
||||||
if (IlwrathPtr->ShipInfo.dest_loc.x != 2500
|
if (!GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)
|
||||||
|| IlwrathPtr->ShipInfo.dest_loc.y != 8070)
|
&& (IlwrathPtr->ShipInfo.dest_loc.x != 2500
|
||||||
|
|| IlwrathPtr->ShipInfo.dest_loc.y != 8070))
|
||||||
|
{
|
||||||
SetRaceDest (ILWRATH_SHIP, 2500, 8070, 90,
|
SetRaceDest (ILWRATH_SHIP, 2500, 8070, 90,
|
||||||
ADVANCE_ILWRATH_MISSION);
|
ADVANCE_ILWRATH_MISSION);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#define MADD_LENGTH 128
|
#define MADD_LENGTH 128
|
||||||
SIZE strength_loss;
|
SIZE strength_loss;
|
||||||
|
|
||||||
|
if (IlwrathPtr->ShipInfo.days_left == 0)
|
||||||
|
{ /* arrived for battle */
|
||||||
SET_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1);
|
SET_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1);
|
||||||
SET_GAME_STATE (HELIX_UNPROTECTED, 1);
|
SET_GAME_STATE (HELIX_UNPROTECTED, 1);
|
||||||
strength_loss = (SIZE)IlwrathPtr->ShipInfo.actual_strength;
|
strength_loss = (SIZE)IlwrathPtr->ShipInfo.actual_strength;
|
||||||
@@ -581,13 +594,26 @@ ilwrath_mission (void)
|
|||||||
(BYTE)(-strength_loss / MADD_LENGTH);
|
(BYTE)(-strength_loss / MADD_LENGTH);
|
||||||
ThraddPtr->ShipInfo.growth_fract =
|
ThraddPtr->ShipInfo.growth_fract =
|
||||||
(BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH);
|
(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);
|
SET_GAME_STATE (THRADD_VISITS, 0);
|
||||||
if (ThraddPtr->ShipInfo.ship_flags & GOOD_GUY)
|
if (ThraddPtr->ShipInfo.ship_flags & GOOD_GUY)
|
||||||
ActivateStarShip (THRADDASH_SHIP, -1);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UnlockStarShip (&GLOBAL (avail_race_q), hThradd);
|
UnlockStarShip (&GLOBAL (avail_race_q), hThradd);
|
||||||
|
|||||||
Reference in New Issue
Block a user