Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}