// Clear various areas related to TILE RAM and init default values for start of level // Source: 0xD848 void OTiles::clear_tile_info() { // 1. Clear portion of RAM containing tilemap info (60F00 - 60F1F) fg_h_scroll = bg_h_scroll = fg_v_scroll = bg_v_scroll = // +4 words fg_psel = bg_psel = tilemap_v_scr = tilemap_h_scr = // +5 words fg_v_tiles = bg_v_tiles = tilemap_v_off = // +3 words fg_addr = bg_addr = 0; // +4 words // 2. Clear portion of TEXT RAM containing tilemap info (110E80 - 110FFF) uint32_t dst_addr = HW_FG_PSEL; for (uint8_t i = 0; i <= 0x5F; i++) video.write_text32(&dst_addr, 0); // 3. Clear all of TILE RAM 100000 - 10FFFF video.clear_tile_ram(); // 4. Setup new values fg_psel = roms.rom0.read16(TILES_PAGE_FG1); bg_psel = roms.rom0.read16(TILES_PAGE_BG1); video.write_text16(HW_FG_PSEL, fg_psel); // Also write values to hardware video.write_text16(HW_BG_PSEL, bg_psel); init_tilemap(oroad.stage_lookup_off); // Initialize Default Tilemap }
void init_world_area(World_Area* area, Memory_Arena* arena) { init_simulator(&area->sim, World_Area_Entity_Capacity, arena); init_tilemap(&area->map, World_Area_Tilemap_Width, World_Area_Tilemap_Height, arena); area->entities = Arena_Push_Array(arena, Entity, World_Area_Entity_Capacity); area->entities_count = 0; area->entities_capacity = World_Area_Entity_Capacity; area->next_entity_id = 0; area->entities_dirty = false; }
int main(void) { register int i; char filename[30]; FILE *ofp; init_tilemap(); /* * create the source file, "tile.c" */ Sprintf(filename, SOURCE_TEMPLATE, TILE_FILE); if (!(ofp = fopen(filename, "w"))) { perror(filename); exit(EXIT_FAILURE); } fprintf(ofp,"/* This file is automatically generated. Do not edit. */\n"); fprintf(ofp,"\n#include \"hack.h\"\n\n"); fprintf(ofp,"short glyph2tile[MAX_GLYPH] = {\n"); for (i = 0; i < MAX_GLYPH; i++) { fprintf(ofp,"%2d,%c", tilemap[i], (i % 12) ? ' ' : '\n'); } fprintf(ofp,"%s};\n", (i % 12) ? "\n" : ""); process_substitutions(ofp); fprintf(ofp,"\n#define MAXMONTILE %d\n", lastmontile); fprintf(ofp,"#define MAXOBJTILE %d\n", lastobjtile); fprintf(ofp,"#define MAXOTHTILE %d\n", lastothtile); fprintf(ofp,"\n/*tile.c*/\n"); fclose(ofp); exit(EXIT_SUCCESS); /*NOTREACHED*/ return 0; }
// Note this is called in attract mode, when we need to loop back to Stage 1, from the final stage. // Source: 0xD982 void OTiles::loop_to_stage1() { opalette.pal_manip_ctrl = 1; // Enable palette fade routines to transition between levels init_tilemap(); // Initalize Default Tilemap (Stage 1) opalette.setup_sky_change(); // Setup data in RAM necessary for sky palette fade. }