diff options
Diffstat (limited to 'macros')
-rw-r--r-- | macros/maps.asm | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/macros/maps.asm b/macros/maps.asm new file mode 100644 index 0000000..5c210c5 --- /dev/null +++ b/macros/maps.asm @@ -0,0 +1,108 @@ +map_id: MACRO +;\1: map id + db GROUP_\1, MAP_\1 +ENDM + +map_attributes: MACRO +;\1: map name +;\2: map id +;\3: connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none +CURRENT_MAP_WIDTH = \2_WIDTH +CURRENT_MAP_HEIGHT = \2_HEIGHT +\1_MapAttributes:: + db CURRENT_MAP_HEIGHT, CURRENT_MAP_WIDTH + dw \1_Blocks + dw \1TextPointers + dw \1ScriptLoader + dw \1_MapEvents + db \3 +ENDM + +; Connections go in order: north, south, west, east +connection: MACRO +;\1: direction +;\2: map name +;\3: map id +;\4: final y offset for east/west, x offset for north/south +;\5: map data y offset for east/west, x offset for north/south +;\6: strip length +if "\1" == "north" + map_id \3 + dw \2_Blocks + \3_WIDTH * (\3_HEIGHT - 3) + \5 + dw wOverworldMapBlocks + \4 + 3 + db \6 + db \3_WIDTH + db \3_HEIGHT * 2 - 1 + db (\4 - \5) * -2 + dw wOverworldMapBlocks + \3_HEIGHT * (\3_WIDTH + 6) + 1 +elif "\1" == "south" + map_id \3 + dw \2_Blocks + \5 + dw wOverworldMapBlocks + (CURRENT_MAP_HEIGHT + 3) * (CURRENT_MAP_WIDTH + 6) + \4 + 3 + db \6 + db \3_WIDTH + db 0 + db (\4 - \5) * -2 + dw wOverworldMapBlocks + \3_WIDTH + 7 +elif "\1" == "west" + map_id \3 + dw \2_Blocks + (\3_WIDTH * \5) + \3_WIDTH - 3 + dw wOverworldMapBlocks + (CURRENT_MAP_WIDTH + 6) * (\4 + 3) + db \6 + db \3_WIDTH + db (\4 - \5) * -2 + db \3_WIDTH * 2 - 1 + dw wOverworldMapBlocks + \3_WIDTH * 2 + 6 +elif "\1" == "east" + map_id \3 + dw \2_Blocks + (\3_WIDTH * \5) + dw wOverworldMapBlocks + (CURRENT_MAP_WIDTH + 6) * (\4 + 3 + 1) - 3 + db \6 + db \3_WIDTH + db (\4 - \5) * -2 + db 0 + dw wOverworldMapBlocks + \3_WIDTH + 7 +endc +ENDM + +map: MACRO +;\1: map name: for the MapAttributes pointer (see data/maps/attributes.asm) +;\2: tileset: a TILESET_* constant +;\3: environment: TOWN, ROUTE, INDOOR, CAVE, ENVIRONMENT_5, GATE, or DUNGEON +;\4: location: from constants/landmark_constants.asm + db BANK(\1_MapAttributes), \2, \3 + dw \1_MapAttributes + db \4 + db 0, 0 ; ??? +ENDM + +warp_event: MACRO + db \2, \1 ; y, x + db \3 ; index + map_id \4 + dw \5 ; unused wOverworldMap offset +ENDM + +bg_event: MACRO + db \2, \1 ; y, x + db \3 ; function (unused?) + db \4 ; text index +ENDM + +object_event: MACRO + db \3 ; sprite + db \2 + 4, \1 + 4 ; x, y + db \4 ; movement function + dn \5, \6 ; radius + db \7, \8 ; hour limits? + shift + db \8 ; object type function + shift + db \8, \9 ; unknown 1, 2 + shift + db \9 ; sight range + shift + db \9 ; unknown 3 + shift + db \9 ; unknown 4 +ENDM
\ No newline at end of file |