mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
212 lines
3.9 KiB
NASM
212 lines
3.9 KiB
NASM
map: macro
|
|
;\1: map id
|
|
db GROUP_\1, MAP_\1
|
|
endm
|
|
|
|
maptrigger: macro
|
|
;\1: script pointer
|
|
dw \1, 0
|
|
endm
|
|
|
|
warp_def: macro
|
|
;\1: y: top to bottom, starts at 0
|
|
;\2: x: left to right, starts at 0
|
|
;\3: warp destination: starts at 1
|
|
;\4: map id: from constants/map_constants.asm
|
|
db \1, \2, \3
|
|
map \4
|
|
endm
|
|
|
|
xy_trigger: macro
|
|
;\1: number: controlled by dotrigger/domaptrigger
|
|
;\2: y: top to bottom, starts at 0
|
|
;\3: x: left to right, starts at 0
|
|
;\4: script pointer
|
|
db \1, \2, \3, $0
|
|
dw \4
|
|
db $0, $0
|
|
endm
|
|
|
|
signpost: macro
|
|
;\1: y: top to bottom, starts at 0
|
|
;\2: x: left to right, starts at 0
|
|
;\3: function: a SIGNPOST_* constant
|
|
;\4: script pointer
|
|
db \1, \2, \3
|
|
dw \4
|
|
endm
|
|
|
|
person_event: macro
|
|
;\1: sprite: a SPRITE_* constant
|
|
;\2: y: top to bottom, starts at 0
|
|
;\3: x: left to right, starts at 0
|
|
;\4: movement function: a SPRITEMOVEDATA_* constant
|
|
;\5, \6: movement radius: y, x
|
|
;\7: clock hour: ???
|
|
;\8: clock daytime: sum of MORN, DAY, and/or NITE, or 0 for always
|
|
;\9: color: a PAL_NPC_* constant, or 0 for sprite default
|
|
;\10: function: a PERSONTYPE_* constant
|
|
;\11: sight range: applies to PERSONTYPE_TRAINER
|
|
;\12: script pointer
|
|
;\13: event flag: an EVENT_* constant, or 0 for always
|
|
db \1, \2 + 4, \3 + 4, \4
|
|
dn \5, \6
|
|
db \7, \8
|
|
shift
|
|
dn \8, \9
|
|
shift
|
|
db \9
|
|
shift
|
|
dw \9
|
|
shift
|
|
dw \9
|
|
endm
|
|
|
|
|
|
newgroup: macro
|
|
const_value = const_value + 1
|
|
enum_start 1
|
|
endm
|
|
|
|
mapgroup: macro
|
|
;\1: map id
|
|
;\2: height: in blocks
|
|
;\3: width: in blocks
|
|
GROUP_\1 EQU const_value
|
|
enum MAP_\1
|
|
\1_HEIGHT EQU \2
|
|
\1_WIDTH EQU \3
|
|
endm
|
|
|
|
|
|
map_header: macro
|
|
;\1: map label
|
|
;\2: tileset: a TILESET_* constant
|
|
;\3: permission: TOWN, ROUTE, INDOOR, CAVE, PERM_5, GATE, or DUNGEON
|
|
;\4: location: from constants/landmark_constants.asm
|
|
;\5: music: a MUSIC_* constant
|
|
;\6: phone service flag: 1 to prevent phone calls
|
|
;\7: time of day: a PALETTE_* constant
|
|
;\8: fishing group: a FISHGROUP_* constant
|
|
\1_MapHeader:
|
|
db BANK(\1_SecondMapHeader), \2, \3
|
|
dw \1_SecondMapHeader
|
|
db \4, \5
|
|
dn \6, \7
|
|
db \8
|
|
endm
|
|
|
|
|
|
map_header_2: macro
|
|
;\1: map label
|
|
;\2: map id
|
|
;\3: border block
|
|
;\4: connections: sum of NORTH, SOUTH, WEST, and/or EAST, or 0 for none
|
|
\1_SecondMapHeader::
|
|
db \3
|
|
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
|
|
|
|
|
|
itemball: macro
|
|
;\1: item: from constants/item_constants.asm
|
|
;\2: quantity: default 1
|
|
if _NARG == 2
|
|
db \1, \2
|
|
else
|
|
db \1, 1
|
|
endc
|
|
endm
|
|
|
|
elevfloor: macro
|
|
;\1: floor: a FLOOR_* constant
|
|
;\2: warp destination: starts at 1
|
|
;\3: map id
|
|
db \1, \2
|
|
map \3
|
|
ENDM
|
|
|
|
stonetable: macro
|
|
;\1: warp id
|
|
;\2: person_event id
|
|
;\3: script pointer
|
|
db \1, \2
|
|
dw \3
|
|
endm
|