static void die(void) { Entity *e; self->alive = ALIVE_DEAD; playBattleSound(SND_CAP_DEATH, self->x, self->y); addLargeExplosion(); addDebris(self->x, self->y, 12); for (e = battle.entityHead.next ; e != NULL ; e = e->next) { if (e->owner == self) { e->alive = ALIVE_DEAD; } } updateObjective(self->name, TT_DESTROY); updateObjective(self->groupName, TT_DESTROY); updateCondition(self->name, TT_DESTROY); updateCondition(self->groupName, TT_DESTROY); }
static void disable(void) { Entity *e; runScriptFunction("CAP_DISABLED %s", self->owner->name); for (e = battle.entityHead.next ; e != NULL ; e = e->next) { if (e->owner == self->owner || e == self->owner) { e->systemPower = 0; e->flags |= EF_DISABLED; } } updateObjective(self->owner->name, TT_DISABLE); updateObjective(self->owner->groupName, TT_DISABLE); }
static void die(void) { if (self->killedBy == player) { battle.stats[STAT_MINES_DESTROYED]++; } addMineExplosion(); doSplashDamage(); playBattleSound(SND_EXPLOSION_5, self->x, self->y); self->alive = ALIVE_DEAD; updateObjective(self->name, TT_DESTROY); runScriptFunction("MINES_DESTROYED %d", battle.stats[STAT_MINES_DESTROYED]); }
void fireMapTrigger(char *name) { int i; char message[MAX_MESSAGE_LENGTH]; if (strlen(name) == 0) { return; } for (i=0;i<MAX_TRIGGERS;i++) { if (trigger[i].inUse == TRUE && strcmpignorecase(trigger[i].triggerName, name) == 0) { trigger[i].count++; if (trigger[i].targetType == UPDATE_OBJECTIVE) { snprintf(message, MAX_MESSAGE_LENGTH, "%s (%d / %d)", _(trigger[i].targetName), trigger[i].count, trigger[i].total); freeMessageQueue(); setInfoBoxMessage(60, 255, 255, 255, message); } if (trigger[i].count == trigger[i].total) { switch (trigger[i].targetType) { case UPDATE_OBJECTIVE: updateObjective(trigger[i].targetName); break; case ACTIVATE_ENTITY: activateEntitiesWithRequiredName(trigger[i].targetName, TRUE); break; case DEACTIVATE_ENTITY: activateEntitiesWithRequiredName(trigger[i].targetName, FALSE); break; case RUN_SCRIPT: runScript(trigger[i].targetName); break; case KILL_ENTITY: killEntity(trigger[i].targetName); break; case REMOVE_INVENTORY_ITEM: removeInventoryItemByObjectiveName(trigger[i].targetName); break; default: break; } trigger[i].inUse = FALSE; } } } }
void ObjectiveGenerator::updateOutputs() { updateObjective(); }
void doFighter(void) { if (self->alive == ALIVE_ALIVE) { if (self != player) { separate(); } if (!(self->flags & EF_DISABLED)) { attachRope(); } if (self->thrust > 0.25) { addEngineEffect(); } if (self->health <= 0) { self->health = 0; self->alive = ALIVE_DYING; self->die(); if (self == battle.missionTarget) { battle.missionTarget = NULL; } } else if (self->systemPower <= 0 || (self->flags & EF_DISABLED)) { self->dx *= 0.99; self->dy *= 0.99; self->thrust = 0; self->shield = self->maxShield = 0; self->action = NULL; if ((self->flags & EF_DISABLED) == 0) { playBattleSound(SND_POWER_DOWN, self->x, self->y); self->flags |= EF_DISABLED; self->flags |= EF_SECONDARY_TARGET; if (self->aiFlags & AIF_SURRENDERING) { self->aiFlags |= AIF_SURRENDERED; self->aiFlags &= ~AIF_SURRENDERING; } battle.stats[STAT_ENEMIES_DISABLED]++; updateObjective(self->name, TT_DISABLE); updateObjective(self->groupName, TT_DISABLE); if (self->side != player->side) { runScriptFunction("ENEMIES_DISABLED %d", battle.stats[STAT_ENEMIES_DISABLED]); } } } if (self->target != NULL && self->target->alive != ALIVE_ALIVE) { self->target = NULL; if (self != player) { self->action = doAI; } } if (self->aiFlags & AIF_SUSPICIOUS) { checkSuspicionLevel(); } if (self->aiFlags & AIF_ZAK_SUSPICIOUS) { checkZackariaSuspicionLevel(); } } if (self->alive == ALIVE_ESCAPED) { if (self == player && !game.currentMission->challengeData.isChallenge) { updateObjective("Player", TT_ESCAPED); completeMission(); } if (self->side != player->side && (!(self->flags & EF_DISABLED))) { addHudMessage(colors.red, _("Mission target has escaped.")); battle.stats[STAT_ENEMIES_ESCAPED]++; } if (strcmp(self->defName, "Civilian") == 0) { battle.stats[STAT_CIVILIANS_RESCUED]++; } /* if you did not escape under your own volition, or with the aid of a friend, you've been stolen */ if (!self->owner || self->side == self->owner->side) { updateObjective(self->name, TT_ESCAPED); updateCondition(self->name, TT_ESCAPED); } else { updateObjective(self->name, TT_STOLEN); updateCondition(self->name, TT_STOLEN); } } if (self->alive == ALIVE_DEAD) { if (player->alive == ALIVE_ALIVE && self != player) { if (self->side != player->side) { if (!(self->flags & EF_NO_KILL_INC)) { battle.stats[STAT_ENEMIES_KILLED]++; runScriptFunction("ENEMIES_KILLED %d", battle.stats[STAT_ENEMIES_KILLED]); } } else { if (strcmp(self->name, "Civilian") == 0) { battle.stats[STAT_CIVILIANS_KILLED]++; if (!battle.isEpic || game.currentMission->challengeData.isChallenge) { addHudMessage(colors.red, _("Civilian has been killed")); } runScriptFunction("CIVILIANS_KILLED %d", battle.stats[STAT_CIVILIANS_KILLED]); } else { battle.stats[STAT_ALLIES_KILLED]++; if (!battle.isEpic && !game.currentMission->challengeData.isChallenge) { addHudMessage(colors.red, _("Ally has been killed")); } runScriptFunction("ALLIES_KILLED %d", battle.stats[STAT_ALLIES_KILLED]); } } updateObjective(self->name, TT_DESTROY); updateObjective(self->groupName, TT_DESTROY); if (battle.isEpic && self->killedBy == player) { updateObjective("EPIC_PLAYER_KILLS", TT_DESTROY); } adjustObjectiveTargetValue(self->name, TT_ESCAPED, -1); updateCondition(self->name, TT_DESTROY); updateCondition(self->groupName, TT_DESTROY); /* don't fire if the opposing side is responsible */ if (self->aiFlags & AIF_SURRENDERED && self->killedBy->side == player->side) { updateCondition("SURRENDERED", TT_DESTROY); } } } }