Merge remote-tracking branch 'RHH_origin/upcoming' into RHH/pr/feature/Lures

# Conflicts:
#	src/pokemon.c
This commit is contained in:
Eduardo Quezada 2022-10-30 12:16:09 -03:00
commit 3172273c73
429 changed files with 13567 additions and 20206 deletions

3
.gitignore vendored
View File

@ -30,7 +30,8 @@ build/
.DS_Store .DS_Store
*.ddump *.ddump
.idea/ .idea/
porymap.project.cfg porymap.*.cfg
prefabs.json
.vscode/ .vscode/
*.a *.a
.fuse_hidden* .fuse_hidden*

View File

@ -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 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 > Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
</details> </details>
If this works, then proceed to [Installation](#installation). 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). 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 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 > Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
</details> </details>
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
## macOS ## macOS
@ -539,7 +539,7 @@ devkitARM is now installed.
devkitARM is now installed. devkitARM is now installed.
### Installing devkitARM on Arch Linux ### 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. 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. 2. Install `gba-dev`: run the following command as root.

View File

@ -254,7 +254,7 @@ tidynonmodern:
tidymodern: tidymodern:
rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME)
rm -rf $(MODERN_OBJ_DIR_NAME) rm -rf $(MODERN_OBJ_DIR_NAME)
ifneq ($(MODERN),0) ifneq ($(MODERN),0)
$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member
endif 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 LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld
else else
LD_SCRIPT := ld_script_modern.txt LD_SCRIPT := ld_script_modern.txt
LD_SCRIPT_DEPS := LD_SCRIPT_DEPS :=
endif endif
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)

View File

