📄 aliens.cpp
字号:
}
if ((currentGame.area != 18) || (theEnemy->shield < 0))
theEnemy->x += engine.ssx;
theEnemy->y += engine.ssy;
}
*theEnemy++;
}
}
void setAlienShapes()
{
for (int i = 0 ; i < MAX_DEFALIENS ; i++)
{
if (graphics.shipShape[defEnemy[i].imageIndex[0]] != NULL)
{
defEnemy[i].image[0] = graphics.shipShape[defEnemy[i].imageIndex[0]];
defEnemy[i].image[1] = graphics.shipShape[defEnemy[i].imageIndex[1]];
defEnemy[i].engineX = defEnemy[i].image[0]->w;
defEnemy[i].engineY = (defEnemy[i].image[0]->h / 2);
}
}
}
#if USEPACK
void loadAliens()
{
int dataLocation = locateDataInPak("data/aliens.dat", 1);
int def, ai, speed, shield, max, image1, image2, weapon1, weapon2, chance1, chance2, score;
int collectChance, collectType, collectVal, flags;
FILE *fp;
fp = fopen(PACKLOCATION, "rb");
fseek(fp, dataLocation, SEEK_SET);
for (int i = 0 ; i < MAX_DEFALIENS ; i++)
{
fscanf(fp, "%d", &def);
fscanf(fp, "%d", &ai);
fscanf(fp, "%d", &speed);
fscanf(fp, "%d", &shield);
fscanf(fp, "%d", &max);
fscanf(fp, "%d", &image1);
fscanf(fp, "%d", &image2);
fscanf(fp, "%d", &weapon1);
fscanf(fp, "%d", &weapon2);
fscanf(fp, "%d", &chance1);
fscanf(fp, "%d", &chance2);
fscanf(fp, "%d", &score);
fscanf(fp, "%d", &collectChance);
fscanf(fp, "%d", &collectType);
fscanf(fp, "%d", &collectVal);
fscanf(fp, "%d", &flags);
defEnemy[i].classDef = def;
defEnemy[i].AIType = ai;
defEnemy[i].speed = speed;
defEnemy[i].shield = shield;
defEnemy[i].maxShield = max;
defEnemy[i].imageIndex[0] = image1;
defEnemy[i].imageIndex[1] = image2;
defEnemy[i].weaponType[0] = weapon1;
defEnemy[i].weaponType[1] = weapon2;
defEnemy[i].chance[0] = chance1;
defEnemy[i].chance[1] = chance2;
defEnemy[i].score = score;
defEnemy[i].collectChance = collectChance;
defEnemy[i].collectType = collectType;
defEnemy[i].collectValue = collectVal;
defEnemy[i].flags = flags;
}
fclose(fp);
}
void defineAliens(){loadAliens();}
#else
void saveAliens()
{
FILE *fp;
fp = fopen("data/aliens.dat", "wb");
if (fp == NULL)
{
printf("Unable to write Alien Data File\n");
exit(1);
}
for (int i = 0 ; i < MAX_DEFALIENS ; i++)
{
fprintf(fp, "%d ", defEnemy[i].classDef);
fprintf(fp, "%d ", defEnemy[i].AIType);
fprintf(fp, "%d ", defEnemy[i].speed);
fprintf(fp, "%d ", defEnemy[i].shield);
fprintf(fp, "%d ", defEnemy[i].maxShield);
fprintf(fp, "%d ", defEnemy[i].imageIndex[0]);
fprintf(fp, "%d ", defEnemy[i].imageIndex[1]);
fprintf(fp, "%d ", defEnemy[i].weaponType[0]);
fprintf(fp, "%d ", defEnemy[i].weaponType[1]);
fprintf(fp, "%d ", defEnemy[i].chance[0]);
fprintf(fp, "%d ", defEnemy[i].chance[1]);
fprintf(fp, "%d ", defEnemy[i].score);
fprintf(fp, "%d ", defEnemy[i].collectChance);
fprintf(fp, "%d ", defEnemy[i].collectType);
fprintf(fp, "%d ", defEnemy[i].collectValue);
fprintf(fp, "%d\n", defEnemy[i].flags);
}
// Put an extra line for the PAK file "just in case"
fprintf(fp, "\n");
fclose(fp);
}
/*
Will be dumped into a data file at the end of the project
*/
void defineAliens()
{
// Dual Plasma Fighter.
defEnemy[CD_DUALFIGHTER].classDef = CD_DUALFIGHTER;
defEnemy[CD_DUALFIGHTER].AIType = AI_NORMAL;
defEnemy[CD_DUALFIGHTER].speed = 4;
defEnemy[CD_DUALFIGHTER].maxShield = 5;
defEnemy[CD_DUALFIGHTER].shield = 5;
defEnemy[CD_DUALFIGHTER].imageIndex[0] = 2;
defEnemy[CD_DUALFIGHTER].imageIndex[1] = 3;
defEnemy[CD_DUALFIGHTER].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_DUALFIGHTER].weaponType[1] = W_ROCKETS;
defEnemy[CD_DUALFIGHTER].chance[0] = 100;
defEnemy[CD_DUALFIGHTER].chance[1] = 1;
defEnemy[CD_DUALFIGHTER].score = 25;
defEnemy[CD_DUALFIGHTER].collectChance = 50;
defEnemy[CD_DUALFIGHTER].collectType = P_ANYTHING;
defEnemy[CD_DUALFIGHTER].collectValue = 50;
defEnemy[CD_DUALFIGHTER].flags = FL_WEAPCO;
// Missile Boat
defEnemy[CD_MISSILEBOAT].classDef = CD_MISSILEBOAT;
defEnemy[CD_MISSILEBOAT].AIType = AI_DEFENSIVE;
defEnemy[CD_MISSILEBOAT].speed = 2;
defEnemy[CD_MISSILEBOAT].maxShield = 50;
defEnemy[CD_MISSILEBOAT].shield = 50;
defEnemy[CD_MISSILEBOAT].imageIndex[0] = 4;
defEnemy[CD_MISSILEBOAT].imageIndex[1] = 5;
defEnemy[CD_MISSILEBOAT].weaponType[0] = W_ROCKETS;
defEnemy[CD_MISSILEBOAT].weaponType[1] = W_DOUBLE_ROCKETS;
defEnemy[CD_MISSILEBOAT].chance[0] = 25;
defEnemy[CD_MISSILEBOAT].chance[1] = 4;
defEnemy[CD_MISSILEBOAT].score = 250;
defEnemy[CD_MISSILEBOAT].collectChance = 25;
defEnemy[CD_MISSILEBOAT].collectType = P_ANYTHING;
defEnemy[CD_MISSILEBOAT].collectValue = 75;
defEnemy[CD_MISSILEBOAT].flags = FL_WEAPCO;
//Prototype fighter
defEnemy[CD_PROTOFIGHTER].classDef = CD_PROTOFIGHTER;
defEnemy[CD_PROTOFIGHTER].AIType = AI_DEFENSIVE;
defEnemy[CD_PROTOFIGHTER].speed = 5;
defEnemy[CD_PROTOFIGHTER].maxShield = 15;
defEnemy[CD_PROTOFIGHTER].shield = 15;
defEnemy[CD_PROTOFIGHTER].imageIndex[0] = 6;
defEnemy[CD_PROTOFIGHTER].imageIndex[1] = 7;
defEnemy[CD_PROTOFIGHTER].weaponType[0] = W_TRIPLE_SHOT;
defEnemy[CD_PROTOFIGHTER].weaponType[1] = P_ANYTHING;
defEnemy[CD_PROTOFIGHTER].chance[0] = 100;
defEnemy[CD_PROTOFIGHTER].chance[1] = 1;
defEnemy[CD_PROTOFIGHTER].score = 50;
defEnemy[CD_PROTOFIGHTER].collectChance = 50;
defEnemy[CD_PROTOFIGHTER].collectType = P_ANYTHING;
defEnemy[CD_PROTOFIGHTER].collectValue = 50;
defEnemy[CD_PROTOFIGHTER].flags = FL_WEAPCO;
// Phoebe and Ursula
defEnemy[CD_FRIEND].classDef = CD_FRIEND;
defEnemy[CD_FRIEND].AIType = AI_OFFENSIVE;
defEnemy[CD_FRIEND].speed = 3;
defEnemy[CD_FRIEND].maxShield = 50;
defEnemy[CD_FRIEND].shield = 50;
defEnemy[CD_FRIEND].imageIndex[0] = 20;
defEnemy[CD_FRIEND].imageIndex[1] = 21;
defEnemy[CD_FRIEND].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_FRIEND].weaponType[1] = W_HOMING_MISSILE;
defEnemy[CD_FRIEND].chance[0] = 100;
defEnemy[CD_FRIEND].chance[1] = 5;
defEnemy[CD_FRIEND].score = 0;
defEnemy[CD_FRIEND].collectChance = 0;
defEnemy[CD_FRIEND].collectType = P_CASH;
defEnemy[CD_FRIEND].collectValue = 0;
defEnemy[CD_FRIEND].flags = FL_FRIEND;
// Boss 1
defEnemy[CD_FRIGATE].classDef = CD_BOSS;
defEnemy[CD_FRIGATE].AIType = AI_NORMAL;
defEnemy[CD_FRIGATE].speed = 2;
defEnemy[CD_FRIGATE].maxShield = 550;
defEnemy[CD_FRIGATE].shield = 550;
defEnemy[CD_FRIGATE].imageIndex[0] = 8;
defEnemy[CD_FRIGATE].imageIndex[1] = 9;
defEnemy[CD_FRIGATE].weaponType[0] = W_MICRO_ROCKETS;
defEnemy[CD_FRIGATE].weaponType[1] = W_ENERGYRAY;
defEnemy[CD_FRIGATE].chance[0] = 100;
defEnemy[CD_FRIGATE].chance[1] = 85;
defEnemy[CD_FRIGATE].score = 500;
defEnemy[CD_FRIGATE].collectChance = 100;
defEnemy[CD_FRIGATE].collectType = P_CASH;
defEnemy[CD_FRIGATE].collectValue = 250;
defEnemy[CD_FRIGATE].flags = FL_WEAPCO;
defEnemy[CD_FRIGATE_WING1].classDef = CD_FRIGATE_WING1;
defEnemy[CD_FRIGATE_WING1].AIType = AI_NORMAL;
defEnemy[CD_FRIGATE_WING1].speed = 2;
defEnemy[CD_FRIGATE_WING1].maxShield = 100;
defEnemy[CD_FRIGATE_WING1].shield = 100;
defEnemy[CD_FRIGATE_WING1].imageIndex[0] = 10;
defEnemy[CD_FRIGATE_WING1].imageIndex[1] = 11;
defEnemy[CD_FRIGATE_WING1].weaponType[0] = W_TRIPLE_SHOT;
defEnemy[CD_FRIGATE_WING1].weaponType[1] = W_ROCKETS;
defEnemy[CD_FRIGATE_WING1].chance[0] = 100;
defEnemy[CD_FRIGATE_WING1].chance[1] = 10;
defEnemy[CD_FRIGATE_WING1].score = 500;
defEnemy[CD_FRIGATE_WING1].collectChance = 100;
defEnemy[CD_FRIGATE_WING1].collectType = P_ANYTHING;
defEnemy[CD_FRIGATE_WING1].collectValue = 250;
defEnemy[CD_FRIGATE_WING1].flags = FL_WEAPCO + FL_DAMAGEOWNER;
defEnemy[CD_FRIGATE_WING2].classDef = CD_FRIGATE_WING2;
defEnemy[CD_FRIGATE_WING2].AIType = AI_NORMAL;
defEnemy[CD_FRIGATE_WING2].speed = 2;
defEnemy[CD_FRIGATE_WING2].maxShield = 100;
defEnemy[CD_FRIGATE_WING2].shield = 100;
defEnemy[CD_FRIGATE_WING2].imageIndex[0] = 12;
defEnemy[CD_FRIGATE_WING2].imageIndex[1] = 13;
defEnemy[CD_FRIGATE_WING2].weaponType[0] = W_TRIPLE_SHOT;
defEnemy[CD_FRIGATE_WING2].weaponType[1] = W_ROCKETS;
defEnemy[CD_FRIGATE_WING2].chance[0] = 100;
defEnemy[CD_FRIGATE_WING2].chance[1] = 10;
defEnemy[CD_FRIGATE_WING2].score = 500;
defEnemy[CD_FRIGATE_WING2].collectChance = 100;
defEnemy[CD_FRIGATE_WING2].collectType = P_ANYTHING;
defEnemy[CD_FRIGATE_WING2].collectValue = 250;
defEnemy[CD_FRIGATE_WING2].flags = FL_WEAPCO + FL_DAMAGEOWNER;
// Transport ship
defEnemy[CD_TRANSPORTSHIP].classDef = CD_TRANSPORTSHIP;
defEnemy[CD_TRANSPORTSHIP].AIType = AI_EVASIVE;
defEnemy[CD_TRANSPORTSHIP].speed = 4;
defEnemy[CD_TRANSPORTSHIP].maxShield = 10;
defEnemy[CD_TRANSPORTSHIP].shield = 10;
defEnemy[CD_TRANSPORTSHIP].imageIndex[0] = 14;
defEnemy[CD_TRANSPORTSHIP].imageIndex[1] = 15;
defEnemy[CD_TRANSPORTSHIP].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_TRANSPORTSHIP].weaponType[1] = W_DOUBLE_SHOT;
defEnemy[CD_TRANSPORTSHIP].chance[0] = 0;
defEnemy[CD_TRANSPORTSHIP].chance[1] = 0;
defEnemy[CD_TRANSPORTSHIP].score = 25;
defEnemy[CD_TRANSPORTSHIP].collectChance = 100;
defEnemy[CD_TRANSPORTSHIP].collectType = P_WEAPONS;
defEnemy[CD_TRANSPORTSHIP].collectValue = 30;
defEnemy[CD_TRANSPORTSHIP].flags = FL_WEAPCO + FL_NOFIRE;
// Cargo ship
defEnemy[CD_CARGOSHIP].classDef = CD_CARGOSHIP;
defEnemy[CD_CARGOSHIP].AIType = AI_EVASIVE;
defEnemy[CD_CARGOSHIP].speed = 4;
defEnemy[CD_CARGOSHIP].maxShield = 10;
defEnemy[CD_CARGOSHIP].shield = 10;
defEnemy[CD_CARGOSHIP].imageIndex[0] = 22;
defEnemy[CD_CARGOSHIP].imageIndex[1] = 23;
defEnemy[CD_CARGOSHIP].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_CARGOSHIP].weaponType[1] = W_DOUBLE_SHOT;
defEnemy[CD_CARGOSHIP].chance[0] = 0;
defEnemy[CD_CARGOSHIP].chance[1] = 0;
defEnemy[CD_CARGOSHIP].score = 25;
defEnemy[CD_CARGOSHIP].collectChance = 50;
defEnemy[CD_CARGOSHIP].collectType = P_ANYTHING;
defEnemy[CD_CARGOSHIP].collectValue = 100;
defEnemy[CD_CARGOSHIP].flags = FL_WEAPCO + FL_NOFIRE;
// Weapco Miner
defEnemy[CD_MINER].classDef = CD_MINER;
defEnemy[CD_MINER].AIType = AI_EVASIVE;
defEnemy[CD_MINER].speed = 4;
defEnemy[CD_MINER].maxShield = 25;
defEnemy[CD_MINER].shield = 25;
defEnemy[CD_MINER].imageIndex[0] = 16;
defEnemy[CD_MINER].imageIndex[1] = 17;
defEnemy[CD_MINER].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_MINER].weaponType[1] = W_DOUBLE_SHOT;
defEnemy[CD_MINER].chance[0] = 0;
defEnemy[CD_MINER].chance[1] = 0;
defEnemy[CD_MINER].score = 100;
defEnemy[CD_MINER].collectChance = 100;
defEnemy[CD_MINER].collectType = P_ANYTHING;
defEnemy[CD_MINER].collectValue = 30;
defEnemy[CD_MINER].flags = FL_WEAPCO + FL_NOFIRE + FL_DROPMINES;
// Kline
defEnemy[CD_KLINE].classDef = CD_KLINE;
defEnemy[CD_KLINE].AIType = AI_OFFENSIVE;
defEnemy[CD_KLINE].speed = 5;
defEnemy[CD_KLINE].maxShield = 750;
defEnemy[CD_KLINE].shield = 750;
defEnemy[CD_KLINE].imageIndex[0] = 18;
defEnemy[CD_KLINE].imageIndex[1] = 19;
defEnemy[CD_KLINE].weaponType[0] = W_TRIPLE_SHOT;
defEnemy[CD_KLINE].weaponType[1] = W_MICRO_ROCKETS;
defEnemy[CD_KLINE].chance[0] = 100;
defEnemy[CD_KLINE].chance[1] = 2;
defEnemy[CD_KLINE].score = 0;
defEnemy[CD_KLINE].collectChance = 0;
defEnemy[CD_KLINE].collectType = P_ANYTHING;
defEnemy[CD_KLINE].collectValue = 0;
defEnemy[CD_KLINE].flags = FL_WEAPCO + FL_CANNOTDIE + FL_ALWAYSFACE + FL_CIRCLES;
// Aim Fighter
defEnemy[CD_AIMFIGHTER].classDef = CD_AIMFIGHTER;
defEnemy[CD_AIMFIGHTER].AIType = AI_NORMAL;
defEnemy[CD_AIMFIGHTER].speed = 3;
defEnemy[CD_AIMFIGHTER].maxShield = 15;
defEnemy[CD_AIMFIGHTER].shield = 15;
defEnemy[CD_AIMFIGHTER].imageIndex[0] = 8;
defEnemy[CD_AIMFIGHTER].imageIndex[1] = 9;
defEnemy[CD_AIMFIGHTER].weaponType[0] = W_AIMED_SHOT;
defEnemy[CD_AIMFIGHTER].weaponType[1] = W_AIMED_SHOT;
defEnemy[CD_AIMFIGHTER].chance[0] = 7;
defEnemy[CD_AIMFIGHTER].chance[1] = 1;
defEnemy[CD_AIMFIGHTER].score = 50;
defEnemy[CD_AIMFIGHTER].collectChance = 75;
defEnemy[CD_AIMFIGHTER].collectType = P_ANYTHING;
defEnemy[CD_AIMFIGHTER].collectValue = 100;
defEnemy[CD_AIMFIGHTER].flags = FL_WEAPCO + FL_AIMS;
// Slave ship
defEnemy[CD_SLAVETRANSPORT].classDef = CD_SLAVETRANSPORT;
defEnemy[CD_SLAVETRANSPORT].AIType = AI_EVASIVE;
defEnemy[CD_SLAVETRANSPORT].speed = 2;
defEnemy[CD_SLAVETRANSPORT].maxShield = 10;
defEnemy[CD_SLAVETRANSPORT].shield = 20;
defEnemy[CD_SLAVETRANSPORT].imageIndex[0] = 10;
defEnemy[CD_SLAVETRANSPORT].imageIndex[1] = 11;
defEnemy[CD_SLAVETRANSPORT].weaponType[0] = W_DOUBLE_SHOT;
defEnemy[CD_SLAVETRANSPORT].weaponType[1] = W_DOUBLE_SHOT;
defEnemy[CD_SLAVETRANSPORT].chance[0] = 0;
defEnemy[CD_SLAVETRANSPORT].chance[1] = 0;
defEnemy[CD_SLAVETRANSPORT].score = 25;
defEnemy[CD_SLAVETRANSPORT].collectChance = 100;
defEnemy[CD_SLAVETRANSPORT].collectType = P_SLAVES;
defEnemy[CD_SLAVETRANSPORT].collectValue = 25;
defEnemy[CD_SLAVETRANSPORT].flags = FL_WEAPCO + FL_NOFIRE;
// Good Transport
defEnemy[CD_GOODTRANSPORT].classDef = CD_GOODTRANSPORT;
defEnemy[CD_GOODTRANSPORT].AIType = AI_EVASIVE;
defEnemy[CD_GOODTRANSPORT].speed = 3;
defEnemy[CD_GOODTRANSPORT].maxShield = 75;
defEnemy[CD_GOODTRANSPORT].shield = 75;
defEnemy[CD_GOODTRANSPORT].imageIndex[0] = 12;
defEnemy[CD_GOODTRANSPORT].imageIndex[1] = 13;
defEnemy[CD_GOODTRANSPORT].weaponType[0] = W_AIMED_SHOT;
defEnemy[CD_GOODTRANSPORT].weaponType[1] = W_AIMED_SHOT;
defEnemy[CD_GOODTRANSPORT].chance[0] = 100;
defEnemy[CD_GOODTRANSPORT].chance[1] = 100;
defEnemy[CD_GOODTRANSPORT].score = 0;
defEnemy[CD_GOODTRANSPORT].collectChance = 0;
defEnemy[CD_GOODTRANSPORT].collectType = P_ANYTHING;
defEnemy[CD_GOODTRANSPORT].collectValue = 0;
defEnemy[CD_GOODTRANSPORT].flags = FL_FRIEND + FL_NOFIRE + FL_AIMS;
// Sid Wilson
defEnemy[CD_SID].classDef = CD_SID;
defEnemy[CD_SID].AIType = AI_NORMAL;
defEnemy[CD_SID].speed = 3;
defEnemy[CD_SID].maxShield = 50;
defEnemy[CD_SID].shield = 50;
defEnemy[CD_SID].imageIndex[0] = 24;
defEnemy[CD_SID].imageIndex[1] = 25;
defEnemy[CD_SID].weaponType[0] = W_IONCANNON;
defEnemy[CD_SID].weaponType[1] = W_IONCANNON;
defEnemy[CD_SID].chance[0] = 100;
defEnemy[CD_SID].chance[1] = 0;
defEnemy[CD_SID].score = 0;
defEnemy[CD_SID].collectChance = 0;
defEnemy[CD_SID].collectType = P_ANYTHING;
defEnemy[CD_SID].collectValue = 0;
defEnemy[CD_SID].flags = FL_FRIEND + FL_AIMS;
// Mining Vessel Boss
defEnemy[CD_MINEBOSS].classDef = CD_BOSS;
defEnemy[CD_MINEBOSS].AIType = AI_NORMAL;
defEnemy[CD_MINEBOSS].speed = 3;
defEnemy[CD_MINEBOSS].maxShield = 1000;
defEnemy[CD_MINEBOSS].shield = 1000;
defEnemy[CD_MINEBOSS].imageIndex[0] = 26;
defEnemy[CD_MINEBOSS].imageIndex[1] = 27;
defEnemy[CD_MINEBOSS].weaponType[0] = W_TRIPLE_SHOT;
defEnemy[CD_MINEBOSS].weaponType[1] = W_SPREADSHOT;
defEnemy[CD_MINEBOSS].chance[0] = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -