void loadmap(Zone& area, Map& level, Player& player1, Surface& images) { int mapnum, floornum; bool stairs; int playx,playy; //load world and set initial values the first time through if (player1.get_map() == -1) { srand(time(NULL)); mapnum = area.get_id(); floornum = 0; area.init(); level = area.zones[mapnum].floors[floornum]; playx = level.get_begin_x() * TILEW; playy = level.get_begin_y() * TILEH; player1.put_stairs(1); } //load a new map if the player has changed maps midplay if (player1.get_map() >= 0) { mapnum = player1.get_destmap(); floornum = player1.get_destfloor(); if (floornum < 0) { floornum = 0; player1.put_stairs(1); mapnum = area.get_id(); playx = area.zones[player1.get_map()].get_x() * TILEW; playy = (area.zones[player1.get_map()].get_y() + 1) * TILEH; } area.zones[player1.get_map()].floors[player1.get_floor()] = level; } level = area.zones[mapnum].floors[floornum]; level.set_rendered(0); //area is not yet rendered for graphics if (area.zones[mapnum].floors[floornum].get_type() == TOWN){ playx = MAPW / 2 * TILEW; playy = (MAPH - 2) * TILEH; } if (area.zones[mapnum].floors[floornum].get_type() == DUNGEON){ stairs = player1.get_stairs(); if (stairs == 0) { playx = level.get_end_x() * TILEW; playy = level.get_end_y() * TILEH; } if (stairs == 1) { playx = level.get_begin_x() * TILEW; playy = level.get_begin_y() * TILEH; } } player1.put_coor(playx, playy); player1.put_map(mapnum); player1.put_floor(floornum); //load appropriate spritesheet for this kind of level switch(level.get_type()) { case DUNGEON: images.tilesheet = load_bitmaps("data/images/dungeon.jpg"); break; case TOWN: images.tilesheet = load_bitmaps("data/images/town.jpg"); break; case FOREST: images.tilesheet = load_bitmaps("data/images/forest.jpg"); break; } };