void InitializeBadGuys(void) { int i; TActor *actor; for (i = 0; i < (int)gMission.missionData->Objectives.size; i++) { MissionObjective *mobj = CArrayGet(&gMission.missionData->Objectives, i); struct Objective *obj = CArrayGet(&gMission.Objectives, i); if (mobj->Type == OBJECTIVE_KILL && gMission.missionData->SpecialChars.size > 0) { for (; obj->placed < mobj->Count; obj->placed++) { int id = ActorAdd(CharacterStoreGetRandomSpecial( &gCampaign.Setting.characters), NULL); actor = CArrayGet(&gActors, id); actor->tileItem.flags |= ObjectiveToTileItem(i); PlaceBaddie(actor); } } else if (mobj->Type == OBJECTIVE_RESCUE) { for (; obj->placed < mobj->Count; obj->placed++) { int id = ActorAdd(CharacterStoreGetPrisoner( &gCampaign.Setting.characters, 0), NULL); actor = CArrayGet(&gActors, id); actor->tileItem.flags |= ObjectiveToTileItem(i); if (MapHasLockedRooms(&gMap)) { PlacePrisoner(actor); } else { PlaceBaddie(actor); } } } } gBaddieCount = gMission.index * 4; gAreGoodGuysPresent = 0; }
void InitializeBadGuys(void) { for (int i = 0; i < (int)gMission.missionData->Objectives.size; i++) { MissionObjective *mobj = CArrayGet(&gMission.missionData->Objectives, i); ObjectiveDef *obj = CArrayGet(&gMission.Objectives, i); if (mobj->Type == OBJECTIVE_KILL && gMission.missionData->SpecialChars.size > 0) { for (; obj->placed < mobj->Count; obj->placed++) { NActorAdd aa = NActorAdd_init_default; aa.UID = ActorsGetNextUID(); aa.CharId = CharacterStoreGetRandomSpecialId( &gCampaign.Setting.characters); aa.TileItemFlags = ObjectiveToTileItem(i); aa.Direction = rand() % DIRECTION_COUNT; const Character *c = CArrayGet(&gCampaign.Setting.characters.OtherChars, aa.CharId); aa.Health = CharacterGetStartingHealth(c, true); aa.FullPos = PlaceAwayFromPlayers(&gMap); GameEvent e = GameEventNew(GAME_EVENT_ACTOR_ADD); e.u.ActorAdd = aa; GameEventsEnqueue(&gGameEvents, e); // Process the events that actually place the actors HandleGameEvents(&gGameEvents, NULL, NULL, NULL); } } else if (mobj->Type == OBJECTIVE_RESCUE) { for (; obj->placed < mobj->Count; obj->placed++) { NActorAdd aa = NActorAdd_init_default; aa.UID = ActorsGetNextUID(); aa.CharId = CharacterStoreGetPrisonerId( &gCampaign.Setting.characters, 0); aa.TileItemFlags = ObjectiveToTileItem(i); aa.Direction = rand() % DIRECTION_COUNT; const Character *c = CArrayGet(&gCampaign.Setting.characters.OtherChars, aa.CharId); aa.Health = CharacterGetStartingHealth(c, true); if (MapHasLockedRooms(&gMap)) { aa.FullPos = PlacePrisoner(&gMap); } else { aa.FullPos = PlaceAwayFromPlayers(&gMap); } GameEvent e = GameEventNew(GAME_EVENT_ACTOR_ADD); e.u.ActorAdd = aa; GameEventsEnqueue(&gGameEvents, e); // Process the events that actually place the actors HandleGameEvents(&gGameEvents, NULL, NULL, NULL); } } } gBaddieCount = gMission.index * 4; gAreGoodGuysPresent = 0; }