@ -558,151 +558,151 @@
.2byte \param1 .2byte \param1
.4byte \param2 .4byte \param2
.endm .endm
.macro get_ally_chosen_move .macro get_ally_chosen_move
.byte 0x63 .byte 0x63
.endm .endm
.macro if_has_no_attacking_moves battler:req, param1:req .macro if_has_no_attacking_moves battler:req, param1:req
.byte 0x64 .byte 0x64
.byte \battler .byte \battler
.4byte \param1 .4byte \param1
.endm .endm
.macro get_hazards_count battler:req, effect:req .macro get_hazards_count battler:req, effect:req
.byte 0x65 .byte 0x65
.byte \battler .byte \battler
.2byte \effect .2byte \effect
.endm .endm
.macro if_doesnt_hold_berry battler:req, ptr:req .macro if_doesnt_hold_berry battler:req, ptr:req
.byte 0x66 .byte 0x66
.byte \battler .byte \battler
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_share_type battler1:req, battler2:req, ptr:req .macro if_share_type battler1:req, battler2:req, ptr:req
.byte 0x67 .byte 0x67
.byte \battler1 .byte \battler1
.byte \battler2 .byte \battler2
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_cant_use_last_resort battler:req, ptr:req .macro if_cant_use_last_resort battler:req, ptr:req
.byte 0x68 .byte 0x68
.byte \battler .byte \battler
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_has_move_with_split battler:req, split:req, ptr:req .macro if_has_move_with_split battler:req, split:req, ptr:req
.byte 0x69 .byte 0x69
.byte \battler .byte \battler
.byte \split .byte \split
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_has_no_move_with_split battler:req, split:req, ptr:req .macro if_has_no_move_with_split battler:req, split:req, ptr:req
.byte 0x6A .byte 0x6A
.byte \battler .byte \battler
.byte \split .byte \split
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_physical_moves_unusable attacker:req, target:req, ptr:req .macro if_physical_moves_unusable attacker:req, target:req, ptr:req
.byte 0x6B .byte 0x6B
.byte \attacker .byte \attacker
.byte \target .byte \target
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_ai_can_go_down ptr:req .macro if_ai_can_go_down ptr:req
.byte 0x6C .byte 0x6C
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_has_move_with_type battler:req, type:req, ptr:req .macro if_has_move_with_type battler:req, type:req, ptr:req
.byte 0x6D .byte 0x6D
.byte \battler .byte \battler
.byte \type .byte \type
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_no_move_used battler:req, ptr:req .macro if_no_move_used battler:req, ptr:req
.byte 0x6E .byte 0x6E
.byte \battler .byte \battler
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_has_move_with_flag battler:req, flag:req, ptr:req .macro if_has_move_with_flag battler:req, flag:req, ptr:req
.byte 0x6F .byte 0x6F
.byte \battler .byte \battler
.4byte \flag .4byte \flag
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_battler_absent battler:req, ptr:req .macro if_battler_absent battler:req, ptr:req
.byte 0x70 .byte 0x70
.byte \battler .byte \battler
.4byte \ptr .4byte \ptr
.endm .endm
.macro if_grounded battler:req, ptr:req .macro if_grounded battler:req, ptr:req
.byte 0x71 .byte 0x71
.byte \battler .byte \battler
.4byte \ptr .4byte \ptr
.endm .endm
.macro get_best_dmg_hp_percent .macro get_best_dmg_hp_percent
.byte 0x72 .byte 0x72
.endm .endm
.macro get_curr_dmg_hp_percent .macro get_curr_dmg_hp_percent
.byte 0x73 .byte 0x73
.endm .endm
.macro get_move_split_from_result .macro get_move_split_from_result
.byte 0x74 .byte 0x74
.endm .endm
.macro get_considered_move_split .macro get_considered_move_split
.byte 0x75 .byte 0x75
.endm .endm
.macro get_considered_move_target .macro get_considered_move_target
.byte 0x76 .byte 0x76
.endm .endm
.macro compare_speeds battler1:req, battler2:req .macro compare_speeds battler1:req, battler2:req
.byte 0x77 .byte 0x77
.byte \battler1 .byte \battler1
.byte \battler2 .byte \battler2
.endm .endm
.macro is_wakeup_turn battler:req .macro is_wakeup_turn battler:req
.byte 0x78 .byte 0x78
.byte \battler .byte \battler
.endm .endm
.macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req .macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req
.byte 0x79 .byte 0x79
.byte \battler .byte \battler
.byte \value .byte \value
.4byte \ptr .4byte \ptr
.endm .endm
@ useful script macros @ useful script macros
.macro if_has_physical_move battler:req, ptr:req .macro if_has_physical_move battler:req, ptr:req
if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr
.endm .endm
.macro if_has_no_physical_move battler:req, ptr:req .macro if_has_no_physical_move battler:req, ptr:req
if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr
.endm .endm
.macro if_has_special_move battler:req, ptr:req .macro if_has_special_move battler:req, ptr:req
if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr
.endm .endm
.macro if_has_no_special_move battler:req, ptr:req .macro if_has_no_special_move battler:req, ptr:req
if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr
.endm .endm
@ -714,33 +714,33 @@
.macro get_curr_move_type .macro get_curr_move_type
get_type AI_TYPE_MOVE get_type AI_TYPE_MOVE
.endm .endm
.macro get_user_type1 .macro get_user_type1
get_type AI_TYPE1_USER get_type AI_TYPE1_USER
.endm .endm
.macro get_user_type2 .macro get_user_type2
get_type AI_TYPE2_USER get_type AI_TYPE2_USER
.endm .endm
.macro get_target_type1 .macro get_target_type1
get_type AI_TYPE1_TARGET get_type AI_TYPE1_TARGET
.endm .endm
.macro get_target_type2 .macro get_target_type2
get_type AI_TYPE2_TARGET get_type AI_TYPE2_TARGET
.endm .endm
.macro if_ability battler:req, ability:req, ptr:req .macro if_ability battler:req, ability:req, ptr:req
check_ability \battler, \ability check_ability \battler, \ability
if_equal 1, \ptr if_equal 1, \ptr
.endm .endm
.macro if_no_ability battler:req, ability:req, ptr:req .macro if_no_ability battler:req, ability:req, ptr:req
check_ability \battler, \ability check_ability \battler, \ability
if_equal 0, \ptr if_equal 0, \ptr
.endm .endm
.macro if_type battler:req, type:req, ptr:req .macro if_type battler:req, type:req, ptr:req
is_of_type \battler, \type is_of_type \battler, \type
if_equal 1, \ptr if_equal 1, \ptr
@ -750,20 +750,20 @@
is_of_type \battler, \type is_of_type \battler, \type
if_equal 0, \ptr if_equal 0, \ptr
.endm .endm
.macro if_target_faster ptr:req .macro if_target_faster ptr:req
if_user_goes 1, \ptr if_user_goes 1, \ptr
.endm .endm
.macro if_user_faster ptr:req .macro if_user_faster ptr:req
if_user_goes 0, \ptr if_user_goes 0, \ptr
.endm .endm
.macro if_double_battle ptr:req .macro if_double_battle ptr:req
is_double_battle is_double_battle
if_equal 1, \ptr if_equal 1, \ptr
.endm .endm
.macro if_not_double_battle ptr:req .macro if_not_double_battle ptr:req
is_double_battle is_double_battle
if_equal 0, \ptr if_equal 0, \ptr
@ -772,11 +772,11 @@
.macro if_any_move_disabled battler:req, ptr:req .macro if_any_move_disabled battler:req, ptr:req
if_any_move_disabled_or_encored \battler, 0, \ptr if_any_move_disabled_or_encored \battler, 0, \ptr
.endm .endm
.macro if_any_move_encored battler:req, ptr:req .macro if_any_move_encored battler:req, ptr:req
if_any_move_disabled_or_encored \battler, 1, \ptr if_any_move_disabled_or_encored \battler, 1, \ptr
.endm .endm
.macro call_if_always_hit ptr:req .macro call_if_always_hit ptr:req
get_move_accuracy get_move_accuracy
call_if_eq 0, \ptr call_if_eq 0, \ptr

View File

@ -270,20 +270,20 @@
.macro stopsound .macro stopsound
.byte 0x2f .byte 0x2f
.endm .endm
@ useful macros @ useful macros
.macro jumpreteq value:req, ptr:req .macro jumpreteq value:req, ptr:req
jumpargeq ARG_RET_ID, \value, \ptr jumpargeq ARG_RET_ID, \value, \ptr
.endm .endm
.macro jumprettrue ptr:req .macro jumprettrue ptr:req
jumpreteq TRUE, \ptr jumpreteq TRUE, \ptr
.endm .endm
.macro jumpretfalse ptr:req .macro jumpretfalse ptr:req
jumpreteq FALSE, \ptr jumpreteq FALSE, \ptr
.endm .endm
.macro jumpifdoublebattle ptr:req .macro jumpifdoublebattle ptr:req
createvisualtask AnimTask_IsDoubleBattle, 0 createvisualtask AnimTask_IsDoubleBattle, 0
jumprettrue \ptr jumprettrue \ptr
@ -305,7 +305,7 @@
.hword \launchtemplatearg7 .hword \launchtemplatearg7
.hword \launchtemplatearg8 .hword \launchtemplatearg8
.endm .endm
.macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8 .macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8
.byte 0x3 .byte 0x3
.word \launchtaskPtr .word \launchtaskPtr
@ -321,7 +321,7 @@
.hword \launchtaskarg7 .hword \launchtaskarg7
.hword \launchtaskarg8 .hword \launchtaskarg8
.endm .endm
.macro setblends setblends_value .macro setblends setblends_value
.byte 0xC .byte 0xC
.hword \setblends_value .hword \setblends_value

