mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-27 04:04:17 +01:00
2028 lines
60 KiB
PHP
2028 lines
60 KiB
PHP
@ Does nothing.
|
|
.macro nop
|
|
.byte 0x00
|
|
.endm
|
|
|
|
@ Does nothing.
|
|
.macro nop1
|
|
.byte 0x01
|
|
.endm
|
|
|
|
@ Terminates script execution.
|
|
.macro end
|
|
.byte 0x02
|
|
.endm
|
|
|
|
@ Jumps back to after the last-executed call statement, and continues script execution from there.
|
|
.macro return
|
|
.byte 0x03
|
|
.endm
|
|
|
|
@ Jumps to destination and continues script execution from there. The location of the calling script is remembered and can be returned to later.
|
|
.macro call destination:req
|
|
.byte 0x04
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Jumps to destination and continues script execution from there.
|
|
.macro goto destination:req
|
|
.byte 0x05
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ If the result of the last comparison matches condition (see Comparison operators), jumps to destination and continues script execution from there.
|
|
.macro goto_if condition:req, destination:req
|
|
.byte 0x06
|
|
.byte \condition
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ If the result of the last comparison matches condition (see Comparison operators), calls destination.
|
|
.macro call_if condition:req, destination:req
|
|
.byte 0x07
|
|
.byte \condition
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Jumps to the script in gStdScripts at index function.
|
|
.macro gotostd function:req
|
|
.byte 0x08
|
|
.byte \function
|
|
.endm
|
|
|
|
@ callstd function names
|
|
STD_OBTAIN_ITEM = 0
|
|
STD_FIND_ITEM = 1
|
|
STD_OBTAIN_DECORATION = 7
|
|
STD_REGISTER_MATCH_CALL = 8
|
|
|
|
@ Calls the script in gStdScripts at index function.
|
|
.macro callstd function:req
|
|
.byte 0x09
|
|
.byte \function
|
|
.endm
|
|
|
|
@ If the result of the last comparison matches condition (see Comparison operators), jumps to the script in gStdScripts at index function.
|
|
.macro gotostd_if condition:req, function:req
|
|
.byte 0x0a
|
|
.byte \condition
|
|
.byte \function
|
|
.endm
|
|
|
|
@ If the result of the last comparison matches condition (see Comparison operators), calls the script in gStdScripts at index function.
|
|
.macro callstd_if condition:req, function:req
|
|
.byte 0x0b
|
|
.byte \condition
|
|
.byte \function
|
|
.endm
|
|
|
|
@ Equivalent to the 'return' command for a RAM script.
|
|
.macro returnram
|
|
.byte 0x0c
|
|
.endm
|
|
|
|
@ Equivalent to the 'end' command for a RAM script.
|
|
.macro endram
|
|
.byte 0x0d
|
|
.endm
|
|
|
|
@ Sets the Mystery Event script status (MEVENT_STATUS_*).
|
|
.macro setmysteryeventstatus value:req
|
|
.byte 0x0e
|
|
.byte \value
|
|
.endm
|
|
|
|
@ Sets the value at the specified script data index to a fixed 4-byte value.
|
|
.macro loadword destIndex:req, value:req
|
|
.byte 0x0f
|
|
.byte \destIndex
|
|
.4byte \value
|
|
.endm
|
|
|
|
@ Sets the value at the specified script data index to a fixed byte value.
|
|
.macro loadbyte destIndex:req, value:req
|
|
.byte 0x10
|
|
.byte \destIndex
|
|
.byte \value
|
|
.endm
|
|
|
|
@ Sets the value at the specified pointer.
|
|
.macro setptr value:req, ptr:req
|
|
.byte 0x11
|
|
.byte \value
|
|
.4byte \ptr
|
|
.endm
|
|
|
|
@ Sets the value at the specified script data index to the value at pointer 'source'.
|
|
.macro loadbytefromptr destIndex:req, source:req
|
|
.byte 0x12
|
|
.byte \destIndex
|
|
.4byte \source
|
|
.endm
|
|
|
|
@ Sets the value at pointer 'destination' to the contents of the script data at 'srcIndex'.
|
|
.macro setptrbyte srcIndex:req, destination:req
|
|
.byte 0x13
|
|
.byte \srcIndex
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Copies the contents of the script data from one index to another.
|
|
.macro copylocal destIndex:req, srcIndex:req
|
|
.byte 0x14
|
|
.byte \destIndex
|
|
.byte \srcIndex
|
|
.endm
|
|
|
|
@ Copies the byte at source to destination, replacing whatever byte was previously there.
|
|
.macro copybyte destination:req, source:req
|
|
.byte 0x15
|
|
.4byte \destination
|
|
.4byte \source
|
|
.endm
|
|
|
|
@ Changes the value of destination to value.
|
|
.macro setvar destination:req, value:req
|
|
.byte 0x16
|
|
.2byte \destination
|
|
.2byte \value
|
|
.endm
|
|
|
|
@ Changes the value of destination by adding value to it. Overflow is not prevented (0xFFFF + 1 = 0x0000).
|
|
.macro addvar destination:req, value:req
|
|
.byte 0x17
|
|
.2byte \destination
|
|
.2byte \value
|
|
.endm
|
|
|
|
@ Changes the value of destination by subtracting value to it. Overflow is not prevented (0x0000 - 1 = 0xFFFF).
|
|
.macro subvar destination:req, value:req
|
|
.byte 0x18
|
|
.2byte \destination
|
|
.2byte \value
|
|
.endm
|
|
|
|
@ Copies the value of source into destination.
|
|
.macro copyvar destination:req, source:req
|
|
.byte 0x19
|
|
.2byte \destination
|
|
.2byte \source
|
|
.endm
|
|
|
|
@ If source is not a variable, then this function acts like setvar. Otherwise, it acts like copyvar.
|
|
.macro setorcopyvar destination:req, source:req
|
|
.byte 0x1a
|
|
.2byte \destination
|
|
.2byte \source
|
|
.endm
|
|
|
|
@ Compares the values of the script data at indexes 'local1' and 'local2'.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_local_to_local local1:req, local2:req
|
|
.byte 0x1b
|
|
.byte \local1
|
|
.byte \local2
|
|
.endm
|
|
|
|
@ Compares the value of the script data at index 'local' to a fixed value.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_local_to_value local:req, value:req
|
|
.byte 0x1c
|
|
.byte \local
|
|
.byte \value
|
|
.endm
|
|
|
|
@ Compares the value of the script data at index 'local' to the value at 'ptr'
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_local_to_ptr local:req, ptr:req
|
|
.byte 0x1d
|
|
.byte \local
|
|
.4byte \ptr
|
|
.endm
|
|
|
|
@ Compares the value at 'ptr' to the value of the script data at index 'local'.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_ptr_to_local ptr:req, local:req
|
|
.byte 0x1e
|
|
.4byte \ptr
|
|
.byte \local
|
|
.endm
|
|
|
|
@ Compares the value at 'ptr' to a fixed value.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_ptr_to_value ptr:req, value:req
|
|
.byte 0x1f
|
|
.4byte \ptr
|
|
.byte \value
|
|
.endm
|
|
|
|
@ Compares the value at 'ptr1' to the value at 'ptr2'.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_ptr_to_ptr ptr1:req, ptr2:req
|
|
.byte 0x20
|
|
.4byte \ptr1
|
|
.4byte \ptr2
|
|
.endm
|
|
|
|
@ Compares the value of 'var' to a fixed value.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_var_to_value var:req, value:req
|
|
.byte 0x21
|
|
.2byte \var
|
|
.2byte \value
|
|
.endm
|
|
|
|
@ Compares the value of 'var1' to the value of 'var2'.
|
|
@ The result is stored in comparisonResult to be acted on by goto_if / call_if
|
|
.macro compare_var_to_var var1:req, var2:req
|
|
.byte 0x22
|
|
.2byte \var1
|
|
.2byte \var2
|
|
.endm
|
|
|
|
@ Generic compare macro which attempts to deduce argument types based on their values
|
|
@ Any values between VARS_START to VARS_END and SPECIAL_VARS_START to SPECIAL_VARS_END are considered event variable identifiers
|
|
.macro compare var:req, arg:req
|
|
.if ((\arg >= VARS_START && \arg <= VARS_END) || (\arg >= SPECIAL_VARS_START && \arg <= SPECIAL_VARS_END))
|
|
compare_var_to_var \var, \arg
|
|
.else
|
|
compare_var_to_value \var, \arg
|
|
.endif
|
|
.endm
|
|
|
|
@ Calls the native C function stored at func.
|
|
.macro callnative func:req
|
|
.byte 0x23
|
|
.4byte \func
|
|
.endm
|
|
|
|
@ Replaces the script with the function stored at func. Execution returns to the bytecode script when func returns TRUE.
|
|
.macro gotonative func:req
|
|
.byte 0x24
|
|
.4byte \func
|
|
.endm
|
|
|
|
@ Calls a function listed in the table in data/specials.inc.
|
|
.macro special function:req
|
|
.byte 0x25
|
|
.2byte SPECIAL_\function
|
|
.endm
|
|
|
|
@ Calls a function listed in the table in data/specials.inc.
|
|
@ That function's output (if any) will be written to the variable specified by 'output'.
|
|
.macro specialvar output:req, function:req
|
|
.byte 0x26
|
|
.2byte \output
|
|
.2byte SPECIAL_\function
|
|
.endm
|
|
|
|
@ Blocks script execution until a command or C code manually unblocks it. Generally used with specific
|
|
@ commands and specials. Calling ScriptContext_Enable for instance will allow execution to continue.
|
|
.macro waitstate
|
|
.byte 0x27
|
|
.endm
|
|
|
|
@ Blocks script execution for frames. (Pokemon Emerald runs at just shy of 60 frames per second.)
|
|
.macro delay frames:req
|
|
.byte 0x28
|
|
.2byte \frames
|
|
.endm
|
|
|
|
@ Sets flag to TRUE.
|
|
.macro setflag flag:req
|
|
.byte 0x29
|
|
.2byte \flag
|
|
.endm
|
|
|
|
@ Sets flag to FALSE.
|
|
.macro clearflag flag:req
|
|
.byte 0x2a
|
|
.2byte \flag
|
|
.endm
|
|
|
|
@ Compares flag to TRUE and stores the result in comparisonResult to be used by goto_if, etc
|
|
@ See additional _if_unset and _if_set macros
|
|
.macro checkflag flag:req
|
|
.byte 0x2b
|
|
.2byte \flag
|
|
.endm
|
|
|
|
@ Initializes the RTC`s local time offset to the given hour and minute.
|
|
.macro initclock hour:req, minute:req
|
|
.byte 0x2c
|
|
.2byte \hour
|
|
.2byte \minute
|
|
.endm
|
|
|
|
@ Updates local time using the RTC and runs time based events.
|
|
.macro dotimebasedevents
|
|
.byte 0x2d
|
|
.endm
|
|
|
|
@ Sets the values of variables VAR_0x8000, VAR_0x8001, and VAR_0x8002 to the current hour, minute, and second.
|
|
.macro gettime
|
|
.byte 0x2e
|
|
.endm
|
|
|
|
@ Plays the specified sound. Only one sound may play at a time, with newer ones interrupting older ones.
|
|
.macro playse song:req
|
|
.byte 0x2f
|
|
.2byte \song
|
|
.endm
|
|
|
|
@ Blocks script execution until the currently-playing sound (triggered by playse) finishes playing.
|
|
.macro waitse
|
|
.byte 0x30
|
|
.endm
|
|
|
|
@ Plays the fanfare specified by the song number. If the specified song is not a fanfare it will instead play the first song in sFanfares.
|
|
.macro playfanfare song:req
|
|
.byte 0x31
|
|
.2byte \song
|
|
.endm
|
|
|
|
@ Blocks script execution until all currently-playing fanfares finish.
|
|
.macro waitfanfare
|
|
.byte 0x32
|
|
.endm
|
|
|
|
@ Plays the specified song. If save_song is TRUE, the
|
|
@ specified song will be saved as if savebgm was called with it.
|
|
.macro playbgm song:req, save_song:req
|
|
.byte 0x33
|
|
.2byte \song
|
|
.byte \save_song
|
|
.endm
|
|
|
|
@ Saves the specified song to be played later. Saved music may be played when Overworld_PlaySpecialMapMusic is called. This occurs on
|
|
@ exiting most warps.
|
|
.macro savebgm song:req
|
|
.byte 0x34
|
|
.2byte \song
|
|
.endm
|
|
|
|
@ Crossfades the currently-playing song into the map's default song.
|
|
.macro fadedefaultbgm
|
|
.byte 0x35
|
|
.endm
|
|
|
|
@ Crossfades the currently-playing song into the specified song.
|
|
.macro fadenewbgm song:req
|
|
.byte 0x36
|
|
.2byte \song
|
|
.endm
|
|
|
|
@ Fades out the currently-playing song.
|
|
.macro fadeoutbgm speed:req
|
|
.byte 0x37
|
|
.byte \speed
|
|
.endm
|
|
|
|
@ Fades the previously-playing song back in.
|
|
.macro fadeinbgm speed:req
|
|
.byte 0x38
|
|
.byte \speed
|
|
.endm
|
|
|
|
@ Helper macro for warp commands that formats their arguments.
|
|
@ It allows warp macros to either provide 1. a valid id for which warp location to use,
|
|
@ or 2. a pair of x/y coordinates to use. Both may be provided but at least one will be
|
|
@ ignored by SetPlayerCoordsFromWarp. If none are provided it will use dummy arguments,
|
|
@ and the warp will send the player to the center of the map.
|
|
@ Examples of valid inputs for a warp command:
|
|
@ - warp MAP, x, y
|
|
@ - warp MAP, warpId
|
|
@ - warp MAP
|
|
@ - warp MAP, warpId, x, y
|
|
.macro formatwarp map:req, a, b, c
|
|
map \map
|
|
.ifb \a @ No arguments provided, use dummy warpId and coords.
|
|
.byte WARP_ID_NONE
|
|
.2byte -1 @ x
|
|
.2byte -1 @ y
|
|
.else
|
|
.ifb \b @ Only one argument provided, treat it as a warpId and use dummy coords.
|
|
.byte \a @ warpId
|
|
.2byte -1 @ x
|
|
.2byte -1 @ y
|
|
.else
|
|
.ifb \c @ Only two arguments provided, treat them as a coord pair and use dummy warpId.
|
|
.byte WARP_ID_NONE
|
|
.2byte \a @ x
|
|
.2byte \b @ y
|
|
.else @ All three arguments provided. Output them and let the warp sort out which to use.
|
|
.byte \a @ warpId
|
|
.2byte \b @ x
|
|
.2byte \c @ y
|
|
.endif
|
|
.endif
|
|
.endif
|
|
.endm
|
|
|
|
|
|
@ Warps the player to the specified map.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warp map:req, a, b, c
|
|
.byte 0x39
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Warps the player to the specified map without playing a sound effect.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpsilent map:req, a, b, c
|
|
.byte 0x3a
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Warps the player to the specified map and plays a door opening animation before stepping upwards into it.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpdoor map:req, a, b, c
|
|
.byte 0x3b
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Warps the player to another map using a hole animation. If the specified map is MAP_UNDEFINED it will instead
|
|
@ use the map set by setholewarp. In either case the target coordinates on the destination map will be the
|
|
@ player's current position.
|
|
.macro warphole map:req
|
|
.byte 0x3c
|
|
map \map
|
|
.endm
|
|
|
|
@ Warps the player to the specified map using a teleport effect. Effect is similar to warpspinenter but
|
|
@ this warp has a fade out first and doesn't maintain the original facing direction.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpteleport map:req, a, b, c
|
|
.byte 0x3d
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Sets the warp destination to be used later.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro setwarp map:req, a, b, c
|
|
.byte 0x3e
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Sets the dynamic warp destination. Warps with a destination map of MAP_DYNAMIC will target this destination.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro setdynamicwarp map:req, a, b, c
|
|
.byte 0x3f
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Sets the destination that diving or emerging from a dive will take the player to. Note that this only
|
|
@ applies if the current map does not have a dive/emerge connection. If it does have a corresponding
|
|
@ map connection then that map and the player's current coordinates will be used as the destination instead.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro setdivewarp map:req, a, b, c
|
|
.byte 0x40
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Sets the destination that falling into a hole will take the player to.
|
|
@ While it does accept and set the x/y coordinates and warpId, they are ultimately ignored.
|
|
@ This is only used to set the map the player should fall to. The exact location on the
|
|
@ map to fall to is determined by warphole.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro setholewarp map:req, a=0, b=0, c
|
|
.byte 0x41
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Retrieves the player's zero-indexed x- and y-coordinates in the map, and stores them in the specified variables.
|
|
.macro getplayerxy x:req, y:req
|
|
.byte 0x42
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Retrieves the number of Pokemon in the player's party, and stores that number in VAR_RESULT.
|
|
.macro getpartysize
|
|
.byte 0x43
|
|
.endm
|
|
|
|
@ Attempts to add quantity of the specified item to the player's Bag. If the player has enough room, the item will
|
|
@ be added and VAR_RESULT will be set to TRUE; otherwise, VAR_RESULT is set to FALSE.
|
|
.macro additem itemId:req, quantity=1
|
|
.byte 0x44
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Removes quantity of the specified item from the player's Bag. If the player has fewer than 'quantity' in their bag
|
|
@ then none will be removed and VAR_RESULT will be set to FALSE. Otherwise it will be set to TRUE.
|
|
.macro removeitem itemId:req, quantity=1
|
|
.byte 0x45
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Checks if the player has enough space in their Bag to hold quantity more of the specified item. Sets VAR_RESULT to
|
|
@ TRUE if there is room, or FALSE is there is no room.
|
|
.macro checkitemspace itemId:req, quantity=1
|
|
.byte 0x46
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Checks if the player has quantity or more of the specified item in their Bag. Sets VAR_RESULT to TRUE if the player has
|
|
@ enough of the item, or FALSE if they have fewer than quantity of the item.
|
|
.macro checkitem itemId:req, quantity=1
|
|
.byte 0x47
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Checks which Bag pocket the specified item belongs in, and writes the pocket value (POCKET_*) to VAR_RESULT.
|
|
@ This is used to show the name of the proper Bag pocket when the player receives an item via callstd.
|
|
.macro checkitemtype itemId:req
|
|
.byte 0x48
|
|
.2byte \itemId
|
|
.endm
|
|
|
|
@ Adds quantity of the specified item to the player's PC.
|
|
.macro addpcitem itemId:req, quantity=1
|
|
.byte 0x49
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Checks for quantity of the specified item in the player's PC.
|
|
.macro checkpcitem itemId:req, quantity=1
|
|
.byte 0x4a
|
|
.2byte \itemId
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
@ Adds a decoration to the player's PC.
|
|
.macro adddecoration decoration:req
|
|
.byte 0x4b
|
|
.2byte \decoration
|
|
.endm
|
|
|
|
@ Removes a decoration from the player's PC.
|
|
.macro removedecoration decoration:req
|
|
.byte 0x4c
|
|
.2byte \decoration
|
|
.endm
|
|
|
|
@ Checks for decoration in the player's PC.
|
|
.macro checkdecor decoration:req
|
|
.byte 0x4d
|
|
.2byte \decoration
|
|
.endm
|
|
|
|
@ Checks if the player has enough space in their PC to hold the decoration.
|
|
@ Sets VAR_RESULT to TRUE if there is room, or FALSE is there is no room.
|
|
.macro checkdecorspace decoration:req
|
|
.byte 0x4e
|
|
.2byte \decoration
|
|
.endm
|
|
|
|
@ Applies the movement data at movements to the specified (localId) object. If no map is specified, then the current map is used.
|
|
.macro applymovement localId:req, movements:req, map
|
|
.ifb \map
|
|
.byte 0x4f
|
|
.2byte \localId
|
|
.4byte \movements
|
|
.else
|
|
@ Really only useful if the object has followed from one map to another (e.g. Wally during the catching event).
|
|
.byte 0x50
|
|
.2byte \localId
|
|
.4byte \movements
|
|
map \map
|
|
.endif
|
|
.endm
|
|
|
|
@ Blocks script execution until the movements being applied to the specified (localId) object finish.
|
|
@ If localId is 0, then the id of the last-moved object will be used instead. If the specified object
|
|
@ is not currently being manipulated with applymovement, then this command does nothing.
|
|
@ If no map is specified, then the current map is used.
|
|
.macro waitmovement localId:req, map
|
|
.ifb \map
|
|
.byte 0x51
|
|
.2byte \localId
|
|
.else
|
|
.byte 0x52
|
|
.2byte \localId
|
|
map \map
|
|
.endif
|
|
.endm
|
|
|
|
@ Attempts to despawn the specified (localId) object on the specified map.
|
|
@ It also sets the object's visibility flag if it has one.
|
|
@ If no map is specified, then the current map is used.
|
|
.macro removeobject localId:req, map
|
|
.ifb \map
|
|
.byte 0x53
|
|
.2byte \localId
|
|
.else
|
|
.byte 0x54
|
|
.2byte \localId
|
|
map \map
|
|
.endif
|
|
.endm
|
|
|
|
@ Attempts to spawn the specified (localId) object the specified map.
|
|
@ Note that unlike removeobject this does not modify the object's flag.
|
|
@ If no map is specified, then the current map is used.
|
|
.macro addobject localId:req, map
|
|
.ifb \map
|
|
.byte 0x55
|
|
.2byte \localId
|
|
.else
|
|
.byte 0x56
|
|
.2byte \localId
|
|
map \map
|
|
.endif
|
|
.endm
|
|
|
|
@ Sets the specified (localId) object's position on the current map.
|
|
.macro setobjectxy localId:req, x:req, y:req
|
|
.byte 0x57
|
|
.2byte \localId
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Sets the specified object's invisibility to FALSE.
|
|
.macro showobjectat localId:req, map:req
|
|
.byte 0x58
|
|
.2byte \localId
|
|
map \map
|
|
.endm
|
|
|
|
@ Sets the specified object's invisibility to TRUE.
|
|
.macro hideobjectat localId:req, map:req
|
|
.byte 0x59
|
|
.2byte \localId
|
|
map \map
|
|
.endm
|
|
|
|
@ Turns the currently selected object (if there is one) to face the player.
|
|
.macro faceplayer
|
|
.byte 0x5a
|
|
.endm
|
|
|
|
@ Turns the specified object in the specified direction.
|
|
.macro turnobject localId:req, direction:req
|
|
.byte 0x5b
|
|
.2byte \localId
|
|
.byte \direction
|
|
.endm
|
|
|
|
@ Configures the arguments for a trainer battle, then jumps to the appropriate script in scripts/trainer_battle.inc
|
|
.macro trainerbattle type:req, trainer:req, local_id:req, pointer1:req, pointer2, pointer3, pointer4
|
|
.byte 0x5c
|
|
.byte \type
|
|
.2byte \trainer
|
|
.2byte \local_id
|
|
.if \type == TRAINER_BATTLE_SINGLE
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ event script
|
|
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ event script
|
|
.elseif \type == TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT
|
|
.4byte \pointer1 @ text
|
|
.elseif \type == TRAINER_BATTLE_DOUBLE
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ text
|
|
.elseif \type == TRAINER_BATTLE_REMATCH
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ text
|
|
.4byte \pointer4 @ event script
|
|
.elseif \type == TRAINER_BATTLE_REMATCH_DOUBLE
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ text
|
|
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.4byte \pointer3 @ text
|
|
.4byte \pointer4 @ event script
|
|
.elseif \type == TRAINER_BATTLE_PYRAMID
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.elseif \type == TRAINER_BATTLE_SET_TRAINER_A
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.elseif \type == TRAINER_BATTLE_SET_TRAINER_B
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.elseif \type == TRAINER_BATTLE_HILL
|
|
.4byte \pointer1 @ text
|
|
.4byte \pointer2 @ text
|
|
.endif
|
|
.endm
|
|
|
|
NO_MUSIC = FALSE
|
|
|
|
@ Starts a single trainer battle. Takes a trainer, intro text, loss text, and an optional event script.
|
|
@ When used with an event script, you can also pass in an optional flag to disable music
|
|
.macro trainerbattle_single trainer:req, intro_text:req, lose_text:req, event_script=FALSE, music=TRUE
|
|
.if \event_script == FALSE
|
|
trainerbattle TRAINER_BATTLE_SINGLE, \trainer, 0, \intro_text, \lose_text
|
|
.elseif \music == TRUE
|
|
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, \trainer, 0, \intro_text, \lose_text, \event_script
|
|
.else
|
|
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \event_script
|
|
.endif
|
|
.endm
|
|
|
|
@ Starts a double trainer battle. Takes a trainer, intro text, loss text, text for when you have too few pokemon
|
|
@ and an optional event script. When used with an event script you can pass in an optional flag to disable music
|
|
.macro trainerbattle_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req, event_script=FALSE, music=TRUE
|
|
.if \event_script == FALSE
|
|
trainerbattle TRAINER_BATTLE_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text
|
|
.elseif \music == TRUE
|
|
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script
|
|
.else
|
|
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script
|
|
.endif
|
|
.endm
|
|
|
|
@ Starts a rematch battle. Takes a trainer, intro text and loss text
|
|
.macro trainerbattle_rematch trainer:req, intro_text:req, lose_text:req
|
|
trainerbattle TRAINER_BATTLE_REMATCH, \trainer, 0, \intro_text, \lose_text
|
|
.endm
|
|
|
|
@ Starts a rematch double battle. Takes a trainer, intro text, loss text, and text for when you have too few pokemon
|
|
.macro trainerbattle_rematch_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req
|
|
trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text
|
|
.endm
|
|
|
|
@ Starts a trainer battle, skipping intro text. Takes a trainer and loss text
|
|
.macro trainerbattle_no_intro trainer:req, lose_text:req
|
|
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text
|
|
.endm
|
|
|
|
|
|
@ Starts a trainer battle using the battle information stored in RAM (usually by the scripts in trainer_battle.inc, which
|
|
@ are run by trainerbattle), and blocks script execution until the battle finishes.
|
|
.macro dotrainerbattle
|
|
.byte 0x5d
|
|
.endm
|
|
|
|
@ Goes to address after the trainerbattle command (called by the battle functions, see battle_setup.c)
|
|
.macro gotopostbattlescript
|
|
.byte 0x5e
|
|
.endm
|
|
|
|
@ Goes to address specified in the trainerbattle command (called by the battle functions, see battle_setup.c)
|
|
.macro gotobeatenscript
|
|
.byte 0x5f
|
|
.endm
|
|
|
|
@ Checks if the trainer has been defeated by the player (by comparing the flag 'trainer + TRAINER_FLAGS_START' to TRUE).
|
|
.macro checktrainerflag trainer:req
|
|
.byte 0x60
|
|
.2byte \trainer
|
|
.endm
|
|
|
|
@ Sets the trainer flag (trainer + TRAINER_FLAGS_START) to TRUE (defeated).
|
|
.macro settrainerflag trainer:req
|
|
.byte 0x61
|
|
.2byte \trainer
|
|
.endm
|
|
|
|
@ Sets the trainer flag (trainer + TRAINER_FLAGS_START) to FALSE (not defeated).
|
|
.macro cleartrainerflag trainer:req
|
|
.byte 0x62
|
|
.2byte \trainer
|
|
.endm
|
|
|
|
@ Sets the coordinates of an object's template, so that if the sprite goes off screen
|
|
@ it'll still be there when it comes back on screen.
|
|
.macro setobjectxyperm localId:req, x:req, y:req
|
|
.byte 0x63
|
|
.2byte \localId
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Copies a live object event's xy position to its template, so that if the sprite goes off screen
|
|
@ it'll still be there when it comes back on screen.
|
|
.macro copyobjectxytoperm localId:req
|
|
.byte 0x64
|
|
.2byte \localId
|
|
.endm
|
|
|
|
@ Sets the movement type (MOVEMENT_TYPE_*) for an object's template.
|
|
.macro setobjectmovementtype localId:req, movementType:req
|
|
.byte 0x65
|
|
.2byte \localId
|
|
.byte \movementType
|
|
.endm
|
|
|
|
@ If a standard message box (or its text) is being drawn on-screen, this command blocks script execution until the
|
|
@ box and its text have been fully drawn.
|
|
.macro waitmessage
|
|
.byte 0x66
|
|
.endm
|
|
|
|
@ Starts displaying a standard message box containing the specified text. If text is a pointer, then the string at
|
|
@ that offset will be loaded and used. If text is NULL, then the value of script data 0 will be treated as
|
|
@ a pointer to the text. The 'loadword 0' in msgbox sets this value, for instance.
|
|
.macro message text:req
|
|
.byte 0x67
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Closes the current message box.
|
|
.macro closemessage
|
|
.byte 0x68
|
|
.endm
|
|
|
|
@ Freezes all objects immediately except the player. The player is frozen once their movement is finished.
|
|
.macro lockall
|
|
.byte 0x69
|
|
.endm
|
|
|
|
@ Freezes all objects immediately except the player and the selected object. The player and selected object are frozen once their movement is finished.
|
|
.macro lock
|
|
.byte 0x6a
|
|
.endm
|
|
|
|
@ Resumes normal movement for all objects on-screen, and closes any standard message boxes that are still open.
|
|
.macro releaseall
|
|
.byte 0x6b
|
|
.endm
|
|
|
|
@ Resumes normal movement for the selected object (if there is one) and the player. Also closes any standard message boxes that are still open.
|
|
.macro release
|
|
.byte 0x6c
|
|
.endm
|
|
|
|
@ Blocks script execution until the player presses the A or B button.
|
|
.macro waitbuttonpress
|
|
.byte 0x6d
|
|
.endm
|
|
|
|
@ Displays a YES/NO multichoice box at the specified coordinates, and blocks script execution until the user makes a selection.
|
|
@ Their selection is stored in VAR_RESULT as NO (0) or YES (1). Pressing B is equivalent to answering NO
|
|
.macro yesnobox x:req, y:req
|
|
.byte 0x6e
|
|
.byte \x
|
|
.byte \y
|
|
.endm
|
|
|
|
@ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made.
|
|
@ Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with multichoiceId.
|
|
@ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
|
|
.macro multichoice x:req, y:req, multichoiceId:req, ignoreBPress:req
|
|
.byte 0x6f
|
|
.byte \x
|
|
.byte \y
|
|
.byte \multichoiceId
|
|
.byte \ignoreBPress
|
|
.endm
|
|
|
|
@ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made.
|
|
@ Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with multichoiceId.
|
|
@ The default argument determines the initial position of the cursor when the box is first opened; it is zero-indexed, and if it is too large, it is treated as 0.
|
|
@ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
|
|
.macro multichoicedefault x:req, y:req, multichoiceId:req, default:req, ignoreBPress:req
|
|
.byte 0x70
|
|
.byte \x
|
|
.byte \y
|
|
.byte \multichoiceId
|
|
.byte \default
|
|
.byte \ignoreBPress
|
|
.endm
|
|
|
|
@ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made.
|
|
@ Lists of options are predefined (sMultichoiceLists) and the one to be used is specified with multichoiceId.
|
|
@ The per_row argument determines how many list items will be shown on a single row of the box.
|
|
@ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
|
|
.macro multichoicegrid x:req, y:req, multichoiceId:req, per_row:req, ignoreBPress:req
|
|
.byte 0x71
|
|
.byte \x
|
|
.byte \y
|
|
.byte \multichoiceId
|
|
.byte \per_row
|
|
.byte \ignoreBPress
|
|
.endm
|
|
|
|
@ Nopped in Emerald.
|
|
.macro drawbox
|
|
.byte 0x72
|
|
.endm
|
|
|
|
@ Nopped in Emerald, but still consumes parameters.
|
|
.macro erasebox left:req, top:req, right:req, bottom:req
|
|
.byte 0x73
|
|
.byte \left
|
|
.byte \top
|
|
.byte \right
|
|
.byte \bottom
|
|
.endm
|
|
|
|
@ Nopped in Emerald, but still consumes parameters.
|
|
.macro drawboxtext left:req, top:req, multichoiceId:req, ignoreBPress:req
|
|
.byte 0x74
|
|
.byte \left
|
|
.byte \top
|
|
.byte \multichoiceId
|
|
.byte \ignoreBPress
|
|
.endm
|
|
|
|
@ Displays a box containing the front sprite for the specified Pokemon species.
|
|
.macro showmonpic species:req, x:req, y:req
|
|
.byte 0x75
|
|
.2byte \species
|
|
.byte \x
|
|
.byte \y
|
|
.endm
|
|
|
|
@ Hides the box displayed by showmonpic.
|
|
.macro hidemonpic
|
|
.byte 0x76
|
|
.endm
|
|
|
|
@ Draws an image of the winner of the contest. winnerId is any CONTEST_WINNER_* constant.
|
|
.macro showcontestpainting winnerId:req
|
|
.byte 0x77
|
|
.byte \winnerId
|
|
.endm
|
|
|
|
@ Displays the given string as braille text in a standard message box. The string should use the .braille directive
|
|
@ to convert text to braille, and be preceded by brailleformat. The brailleformat data is skipped over (in RS, these
|
|
@ bytes determined the box's size and position, but in Emerald these are calculated automatically).
|
|
.macro braillemessage text:req
|
|
.byte 0x78
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Formatting for the braille window, to be put at the start of a pointer used by braillemessage.
|
|
@ These are from RS and are ignored in Emerald (see ScrCmd_braillemessage, and comment above)
|
|
.macro brailleformat winLeft:req, winTop:req, winRight:req, winBottom:req, textLeft:req, textTop:req
|
|
.byte \winLeft
|
|
.byte \winTop
|
|
.byte \winRight
|
|
.byte \winBottom
|
|
.byte \textLeft
|
|
.byte \textTop
|
|
.endm
|
|
|
|
@ Gives the player a Pokémon of the specified species and level, holding the specified item. The trailing 0s are unused parameters.
|
|
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
|
|
.macro givemon species:req, level:req, item=ITEM_NONE
|
|
.byte 0x79
|
|
.2byte \species
|
|
.byte \level
|
|
.2byte \item
|
|
.4byte 0
|
|
.4byte 0
|
|
.byte 0
|
|
.endm
|
|
|
|
@ Gives the player an Egg of the specified species.
|
|
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
|
|
.macro giveegg species:req
|
|
.byte 0x7a
|
|
.2byte \species
|
|
.endm
|
|
|
|
@ Replaces the move at 'slot' of the Pokémon in the player's party at 'partyIndex' with the specified move.
|
|
@ If a value greater than PARTY_SIZE is given for partyIndex it will use the last Pokémon in the party instead.
|
|
@ Note that this means in vanilla a value equal to PARTY_SIZE for partyIndex will go out of bounds.
|
|
.macro setmonmove partyIndex:req, slot:req, move:req
|
|
.byte 0x7b
|
|
.byte \partyIndex
|
|
.byte \slot
|
|
.2byte \move
|
|
.endm
|
|
|
|
@ Checks if at least one Pokemon in the player's party knows the specified move. If so, VAR_RESULT is set to the
|
|
@ (zero-indexed) slot number of the first Pokemon that knows the move. If not, VAR_RESULT is set to PARTY_SIZE.
|
|
@ VAR_0x8004 is also set to this Pokemon's species.
|
|
.macro checkpartymove move:req
|
|
.byte 0x7c
|
|
.2byte \move
|
|
.endm
|
|
|
|
@ Converts STR_VAR_1, STR_VAR_2, or STR_VAR_3 to its corresponding index into sScriptStringVars (0, 1, or 2).
|
|
@ If given anything else it will output it directly.
|
|
@ Note: Because the STR_VAR_# arguments given to this macro are not part of a processed string they are not
|
|
@ replaced with their charmap values, they are just passed as the literal characters "STR_VAR_#".
|
|
.macro stringvar id:req
|
|
.if \id == STR_VAR_1
|
|
.byte 0
|
|
.elseif \id == STR_VAR_2
|
|
.byte 1
|
|
.elseif \id == STR_VAR_3
|
|
.byte 2
|
|
.else
|
|
.byte \id
|
|
.endif
|
|
.endm
|
|
|
|
@ Writes the name of the given Pokemon species to the specified buffer.
|
|
.macro bufferspeciesname stringVarId:req, species:req
|
|
.byte 0x7d
|
|
stringvar \stringVarId
|
|
.2byte \species
|
|
.endm
|
|
|
|
@ Writes the name of the species of the first Pokemon in the player's party to the specified buffer.
|
|
.macro bufferleadmonspeciesname stringVarId:req
|
|
.byte 0x7e
|
|
stringvar \stringVarId
|
|
.endm
|
|
|
|
@ Writes the nickname of the Pokemon in 'slot' (zero-indexed) of the player's party to the specified buffer.
|
|
@ If an empty or invalid slot is specified, ten spaces ("") are written to the buffer.
|
|
.macro bufferpartymonnick stringVarId:req, slot:req
|
|
.byte 0x7f
|
|
stringvar \stringVarId
|
|
.2byte \slot
|
|
.endm
|
|
|
|
@ Writes the name of the specified item to the specified buffer. If itemId is >= ITEMS_COUNT,
|
|
@ then the name of ITEM_NONE ("????????") is buffered instead.
|
|
.macro bufferitemname stringVarId:req, item:req
|
|
.byte 0x80
|
|
stringvar \stringVarId
|
|
.2byte \item
|
|
.endm
|
|
|
|
@ Writes the name of the specified decoration to the specified buffer.
|
|
.macro bufferdecorationname stringVarId:req, decoration:req
|
|
.byte 0x81
|
|
stringvar \stringVarId
|
|
.2byte \decoration
|
|
.endm
|
|
|
|
@ Writes the name of the specified move to the specified buffer.
|
|
.macro buffermovename stringVarId:req, move:req
|
|
.byte 0x82
|
|
stringvar \stringVarId
|
|
.2byte \move
|
|
.endm
|
|
|
|
@ Converts the value of input to a decimal string, and writes that string to the specified buffer.
|
|
.macro buffernumberstring stringVarId:req, input:req
|
|
.byte 0x83
|
|
stringvar \stringVarId
|
|
.2byte \input
|
|
.endm
|
|
|
|
@ Writes the given standard string (STDSTRING_*) to the specified buffer. Invalid std string ids are not handled.
|
|
.macro bufferstdstring stringVarId:req, index:req
|
|
.byte 0x84
|
|
stringvar \stringVarId
|
|
.2byte \index
|
|
.endm
|
|
|
|
@ Copies the string at the given pointer to the specified buffer.
|
|
.macro bufferstring stringVarId:req, text:req
|
|
.byte 0x85
|
|
stringvar \stringVarId
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Opens the Pokemart system, offering the specified products for sale.
|
|
@ Products should be a list of .2byte item values preceded by an .align 2
|
|
.macro pokemart products:req
|
|
.byte 0x86
|
|
.4byte \products
|
|
.endm
|
|
|
|
@ Opens the Pokemart system and treats the list of items as decorations.
|
|
@ Products should be a list of .2byte decoration values preceded by an .align 2
|
|
.macro pokemartdecoration products:req
|
|
.byte 0x87
|
|
.4byte \products
|
|
.endm
|
|
|
|
@ Identical to pokemartdecoration, but with slight changes to the clerk dialogue. See uses of MART_TYPE_DECOR2.
|
|
.macro pokemartdecoration2 products:req
|
|
.byte 0x88
|
|
.4byte \products
|
|
.endm
|
|
|
|
@ Starts up the slot machine minigame. id is a SLOT_MACHINE_* value that influences probabilities of certain reel outcomes.
|
|
.macro playslotmachine id:req
|
|
.byte 0x89
|
|
.2byte \id
|
|
.endm
|
|
|
|
@ Sets a berry tree's berry and growth stage. treeId is any BERRY_TREE_* constant (an index into berryTrees in SaveBlock1),
|
|
@ berry is any ITEM_TO_BERRY(ITEM_BERRY_NAME) value, and growthStage is any BERRY_STAGE_* constant.
|
|
.macro setberrytree treeId:req, berry:req, growthStage:req
|
|
.byte 0x8a
|
|
.byte \treeId
|
|
.byte \berry
|
|
.byte \growthStage
|
|
.endm
|
|
|
|
@ Opens the party menu to select a Pokemon for a contest.
|
|
.macro choosecontestmon
|
|
.byte 0x8b
|
|
.endm
|
|
|
|
@ Starts the appeals round of a contest.
|
|
.macro startcontest
|
|
.byte 0x8c
|
|
.endm
|
|
|
|
@ Shows the results screen of a contest.
|
|
.macro showcontestresults
|
|
.byte 0x8d
|
|
.endm
|
|
|
|
@ Starts communication to initialize a link contest.
|
|
.macro contestlinktransfer
|
|
.byte 0x8e
|
|
.endm
|
|
|
|
@ Stores a random integer between 0 and limit (exclusive of limit) in VAR_RESULT.
|
|
.macro random limit:req
|
|
.byte 0x8f
|
|
.2byte \limit
|
|
.endm
|
|
|
|
@ Adds value to the player's money. If adding 'value' money would exceed MAX_MONEY, the player's money is set to MAX_MONEY.
|
|
@ If 'disable' is set to anything but 0 then this command does nothing.
|
|
.macro addmoney value:req, disable=0
|
|
.byte 0x90
|
|
.4byte \value
|
|
.byte \disable
|
|
.endm
|
|
|
|
@ Subtracts value from the player's money. If the player has less than 'value' money, their money is set to 0.
|
|
@ If 'disable' is set to anything but 0 then this command does nothing.
|
|
.macro removemoney value:req, disable=0
|
|
.byte 0x91
|
|
.4byte \value
|
|
.byte \disable
|
|
.endm
|
|
|
|
@ Checks if the player has money >= value. VAR_RESULT is set to TRUE if the player has enough money, or FALSE if they do not.
|
|
@ If 'disable' is set to anything but 0 then this command does nothing.
|
|
.macro checkmoney value:req, disable=0
|
|
.byte 0x92
|
|
.4byte \value
|
|
.byte \disable
|
|
.endm
|
|
|
|
@ Creates a window showing how much money the player has.
|
|
@ If 'disable' is set to anything but 0 then this command does nothing.
|
|
.macro showmoneybox x:req, y:req, disable=0
|
|
.byte 0x93
|
|
.byte \x
|
|
.byte \y
|
|
.byte \disable
|
|
.endm
|
|
|
|
@ Destroys the window created by showmoneybox. Consumption of the x and y arguments was dummied out.
|
|
.macro hidemoneybox
|
|
.byte 0x94
|
|
.byte 0 @ \x
|
|
.byte 0 @ \y
|
|
.endm
|
|
|
|
@ Updates the window created by showmoneybox. Consumption of the x and y arguments was dummied out.
|
|
@ If 'disable' is set to anything but 0 then this command does nothing.
|
|
.macro updatemoneybox disable=0
|
|
.byte 0x95
|
|
.byte 0 @ \x
|
|
.byte 0 @ \y
|
|
.byte \disable
|
|
.endm
|
|
|
|
@ Gets whether the effects of the specified PokeNews program are active. newsKind is a POKENEWS_* constant.
|
|
.macro getpokenewsactive newsKind:req
|
|
.byte 0x96
|
|
.2byte \newsKind
|
|
.endm
|
|
|
|
@ Fades the screen to and from black and white. Modes are FADE_(TO/FROM)_(WHITE/BLACK)
|
|
.macro fadescreen mode:req
|
|
.byte 0x97
|
|
.byte \mode
|
|
.endm
|
|
|
|
@ Fades the screen to and from black and white. Modes are FADE_(TO/FROM)_(WHITE/BLACK)
|
|
.macro fadescreenspeed mode:req, speed:req
|
|
.byte 0x98
|
|
.byte \mode
|
|
.byte \speed
|
|
.endm
|
|
|
|
@ Sets the flash level. A level of 0 is fully bright, a level of 1 is the largest flash radius, a level
|
|
@ of 7 is the smallest flash radius, a level of 8 is fully black.
|
|
.macro setflashlevel level:req
|
|
.byte 0x99
|
|
.2byte \level
|
|
.endm
|
|
|
|
@ Animates the flash radius from its current size to the size it would be at the specified level.
|
|
@ Note that this does not actually change the current flash level. It's typically used just before a setflashlevel.
|
|
.macro animateflash level:req
|
|
.byte 0x9a
|
|
.byte \level
|
|
.endm
|
|
|
|
@ Automatically scrolls through the message without player input and at a fixed speed.
|
|
.macro messageautoscroll text:req
|
|
.byte 0x9b
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Executes the specified field effect animation (FLDEFF_*).
|
|
.macro dofieldeffect animation:req
|
|
.byte 0x9c
|
|
.2byte \animation
|
|
.endm
|
|
|
|
@ Sets the field effect argument at index 'argNum' to 'value.'
|
|
.macro setfieldeffectargument argNum:req, value:req
|
|
.byte 0x9d
|
|
.byte \argNum
|
|
.2byte \value
|
|
.endm
|
|
|
|
@ Blocks script execution until all playing field effect animations complete.
|
|
.macro waitfieldeffect animation:req
|
|
.byte 0x9e
|
|
.2byte \animation
|
|
.endm
|
|
|
|
@ Sets which healing location (HEAL_LOCATION_*) the player will return to if all of the Pokemon in their party faint.
|
|
.macro setrespawn heallocation:req
|
|
.byte 0x9f
|
|
.2byte \heallocation
|
|
.endm
|
|
|
|
@ Checks the player's gender. Stores the result (MALE (0) or FEMALE (1)) in VAR_RESULT.
|
|
.macro checkplayergender
|
|
.byte 0xa0
|
|
.endm
|
|
|
|
@ Plays the cry of the given species. Mode is any CRY_MODE_* constant.
|
|
@ You can use waitmoncry to block script execution until the cry finishes.
|
|
.macro playmoncry species:req, mode:req
|
|
.byte 0xa1
|
|
.2byte \species
|
|
.2byte \mode
|
|
.endm
|
|
|
|
@ Set the metatile at (x, y) on the current map to the given metatile and impassability.
|
|
.macro setmetatile x:req, y:req, metatileId:req, impassable:req
|
|
.byte 0xa2
|
|
.2byte \x
|
|
.2byte \y
|
|
.2byte \metatileId
|
|
.2byte \impassable
|
|
.endm
|
|
|
|
@ Queues a weather change to the default weather for the map.
|
|
.macro resetweather
|
|
.byte 0xa3
|
|
.endm
|
|
|
|
@ Queues a weather change to type weather.
|
|
.macro setweather type:req
|
|
.byte 0xa4
|
|
.2byte \type
|
|
.endm
|
|
|
|
@ Executes the weather change queued with resetweather or setweather. The current weather will smoothly fade into the queued weather.
|
|
.macro doweather
|
|
.byte 0xa5
|
|
.endm
|
|
|
|
@ Enables the overworld task specified by stepCbId (STEP_CB_*). Only 1 can be active at a time. See src/field_tasks.c for more.
|
|
.macro setstepcallback stepCbId:req
|
|
.byte 0xa6
|
|
.byte \stepCbId
|
|
.endm
|
|
|
|
@ Sets the current map layout to the one specified by index (LAYOUT_*).
|
|
@ This should be done before the layout is loaded, typically in the ON_TRANSITION map script.
|
|
.macro setmaplayoutindex index:req
|
|
.byte 0xa7
|
|
.2byte \index
|
|
.endm
|
|
|
|
@ Sets the specified object's sprite's subpriority, and sets fixedPriority to TRUE.
|
|
@ Only used to hide the player and Briney behind the boat.
|
|
.macro setobjectsubpriority localId:req, map:req, subpriority:req
|
|
.byte 0xa8
|
|
.2byte \localId
|
|
map \map
|
|
.byte \subpriority
|
|
.endm
|
|
|
|
@ Sets the specified object's fixedPriority to FALSE. Does not change the subpriority field.
|
|
.macro resetobjectsubpriority localId:req, map:req
|
|
.byte 0xa9
|
|
.2byte \localId
|
|
map \map
|
|
.endm
|
|
|
|
@ Creates a sprite with object graphics. Used when creating large groups of static NPCs that exceed
|
|
@ the object event limit (e.g. Contest / Battle Dome audiences and Union Room group members).
|
|
@ The specified id can be used to refer to the sprite again later with turnvobject.
|
|
.macro createvobject graphicsId:req, id:req, x:req, y:req, elevation=3, direction=DIR_SOUTH
|
|
.byte 0xaa
|
|
.byte \graphicsId
|
|
.byte \id
|
|
.2byte \x
|
|
.2byte \y
|
|
.byte \elevation
|
|
.byte \direction
|
|
.endm
|
|
|
|
@ Turns a sprite created with createvobject.
|
|
.macro turnvobject id:req, direction:req
|
|
.byte 0xab
|
|
.byte \id
|
|
.byte \direction
|
|
.endm
|
|
|
|
@ Opens the door metatile at (x, y) with an animation.
|
|
.macro opendoor x:req, y:req
|
|
.byte 0xac
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Closes the door metatile at (x, y) with an animation.
|
|
.macro closedoor x:req, y:req
|
|
.byte 0xad
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Waits for the door animation started with opendoor or closedoor to finish.
|
|
.macro waitdooranim
|
|
.byte 0xae
|
|
.endm
|
|
|
|
@ Sets the door metatile at (x, y) to be open without an animation.
|
|
.macro setdooropen x:req, y:req
|
|
.byte 0xaf
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Sets the door metatile at (x, y) to be closed without an animation.
|
|
.macro setdoorclosed x:req, y:req
|
|
.byte 0xb0
|
|
.2byte \x
|
|
.2byte \y
|
|
.endm
|
|
|
|
@ Consumes its parameters and does nothing. It is implemented but unused in Ruby/Sapphire.
|
|
.macro addelevmenuitem a:req, b:req, c:req, d:req
|
|
.byte 0xb1
|
|
.byte \a
|
|
.2byte \b
|
|
.2byte \c
|
|
.2byte \d
|
|
.endm
|
|
|
|
@ Does nothing. It is implemented but unused in Ruby/Sapphire.
|
|
.macro showelevmenu
|
|
.byte 0xb2
|
|
.endm
|
|
|
|
@ Gets the number of coins the player has and stores it in the variable 'out'.
|
|
.macro checkcoins out:req
|
|
.byte 0xb3
|
|
.2byte \out
|
|
.endm
|
|
|
|
@ Gives 'count' coins to the player, up to a total of MAX_COINS.
|
|
@ If the player already has MAX_COINS then VAR_RESULT is set to TRUE, otherwise it is set to FALSE.
|
|
.macro addcoins count:req
|
|
.byte 0xb4
|
|
.2byte \count
|
|
.endm
|
|
|
|
@ Takes 'count' coins from the player.
|
|
@ If the player has fewer than 'count' coins then no coins are taken and VAR_RESULT is set to TRUE.
|
|
@ Otherwise VAR_RESULT is set to FALSE.
|
|
.macro removecoins count:req
|
|
.byte 0xb5
|
|
.2byte \count
|
|
.endm
|
|
|
|
@ Prepares to start a wild battle against a 'species' at 'level' holding 'item'.
|
|
@ If 'species2' is something other than SPECIES_NONE, then the battle is a double battle
|
|
@ that is also against 'species2' at 'level2' holding 'item2'.
|
|
@ Running this command will not affect normal wild battles. You start the prepared battle with dowildbattle.
|
|
@ If the player only has one Pokemon, a scripted double battle will be buggy.
|
|
.macro setwildbattle species:req, level:req, item=ITEM_NONE, species2=SPECIES_NONE, level2=0, item2=ITEM_NONE
|
|
.byte 0xb6
|
|
.2byte \species
|
|
.byte \level
|
|
.2byte \item
|
|
.2byte \species2
|
|
.byte \level2
|
|
.2byte \item2
|
|
.endm
|
|
|
|
@ Starts a wild battle against the Pokemon generated by setwildbattle. Blocks script execution until the battle finishes.
|
|
.macro dowildbattle
|
|
.byte 0xb7
|
|
.endm
|
|
|
|
@ Sets a relative address to be used by the other vcommands as part of a Mystery Gift script.
|
|
.macro setvaddress pointer:req
|
|
.byte 0xb8
|
|
.4byte \pointer
|
|
.endm
|
|
|
|
@ Equivalent to goto using the relative address set by setvaddress.
|
|
.macro vgoto destination:req
|
|
.byte 0xb9
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Equivalent to call using the relative address set by setvaddress.
|
|
.macro vcall destination:req
|
|
.byte 0xba
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Equivalent to goto_if using the relative address set by setvaddress.
|
|
.macro vgoto_if condition:req, destination:req
|
|
.byte 0xbb
|
|
.byte \condition
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Equivalent to call_if using the relative address set by setvaddress.
|
|
.macro vcall_if condition:req, destination:req
|
|
.byte 0xbc
|
|
.byte \condition
|
|
.4byte \destination
|
|
.endm
|
|
|
|
@ Equivalent to message using the relative address set by setvaddress.
|
|
.macro vmessage text:req
|
|
.byte 0xbd
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Expands the given text at the pointer (- the relative address set by setvaddress) into gStringVar4
|
|
.macro vbuffermessage text:req
|
|
.byte 0xbe
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Equivalent to bufferstring using the relative address set by setvaddress.
|
|
.macro vbufferstring stringVarIndex:req, text:req
|
|
.byte 0xbf
|
|
stringvar \stringVarIndex
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Create a window showing how many Coins the player has.
|
|
.macro showcoinsbox x:req, y:req
|
|
.byte 0xc0
|
|
.byte \x
|
|
.byte \y
|
|
.endm
|
|
|
|
@ Destroys the window created by showcoins. It consumes its arguments but doesn't use them.
|
|
.macro hidecoinsbox x:req, y:req
|
|
.byte 0xc1
|
|
.byte \x
|
|
.byte \y
|
|
.endm
|
|
|
|
@ Updates the window created by showcoins. It consumes its arguments but doesn't use them.
|
|
.macro updatecoinsbox x:req, y:req
|
|
.byte 0xc2
|
|
.byte \x
|
|
.byte \y
|
|
.endm
|
|
|
|
@ Increases the value of the specified game stat by 1. The maximum value of a stat is 0xFFFFFF. See include/constants/game_stat.h
|
|
.macro incrementgamestat stat:req
|
|
.byte 0xc3
|
|
.byte \stat
|
|
.endm
|
|
|
|
@ Sets the destination that using an Escape Rope or Dig will take the player to.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro setescapewarp map:req, a, b, c
|
|
.byte 0xc4
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Blocks script execution until cry finishes.
|
|
.macro waitmoncry
|
|
.byte 0xc5
|
|
.endm
|
|
|
|
@ Writes the name of the specified PC box to the specified buffer.
|
|
.macro bufferboxname stringVarId:req, box:req
|
|
.byte 0xc6
|
|
stringvar \stringVarId
|
|
.2byte \box
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro textcolor color:req
|
|
.byte 0xc7
|
|
.byte \color
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro loadhelp text:req
|
|
.byte 0xc8
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro unloadhelp
|
|
.byte 0xc9
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro signmsg
|
|
.byte 0xca
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro normalmsg
|
|
.byte 0xcb
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro comparehiddenvar a:req, value:req
|
|
.byte 0xcc
|
|
.byte \a
|
|
.4byte \value
|
|
.endm
|
|
|
|
@ Sets the modernFatefulEncounter bit for the Pokemon in the specified slot of the player's party.
|
|
.macro setmodernfatefulencounter slot:req
|
|
.byte 0xcd
|
|
.2byte \slot
|
|
.endm
|
|
|
|
@ Checks if the modernFatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set,
|
|
@ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE.
|
|
.macro checkmodernfatefulencounter slot:req
|
|
.byte 0xce
|
|
.2byte \slot
|
|
.endm
|
|
|
|
@ Jumps to the ram script saved from a Wonder Card. If there is no valid saved Wonder Card or if the
|
|
@ ram script is invalid then this does nothing.
|
|
.macro trywondercardscript
|
|
.byte 0xcf
|
|
.endm
|
|
|
|
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
|
|
.macro setworldmapflag worldmapflag:req
|
|
.byte 0xd0
|
|
.2byte \worldmapflag
|
|
.endm
|
|
|
|
@ Warps the player to the specified map using a teleport effect. Effect is similar to warpteleport, but
|
|
@ this warp has no fade out and maintains the original facing direction.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpspinenter map:req, a, b, c
|
|
.byte 0xd1
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Changes the location where the player caught the Pokemon in the specified slot of their party.
|
|
.macro setmonmetlocation slot:req, location:req
|
|
.byte 0xd2
|
|
.2byte \slot
|
|
.byte \location
|
|
.endm
|
|
|
|
@ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Moves the objects one rotation
|
|
@ on the colored puzzle specified by puzzleNumber.
|
|
.macro moverotatingtileobjects puzzleNumber:req
|
|
.byte 0xd3
|
|
.2byte \puzzleNumber
|
|
.endm
|
|
|
|
@ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Updates the facing direction of all objects on the puzzle tiles
|
|
.macro turnrotatingtileobjects
|
|
.byte 0xd4
|
|
.endm
|
|
|
|
@ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Allocates memory for the puzzle objects.
|
|
@ isTrickHouse is needed to determine which of the two maps the puzzle is on, in order to know where in the tileset
|
|
@ the puzzle tiles start (TRUE for Trick House Room, FALSE for Mossdeep Gym).
|
|
.macro initrotatingtilepuzzle isTrickHouse:req
|
|
.byte 0xd5
|
|
.2byte \isTrickHouse
|
|
.endm
|
|
|
|
@ For the rotating tile puzzles in Mossdeep Gym / Trick House Room 7. Frees the memory allocated for the puzzle objects.
|
|
.macro freerotatingtilepuzzle
|
|
.byte 0xd6
|
|
.endm
|
|
|
|
@ Warp used by the teleport tiles in the Mossdeep Gym. Plays SE_WARP_IN and does a simple fade transition.
|
|
@ Also skips reloading object events by setting SKIP_OBJECT_EVENT_LOAD.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpmossdeepgym map:req, a, b, c
|
|
.byte 0xd7
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Sets the selected object to the id of the currently approaching trainer.
|
|
.macro selectapproachingtrainer
|
|
.byte 0xd8
|
|
.endm
|
|
|
|
@ Freezes all objects immediately except the player and the approaching trainers.
|
|
@ The player and trainers are frozen once their movement is finished.
|
|
.macro lockfortrainer
|
|
.byte 0xd9
|
|
.endm
|
|
|
|
@ Destroys the window created by braillemessage.
|
|
.macro closebraillemessage
|
|
.byte 0xda
|
|
.endm
|
|
|
|
@ Prints and draws the message all at once rather than character by character.
|
|
@ Does not wait for player input to continue.
|
|
.macro messageinstant text:req
|
|
.byte 0xdb
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Equivalent to fadescreen but copies gPlttBufferUnfaded to gPaletteDecompressionBuffer on the fade out
|
|
@ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it.
|
|
.macro fadescreenswapbuffers mode:req
|
|
.byte 0xdc
|
|
.byte \mode
|
|
.endm
|
|
|
|
@ Buffers the specified trainer's class name to the given string var.
|
|
@ If the trainer id is >= TRAINERS_COUNT it will be treated as TRAINER_NONE.
|
|
.macro buffertrainerclassname stringVarId:req, trainerId:req
|
|
.byte 0xdd
|
|
stringvar \stringVarId
|
|
.2byte \trainerId
|
|
.endm
|
|
|
|
@ Buffers the specified trainer's name to the given string var.
|
|
@ If the trainer id is >= TRAINERS_COUNT it will be treated as TRAINER_NONE.
|
|
.macro buffertrainername stringVarId:req, trainerId:req
|
|
.byte 0xde
|
|
stringvar \stringVarId
|
|
.2byte \trainerId
|
|
.endm
|
|
|
|
@ Starts a Pokenav call with the given text.
|
|
.macro pokenavcall text:req
|
|
.byte 0xdf
|
|
.4byte \text
|
|
.endm
|
|
|
|
@ Warp with a fade to white. Used during the Sootopolis legendary fight.
|
|
@ Warp commands can be given either the id of which warp location to go to on the destination map
|
|
@ or a pair of x/y coordinates to go to directly on the destination map.
|
|
.macro warpwhitefade map:req, a, b, c
|
|
.byte 0xe0
|
|
formatwarp \map, \a, \b, \c
|
|
.endm
|
|
|
|
@ Buffers the name of the contest category to the buffer.
|
|
@ For example a category of CONTEST_CATEGORY_COOL will buffer the string "COOLNESS CONTEST".
|
|
.macro buffercontestname stringVarId:req, category:req
|
|
.byte 0xe1
|
|
stringvar \stringVarId
|
|
.2byte \category
|
|
.endm
|
|
|
|
@ Writes the name of the specified item to the specified buffer. If 'item' is a Berry or ITEM_POKE_BALL
|
|
@ and if the quantity is 2 or more, the buffered string will be pluralized ("IES" or "S" appended).
|
|
@ If the specified item is >= ITEMS_COUNT then the name of ITEM_NONE ("????????") is buffered instead.
|
|
.macro bufferitemnameplural stringVarId:req, item:req, quantity:req
|
|
.byte 0xe2
|
|
stringvar \stringVarId
|
|
.2byte \item
|
|
.2byte \quantity
|
|
.endm
|
|
|
|
|
|
@ Supplementary
|
|
|
|
.macro goto_if_unset flag:req, dest:req
|
|
checkflag \flag
|
|
goto_if FALSE, \dest
|
|
.endm
|
|
|
|
.macro goto_if_set flag:req, dest:req
|
|
checkflag \flag
|
|
goto_if TRUE, \dest
|
|
.endm
|
|
|
|
@ Allows 'compare' followed by a conditional goto/call to be combined into a single statement.
|
|
@ The following are examples of the two acceptable formats this facilitates:
|
|
@ compare VAR_RESULT, TRUE
|
|
@ goto_if_eq MyScript
|
|
@ - or -
|
|
@ goto_if_eq VAR_RESULT, TRUE, MyScript
|
|
@
|
|
@ The first two arguments to this macro are the base command, e.g. 'goto_if 1' for goto_if_eq.
|
|
@ The remaining arguments 'a, b, c' depend on the format:
|
|
@ For a single statement, 'a' and 'b' are the values to compare and 'c' is the destination pointer.
|
|
@ For a statement preceded by a compare, 'a' is the destination pointer and 'b/c' are not provided.
|
|
.macro trycompare jump:req, condition:req, a:req, b, c
|
|
.ifnb \c
|
|
compare \a, \b
|
|
\jump \condition, \c
|
|
.else
|
|
\jump \condition, \a
|
|
.endif
|
|
.endm
|
|
|
|
.macro goto_if_lt a:req, b, c @ LESS THAN
|
|
trycompare goto_if, 0, \a, \b, \c
|
|
.endm
|
|
|
|
.macro goto_if_eq a:req, b, c @ EQUAL
|
|
trycompare goto_if, 1, \a, \b, \c
|
|
.endm
|
|
|
|
.macro goto_if_gt a:req, b, c @ GREATER THAN
|
|
trycompare goto_if, 2, \a, \b, \c
|
|
.endm
|
|
|
|
.macro goto_if_le a:req, b, c @ LESS THAN OR EQUAL
|
|
trycompare goto_if, 3, \a, \b, \c
|
|
.endm
|
|
|
|
.macro goto_if_ge a:req, b, c @ GREATER THAN OR EQUAL
|
|
trycompare goto_if, 4, \a, \b, \c
|
|
.endm
|
|
|
|
.macro goto_if_ne a:req, b, c @ NOT EQUAL
|
|
trycompare goto_if, 5, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_unset flag:req, dest:req
|
|
checkflag \flag
|
|
call_if FALSE, \dest
|
|
.endm
|
|
|
|
.macro call_if_set flag:req, dest:req
|
|
checkflag \flag
|
|
call_if TRUE, \dest
|
|
.endm
|
|
|
|
.macro call_if_lt a:req, b, c @ LESS THAN
|
|
trycompare call_if, 0, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_eq a:req, b, c @ EQUAL
|
|
trycompare call_if, 1, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_gt a:req, b, c @ GREATER THAN
|
|
trycompare call_if, 2, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_le a:req, b, c @ LESS THAN OR EQUAL
|
|
trycompare call_if, 3, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_ge a:req, b, c @ GREATER THAN OR EQUAL
|
|
trycompare call_if, 4, \a, \b, \c
|
|
.endm
|
|
|
|
.macro call_if_ne a:req, b, c @ NOT EQUAL
|
|
trycompare call_if, 5, \a, \b, \c
|
|
.endm
|
|
|
|
.macro vgoto_if_eq a:req, b, c
|
|
trycompare vgoto_if, TRUE, \a, \b, \c
|
|
.endm
|
|
|
|
.macro vgoto_if_ne a:req, b, c
|
|
trycompare vgoto_if, FALSE, \a, \b, \c
|
|
.endm
|
|
|
|
.macro vgoto_if_unset flag:req, dest:req
|
|
checkflag \flag
|
|
vgoto_if FALSE, \dest
|
|
.endm
|
|
|
|
.macro vgoto_if_set flag:req, dest:req
|
|
checkflag \flag
|
|
vgoto_if TRUE, \dest
|
|
.endm
|
|
|
|
.macro goto_if_defeated trainer:req, dest:req
|
|
checktrainerflag \trainer
|
|
goto_if TRUE, \dest
|
|
.endm
|
|
|
|
.macro goto_if_not_defeated trainer:req, dest:req
|
|
checktrainerflag \trainer
|
|
goto_if FALSE, \dest
|
|
.endm
|
|
|
|
.macro call_if_defeated trainer:req, dest:req
|
|
checktrainerflag \trainer
|
|
call_if TRUE, \dest
|
|
.endm
|
|
|
|
.macro call_if_not_defeated trainer:req, dest:req
|
|
checktrainerflag \trainer
|
|
call_if FALSE, \dest
|
|
.endm
|
|
|
|
.macro switch var:req
|
|
copyvar VAR_0x8000, \var
|
|
.endm
|
|
|
|
.macro case condition:req, dest:req
|
|
compare VAR_0x8000, \condition
|
|
goto_if_eq \dest
|
|
.endm
|
|
|
|
@ Message box types
|
|
MSGBOX_NPC = 2
|
|
MSGBOX_SIGN = 3
|
|
MSGBOX_DEFAULT = 4
|
|
MSGBOX_YESNO = 5
|
|
MSGBOX_AUTOCLOSE = 6
|
|
MSGBOX_GETPOINTS = 9
|
|
MSGBOX_POKENAV = 10
|
|
|
|
YES = 1
|
|
NO = 0
|
|
|
|
@ Buffers the given text and calls the relevant standard message script (see gStdScripts).
|
|
.macro msgbox text:req, type=MSGBOX_DEFAULT
|
|
loadword 0, \text
|
|
callstd \type
|
|
.endm
|
|
|
|
@ Gives 'amount' of the specified 'item' to the player and prints a message with fanfare.
|
|
@ If the player doesn't have space for all the items then as many are added as possible, the
|
|
@ message indicates there is no room, and VAR_RESULT is set to FALSE.
|
|
@ Otherwise VAR_RESULT is set to TRUE, and the message indicates they have received the item(s).
|
|
.macro giveitem item:req, amount=1
|
|
setorcopyvar VAR_0x8000, \item
|
|
setorcopyvar VAR_0x8001, \amount
|
|
callstd STD_OBTAIN_ITEM
|
|
.endm
|
|
|
|
@ For picking up items in the overworld. Similar to giveitem, but with different language and
|
|
@ sets the flag of the last-talked to object (the item the player picked up).
|
|
.macro finditem item:req, amount=1
|
|
setorcopyvar VAR_0x8000, \item
|
|
setorcopyvar VAR_0x8001, \amount
|
|
callstd STD_FIND_ITEM
|
|
.endm
|
|
|
|
@ Equivalent to giveitem but for a single decoration.
|
|
.macro givedecoration decoration:req
|
|
setorcopyvar VAR_0x8000, \decoration
|
|
callstd STD_OBTAIN_DECORATION
|
|
.endm
|
|
|
|
@ Registers the specified trainer in Match Call and plays a fanfare with a notification message.
|
|
.macro register_matchcall trainer:req
|
|
setvar VAR_0x8004, \trainer
|
|
special SetMatchCallRegisteredFlag
|
|
setorcopyvar VAR_0x8000, \trainer
|
|
callstd STD_REGISTER_MATCH_CALL
|
|
.endm
|
|
|
|
@ Does a sparkle field effect (e.g. when the Trick Master is hiding) at the given coordinates.
|
|
.macro dofieldeffectsparkle x:req, y:req, priority:req
|
|
setfieldeffectargument 0, \x
|
|
setfieldeffectargument 1, \y
|
|
setfieldeffectargument 2, \priority
|
|
dofieldeffect FLDEFF_SPARKLE
|
|
.endm
|
|
|
|
@ Prints a braille message, waits for an A or B press, then closes the message.
|
|
.macro braillemsgbox text:req
|
|
braillemessage \text
|
|
waitbuttonpress
|
|
closebraillemessage
|
|
.endm
|
|
|
|
@ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter
|
|
.macro seteventmon species:req, level:req, item=ITEM_NONE
|
|
setvar VAR_0x8004, \species
|
|
setvar VAR_0x8005, \level
|
|
setvar VAR_0x8006, \item
|
|
special CreateEnemyEventMon
|
|
.endm
|
|
|
|
@ Set up a totem boost for the next battle.
|
|
@ 'battler' is the position of the mon you want to gain a boost. see B_POSITION_xx in include/constants/battle.h.
|
|
@ The rest of the arguments are the stat change values to each stat.
|
|
@ For example, giving the first opponent +1 to atk and -2 to speed would be: settotemboost B_POSITION_OPPONENT_LEFT, 1, 0, -2
|
|
.macro settotemboost battler:req, atk=0,def=0,speed=0,spatk=0,spdef=0,acc=0,evas=0
|
|
setvar VAR_0x8000, \battler
|
|
setvar VAR_0x8001, \atk
|
|
setvar VAR_0x8002, \def
|
|
setvar VAR_0x8003, \speed
|
|
setvar VAR_0x8004, \spatk
|
|
setvar VAR_0x8005, \spdef
|
|
setvar VAR_0x8006, \acc
|
|
setvar VAR_0x8007, \evas
|
|
special SetTotemBoost
|
|
.endm
|
|
|
|
@ useful totem boost macros
|
|
.macro totemboost_atk1 battler:req
|
|
settotemboost \battler, 1
|
|
.endm
|
|
.macro totemboost_def1 battler:req
|
|
settotemboost \battler, 0, 1
|
|
.endm
|
|
.macro totemboost_speed1 battler:req
|
|
settotemboost \battler, 0, 0, 1
|
|
.endm
|
|
.macro totemboost_spatk1 battler:req
|
|
settotemboost \battler, 0, 0, 0, 1
|
|
.endm
|
|
.macro totemboost_spdef1 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 1
|
|
.endm
|
|
.macro totemboost_acc1 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 0, 1
|
|
.endm
|
|
.macro totemboost_evas1 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 0, 0, 1
|
|
.endm
|
|
|
|
.macro totemboost_atk2 battler:req
|
|
settotemboost \battler, 2
|
|
.endm
|
|
.macro totemboost_def2 battler:req
|
|
settotemboost \battler, 0, 2
|
|
.endm
|
|
.macro totemboost_speed2 battler:req
|
|
settotemboost \battler, 0, 0, 2
|
|
.endm
|
|
.macro totemboost_spatk2 battler:req
|
|
settotemboost \battler, 0, 0, 0, 2
|
|
.endm
|
|
.macro totemboost_spdef2 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 2
|
|
.endm
|
|
.macro totemboost_acc2 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 0, 2
|
|
.endm
|
|
.macro totemboost_evas2 battler:req
|
|
settotemboost \battler, 0, 0, 0, 0, 0, 0, 2
|
|
.endm
|
|
|
|
@ Attempts to trigger a special evolution method in the overworld.
|
|
@ There may be other conditions required which are coded for in GetEvolutionTargetSpecies.
|
|
@ EX: tryspecialevo EVO_WATER_SCROLL, FALSE, FALSE triggers Kubfu's EVO_WATER_SCROLL evolution
|
|
@ method, cannot be cancelled in the evolution scene, and will only evolve one Kubfu if there
|
|
@ are multiple in the player's party.
|
|
.macro tryspecialevo evoMethod:req, canStopEvo=TRUE, tryMultiple=TRUE
|
|
setvar VAR_0x8000, \evoMethod
|
|
setvar VAR_0x8001, \canStopEvo
|
|
setvar VAR_0x8002, \tryMultiple
|
|
special TrySpecialOverworldEvo
|
|
.endm
|
|
|
|
.macro ai_vs_ai_battle trainer1:req, trainer2:req
|
|
setflag B_FLAG_AI_VS_AI_BATTLE
|
|
setvar VAR_0x8004, \trainer1
|
|
callnative CreateTrainerPartyForPlayer
|
|
trainerbattle_no_intro \trainer2, NULL
|
|
.endm
|