Start event macro comment updates

This commit is contained in:
GriffinR
2021-08-05 12:46:11 -04:00
parent 70577e844d
commit f85de6eca5
42 changed files with 352 additions and 333 deletions

View File

@@ -56,20 +56,20 @@
STD_OBTAIN_DECORATION = 7
STD_REGISTER_MATCH_CALL = 8
@ Calls the standard function at index function.
@ Executes 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 standard function at index function.
@ 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 standard function at index function.
@ 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
@@ -120,6 +120,7 @@
.4byte \source
.endm
@ TODO
@ Not sure. Judging from XSE's description I think it takes the least-significant byte in bank source and writes it to destination.
.macro setptrbyte source:req, destination:req
.byte 0x13
@@ -233,7 +234,7 @@
.endm
@ Generic compare macro which attempts to deduce argument types based on their values
@ Any values between 0x4000 to 0x40FF and 0x8000 to 0x8015 are considered event variable identifiers
@ 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
@@ -242,39 +243,33 @@
.endif
.endm
@ Calls the native C function stored at `func`.
@ 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.
@ 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 special function; that is, a function designed for use by scripts and listed in a table of pointers.
@ Calls a function listed in the table in data/specials.inc.
.macro special function:req
.byte 0x25
.2byte SPECIAL_\function
.endm
@ Calls a special function. That function's output (if any) will be written to the variable you specify.
@ 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
@ temporary solution
.macro specialvar_ output:req, functionId:req
.byte 0x26
.2byte \output
.2byte \functionId
.endm
@ Blocks script execution until a command or ASM code manually unblocks it. Generally used with specific
@ Blocks script execution until a command or ASM code manually unblocks it. Generally used with specific
@ commands and specials. If this command runs, and a subsequent command or piece of ASM does not unblock
@ state, the script will remain blocked indefinitely (essentially a hang).
.macro waitstate
@@ -287,46 +282,46 @@
.2byte \frames
.endm
@ Sets a to 1.
.macro setflag a:req
@ Sets flag to TRUE.
.macro setflag flag:req
.byte 0x29
.2byte \a
.2byte \flag
.endm
@ Sets a to 0.
.macro clearflag a:req
@ Sets flag to FALSE.
.macro clearflag flag:req
.byte 0x2a
.2byte \a
.2byte \flag
.endm
@ Compares a to 1.
.macro checkflag a:req
@ 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 \a
.2byte \flag
.endm
@ Initializes the RTC`s local time offset to the given hour and minute. In FireRed, this command is a nop.
@ 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
@ Runs time based events. In FireRed, this command is a nop.
@ Runs time based events.
.macro dotimebasedevents
.byte 0x2d
.endm
@ Sets the values of variables 0x8000, 0x8001, and 0x8002 to the current hour, minute, and second. In FRLG,
@ this command sets those variables to zero.
@ 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_number) sound. Only one sound may play at a time, with newer ones interrupting older ones.
.macro playse sound_number:req
@ Plays the specified (song) sound. Only one sound may play at a time, with newer ones interrupting older ones.
.macro playse song:req
.byte 0x2f
.2byte \sound_number
.2byte \song
.endm
@ Blocks script execution until the currently-playing sound (triggered by playse) finishes playing.
@@ -335,9 +330,9 @@
.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 songNumber:req
.macro playfanfare song:req
.byte 0x31
.2byte \songNumber
.2byte \song
.endm
@ Blocks script execution until all currently-playing fanfares finish.
@@ -345,18 +340,18 @@
.byte 0x32
.endm
@ Plays the specified (song_number) song. If save_song is TRUE, the
@ specified (song_number) will be saved as if savebgm was called with it.
.macro playbgm song_number:req, save_song:req
@ 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_number
.2byte \song
.byte \save_song
.endm
@ Saves the specified (song_number) song to be played later.
.macro savebgm song_number:req
@ Saves the specified song to be played later.
.macro savebgm song:req
.byte 0x34
.2byte \song_number
.2byte \song
.endm
@ Crossfades the currently-playing song into the map's default song.
@@ -364,10 +359,10 @@
.byte 0x35
.endm
@ Crossfades the currently-playng song into the specified (song_number) song.
.macro fadenewbgm song_number:req
@ Crossfades the currently-playng song into the specified song.
.macro fadenewbgm song:req
.byte 0x36
.2byte \song_number
.2byte \song
.endm
@ Fades out the currently-playing song.
@@ -382,32 +377,37 @@
.byte \speed
.endm
@ Sends the player to Warp warp on Map bank.map. If the specified warp is 0xFF,
@ then the player will instead be sent to (X, Y) on the map.
.macro warp map:req, warp:req, X:req, Y:req
@ Warps the player to the specified map.
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warp map:req, warp:req, x=0, y=0
.byte 0x39
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Clone of warp that does not play a sound effect.
.macro warpsilent map:req, warp:req, X:req, Y:req
@ Warps the player to the specified map without playing a sound effect.
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpsilent map:req, warp:req, x=0, y=0
.byte 0x3a
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Clone of warp that plays a door opening animation before stepping upwards into it.
.macro warpdoor map:req, warp:req, X:req, Y:req
@ Warps the player to the specified map and plays a door opening animation before stepping upwards into it.
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpdoor map:req, warp:req, x=0, y=0
.byte 0x3b
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Warps the player to another map using a hole animation.
@@ -416,57 +416,62 @@
map \map
.endm
@ Clone of warp that uses a teleport effect. It is apparently only used in R/S/E.
.macro warpteleport map:req, warp:req, X:req, Y:req
@ Warps the player to the specified map using a teleport effect.
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpteleport map:req, warp:req, x=0, y=0
.byte 0x3d
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Sets the warp destination to be used later.
.macro setwarp map:req, warp:req, X:req, Y:req
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro setwarp map:req, warp:req, x=0, y=0
.byte 0x3e
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ TODO
@ Sets the warp destination that a warp to Warp 127 on Map 127.127 will connect to.
@ Useful when a map has warps that need to go to script-controlled locations (i.e. elevators).
.macro setdynamicwarp map:req, warp:req, X:req, Y:req
.macro setdynamicwarp map:req, warp:req, x:req, y:req
.byte 0x3f
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Sets the destination that diving or emerging from a dive will take the player to.
.macro setdivewarp map:req, warp:req, X:req, Y:req
.macro setdivewarp map:req, warp:req, x:req, y:req
.byte 0x40
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.endm
@ Sets the destination that falling into a hole will take the player to.
.macro setholewarp map:req, warp:req, X:req, Y:req
.macro setholewarp map:req, warp:req, x:req, y:req
.byte 0x41
map \map
.byte \warp
.2byte \X
.2byte \Y
.2byte \x
.2byte \y
.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
@ 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
.2byte \x
.2byte \y
.endm
@ Retrieves the number of Pokemon in the player's party, and stores that number in VAR_RESULT.
@@ -482,7 +487,8 @@
.2byte \quantity
.endm
@ Removes quantity of item index from the player's Bag.
@ Removes quantity of item index 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 index:req, quantity=1
.byte 0x45
.2byte \index
@@ -491,7 +497,7 @@
@ Checks if the player has enough space in their Bag to hold quantity more of item index. Sets VAR_RESULT to
@ TRUE if there is room, or FALSE is there is no room.
.macro checkitemspace index:req, quantity:req
.macro checkitemspace index:req, quantity=1
.byte 0x46
.2byte \index
.2byte \quantity
@@ -499,53 +505,53 @@
@ Checks if the player has quantity or more of item index 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 index:req, quantity:req
.macro checkitem index:req, quantity=1
.byte 0x47
.2byte \index
.2byte \quantity
.endm
@ Checks which Bag pocket the specified item belongs in, and writes the pocket value (POCKET_*) to VAR_RESULT.
@ This script is used to show the name of the proper Bag pocket when the player receives an item via callstd (simplified to giveitem in XSE).
@ This is used to show the name of the proper Bag pocket when the player receives an item via callstd.
.macro checkitemtype index:req
.byte 0x48
.2byte \index
.endm
@ Adds a quantity amount of item index to the player's PC. Both arguments can be variables.
.macro addpcitem index:req, quantity:req
@ Adds a quantity amount of item index to the player's PC.
.macro addpcitem index:req, quantity=1
.byte 0x49
.2byte \index
.2byte \quantity
.endm
@ Checks for quantity amount of item index in the player's PC. Both arguments can be variables.
.macro checkpcitem index:req, quantity:req
@ Checks for quantity amount of item index in the player's PC.
.macro checkpcitem index:req, quantity=1
.byte 0x4a
.2byte \index
.2byte \quantity
.endm
@ Adds decoration to the player's PC. In FireRed, this command is a nop. (The argument is read, but not used for anything.)
@ Adds decoration to the player's PC.
.macro adddecoration decoration:req
.byte 0x4b
.2byte \decoration
.endm
@ Removes a decoration from the player's PC. In FireRed, this command is a nop. (The argument is read, but not used for anything.)
@ 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. In FireRed, this command is a nop. (The argument is read, but not used for anything.)
@ 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 decoration. Sets VAR_RESULT to TRUE if there is room, or
@ FALSE is there is no room. In FireRed, this command is a nop. (The argument is read, but not used for anything.)
@ Checks if the player has enough space in their PC to hold 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
@@ -568,7 +574,7 @@
.endm
@ Blocks script execution until the movements being applied to the specified (index) Object finish.
@ If the specified Object is 0x0000, then the command will block script execution until all Objects
@ If the specified Object is 0, then the command will block script execution until all Objects
@ affected by applymovement finish their movements. 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.
@@ -583,9 +589,8 @@
.endif
.endm
@ Attempts to hide the specified (index) Object on the specified (map_group, map_num) map,
@ by setting its visibility flag if it has a valid one. If the Object does not have a valid
@ visibility flag, this command does nothing.
@ Attempts to despawn the specified (index) Object on the specified (map_group, map_num) 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 index:req, map
.ifb \map
@@ -598,8 +603,8 @@
.endif
.endm
@ Unsets the specified (index) Object's visibility flag on the specified (map_group, map_num) map if it has a valid one.
@ If the Object does not have a valid visibility flag, this command does nothing.
@ Attempts to spawn the specified (index) Object the specified (map_group, map_num) map.
@ Note that unlike removeobject this does not modify the OObject's flag.
@ If no map is specified, then the current map is used.
.macro addobject index:req, map
.ifb \map
@@ -632,7 +637,7 @@
map \map
.endm
@ If the script was called by an Object, then that Object will turn to face toward the metatile that the player is standing on.
@ If the script was called by an Object, then that Object will turn to face toward the player.
.macro faceplayer
.byte 0x5a
.endm
@@ -643,7 +648,7 @@
.byte \direction
.endm
@ If the Trainer flag for Trainer index is not set, this command does absolutely nothing.
@ TODO
.macro trainerbattle type:req, trainer:req, local_id:req, pointer1:req, pointer2, pointer3, pointer4
.byte 0x5c
.byte \type
@@ -996,15 +1001,15 @@
.2byte \slot
.endm
@ Writes the name of the item at index item to the specified buffer. If the specified index is larger than
@ the number of items in the game (0x176), the name of item 0 ("????????") is buffered instead.
@ Writes the name of the item at index item to the specified buffer. If the specified index is >= ITEMS_COUNT,
@ then the name of ITEM_NONE ("????????") is buffered instead.
.macro bufferitemname out:req, item:req
.byte 0x80
.byte \out
.2byte \item
.endm
@ Writes the name of the decoration at index decoration to the specified buffer. In FireRed, this command is a nop.
@ Writes the name of the decoration at index 'decoration' to the specified buffer.
.macro bufferdecorationname out:req, decoration:req
.byte 0x81
.byte \out
@@ -1052,7 +1057,7 @@
.4byte \products
.endm
@ Apparent clone of pokemartdecoration.
@ 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
@@ -1064,7 +1069,7 @@
.2byte \word
.endm
@ Sets a berry tree's specific berry and growth stage. In FireRed, this command is a nop.
@ Sets a berry tree's specific berry and growth stage.
.macro setberrytree tree_id:req, berry:req, growth_stage:req
.byte 0x8a
.byte \tree_id
@@ -1072,60 +1077,63 @@
.byte \growth_stage
.endm
@ This allows you to choose a Pokemon to use in a contest. In FireRed, this command sets the byte at 0x03000EA8 to 0x01.
@ This allows you to choose a Pokemon to use in a contest
.macro choosecontestmon
.byte 0x8b
.endm
@ Starts a contest. In FireRed, this command is a nop.
@ Starts a contest.
.macro startcontest
.byte 0x8c
.endm
@ Shows the results of a contest. In FireRed, this command is a nop.
@ Shows the results of a contest.
.macro showcontestresults
.byte 0x8d
.endm
@ Starts a contest over a link connection. In FireRed, this command is a nop.
@ Starts a contest over a link connection.
.macro contestlinktransfer
.byte 0x8e
.endm
@ Stores a random integer between 0 and limit in VAR_RESULT.
@ Stores a random integer between 0 and limit (exclusive of limit) in VAR_RESULT.
.macro random limit:req
.byte 0x8f
.2byte \limit
.endm
@ If check is 0x00, this command adds value to the player's money.
.macro addmoney value:req, check:req
@ 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 \check
.byte \disable
.endm
@ If check is 0x00, this command subtracts value from the player's money.
.macro removemoney value:req, check:req
@ 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 \check
.byte \disable
.endm
@ If check is 0x00, this command will check if the player has money >= value; VAR_RESULT is set to TRUE if the player
@ has enough money, or FALSE if they do not.
.macro checkmoney value:req, check:req
@ 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 \check
.byte \disable
.endm
@ Spawns a secondary box showing how much money the player has.
.macro showmoneybox x:req, y:req, check:req
@ 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 \check
.byte \disable
.endm
@ Hides the secondary box spawned by showmoney. Consumption of the x and y arguments was dummied out.
@@ -1135,15 +1143,16 @@
.byte 0 @ \y
.endm
@ Updates the secondary box spawned by showmoney. Consumes but does not use arguments.
.macro updatemoneybox x:req, y:req
@ Updates the secondary box spawned by showmoney. 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 \x
.byte \y
.byte 0 @ 1 = don't perform this command. Always 0 in vanilla. Why this is a thing is beyond me.
.byte 0 @ \x
.byte 0 @ \y
.byte \disable
.endm
@ Gets the price reduction for the index given. In FireRed, this command is a nop.
@ Gets the price reduction for the index given.
.macro getpricereduction index:req
.byte 0x96
.2byte \index
@@ -1177,7 +1186,7 @@
.4byte \pointer
.endm
@ Executes the specified field move animation.
@ Executes the specified field effect animation.
.macro dofieldeffect animation:req
.byte 0x9c
.2byte \animation
@@ -1202,12 +1211,12 @@
.2byte \heallocation
.endm
@ Checks the player's gender. If male, then MALE (0) is stored in VAR_RESULT. If female, then FEMALE (1) is stored in VAR_RESULT.
@ Checks the player's gender. Stores the result (MALE (0) or FEMALE (1)) in VAR_RESULT.
.macro checkplayergender
.byte 0xa0
.endm
@ Plays the specified (species) Pokemon's cry. You can use waitcry to block script execution until the sound finishes.
@ Plays the specified (species) Pokemon's cry. You can use waitmoncry to block script execution until the sound finishes.
.macro playmoncry species:req, mode:req
.byte 0xa1
.2byte \species
@@ -1279,14 +1288,14 @@
.byte \direction
.endm
@ Opens the door metatile at (X, Y) with an animation.
@ 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.
@ Closes the door metatile at (x, y) with an animation.
.macro closedoor x:req, y:req
.byte 0xad
.2byte \x
@@ -1312,7 +1321,7 @@
.2byte \y
.endm
@ In Emerald, this command consumes its parameters and does nothing. In FireRed, this command is a nop.
@ 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
@@ -1321,27 +1330,33 @@
.2byte \d
.endm
@ In FireRed and Emerald, this command is a nop.
@ 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 level holding item. Running this command will not affect
@ Prepares to start a wild battle against a 'species' at 'level' holding 'item'. Running this command will not affect
@ normal wild battles. You start the prepared battle with dowildbattle.
.macro setwildbattle species:req, level:req, item:req
.byte 0xb6
@@ -1419,14 +1434,16 @@
.byte \y
.endm
@ Increases the value of the specified game stat by 1. The stat's value will not be allowed to exceed 0x00FFFFFF.
@ 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.
.macro setescapewarp map:req, warp:req, x:req, y:req
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro setescapewarp map:req, warp:req, x=0, y=0
.byte 0xc4
map \map
.byte \warp
@@ -1446,42 +1463,33 @@
.2byte \box
.endm
@ Sets the color of the text in standard message boxes. 0x00 produces blue (male) text, 0x01 produces red (female) text,
@ 0xFF resets the color to the default for the current OW's gender, and all other values produce black text.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro textcolor color:req
.byte 0xc7
.byte \color
.endm
@ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom
@ of the screen when the Main Menu is opened.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro loadhelp pointer:req
.byte 0xc8
.4byte \pointer
.endm
@ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom of
@ the screen when the Main Menu is opened.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro unloadhelp
.byte 0xc9
.endm
@ After using this command, all standard message boxes will use the signpost frame.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro signmsg
.byte 0xca
.endm
@ Ends the effects of signmsg, returning message box frames to normal.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro normalmsg
.byte 0xcb
.endm
@ Compares the value of a hidden variable to a dword.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro comparehiddenvar a:req, value:req
.byte 0xcc
@@ -1489,26 +1497,25 @@
.4byte \value
.endm
@ Sets the Pokemon in the specified slot of the player party's eventLegal bit.
@ Sets the eventLegal bit for the Pokemon in the specified slot of the player's party.
.macro setmoneventlegal slot:req
.byte 0xcd
.2byte \slot
.endm
@ Checks if the Pokemon in the specified slot of the player's party has its eventLegal bit set. If it isn't set,
@ Checks if the eventLegal 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 checkmoneventlegal slot:req
.byte 0xce
.2byte \slot
.endm
@ Depending on factors I haven't managed to understand yet, this command may cause script execution to jump to the
@ offset specified by the pointer at 0x020375C0.
.macro gotoram
@ 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 gotowondercardscript
.byte 0xcf
.endm
@ Sets worldmapflag to 1. This allows the player to Fly to the corresponding map, if that map has a flightspot.
@ Used only in FireRed/LeafGreen, does nothing in Emerald.
.macro setworldmapflag worldmapflag:req
.byte 0xd0
@@ -1516,7 +1523,9 @@
.endm
@ Clone of warpteleport? It is apparently only used in FR/LG, and only with specials.[source]
.macro warpteleport2 map:req, warp:req, x:req, y:req
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpteleport2 map:req, warp:req, x=0, y=0
.byte 0xd1
map \map
.byte \warp
@@ -1545,7 +1554,7 @@
@ 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. In FireRed, this command is a nop.
@ the puzzle tiles start.
.macro initrotatingtilepuzzle isTrickHouse:req
.byte 0xd5
.2byte \isTrickHouse
@@ -1556,10 +1565,12 @@
.byte 0xd6
.endm
.macro warpmossdeepgym map:req, warpId:req, x:req, y:req
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpmossdeepgym map:req, warp:req, x=0, y=0
.byte 0xd7
map \map
.byte \warpId
.byte \warp
.2byte \x
.2byte \y
.endm
@@ -1603,12 +1614,14 @@
.4byte \pointer
.endm
.macro warpsootopolislegend map:req, byte:req, word1:req, word2:req
@ The player will warp to the coordinates of the given 'warp'.
@ If 'warp' is set to an invalid id (e.g. 255) then the coordinates x/y will be used instead.
.macro warpsootopolislegend map:req, warp:req, x=0, y=0
.byte 0xe0
map \map
.byte \byte
.2byte \word1
.2byte \word2
.byte \warp
.2byte \x
.2byte \y
.endm
.macro buffercontesttypestring out:req, word:req
@@ -1617,10 +1630,9 @@
.2byte \word
.endm
@ Writes the name of the specified (item) item to the specified buffer. If the specified item is a Berry (0x85 - 0xAE) or
@ Poke Ball (0x4) and if the quantity is 2 or more, the buffered string will be pluralized ("IES" or "S" appended).
@ If the specified item is the Enigma Berry, I have no idea what this command does (but testing showed no pluralization).
@ If the specified index is larger than the number of items in the game (0x176), the name of item 0 ("????????") is buffered instead.
@ Writes the name of the specified (item) 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 out:req, item:req, quantity:req
.byte 0xe2
.byte \out
@@ -1753,6 +1765,7 @@
MSGBOX_YESNO = 5
MSGBOX_AUTOCLOSE = 6
MSGBOX_GETPOINTS = 9
MSGBOX_POKENAV = 10
YES = 1
NO = 0
@@ -1762,6 +1775,10 @@
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