View File

@ -89,15 +89,15 @@
setvar VAR_0x8004, BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA setvar VAR_0x8004, BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA
special CallBattleTowerFunc special CallBattleTowerFunc
.endm .endm
@Custom multi-battle commands @Custom multi-battle commands
.macro choose_mons .macro choose_mons
fadescreen 1 fadescreen 1
special ChooseHalfPartyForBattle @ choose 3 mons for battle special ChooseHalfPartyForBattle @ choose 3 mons for battle
waitstate waitstate
.endm .endm
.macro multi_do type:req, partnerId:req, partnerPicId:req .macro multi_do type:req, partnerId:req, partnerPicId:req
special ReducePlayerPartyToSelectedMons special ReducePlayerPartyToSelectedMons
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA
@ -113,26 +113,26 @@
special CallFrontierUtilFunc special CallFrontierUtilFunc
special LoadPlayerParty special LoadPlayerParty
.endm .endm
.macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
.endm .endm
.macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
.endm .endm
@ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
.macro multi_wild partnerId:req, partnerPicId:req .macro multi_wild partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty
multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId
.endm .endm
.macro multi_do_fixed type:req, partnerId:req, partnerPicId:req .macro multi_do_fixed type:req, partnerId:req, partnerPicId:req
setvar VAR_0x8004, SPECIAL_BATTLE_MULTI setvar VAR_0x8004, SPECIAL_BATTLE_MULTI
setvar VAR_0x8005, \type setvar VAR_0x8005, \type
@ -144,20 +144,20 @@
special CallFrontierUtilFunc special CallFrontierUtilFunc
special LoadPlayerParty special LoadPlayerParty
.endm .endm
.macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
.endm .endm
.macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
.endm .endm
@ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out. @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
.macro multi_fixed_wild partnerId:req, partnerPicId:req .macro multi_fixed_wild partnerId:req, partnerPicId:req
special SavePlayerParty special SavePlayerParty

View File

@ -1788,7 +1788,7 @@
.macro setzeffect .macro setzeffect
various BS_ATTACKER, VARIOUS_SET_Z_EFFECT various BS_ATTACKER, VARIOUS_SET_Z_EFFECT
.endm .endm
.macro consumeberry battler:req, restoreItem=FALSE .macro consumeberry battler:req, restoreItem=FALSE
various \battler, VARIOUS_CONSUME_BERRY various \battler, VARIOUS_CONSUME_BERRY
.byte \restoreItem .byte \restoreItem
@ -1980,6 +1980,14 @@
various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES
.endm .endm
.macro canteleport battler:req
various \battler, VARIOUS_CAN_TELEPORT
.endm
.macro getbattlerside battler:req
various \battler, VARIOUS_GET_BATTLER_SIDE
.endm
@ helpful macros @ helpful macros
.macro setstatchanger stat:req, stages:req, down:req .macro setstatchanger stat:req, stages:req, down:req
setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7
@ -2132,3 +2140,8 @@
.macro skydropyawn .macro skydropyawn
various 0, VARIOUS_SKY_DROP_YAWN various 0, VARIOUS_SKY_DROP_YAWN
.endm .endm
@ Used by effects that may proc Symbiosis but do not call removeitem.
.macro trysymbiosis
various BS_ATTACKER, VARIOUS_TRY_SYMBIOSIS
.endm

View File

@ -276,7 +276,7 @@
.2byte SPECIAL_\function .2byte SPECIAL_\function
.endm .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. @ commands and specials. Calling ScriptContext_Enable for instance will allow execution to continue.
.macro waitstate .macro waitstate
.byte 0x27 .byte 0x27
@ -985,7 +985,7 @@
.endm .endm
@ Gives the player a Pokémon of the specified species and level, holding the specified item. The trailing 0s are unused parameters. @ 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 .macro givemon species:req, level:req, item=ITEM_NONE
.byte 0x79 .byte 0x79
.2byte \species .2byte \species
@ -997,7 +997,7 @@
.endm .endm
@ Gives the player an Egg of the specified species. @ 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 .macro giveegg species:req
.byte 0x7a .byte 0x7a
.2byte \species .2byte \species
@ -1415,7 +1415,7 @@
.2byte \out .2byte \out
.endm .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. @ If the player already has MAX_COINS then VAR_RESULT is set to TRUE, otherwise it is set to FALSE.
.macro addcoins count:req .macro addcoins count:req
.byte 0xb4 .byte 0xb4
@ -1893,7 +1893,7 @@
@ Gives 'amount' of the specified 'item' to the player and prints a message with fanfare. @ 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 @ 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). @ Otherwise VAR_RESULT is set to TRUE, and the message indicates they have received the item(s).
.macro giveitem item:req, amount=1 .macro giveitem item:req, amount=1
setorcopyvar VAR_0x8000, \item setorcopyvar VAR_0x8000, \item

