summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2022-02-02 22:09:36 -0500
committerGitHub <noreply@github.com>2022-02-02 22:09:36 -0500
commit7d2344c07bea9a46993a92d4611fba80545acdd2 (patch)
tree9f865097bfc54f3c9ac885d9f1ec721f01d74eab
parentf494238a9d1f8f486891845a43983e187dbeadf0 (diff)
parentdc7d86f026c01682bd024fabb0ce206eacb81c35 (diff)
Merge pull request #1616 from GriffinRichards/missing-req
Add missing :req, remove old macros
-rw-r--r--asm/macros.inc129
-rw-r--r--asm/macros/asm.inc4
-rw-r--r--asm/macros/field_effect_script.inc16
-rw-r--r--asm/macros/function.inc10
-rw-r--r--asm/macros/m4a.inc10
-rw-r--r--asm/macros/map.inc125
-rw-r--r--asm/macros/pokemon_data.inc56
-rw-r--r--asm/macros/window.inc35
-rw-r--r--data/map_events.s1
-rw-r--r--data/maps.s1
-rw-r--r--include/constants/global.h9
-rw-r--r--include/gba/m4a_internal.h2
-rw-r--r--include/global.fieldmap.h12
-rw-r--r--src/m4a.c2
-rw-r--r--tools/mapjson/mapjson.cpp2
15 files changed, 114 insertions, 300 deletions
diff --git a/asm/macros.inc b/asm/macros.inc
index 77f44a847..95bb4e31b 100644
--- a/asm/macros.inc
+++ b/asm/macros.inc
@@ -1,8 +1,6 @@
.include "asm/macros/asm.inc"
.include "asm/macros/function.inc"
.include "asm/macros/movement.inc"
- .include "asm/macros/window.inc"
- .include "asm/macros/pokemon_data.inc"
.include "asm/macros/map.inc"
.include "asm/macros/field_effect_script.inc"
.include "asm/macros/trainer_hill.inc"
@@ -16,130 +14,3 @@
.include "asm/macros/battle_frontier/battle_pyramid.inc"
.include "asm/macros/battle_frontier/battle_tower.inc"
.include "asm/macros/battle_frontier/frontier_util.inc"
-
- .macro region_map_entry x, y, width, height, name
- .byte \x
- .byte \y
- .byte \width
- .byte \height
- .4byte gMapName_\name
- .endm
-
- .macro obj_tiles address, uncompressed_size, tag = 0
- .4byte \address
- .2byte \uncompressed_size
- .2byte \tag
- .endm
-
- .macro null_obj_tiles
- obj_tiles 0, 0, 0
- .endm
-
- .macro obj_pal address, tag
- .4byte \address
- .2byte \tag
- .2byte 0@ padding
- .endm
-
- .macro null_obj_pal
- obj_pal 0, 0
- .endm
-
- .macro paired_pals tag, address
- .2byte \tag
- .2byte 0 @ padding
- .4byte \address
- .endm
-
-@ For object animation frames.
- .macro obj_frame_tiles address, uncompressed_size
- .4byte \address
- .2byte \uncompressed_size
- .2byte 0 @ padding
- .endm
-
- .macro spr_template tile_tag, pal_tag, oam, anims, images, affine_anims, callback
- .2byte \tile_tag
- .2byte \pal_tag
- .4byte \oam
- .4byte \anims
- .4byte \images
- .4byte \affine_anims
- .4byte \callback
- .endm
-
-@ Berry trees have a table defining the palette slot used for each of their 5
-@ stages. However, the first 2 stages always use the same slots regardless of
-@ the type of tree and the slots of the last 3 stages always equal each other.
- .macro berry_tree_palette_slot_table slot
- .byte 3, 4, \slot, \slot, \slot
- .endm
-
- .macro subsprite x, y, priority, tile_num_offset, size
- .byte \x
- .byte \y
- .2byte ((\priority) << 14) | ((\tile_num_offset) << 4) | SPRITE_SIZE_\size
- .endm
-
- .macro obj_image_anim_frame pic_id, duration, flags = 0
- .2byte \pic_id
- .byte (\flags) | (\duration)
- .byte 0 @ padding
- .endm
-
- .macro obj_image_anim_loop count
- .2byte 0xfffd
- .byte \count
- .byte 0 @ padding
- .endm
-
- .macro obj_image_anim_jump target_index
- .2byte 0xfffe
- .byte \target_index
- .byte 0 @ padding
- .endm
-
- .macro obj_image_anim_end
- .2byte 0xffff
- .2byte 0 @ padding
- .endm
-
- .macro obj_rot_scal_anim_frame delta_x_scale, delta_y_scale, delta_angle, duration
- .2byte \delta_x_scale
- .2byte \delta_y_scale
- .byte \delta_angle
- .byte \duration
- .2byte 0 @ padding
- .endm
-
- .macro obj_rot_scal_anim_loop count
- .2byte 0x7ffd
- .2byte \count
- .4byte 0 @ padding
- .endm
-
- .macro obj_rot_scal_anim_jump target_index
- .2byte 0x7ffe
- .2byte \target_index
- .4byte 0 @ padding
- .endm
-
- .macro obj_rot_scal_anim_end unknown=0
- .2byte 0x7fff
- .2byte \unknown
- .fill 4 @ padding
- .endm
-
- .macro door_anim_frame unknown, offset
- .byte \unknown
- .byte 0 @ padding
- .2byte \offset
- .endm
-
- .macro door_anim_gfx metatile_num, unknown, unknown2, tile_addr, palette_addr
- .2byte \metatile_num
- .byte \unknown
- .byte \unknown2
- .4byte \tile_addr
- .4byte \palette_addr
- .endm
diff --git a/asm/macros/asm.inc b/asm/macros/asm.inc
index 4ac003fab..3f70145d3 100644
--- a/asm/macros/asm.inc
+++ b/asm/macros/asm.inc
@@ -1,4 +1,4 @@
- .macro inc x
+ .macro inc x:req
.set \x, \x + 1
.endm
@@ -6,7 +6,7 @@
.set __enum__, \x
.endm
- .macro enum constant
+ .macro enum constant:req
.equiv \constant, __enum__
inc __enum__
.endm
diff --git a/asm/macros/field_effect_script.inc b/asm/macros/field_effect_script.inc
index 597b89acb..38f7e3175 100644
--- a/asm/macros/field_effect_script.inc
+++ b/asm/macros/field_effect_script.inc
@@ -1,19 +1,21 @@
- .macro field_eff_loadtiles address
+@ The first .byte argument of each macro below is an index into gFieldEffectScriptFuncs
+
+ .macro field_eff_loadtiles address:req
.byte 0
.4byte \address
.endm
- .macro field_eff_loadfadedpal address
+ .macro field_eff_loadfadedpal address:req
.byte 1
.4byte \address
.endm
- .macro field_eff_loadpal address
+ .macro field_eff_loadpal address:req
.byte 2
.4byte \address
.endm
- .macro field_eff_callnative address
+ .macro field_eff_callnative address:req
.byte 3
.4byte \address
.endm
@@ -22,20 +24,20 @@
.byte 4
.endm
- .macro field_eff_loadgfx_callnative tiles_address, palette_address, function_address
+ .macro field_eff_loadgfx_callnative tiles_address:req, palette_address:req, function_address:req
.byte 5
.4byte \tiles_address
.4byte \palette_address
.4byte \function_address
.endm
- .macro field_eff_loadtiles_callnative tiles_address, function_address
+ .macro field_eff_loadtiles_callnative tiles_address:req, function_address:req
.byte 6
.4byte \tiles_address
.4byte \function_address
.endm
- .macro field_eff_loadfadedpal_callnative palette_address, function_address
+ .macro field_eff_loadfadedpal_callnative palette_address:req, function_address:req
.byte 7
.4byte \palette_address
.4byte \function_address
diff --git a/asm/macros/function.inc b/asm/macros/function.inc
index b109595df..0f4e6720c 100644
--- a/asm/macros/function.inc
+++ b/asm/macros/function.inc
@@ -1,15 +1,15 @@
- .macro arm_func_start name
+ .macro arm_func_start name:req
.align 2, 0
.global \name
.arm
.type \name, %function
.endm
- .macro arm_func_end name
+ .macro arm_func_end name:req
.size \name, .-\name
.endm
- .macro thumb_func_start name
+ .macro thumb_func_start name:req
.align 2, 0
.global \name
.thumb
@@ -17,13 +17,13 @@
.type \name, %function
.endm
- .macro non_word_aligned_thumb_func_start name
+ .macro non_word_aligned_thumb_func_start name:req
.global \name
.thumb
.thumb_func
.type \name, %function
.endm
- .macro thumb_func_end name
+ .macro thumb_func_end name:req
.size \name, .-\name
.endm
diff --git a/asm/macros/m4a.inc b/asm/macros/m4a.inc
index 6c5abc09b..b22da3d63 100644
--- a/asm/macros/m4a.inc
+++ b/asm/macros/m4a.inc
@@ -1,13 +1,13 @@
- .macro song label, music_player, unknown
+ .macro song label:req, music_player:req, unknown:req
.4byte \label
.2byte \music_player
.2byte \unknown
.endm
- .macro music_player info_struct, track_struct, unknown_1, unknown_2
+ .macro music_player info_struct:req, track_struct:req, num_tracks:req, unknown:req
.4byte \info_struct
.4byte \track_struct
- .byte \unknown_1
- .space 1
- .2byte \unknown_2
+ .byte \num_tracks
+ .space 1 @ Padding
+ .2byte \unknown
.endm
diff --git a/asm/macros/map.inc b/asm/macros/map.inc
index 74ed06917..662257e41 100644
--- a/asm/macros/map.inc
+++ b/asm/macros/map.inc
@@ -1,83 +1,110 @@
- .macro map map_id
+@ Most of the macros in this file are for arranging map event data, and are output by mapjson using data from each map's JSON file.
+
+ @ Takes a MAP constant and outputs the map group and map number as separate bytes
+ .macro map map_id:req
.byte \map_id >> 8 @ map group
.byte \map_id & 0xFF @ map num
.endm
- .macro map_script type, address
+ @ Defines a map script. 'type' is any MAP_SCRIPT_* constant (see include/constants/map_scripts.h)
+ .macro map_script type:req, script:req
.byte \type
- .4byte \address
+ .4byte \script
.endm
- .macro map_script_2 word1, word2, address
- .2byte \word1
- .2byte \word2
- .4byte \address
+ @ Defines an entry in a map script table (for either ON_WARP_INTO_MAP_TABLE or ON_FRAME_TABLE)
+ .macro map_script_2 var:req, compare:req, script:req
+ .2byte \var
+ .2byte \compare
+ .4byte \script
.endm
- .macro object_event index:req, gfx:req, replacement:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req
- .byte \index, \gfx, \replacement, 0
- .2byte \x
- .2byte \y
- .byte \elevation, \movement_type, ((\y_radius << 4) | \x_radius), 0
- .2byte \trainer_type, \sight_radius_tree_etc
+ @ Defines an object event template for map data. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h
+ .macro object_event index:req, gfx:req, inConnection:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req
+ .byte \index
+ .byte \gfx
+ .byte \inConnection
+ .space 1 @ Padding
+ .2byte \x, \y
+ .byte \elevation
+ .byte \movement_type
+ .byte ((\y_radius << 4) | \x_radius)
+ .space 1 @ Padding
+ .2byte \trainer_type
+ .2byte \sight_radius_tree_etc
.4byte \script
.2byte \event_flag
- .2byte 0
+ .space 2 @ Padding
inc _num_npcs
.endm
- .macro warp_def x, y, byte, warp, map_id
+ @ Defines a warp event for map data. Mirrors the struct layout of WarpEvent in include/global.fieldmap.h
+ .macro warp_def x:req, y:req, elevation:req, warpId:req, map_id:req
.2byte \x, \y
- .byte \byte, \warp
+ .byte \elevation
+ .byte \warpId
.byte \map_id & 0xFF @ map num
.byte \map_id >> 8 @ map group
inc _num_warps
.endm
- .macro coord_event x, y, elevation, trigger, index, script
+ @ Defines a coord event for map data. Mirrors the struct layout of CoordEvent in include/global.fieldmap.h
+ .macro coord_event x:req, y:req, elevation:req, trigger:req, index:req, script:req
.2byte \x, \y
- .byte \elevation, 0
- .2byte \trigger, \index, 0
+ .byte \elevation
+ .space 1 @ Padding
+ .2byte \trigger
+ .2byte \index
+ .space 2 @ Padding
.4byte \script
inc _num_traps
.endm
- .macro coord_weather_event x, y, elevation, weather
- .2byte \x, \y
- .byte \elevation, 0
- .2byte \weather
- .2byte 0, 0
- .4byte 0
- inc _num_traps
+ @ Defines a weather coord event for map data. Any coord event is treated as a weather coord event if its script is NULL
+ .macro coord_weather_event x:req, y:req, elevation:req, weather:req
+ coord_event \x, \y, \elevation, \weather, 0, NULL
.endm
- .macro bg_event x, y, elevation, kind, arg6, arg7
+ @ Defines a generic background event for map data. Mirrors the struct layout of BgEvent in include/global.fieldmap.h
+ @ 'kind' is any BG_EVENT_* constant (see include/constants/event_bg.h).
+ @ 'arg6' and 'arg7' are used differently depending on the bg event type. See macros below
+ .macro bg_event x:req, y:req, elevation:req, kind:req, arg6:req, arg7
.2byte \x, \y
- .byte \elevation, \kind
- .2byte 0
+ .byte \elevation
+ .byte \kind
+ .space 2 @ Padding
.if \kind != BG_EVENT_HIDDEN_ITEM
- .4byte \arg6
+ .4byte \arg6
.else
- .2byte \arg6
- .2byte \arg7
+ .2byte \arg6
+ .2byte \arg7
.endif
inc _num_signs
.endm
- .macro bg_hidden_item_event x, y, height, item, flag
- bg_event \x, \y, \height, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START)
+ @ Defines a background sign event for map data. 'facing_dir' is any of the BG_EVENT_PLAYER_FACING_* constants (see include/constants/event_bg.h)
+ .macro bg_sign_event x:req, y:req, elevation:req, facing_dir:req, script:req
+ bg_event \x, \y, \elevation, \facing_dir, \script
+ .endm
+
+ @ Defines a background hidden item event for map data
+ .macro bg_hidden_item_event x:req, y:req, elevation:req, item:req, flag:req
+ bg_event \x, \y, \elevation, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START)
.endm
- .macro bg_secret_base_event x, y, height, secret_base_id
- bg_event \x, \y, \height, BG_EVENT_SECRET_BASE, \secret_base_id
+ @ Defines a background secret base event for map data
+ .macro bg_secret_base_event x:req, y:req, elevation:req, secret_base_id:req
+ bg_event \x, \y, \elevation, BG_EVENT_SECRET_BASE, \secret_base_id
.endm
- .macro map_events npcs, warps, traps, signs
+ @ Defines the table of event data for a map. Mirrors the struct layout of MapEvents in include/global.fieldmap.h
+ .macro map_events npcs:req, warps:req, traps:req, signs:req
.byte _num_npcs, _num_warps, _num_traps, _num_signs
.4byte \npcs, \warps, \traps, \signs
reset_map_events
.endm
+ @ Resets the event counters used to track how many events a map has. Run when the events table is created by map_events
.macro reset_map_events
.set _num_npcs, 0
.set _num_warps, 0
@@ -85,23 +112,29 @@
.set _num_signs, 0
.endm
+ @ Initialize the event counters for the first map
reset_map_events
- .equiv connection_down, 1
- .equiv connection_up, 2
- .equiv connection_left, 3
- .equiv connection_right, 4
- .equiv connection_dive, 5
- .equiv connection_emerge, 6
+ @ Directions for connecting maps
+ @ The map.json files will only have e.g. "down" as direction data, and this will be appended to "connection_" by the connection macro
+ .equiv connection_down, CONNECTION_SOUTH
+ .equiv connection_up, CONNECTION_NORTH
+ .equiv connection_left, CONNECTION_WEST
+ .equiv connection_right, CONNECTION_EAST
+ .equiv connection_dive, CONNECTION_DIVE
+ .equiv connection_emerge, CONNECTION_EMERGE
- .macro connection direction, offset, map
- .4byte connection_\direction
+ @ Defines a map connection. Mirrors the struct layout of MapConnection in include/global.fieldmap.h
+ .macro connection direction:req, offset:req, map:req
+ .byte connection_\direction
+ .space 3 @ Padding
.4byte \offset
map \map
- .space 2
+ .space 2 @ Padding
.endm
+ @ Defines the flags for a map header. Mirrors the layout of the bitfield in struct MapHeader in include/global.fieldmap.h
.macro map_header_flags allow_cycling:req, allow_escaping:req, allow_running:req, show_map_name:req
.byte ((\show_map_name & 1) << 3) | ((\allow_running & 1) << 2) | ((\allow_escaping & 1) << 1) | \allow_cycling
.endm
diff --git a/asm/macros/pokemon_data.inc b/asm/macros/pokemon_data.inc
deleted file mode 100644
index ce8ef98ac..000000000
--- a/asm/macros/pokemon_data.inc
+++ /dev/null
@@ -1,56 +0,0 @@
- .macro pokedex_entry height, width, text_pointer, pokemon_scale, pokemon_offset, trainer_scale, trainer_offset
- .2byte \height @ in decimeters
- .2byte \width @ in hectograms
- .4byte \text_pointer
- .2byte 0 @ unused
- .2byte \pokemon_scale
- .2byte \pokemon_offset
- .2byte \trainer_scale
- .2byte \trainer_offset
- .2byte 0 @ padding
- .endm
-
- .macro base_stats hp, attack, defense, speed, sp_attack, sp_defense
- .byte \hp
- .byte \attack
- .byte \defense
- .byte \speed
- .byte \sp_attack
- .byte \sp_defense
- .endm
-
- .macro ev_yield hp, attack, defense, speed, sp_attack, sp_defense
- .2byte (\sp_defense << 10) | (\sp_attack << 8) | (\speed << 6) | (\defense << 4) | (\attack << 2) | \hp
- .endm
-
- .macro level_up_move level, move
- .2byte (\level << 9) | \move
- .endm
-
- .macro evo_entry method, parameter, target_species
- .2byte \method
- .2byte \parameter
- .2byte \target_species
- .2byte 0 @ padding
- .endm
-
- .macro empty_evo_entries count
- .fill 8 * \count, 1, 0
- .endm
-
- .macro egg_moves_begin species
- .2byte 20000 + \species
- .endm
-
-@ If the min level equals the max level, only one level argument is needed.
- .macro wild_mon species, min_level, max_level
- .byte \min_level
-
- .ifb \max_level
- .byte \min_level
- .else
- .byte \max_level
- .endif
-
- .2byte \species
- .endm
diff --git a/asm/macros/window.inc b/asm/macros/window.inc
deleted file mode 100644
index a91782bbf..000000000
--- a/asm/macros/window.inc
+++ /dev/null
@@ -1,35 +0,0 @@
- .macro window_template bg_id, x, y, width, height, palette, vram_tile_offset
- .byte \bg_id
- .byte \x
- .byte \y
- .byte \width
- .byte \height
- .byte \palette
- .2byte \vram_tile_offset
- .endm
-
- .macro null_window_template
- window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000
- .endm
-
- .macro glyph_width_func font_id, func
- .4byte \font_id
- .4byte \func
- .endm
-
- .macro keypad_icon tile_offset, width, height
- .2byte \tile_offset
- .byte \width
- .byte \height
- .endm
-
- .macro font_info func, max_glyph_width, glyph_height, glyph_spacing, line_spacing, text_color, shadow_color, bg_color
- .4byte \func
- .byte \max_glyph_width
- .byte \glyph_height
- .byte \glyph_spacing
- .byte \line_spacing
- .byte \text_color << 4 @ low nybble seems unused
- .byte (\shadow_color << 4) | \bg_color
- .2byte 0 @ padding
- .endm
diff --git a/data/map_events.s b/data/map_events.s
index dcbb9cfb1..cfa5799d3 100644
--- a/data/map_events.s
+++ b/data/map_events.s
@@ -1,3 +1,4 @@
+#include "constants/global.h"
#include "constants/event_bg.h"
#include "constants/event_object_movement.h"
#include "constants/event_objects.h"
diff --git a/data/maps.s b/data/maps.s
index beb28ddec..9d9ac2101 100644
--- a/data/maps.s
+++ b/data/maps.s
@@ -1,3 +1,4 @@
+#include "constants/global.h"
#include "constants/layouts.h"
#include "constants/map_types.h"
#include "constants/maps.h"
diff --git a/include/constants/global.h b/include/constants/global.h
index 48b03b5cc..096094220 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -138,4 +138,13 @@
#define DIR_NORTHWEST 7
#define DIR_NORTHEAST 8
+#define CONNECTION_INVALID -1
+#define CONNECTION_NONE 0
+#define CONNECTION_SOUTH 1
+#define CONNECTION_NORTH 2
+#define CONNECTION_WEST 3
+#define CONNECTION_EAST 4
+#define CONNECTION_DIVE 5
+#define CONNECTION_EMERGE 6
+
#endif // GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index eeb79391b..a057c2da6 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -349,7 +349,7 @@ struct MusicPlayer
{
struct MusicPlayerInfo *info;
struct MusicPlayerTrack *track;
- u8 unk_8;
+ u8 numTracks;
u16 unk_A;
};
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 21c354658..974fa3382 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -33,18 +33,6 @@ enum {
// for constructing large tiles, such as the Battle Pike's curtain tile.
#define METATILE_ROW_WIDTH 8
-enum
-{
- CONNECTION_INVALID = -1,
- CONNECTION_NONE,
- CONNECTION_SOUTH,
- CONNECTION_NORTH,
- CONNECTION_WEST,
- CONNECTION_EAST,
- CONNECTION_DIVE,
- CONNECTION_EMERGE
-};
-
typedef void (*TilesetCB)(void);
struct Tileset
diff --git a/src/m4a.c b/src/m4a.c
index b159e3873..faeef83e7 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -83,7 +83,7 @@ void m4aSoundInit(void)
for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
{
struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
- MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
+ MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].numTracks);
mplayInfo->unk_B = gMPlayTable[i].unk_A;
mplayInfo->memAccArea = gMPlayMemAccArea;
}
diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp
index d767b469e..3eab98f2b 100644
--- a/tools/mapjson/mapjson.cpp
+++ b/tools/mapjson/mapjson.cpp
@@ -230,7 +230,7 @@ string generate_map_events_text(Json map_data) {
text << bgs_label << ":\n";
for (auto &bg_event : map_data["bg_events"].array_items()) {
if (bg_event["type"] == "sign") {
- text << "\tbg_event "
+ text << "\tbg_sign_event "
<< bg_event["x"].int_value() << ", "
<< bg_event["y"].int_value() << ", "
<< bg_event["elevation"].int_value() << ", "