bool RunGame(const CampaignOptions *co, struct MissionOptions *m, Map *map) { // Clear the background DrawRectangle( &gGraphicsDevice, Vec2iZero(), gGraphicsDevice.cachedConfig.Res, colorBlack, 0); SDL_UpdateTexture( gGraphicsDevice.bkg, NULL, gGraphicsDevice.buf, gGraphicsDevice.cachedConfig.Res.x * sizeof(Uint32)); MapLoad(map, m, co); // Seed random if PVP mode (otherwise players will always spawn in same // position) if (IsPVP(co->Entry.Mode)) { srand((unsigned int)time(NULL)); } if (!co->IsClient) { MapLoadDynamic(map, m, &co->Setting.characters); // For PVP modes, mark all map as explored if (IsPVP(co->Entry.Mode)) { MapMarkAllAsVisited(map); } // Reset players for the mission CA_FOREACH(const PlayerData, p, gPlayerDatas) // Only reset for local players; for remote ones wait for the // client ready message if (!p->IsLocal) continue; GameEvent e = GameEventNew(GAME_EVENT_PLAYER_DATA); e.u.PlayerData = PlayerDataMissionReset(p); GameEventsEnqueue(&gGameEvents, e); CA_FOREACH_END() // Process the events to force add the players HandleGameEvents(&gGameEvents, NULL, NULL, NULL); // Note: place players first, // as bad guys are placed away from players Vec2i firstPos = Vec2iZero(); CA_FOREACH(const PlayerData, p, gPlayerDatas) if (!p->Ready) continue; firstPos = PlacePlayer(&gMap, p, firstPos, true); CA_FOREACH_END() if (!IsPVP(co->Entry.Mode)) { InitializeBadGuys(); CreateEnemies(); } }
void GrafxMakeBackground( GraphicsDevice *device, DrawBuffer *buffer, CampaignOptions *co, struct MissionOptions *mo, Map *map, HSV tint, int isEditor, int buildTables, Vec2i pos, GrafxDrawExtra *extra) { CampaignAndMissionSetup(buildTables, co, mo); MapLoad(&gMap, mo, &co->Setting.characters); InitializeBadGuys(); CreateEnemies(); MapMarkAllAsVisited(map); if (isEditor) { MapShowExitArea(map); } GrafxDrawBackground(device, buffer, tint, pos, extra); }
void GrafxMakeBackground( GraphicsDevice *device, DrawBuffer *buffer, CampaignOptions *co, struct MissionOptions *mo, Map *map, HSV tint, const bool isEditor, struct vec2 pos, GrafxDrawExtra *extra) { CampaignAndMissionSetup(co, mo); GameEventsInit(&gGameEvents); MapBuild(map, mo->missionData, co); InitializeBadGuys(); CreateEnemies(); MapMarkAllAsVisited(map); if (isEditor) { MapShowExitArea(map, map->ExitStart, map->ExitEnd); } else { pos = Vec2CenterOfTile(svec2i_scale_divide(map->Size, 2)); } // Process the events that place dynamic objects HandleGameEvents(&gGameEvents, NULL, NULL, NULL); GrafxDrawBackground(device, buffer, tint, pos, extra); GameEventsTerminate(&gGameEvents); }