mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-25 11:14:15 +01:00
Merge remote-tracking branch 'pret/master' into RHH/pr/pretmerge_20220909
# Conflicts: # asm/macros/battle_ai_script.inc # asm/macros/battle_script.inc # data/battle_ai_scripts.s # include/link_rfu.h # src/pokemon.c # src/pokemon_summary_screen.c # src/sound.c
This commit is contained in:
commit
1d7e8bd730
@ -106,7 +106,7 @@ cd /mnt/c/Users/<user>/Desktop/decomps
|
||||
> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users/<user>/Desktop/decomp folder"`.
|
||||
> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
|
||||
</details>
|
||||
|
||||
|
||||
If this works, then proceed to [Installation](#installation).
|
||||
|
||||
Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using msys2](#windows-msys2).
|
||||
@ -216,7 +216,7 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer
|
||||
> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users/<user>/Desktop/decomp folder"`.
|
||||
> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
|
||||
</details>
|
||||
|
||||
|
||||
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
|
||||
|
||||
## macOS
|
||||
@ -539,7 +539,7 @@ devkitARM is now installed.
|
||||
devkitARM is now installed.
|
||||
|
||||
### Installing devkitARM on Arch Linux
|
||||
|
||||
|
||||
1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages.
|
||||
2. Install `gba-dev`: run the following command as root.
|
||||
|
||||
|
4
Makefile
4
Makefile
@ -254,7 +254,7 @@ tidynonmodern:
|
||||
tidymodern:
|
||||
rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME)
|
||||
rm -rf $(MODERN_OBJ_DIR_NAME)
|
||||
|
||||
|
||||
ifneq ($(MODERN),0)
|
||||
$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member
|
||||
endif
|
||||
@ -412,7 +412,7 @@ LD_SCRIPT := ld_script.txt
|
||||
LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
|
||||
else
|
||||
LD_SCRIPT := ld_script_modern.txt
|
||||
LD_SCRIPT_DEPS :=
|
||||
LD_SCRIPT_DEPS :=
|
||||
endif
|
||||
|
||||
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
|
||||
|
@ -558,151 +558,151 @@
|
||||
.2byte \param1
|
||||
.4byte \param2
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_ally_chosen_move
|
||||
.byte 0x63
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_no_attacking_moves battler:req, param1:req
|
||||
.byte 0x64
|
||||
.byte \battler
|
||||
.4byte \param1
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_hazards_count battler:req, effect:req
|
||||
.byte 0x65
|
||||
.byte \battler
|
||||
.2byte \effect
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_doesnt_hold_berry battler:req, ptr:req
|
||||
.byte 0x66
|
||||
.byte \battler
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_share_type battler1:req, battler2:req, ptr:req
|
||||
.byte 0x67
|
||||
.byte \battler1
|
||||
.byte \battler2
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_cant_use_last_resort battler:req, ptr:req
|
||||
.byte 0x68
|
||||
.byte \battler
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_move_with_split battler:req, split:req, ptr:req
|
||||
.byte 0x69
|
||||
.byte \battler
|
||||
.byte \split
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_no_move_with_split battler:req, split:req, ptr:req
|
||||
.byte 0x6A
|
||||
.byte \battler
|
||||
.byte \split
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_physical_moves_unusable attacker:req, target:req, ptr:req
|
||||
.byte 0x6B
|
||||
.byte \attacker
|
||||
.byte \target
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_ai_can_go_down ptr:req
|
||||
.byte 0x6C
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_move_with_type battler:req, type:req, ptr:req
|
||||
.byte 0x6D
|
||||
.byte \battler
|
||||
.byte \type
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_no_move_used battler:req, ptr:req
|
||||
.byte 0x6E
|
||||
.byte \battler
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_move_with_flag battler:req, flag:req, ptr:req
|
||||
.byte 0x6F
|
||||
.byte \battler
|
||||
.4byte \flag
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_battler_absent battler:req, ptr:req
|
||||
.byte 0x70
|
||||
.byte \battler
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_grounded battler:req, ptr:req
|
||||
.byte 0x71
|
||||
.byte \battler
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_best_dmg_hp_percent
|
||||
.byte 0x72
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_curr_dmg_hp_percent
|
||||
.byte 0x73
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_move_split_from_result
|
||||
.byte 0x74
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_considered_move_split
|
||||
.byte 0x75
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_considered_move_target
|
||||
.byte 0x76
|
||||
.endm
|
||||
|
||||
|
||||
.macro compare_speeds battler1:req, battler2:req
|
||||
.byte 0x77
|
||||
.byte \battler1
|
||||
.byte \battler2
|
||||
.endm
|
||||
|
||||
|
||||
.macro is_wakeup_turn battler:req
|
||||
.byte 0x78
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req
|
||||
.byte 0x79
|
||||
.byte \battler
|
||||
.byte \value
|
||||
.4byte \ptr
|
||||
.endm
|
||||
|
||||
|
||||
@ useful script macros
|
||||
.macro if_has_physical_move battler:req, ptr:req
|
||||
if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_no_physical_move battler:req, ptr:req
|
||||
if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_special_move battler:req, ptr:req
|
||||
if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_has_no_special_move battler:req, ptr:req
|
||||
if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr
|
||||
.endm
|
||||
@ -714,33 +714,33 @@
|
||||
.macro get_curr_move_type
|
||||
get_type AI_TYPE_MOVE
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_user_type1
|
||||
get_type AI_TYPE1_USER
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_user_type2
|
||||
get_type AI_TYPE2_USER
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_target_type1
|
||||
get_type AI_TYPE1_TARGET
|
||||
.endm
|
||||
|
||||
|
||||
.macro get_target_type2
|
||||
get_type AI_TYPE2_TARGET
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_ability battler:req, ability:req, ptr:req
|
||||
check_ability \battler, \ability
|
||||
if_equal 1, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_no_ability battler:req, ability:req, ptr:req
|
||||
check_ability \battler, \ability
|
||||
if_equal 0, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_type battler:req, type:req, ptr:req
|
||||
is_of_type \battler, \type
|
||||
if_equal 1, \ptr
|
||||
@ -750,20 +750,20 @@
|
||||
is_of_type \battler, \type
|
||||
if_equal 0, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_target_faster ptr:req
|
||||
if_user_goes 1, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_user_faster ptr:req
|
||||
if_user_goes 0, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_double_battle ptr:req
|
||||
is_double_battle
|
||||
if_equal 1, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_not_double_battle ptr:req
|
||||
is_double_battle
|
||||
if_equal 0, \ptr
|
||||
@ -772,11 +772,11 @@
|
||||
.macro if_any_move_disabled battler:req, ptr:req
|
||||
if_any_move_disabled_or_encored \battler, 0, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro if_any_move_encored battler:req, ptr:req
|
||||
if_any_move_disabled_or_encored \battler, 1, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro call_if_always_hit ptr:req
|
||||
get_move_accuracy
|
||||
call_if_eq 0, \ptr
|
||||
|
@ -270,16 +270,16 @@
|
||||
.macro stopsound
|
||||
.byte 0x2f
|
||||
.endm
|
||||
|
||||
|
||||
@ useful macros
|
||||
.macro jumpreteq value:req, ptr:req
|
||||
jumpargeq ARG_RET_ID, \value, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro jumprettrue ptr:req
|
||||
jumpreteq TRUE, \ptr
|
||||
.endm
|
||||
|
||||
|
||||
.macro jumpretfalse ptr:req
|
||||
jumpreteq FALSE, \ptr
|
||||
.endm
|
||||
|
@ -1788,7 +1788,7 @@
|
||||
.macro setzeffect
|
||||
various BS_ATTACKER, VARIOUS_SET_Z_EFFECT
|
||||
.endm
|
||||
|
||||
|
||||
.macro consumeberry battler:req, restoreItem=FALSE
|
||||
various \battler, VARIOUS_CONSUME_BERRY
|
||||
.byte \restoreItem
|
||||
|
@ -276,7 +276,7 @@
|
||||
.2byte SPECIAL_\function
|
||||
.endm
|
||||
|
||||
@ Blocks script execution until a command or C code manually unblocks it. Generally used with specific
|
||||
@ 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
|
||||
@ -985,7 +985,7 @@
|
||||
.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.
|
||||
@ 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
|
||||
@ -997,7 +997,7 @@
|
||||
.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.
|
||||
@ 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
|
||||
@ -1415,7 +1415,7 @@
|
||||
.2byte \out
|
||||
.endm
|
||||
|
||||
@ Gives 'count' coins to the player, up to a total of MAX_COINS.
|
||||
@ 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
|
||||
@ -1893,7 +1893,7 @@
|
||||
|
||||
@ 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.
|
||||
@ 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
|
||||
|
@ -56,7 +56,7 @@
|
||||
"x": 14,
|
||||
"y": 9,
|
||||
"elevation": 3,
|
||||
"var": "VAR_SKY_PILLAR_RAQUAZA_CRY_DONE",
|
||||
"var": "VAR_SKY_PILLAR_RAYQUAZA_CRY_DONE",
|
||||
"var_value": "0",
|
||||
"script": "SkyPillar_Top_EventScript_AwakenRayquaza"
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza::
|
||||
special RemoveCameraObject
|
||||
setvar VAR_SOOTOPOLIS_CITY_STATE, 5
|
||||
setvar VAR_SKY_PILLAR_STATE, 1
|
||||
setvar VAR_SKY_PILLAR_RAQUAZA_CRY_DONE, 1
|
||||
setvar VAR_SKY_PILLAR_RAYQUAZA_CRY_DONE, 1
|
||||
releaseall
|
||||
end
|
||||
|
||||
|
@ -38,7 +38,7 @@ EventScript_ResetAllBerries::
|
||||
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_3, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
|
||||
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_2, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
|
||||
setberrytree BERRY_TREE_ROUTE_117_WEPEAR_1, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
|
||||
|
||||
|
||||
@ Route 112
|
||||
setberrytree BERRY_TREE_ROUTE_112_RAWST_2, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES
|
||||
setberrytree BERRY_TREE_ROUTE_112_PECHA_2, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES
|
||||
|
@ -22,7 +22,7 @@ Roulette_EventScript_Play::
|
||||
special PlayRoulette
|
||||
waitstate
|
||||
end
|
||||
|
||||
|
||||
Roulette_Text_PlayMinimumWagerIsX::
|
||||
.string "The minimum wager at this table\n"
|
||||
.string "is {STR_VAR_1}. Do you want to play?$"
|
||||
|
@ -17,8 +17,8 @@
|
||||
cd /mnt/c/Users/<user>/Downloads
|
||||
```
|
||||
|
||||
> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL.
|
||||
> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users/<user>/Downloads folder"`.
|
||||
> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL.
|
||||
> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users/<user>/Downloads folder"`.
|
||||
> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
|
||||
|
||||
4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM.
|
||||
|
@ -73,7 +73,7 @@ static const u8 sDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_alt
|
||||
static const u8 sUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp");
|
||||
static const u8 sUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp");
|
||||
static const u8 sDownArrowYCoords[] = { 0, 1, 2, 1 };
|
||||
static const u8 sWindowVerticalScrollSpeeds[] = {
|
||||
static const u8 sWindowVerticalScrollSpeeds[] = {
|
||||
[OPTIONS_TEXT_SPEED_SLOW] = 1,
|
||||
[OPTIONS_TEXT_SPEED_MID] = 2,
|
||||
[OPTIONS_TEXT_SPEED_FAST] = 4,
|
||||
@ -299,7 +299,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi
|
||||
else
|
||||
{
|
||||
sTempTextPrinter.textSpeed = 0;
|
||||
|
||||
|
||||
// Render all text (up to limit) at once
|
||||
for (j = 0; j < 0x400; ++j)
|
||||
{
|
||||
|
@ -148,7 +148,6 @@ void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
|
||||
void DecompressGlyphTile(const void *src_, void *dest_);
|
||||
void CopyGlyphToWindow(struct TextPrinter *x);
|
||||
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
|
||||
u8 GetMenuCursorDimensionByFont(u8, u8);
|
||||
|
||||
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter);
|
||||
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter);
|
||||
|
@ -112,35 +112,35 @@ $(TILESETGFXDIR)/secondary/sootopolis/tiles.4bpp: %.4bpp: %.png
|
||||
SOOTOPOLISANIMDIR := $(TILESETGFXDIR)/secondary/sootopolis/anim
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/0.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/0_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/0_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/0_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/1.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/1_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/1_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/1_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/2.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/2_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/2_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/2_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/3.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/3_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/3_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/3_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/4.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/4_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/4_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/4_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/5.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/5_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/5_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/5_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/6.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/6_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/6_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/6_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/7.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/7_kyogre.4bpp \
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/7_groudon.4bpp
|
||||
$(SOOTOPOLISANIMDIR)/stormy_water/7_groudon.4bpp
|
||||
@cat $^ >$@
|
||||
|
||||
$(TILESETGFXDIR)/secondary/battle_frontier_outside_west/tiles.4bpp: %.4bpp: %.png
|
||||
@ -690,7 +690,7 @@ $(OBJEVENTGFXDIR)/pics/effects/unknown_4F6D38/0.4bpp: %.4bpp: %.png
|
||||
|
||||
$(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -num_tiles 8 -Wnum_tiles
|
||||
|
||||
|
||||
$(BATTRANSGFXDIR)/frontier_logo_center.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -num_tiles 43 -Wnum_tiles
|
||||
|
||||
@ -718,7 +718,7 @@ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png
|
||||
|
||||
$(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -num_tiles 53 -Wnum_tiles
|
||||
|
||||
|
||||
$(PKNAVGFXDIR)/match_call/ui.4bpp: %.4bpp: %.png
|
||||
$(GFX) $< $@ -num_tiles 13 -Wnum_tiles
|
||||
|
||||
|
@ -46,235 +46,235 @@
|
||||
#define VAR_OBJ_GFX_ID_F 0x401F
|
||||
|
||||
// general purpose vars
|
||||
#define VAR_RECYCLE_GOODS 0x4020
|
||||
#define VAR_REPEL_STEP_COUNT 0x4021
|
||||
#define VAR_ICE_STEP_COUNT 0x4022
|
||||
#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip
|
||||
#define VAR_MIRAGE_RND_H 0x4024
|
||||
#define VAR_MIRAGE_RND_L 0x4025
|
||||
#define VAR_SECRET_BASE_MAP 0x4026
|
||||
#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027
|
||||
#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028
|
||||
#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029
|
||||
#define VAR_FRIENDSHIP_STEP_COUNTER 0x402A
|
||||
#define VAR_POISON_STEP_COUNTER 0x402B
|
||||
#define VAR_RESET_RTC_ENABLE 0x402C
|
||||
#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
|
||||
#define VAR_WONDER_NEWS_COUNTER 0x402E
|
||||
#define VAR_RECYCLE_GOODS 0x4020
|
||||
#define VAR_REPEL_STEP_COUNT 0x4021
|
||||
#define VAR_ICE_STEP_COUNT 0x4022
|
||||
#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip
|
||||
#define VAR_MIRAGE_RND_H 0x4024
|
||||
#define VAR_MIRAGE_RND_L 0x4025
|
||||
#define VAR_SECRET_BASE_MAP 0x4026
|
||||
#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027
|
||||
#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028
|
||||
#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029
|
||||
#define VAR_FRIENDSHIP_STEP_COUNTER 0x402A
|
||||
#define VAR_POISON_STEP_COUNTER 0x402B
|
||||
#define VAR_RESET_RTC_ENABLE 0x402C
|
||||
#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
|
||||
#define VAR_WONDER_NEWS_COUNTER 0x402E
|
||||
|
||||
#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
|
||||
#define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030
|
||||
#define VAR_FRONTIER_GAMBLER_SET_CHALLENGE 0x4031
|
||||
#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032
|
||||
#define VAR_FRONTIER_GAMBLER_STATE 0x4033
|
||||
#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
|
||||
#define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030
|
||||
#define VAR_FRONTIER_GAMBLER_SET_CHALLENGE 0x4031
|
||||
#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032
|
||||
#define VAR_FRONTIER_GAMBLER_STATE 0x4033
|
||||
|
||||
#define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034
|
||||
#define VAR_DEOXYS_ROCK_LEVEL 0x4035
|
||||
#define VAR_PC_BOX_TO_SEND_MON 0x4036
|
||||
#define VAR_ABNORMAL_WEATHER_LOCATION 0x4037
|
||||
#define VAR_ABNORMAL_WEATHER_STEP_COUNTER 0x4038
|
||||
#define VAR_SHOULD_END_ABNORMAL_WEATHER 0x4039
|
||||
#define VAR_FARAWAY_ISLAND_STEP_COUNTER 0x403A
|
||||
#define VAR_REGICE_STEPS_1 0x403B
|
||||
#define VAR_REGICE_STEPS_2 0x403C
|
||||
#define VAR_REGICE_STEPS_3 0x403D
|
||||
#define VAR_ALTERING_CAVE_WILD_SET 0x403E
|
||||
#define VAR_DISTRIBUTE_EON_TICKET 0x403F // This var is read and written, but is always zero. The only way to obtain the Eon Ticket in Emerald is via Record Mixing
|
||||
#define VAR_DAYS 0x4040
|
||||
#define VAR_FANCLUB_FAN_COUNTER 0x4041
|
||||
#define VAR_FANCLUB_LOSE_FAN_TIMER 0x4042
|
||||
#define VAR_DEPT_STORE_FLOOR 0x4043
|
||||
#define VAR_TRICK_HOUSE_LEVEL 0x4044
|
||||
#define VAR_POKELOT_PRIZE_ITEM 0x4045
|
||||
#define VAR_NATIONAL_DEX 0x4046
|
||||
#define VAR_SEEDOT_SIZE_RECORD 0x4047
|
||||
#define VAR_ASH_GATHER_COUNT 0x4048
|
||||
#define VAR_BIRCH_STATE 0x4049
|
||||
#define VAR_CRUISE_STEP_COUNT 0x404A
|
||||
#define VAR_POKELOT_RND1 0x404B
|
||||
#define VAR_POKELOT_RND2 0x404C
|
||||
#define VAR_POKELOT_PRIZE_PLACE 0x404D
|
||||
#define VAR_UNUSED_0x404E 0x404E // Unused Var
|
||||
#define VAR_LOTAD_SIZE_RECORD 0x404F
|
||||
#define VAR_LITTLEROOT_TOWN_STATE 0x4050
|
||||
#define VAR_OLDALE_TOWN_STATE 0x4051
|
||||
#define VAR_DEWFORD_TOWN_STATE 0x4052 // Unused Var
|
||||
#define VAR_LAVARIDGE_TOWN_STATE 0x4053
|
||||
#define VAR_CURRENT_SECRET_BASE 0x4054 // was probably allocated for VAR_FALLARBOR_TOWN_STATE at one point
|
||||
#define VAR_VERDANTURF_TOWN_STATE 0x4055 // Unused Var
|
||||
#define VAR_PACIFIDLOG_TOWN_STATE 0x4056 // Unused Var
|
||||
#define VAR_PETALBURG_CITY_STATE 0x4057
|
||||
#define VAR_SLATEPORT_CITY_STATE 0x4058
|
||||
#define VAR_MAUVILLE_CITY_STATE 0x4059 // Unused Var
|
||||
#define VAR_RUSTBORO_CITY_STATE 0x405A
|
||||
#define VAR_FORTREE_CITY_STATE 0x405B // Unused Var
|
||||
#define VAR_LILYCOVE_CITY_STATE 0x405C // Unused Var
|
||||
#define VAR_MOSSDEEP_CITY_STATE 0x405D
|
||||
#define VAR_SOOTOPOLIS_CITY_STATE 0x405E
|
||||
#define VAR_EVER_GRANDE_CITY_STATE 0x405F // Unused Var
|
||||
#define VAR_ROUTE101_STATE 0x4060
|
||||
#define VAR_ROUTE102_STATE 0x4061 // Unused Var
|
||||
#define VAR_ROUTE103_STATE 0x4062 // Unused Var
|
||||
#define VAR_ROUTE104_STATE 0x4063
|
||||
#define VAR_ROUTE105_STATE 0x4064 // Unused Var
|
||||
#define VAR_ROUTE106_STATE 0x4065 // Unused Var
|
||||
#define VAR_ROUTE107_STATE 0x4066 // Unused Var
|
||||
#define VAR_ROUTE108_STATE 0x4067 // Unused Var
|
||||
#define VAR_ROUTE109_STATE 0x4068 // Unused Var
|
||||
#define VAR_ROUTE110_STATE 0x4069
|
||||
#define VAR_ROUTE111_STATE 0x406A // Unused Var
|
||||
#define VAR_ROUTE112_STATE 0x406B // Unused Var
|
||||
#define VAR_ROUTE113_STATE 0x406C // Unused Var
|
||||
#define VAR_ROUTE114_STATE 0x406D // Unused Var
|
||||
#define VAR_ROUTE115_STATE 0x406E // Unused Var
|
||||
#define VAR_ROUTE116_STATE 0x406F
|
||||
#define VAR_ROUTE117_STATE 0x4070 // Unused Var
|
||||
#define VAR_ROUTE118_STATE 0x4071
|
||||
#define VAR_ROUTE119_STATE 0x4072
|
||||
#define VAR_ROUTE120_STATE 0x4073 // Unused Var
|
||||
#define VAR_ROUTE121_STATE 0x4074
|
||||
#define VAR_ROUTE122_STATE 0x4075 // Unused Var
|
||||
#define VAR_ROUTE123_STATE 0x4076 // Unused Var
|
||||
#define VAR_ROUTE124_STATE 0x4077 // Unused Var
|
||||
#define VAR_ROUTE125_STATE 0x4078 // Unused Var
|
||||
#define VAR_ROUTE126_STATE 0x4079 // Unused Var
|
||||
#define VAR_ROUTE127_STATE 0x407A // Unused Var
|
||||
#define VAR_ROUTE128_STATE 0x407B
|
||||
#define VAR_ROUTE129_STATE 0x407C // Unused Var
|
||||
#define VAR_ROUTE130_STATE 0x407D // Unused Var
|
||||
#define VAR_ROUTE131_STATE 0x407E // Unused Var
|
||||
#define VAR_ROUTE132_STATE 0x407F // Unused Var
|
||||
#define VAR_ROUTE133_STATE 0x4080 // Unused Var
|
||||
#define VAR_ROUTE134_STATE 0x4081 // Unused Var
|
||||
#define VAR_LITTLEROOT_HOUSES_STATE_MAY 0x4082
|
||||
#define VAR_UNUSED_0x4083 0x4083 // Unused Var
|
||||
#define VAR_BIRCH_LAB_STATE 0x4084
|
||||
#define VAR_PETALBURG_GYM_STATE 0x4085 // 0-1: Wally tutorial, 2-6: 0-4 badges, 7: Defeated Norman, 8: Rematch Norman
|
||||
#define VAR_CONTEST_HALL_STATE 0x4086
|
||||
#define VAR_CABLE_CLUB_STATE 0x4087
|
||||
#define VAR_CONTEST_TYPE 0x4088
|
||||
#define VAR_SECRET_BASE_INITIALIZED 0x4089
|
||||
#define VAR_CONTEST_PRIZE_PICKUP 0x408A
|
||||
#define VAR_UNUSED_0x408B 0x408B // Unused Var
|
||||
#define VAR_LITTLEROOT_HOUSES_STATE_BRENDAN 0x408C
|
||||
#define VAR_LITTLEROOT_RIVAL_STATE 0x408D
|
||||
#define VAR_BOARD_BRINEY_BOAT_STATE 0x408E
|
||||
#define VAR_DEVON_CORP_3F_STATE 0x408F
|
||||
#define VAR_BRINEY_HOUSE_STATE 0x4090
|
||||
#define VAR_UNUSED_0x4091 0x4091 // Unused Var
|
||||
#define VAR_LITTLEROOT_INTRO_STATE 0x4092
|
||||
#define VAR_MAUVILLE_GYM_STATE 0x4093
|
||||
#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094
|
||||
#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095
|
||||
#define VAR_BRINEY_LOCATION 0x4096
|
||||
#define VAR_INIT_SECRET_BASE 0x4097
|
||||
#define VAR_PETALBURG_WOODS_STATE 0x4098
|
||||
#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099
|
||||
#define VAR_RUSTURF_TUNNEL_STATE 0x409A
|
||||
#define VAR_UNUSED_0x409B 0x409B // Unused Var
|
||||
#define VAR_ELITE_4_STATE 0x409C
|
||||
#define VAR_UNUSED_0x409D 0x409D // Unused Var
|
||||
#define VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE 0x409E
|
||||
#define VAR_MOSSDEEP_SPACE_CENTER_STATE 0x409F
|
||||
#define VAR_SLATEPORT_HARBOR_STATE 0x40A0
|
||||
#define VAR_UNUSED_0x40A1 0x40A1 // Unused var
|
||||
#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2
|
||||
#define VAR_CABLE_CAR_STATION_STATE 0x40A3
|
||||
#define VAR_SAFARI_ZONE_STATE 0x40A4 // 0: In or out of SZ, 1: Player exiting SZ, 2: Player entering SZ
|
||||
#define VAR_TRICK_HOUSE_BEING_WATCHED_STATE 0x40A5
|
||||
#define VAR_TRICK_HOUSE_FOUND_TRICK_MASTER 0x40A6
|
||||
#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A7
|
||||
#define VAR_UNUSED_0x40A8 0x40A8 // Unused Var
|
||||
#define VAR_CYCLING_CHALLENGE_STATE 0x40A9
|
||||
#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2
|
||||
#define VAR_WEATHER_INSTITUTE_STATE 0x40B3
|
||||
#define VAR_SS_TIDAL_STATE 0x40B4
|
||||
#define VAR_TRICK_HOUSE_ENTER_FROM_CORRIDOR 0x40B5
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 // Leftover from RS, never set
|
||||
#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7
|
||||
#define VAR_UNUSED_0x40B8 0x40B8 // Unused Var
|
||||
#define VAR_MT_PYRE_STATE 0x40B9
|
||||
#define VAR_NEW_MAUVILLE_STATE 0x40BA
|
||||
#define VAR_UNUSED_0x40BB 0x40BB // Unused Var
|
||||
#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC
|
||||
#define VAR_JAGGED_PASS_ASH_WEATHER 0x40BD
|
||||
#define VAR_GLASS_WORKSHOP_STATE 0x40BE
|
||||
#define VAR_METEOR_FALLS_STATE 0x40BF
|
||||
#define VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE 0x40C0
|
||||
#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1
|
||||
#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2
|
||||
#define VAR_VICTORY_ROAD_1F_STATE 0x40C3
|
||||
#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4
|
||||
#define VAR_WHICH_FOSSIL_REVIVED 0x40C5
|
||||
#define VAR_STEVENS_HOUSE_STATE 0x40C6
|
||||
#define VAR_OLDALE_RIVAL_STATE 0x40C7
|
||||
#define VAR_JAGGED_PASS_STATE 0x40C8
|
||||
#define VAR_SCOTT_PETALBURG_ENCOUNTER 0x40C9
|
||||
#define VAR_SKY_PILLAR_STATE 0x40CA
|
||||
#define VAR_MIRAGE_TOWER_STATE 0x40CB
|
||||
#define VAR_FOSSIL_MANIAC_STATE 0x40CC
|
||||
#define VAR_CABLE_CLUB_TUTORIAL_STATE 0x40CD
|
||||
#define VAR_FRONTIER_BATTLE_MODE 0x40CE
|
||||
#define VAR_FRONTIER_FACILITY 0x40CF
|
||||
#define VAR_HAS_ENTERED_BATTLE_FRONTIER 0x40D0 // Var is used like a flag.
|
||||
#define VAR_SCOTT_STATE 0x40D1
|
||||
#define VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE 0x40D2
|
||||
#define VAR_DEX_UPGRADE_JOHTO_STARTER_STATE 0x40D3
|
||||
#define VAR_SS_TIDAL_SCOTT_STATE 0x40D4 // Always equal to FLAG_MET_SCOTT_ON_SS_TIDAL
|
||||
#define VAR_ROAMER_POKEMON 0x40D5 // 0 = Latias, 1 = Latios
|
||||
#define VAR_TRAINER_HILL_IS_ACTIVE 0x40D6
|
||||
#define VAR_SKY_PILLAR_RAQUAZA_CRY_DONE 0x40D7
|
||||
#define VAR_SOOTOPOLIS_WALLACE_STATE 0x40D8
|
||||
#define VAR_DEOXYS_ROCK_STEP_COUNT 0x4034
|
||||
#define VAR_DEOXYS_ROCK_LEVEL 0x4035
|
||||
#define VAR_PC_BOX_TO_SEND_MON 0x4036
|
||||
#define VAR_ABNORMAL_WEATHER_LOCATION 0x4037
|
||||
#define VAR_ABNORMAL_WEATHER_STEP_COUNTER 0x4038
|
||||
#define VAR_SHOULD_END_ABNORMAL_WEATHER 0x4039
|
||||
#define VAR_FARAWAY_ISLAND_STEP_COUNTER 0x403A
|
||||
#define VAR_REGICE_STEPS_1 0x403B
|
||||
#define VAR_REGICE_STEPS_2 0x403C
|
||||
#define VAR_REGICE_STEPS_3 0x403D
|
||||
#define VAR_ALTERING_CAVE_WILD_SET 0x403E
|
||||
#define VAR_DISTRIBUTE_EON_TICKET 0x403F // This var is read and written, but is always zero. The only way to obtain the Eon Ticket in Emerald is via Record Mixing
|
||||
#define VAR_DAYS 0x4040
|
||||
#define VAR_FANCLUB_FAN_COUNTER 0x4041
|
||||
#define VAR_FANCLUB_LOSE_FAN_TIMER 0x4042
|
||||
#define VAR_DEPT_STORE_FLOOR 0x4043
|
||||
#define VAR_TRICK_HOUSE_LEVEL 0x4044
|
||||
#define VAR_POKELOT_PRIZE_ITEM 0x4045
|
||||
#define VAR_NATIONAL_DEX 0x4046
|
||||
#define VAR_SEEDOT_SIZE_RECORD 0x4047
|
||||
#define VAR_ASH_GATHER_COUNT 0x4048
|
||||
#define VAR_BIRCH_STATE 0x4049
|
||||
#define VAR_CRUISE_STEP_COUNT 0x404A
|
||||
#define VAR_POKELOT_RND1 0x404B
|
||||
#define VAR_POKELOT_RND2 0x404C
|
||||
#define VAR_POKELOT_PRIZE_PLACE 0x404D
|
||||
#define VAR_UNUSED_0x404E 0x404E // Unused Var
|
||||
#define VAR_LOTAD_SIZE_RECORD 0x404F
|
||||
#define VAR_LITTLEROOT_TOWN_STATE 0x4050
|
||||
#define VAR_OLDALE_TOWN_STATE 0x4051
|
||||
#define VAR_DEWFORD_TOWN_STATE 0x4052 // Unused Var
|
||||
#define VAR_LAVARIDGE_TOWN_STATE 0x4053
|
||||
#define VAR_CURRENT_SECRET_BASE 0x4054 // was probably allocated for VAR_FALLARBOR_TOWN_STATE at one point
|
||||
#define VAR_VERDANTURF_TOWN_STATE 0x4055 // Unused Var
|
||||
#define VAR_PACIFIDLOG_TOWN_STATE 0x4056 // Unused Var
|
||||
#define VAR_PETALBURG_CITY_STATE 0x4057
|
||||
#define VAR_SLATEPORT_CITY_STATE 0x4058
|
||||
#define VAR_MAUVILLE_CITY_STATE 0x4059 // Unused Var
|
||||
#define VAR_RUSTBORO_CITY_STATE 0x405A
|
||||
#define VAR_FORTREE_CITY_STATE 0x405B // Unused Var
|
||||
#define VAR_LILYCOVE_CITY_STATE 0x405C // Unused Var
|
||||
#define VAR_MOSSDEEP_CITY_STATE 0x405D
|
||||
#define VAR_SOOTOPOLIS_CITY_STATE 0x405E
|
||||
#define VAR_EVER_GRANDE_CITY_STATE 0x405F // Unused Var
|
||||
#define VAR_ROUTE101_STATE 0x4060
|
||||
#define VAR_ROUTE102_STATE 0x4061 // Unused Var
|
||||
#define VAR_ROUTE103_STATE 0x4062 // Unused Var
|
||||
#define VAR_ROUTE104_STATE 0x4063
|
||||
#define VAR_ROUTE105_STATE 0x4064 // Unused Var
|
||||
#define VAR_ROUTE106_STATE 0x4065 // Unused Var
|
||||
#define VAR_ROUTE107_STATE 0x4066 // Unused Var
|
||||
#define VAR_ROUTE108_STATE 0x4067 // Unused Var
|
||||
#define VAR_ROUTE109_STATE 0x4068 // Unused Var
|
||||
#define VAR_ROUTE110_STATE 0x4069
|
||||
#define VAR_ROUTE111_STATE 0x406A // Unused Var
|
||||
#define VAR_ROUTE112_STATE 0x406B // Unused Var
|
||||
#define VAR_ROUTE113_STATE 0x406C // Unused Var
|
||||
#define VAR_ROUTE114_STATE 0x406D // Unused Var
|
||||
#define VAR_ROUTE115_STATE 0x406E // Unused Var
|
||||
#define VAR_ROUTE116_STATE 0x406F
|
||||
#define VAR_ROUTE117_STATE 0x4070 // Unused Var
|
||||
#define VAR_ROUTE118_STATE 0x4071
|
||||
#define VAR_ROUTE119_STATE 0x4072
|
||||
#define VAR_ROUTE120_STATE 0x4073 // Unused Var
|
||||
#define VAR_ROUTE121_STATE 0x4074
|
||||
#define VAR_ROUTE122_STATE 0x4075 // Unused Var
|
||||
#define VAR_ROUTE123_STATE 0x4076 // Unused Var
|
||||
#define VAR_ROUTE124_STATE 0x4077 // Unused Var
|
||||
#define VAR_ROUTE125_STATE 0x4078 // Unused Var
|
||||
#define VAR_ROUTE126_STATE 0x4079 // Unused Var
|
||||
#define VAR_ROUTE127_STATE 0x407A // Unused Var
|
||||
#define VAR_ROUTE128_STATE 0x407B
|
||||
#define VAR_ROUTE129_STATE 0x407C // Unused Var
|
||||
#define VAR_ROUTE130_STATE 0x407D // Unused Var
|
||||
#define VAR_ROUTE131_STATE 0x407E // Unused Var
|
||||
#define VAR_ROUTE132_STATE 0x407F // Unused Var
|
||||
#define VAR_ROUTE133_STATE 0x4080 // Unused Var
|
||||
#define VAR_ROUTE134_STATE 0x4081 // Unused Var
|
||||
#define VAR_LITTLEROOT_HOUSES_STATE_MAY 0x4082
|
||||
#define VAR_UNUSED_0x4083 0x4083 // Unused Var
|
||||
#define VAR_BIRCH_LAB_STATE 0x4084
|
||||
#define VAR_PETALBURG_GYM_STATE 0x4085 // 0-1: Wally tutorial, 2-6: 0-4 badges, 7: Defeated Norman, 8: Rematch Norman
|
||||
#define VAR_CONTEST_HALL_STATE 0x4086
|
||||
#define VAR_CABLE_CLUB_STATE 0x4087
|
||||
#define VAR_CONTEST_TYPE 0x4088
|
||||
#define VAR_SECRET_BASE_INITIALIZED 0x4089
|
||||
#define VAR_CONTEST_PRIZE_PICKUP 0x408A
|
||||
#define VAR_UNUSED_0x408B 0x408B // Unused Var
|
||||
#define VAR_LITTLEROOT_HOUSES_STATE_BRENDAN 0x408C
|
||||
#define VAR_LITTLEROOT_RIVAL_STATE 0x408D
|
||||
#define VAR_BOARD_BRINEY_BOAT_STATE 0x408E
|
||||
#define VAR_DEVON_CORP_3F_STATE 0x408F
|
||||
#define VAR_BRINEY_HOUSE_STATE 0x4090
|
||||
#define VAR_UNUSED_0x4091 0x4091 // Unused Var
|
||||
#define VAR_LITTLEROOT_INTRO_STATE 0x4092
|
||||
#define VAR_MAUVILLE_GYM_STATE 0x4093
|
||||
#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094
|
||||
#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095
|
||||
#define VAR_BRINEY_LOCATION 0x4096
|
||||
#define VAR_INIT_SECRET_BASE 0x4097
|
||||
#define VAR_PETALBURG_WOODS_STATE 0x4098
|
||||
#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099
|
||||
#define VAR_RUSTURF_TUNNEL_STATE 0x409A
|
||||
#define VAR_UNUSED_0x409B 0x409B // Unused Var
|
||||
#define VAR_ELITE_4_STATE 0x409C
|
||||
#define VAR_UNUSED_0x409D 0x409D // Unused Var
|
||||
#define VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE 0x409E
|
||||
#define VAR_MOSSDEEP_SPACE_CENTER_STATE 0x409F
|
||||
#define VAR_SLATEPORT_HARBOR_STATE 0x40A0
|
||||
#define VAR_UNUSED_0x40A1 0x40A1 // Unused var
|
||||
#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2
|
||||
#define VAR_CABLE_CAR_STATION_STATE 0x40A3
|
||||
#define VAR_SAFARI_ZONE_STATE 0x40A4 // 0: In or out of SZ, 1: Player exiting SZ, 2: Player entering SZ
|
||||
#define VAR_TRICK_HOUSE_BEING_WATCHED_STATE 0x40A5
|
||||
#define VAR_TRICK_HOUSE_FOUND_TRICK_MASTER 0x40A6
|
||||
#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A7
|
||||
#define VAR_UNUSED_0x40A8 0x40A8 // Unused Var
|
||||
#define VAR_CYCLING_CHALLENGE_STATE 0x40A9
|
||||
#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2
|
||||
#define VAR_WEATHER_INSTITUTE_STATE 0x40B3
|
||||
#define VAR_SS_TIDAL_STATE 0x40B4
|
||||
#define VAR_TRICK_HOUSE_ENTER_FROM_CORRIDOR 0x40B5
|
||||
#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6 // Leftover from RS, never set
|
||||
#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7
|
||||
#define VAR_UNUSED_0x40B8 0x40B8 // Unused Var
|
||||
#define VAR_MT_PYRE_STATE 0x40B9
|
||||
#define VAR_NEW_MAUVILLE_STATE 0x40BA
|
||||
#define VAR_UNUSED_0x40BB 0x40BB // Unused Var
|
||||
#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC
|
||||
#define VAR_JAGGED_PASS_ASH_WEATHER 0x40BD
|
||||
#define VAR_GLASS_WORKSHOP_STATE 0x40BE
|
||||
#define VAR_METEOR_FALLS_STATE 0x40BF
|
||||
#define VAR_SOOTOPOLIS_MYSTERY_EVENTS_STATE 0x40C0
|
||||
#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1
|
||||
#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2
|
||||
#define VAR_VICTORY_ROAD_1F_STATE 0x40C3
|
||||
#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4
|
||||
#define VAR_WHICH_FOSSIL_REVIVED 0x40C5
|
||||
#define VAR_STEVENS_HOUSE_STATE 0x40C6
|
||||
#define VAR_OLDALE_RIVAL_STATE 0x40C7
|
||||
#define VAR_JAGGED_PASS_STATE 0x40C8
|
||||
#define VAR_SCOTT_PETALBURG_ENCOUNTER 0x40C9
|
||||
#define VAR_SKY_PILLAR_STATE 0x40CA
|
||||
#define VAR_MIRAGE_TOWER_STATE 0x40CB
|
||||
#define VAR_FOSSIL_MANIAC_STATE 0x40CC
|
||||
#define VAR_CABLE_CLUB_TUTORIAL_STATE 0x40CD
|
||||
#define VAR_FRONTIER_BATTLE_MODE 0x40CE
|
||||
#define VAR_FRONTIER_FACILITY 0x40CF
|
||||
#define VAR_HAS_ENTERED_BATTLE_FRONTIER 0x40D0 // Var is used like a flag.
|
||||
#define VAR_SCOTT_STATE 0x40D1
|
||||
#define VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE 0x40D2
|
||||
#define VAR_DEX_UPGRADE_JOHTO_STARTER_STATE 0x40D3
|
||||
#define VAR_SS_TIDAL_SCOTT_STATE 0x40D4 // Always equal to FLAG_MET_SCOTT_ON_SS_TIDAL
|
||||
#define VAR_ROAMER_POKEMON 0x40D5 // 0 = Latias, 1 = Latios
|
||||
#define VAR_TRAINER_HILL_IS_ACTIVE 0x40D6
|
||||
#define VAR_SKY_PILLAR_RAYQUAZA_CRY_DONE 0x40D7
|
||||
#define VAR_SOOTOPOLIS_WALLACE_STATE 0x40D8
|
||||
#define VAR_HAS_TALKED_TO_SEAFLOOR_CAVERN_ENTRANCE_GRUNT 0x40D9
|
||||
#define VAR_REGISTER_BIRCH_STATE 0x40DA
|
||||
#define VAR_UNUSED_0x40DB 0x40DB // Unused Var
|
||||
#define VAR_UNUSED_0x40DC 0x40DC // Unused Var
|
||||
#define VAR_GIFT_PICHU_SLOT 0x40DD
|
||||
#define VAR_GIFT_UNUSED_1 0x40DE // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_2 0x40DF // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_3 0x40E0 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_4 0x40E1 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_5 0x40E2 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_6 0x40E3 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_7 0x40E4 // var is written to, but never read
|
||||
#define VAR_UNUSED_0x40E5 0x40E5 // Unused Var
|
||||
#define VAR_DAILY_SLOTS 0x40E6
|
||||
#define VAR_DAILY_WILDS 0x40E7
|
||||
#define VAR_DAILY_BLENDER 0x40E8
|
||||
#define VAR_DAILY_PLANTED_BERRIES 0x40E9
|
||||
#define VAR_DAILY_PICKED_BERRIES 0x40EA
|
||||
#define VAR_DAILY_ROULETTE 0x40EB
|
||||
#define VAR_SECRET_BASE_STEP_COUNTER 0x40EC // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_LAST_ITEM_USED 0x40ED // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_LOW_TV_FLAGS 0x40EE // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_HIGH_TV_FLAGS 0x40EF // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_IS_NOT_LOCAL 0x40F0 // Set to TRUE while in another player's secret base.
|
||||
#define VAR_DAILY_BP 0x40F1
|
||||
#define VAR_WALLY_CALL_STEP_COUNTER 0x40F2
|
||||
#define VAR_SCOTT_FORTREE_CALL_STEP_COUNTER 0x40F3
|
||||
#define VAR_ROXANNE_CALL_STEP_COUNTER 0x40F4
|
||||
#define VAR_SCOTT_BF_CALL_STEP_COUNTER 0x40F5
|
||||
#define VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER 0x40F6
|
||||
#define VAR_UNUSED_0x40F7 0x40F7 // Unused Var
|
||||
#define VAR_UNUSED_0x40F8 0x40F8 // Unused Var
|
||||
#define VAR_UNUSED_0x40F9 0x40F9 // Unused Var
|
||||
#define VAR_UNUSED_0x40FA 0x40FA // Unused Var
|
||||
#define VAR_UNUSED_0x40FB 0x40FB // Unused Var
|
||||
#define VAR_UNUSED_0x40FC 0x40FC // Unused Var
|
||||
#define VAR_UNUSED_0x40FD 0x40FD // Unused Var
|
||||
#define VAR_UNUSED_0x40FE 0x40FE // Unused Var
|
||||
#define VAR_UNUSED_0x40FF 0x40FF // Unused Var
|
||||
#define VAR_REGISTER_BIRCH_STATE 0x40DA
|
||||
#define VAR_UNUSED_0x40DB 0x40DB // Unused Var
|
||||
#define VAR_UNUSED_0x40DC 0x40DC // Unused Var
|
||||
#define VAR_GIFT_PICHU_SLOT 0x40DD
|
||||
#define VAR_GIFT_UNUSED_1 0x40DE // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_2 0x40DF // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_3 0x40E0 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_4 0x40E1 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_5 0x40E2 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_6 0x40E3 // Var is written to, but never read
|
||||
#define VAR_GIFT_UNUSED_7 0x40E4 // var is written to, but never read
|
||||
#define VAR_UNUSED_0x40E5 0x40E5 // Unused Var
|
||||
#define VAR_DAILY_SLOTS 0x40E6
|
||||
#define VAR_DAILY_WILDS 0x40E7
|
||||
#define VAR_DAILY_BLENDER 0x40E8
|
||||
#define VAR_DAILY_PLANTED_BERRIES 0x40E9
|
||||
#define VAR_DAILY_PICKED_BERRIES 0x40EA
|
||||
#define VAR_DAILY_ROULETTE 0x40EB
|
||||
#define VAR_SECRET_BASE_STEP_COUNTER 0x40EC // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_LAST_ITEM_USED 0x40ED // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_LOW_TV_FLAGS 0x40EE // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_HIGH_TV_FLAGS 0x40EF // Used by Secret Base TV programs
|
||||
#define VAR_SECRET_BASE_IS_NOT_LOCAL 0x40F0 // Set to TRUE while in another player's secret base.
|
||||
#define VAR_DAILY_BP 0x40F1
|
||||
#define VAR_WALLY_CALL_STEP_COUNTER 0x40F2
|
||||
#define VAR_SCOTT_FORTREE_CALL_STEP_COUNTER 0x40F3
|
||||
#define VAR_ROXANNE_CALL_STEP_COUNTER 0x40F4
|
||||
#define VAR_SCOTT_BF_CALL_STEP_COUNTER 0x40F5
|
||||
#define VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER 0x40F6
|
||||
#define VAR_UNUSED_0x40F7 0x40F7 // Unused Var
|
||||
#define VAR_UNUSED_0x40F8 0x40F8 // Unused Var
|
||||
#define VAR_UNUSED_0x40F9 0x40F9 // Unused Var
|
||||
#define VAR_UNUSED_0x40FA 0x40FA // Unused Var
|
||||
#define VAR_UNUSED_0x40FB 0x40FB // Unused Var
|
||||
#define VAR_UNUSED_0x40FC 0x40FC // Unused Var
|
||||
#define VAR_UNUSED_0x40FD 0x40FD // Unused Var
|
||||
#define VAR_UNUSED_0x40FE 0x40FE // Unused Var
|
||||
#define VAR_UNUSED_0x40FF 0x40FF // Unused Var
|
||||
|
||||
#define VARS_END 0x40FF
|
||||
#define VARS_COUNT (VARS_END - VARS_START + 1)
|
||||
#define VARS_END 0x40FF
|
||||
#define VARS_COUNT (VARS_END - VARS_START + 1)
|
||||
|
||||
#define SPECIAL_VARS_START 0x8000
|
||||
// special vars
|
||||
|
@ -77,55 +77,55 @@ extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[];
|
||||
extern const u8 *const gBerryTreePaletteSlotTablePointers[];
|
||||
|
||||
void ResetObjectEvents(void);
|
||||
u8 GetMoveDirectionAnimNum(u8);
|
||||
u8 GetObjectEventIdByLocalIdAndMap(u8, u8, u8);
|
||||
bool8 TryGetObjectEventIdByLocalIdAndMap(u8, u8, u8, u8 *);
|
||||
u8 GetObjectEventIdByXY(s16, s16);
|
||||
void SetObjectEventDirection(struct ObjectEvent *, u8);
|
||||
u8 GetMoveDirectionAnimNum(u8 direction);
|
||||
u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId);
|
||||
bool8 TryGetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u8 *objectEventId);
|
||||
u8 GetObjectEventIdByXY(s16 x, s16 y);
|
||||
void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction);
|
||||
u8 GetFirstInactiveObjectEventId(void);
|
||||
void RemoveObjectEventByLocalIdAndMap(u8, u8, u8);
|
||||
void LoadPlayerObjectReflectionPalette(u16, u8);
|
||||
void LoadSpecialObjectReflectionPalette(u16, u8);
|
||||
void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16);
|
||||
void PatchObjectPalette(u16, u8);
|
||||
void SpawnObjectEventsOnReturnToField(s16, s16);
|
||||
void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot);
|
||||
void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot);
|
||||
void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
|
||||
void PatchObjectPalette(u16 paletteTag, u8 paletteSlot);
|
||||
void SpawnObjectEventsOnReturnToField(s16 x, s16 y);
|
||||
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
|
||||
void GetMapCoordsFromSpritePos(s16, s16, s16 *, s16 *);
|
||||
u8 GetFaceDirectionAnimNum(u8);
|
||||
void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
|
||||
void GetMapCoordsFromSpritePos(s16 x, s16 y, s16 *destX, s16 *destY);
|
||||
u8 GetFaceDirectionAnimNum(u8 direction);
|
||||
void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy);
|
||||
void ObjectEventClearHeldMovement(struct ObjectEvent *);
|
||||
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
|
||||
void TrySpawnObjectEvents(s16, s16);
|
||||
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY);
|
||||
u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
|
||||
u8 TrySpawnObjectEvent(u8, u8, u8);
|
||||
u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation);
|
||||
u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *);
|
||||
void SetSpritePosToMapCoords(s16, s16, s16 *, s16 *);
|
||||
void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY);
|
||||
void CameraObjectReset1(void);
|
||||
void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId);
|
||||
void ObjectEventTurn(struct ObjectEvent *, u8);
|
||||
void ObjectEventTurnByLocalIdAndMap(u8, u8, u8, u8);
|
||||
void ObjectEventTurn(struct ObjectEvent *, u8 direction);
|
||||
void ObjectEventTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction);
|
||||
const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId);
|
||||
void SetObjectInvisibility(u8, u8, u8, bool8);
|
||||
void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible);
|
||||
void FreeAndReserveObjectSpritePalettes(void);
|
||||
void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
|
||||
void ResetObjectSubpriority(u8, u8, u8);
|
||||
void SetObjectSubpriority(u8, u8, u8, u8);
|
||||
void AllowObjectAtPosTriggerGroundEffects(s16, s16);
|
||||
void ResetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
void SetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority);
|
||||
void AllowObjectAtPosTriggerGroundEffects(s16 x, s16 y);
|
||||
void ObjectEventGetLocalIdAndMap(struct ObjectEvent *objectEvent, void *localId, void *mapNum, void *mapGroup);
|
||||
void ShiftObjectEventCoords(struct ObjectEvent *, s16, s16);
|
||||
void MoveObjectEventToMapCoords(struct ObjectEvent *, s16, s16);
|
||||
void TryOverrideObjectEventTemplateCoords(u8, u8, u8);
|
||||
void ShiftObjectEventCoords(struct ObjectEvent *, s16 x, s16 y);
|
||||
void MoveObjectEventToMapCoords(struct ObjectEvent *, s16 x, s16 y);
|
||||
void TryOverrideObjectEventTemplateCoords(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
void InitObjectEventPalettes(u8 palSlot);
|
||||
void UpdateObjectEventCurrentMovement(struct ObjectEvent *, struct Sprite *, bool8(struct ObjectEvent *, struct Sprite *));
|
||||
u8 ObjectEventFaceOppositeDirection(struct ObjectEvent *, u8);
|
||||
u8 GetOppositeDirection(u8);
|
||||
u8 ObjectEventFaceOppositeDirection(struct ObjectEvent *, u8 direction);
|
||||
u8 GetOppositeDirection(u8 direction);
|
||||
u8 GetWalkInPlaceFasterMovementAction(u32);
|
||||
u8 GetWalkInPlaceFastMovementAction(u32);
|
||||
u8 GetWalkInPlaceNormalMovementAction(u32);
|
||||
u8 GetWalkInPlaceSlowMovementAction(u32);
|
||||
u8 GetCollisionAtCoords(struct ObjectEvent *, s16, s16, u32);
|
||||
void MoveCoords(u8, s16 *, s16 *);
|
||||
u8 GetCollisionAtCoords(struct ObjectEvent *, s16 x, s16 y, u32 dir);
|
||||
void MoveCoords(u8 direction, s16 *x, s16 *y);
|
||||
bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *);
|
||||
u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *);
|
||||
u8 GetObjectEventIdByPosition(u16 x, u16 y, u8 elevation);
|
||||
@ -168,22 +168,22 @@ u8 AddCameraObject(u8 linkedSpriteId);
|
||||
void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
|
||||
u8 GetWalkSlowMovementAction(u32);
|
||||
u8 GetJumpMovementAction(u32);
|
||||
u8 ElevationToPriority(u8);
|
||||
u8 ElevationToPriority(u8 elevation);
|
||||
void ObjectEventUpdateElevation(struct ObjectEvent *objEvent);
|
||||
void SetObjectSubpriorityByElevation(u8, struct Sprite *, u8);
|
||||
void SetObjectSubpriorityByElevation(u8 elevation, struct Sprite *, u8 subpriority);
|
||||
void UnfreezeObjectEvent(struct ObjectEvent *);
|
||||
u8 FindLockedObjectEventIndex(struct ObjectEvent *);
|
||||
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
|
||||
void SetAndStartSpriteAnim(struct Sprite *, u8 animNum, u8 animCmdIndex);
|
||||
bool8 SpriteAnimEnded(struct Sprite *);
|
||||
void UnfreezeObjectEvents(void);
|
||||
void FreezeObjectEventsExceptOne(u8 objectEventId);
|
||||
void FreezeObjectEventsExceptTwo(u8 objectEventId1, u8 objectEventId2);
|
||||
void FreezeObjectEvents(void);
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
|
||||
u8 GetMoveDirectionFastAnimNum(u8);
|
||||
u8 GetMoveDirectionFasterAnimNum(u8);
|
||||
u8 GetMoveDirectionFastestAnimNum(u8);
|
||||
u8 GetLedgeJumpDirection(s16, s16, u8);
|
||||
u8 GetMoveDirectionFastAnimNum(u8 direction);
|
||||
u8 GetMoveDirectionFasterAnimNum(u8 direction);
|
||||
u8 GetMoveDirectionFastestAnimNum(u8 direction);
|
||||
u8 GetLedgeJumpDirection(s16 x, s16 y, u8 direction);
|
||||
void CameraObjectSetFollowedSpriteId(u8 objectId);
|
||||
u16 GetObjectPaletteTag(u8 palSlot);
|
||||
void UpdateObjectEventSpriteInvisibility(struct Sprite *sprite, bool8 invisible);
|
||||
@ -192,7 +192,7 @@ s16 GetFigure8YOffset(s16 idx);
|
||||
void CameraObjectReset2(void);
|
||||
u8 GetObjectEventBerryTreeId(u8 objectEventId);
|
||||
void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup);
|
||||
bool8 IsBerryTreeSparkling(u8, u8, u8);
|
||||
bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup);
|
||||
|
||||
void MovementType_None(struct Sprite *);
|
||||
void MovementType_LookAround(struct Sprite *);
|
||||
@ -250,7 +250,6 @@ void MovementType_RunInPlace(struct Sprite *);
|
||||
void MovementType_Invisible(struct Sprite *);
|
||||
void MovementType_WalkSlowlyInPlace(struct Sprite *);
|
||||
u8 GetSlideMovementAction(u32);
|
||||
u8 GetJumpInPlaceMovementAction(u32);
|
||||
u8 GetJumpMovementAction(u32);
|
||||
u8 GetJump2MovementAction(u32);
|
||||
u8 CreateCopySpriteAt(struct Sprite *sprite, s16 x, s16 y, u8 subpriority);
|
||||
@ -262,17 +261,17 @@ u8 MovementType_WanderAround_Step3(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step4(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step5(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_WanderAround_Step6(struct ObjectEvent *, struct Sprite *);
|
||||
u8 GetVectorDirection(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_SouthNorth(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_WestEast(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_WestNorth(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_EastNorth(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_WestSouth(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_EastSouth(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_SouthNorthWest(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_SouthNorthEast(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_NorthWestEast(s16, s16, s16, s16);
|
||||
u8 GetLimitedVectorDirection_SouthWestEast(s16, s16, s16, s16);
|
||||
u8 GetVectorDirection(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_SouthNorth(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_WestEast(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_WestNorth(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_EastNorth(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_WestSouth(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_EastSouth(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_SouthNorthWest(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_SouthNorthEast(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_NorthWestEast(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 GetLimitedVectorDirection_SouthWestEast(s16 dx, s16 dy, s16 absdx, s16 absdy);
|
||||
u8 MovementType_LookAround_Step0(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_LookAround_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_LookAround_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
|
@ -18,7 +18,7 @@ void FieldEffectStop(struct Sprite *sprite, u8 id);
|
||||
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
|
||||
void FldEff_TeleportWarpOut(void);
|
||||
void FieldEffectActiveListRemove(u8 id);
|
||||
void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
|
||||
void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
|
||||
void FieldEffectActiveListAdd(u8 id);
|
||||
void FieldEffectScript_LoadTiles(u8 **script);
|
||||
void FieldEffectScript_LoadFadedPalette(u8 **script);
|
||||
|
@ -38,7 +38,7 @@ void PlayerFreeze(void);
|
||||
void StopPlayerAvatar(void);
|
||||
void SetSpinStartFacingDir(u8);
|
||||
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
|
||||
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8);
|
||||
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
|
||||
void SetPlayerAvatarFieldMove(void);
|
||||
u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
|
||||
void SetPlayerAvatarStateMask(u8 flags);
|
||||
|
@ -47,7 +47,7 @@ void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout);
|
||||
void CopyPrimaryTilesetToVram(const struct MapLayout *);
|
||||
void CopySecondaryTilesetToVram(const struct MapLayout *);
|
||||
struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection);
|
||||
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y);
|
||||
struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y);
|
||||
void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
|
||||
|
||||
// field_region_map.c
|
||||
|
@ -4,9 +4,9 @@
|
||||
// Masks/shifts for blocks in the map grid
|
||||
// Map grid blocks consist of a 10 bit metatile id, a 2 bit collision value, and a 4 bit elevation value
|
||||
// This is the data stored in each data/layouts/*/map.bin file
|
||||
#define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 1-10
|
||||
#define MAPGRID_COLLISION_MASK 0x0C00 // Bits 11-12
|
||||
#define MAPGRID_ELEVATION_MASK 0xF000 // Bits 13-16
|
||||
#define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 0-9
|
||||
#define MAPGRID_COLLISION_MASK 0x0C00 // Bits 10-11
|
||||
#define MAPGRID_ELEVATION_MASK 0xF000 // Bits 12-15
|
||||
#define MAPGRID_COLLISION_SHIFT 10
|
||||
#define MAPGRID_ELEVATION_SHIFT 12
|
||||
|
||||
@ -16,8 +16,8 @@
|
||||
// Masks/shifts for metatile attributes
|
||||
// Metatile attributes consist of an 8 bit behavior value, 4 unused bits, and a 4 bit layer type value
|
||||
// This is the data stored in each data/tilesets/*/*/metatile_attributes.bin file
|
||||
#define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 1-8
|
||||
#define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 13-16
|
||||
#define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 0-7
|
||||
#define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 12-15
|
||||
#define METATILE_ATTR_LAYER_SHIFT 12
|
||||
|
||||
enum {
|
||||
|
@ -881,7 +881,7 @@ struct MysteryGiftSave
|
||||
struct WonderCardMetadata cardMetadata;
|
||||
u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
|
||||
struct WonderNewsMetadata newsMetadata;
|
||||
u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
|
||||
u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
|
||||
}; // 0x36C 0x3598
|
||||
|
||||
// For external event data storage. The majority of these may have never been used.
|
||||
|
@ -284,7 +284,7 @@ void SerialCB(void);
|
||||
bool32 InUnionRoom(void);
|
||||
void LoadWirelessStatusIndicatorSpriteGfx(void);
|
||||
bool8 IsLinkTaskFinished(void);
|
||||
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
||||
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
|
||||
void SetLinkStandbyCallback(void);
|
||||
void SetWirelessCommType1(void);
|
||||
void CheckShouldAdvanceLinkState(void);
|
||||
|
@ -97,7 +97,7 @@ struct RfuGameCompatibilityData
|
||||
// wireless play (the kind the Pokémon games use) the gname data can be used for
|
||||
// anything the developers want. This struct is what GF decided to use it for.
|
||||
// It can be up to 13 bytes in size (RFU_GAME_NAME_LENGTH).
|
||||
// The player's name is sent separately as the username ("uname"), and does not
|
||||
// The player's name is sent separately as the username ("uname"), and does not
|
||||
// use a struct (gHostRfuUsername).
|
||||
struct __attribute__((packed, aligned(2))) RfuGameData
|
||||
{
|
||||
@ -118,7 +118,7 @@ struct __attribute__((packed, aligned(2))) RfuGameData
|
||||
// Bits 0-2 are a shortened trainerId
|
||||
// Bit 3 is the player's gender
|
||||
// Bits 4-6 are unknown/unused
|
||||
// Bit 7 is an 'active' flag
|
||||
// Bit 7 is an 'active' flag
|
||||
#define PINFO_TID_MASK 0x7
|
||||
#define PINFO_GENDER_SHIFT 3
|
||||
#define PINFO_ACTIVE_FLAG (1 << 7)
|
||||
|
@ -92,7 +92,7 @@ void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth
|
||||
u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
|
||||
u8 ChangeMenuGridCursorPosition(s8 deltaX, s8 deltaY);
|
||||
u8 GetStartMenuWindowId(void);
|
||||
void ListMenuLoadStdPalAt(u8, u8);
|
||||
void ListMenuLoadStdPalAt(u8 palOffset, u8 palId);
|
||||
u8 Menu_MoveCursor(s8 cursorDelta);
|
||||
u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
|
||||
void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
|
||||
|
@ -52,22 +52,22 @@ extern u8 gPaletteDecompressionBuffer[];
|
||||
extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE];
|
||||
extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE];
|
||||
|
||||
void LoadCompressedPalette(const u32 *, u16, u16);
|
||||
void LoadPalette(const void *, u16, u16);
|
||||
void FillPalette(u16, u16, u16);
|
||||
void LoadCompressedPalette(const u32 *src, u16 offset, u16 size);
|
||||
void LoadPalette(const void *src, u16 offset, u16 size);
|
||||
void FillPalette(u16 value, u16 offset, u16 size);
|
||||
void TransferPlttBuffer(void);
|
||||
u8 UpdatePaletteFade(void);
|
||||
void ResetPaletteFade(void);
|
||||
bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
|
||||
void PaletteStruct_ResetById(u16);
|
||||
bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor);
|
||||
void PaletteStruct_ResetById(u16 id);
|
||||
void ResetPaletteFadeControl(void);
|
||||
void InvertPlttBuffer(u32);
|
||||
void TintPlttBuffer(u32, s8, s8, s8);
|
||||
void UnfadePlttBuffer(u32);
|
||||
void BeginFastPaletteFade(u8);
|
||||
void BeginHardwarePaletteFade(u8, u8, u8, u8, u8);
|
||||
void InvertPlttBuffer(u32 selectedPalettes);
|
||||
void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b);
|
||||
void UnfadePlttBuffer(u32 selectedPalettes);
|
||||
void BeginFastPaletteFade(u8 submode);
|
||||
void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters);
|
||||
void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color);
|
||||
void BlendPalettesUnfaded(u32, u8, u16);
|
||||
void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color);
|
||||
void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id);
|
||||
void TintPalette_GrayScale(u16 *palette, u16 count);
|
||||
void TintPalette_GrayScale2(u16 *palette, u16 count);
|
||||
|
@ -385,7 +385,7 @@ struct FormChange
|
||||
| (((personality) & 0x00000003) >> 0) \
|
||||
) % NUM_UNOWN_FORMS)
|
||||
|
||||
#define GET_SHINY_VALUE(otId, personality)HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality)
|
||||
#define GET_SHINY_VALUE(otId, personality) (HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality))
|
||||
|
||||
extern u8 gPlayerPartyCount;
|
||||
extern struct Pokemon gPlayerParty[PARTY_SIZE];
|
||||
|
@ -116,7 +116,7 @@ enum
|
||||
#define POKENAV_MENU_IDS_START 100000
|
||||
enum
|
||||
{
|
||||
POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons
|
||||
POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons
|
||||
POKENAV_MAIN_MENU_CURSOR_ON_MAP,
|
||||
POKENAV_CONDITION_MENU, // The first Condition screen where the player selects Party or Search
|
||||
POKENAV_CONDITION_SEARCH_MENU, // The Condition search menu where the player selects a search parameter
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
// In the Union Room the player is only ever connected to ≤ 4 other players.
|
||||
// However, there can be up to MAX_UNION_ROOM_LEADERS (8) object events to
|
||||
// represent leaders of recently discovered link groups, and each of those groups
|
||||
// represent leaders of recently discovered link groups, and each of those groups
|
||||
// may have up to MAX_RFU_PLAYERS (5) players in it including the leader.
|
||||
// These players are represented on-screen by NPC sprites drawn around the leader.
|
||||
// Thus there can be 40 sprites of other players on-screen, in 8 groups of 5.
|
||||
@ -16,7 +16,7 @@
|
||||
// The maximum number of recently connected players that can be tracked.
|
||||
// Note that this is significantly less than NUM_UNION_ROOM_SPRITES, i.e. not
|
||||
// every player that can be shown in the Union Room can be tracked at once.
|
||||
// Information such as a group member's gender can instead be read from partnerInfo
|
||||
// Information such as a group member's gender can instead be read from partnerInfo
|
||||
// of the leader's RfuGameData by tracking at least all of the group leaders.
|
||||
#define MAX_RFU_PLAYER_LIST_SIZE 16
|
||||
|
||||
|
@ -390,7 +390,7 @@ static void GenerateOpponentMons(void)
|
||||
while (i != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
sRandMonId = monSet[Random() % numMons];
|
||||
|
||||
|
||||
// Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
|
@ -2434,7 +2434,7 @@ static bool8 Mugshot_WaitStartPlayerSlide(struct Task *task)
|
||||
{
|
||||
sTransitionData->BG0HOFS_Lower -= 8;
|
||||
sTransitionData->BG0HOFS_Upper += 8;
|
||||
|
||||
|
||||
// Start player's slide in once the opponent is finished
|
||||
if (IsTrainerPicSlideDone(task->tOpponentSpriteId))
|
||||
{
|
||||
@ -2770,7 +2770,7 @@ static bool8 Slice_Main(struct Task *task)
|
||||
{
|
||||
u16 *storeLoc1 = &gScanlineEffectRegBuffers[0][i];
|
||||
u16 *storeLoc2 = &gScanlineEffectRegBuffers[0][i + DISPLAY_HEIGHT];
|
||||
|
||||
|
||||
// Alternate rows
|
||||
if (i % 2)
|
||||
{
|
||||
@ -3251,7 +3251,7 @@ static bool8 RectangularSpiral_Main(struct Task *task)
|
||||
// The line moved to a new position, draw the tile.
|
||||
done = FALSE;
|
||||
position = sRectangularSpiralLines[j].position;
|
||||
|
||||
|
||||
// Invert position for the two lines that start at the bottom.
|
||||
if ((j % 2) == 1)
|
||||
position = 637 - position;
|
||||
@ -3281,7 +3281,7 @@ static bool8 RectangularSpiral_End(struct Task *task)
|
||||
static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, struct RectangularSpiralLine *line)
|
||||
{
|
||||
const s16 *moveData = moveDataTable[line->state];
|
||||
|
||||
|
||||
// Has spiral finished?
|
||||
// Note that most move data arrays endsin SPIRAL_END but it is
|
||||
// only ever reached on the final array of spiraling outward.
|
||||
@ -3294,9 +3294,9 @@ static bool16 UpdateRectangularSpiralLine(const s16 * const *moveDataTable, stru
|
||||
sDebug_RectangularSpiralData = moveData[2];
|
||||
sDebug_RectangularSpiralData = moveData[3];
|
||||
|
||||
// Note that for the two lines originating at the bottom the
|
||||
// Note that for the two lines originating at the bottom the
|
||||
// position is inverted, so the directions are flipped.
|
||||
// i.e. position += 1 is right for the top lines and left
|
||||
// i.e. position += 1 is right for the top lines and left
|
||||
// for their inverted partners on the bottom.
|
||||
switch (moveData[0])
|
||||
{
|
||||
@ -4170,13 +4170,13 @@ static void InitBlackWipe(s16 *data, s16 startX, s16 startY, s16 endX, s16 endY,
|
||||
static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact)
|
||||
{
|
||||
u8 numFinished;
|
||||
|
||||
|
||||
if (tWipeXDist > tWipeYDist)
|
||||
{
|
||||
// X has further to move, move it first
|
||||
tWipeCurrX += tWipeXMove;
|
||||
|
||||
// If it has been far enough since Y's
|
||||
// If it has been far enough since Y's
|
||||
// last move then move it too
|
||||
tWipeTemp += tWipeYDist;
|
||||
if (tWipeTemp > tWipeXDist)
|
||||
@ -4190,7 +4190,7 @@ static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact)
|
||||
// Y has further to move, move it first
|
||||
tWipeCurrY += tWipeYMove;
|
||||
|
||||
// If it has been far enough since X's
|
||||
// If it has been far enough since X's
|
||||
// last move then move it too
|
||||
tWipeTemp += tWipeXDist;
|
||||
if (tWipeTemp > tWipeYDist)
|
||||
@ -4201,9 +4201,9 @@ static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact)
|
||||
}
|
||||
|
||||
numFinished = 0;
|
||||
|
||||
|
||||
// Has X coord reached end?
|
||||
if ((tWipeXMove > 0 && tWipeCurrX >= tWipeEndX)
|
||||
if ((tWipeXMove > 0 && tWipeCurrX >= tWipeEndX)
|
||||
|| (tWipeXMove < 0 && tWipeCurrX <= tWipeEndX))
|
||||
{
|
||||
numFinished++;
|
||||
@ -4212,7 +4212,7 @@ static bool8 UpdateBlackWipe(s16 *data, bool8 xExact, bool8 yExact)
|
||||
}
|
||||
|
||||
// Has Y coord reached end?
|
||||
if ((tWipeYMove > 0 && tWipeCurrY >= tWipeEndY)
|
||||
if ((tWipeYMove > 0 && tWipeCurrY >= tWipeEndY)
|
||||
|| (tWipeYMove < 0 && tWipeCurrY <= tWipeEndY))
|
||||
{
|
||||
numFinished++;
|
||||
|
@ -1147,7 +1147,7 @@ static const union AnimCmd *const sAnimTable_AshPuff[] =
|
||||
sAnim_AshPuff,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff =
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff =
|
||||
{
|
||||
.tileTag = TAG_NONE,
|
||||
.paletteTag = FLDEFF_PAL_TAG_ASH,
|
||||
|
@ -1211,7 +1211,7 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight,
|
||||
{
|
||||
x = mapX + i;
|
||||
attributes = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]);
|
||||
if (MetatileBehavior_IsSecretBaseImpassable(attributes & METATILE_ATTR_BEHAVIOR_MASK) == TRUE
|
||||
if (MetatileBehavior_IsSecretBaseImpassable(attributes & METATILE_ATTR_BEHAVIOR_MASK) == TRUE
|
||||
|| (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (attributes >> METATILE_ATTR_LAYER_SHIFT) != METATILE_LAYER_TYPE_NORMAL))
|
||||
impassableFlag = MAPGRID_COLLISION_MASK;
|
||||
else
|
||||
@ -1482,7 +1482,7 @@ static bool8 IsSecretBaseTrainerSpot(u8 behaviorAt, u16 layerType)
|
||||
// Can't place decoration where the player was standing when they interacted with the PC
|
||||
static bool8 IsntInitialPosition(u8 taskId, s16 x, s16 y, u16 layerType)
|
||||
{
|
||||
if (x == gTasks[taskId].tInitialX + MAP_OFFSET
|
||||
if (x == gTasks[taskId].tInitialX + MAP_OFFSET
|
||||
&& y == gTasks[taskId].tInitialY + MAP_OFFSET
|
||||
&& layerType != METATILE_LAYER_TYPE_NORMAL)
|
||||
return FALSE;
|
||||
|
@ -112,7 +112,7 @@ static bool32 ValidateEReaderConnection(void)
|
||||
REG_IME = 0;
|
||||
*(u64 *)handshakes = *(u64 *)gLink.handshakeBuffer;
|
||||
REG_IME = backupIME;
|
||||
|
||||
|
||||
// Validate that we are player 1, the EReader is player 2,
|
||||
// and that players 3 and 4 are empty.
|
||||
if (handshakes[0] == SLAVE_HANDSHAKE && handshakes[1] == EREADER_HANDSHAKE
|
||||
@ -154,8 +154,8 @@ enum {
|
||||
|
||||
static u32 TryReceiveCard(u8 *state, u16 *timer)
|
||||
{
|
||||
if (*state >= RECV_STATE_EXCHANGE
|
||||
&& *state <= RECV_STATE_WAIT_DISCONNECT
|
||||
if (*state >= RECV_STATE_EXCHANGE
|
||||
&& *state <= RECV_STATE_WAIT_DISCONNECT
|
||||
&& HasLinkErrorOccurred())
|
||||
{
|
||||
// Return error status if an error occurs
|
||||
|
@ -2624,7 +2624,7 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent)
|
||||
minY = objY - objectEvent->trainerRange_berryTreeId;
|
||||
maxX = objX + objectEvent->trainerRange_berryTreeId;
|
||||
maxY = objY + objectEvent->trainerRange_berryTreeId;
|
||||
if (minX > playerX || maxX < playerX
|
||||
if (minX > playerX || maxX < playerX
|
||||
|| minY > playerY || maxY < playerY)
|
||||
return FALSE;
|
||||
|
||||
|
@ -251,7 +251,7 @@ static const struct PacifidlogMetatileOffsets *GetPacifidlogBridgeMetatileOffset
|
||||
static void TrySetPacifidlogBridgeMetatiles(const struct PacifidlogMetatileOffsets *offsets, s16 x, s16 y, bool32 redrawMap)
|
||||
{
|
||||
offsets = GetPacifidlogBridgeMetatileOffsets(offsets, MapGridGetMetatileBehaviorAt(x, y));
|
||||
|
||||
|
||||
// If offsets is NULL, position is not a log (don't set it)
|
||||
if (offsets)
|
||||
{
|
||||
@ -301,7 +301,7 @@ static bool32 ShouldRaisePacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY)
|
||||
}
|
||||
else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(oldBehavior))
|
||||
{
|
||||
// Still on same one if moved from left to right
|
||||
// Still on same one if moved from left to right
|
||||
if (newX > oldX)
|
||||
return FALSE;
|
||||
}
|
||||
@ -340,13 +340,13 @@ static bool32 ShouldSinkPacifidlogLogs(s16 newX, s16 newY, s16 oldX, s16 oldY)
|
||||
}
|
||||
else if (MetatileBehavior_IsPacifidlogHorizontalLogLeft(newBehavior))
|
||||
{
|
||||
// Still on same one if moved from right to left
|
||||
// Still on same one if moved from right to left
|
||||
if (newX < oldX)
|
||||
return FALSE;
|
||||
}
|
||||
else if (MetatileBehavior_IsPacifidlogHorizontalLogRight(newBehavior))
|
||||
{
|
||||
// Still on same one if moved from left to right
|
||||
// Still on same one if moved from left to right
|
||||
if (newX > oldX)
|
||||
return FALSE;
|
||||
}
|
||||
@ -371,7 +371,7 @@ static void PacifidlogBridgePerStepCallback(u8 taskId)
|
||||
case 0:
|
||||
tPrevX = x;
|
||||
tPrevY = y;
|
||||
|
||||
|
||||
// If player is already standing on a log when the callback
|
||||
// is set then immediately set it to submerged
|
||||
TrySetLogBridgeFullySubmerged(x, y, TRUE);
|
||||
@ -424,7 +424,7 @@ static void PacifidlogBridgePerStepCallback(u8 taskId)
|
||||
{
|
||||
// If player's current position is a log submerge it fully.
|
||||
TrySetLogBridgeFullySubmerged(x, y, TRUE);
|
||||
|
||||
|
||||
// Player's previous position is not the other end of a log
|
||||
// they're standing on, try to raise their previous position.
|
||||
if (tToRaiseX != -1 && tToRaiseY != -1)
|
||||
@ -499,7 +499,7 @@ static void FortreeBridgePerStepCallback(u8 taskId)
|
||||
case 0:
|
||||
tPrevX = x;
|
||||
tPrevY = y;
|
||||
|
||||
|
||||
// If player is already on bridge when callback is set then lower it immediately.
|
||||
if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)))
|
||||
{
|
||||
@ -518,7 +518,7 @@ static void FortreeBridgePerStepCallback(u8 taskId)
|
||||
|
||||
isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y));
|
||||
isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(prevX, prevY));
|
||||
|
||||
|
||||
// Make sure player isn't below bridge
|
||||
elevation = PlayerGetElevation();
|
||||
onBridgeElevation = FALSE;
|
||||
@ -672,7 +672,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId)
|
||||
// End if player hasn't moved
|
||||
if (x == tPrevX && y == tPrevY)
|
||||
return;
|
||||
|
||||
|
||||
tPrevX = x;
|
||||
tPrevY = y;
|
||||
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
|
||||
|
@ -87,13 +87,13 @@ void InitMapFromSavedGame(void)
|
||||
|
||||
void InitBattlePyramidMap(bool8 setPlayerPosition)
|
||||
{
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
CpuFastFill16(MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
GenerateBattlePyramidFloorLayout(sBackupMapData, setPlayerPosition);
|
||||
}
|
||||
|
||||
void InitTrainerHillMap(void)
|
||||
{
|
||||
CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
CpuFastFill16(MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData));
|
||||
GenerateTrainerHillFloorLayout(sBackupMapData);
|
||||
}
|
||||
|
||||
@ -753,7 +753,7 @@ static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y)
|
||||
struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y)
|
||||
{
|
||||
int count;
|
||||
struct MapConnection *connection;
|
||||
@ -860,12 +860,13 @@ static void CopyTilesetToVramUsingHeap(struct Tileset const *tileset, u16 numTil
|
||||
}
|
||||
}
|
||||
|
||||
static void FieldmapPaletteDummy(u16 offset, u16 size)
|
||||
// Below two are dummied functions from FRLG, used to tint the overworld palettes for the Quest Log
|
||||
static void ApplyGlobalTintToPaletteEntries(u16 offset, u16 size)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void FieldmapUnkDummy(void)
|
||||
static void ApplyGlobalTintToPaletteSlot(u8 slot, u8 count)
|
||||
{
|
||||
|
||||
}
|
||||
@ -880,17 +881,17 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
|
||||
{
|
||||
LoadPalette(&black, destOffset, 2);
|
||||
LoadPalette(((u16 *)tileset->palettes) + 1, destOffset + 1, size - 2);
|
||||
FieldmapPaletteDummy(destOffset + 1, (size - 2) >> 1);
|
||||
ApplyGlobalTintToPaletteEntries(destOffset + 1, (size - 2) >> 1);
|
||||
}
|
||||
else if (tileset->isSecondary == TRUE)
|
||||
{
|
||||
LoadPalette(((u16 *)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
|
||||
FieldmapPaletteDummy(destOffset, size >> 1);
|
||||
ApplyGlobalTintToPaletteEntries(destOffset, size >> 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadCompressedPalette((u32 *)tileset->palettes, destOffset, size);
|
||||
FieldmapPaletteDummy(destOffset, size >> 1);
|
||||
ApplyGlobalTintToPaletteEntries(destOffset, size >> 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -457,7 +457,7 @@ static void CheckForHiddenItemsInMapConnection(u8 taskId)
|
||||
|| var2 > y
|
||||
|| y >= height)
|
||||
{
|
||||
struct MapConnection *conn = GetConnectionAtCoords(x, y);
|
||||
struct MapConnection *conn = GetMapConnectionAtPos(x, y);
|
||||
if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE)
|
||||
SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY);
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ struct SioInfo
|
||||
u8 filler[92];
|
||||
};
|
||||
|
||||
// Struct is mostly empty, presumably because usage of
|
||||
// Struct is mostly empty, presumably because usage of
|
||||
// its fields was largely removed before release
|
||||
struct RfuDebug
|
||||
{
|
||||
@ -1643,7 +1643,7 @@ bool32 RfuTryDisconnectLeavingChildren(void)
|
||||
{
|
||||
u8 childrenLeaving = 0;
|
||||
s32 i;
|
||||
|
||||
|
||||
// Check all children, get those waiting to be disconnected
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
{
|
||||
@ -2123,7 +2123,7 @@ void SetUnionRoomChatPlayerData(u32 numPlayers)
|
||||
// Only trainerId is shifted by the number of children, so the active flag and gender
|
||||
// are only ever set for the first child
|
||||
partnerInfo |= ((PINFO_ACTIVE_FLAG
|
||||
| ((gLinkPlayers[gRfu.linkPlayerIdx[i]].gender & 1) << PINFO_GENDER_SHIFT)
|
||||
| ((gLinkPlayers[gRfu.linkPlayerIdx[i]].gender & 1) << PINFO_GENDER_SHIFT)
|
||||
| (gLinkPlayers[gRfu.linkPlayerIdx[i]].trainerId & PINFO_TID_MASK)) << (numConnectedChildren * 8));
|
||||
numConnectedChildren++;
|
||||
if (numConnectedChildren == numPlayers - 1)
|
||||
@ -2477,7 +2477,7 @@ static void LinkManagerCB_UnionRoom(u8 msg, u8 paramCount)
|
||||
rfu_LMAN_stopManager(FALSE);
|
||||
}
|
||||
|
||||
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL
|
||||
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL
|
||||
&& !lman.pcswitch_flag
|
||||
&& FuncIsActiveTask(Task_UnionRoomListen) == TRUE)
|
||||
gRfu.state = RFUSTATE_UR_CONNECT;
|
||||
@ -2816,7 +2816,7 @@ static bool32 IsPartnerActivityIncompatible(s16 activity, struct RfuGameData *pa
|
||||
}
|
||||
else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM))
|
||||
{
|
||||
// Verify that the trade offered hasn't changed
|
||||
// Verify that the trade offered hasn't changed
|
||||
struct RfuGameData *original = &gRfu.parent;
|
||||
if (original->tradeSpecies == SPECIES_EGG)
|
||||
{
|
||||
|
@ -824,7 +824,7 @@ void UpdateWirelessStatusIndicatorSprite(void)
|
||||
struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId];
|
||||
u8 signalStrength = RFU_LINK_ICON_LEVEL4_MAX;
|
||||
u8 i = 0;
|
||||
|
||||
|
||||
// Get weakest signal strength
|
||||
if (gRfuLinkStatus->parentChild == MODE_PARENT)
|
||||
{
|
||||
|
@ -795,7 +795,7 @@ u8 MetatileBehavior_GetBridgeType(u8 metatileBehavior)
|
||||
&& metatileBehavior <= MB_BRIDGE_OVER_POND_HIGH)
|
||||
return metatileBehavior - MB_BRIDGE_OVER_OCEAN;
|
||||
|
||||
if (metatileBehavior >= MB_BRIDGE_OVER_POND_MED_EDGE_1
|
||||
if (metatileBehavior >= MB_BRIDGE_OVER_POND_MED_EDGE_1
|
||||
&& metatileBehavior <= MB_BRIDGE_OVER_POND_MED_EDGE_2)
|
||||
return BRIDGE_TYPE_POND_MED;
|
||||
|
||||
|
@ -171,8 +171,8 @@ static bool32 ValidateWonderCard(const struct WonderCard *card)
|
||||
return FALSE;
|
||||
if (card->type >= CARD_TYPE_COUNT)
|
||||
return FALSE;
|
||||
if (!(card->sendType == SEND_TYPE_DISALLOWED
|
||||
|| card->sendType == SEND_TYPE_ALLOWED
|
||||
if (!(card->sendType == SEND_TYPE_DISALLOWED
|
||||
|| card->sendType == SEND_TYPE_ALLOWED
|
||||
|| card->sendType == SEND_TYPE_ALLOWED_ALWAYS))
|
||||
return FALSE;
|
||||
if (card->bgType >= NUM_WONDER_BGS)
|
||||
@ -429,7 +429,7 @@ u32 MysteryGift_CompareCardFlags(const u16 *flagId, const struct MysteryGiftLink
|
||||
u32 MysteryGift_CheckStamps(const u16 *stamp, const struct MysteryGiftLinkGameData *data, const void *unused)
|
||||
{
|
||||
int stampsMissing = data->maxStamps - GetNumStampsInMetadata(&data->cardMetadata, data->maxStamps);
|
||||
|
||||
|
||||
// Has full stamp card?
|
||||
if (stampsMissing == 0)
|
||||
return 1;
|
||||
@ -598,7 +598,7 @@ void MysteryGift_TryIncrementStat(u32 stat, u32 trainerId)
|
||||
switch (stat)
|
||||
{
|
||||
case CARD_STAT_NUM_TRADES:
|
||||
IncrementCardStatForNewTrainer(CARD_STAT_NUM_TRADES,
|
||||
IncrementCardStatForNewTrainer(CARD_STAT_NUM_TRADES,
|
||||
trainerId,
|
||||
gSaveBlock1Ptr->mysteryGift.trainerIds[1],
|
||||
ARRAY_COUNT(gSaveBlock1Ptr->mysteryGift.trainerIds[1]));
|
||||
|
@ -1240,7 +1240,7 @@ static void Task_MysteryGift(u8 taskId)
|
||||
}
|
||||
else if (gSpecialVar_Result == LINKUP_FAILED)
|
||||
{
|
||||
// Link failed, return to link start menu
|
||||
// Link failed, return to link start menu
|
||||
ClearScreenInBg0(TRUE);
|
||||
data->state = MG_STATE_SOURCE_PROMPT;
|
||||
}
|
||||
|
@ -340,7 +340,7 @@ static void BufferCardText(void)
|
||||
if (sWonderCardData->card.idNumber > 999999)
|
||||
sWonderCardData->card.idNumber = 999999;
|
||||
ConvertIntToDecimalStringN(sWonderCardData->idNumberText, sWonderCardData->card.idNumber, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
|
||||
|
||||
// Copy body text
|
||||
for (i = 0; i < WONDER_CARD_BODY_TEXT_LINES; i++)
|
||||
{
|
||||
@ -364,12 +364,12 @@ static void BufferCardText(void)
|
||||
break;
|
||||
case CARD_TYPE_LINK_STAT:
|
||||
sWonderCardData->giftText[0] = EOS;
|
||||
|
||||
|
||||
// Load stats
|
||||
stats[0] = sWonderCardData->cardMetadata.battlesWon < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesWon : MAX_WONDER_CARD_STAT;
|
||||
stats[1] = sWonderCardData->cardMetadata.battlesLost < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.battlesLost : MAX_WONDER_CARD_STAT;
|
||||
stats[2] = sWonderCardData->cardMetadata.numTrades < MAX_WONDER_CARD_STAT ? sWonderCardData->cardMetadata.numTrades : MAX_WONDER_CARD_STAT;
|
||||
|
||||
|
||||
// Init stat text arrays
|
||||
for (i = 0; i < ARRAY_COUNT(sWonderCardData->statTextData); i++)
|
||||
{
|
||||
@ -446,7 +446,7 @@ static void DrawCardWindow(u8 whichWindow)
|
||||
sCard_FooterTextOffsets[sWonderCardData->card.type],
|
||||
sCard_TextColorTable[sWonderCardData->gfx->footerTextPal],
|
||||
0, sWonderCardData->footerLine1Text);
|
||||
|
||||
|
||||
// Print footer line 2
|
||||
if (sWonderCardData->card.type != CARD_TYPE_LINK_STAT)
|
||||
{
|
||||
@ -486,7 +486,7 @@ static void CreateCardSprites(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
sWonderCardData->monIconSpriteId = SPRITE_NONE;
|
||||
|
||||
|
||||
// Create icon sprite
|
||||
if (sWonderCardData->cardMetadata.iconSpecies != SPECIES_NONE)
|
||||
{
|
||||
@ -505,7 +505,7 @@ static void CreateCardSprites(void)
|
||||
sWonderCardData->stampSpriteIds[i][1] = SPRITE_NONE;
|
||||
sWonderCardData->stampSpriteIds[i][0] = CreateSprite(&sSpriteTemplate_StampShadow, 216 - 32 * i, 144, 8);
|
||||
if (sWonderCardData->cardMetadata.stampData[STAMP_SPECIES][i] != SPECIES_NONE)
|
||||
sWonderCardData->stampSpriteIds[i][1] = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.stampData[STAMP_SPECIES][i]),
|
||||
sWonderCardData->stampSpriteIds[i][1] = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.stampData[STAMP_SPECIES][i]),
|
||||
SpriteCallbackDummy,
|
||||
216 - 32 * i,
|
||||
136, 0);
|
||||
@ -520,7 +520,7 @@ static void DestroyCardSprites(void)
|
||||
// Destroy icon sprite
|
||||
if (sWonderCardData->monIconSpriteId != SPRITE_NONE)
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->monIconSpriteId]);
|
||||
|
||||
|
||||
// Destroy stamp sprites
|
||||
if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP)
|
||||
{
|
||||
@ -865,7 +865,7 @@ u32 WonderNews_GetInput(u16 input)
|
||||
static void BufferNewsText(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
|
||||
|
||||
// Copy title text
|
||||
memcpy(sWonderNewsData->titleText, sWonderNewsData->news.titleText, WONDER_NEWS_TEXT_LENGTH);
|
||||
sWonderNewsData->titleText[WONDER_NEWS_TEXT_LENGTH] = EOS;
|
||||
@ -896,7 +896,7 @@ static void DrawNewsWindows(void)
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[NEWS_WIN_TITLE], FONT_SHORT_COPY_1, x, 6, sNews_TextColorTable[sWonderNewsData->gfx->titleTextPal], 0, sWonderNewsData->titleText);
|
||||
|
||||
|
||||
// Print body text
|
||||
for (; i < WONDER_NEWS_BODY_TEXT_LINES; i++)
|
||||
AddTextPrinterParameterized3(sWonderNewsData->windowIds[NEWS_WIN_BODY], FONT_SHORT_COPY_1, 0,
|
||||
|
@ -560,7 +560,7 @@ static void DoAreaGlow(void)
|
||||
if (sPokedexAreaScreen->markerTimer > 12)
|
||||
{
|
||||
sPokedexAreaScreen->markerTimer = 0;
|
||||
|
||||
|
||||
// Flash the marker
|
||||
// With a max of 4, the marker will disappear twice
|
||||
sPokedexAreaScreen->markerFlashCounter++;
|
||||
@ -737,7 +737,7 @@ static void CreateAreaMarkerSprites(void)
|
||||
static void DestroyAreaScreenSprites(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
|
||||
// Destroy area marker sprites
|
||||
FreeSpriteTilesByTag(TAG_AREA_MARKER);
|
||||
FreeSpritePaletteByTag(TAG_AREA_MARKER);
|
||||
@ -772,7 +772,7 @@ static void CreateAreaUnknownSprites(void)
|
||||
|
||||
if (sPokedexAreaScreen->numOverworldAreas || sPokedexAreaScreen->numSpecialAreas)
|
||||
{
|
||||
// The current species is present on the map, don't create any "Area Unknown" sprites
|
||||
// The current species is present on the map, don't create any "Area Unknown" sprites
|
||||
for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaUnknownSprites); i++)
|
||||
sPokedexAreaScreen->areaUnknownSprites[i] = NULL;
|
||||
}
|
||||
|
@ -2952,7 +2952,7 @@ static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] =
|
||||
#define PP_UP_SHIFTS_INV(val) (u8)~(val), (u8)~((val) << 2), (u8)~((val) << 4), (u8)~((val) << 6)
|
||||
|
||||
// PP Up bonuses are stored for a Pokémon as a single byte.
|
||||
// There are 2 bits (a value 0-3) for each move slot that
|
||||
// There are 2 bits (a value 0-3) for each move slot that
|
||||
// represent how many PP Ups have been applied.
|
||||
// The following arrays take a move slot id and return:
|
||||
// gPPUpGetMask - A mask to get the number of PP Ups applied to that move slot
|
||||
@ -6066,7 +6066,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
||||
case 4: // ITEM5_PP_MAX
|
||||
dataUnsigned = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2);
|
||||
temp2 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex);
|
||||
|
||||
|
||||
// Check if 3 PP Ups have been applied already, and that the move has a total PP of at least 5 (excludes Sketch)
|
||||
if (dataUnsigned < 3 && temp2 >= 5)
|
||||
{
|
||||
@ -8043,7 +8043,7 @@ static bool8 ShouldSkipFriendshipChange(void)
|
||||
// Only the 'default' mode (MON_SPR_GFX_MODE_NORMAL) is used, which is set
|
||||
// up to allocate 4 sprites using the battler sprite templates (gBattlerSpriteTemplates).
|
||||
// MON_SPR_GFX_MODE_BATTLE is identical but never used.
|
||||
// MON_SPR_GFX_MODE_FULL_PARTY is set up to allocate 7 sprites (party + trainer?)
|
||||
// MON_SPR_GFX_MODE_FULL_PARTY is set up to allocate 7 sprites (party + trainer?)
|
||||
// using a generic 64x64 template, and is also never used.
|
||||
|
||||
// Between the unnecessarily large sizes below, a mistake allocating the spritePointers
|
||||
@ -8105,7 +8105,7 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode)
|
||||
gfx->dataSize = 1;
|
||||
gfx->mode = MON_SPR_GFX_MODE_FULL_PARTY;
|
||||
break;
|
||||
// case MON_SPR_GFX_MODE_BATTLE:
|
||||
// case MON_SPR_GFX_MODE_BATTLE:
|
||||
case MON_SPR_GFX_MODE_NORMAL:
|
||||
default:
|
||||
gfx->numSprites = MAX_BATTLERS_COUNT;
|
||||
|
@ -904,7 +904,7 @@ static void StartOptionAnimations_Enter(void)
|
||||
// Not selected, set default position
|
||||
x = OPTION_DEFAULT_X;
|
||||
}
|
||||
|
||||
|
||||
// Slide new options in
|
||||
StartOptionSlide(gfx->iconSprites[i], OPTION_EXIT_X, x, 12);
|
||||
SetOptionInvisibility(gfx->iconSprites[i], FALSE);
|
||||
|
@ -879,7 +879,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
mixMail = (void *)records + i * recordSize;
|
||||
|
||||
|
||||
// Count number of players that have at least
|
||||
// one daycare Pokémon with no held item
|
||||
if (canHoldItem[i][0] == TRUE || canHoldItem[i][1] == TRUE)
|
||||
@ -945,7 +945,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDaycareMail *records, size
|
||||
case 4:
|
||||
// 4 players can swap, select which 2 pairings will swap
|
||||
ptr = idxs;
|
||||
|
||||
|
||||
// Swap pair 1
|
||||
playerSlot1 = sDaycareMailSwapIds_4Player[tableId][0];
|
||||
playerSlot2 = sDaycareMailSwapIds_4Player[tableId][1];
|
||||
|
@ -127,7 +127,7 @@ void UpdateLocationHistoryForRoamer(void)
|
||||
void RoamerMoveToOtherLocationSet(void)
|
||||
{
|
||||
u8 mapNum = 0;
|
||||
|
||||
|
||||
if (!ROAMER->active)
|
||||
return;
|
||||
|
||||
@ -170,8 +170,8 @@ void RoamerMove(void)
|
||||
// Choose a new map (excluding the first) within this set
|
||||
// Also exclude a map if the roamer was there 2 moves ago
|
||||
mapNum = sRoamerLocations[locSet][(Random() % (NUM_LOCATIONS_PER_SET - 1)) + 1];
|
||||
if (!(sLocationHistory[2][MAP_GRP] == ROAMER_MAP_GROUP
|
||||
&& sLocationHistory[2][MAP_NUM] == mapNum)
|
||||
if (!(sLocationHistory[2][MAP_GRP] == ROAMER_MAP_GROUP
|
||||
&& sLocationHistory[2][MAP_NUM] == mapNum)
|
||||
&& mapNum != MAP_NUM(UNDEFINED))
|
||||
break;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
@ Note: ROM header data is empty space here.
|
||||
@ It's populated by gbafix using data provided in the Makefile.
|
||||
@ It's populated by gbafix using data provided in the Makefile.
|
||||
|
||||
.global Start
|
||||
Start:
|
||||
|
@ -913,7 +913,7 @@ u16 GetSaveBlocksPointersBaseOffset(void)
|
||||
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
|
||||
{
|
||||
ReadFlashSector(i + slotOffset, gReadWriteSector);
|
||||
|
||||
|
||||
// Base offset for SaveBlock2 is calculated using the trainer id
|
||||
if (gReadWriteSector->id == SECTOR_ID_SAVEBLOCK2)
|
||||
return sector->data[offsetof(struct SaveBlock2, playerTrainerId[0])] +
|
||||
|
@ -2057,15 +2057,15 @@ bool8 ScrCmd_setmetatile(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 x = VarGet(ScriptReadHalfword(ctx));
|
||||
u16 y = VarGet(ScriptReadHalfword(ctx));
|
||||
u16 tileId = VarGet(ScriptReadHalfword(ctx));
|
||||
u16 isImpassable = VarGet(ScriptReadHalfword(ctx));
|
||||
u16 metatileId = VarGet(ScriptReadHalfword(ctx));
|
||||
bool16 isImpassable = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
x += MAP_OFFSET;
|
||||
y += MAP_OFFSET;
|
||||
if (!isImpassable)
|
||||
MapGridSetMetatileIdAt(x, y, tileId);
|
||||
MapGridSetMetatileIdAt(x, y, metatileId);
|
||||
else
|
||||
MapGridSetMetatileIdAt(x, y, tileId | MAPGRID_COLLISION_MASK);
|
||||
MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_COLLISION_MASK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -213,9 +213,9 @@ void ScriptContext_Init(void)
|
||||
sGlobalScriptContextStatus = CONTEXT_SHUTDOWN;
|
||||
}
|
||||
|
||||
// Runs the script until the script makes a wait* call, then returns true if
|
||||
// there's more script to run, or false if the script has hit the end.
|
||||
// This function also returns false if the context is finished
|
||||
// Runs the script until the script makes a wait* call, then returns true if
|
||||
// there's more script to run, or false if the script has hit the end.
|
||||
// This function also returns false if the context is finished
|
||||
// or waiting (after a call to _Stop)
|
||||
bool8 ScriptContext_RunScript(void)
|
||||
{
|
||||
|
@ -1880,7 +1880,7 @@ static u8 TrySelectBias_Regular(void)
|
||||
{
|
||||
s16 rval = Random() & 0xff;
|
||||
s16 value = sBiasProbabilities_Regular[whichBias][sSlotMachine->machineId];
|
||||
|
||||
|
||||
// Boost odds of BIAS_POWER if it's a lucky game.
|
||||
if (whichBias == 0 && sSlotMachine->luckyGame == TRUE)
|
||||
{
|
||||
@ -3668,7 +3668,7 @@ static void ReelTime_CheckExplode(struct Task *task)
|
||||
if (sSlotMachine->reelTimeDraw)
|
||||
{
|
||||
if (sSlotMachine->reelTimeSpinsLeft <= task->tExplodeChecks)
|
||||
task->tState++; // RT_TASK_LAND
|
||||
task->tState++; // RT_TASK_LAND
|
||||
}
|
||||
else if (task->tExplodeChecks > 3)
|
||||
{
|
||||
@ -5309,7 +5309,7 @@ static const u8 sSpecialDrawOdds[NUM_SLOT_MACHINE_IDS][MAX_BET] = {
|
||||
};
|
||||
|
||||
static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS] = {
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_STRAIGHT_7
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 25,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5318,7 +5318,7 @@ static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 40,
|
||||
[SLOT_MACHINE_LUCKIEST] = 50
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_REELTIME
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 25,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5327,7 +5327,7 @@ static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 35,
|
||||
[SLOT_MACHINE_LUCKIEST] = 35
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_MIXED_7
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 25,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5339,7 +5339,7 @@ static const u8 sBiasProbabilities_Special[][NUM_SLOT_MACHINE_IDS] = {
|
||||
};
|
||||
|
||||
static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = {
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_POWER
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 20,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5348,7 +5348,7 @@ static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 25,
|
||||
[SLOT_MACHINE_LUCKIEST] = 25
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_AZURILL
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 12,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 15,
|
||||
@ -5357,7 +5357,7 @@ static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 19,
|
||||
[SLOT_MACHINE_LUCKIEST] = 22
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_LOTAD
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 25,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5366,7 +5366,7 @@ static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 30,
|
||||
[SLOT_MACHINE_LUCKIEST] = 40
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_CHERRY
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 25,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 25,
|
||||
@ -5375,7 +5375,7 @@ static const u8 sBiasProbabilities_Regular[][NUM_SLOT_MACHINE_IDS] = {
|
||||
[SLOT_MACHINE_LUCKIER] = 15,
|
||||
[SLOT_MACHINE_LUCKIEST] = 15
|
||||
},
|
||||
{
|
||||
{
|
||||
// Probabilities for BIAS_REPLAY
|
||||
[SLOT_MACHINE_UNLUCKIEST] = 40,
|
||||
[SLOT_MACHINE_UNLUCKIER] = 40,
|
||||
|
@ -2461,7 +2461,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf
|
||||
else
|
||||
{
|
||||
// Player's Pokémon must be of the type the partner requested
|
||||
if (gBaseStats[playerSpecies2].type1 != requestedType
|
||||
if (gBaseStats[playerSpecies2].type1 != requestedType
|
||||
&& gBaseStats[playerSpecies2].type2 != requestedType)
|
||||
return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS;
|
||||
}
|
||||
|
8
src/tv.c
8
src/tv.c
@ -2042,7 +2042,7 @@ static void SecretBaseVisit_CalculatePartyData(TVShow *show)
|
||||
{
|
||||
sTV_SecretBaseVisitMonsTemp[numPokemon].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
|
||||
sTV_SecretBaseVisitMonsTemp[numPokemon].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
|
||||
|
||||
|
||||
// Check all the Pokémon's moves, then randomly select one to save
|
||||
numMoves = 0;
|
||||
move = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1);
|
||||
@ -2077,7 +2077,7 @@ static void SecretBaseVisit_CalculatePartyData(TVShow *show)
|
||||
for (i = 0, sum = 0; i < numPokemon; i++)
|
||||
sum += sTV_SecretBaseVisitMonsTemp[i].level;
|
||||
|
||||
// Using the data calculated above, save the data to talk about on the show
|
||||
// Using the data calculated above, save the data to talk about on the show
|
||||
// (average level, and one randomly selected species / move)
|
||||
show->secretBaseVisit.avgLevel = sum / numPokemon;
|
||||
j = Random() % numPokemon;
|
||||
@ -2621,7 +2621,7 @@ void DoPokeNews(void)
|
||||
// News event is upcoming, make comment about countdown to event
|
||||
u16 dayCountdown = gSaveBlock1Ptr->pokeNews[i].dayCountdown;
|
||||
ConvertIntToDecimalStringN(gStringVar1, dayCountdown, STR_CONV_MODE_LEFT_ALIGN, 1);
|
||||
|
||||
|
||||
// Mark as inactive so the countdown TV airing doesn't repeat
|
||||
// Will be flagged as "upcoming" again by UpdatePokeNewsCountdown
|
||||
gSaveBlock1Ptr->pokeNews[i].state = POKENEWS_STATE_INACTIVE;
|
||||
@ -2826,7 +2826,7 @@ static bool8 IsRecordMixShowAlreadySpawned(u8 kind, bool8 delete)
|
||||
static void SortPurchasesByQuantity(void)
|
||||
{
|
||||
u8 i, j;
|
||||
|
||||
|
||||
for (i = 0; i < SMARTSHOPPER_NUM_ITEMS - 1; i++)
|
||||
{
|
||||
for (j = i + 1; j < SMARTSHOPPER_NUM_ITEMS; j++)
|
||||
|
@ -569,7 +569,7 @@ bool32 TryInteractWithUnionRoomMember(struct RfuPlayerList *list, s16 *memberIdP
|
||||
for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++)
|
||||
{
|
||||
s32 id = UR_PLAYER_SPRITE_ID(i, memberId);
|
||||
|
||||
|
||||
// Is the player in front of a group member position?
|
||||
if (x != sUnionRoomPlayerCoords[i][0] + sUnionRoomGroupOffsets[memberId][0] + 7)
|
||||
continue;
|
||||
|
@ -174,7 +174,7 @@ static bool32 TryCalculateWallpaper(u16 *backgroundClr, u16 *foregroundClr, u8 *
|
||||
if (GetWallpaperDataBits(data, 0, 3) != GetWallpaperDataBits(charsByTableId, TO_BIT_OFFSET(WALDA_PHRASE_LENGTH - 1) + 2, 3))
|
||||
return FALSE;
|
||||
|
||||
// Perform some relatively arbitrary changes to the wallpaper data using the last byte (KEY)
|
||||
// Perform some relatively arbitrary changes to the wallpaper data using the last byte (KEY)
|
||||
RotateWallpaperDataLeft(data, NUM_WALLPAPER_DATA_BYTES, 21);
|
||||
RotateWallpaperDataLeft(data, NUM_WALLPAPER_DATA_BYTES - 1, KEY & 0xF);
|
||||
MaskWallpaperData(data, NUM_WALLPAPER_DATA_BYTES - 1, KEY >> 4);
|
||||
|
@ -68,7 +68,7 @@ static const struct WildPokemon sWildFeebas = {20, 25, SPECIES_FEEBAS};
|
||||
|
||||
static const u16 sRoute119WaterTileData[] =
|
||||
{
|
||||
//yMin, yMax, numSpots in previous sections
|
||||
//yMin, yMax, numSpots in previous sections
|
||||
0, 45, 0,
|
||||
46, 91, NUM_FISHING_SPOTS_1,
|
||||
92, 139, NUM_FISHING_SPOTS_1 + NUM_FISHING_SPOTS_2,
|
||||
@ -146,7 +146,7 @@ static bool8 CheckFeebas(void)
|
||||
feebasSpots[i] = FeebasRandom() % NUM_FISHING_SPOTS;
|
||||
if (feebasSpots[i] == 0)
|
||||
feebasSpots[i] = NUM_FISHING_SPOTS;
|
||||
|
||||
|
||||
// < 1 below is a pointless check, it will never be TRUE.
|
||||
// >= 4 to skip fishing spots 1-3, because these are inaccessible
|
||||
// spots at the top of the map, at (9,7), (7,13), and (15,16).
|
||||
|
@ -76,7 +76,7 @@ u16 RetrieveWonderNewsVal(void)
|
||||
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
|
||||
u16 newsVal;
|
||||
|
||||
// Checks if Mystery Event is enabled, not Mystery Gift?
|
||||
// Checks if Mystery Event is enabled, not Mystery Gift?
|
||||
if (!IsMysteryEventEnabled() || !ValidateSavedWonderNews())
|
||||
return 0;
|
||||
|
||||
|
@ -53,9 +53,9 @@ gReservedSpritePaletteCount:
|
||||
.include "tv.o"
|
||||
.include "mauville_old_man.o"
|
||||
.include "image_processing_effects.o"
|
||||
|
||||
|
||||
.space 0x4
|
||||
|
||||
|
||||
.include "contest_painting.o"
|
||||
.include "field_specials.o"
|
||||
.include "evolution_scene.o"
|
||||
@ -66,12 +66,12 @@ gReservedSpritePaletteCount:
|
||||
.include "battle_anim_throw.o"
|
||||
.include "battle_factory_screen.o"
|
||||
.include "apprentice.o"
|
||||
|
||||
|
||||
.space 0x8
|
||||
|
||||
|
||||
.include "list_menu.o"
|
||||
.include "party_menu.o"
|
||||
|
||||
|
||||
.space 0x44
|
||||
|
||||
.include "ereader_screen.o"
|
||||
|
Loading…
Reference in New Issue
Block a user