View File

@ -150,13 +150,13 @@
.4byte \sample .4byte \sample
.byte 0xff, 0, 0xff, 0 .byte 0xff, 0, 0xff, 0
.endm .endm
.macro cry_uncomp sample @ not compressed .macro cry_uncomp sample @ not compressed
.byte 0x0, 60, 0, 0 .byte 0x0, 60, 0, 0
.4byte \sample .4byte \sample
.byte 0xff, 0, 0xff, 0 .byte 0xff, 0, 0xff, 0
.endm .endm
.macro cry_reverse_uncomp sample @ not compressed .macro cry_reverse_uncomp sample @ not compressed
.byte 0x10, 60, 0, 0 .byte 0x10, 60, 0, 0
.4byte \sample .4byte \sample

View File

@ -79,6 +79,7 @@ SUPER_RE = A0
'?' = AC '?' = AC
'.' = AD '.' = AD
'-' = AE '-' = AE
'_' = AE @ For autogenerating strings based on label names. Not using {UNDERSCORE} on purpose due to how bad it looks.
'·' = AF '·' = AF
'…' = B0 '…' = B0
'“' = B1 '“' = B1

View File

@ -2987,21 +2987,26 @@ Move_MUD_BOMB:
end end
Move_PSYCHO_CUT: Move_PSYCHO_CUT:
loadspritegfx ANIM_TAG_SPIRAL loadspritegfx ANIM_TAG_SPIRAL
loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_PSYCHO_CUT
monbg ANIM_ATK_PARTNER loadspritegfx ANIM_TAG_CROSS_IMPACT
monbg ANIM_ATK_PARTNER
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CROSS_IMPACT, 0, 9, 9, RGB_PURPLE
createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 2, ANIM_ATTACKER
createsprite gPsychoCutSpiralSpriteTemplate, 2, 4, 0, 0, 0, 0 createsprite gPsychoCutSpiralSpriteTemplate, 2, 4, 0, 0, 0, 0
createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 0, 4, RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 0, 4, RGB_BLACK
createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 0, 10, RGB(20, 12, 23) createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 0, 10, RGB(20, 12, 23)
delay 30 delay 30
clearmonbg ANIM_ATK_PARTNER clearmonbg ANIM_ATK_PARTNER
waitforvisualfinish waitforvisualfinish
monbg ANIM_TARGET monbg ANIM_TARGET
splitbgprio ANIM_TARGET splitbgprio ANIM_TARGET
setalpha 12, 8 setalpha 12, 8
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER,
createsprite gPsychoCutSpriteTemplate, 130, 5, 20, 0, -8, 0, 20 createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20
waitforvisualfinish waitforvisualfinish
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1
createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20
createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK
createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 10, 0, RGB(20, 12, 23) createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 10, 0, RGB(20, 12, 23)
clearmonbg ANIM_TARGET clearmonbg ANIM_TARGET
@ -14196,7 +14201,7 @@ TerrainPulseElectric:
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 27, 0) createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 27, 0)
goto TerrainPulseEnd goto TerrainPulseEnd
TerrainPulseGrass: TerrainPulseGrass:
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(11, 26, 11) createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(11, 26, 11)
waitforvisualfinish waitforvisualfinish
@ -14218,7 +14223,7 @@ TerrainPulseFairy:
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 24, 31) createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 24, 31)
goto TerrainPulseEnd goto TerrainPulseEnd
TerrainPulsePsychic: TerrainPulsePsychic:
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 0, 13) createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 0, 13)
waitforvisualfinish waitforvisualfinish
@ -24740,7 +24745,7 @@ General_RestoreBg:
restorebg restorebg
waitbgfadein waitbgfadein
end end
end end
General_ZMoveActivate: General_ZMoveActivate:
@ -24839,15 +24844,15 @@ General_PrimalReversion::
jumpargeq 0x1, ITEM_BLUE_ORB, General_PrimalReversion_Alpha jumpargeq 0x1, ITEM_BLUE_ORB, General_PrimalReversion_Alpha
General_PrimalReversion_Alpha: General_PrimalReversion_Alpha:
loadspritegfx ANIM_TAG_ALPHA_STONE loadspritegfx ANIM_TAG_ALPHA_STONE
loadspritegfx ANIM_TAG_PRIMAL_PARTICLES loadspritegfx ANIM_TAG_MEGA_PARTICLES
loadspritegfx ANIM_TAG_ALPHA_SYMBOL loadspritegfx ANIM_TAG_ALPHA_SYMBOL
monbg ANIM_ATTACKER monbg ANIM_ATTACKER
setalpha 12, 8 setalpha 12, 8
loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11)
call PrimalReversionParticles call MegaEvolutionParticles
call PrimalReversionParticles call MegaEvolutionParticles
call PrimalReversionParticles call MegaEvolutionParticles
waitforvisualfinish waitforvisualfinish
playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
createsprite gAlphaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 createsprite gAlphaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
@ -24865,15 +24870,15 @@ General_PrimalReversion_Alpha:
end end
General_PrimalReversion_Omega: General_PrimalReversion_Omega:
loadspritegfx ANIM_TAG_OMEGA_STONE loadspritegfx ANIM_TAG_OMEGA_STONE
loadspritegfx ANIM_TAG_PRIMAL_PARTICLES loadspritegfx ANIM_TAG_MEGA_PARTICLES
loadspritegfx ANIM_TAG_OMEGA_SYMBOL loadspritegfx ANIM_TAG_OMEGA_SYMBOL
monbg ANIM_ATTACKER monbg ANIM_ATTACKER
setalpha 12, 8 setalpha 12, 8
loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3
createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11)
call PrimalReversionParticles call MegaEvolutionParticles
call PrimalReversionParticles call MegaEvolutionParticles
call PrimalReversionParticles call MegaEvolutionParticles
waitforvisualfinish waitforvisualfinish
playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
createsprite gOmegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 createsprite gOmegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
@ -24889,22 +24894,6 @@ General_PrimalReversion_Omega:
clearmonbg ANIM_ATK_PARTNER clearmonbg ANIM_ATK_PARTNER
blendoff blendoff
end end
PrimalReversionParticles:
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13
delay 3
createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13
delay 3
return
General_AffectionHangedOn:: General_AffectionHangedOn::
loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_RED_HEART
@ -25263,8 +25252,8 @@ FinishSupersonicSkystrike:
call UnsetPsychicBg call UnsetPsychicBg
waitforvisualfinish waitforvisualfinish
end end
Move_ACID_DOWNPOUR: Move_ACID_DOWNPOUR:
loadspritegfx ANIM_TAG_BLUE_ORB @ reversal loadspritegfx ANIM_TAG_BLUE_ORB @ reversal
loadspritegfx ANIM_TAG_POISON_JAB @ poison jab loadspritegfx ANIM_TAG_POISON_JAB @ poison jab
@ -25951,7 +25940,7 @@ NeverendingNightmareGeyser:
createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
return return
Move_CORKSCREW_CRASH:: Move_CORKSCREW_CRASH::
loadspritegfx ANIM_TAG_SPIKES @metal bits loadspritegfx ANIM_TAG_SPIKES @metal bits
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
@ -26669,7 +26658,7 @@ HavocSpearSparkTarget:
@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 @ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000 launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000
return return
Move_SHATTERED_PSYCHE:: Move_SHATTERED_PSYCHE::
loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_IMPACT @hit
@ -29127,7 +29116,7 @@ OceanicOperettaExplosion:
launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1 launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1
delay 0x6 delay 0x6
return return
Move_SPLINTERED_STORMSHARDS:: Move_SPLINTERED_STORMSHARDS::
loadspritegfx ANIM_TAG_ROCKS @rock loadspritegfx ANIM_TAG_ROCKS @rock
@ -29388,7 +29377,7 @@ SplinteredStormshardsFinishFadeReturn:
return return
Move_LETS_SNUGGLE_FOREVER:: Move_LETS_SNUGGLE_FOREVER::
loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm
loadspritegfx ANIM_TAG_MUSIC_NOTES @music note loadspritegfx ANIM_TAG_MUSIC_NOTES @music note
loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears
@ -30467,11 +30456,11 @@ LightThatBurnsTheSkyGreenSparks:
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x2 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3 launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x2 0x3
delay 0x10 delay 0x10
return return

