mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
31cce83e9b
(This is not expected to be their final location, but it makes them easier to relocate when necessary, and easier for users to edit until the whole project's file structure is finalized.)
215 lines
4.0 KiB
NASM
215 lines
4.0 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: unknown1: $0
|
|
;\5: script pointer
|
|
;\6: unknown2: $0
|
|
;\7: unknown3: $0
|
|
db \1, \2, \3, \4
|
|
dw \5
|
|
db \6, \7
|
|
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
|