Added an "original AI type" definition for the sake of the exec transport.

This is something I forgot about before: the executive transport
A.I. was changed by me at some point from "Normal" to "Evasive".
This change re-introduces "Normal" A.I. for this ship in Classic
difficulty.
This commit is contained in:
Julie Marchant 2019-05-26 15:35:46 -04:00
parent 1d3e2e6ff6
commit 3e453a2f3c
3 changed files with 46 additions and 8 deletions

View File

@ -77,12 +77,6 @@ the changes to graphics, sound, and dialog:
when he first appears in the Elamale mission is different from version
1.1.
* The executive transport in the Poswic and Ellesh missions has a
"wandering" A.I. type; in contrast, version 1.1 gave this ship a
"normal" A.I. type. The difference is that the "wandering" A.I. type
never attempts to chase you, travels a further distance away on
average, and starts to run away when shot at.
* Version 1.1 had a bug in the shop which caused selling something to
redeem half the cost of the next item, rather than half the cost of
the item being sold. This led to the last item in a series being sold

View File

@ -117,6 +117,7 @@ void alien_defs_init()
// Dual Plasma Fighter.
alien_defs[CD_DUALFIGHTER].classDef = CD_DUALFIGHTER;
alien_defs[CD_DUALFIGHTER].AIType = AI_NORMAL;
alien_defs[CD_DUALFIGHTER].AITypeOriginal = AI_NORMAL;
alien_defs[CD_DUALFIGHTER].speed = 4;
alien_defs[CD_DUALFIGHTER].maxShield = 5;
alien_defs[CD_DUALFIGHTER].shield = 5;
@ -137,6 +138,7 @@ void alien_defs_init()
// Missile Boat
alien_defs[CD_MISSILEBOAT].classDef = CD_MISSILEBOAT;
alien_defs[CD_MISSILEBOAT].AIType = AI_DEFENSIVE;
alien_defs[CD_MISSILEBOAT].AITypeOriginal = AI_DEFENSIVE;
alien_defs[CD_MISSILEBOAT].speed = 2;
alien_defs[CD_MISSILEBOAT].maxShield = 50;
alien_defs[CD_MISSILEBOAT].shield = 50;
@ -157,6 +159,7 @@ void alien_defs_init()
//Prototype fighter
alien_defs[CD_PROTOFIGHTER].classDef = CD_PROTOFIGHTER;
alien_defs[CD_PROTOFIGHTER].AIType = AI_DEFENSIVE;
alien_defs[CD_PROTOFIGHTER].AITypeOriginal = AI_DEFENSIVE;
alien_defs[CD_PROTOFIGHTER].speed = 5;
alien_defs[CD_PROTOFIGHTER].maxShield = 15;
alien_defs[CD_PROTOFIGHTER].shield = 15;
@ -177,6 +180,7 @@ void alien_defs_init()
// Phoebe and Ursula
alien_defs[CD_FRIEND].classDef = CD_FRIEND;
alien_defs[CD_FRIEND].AIType = AI_OFFENSIVE;
alien_defs[CD_FRIEND].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_FRIEND].speed = 3;
alien_defs[CD_FRIEND].maxShield = 50;
alien_defs[CD_FRIEND].shield = 50;
@ -197,6 +201,7 @@ void alien_defs_init()
// Boss 1
alien_defs[CD_FRIGATE].classDef = CD_BOSS;
alien_defs[CD_FRIGATE].AIType = AI_NORMAL;
alien_defs[CD_FRIGATE].AITypeOriginal = AI_NORMAL;
alien_defs[CD_FRIGATE].speed = 2;
alien_defs[CD_FRIGATE].maxShield = 550;
alien_defs[CD_FRIGATE].shield = 550;
@ -216,6 +221,7 @@ void alien_defs_init()
alien_defs[CD_FRIGATE_WING1].classDef = CD_FRIGATE_WING1;
alien_defs[CD_FRIGATE_WING1].AIType = AI_NORMAL;
alien_defs[CD_FRIGATE_WING1].AITypeOriginal = AI_NORMAL;
alien_defs[CD_FRIGATE_WING1].speed = 2;
alien_defs[CD_FRIGATE_WING1].maxShield = 100;
alien_defs[CD_FRIGATE_WING1].shield = 100;
@ -235,6 +241,7 @@ void alien_defs_init()
alien_defs[CD_FRIGATE_WING2].classDef = CD_FRIGATE_WING2;
alien_defs[CD_FRIGATE_WING2].AIType = AI_NORMAL;
alien_defs[CD_FRIGATE_WING2].AITypeOriginal = AI_NORMAL;
alien_defs[CD_FRIGATE_WING2].speed = 2;
alien_defs[CD_FRIGATE_WING2].maxShield = 100;
alien_defs[CD_FRIGATE_WING2].shield = 100;
@ -255,6 +262,7 @@ void alien_defs_init()
// Transport ship
alien_defs[CD_TRANSPORTSHIP].classDef = CD_TRANSPORTSHIP;
alien_defs[CD_TRANSPORTSHIP].AIType = AI_EVASIVE;
alien_defs[CD_TRANSPORTSHIP].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_TRANSPORTSHIP].speed = 4;
alien_defs[CD_TRANSPORTSHIP].maxShield = 10;
alien_defs[CD_TRANSPORTSHIP].shield = 10;
@ -275,6 +283,7 @@ void alien_defs_init()
// Cargo ship
alien_defs[CD_CARGOSHIP].classDef = CD_CARGOSHIP;
alien_defs[CD_CARGOSHIP].AIType = AI_EVASIVE;
alien_defs[CD_CARGOSHIP].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_CARGOSHIP].speed = 4;
alien_defs[CD_CARGOSHIP].maxShield = 10;
alien_defs[CD_CARGOSHIP].shield = 10;
@ -295,6 +304,7 @@ void alien_defs_init()
// Weapco Miner
alien_defs[CD_MINER].classDef = CD_MINER;
alien_defs[CD_MINER].AIType = AI_EVASIVE;
alien_defs[CD_MINER].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_MINER].speed = 4;
alien_defs[CD_MINER].maxShield = 25;
alien_defs[CD_MINER].shield = 25;
@ -315,6 +325,7 @@ void alien_defs_init()
// Kline
alien_defs[CD_KLINE].classDef = CD_KLINE;
alien_defs[CD_KLINE].AIType = AI_OFFENSIVE;
alien_defs[CD_KLINE].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_KLINE].speed = 5;
alien_defs[CD_KLINE].maxShield = 2000;
alien_defs[CD_KLINE].shield = 2000;
@ -335,6 +346,7 @@ void alien_defs_init()
// Aim Fighter
alien_defs[CD_AIMFIGHTER].classDef = CD_AIMFIGHTER;
alien_defs[CD_AIMFIGHTER].AIType = AI_NORMAL;
alien_defs[CD_AIMFIGHTER].AITypeOriginal = AI_NORMAL;
alien_defs[CD_AIMFIGHTER].speed = 3;
alien_defs[CD_AIMFIGHTER].maxShield = 15;
alien_defs[CD_AIMFIGHTER].shield = 15;
@ -355,6 +367,7 @@ void alien_defs_init()
// Slave ship
alien_defs[CD_SLAVETRANSPORT].classDef = CD_SLAVETRANSPORT;
alien_defs[CD_SLAVETRANSPORT].AIType = AI_EVASIVE;
alien_defs[CD_SLAVETRANSPORT].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_SLAVETRANSPORT].speed = 2;
alien_defs[CD_SLAVETRANSPORT].maxShield = 10;
alien_defs[CD_SLAVETRANSPORT].shield = 20;
@ -375,6 +388,7 @@ void alien_defs_init()
// Good Transport
alien_defs[CD_GOODTRANSPORT].classDef = CD_GOODTRANSPORT;
alien_defs[CD_GOODTRANSPORT].AIType = AI_EVASIVE;
alien_defs[CD_GOODTRANSPORT].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_GOODTRANSPORT].speed = 3;
alien_defs[CD_GOODTRANSPORT].maxShield = 75;
alien_defs[CD_GOODTRANSPORT].shield = 75;
@ -395,6 +409,7 @@ void alien_defs_init()
// Sid Wilson
alien_defs[CD_SID].classDef = CD_SID;
alien_defs[CD_SID].AIType = AI_NORMAL;
alien_defs[CD_SID].AITypeOriginal = AI_NORMAL;
alien_defs[CD_SID].speed = 3;
alien_defs[CD_SID].maxShield = 50;
alien_defs[CD_SID].shield = 50;
@ -415,6 +430,7 @@ void alien_defs_init()
// Mining Vessel Boss
alien_defs[CD_MINEBOSS].classDef = CD_BOSS;
alien_defs[CD_MINEBOSS].AIType = AI_NORMAL;
alien_defs[CD_MINEBOSS].AITypeOriginal = AI_NORMAL;
alien_defs[CD_MINEBOSS].speed = 3;
alien_defs[CD_MINEBOSS].maxShield = 1000;
alien_defs[CD_MINEBOSS].shield = 1000;
@ -434,6 +450,7 @@ void alien_defs_init()
alien_defs[CD_BOSS2_WING1].classDef = CD_BOSS2_WING1;
alien_defs[CD_BOSS2_WING1].AIType = AI_NORMAL;
alien_defs[CD_BOSS2_WING1].AITypeOriginal = AI_NORMAL;
alien_defs[CD_BOSS2_WING1].speed = 1;
alien_defs[CD_BOSS2_WING1].maxShield = 250;
alien_defs[CD_BOSS2_WING1].shield = 250;
@ -453,6 +470,7 @@ void alien_defs_init()
alien_defs[CD_BOSS2_WING2].classDef = CD_BOSS2_WING2;
alien_defs[CD_BOSS2_WING2].AIType = AI_NORMAL;
alien_defs[CD_BOSS2_WING2].AITypeOriginal = AI_NORMAL;
alien_defs[CD_BOSS2_WING2].speed = 1;
alien_defs[CD_BOSS2_WING2].maxShield = 500;
alien_defs[CD_BOSS2_WING2].shield = 500;
@ -472,6 +490,7 @@ void alien_defs_init()
alien_defs[CD_BOSS2_WING3].classDef = CD_BOSS2_WING3;
alien_defs[CD_BOSS2_WING3].AIType = AI_NORMAL;
alien_defs[CD_BOSS2_WING3].AITypeOriginal = AI_NORMAL;
alien_defs[CD_BOSS2_WING3].speed = 1;
alien_defs[CD_BOSS2_WING3].maxShield = 500;
alien_defs[CD_BOSS2_WING3].shield = 500;
@ -491,6 +510,7 @@ void alien_defs_init()
alien_defs[CD_BOSS2_WING4].classDef = CD_BOSS2_WING4;
alien_defs[CD_BOSS2_WING4].AIType = AI_NORMAL;
alien_defs[CD_BOSS2_WING4].AITypeOriginal = AI_NORMAL;
alien_defs[CD_BOSS2_WING4].speed = 1;
alien_defs[CD_BOSS2_WING4].maxShield = 250;
alien_defs[CD_BOSS2_WING4].shield = 250;
@ -511,6 +531,7 @@ void alien_defs_init()
// Drone
alien_defs[CD_DRONE].classDef = CD_DRONE;
alien_defs[CD_DRONE].AIType = AI_OFFENSIVE;
alien_defs[CD_DRONE].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_DRONE].speed = 8;
alien_defs[CD_DRONE].maxShield = 5;
alien_defs[CD_DRONE].shield = 5;
@ -531,6 +552,7 @@ void alien_defs_init()
// Experimental Fighter
alien_defs[CD_CLOAKFIGHTER].classDef = CD_CLOAKFIGHTER;
alien_defs[CD_CLOAKFIGHTER].AIType = AI_OFFENSIVE;
alien_defs[CD_CLOAKFIGHTER].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_CLOAKFIGHTER].speed = 6;
alien_defs[CD_CLOAKFIGHTER].maxShield = 1000;
alien_defs[CD_CLOAKFIGHTER].shield = 1000;
@ -551,6 +573,7 @@ void alien_defs_init()
// Evil Ursula
alien_defs[CD_EVILURSULA].classDef = CD_EVILURSULA;
alien_defs[CD_EVILURSULA].AIType = AI_OFFENSIVE;
alien_defs[CD_EVILURSULA].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_EVILURSULA].speed = 5;
alien_defs[CD_EVILURSULA].maxShield = 500;
alien_defs[CD_EVILURSULA].shield = 500;
@ -571,6 +594,7 @@ void alien_defs_init()
// Mercenary
alien_defs[CD_KRASS].classDef = CD_KRASS;
alien_defs[CD_KRASS].AIType = AI_OFFENSIVE;
alien_defs[CD_KRASS].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_KRASS].speed = 5;
alien_defs[CD_KRASS].maxShield = 1000;
alien_defs[CD_KRASS].shield = 1000;
@ -591,6 +615,7 @@ void alien_defs_init()
// Executive Transport
alien_defs[CD_EXEC].classDef = CD_BOSS;
alien_defs[CD_EXEC].AIType = AI_EVASIVE;
alien_defs[CD_EXEC].AITypeOriginal = AI_NORMAL;
alien_defs[CD_EXEC].speed = 5;
alien_defs[CD_EXEC].maxShield = 1000;
alien_defs[CD_EXEC].shield = 1000;
@ -611,6 +636,7 @@ void alien_defs_init()
// Asteroid
alien_defs[CD_ASTEROID].classDef = CD_ASTEROID;
alien_defs[CD_ASTEROID].AIType = AI_WANDER;
alien_defs[CD_ASTEROID].AITypeOriginal = AI_WANDER;
alien_defs[CD_ASTEROID].speed = 1;
alien_defs[CD_ASTEROID].maxShield = 50;
alien_defs[CD_ASTEROID].shield = 50;
@ -630,6 +656,7 @@ void alien_defs_init()
alien_defs[CD_ASTEROID2].classDef = CD_ASTEROID2;
alien_defs[CD_ASTEROID2].AIType = AI_WANDER;
alien_defs[CD_ASTEROID2].AITypeOriginal = AI_WANDER;
alien_defs[CD_ASTEROID2].speed = 1;
alien_defs[CD_ASTEROID2].maxShield = 10;
alien_defs[CD_ASTEROID2].shield = 10;
@ -650,6 +677,7 @@ void alien_defs_init()
// Escort
alien_defs[CD_ESCORT].classDef = CD_ESCORT;
alien_defs[CD_ESCORT].AIType = AI_NORMAL;
alien_defs[CD_ESCORT].AITypeOriginal = AI_NORMAL;
alien_defs[CD_ESCORT].speed = 3;
alien_defs[CD_ESCORT].maxShield = 200;
alien_defs[CD_ESCORT].shield = 200;
@ -670,6 +698,7 @@ void alien_defs_init()
// Mobile Ray Cannon
alien_defs[CD_MOBILE_RAY].classDef = CD_MOBILE_RAY;
alien_defs[CD_MOBILE_RAY].AIType = AI_OFFENSIVE;
alien_defs[CD_MOBILE_RAY].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_MOBILE_RAY].speed = 5;
alien_defs[CD_MOBILE_RAY].maxShield = 250;
alien_defs[CD_MOBILE_RAY].shield = 250;
@ -690,6 +719,7 @@ void alien_defs_init()
// Rebel Carrier
alien_defs[CD_REBELCARRIER].classDef = CD_REBELCARRIER;
alien_defs[CD_REBELCARRIER].AIType = AI_OFFENSIVE;
alien_defs[CD_REBELCARRIER].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_REBELCARRIER].speed = 2;
alien_defs[CD_REBELCARRIER].maxShield = 100;
alien_defs[CD_REBELCARRIER].shield = 100;
@ -710,6 +740,7 @@ void alien_defs_init()
// Pluto Boss
alien_defs[CD_PLUTOBOSS].classDef = CD_PLUTOBOSS;
alien_defs[CD_PLUTOBOSS].AIType = AI_OFFENSIVE;
alien_defs[CD_PLUTOBOSS].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_PLUTOBOSS].speed = 4;
alien_defs[CD_PLUTOBOSS].maxShield = 500;
alien_defs[CD_PLUTOBOSS].shield = 500;
@ -730,6 +761,7 @@ void alien_defs_init()
// Pluto Boss Barrier
alien_defs[CD_BARRIER].classDef = CD_BARRIER;
alien_defs[CD_BARRIER].AIType = AI_OFFENSIVE;
alien_defs[CD_BARRIER].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_BARRIER].speed = 1;
alien_defs[CD_BARRIER].maxShield = 250;
alien_defs[CD_BARRIER].shield = 250;
@ -750,6 +782,7 @@ void alien_defs_init()
// Neptune Boss
alien_defs[CD_NEPTUNEBOSS].classDef = CD_NEPTUNEBOSS;
alien_defs[CD_NEPTUNEBOSS].AIType = AI_OFFENSIVE;
alien_defs[CD_NEPTUNEBOSS].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_NEPTUNEBOSS].speed = 4;
alien_defs[CD_NEPTUNEBOSS].maxShield = 800;
alien_defs[CD_NEPTUNEBOSS].shield = 800;
@ -770,6 +803,7 @@ void alien_defs_init()
// Mobile Shield
alien_defs[CD_MOBILESHIELD].classDef = CD_MOBILESHIELD;
alien_defs[CD_MOBILESHIELD].AIType = AI_EVASIVE;
alien_defs[CD_MOBILESHIELD].AITypeOriginal = AI_EVASIVE;
alien_defs[CD_MOBILESHIELD].speed = 6;
alien_defs[CD_MOBILESHIELD].maxShield = 150;
alien_defs[CD_MOBILESHIELD].shield = 150;
@ -790,6 +824,7 @@ void alien_defs_init()
// Firefly
alien_defs[CD_FIREFLY].classDef = CD_FIREFLY;
alien_defs[CD_FIREFLY].AIType = AI_OFFENSIVE;
alien_defs[CD_FIREFLY].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_FIREFLY].speed = 5;
alien_defs[CD_FIREFLY].maxShield = 250;
alien_defs[CD_FIREFLY].shield = 250;
@ -810,6 +845,7 @@ void alien_defs_init()
// Uranus Boss
alien_defs[CD_URANUSBOSS].classDef = CD_URANUSBOSS;
alien_defs[CD_URANUSBOSS].AIType = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSS].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSS].speed = 4;
alien_defs[CD_URANUSBOSS].maxShield = 750;
alien_defs[CD_URANUSBOSS].shield = 750;
@ -830,6 +866,7 @@ void alien_defs_init()
// Uranus Boss Wing 1
alien_defs[CD_URANUSBOSSWING1].classDef = CD_URANUSBOSSWING1;
alien_defs[CD_URANUSBOSSWING1].AIType = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSSWING1].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSSWING1].speed = 4;
alien_defs[CD_URANUSBOSSWING1].maxShield = 250;
alien_defs[CD_URANUSBOSSWING1].shield = 250;
@ -850,6 +887,7 @@ void alien_defs_init()
// Uranus Boss Wing 2
alien_defs[CD_URANUSBOSSWING2].classDef = CD_URANUSBOSSWING2;
alien_defs[CD_URANUSBOSSWING2].AIType = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSSWING2].AITypeOriginal = AI_OFFENSIVE;
alien_defs[CD_URANUSBOSSWING2].speed = 4;
alien_defs[CD_URANUSBOSSWING2].maxShield = 250;
alien_defs[CD_URANUSBOSSWING2].shield = 250;
@ -1499,7 +1537,8 @@ void alien_setAI(Object *alien)
tx = alien->target->x;
ty = alien->target->y;
switch (alien->AIType)
switch ((game.difficulty == DIFFICULTY_ORIGINAL) ?
alien->AITypeOriginal : alien->AIType)
{
case AI_NORMAL:
chase = 3;
@ -1994,7 +2033,11 @@ void alien_destroy(Object *alien, Object *attacker)
void alien_hurt(Object *alien, Object *attacker, int damage, int ion)
{
int ai_type;
double run_chance;
ai_type = ((game.difficulty == DIFFICULTY_ORIGINAL) ?
alien->AITypeOriginal : alien->AIType);
if (ion)
alien->systemPower -= damage;
@ -2061,7 +2104,7 @@ void alien_hurt(Object *alien, Object *attacker, int damage, int ion)
}
audio_playSound(SFX_HIT, alien->x, alien->y);
if (alien->AIType == AI_EVASIVE)
if (ai_type == AI_EVASIVE)
alien->thinktime = 0;
if (alien->shield < 1)

View File

@ -27,6 +27,7 @@ typedef struct Object_ {
int active;
int classDef; // Used by aliens to determine what they are
int AIType; // Type of articifial intelligence
int AITypeOriginal; // AIType in Classic difficulty
int id; // The "job" of the Object
struct Object_ *target; // index target in aliens array