View File

@ -511,7 +511,7 @@ BattleScript_BeakBlastSetUp::
setbeakblast BS_ATTACKER setbeakblast BS_ATTACKER
printstring STRINGID_EMPTYSTRING3 printstring STRINGID_EMPTYSTRING3
waitmessage 1 waitmessage 1
playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL
printstring STRINGID_HEATUPBEAK printstring STRINGID_HEATUPBEAK
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
end2 end2
@ -601,7 +601,7 @@ BattleScript_ScaleShotEnd::
moveendcase MOVEEND_SYNCHRONIZE_TARGET moveendcase MOVEEND_SYNCHRONIZE_TARGET
moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES
end end
BattleScript_EffectSkyDrop: BattleScript_EffectSkyDrop:
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2 jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2
attackcanceler attackcanceler
@ -706,6 +706,7 @@ BattleScript_EffectFlingConsumeBerry:
restorebattleritem BS_TARGET restorebattleritem BS_TARGET
BattleScript_FlingEnd: BattleScript_FlingEnd:
tryfaintmon BS_TARGET tryfaintmon BS_TARGET
trysymbiosis
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_FlingFlameOrb: BattleScript_FlingFlameOrb:
@ -1392,6 +1393,7 @@ BattleScript_MoveEffectBugBite::
consumeberry BS_ATTACKER, TRUE @ consume the berry, then restore the item from changedItems consumeberry BS_ATTACKER, TRUE @ consume the berry, then restore the item from changedItems
bicword gHitMarker, HITMARKER_NO_ANIMATIONS bicword gHitMarker, HITMARKER_NO_ANIMATIONS
setbyte sBERRY_OVERRIDE, FALSE setbyte sBERRY_OVERRIDE, FALSE
trysymbiosis
return return
BattleScript_EffectCoreEnforcer: BattleScript_EffectCoreEnforcer:
@ -1763,6 +1765,7 @@ BattleScript_EffectBestow:
waitanimation waitanimation
printstring STRINGID_BESTOWITEMGIVING printstring STRINGID_BESTOWITEMGIVING
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
trysymbiosis
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_EffectAfterYou: BattleScript_EffectAfterYou:
@ -5173,7 +5176,14 @@ BattleScript_EffectTeleport:
attackcanceler attackcanceler
attackstring attackstring
ppreduce ppreduce
.if B_TELEPORT_BEHAVIOR >= GEN_7
canteleport BS_ATTACKER
jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectTeleportNew
goto BattleScript_ButItFailed
.else
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed
.endif
BattleScript_EffectTeleportTryToRunAway:
getifcantrunfrombattle BS_ATTACKER getifcantrunfrombattle BS_ATTACKER
jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed
jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective
@ -5184,6 +5194,29 @@ BattleScript_EffectTeleport:
setoutcomeonteleport BS_ATTACKER setoutcomeonteleport BS_ATTACKER
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_EffectTeleportNew:
getbattlerside BS_ATTACKER
jumpifbyte CMP_EQUAL, gBattleCommunication, B_SIDE_OPPONENT, BattleScript_EffectTeleportTryToRunAway
attackanimation
waitanimation
openpartyscreen BS_ATTACKER, BattleScript_EffectTeleportNewEnd
switchoutabilities BS_ATTACKER
waitstate
switchhandleorder BS_ATTACKER, 2
returntoball BS_ATTACKER
getswitchedmondata BS_ATTACKER
switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER
trytoclearprimalweather
printstring STRINGID_EMPTYSTRING3
waitmessage 1
printstring STRINGID_SWITCHINMON
switchinanim BS_ATTACKER, TRUE
waitstate
switchineffects BS_ATTACKER
BattleScript_EffectTeleportNewEnd:
goto BattleScript_MoveEnd
BattleScript_EffectBeatUp:: BattleScript_EffectBeatUp::
attackcanceler attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@ -5648,7 +5681,7 @@ BattleScript_EffectRolePlay::
pause 20 pause 20
destroyabilitypopup destroyabilitypopup
pause 40 pause 40
.endif .endif
printstring STRINGID_PKMNCOPIEDFOE printstring STRINGID_PKMNCOPIEDFOE
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
switchinabilities BS_ATTACKER switchinabilities BS_ATTACKER
@ -9625,7 +9658,7 @@ BattleScript_StatUpZMove::
waitmessage B_WAIT_TIME_LONG waitmessage B_WAIT_TIME_LONG
BattleScript_StatUpZMoveEnd: BattleScript_StatUpZMoveEnd:
return return
BattleScript_HealReplacementZMove:: BattleScript_HealReplacementZMove::
playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0
printfromtable gZEffectStringIds printfromtable gZEffectStringIds
@ -9836,8 +9869,14 @@ BattleScript_NeutralizingGasExitsLoop:
jumpifbytenotequal gBattlerTarget, sByteFour, BattleScript_NeutralizingGasExitsLoop @ SOMEHOW, comparing to gBattlersCount is problematic. jumpifbytenotequal gBattlerTarget, sByteFour, BattleScript_NeutralizingGasExitsLoop @ SOMEHOW, comparing to gBattlersCount is problematic.
restoretarget restoretarget
return return
BattleScript_MagicianActivates:: BattleScript_MagicianActivates::
call BattleScript_AbilityPopUp call BattleScript_AbilityPopUp
call BattleScript_ItemSteal call BattleScript_ItemSteal
return return
BattleScript_SymbiosisActivates::
call BattleScript_AbilityPopUp
printstring STRINGID_SYMBIOSISITEMPASS
waitmessage B_WAIT_TIME_LONG
return

View File

@ -225,6 +225,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_CommentOnOpponentType::
call_if_eq VAR_0x8005, TYPE_ICE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesIce call_if_eq VAR_0x8005, TYPE_ICE, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesIce
call_if_eq VAR_0x8005, TYPE_DRAGON, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDragon call_if_eq VAR_0x8005, TYPE_DRAGON, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDragon
call_if_eq VAR_0x8005, TYPE_DARK, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDark call_if_eq VAR_0x8005, TYPE_DARK, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDark
call_if_eq VAR_0x8005, TYPE_FAIRY, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFairy
call_if_eq VAR_0x8005, NUMBER_OF_MON_TYPES, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType call_if_eq VAR_0x8005, NUMBER_OF_MON_TYPES, BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType
return return
@ -296,6 +297,10 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesDark::
msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInDarkType, MSGBOX_DEFAULT msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInDarkType, MSGBOX_DEFAULT
return return
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentUsesFairy::
msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInFairyType, MSGBOX_DEFAULT
return
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType:: BattleFrontier_BattleFactoryPreBattleRoom_EventScript_OpponentHasNoMostCommonType::
msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerHasNoClearFavorite, MSGBOX_DEFAULT msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerHasNoClearFavorite, MSGBOX_DEFAULT
return return
@ -559,6 +564,10 @@ BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInDarkType:
.string "The TRAINER is apparently skilled\n" .string "The TRAINER is apparently skilled\n"
.string "in the handling of the DARK type.$" .string "in the handling of the DARK type.$"
BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInFairyType:
.string "The TRAINER is apparently skilled\n"
.string "in the handling of the FAIRY type.$"
BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInSteelType: BattleFrontier_BattleFactoryPreBattleRoom_Text_TrainerSkilledInSteelType:
.string "The TRAINER is apparently skilled\n" .string "The TRAINER is apparently skilled\n"
.string "in the handling of the STEEL type.$" .string "in the handling of the STEEL type.$"

View File

@ -56,7 +56,7 @@
"x": 14, "x": 14,
"y": 9, "y": 9,
"elevation": 3, "elevation": 3,
"var": "VAR_SKY_PILLAR_RAQUAZA_CRY_DONE", "var": "VAR_SKY_PILLAR_RAYQUAZA_CRY_DONE",
"var_value": "0", "var_value": "0",
"script": "SkyPillar_Top_EventScript_AwakenRayquaza" "script": "SkyPillar_Top_EventScript_AwakenRayquaza"
} }

View File

@ -128,7 +128,7 @@ SkyPillar_Top_EventScript_AwakenRayquaza::
special RemoveCameraObject special RemoveCameraObject
setvar VAR_SOOTOPOLIS_CITY_STATE, 5 setvar VAR_SOOTOPOLIS_CITY_STATE, 5
setvar VAR_SKY_PILLAR_STATE, 1 setvar VAR_SKY_PILLAR_STATE, 1
setvar VAR_SKY_PILLAR_RAQUAZA_CRY_DONE, 1 setvar VAR_SKY_PILLAR_RAYQUAZA_CRY_DONE, 1
releaseall releaseall
end end

View File

@ -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_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_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 setberrytree BERRY_TREE_ROUTE_117_WEPEAR_1, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES
@ Route 112 @ Route 112
setberrytree BERRY_TREE_ROUTE_112_RAWST_2, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES 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 setberrytree BERRY_TREE_ROUTE_112_PECHA_2, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES

View File

@ -22,7 +22,7 @@ Roulette_EventScript_Play::
special PlayRoulette special PlayRoulette
waitstate waitstate
end end
Roulette_Text_PlayMinimumWagerIsX:: Roulette_Text_PlayMinimumWagerIsX::
.string "The minimum wager at this table\n" .string "The minimum wager at this table\n"
.string "is {STR_VAR_1}. Do you want to play?$" .string "is {STR_VAR_1}. Do you want to play?$"

View File

@ -17,8 +17,8 @@
cd /mnt/c/Users/<user>/Downloads cd /mnt/c/Users/<user>/Downloads
``` ```
> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. > 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 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 > 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. 4. Once the directory has been changed to the folder containing the devkitPro pacman package, run the following commands to install devkitARM.

View File

@ -2,13 +2,10 @@
#define GUARD_ALLOC_H #define GUARD_ALLOC_H
#define HEAP_SIZE 0x1C000 #define HEAP_SIZE 0x1C000
#define malloc Alloc
#define calloc(ct, sz) AllocZeroed((ct) * (sz))
#define free Free
#define FREE_AND_SET_NULL(ptr) \ #define FREE_AND_SET_NULL(ptr) \
{ \ { \
free(ptr); \ Free(ptr); \
ptr = NULL; \ ptr = NULL; \
} }

View File

