MACRO map_attributes ;\1: map name ;\2: map id ;\3: border block ;\4: connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none DEF CURRENT_MAP_WIDTH = \2_WIDTH DEF CURRENT_MAP_HEIGHT = \2_HEIGHT \1_MapAttributes:: db \3 db CURRENT_MAP_HEIGHT, CURRENT_MAP_WIDTH db BANK(\1_Blocks) dw \1_Blocks db BANK(\1_MapScripts) ; aka BANK(\1_MapEvents), BANK(\1_MapSpaces) dw \1_MapScripts dw \1_MapEvents dw \1_MapSpaces db \4 ENDM ; Connections go in order: north, south, west, east MACRO connection ;\1: direction ;\2: map name ;\3: map id ;\4: offset of the target map relative to the current map ; (x offset for east/west, y offset for north/south) ; LEGACY: Support for old connection macro if _NARG == 6 connection \1, \2, \3, (\4) - (\5) else ; Calculate tile offsets for source (current) and target maps DEF _src = 0 DEF _tgt = (\4) + MAP_CONNECTION_PADDING_WIDTH if _tgt < 0 DEF _src = -_tgt DEF _tgt = 0 endc if !STRCMP("\1", "north") DEF _blk = \3_WIDTH * (\3_HEIGHT - MAP_CONNECTION_PADDING_WIDTH) + _src DEF _map = _tgt DEF _win = (\3_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2) * \3_HEIGHT + 1 DEF _y = \3_HEIGHT * 2 - 1 DEF _x = (\4) * -2 DEF _len = CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH - (\4) if _len > \3_WIDTH DEF _len = \3_WIDTH endc elif !STRCMP("\1", "south") DEF _blk = _src DEF _map = (CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2) * (CURRENT_MAP_HEIGHT + MAP_CONNECTION_PADDING_WIDTH) + _tgt DEF _win = \3_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2 + 1 DEF _y = 0 DEF _x = (\4) * -2 DEF _len = CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH - (\4) if _len > \3_WIDTH DEF _len = \3_WIDTH endc elif !STRCMP("\1", "west") DEF _blk = (\3_WIDTH * _src) + \3_WIDTH - MAP_CONNECTION_PADDING_WIDTH DEF _map = (CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2) * _tgt DEF _win = (\3_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2) * 2 - MAP_CONNECTION_PADDING_WIDTH * 2 DEF _y = (\4) * -2 DEF _x = \3_WIDTH * 2 - 1 DEF _len = CURRENT_MAP_HEIGHT + MAP_CONNECTION_PADDING_WIDTH - (\4) if _len > \3_HEIGHT DEF _len = \3_HEIGHT endc elif !STRCMP("\1", "east") DEF _blk = (\3_WIDTH * _src) DEF _map = (CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2) * _tgt + CURRENT_MAP_WIDTH + MAP_CONNECTION_PADDING_WIDTH DEF _win = \3_WIDTH + MAP_CONNECTION_PADDING_WIDTH * 2 + 1 DEF _y = (\4) * -2 DEF _x = 0 DEF _len = CURRENT_MAP_HEIGHT + MAP_CONNECTION_PADDING_WIDTH - (\4) if _len > \3_HEIGHT DEF _len = \3_HEIGHT endc else fail "Invalid direction for 'connection'." endc map_id \3 dw \2_Blocks + _blk dw wOverworldMapBlocks + _map db _len - _src db \3_WIDTH db \3_HEIGHT db _y, _x dw wOverworldMapBlocks + _win endc ENDM map_attributes Level1_Map1, LEVEL_1_MAP_1, $00, SOUTH | NORTH connection south, Level1_Map1, LEVEL_1_MAP_1, 0 connection north, Level1_Map1, LEVEL_1_MAP_1, 0 ; map_attributes NewBarkTown, NEW_BARK_TOWN, $05, WEST | EAST ; connection west, Route29, ROUTE_29, 0 ; connection east, Route27, ROUTE_27, 0 if DEF(_DEBUG) map_attributes DebugLevel1_Map1, DEBUGLEVEL_1_MAP_1, $00, SOUTH | NORTH connection south, DebugLevel1_Map1, DEBUGLEVEL_1_MAP_1, 0 connection north, DebugLevel1_Map1, DEBUGLEVEL_1_MAP_1, 0 map_attributes DebugLevel2_Map1, DEBUGLEVEL_2_MAP_1, $00, WEST connection west, DebugLevel2_Map2, DEBUGLEVEL_2_MAP_2, 3 map_attributes DebugLevel2_Map2, DEBUGLEVEL_2_MAP_2, $00, EAST connection east, DebugLevel2_Map1, DEBUGLEVEL_2_MAP_1, -3 map_attributes DebugLevel3_Map1, DEBUGLEVEL_3_MAP_1, $00, 0 map_attributes DebugLevel4_Map1, DEBUGLEVEL_4_MAP_1, $00, SOUTH connection south, DebugLevel5_Map1, DEBUGLEVEL_5_MAP_1, -1 map_attributes DebugLevel5_Map1, DEBUGLEVEL_5_MAP_1, $00, NORTH connection north, DebugLevel4_Map1, DEBUGLEVEL_4_MAP_1, 1 endc