Updated macros that rely on the GROUP_, MAP_ constants to use the map macro Added GROUP_NONE and MAP_NONE for the sake of compatibility with this new scheme Added new macro elevfloor to simplify the definition of elevators under this new scheme
184 lines
2.9 KiB
NASM
184 lines
2.9 KiB
NASM
map: MACRO
|
|
; This is a silly hack to get around an rgbds bug.
|
|
|
|
; Ideally:
|
|
; db GROUP_\1, MAP_\1
|
|
|
|
\1\@ EQUS "GROUP_\1"
|
|
\1\@2 EQUS "MAP_\1"
|
|
db \1\@, \1\@2
|
|
ENDM
|
|
|
|
roam_map: MACRO
|
|
; A map and an arbitrary number of some more maps.
|
|
|
|
map \1
|
|
db \2
|
|
|
|
rept \2
|
|
map \3
|
|
shift
|
|
endr
|
|
|
|
db 0
|
|
ENDM
|
|
|
|
|
|
person_event: macro
|
|
db \1 ; sprite
|
|
db \2 ; y
|
|
db \3 ; x
|
|
db \4 ; facing
|
|
db \5 ; movement
|
|
db \6 ; clock_hour
|
|
db \7 ; clock_daytime
|
|
db \8 ; color_function
|
|
db \9 ; sight_range
|
|
shift
|
|
dw \9 ; pointer
|
|
shift
|
|
dw \9 ; event flag
|
|
endm
|
|
|
|
signpost: macro
|
|
db \1 ; y
|
|
db \2 ; x
|
|
db \3 ; function
|
|
dw \4 ; pointer
|
|
endm
|
|
|
|
xy_trigger: macro
|
|
db \1 ; number
|
|
db \2 ; y
|
|
db \3 ; x
|
|
db \4 ; unknown1
|
|
dw \5 ; script
|
|
db \6 ; unknown2
|
|
db \7 ; unknown3
|
|
endm
|
|
|
|
warp_def: macro
|
|
db \1 ; y
|
|
db \2 ; x
|
|
db \3 ; warp_to
|
|
map \4 ; map
|
|
endm
|
|
|
|
|
|
map_header: MACRO
|
|
; label, tileset, permission, location, music, phone service flag, time of day, fishing group
|
|
\1_MapHeader:
|
|
db BANK(\1_SecondMapHeader), \2, \3
|
|
dw \1_SecondMapHeader
|
|
db \4, \5
|
|
dn \6, \7
|
|
db \8
|
|
ENDM
|
|
|
|
|
|
map_header_2: MACRO
|
|
; label, map, border block, connections
|
|
\1_SecondMapHeader::
|
|
db \3
|
|
\2\@HEIGHT EQUS "\2_HEIGHT"
|
|
\2\@WIDTH EQUS "\2_WIDTH"
|
|
db \2\@HEIGHT, \2\@WIDTH
|
|
db BANK(\1_BlockData)
|
|
dw \1_BlockData
|
|
db BANK(\1_MapScriptHeader)
|
|
dw \1_MapScriptHeader
|
|
dw \1_MapEventHeader
|
|
db \4
|
|
ENDM
|
|
|
|
connection: MACRO
|
|
if "\1" == "north"
|
|
;\2: map id
|
|
;\3: map label (eventually will be rolled into map id)
|
|
;\4: x
|
|
;\5: offset?
|
|
;\6: strip length
|
|
;\7: this map id
|
|
map \2
|
|
dw \3_BlockData + \2_WIDTH * (\2_HEIGHT - 3) + \5
|
|
dw OverworldMap + \4 + 3
|
|
db \6
|
|
db \2_WIDTH
|
|
db \2_HEIGHT * 2 - 1
|
|
db (\4 - \5) * -2
|
|
dw OverworldMap + \2_HEIGHT * (\2_WIDTH + 6) + 1
|
|
endc
|
|
|
|
if "\1" == "south"
|
|
;\2: map id
|
|
;\3: map label (eventually will be rolled into map id)
|
|
;\4: x
|
|
;\5: offset?
|
|
;\6: strip length
|
|
;\7: this map id
|
|
map \2
|
|
dw \3_BlockData + \5
|
|
dw OverworldMap + (\7_HEIGHT + 3) * (\7_WIDTH + 6) + \4 + 3
|
|
db \6
|
|
db \2_WIDTH
|
|
db 0
|
|
db (\4 - \5) * -2
|
|
dw OverworldMap + \2_WIDTH + 7
|
|
endc
|
|
|
|
if "\1" == "west"
|
|
;\2: map id
|
|
;\3: map label (eventually will be rolled into map id)
|
|
;\4: y
|
|
;\5: offset?
|
|
;\6: strip length
|
|
;\7: this map id
|
|
map \2
|
|
dw \3_BlockData + (\2_WIDTH * \5) + \2_WIDTH - 3
|
|
dw OverworldMap + (\7_WIDTH + 6) * (\4 + 3)
|
|
db \6
|
|
db \2_WIDTH
|
|
db (\4 - \5) * -2
|
|
db \2_WIDTH * 2 - 1
|
|
dw OverworldMap + \2_WIDTH * 2 + 6
|
|
endc
|
|
|
|
if "\1" == "east"
|
|
;\2: map id
|
|
;\3: map label (eventually will be rolled into map id)
|
|
;\4: y
|
|
;\5: offset?
|
|
;\6: strip length
|
|
;\7: this map id
|
|
map \2
|
|
dw \3_BlockData + (\2_WIDTH * \5)
|
|
dw OverworldMap + (\7_WIDTH + 6) * (\4 + 3 + 1) - 3
|
|
db \6
|
|
db \2_WIDTH
|
|
db (\4 - \5) * -2
|
|
db 0
|
|
dw OverworldMap + \2_WIDTH + 7
|
|
endc
|
|
|
|
ENDM
|
|
|
|
mapgroup: MACRO
|
|
; map id, height, width
|
|
\1\@ EQUS "GROUP_\1"
|
|
\1\@2 EQUS "MAP_\1"
|
|
\1\@ EQU const_value
|
|
enum \1\@2
|
|
\1_HEIGHT EQU \2
|
|
\1_WIDTH EQU \3
|
|
ENDM
|
|
|
|
newgroup: MACRO
|
|
const_value = const_value + 1
|
|
enum_start 1
|
|
ENDM
|
|
|
|
elevfloor: MACRO
|
|
db \1, \2
|
|
map \3
|
|
ENDM
|