@ -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 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 sUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp");
static const u8 sDownArrowYCoords[] = { 0, 1, 2, 1 }; static const u8 sDownArrowYCoords[] = { 0, 1, 2, 1 };
static const u8 sWindowVerticalScrollSpeeds[] = { static const u8 sWindowVerticalScrollSpeeds[] = {
[OPTIONS_TEXT_SPEED_SLOW] = 1, [OPTIONS_TEXT_SPEED_SLOW] = 1,
[OPTIONS_TEXT_SPEED_MID] = 2, [OPTIONS_TEXT_SPEED_MID] = 2,
[OPTIONS_TEXT_SPEED_FAST] = 4, [OPTIONS_TEXT_SPEED_FAST] = 4,
@ -299,7 +299,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi
else else
{ {
sTempTextPrinter.textSpeed = 0; sTempTextPrinter.textSpeed = 0;
// Render all text (up to limit) at once // Render all text (up to limit) at once
for (j = 0; j < 0x400; ++j) for (j = 0; j < 0x400; ++j)
{ {

View File

@ -148,7 +148,6 @@ void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
void DecompressGlyphTile(const void *src_, void *dest_); void DecompressGlyphTile(const void *src_, void *dest_);
void CopyGlyphToWindow(struct TextPrinter *x); void CopyGlyphToWindow(struct TextPrinter *x);
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width); void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
u8 GetMenuCursorDimensionByFont(u8, u8);
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter); void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter);
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter); void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter);

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
230 148 98
255 255 222
230 230 197
213 205 172
189 180 148
172 156 123
156 131 106
0 0 0
0 0 0
0 0 0
142 204 143
123 180 122
112 165 99
89 130 87
67 114 65
55 91 56

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 838 B

After

Width:  |  Height:  |  Size: 838 B

View File

Before

Width:  |  Height:  |  Size: 800 B

After

Width:  |  Height:  |  Size: 800 B

View File

Before

Width:  |  Height:  |  Size: 722 B

After

Width:  |  Height:  |  Size: 722 B

View File

Before

Width:  |  Height:  |  Size: 726 B

After

Width:  |  Height:  |  Size: 726 B

View File

Before

Width:  |  Height:  |  Size: 684 B

After

Width:  |  Height:  |  Size: 684 B

View File

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View File

Before

Width:  |  Height:  |  Size: 619 B

After

Width:  |  Height:  |  Size: 619 B

View File

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View File

Before

Width:  |  Height:  |  Size: 662 B

After

Width:  |  Height:  |  Size: 662 B

View File

Before

Width:  |  Height:  |  Size: 698 B

After

Width:  |  Height:  |  Size: 698 B

View File

Before

Width:  |  Height:  |  Size: 735 B

After

Width:  |  Height:  |  Size: 735 B

View File

Before

Width:  |  Height:  |  Size: 698 B

After

Width:  |  Height:  |  Size: 698 B

View File

Before

Width:  |  Height:  |  Size: 688 B

After

Width:  |  Height:  |  Size: 688 B

View File

Before

Width:  |  Height:  |  Size: 682 B

After

Width:  |  Height:  |  Size: 682 B

View File

Before

Width:  |  Height:  |  Size: 932 B

After

Width:  |  Height:  |  Size: 932 B

View File

Before

Width:  |  Height:  |  Size: 629 B

After

Width:  |  Height:  |  Size: 629 B

View File

Before

Width:  |  Height:  |  Size: 978 B

After

Width:  |  Height:  |  Size: 978 B

View File

Before

Width:  |  Height:  |  Size: 852 B

After

Width:  |  Height:  |  Size: 852 B

View File

Before

Width:  |  Height:  |  Size: 681 B

After

Width:  |  Height:  |  Size: 681 B

View File

Before

Width:  |  Height:  |  Size: 627 B

After

Width:  |  Height:  |  Size: 627 B

View File

Before

Width:  |  Height:  |  Size: 890 B

After

Width:  |  Height:  |  Size: 890 B

View File

Before

Width:  |  Height:  |  Size: 900 B

After

Width:  |  Height:  |  Size: 900 B

View File

Before

Width:  |  Height:  |  Size: 906 B

After

Width:  |  Height:  |  Size: 906 B

View File

Before

Width:  |  Height:  |  Size: 710 B

After

Width:  |  Height:  |  Size: 710 B

View File

Before

Width:  |  Height:  |  Size: 828 B

After

Width:  |  Height:  |  Size: 828 B

View File

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 797 B

View File

Before

Width:  |  Height:  |  Size: 661 B

After

Width:  |  Height:  |  Size: 661 B

View File

Before

Width:  |  Height:  |  Size: 696 B

After

Width:  |  Height:  |  Size: 696 B

View File

Before

Width:  |  Height:  |  Size: 670 B

After

Width:  |  Height:  |  Size: 670 B

View File

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 706 B

View File

Before

Width:  |  Height:  |  Size: 736 B

After

Width:  |  Height:  |  Size: 736 B

View File

Before

Width:  |  Height:  |  Size: 889 B

After

Width:  |  Height:  |  Size: 889 B

View File

Before

Width:  |  Height:  |  Size: 647 B

After

Width:  |  Height:  |  Size: 647 B

View File

Before

Width:  |  Height:  |  Size: 765 B

After

Width:  |  Height:  |  Size: 765 B

View File

Before

Width:  |  Height:  |  Size: 719 B

After

Width:  |  Height:  |  Size: 719 B

View File

Before

Width:  |  Height:  |  Size: 952 B

After

Width:  |  Height:  |  Size: 952 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 745 B

After

Width:  |  Height:  |  Size: 745 B

View File

Before

Width:  |  Height:  |  Size: 825 B

After

Width:  |  Height:  |  Size: 825 B

View File

Before

Width:  |  Height:  |  Size: 617 B

After

Width:  |  Height:  |  Size: 617 B

View File

Before

Width:  |  Height:  |  Size: 799 B

After

Width:  |  Height:  |  Size: 799 B

View File

Before

Width:  |  Height:  |  Size: 770 B

After

Width:  |  Height:  |  Size: 770 B

View File

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 820 B

View File

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 692 B

View File

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 631 B

View File

Before

Width:  |  Height:  |  Size: 936 B

After

Width:  |  Height:  |  Size: 936 B

View File

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 720 B

View File

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 784 B

View File

Before

Width:  |  Height:  |  Size: 722 B

After

Width:  |  Height:  |  Size: 722 B

View File

Before

Width:  |  Height:  |  Size: 841 B

After

Width:  |  Height:  |  Size: 841 B

View File

Before

Width:  |  Height:  |  Size: 789 B

After

Width:  |  Height:  |  Size: 789 B

View File

Before

Width:  |  Height:  |  Size: 751 B

After

Width:  |  Height:  |  Size: 751 B

View File

Before

Width:  |  Height:  |  Size: 649 B

After

Width:  |  Height:  |  Size: 649 B

View File

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 689 B

View File

Before

Width:  |  Height:  |  Size: 683 B

After

Width:  |  Height:  |  Size: 683 B

View File

Before

Width:  |  Height:  |  Size: 632 B

After

Width:  |  Height:  |  Size: 632 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 802 B

After

Width:  |  Height:  |  Size: 802 B

View File

Before

Width:  |  Height:  |  Size: 710 B

After

Width:  |  Height:  |  Size: 710 B

View File

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 633 B

View File

Before

Width:  |  Height:  |  Size: 678 B

After

Width:  |  Height:  |  Size: 678 B

View File

Before

Width:  |  Height:  |  Size: 849 B

After

Width:  |  Height:  |  Size: 849 B

View File

Before

Width:  |  Height:  |  Size: 786 B

After

Width:  |  Height:  |  Size: 786 B

View File

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 793 B

View File

Before

Width:  |  Height:  |  Size: 742 B

After

Width:  |  Height:  |  Size: 742 B

View File

Before

Width:  |  Height:  |  Size: 709 B

After

Width:  |  Height:  |  Size: 709 B

View File

Before

Width:  |  Height:  |  Size: 710 B

After

Width:  |  Height:  |  Size: 710 B

View File

Before

Width:  |  Height:  |  Size: 709 B

After

Width:  |  Height:  |  Size: 709 B

Some files were not shown because too many files have changed in this diff Show More