summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/maps.asm108
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