Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Connections go in order: north, south, west, east
- connection: MACRO
- ;\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
- _r = (\4) + 3
- if _r < 0
- _s = -_r
- _t = 0
- else
- _s = 0
- _t = _r
- endc
- if "\1" == "north"
- _foo1 = \3_WIDTH * (\3_HEIGHT + -3) + _s
- _foo2 = _t
- _foo3 = CURRENT_MAP_WIDTH + 3 - (\4)
- if \3_WIDTH < _foo3
- _foo3 = \3_WIDTH
- endc
- _foo4 = \3_HEIGHT * 2 - 1
- _foo5 = (\4) * -2
- _foo6 = (\3_WIDTH + 6) * \3_HEIGHT + 1
- elif "\1" == "south"
- _foo1 = _s
- _foo2 = (CURRENT_MAP_WIDTH + 6) * (CURRENT_MAP_HEIGHT + 3) + _t
- _foo3 = CURRENT_MAP_WIDTH + 3 - (\4)
- if \3_WIDTH < _foo3
- _foo3 = \3_WIDTH
- endc
- _foo4 = 0
- _foo5 = (\4) * -2
- _foo6 = \3_WIDTH + 7
- elif "\1" == "west"
- _foo1 = (\3_WIDTH * _s) + \3_WIDTH + -3
- _foo2 = (CURRENT_MAP_WIDTH + 6) * _t
- _foo3 = CURRENT_MAP_HEIGHT + 3 - (\4)
- if \3_HEIGHT < _foo3
- _foo3 = \3_HEIGHT
- endc
- _foo4 = (\4) * -2
- _foo5 = \3_WIDTH * 2 - 1
- _foo6 = (\3_WIDTH + 6) * 2 + -6
- elif "\1" == "east"
- _foo1 = (\3_WIDTH * _s)
- _foo2 = (CURRENT_MAP_WIDTH + 6) * _t + CURRENT_MAP_WIDTH + 3
- _foo3 = CURRENT_MAP_HEIGHT + 3 - (\4)
- if \3_HEIGHT < _foo3
- _foo3 = \3_HEIGHT
- endc
- _foo4 = (\4) * -2
- _foo5 = 0
- _foo6 = \3_WIDTH + 7
- else
- fail "Invalid direction for 'connection'."
- endc
- map_id \3
- dw \2_Blocks + _foo1
- dw wOverworldMapBlocks + _foo2
- db _foo3 - _s
- db \3_WIDTH
- db _foo4
- db _foo5
- dw wOverworldMapBlocks + _foo6
- endc
- ENDM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement