Merge branch 'upcoming' into upcoming-to-master-merge

This commit is contained in:
Hedara 2025-02-27 13:11:16 +01:00
commit 55bf368866
955 changed files with 39321 additions and 31036 deletions

View File

@ -23,18 +23,14 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.10.3 (Latest release)
- 1.11.0 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.10.3
- 1.10.2
- 1.10.1
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input

View File

@ -23,18 +23,14 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.10.3 (Latest release)
- 1.11.0 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.10.3
- 1.10.2
- 1.10.1
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input

View File

@ -23,18 +23,14 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.10.3 (Latest release)
- 1.11.0 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.10.3
- 1.10.2
- 1.10.1
- 1.10.0
- 1.9.4
- 1.9.3
- 1.9.2
- 1.9.1
- 1.9.0
- pre-1.9.0
- pre-1.10.0
validations:
required: true
- type: input

4
CREDITS.md Normal file
View File

@ -0,0 +1,4 @@
## Mega Evolution Overworld Sprite Credits:
- [princess-phoenix](https://www.deviantart.com/princess-phoenix)
- [larryturbo](https://www.deviantart.com/larryturbo)
- [kidkatt](https://www.deviantart.com/kidkatt)

View File

@ -121,7 +121,7 @@ CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST)
ARMCC := $(PREFIX)gcc
PATH_ARMCC := PATH="$(PATH)" $(ARMCC)
CC1 := $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
ifeq ($(ANALYZE),1)
override CFLAGS += -fanalyzer
endif
@ -346,6 +346,7 @@ endif
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member
$(C_BUILDDIR)/agb_flash.o: override CFLAGS += -fno-toplevel-reorder
$(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
# Annoyingly we can't turn this on just for src/data/trainers.h
$(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret

View File

@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link
If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect.
You can phrase it as the following:
```
Based off RHH's pokeemerald-expansion 1.10.3 https://github.com/rh-hideout/pokeemerald-expansion/
Based off RHH's pokeemerald-expansion 1.11.0 https://github.com/rh-hideout/pokeemerald-expansion/
```
#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there.

View File

@ -57,7 +57,7 @@
special CallBattleDomeFunction
.endm
@ Sets gTrainerBattleOpponent_A to the trainer ID of the next opponent
@ Sets gTrainerBattleParameter.params.opponentA to the trainer ID of the next opponent
.macro dome_setopponent
setvar VAR_0x8004, BATTLE_DOME_FUNC_SET_OPPONENT_ID
special CallBattleDomeFunction

View File

@ -115,14 +115,13 @@
.macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req
special SavePlayerParty
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_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, \trainer2Id, NULL, \trainer2LoseText, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
multi_do MULTI_BATTLE_2_VS_2, \partnerId
.endm
.macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
multi_do MULTI_BATTLE_2_VS_1, \partnerId
.endm
@ -145,14 +144,13 @@
.macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req
special SavePlayerParty
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_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, \trainer2Id, NULL, \trainer2LoseText, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId
.endm
.macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req
special SavePlayerParty
trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
trainerbattle TRAINER_BATTLE_SET_TRAINERS_FOR_MULTI_BATTLE, OBJ_ID_NONE, \trainer1Id, NULL, \trainer1LoseText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId
.endm

View File

@ -133,7 +133,7 @@
special CallFrontierUtilFunc
.endm
@ Buffer the name of gTrainerBattleOpponent_A in STR_VAR_1 (0) or STR_VAR_2 (1)
@ Buffer the name of gTrainerBattleParameter.params.opponentA in STR_VAR_1 (0) or STR_VAR_2 (1)
.macro frontier_gettrainername stringVar:req
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME
.if \stringVar == STR_VAR_1

View File

@ -356,7 +356,7 @@
.byte 0x3a
.endm
.macro healthbar_update battler:req
.macro absorbhealthbarupdate battler:req
.byte 0x3b
.byte \battler
.endm
@ -833,7 +833,7 @@
.byte 0x94
.endm
.macro unused_95
.macro copybidedmg
.byte 0x95
.endm
@ -929,8 +929,9 @@
.4byte \failInstr
.endm
.macro setdestinybond
.macro trysetdestinybond failInstr:req
.byte 0xaa
.4byte \failInstr
.endm
.macro trysetdestinybondtohappen
@ -1231,11 +1232,11 @@
.byte 0xe5
.endm
.macro unused3
.macro unused_0xE6
.byte 0xe6
.endm
.macro unused4
.macro unused_0xE7
.byte 0xe7
.endm
@ -1276,8 +1277,9 @@
.byte 0xef
.endm
.macro givecaughtmon
.macro givecaughtmon passInstr:req
.byte 0xf0
.4byte \passInstr
.endm
.macro trysetcaughtmondexflags failInstr:req
@ -1289,9 +1291,8 @@
.byte 0xf2
.endm
.macro trygivecaughtmonnick successInstr:req
.macro trygivecaughtmonnick
.byte 0xf3
.4byte \successInstr
.endm
.macro subattackerhpbydmg
@ -1521,8 +1522,8 @@
.4byte \jumpInstr
.endm
.macro jumpifargument argument:req, jumpInstr:req
callnative BS_JumpIfArgument
.macro jumpifmovepropertyargument argument:req, jumpInstr:req
callnative BS_JumpIfMovePropertyArgument
.byte \argument
.4byte \jumpInstr
.endm
@ -1554,13 +1555,43 @@
.4byte \failInstr
.endm
.macro trysetstatus1, ptr:req
callnative BS_TrySetStatus1
.macro trysetparalysis, ptr:req
callnative BS_TrySetParalysis
.4byte \ptr
.endm
.macro trysetstatus2, ptr:req
callnative BS_TrySetStatus2
.macro trysetpoison, ptr:req
callnative BS_TrySetPoison
.4byte \ptr
.endm
.macro trysetpoisonparalysis, ptr:req
callnative BS_TrySetPoisonParalyzis
.4byte \ptr
.endm
.macro tryseteffectspore, ptr:req
callnative BS_TrySetEffectSpore
.4byte \ptr
.endm
.macro trysetconfusion, ptr:req
callnative BS_TrySetConfusion
.4byte \ptr
.endm
.macro trysetinfatuation, ptr:req
callnative BS_TrySetInfatuation
.4byte \ptr
.endm
.macro trysetescapeprevention, ptr:req
callnative BS_TrySetEscapePrevention
.4byte \ptr
.endm
.macro trysettorment, ptr:req
callnative BS_TrySetTorment
.4byte \ptr
.endm
@ -1610,8 +1641,8 @@
callnative BS_TryTriggerStatusForm
.endm
.macro setphotongeysercategory
callnative BS_SetPhotonGeyserCategory
.macro setdynamicmovecategory
callnative BS_SetDynamicMoveCategory
.endm
.macro tryupperhand failInstr:req
@ -1664,6 +1695,11 @@
callnative BS_DamageToQuarterTargetHP
.endm
.macro jumpifsleepclause jumpInstr:req
callnative BS_JumpIfSleepClause
.4byte \jumpInstr
.endm
.macro ficklebeamdamagecalculation
callnative BS_FickleBeamDamageCalculation
.endm
@ -1760,6 +1796,26 @@
callnative BS_SpectralThiefPrintStats
.endm
.macro setmoveresultflags flags:req
callnative BS_SetMoveResultFlags
.2byte \flags
.endm
.macro clearmoveresultflags flags:req
callnative BS_ClearMoveResultFlags
.2byte \flags
.endm
.macro jumpifmoveresultflags flags:req failInstr:req
callnative BS_JumpIfMoveResultFlags
.2byte \flags
.4byte \failInstr
.endm
.macro jumpifcriticalhit failInstr:req
callnative BS_JumpIfCriticalHit
.4byte \failInstr
.endm
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
@ -2006,9 +2062,10 @@
.4byte \jumpInstr
.endm
.macro trypsychoshift failInstr:req
.macro trypsychoshift failInstr:req sleepClauseFailInstr:req
various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT
.4byte \failInstr
.4byte \sleepClauseFailInstr
.endm
.macro curestatus battler:req
@ -2312,11 +2369,11 @@
.endm
.macro swapsidestatuses
various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES
callnative BS_CourtChangeSwapSideStatuses
.endm
.macro swapstats stat:req
various BS_ATTACKER, VARIOUS_SWAP_STATS
callnative BS_SwapStats
.byte \stat
.endm
@ -2391,7 +2448,7 @@
.endm
.macro jumpifmovehadnoeffect jumpInstr:req
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpInstr
jumpifmoveresultflags MOVE_RESULT_NO_EFFECT, \jumpInstr
.endm
.macro jumpifside battler:req, side:req, equalJumpInstr:req

View File

@ -254,15 +254,26 @@
.endm
@ Calls the native C function stored at func.
.macro callnative func:req
@ 'callnative's should set 'requests_effects=1' if the native
@ contains a call to 'Script_RequestEffects', which allows them
@ to be analyzed by 'RunScriptImmediatelyUntilEffect'.
.macro callnative func:req, requests_effects=0
.byte SCR_OP_CALLNATIVE
.if \requests_effects == 0
.4byte \func
.else
.4byte \func + ROM_SIZE
.endif
.endm
@ Replaces the script with the function stored at func. Execution returns to the bytecode script when func returns TRUE.
.macro gotonative func:req
.macro gotonative func:req, requests_effects=0
.byte SCR_OP_GOTONATIVE
.if \requests_effects == 0
.4byte \func
.else
.4byte \func + ROM_SIZE
.endif
.endm
@ Calls a function listed in the table in data/specials.inc.
@ -683,59 +694,31 @@
.byte \direction
.endm
NULL = 0
OBJ_ID_NONE = 0
@ Configures the arguments for a trainer battle, then jumps to the appropriate script in scripts/trainer_battle.inc
.macro trainerbattle type:req, trainer:req, local_id:req, pointer1:req, pointer2, pointer3, pointer4
.macro trainerbattle type:req localIdA:req, trainer_a:req, intro_text_a:req, lose_text_a:req, event_script_a:req, localIdB:req, trainer_b:req, intro_text_b:req, lose_text_b:req, event_script_b:req, victory_text:req, cannot_battle:req, isDouble:req, playMusicA:req, playMusicB:req, isRematch:req
.byte SCR_OP_TRAINERBATTLE
.byte \type
.2byte \trainer
.2byte \local_id
.if \type == TRAINER_BATTLE_SINGLE
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ event script
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ event script
.elseif \type == TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT
.4byte \pointer1 @ text
.elseif \type == TRAINER_BATTLE_DOUBLE
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ text
.elseif \type == TRAINER_BATTLE_REMATCH
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ text
.4byte \pointer4 @ event script
.elseif \type == TRAINER_BATTLE_REMATCH_DOUBLE
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ text
.elseif \type == TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.4byte \pointer3 @ text
.4byte \pointer4 @ event script
.elseif \type == TRAINER_BATTLE_PYRAMID
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.elseif \type == TRAINER_BATTLE_SET_TRAINER_A
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.elseif \type == TRAINER_BATTLE_SET_TRAINER_B
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.elseif \type == TRAINER_BATTLE_HILL
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.endif
.set trainerbattle_flags, 0
.ifgt \isDouble; .set trainerbattle_flags, trainerbattle_flags | (1 << 0); .endif
.ifgt \isRematch; .set trainerbattle_flags, trainerbattle_flags | (1 << 1); .endif
.ifgt \playMusicA; .set trainerbattle_flags, trainerbattle_flags | (1 << 2); .endif
.ifgt \playMusicB; .set trainerBattle_flags, trainerbattle_flags | (1 << 3); .endif
.ifgt \type; .set trainerbattle_flags, trainerbattle_flags | (\type << 4); .endif
.byte trainerbattle_flags
.byte \localIdA @ objEventLocalIdA
.2byte \trainer_a @ opponentA
.4byte \intro_text_a @ introTextA
.4byte \lose_text_a @ defeatTextA
.4byte \event_script_a @ retAddrA
.byte \localIdB @ objEventLocalIdB
.2byte \trainer_b @ opponentB
.4byte \intro_text_b @ introTextB
.4byte \lose_text_b @ defeatTextB
.4byte \event_script_b @ retAddrB
.4byte \victory_text @ victoryText
.4byte \cannot_battle @ cannotBattle
.endm
NO_MUSIC = FALSE
@ -744,11 +727,11 @@
@ When used with an event script, you can also pass in an optional flag to disable music
.macro trainerbattle_single trainer:req, intro_text:req, lose_text:req, event_script=FALSE, music=TRUE
.if \event_script == FALSE
trainerbattle TRAINER_BATTLE_SINGLE, \trainer, 0, \intro_text, \lose_text
trainerbattle TRAINER_BATTLE_SINGLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
.elseif \music == TRUE
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, \trainer, 0, \intro_text, \lose_text, \event_script
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
.else
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \event_script
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
.endif
.endm
@ -756,38 +739,33 @@
@ and an optional event script. When used with an event script you can pass in an optional flag to disable music
.macro trainerbattle_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req, event_script=FALSE, music=TRUE
.if \event_script == FALSE
trainerbattle TRAINER_BATTLE_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text
trainerbattle TRAINER_BATTLE_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
.elseif \music == TRUE
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
.else
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text, \event_script
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, \event_script, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, FALSE, FALSE, FALSE
.endif
.endm
@ Starts a rematch battle. Takes a trainer, intro text and loss text
.macro trainerbattle_rematch trainer:req, intro_text:req, lose_text:req
trainerbattle TRAINER_BATTLE_REMATCH, \trainer, 0, \intro_text, \lose_text
trainerbattle TRAINER_BATTLE_REMATCH, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, TRUE
.endm
@ Starts a rematch double battle. Takes a trainer, intro text, loss text, and text for when you have too few pokemon
.macro trainerbattle_rematch_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req
trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, \trainer, 0, \intro_text, \lose_text, \not_enough_pkmn_text
trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, OBJ_ID_NONE, \trainer, \intro_text, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, FALSE, TRUE, FALSE, TRUE
.endm
@ Starts a trainer battle, skipping intro text. Takes a trainer and loss text
.macro trainerbattle_no_intro trainer:req, lose_text:req
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, OBJ_ID_NONE, \trainer, NULL, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
.endm
@ Starts a double battle with the player against two trainers
@ Takes two trainers and defeat text for each
.macro trainerbattle_two_trainers trainer_a:req, lose_text_a:req, trainer_b:req, lose_text_b:req
.byte 0x5c
.byte TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO
.2byte \trainer_a
.4byte \lose_text_a
.2byte \trainer_b
.4byte \lose_text_b
trainerbattle TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO, OBJ_ID_NONE, \trainer_a, NULL, \lose_text_a, NULL, OBJ_ID_NONE, \trainer_b, NULL, \lose_text_b, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
.endm
@ Starts a trainer battle using the battle information stored in RAM (usually by the scripts in trainer_battle.inc, which
@ -999,10 +977,10 @@
@ Gives the player a Pokémon of the specified species and level, and allows to customize extra parameters.
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
.macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType
callnative ScrCmd_createmon
.macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, gmaxFactor, teraType, dmaxLevel
callnative ScrCmd_createmon, requests_effects=1
.byte 0
.byte 6 @ PARTY_SIZE - assign to first empty slot
.byte PARTY_SIZE @ assign to first empty slot
.set givemon_flags, 0
.2byte \species
.2byte \level
@ -1028,8 +1006,9 @@
.ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif
.ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif
.ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif
.ifnb \ggMaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
.ifnb \gmaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
.ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif
.ifnb \dmaxLevel; .set givemon_flags, givemon_flags | (1 << 24); .endif
.4byte givemon_flags
.ifnb \item; .2byte \item; .endif
.ifnb \ball; .2byte \ball; .endif
@ -1053,14 +1032,15 @@
.ifnb \move3; .2byte \move3; .endif
.ifnb \move4; .2byte \move4; .endif
.ifnb \isShiny; .2byte \isShiny; .endif
.ifnb \ggMaxFactor; .2byte \ggMaxFactor; .endif
.ifnb \gmaxFactor; .2byte \gmaxFactor; .endif
.ifnb \teraType; .2byte \teraType; .endif
.ifnb \dmaxLevel; .2byte \dmaxLevel; .endif
.endm
@ creates a mon for a given party and slot
@ otherwise
.macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType
callnative ScrCmd_createmon
.macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, gmaxFactor, teraType, dmaxLevel
callnative ScrCmd_createmon, requests_effects=1
.byte \side @ 0 - player, 1 - opponent
.byte \slot @ 0-5
.set givemon_flags, 0
@ -1088,8 +1068,9 @@
.ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif
.ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif
.ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif
.ifnb \ggMaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
.ifnb \gmaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
.ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif
.ifnb \dmaxLevel; .set givemon_flags, givemon_flags | (1 << 24); .endif
.4byte givemon_flags
.ifnb \item; .2byte \item; .endif
.ifnb \ball; .2byte \ball; .endif
@ -1113,8 +1094,9 @@
.ifnb \move3; .2byte \move3; .endif
.ifnb \move4; .2byte \move4; .endif
.ifnb \isShiny; .2byte \isShiny; .endif
.ifnb \ggMaxFactor; .2byte \ggMaxFactor; .endif
.ifnb \gmaxFactor; .2byte \gmaxFactor; .endif
.ifnb \teraType; .2byte \teraType; .endif
.ifnb \dmaxLevel; .2byte \dmaxLevel; .endif
.endm
@ Gives the player an Egg of the specified species.
@ -1808,7 +1790,7 @@
.4byte \text
.endm
@ Equivalent to fadescreen but copies gPlttBufferUnfaded to gDecompressionBuffer on the fade out
@ Equivalent to fadescreen but copies gPlttBufferUnfaded to an allocated buffer on the fade out
@ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it.
.macro fadescreenswapbuffers mode:req
.byte SCR_OP_FADESCREENSWAPBUFFERS
@ -2106,7 +2088,7 @@
.endm
.macro setdynamicaifunc func:req
callnative ScriptSetDynamicAiFunc
callnative ScriptSetDynamicAiFunc, requests_effects=1
.4byte \func
.endm
@ -2115,7 +2097,7 @@
@ The rest of the arguments are the stat change values to each stat.
@ For example, giving the first opponent +1 to atk and -2 to speed would be: settotemboost B_POSITION_OPPONENT_LEFT, 1, 0, -2
.macro settotemboost battler:req, atk=0,def=0,speed=0,spatk=0,spdef=0,acc=0,evas=0
callnative ScriptSetTotemBoost
callnative ScriptSetTotemBoost, requests_effects=1
.2byte \battler
.2byte \atk
.2byte \def
@ -2186,21 +2168,21 @@
.macro ai_vs_ai_battle trainer1:req, trainer2:req
setflag B_FLAG_AI_VS_AI_BATTLE
setvar VAR_0x8004, \trainer1
callnative CreateTrainerPartyForPlayer
callnative CreateTrainerPartyForPlayer, requests_effects=1
trainerbattle_no_intro \trainer2, NULL
.endm
@ Sets VAR_RESULT to TRUE if stat can be hyper trained, or to
@ FALSE otherwise.
.macro canhypertrain stat:req, slot:req
callnative CanHyperTrain
callnative CanHyperTrain, requests_effects=1
.byte \stat
.2byte \slot
.endm
@ Hyper Trains a stat.
.macro hypertrain stat:req, slot:req
callnative HyperTrain
callnative HyperTrain, requests_effects=1
.byte \stat
.2byte \slot
.endm
@ -2208,7 +2190,7 @@
@ Sets VAR_RESULT to TRUE if the Pokemon has the Gigantamax Factor,
@ or to FALSE otherwise.
.macro hasgigantamaxfactor slot:req
callnative HasGigantamaxFactor
callnative HasGigantamaxFactor, requests_effects=1
.2byte \slot
.endm
@ -2216,7 +2198,7 @@
@ Fails for Melmetal (vanilla behavior).
@ Sets VAR_RESULT to TRUE if it succeeds, and FALSE otherwise.
.macro togglegigantamaxfactor slot:req
callnative ToggleGigantamaxFactor
callnative ToggleGigantamaxFactor, requests_effects=1
.2byte \slot
.endm
@ -2254,27 +2236,27 @@
@ Inflicts \status1 to the Pokémon in \slot.
@ If \slot is greater or equal than PARTY_SIZE, the status is inflicted on each of the Player's Pokémon.
.macro setstatus1 status1:req, slot:req
callnative Script_SetStatus1
callnative Script_SetStatus1, requests_effects=1
.2byte \status1
.2byte \slot
.endm
@ Sets VAR_RESULT to the Pokémon in \slot's Tera Type
.macro checkteratype slot:req
callnative CheckTeraType
callnative CheckTeraType, requests_effects=1
.2byte \slot
.endm
@ Sets the Pokémon in \slot's Tera Type
.macro setteratype type:req, slot:req
callnative SetTeraType
callnative SetTeraType, requests_effects=1
.byte \type
.2byte \slot
.endm
@ Saves species and forms of Daycare Pokémon to specific vars. Saves the amount of Daycare mon to VAR_RESULT.
.macro getdaycaregfx varSpecies1:req varSpecies2:req varForm1:req varForm2:req
callnative GetDaycareGraphics
callnative GetDaycareGraphics, requests_effects=1
.2byte \varSpecies1
.2byte \varSpecies2
.2byte \varForm1
@ -2283,12 +2265,12 @@
@ Plays the cry of the first alive party member.
.macro playfirstmoncry
callnative PlayFirstMonCry
callnative PlayFirstMonCry, requests_effects=1
.endm
@ Buffers the nickname of the first alive party member.
.macro bufferlivemonnickname out:req
callnative BufferFirstLiveMonNickname
callnative BufferFirstLiveMonNickname, requests_effects=1
.byte \out
.endm
@ -2299,13 +2281,13 @@
@ Checks if Field move is being used by the current follower.
.macro isfollowerfieldmoveuser var:req
callnative IsFollowerFieldMoveUser
callnative IsFollowerFieldMoveUser, requests_effects=1
.2byte \var
.endm
@ Saves the direction from where source object event would need to turn to to face the target into the specified var.
.macro getdirectiontoface var:req, sourceId:req, targetId:req
callnative GetDirectionToFaceScript
callnative GetDirectionToFaceScript, requests_effects=1
.2byte \var
.byte \sourceId
.byte \targetId
@ -2314,50 +2296,50 @@
@ set the wild double battle flag
@ can be used in conjunection with createmon to set up a wild battle with 2 player mons vs. 1 enemy mon
.macro setwilddoubleflag
callnative ScriptSetDoubleBattleFlag
callnative ScriptSetDoubleBattleFlag, requests_effects=1
.endm
@ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will stop the flow of time.
.macro pausefakertc
callnative Script_PauseFakeRtc
callnative Script_PauseFakeRtc, requests_effects=1
.endm
@ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time.
.macro resumefakertc
callnative Script_ResumeFakeRtc
callnative Script_ResumeFakeRtc, requests_effects=1
.endm
@ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time if paused, and stop the flow of time otherwise.
.macro togglefakertc
callnative Script_ToggleFakeRtc
callnative Script_ToggleFakeRtc, requests_effects=1
.endm
@ ============================ @
@ ITEM DESCRIPTION HEADER MACROS
@ Used with OW_SHOW_ITEM_DESCRIPTIONS config
.macro showitemdescription
callnative ScriptShowItemDescription
callnative ScriptShowItemDescription, requests_effects=1
.byte 0
.endm
.macro showberrydescription
callnative ScriptShowItemDescription
callnative ScriptShowItemDescription, requests_effects=1
.byte 1
.endm
.macro hideitemdescription
callnative ScriptHideItemDescription
callnative ScriptHideItemDescription, requests_effects=1
.endm
@ Remove all of specified item from the player's bag and return the number of removed items to VAR_RESULT
.macro removeallitem itemId:req
callnative ScrCmd_removeallitem
callnative ScrCmd_removeallitem, requests_effects=1
.2byte \itemId
.endm
@ Stores the position of the given object in destX and destY. Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position.
.macro getobjectxy localId:req, posType:req, destX:req, destY:req
callnative ScrCmd_getobjectxy
callnative ScrCmd_getobjectxy, requests_effects=1
.2byte \localId
.2byte \posType
.2byte \destX
@ -2365,7 +2347,7 @@
.endm
.macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION, destX:req, destY:req
callnative ScrCmd_getobjectxy
callnative ScrCmd_getobjectxy, requests_effects=1
.2byte \localId
.2byte \posType
.2byte \destX
@ -2373,7 +2355,7 @@
.endm
.macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION, destX:req, destY:req
callnative ScrCmd_getobjectxy
callnative ScrCmd_getobjectxy, requests_effects=1
.2byte \localId
.2byte \posType
.2byte \destX
@ -2382,7 +2364,7 @@
@ Return TRUE to dest if there is an object at the position x and y.
.macro checkobjectat x:req, y:req, dest = VAR_RESULT
callnative ScrCmd_checkobjectat
callnative ScrCmd_checkobjectat, requests_effects=1
.2byte \x
.2byte \y
.2byte \dest
@ -2390,28 +2372,28 @@
@ Returns the state of the Pokedex Seen Flag to VAR_RESULT for the Pokemon with speciesId
.macro getseenmon species:req
callnative Scrcmd_getsetpokedexflag
callnative Scrcmd_getsetpokedexflag, requests_effects=1
.2byte \species
.2byte FLAG_GET_SEEN
.endm
@ Returns the state of the Pokedex Caught Flag to VAR_RESULT for the Pokemon with speciesId
.macro getcaughtmon species:req
callnative Scrcmd_getsetpokedexflag
callnative Scrcmd_getsetpokedexflag, requests_effects=1
.2byte \species
.2byte FLAG_GET_CAUGHT
.endm
@ Sets the Pokedex Seen Flag for the Pokemon with speciesId
.macro setseenmon species:req
callnative Scrcmd_getsetpokedexflag
callnative Scrcmd_getsetpokedexflag, requests_effects=1
.2byte \species
.2byte FLAG_SET_SEEN
.endm
@ Sets the Pokedex Caught Flag for the Pokemon with speciesId
.macro setcaughtmon species:req
callnative Scrcmd_getsetpokedexflag
callnative Scrcmd_getsetpokedexflag, requests_effects=1
.2byte \species
.2byte FLAG_SET_CAUGHT
.endm
@ -2421,10 +2403,10 @@
.if \mode == OPEN_PARTY_SCREEN
special ChoosePartyMon
waitstate
callnative Scrcmd_checkspecies_choose
callnative Scrcmd_checkspecies_choose, requests_effects=1
.2byte \speciesId
.else
callnative Scrcmd_checkspecies
callnative Scrcmd_checkspecies, requests_effects=1
.2byte \speciesId
.endif
.endm
@ -2435,7 +2417,7 @@
@ Gets the facing direction of a given event object and stores it in the variable dest.
.macro getobjectfacingdirection localId:req, dest:req
callnative Scrcmd_getobjectfacingdirection
callnative Scrcmd_getobjectfacingdirection, requests_effects=1
.2byte \localId
.2byte \dest
.endm
@ -2445,3 +2427,86 @@
callnative ScrFunc_hidefollower
.2byte \wait
.endm
.macro increasedifficulty
callnative Script_IncreaseDifficulty, requests_effects=1
.endm
.macro decreasedifficulty
callnative Script_DecreaseDifficulty, requests_effects=1
.endm
.macro getdifficulty var:req
callnative Script_GetDifficulty, requests_effects=1
.endm
.macro setdifficulty difficulty:req
callnative Script_SetDifficulty, requests_effects=1
.byte \difficulty
.endm
.macro forcesave
callnative Script_ForceSaveGame
waitstate
.endm
@ Makes the trainer unable to see the player if executed.
@ This is a no-op if the player interacts with the trainer.
.macro cant_see_if, condition:req
callnative Script_EndTrainerCanSeeIf, requests_effects=1
.byte \condition
.endm
.macro cant_see
cant_see_if_unset 0 @ flag 0 is always FALSE.
.endm
.macro cant_see_if_unset, flag:req
checkflag \flag
cant_see_if FALSE
.endm
.macro cant_see_if_set, flag:req
checkflag \flag
cant_see_if TRUE
.endm
.macro cant_see_if_trainerflag_unset, trainer:req
checktrainerflag \trainer
cant_see_if FALSE
.endm
.macro cant_see_if_trainerflag_set, trainer:req
checktrainerflag \trainer
cant_see_if TRUE
.endm
.macro cant_see_if_lt, a:req, b:req
compare \a, \b
cant_see_if 0
.endm
.macro cant_see_if_eq, a:req, b:req
compare \a, \b
cant_see_if 1
.endm
.macro cant_see_if_gt, a:req, b:req
compare \a, \b
cant_see_if 2
.endm
.macro cant_see_if_le, a:req, b:req
compare \a, \b
cant_see_if 3
.endm
.macro cant_see_if_ge, a:req, b:req
compare \a, \b
cant_see_if 4
.endm
.macro cant_see_if_ne, a:req, b:req
compare \a, \b
cant_see_if 5
.endm

View File

@ -413,6 +413,7 @@ B_ATK_TEAM2 = FD 38
B_DEF_NAME = FD 39
B_DEF_TEAM1 = FD 3A
B_DEF_TEAM2 = FD 3B
B_DEF_PARTNER_NAME = FD 3C
@ FD 3C - preiously gActiveBattler
@ FD 3D - preiously gActiveBattler without Illusion Check
B_ATK_NAME_WITH_PREFIX2 = FD 3E

View File

@ -29,6 +29,9 @@
.set OAM, 0x7000000
.set ROM, 0x8000000
.set ROM_SIZE, 0x2000000
.set SOUND_INFO_PTR, 0x3007FF0
.set INTR_CHECK, 0x3007FF8
.set INTR_VECTOR, 0x3007FFC

View File

@ -1880,7 +1880,7 @@ gBattleAnimMove_Avalanche::
loadspritegfx ANIM_TAG_ICE_CHUNK
monbg ANIM_DEF_PARTNER
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 7, 1, 11, 1
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 4, -5, 1, -5, 1
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, -5, 1, -5, 1
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
delay 2
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 5, 0, 6, 1
@ -5554,44 +5554,40 @@ GrassPledgeMiddleFountain:
delay 4
return
@Credits to Skeli
gBattleAnimMove_VoltSwitch::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_SHADOW_BALL
loadspritegfx ANIM_TAG_IONS
loadspritegfx ANIM_TAG_SPARK_2
loadspritegfx ANIM_TAG_THIN_RING
monbg ANIM_ATTACKER
setalpha 12, 8
createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
createsprite gVoltSwitchSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 32, 20
delay 30
createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 3, 0, 8, 1
call VoltSwitchElectricFlashes
delay 2
playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
createsprite gVoltSwitchSpriteTemplate ANIM_TARGET, 3, 0, 0, 0, 0, 32, -20
delay 4
createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
delay 4
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 45, 1
createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
delay 4
createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
delay 4
call ElectricityEffect
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER
jumpretfalse VoltSwitchContinue
createvisualtask AnimTask_IsTargetSameSide 1
jumprettrue VoltSwitchAgainstPartner
createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, -2
VoltSwitchContinue:
call VoltSwitchElectricFlashes
delay 18
createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 3, 0, 8, 1
call VoltSwitchElectricFlashes
delay 6
call VoltSwitchElectricFlashes
waitforvisualfinish
clearmonbg ANIM_ATTACKER
blendoff
createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER
jumpretfalse VoltSwitchLast
invisible ANIM_ATTACKER
VoltSwitchLast:
delay 8
end
@ Attacking the same side requires a change of direction
@ why would you attack your partner though?!
VoltSwitchAgainstPartner:
createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2
goto VoltSwitchContinue
VoltSwitchElectricFlashes:
playsewithpan SE_M_CHARGE, SOUND_PAN_TARGET
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1
return
gBattleAnimMove_StruggleBug::
loadspritegfx ANIM_TAG_MOVEMENT_WAVES
@ -5627,7 +5623,6 @@ gBattleAnimMove_Bulldoze::
gBattleAnimMove_FrostBreath::
loadspritegfx ANIM_TAG_ICE_CHUNK
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
fadetobg BG_ICE
waitbgfadeout
createvisualtask AnimTask_StartSlidingBg, 0x5, 0x300, 0x0, 0x0, 0xffff
@ -5639,6 +5634,8 @@ gBattleAnimMove_FrostBreath::
waitforvisualfinish
createsprite gFrostBreathBlueBreathTemplate, ANIM_TARGET, 2, 0x1e, 0xf, 0x0, 0xa, 0xa
waitforvisualfinish
unloadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1
createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x5, 0x0
@ -7722,7 +7719,6 @@ gBattleAnimMove_ParabolicCharge::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_LIGHTNING
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_ATTACKER
setalpha 12, 8
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3)
@ -7745,6 +7741,11 @@ gBattleAnimMove_ParabolicCharge::
createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK
ParabolicChargeHeal:
waitforvisualfinish
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
unloadspritegfx ANIM_TAG_ELECTRIC_ORBS
unloadspritegfx ANIM_TAG_SPARK
unloadspritegfx ANIM_TAG_LIGHTNING
loadspritegfx ANIM_TAG_BLUE_STAR
clearmonbg ANIM_ATTACKER
waitforvisualfinish
call HealingEffect
@ -12318,14 +12319,13 @@ ZingZapSparks2:
return
gBattleAnimMove_NaturesMadness::
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles
loadspritegfx ANIM_TAG_THIN_RING @ring
loadspritegfx ANIM_TAG_SPARKLE_2 @stars
loadspritegfx ANIM_TAG_PINK_PETAL @pink
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles CrystalsTemplate
loadspritegfx ANIM_TAG_THIN_RING @ring PinkRingTemplate, GrayRingTemplate
loadspritegfx ANIM_TAG_SPARKLE_2 @stars PinkStarsTemplate
loadspritegfx ANIM_TAG_PINK_PETAL @pink PinkRingTemplate, PinkStarsTemplate
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green CrystalsTemplate
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green
monbg ANIM_ATTACKER
setalpha 14, 8
delay 0x1
@ -12361,6 +12361,8 @@ gBattleAnimMove_NaturesMadness::
delay 0x1
monbg ANIM_TARGET
waitforvisualfinish
unloadspritegfx ANIM_TAG_SPARKLE_2
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green grayRing
createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0
playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
delay 0xe
@ -13144,7 +13146,6 @@ gBattleAnimMove_StuffCheeks::
loadspritegfx ANIM_TAG_BERRY_NORMAL
loadspritegfx ANIM_TAG_SHARP_TEETH
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_SPARKLE_2
playsewithpan SE_M_METRONOME, 0xc0
createsprite gFloatingBerryTemplate, ANIM_ATTACKER, 1, 0x0
delay 0x45
@ -18070,10 +18071,199 @@ PopulationBombContinue:
gBattleAnimMove_RevivalBlessing::
goto gBattleAnimMove_LunarBlessing
gBattleAnimMove_TeraStarstorm::
loadspritegfx ANIM_TAG_STARSTORM
loadspritegfx ANIM_TAG_YELLOW_STAR
loadspritegfx ANIM_TAG_IMPACT
fadetobg BG_COSMIC
waitbgfadein
playsewithpan SE_FALL, SOUND_PAN_ATTACKER
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
call TeraStarstormCreateBeam
delay 2
jumpifmovetypeequal TYPE_STELLAR, TeraStarstormStellar
goto TeraStarstormSingle
TeraStarstormStellar:
jumpifdoublebattle TeraStarstormDouble
TeraStarstormSingle:
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1
delay 3
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, -5, 30, 0, 1
delay 3
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 5, 30, 0, 1
delay 3
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
delay 5
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
delay 5
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
waitforvisualfinish
restorebg
waitbgfadeout
end
TeraStarstormDouble:
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 1, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 2
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1
delay 3
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1
createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 5
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 5
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
delay 5
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1
createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1
waitforvisualfinish
restorebg
waitbgfadeout
end
TeraStarstormCreateBeam::
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -3, 1, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 1, 0, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 3, -1, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -2, 0, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 0, 1, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -1, -1, 0, 0, 20
createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 2, 0, 0, 0, 20
return
gBattleAnimMove_TachyonCutter::
loadspritegfx ANIM_TAG_CUT
loadspritegfx ANIM_TAG_BUBBLE
createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0
createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
waitforvisualfinish
end
gBattleAnimMove_SaltCure::
loadspritegfx ANIM_TAG_SALT_PARTICLE
loadspritegfx ANIM_TAG_WATER_ORB
call SaltCureEffect
call SaltCureEffect
call SaltCureEffect
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
waitforvisualfinish
call gBattleAnimGeneral_SaltCureDamage
end
SaltCureEffect:
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, ANIM_TARGET
delay 2
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
return
gBattleAnimMove_TeraBlast::
gBattleAnimMove_OrderUp::
gBattleAnimMove_GlaiveRush::
gBattleAnimMove_SaltCure::
gBattleAnimMove_TripleDive::
gBattleAnimMove_Doodle::
gBattleAnimMove_Ruination::
@ -18087,9 +18277,7 @@ gBattleAnimMove_CombatTorque::
gBattleAnimMove_MagicalTorque::
gBattleAnimMove_Psyblade::
gBattleAnimMove_MatchaGotcha::
gBattleAnimMove_TeraStarstorm::
gBattleAnimMove_MightyCleave::
gBattleAnimMove_TachyonCutter::
gBattleAnimMove_SupercellSlam::
end @to do
@ -28783,7 +28971,41 @@ General_AffectionHangedOn_3Hearts:
end
gBattleAnimGeneral_SaltCureDamage::
goto gBattleAnimStatus_Freeze
loadspritegfx ANIM_TAG_SALT_PARTICLE
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -10, -10, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 10, 20, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -29, 0, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 29, -20, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -5, 10, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 17, -12, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -20, 0, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, -15, 15, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 26, -5, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
delay 4
createsprite gSaltCureCrystalSpriteTemplate, ANIM_TARGET, 2, 20, 2, 1
playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
waitforvisualfinish
end
gBattleAnimGeneral_Rainbow::
call RainDrops

File diff suppressed because it is too large Load Diff

View File

@ -48,7 +48,7 @@ BattleScript_UseItemMessage:
return
BattleScript_ItemRestoreHPRet:
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
clearmoveresultflags MOVE_RESULT_NO_EFFECT
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_SCRIPTING
datahpupdate BS_SCRIPTING
@ -69,7 +69,7 @@ BattleScript_ItemRestoreHPEnd:
BattleScript_ItemRestoreHP_Party::
jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_ItemRestoreHP_SendOutRevivedBattler
bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
clearmoveresultflags MOVE_RESULT_NO_EFFECT
printstring STRINGID_ITEMRESTOREDSPECIESHEALTH
waitmessage B_WAIT_TIME_LONG
return
@ -195,13 +195,13 @@ BattleScript_TryNicknameCaughtMon::
printstring STRINGID_GIVENICKNAMECAPTURED
waitstate
setbyte gBattleCommunication, 0
trygivecaughtmonnick BattleScript_GiveCaughtMonEnd
givecaughtmon
trygivecaughtmonnick
givecaughtmon BattleScript_SuccessBallThrowEnd
printfromtable gCaughtMonStringIds
waitmessage B_WAIT_TIME_LONG
goto BattleScript_SuccessBallThrowEnd
BattleScript_GiveCaughtMonEnd::
givecaughtmon
givecaughtmon BattleScript_SuccessBallThrowEnd
BattleScript_SuccessBallThrowEnd::
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
finishturn

View File

@ -20,6 +20,7 @@
#include "constants/contest.h"
#include "constants/daycare.h"
#include "constants/decorations.h"
#include "constants/difficulty.h"
#include "constants/easy_chat.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
@ -88,7 +89,7 @@ gSpecialVars::
.4byte gSpecialVar_MonBoxId
.4byte gSpecialVar_MonBoxPos
.4byte gSpecialVar_Unused_0x8014
.4byte gTrainerBattleOpponent_A
.4byte gTrainerBattleParameter + 2 // gTrainerBattleParameter.params.opponentA
.include "data/specials.inc"
@ -1152,3 +1153,4 @@ EventScript_VsSeekerChargingDone::
.include "data/scripts/follower.inc"
.include "data/text/save.inc"
.include "data/text/birch_speech.inc"
.include "data/scripts/dexnav.inc"

View File

@ -25,9 +25,9 @@ gFieldEffectScriptPointers::
.4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH
.4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS
.4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS
.4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS
.4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2
.4byte gFieldEffectScript_UnusedSand @ FLDEFF_UNUSED_SAND
.4byte gFieldEffectScript_ShakingGrass @ FLDEFF_SHAKING_GRASS
.4byte gFieldEffectScript_ShakingGrass2 @ FLDEFF_SHAKING_LONG_GRASS
.4byte gFieldEffectScript_UnusedSand @ FLDEFF_SAND_HOLE
.4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING
.4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE
.4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS
@ -79,7 +79,8 @@ gFieldEffectScriptPointers::
.4byte gFieldEffectScript_TracksSlither @ FLDEFF_TRACKS_SLITHER
.4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG
.4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT
.4byte gFieldEffectScript_CaveDust @ FLDEFF_CAVE_DUST
gFieldEffectScript_ExclamationMarkIcon1::
field_eff_callnative FldEff_ExclamationMarkIcon
field_eff_end
@ -156,12 +157,12 @@ gFieldEffectScript_JumpLongGrass::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass
field_eff_end
gFieldEffectScript_UnusedGrass::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass
gFieldEffectScript_ShakingGrass::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShakingGrass
field_eff_end
gFieldEffectScript_UnusedGrass2::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2
gFieldEffectScript_ShakingGrass2::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShakingGrass2
field_eff_end
gFieldEffectScript_UnusedSand::
@ -374,3 +375,7 @@ gFieldEffectScript_TracksSpot::
gFieldEffectScript_TracksSlither::
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSlither
field_eff_end
gFieldEffectScript_CaveDust::
field_eff_loadfadedpal_callnative gSpritePalette_CaveDust FldEff_CaveDust
field_eff_end

View File

@ -105,7 +105,7 @@ BattlePyramid_WarpToTop::
@ TRAINER_PHILLIP is used as a placeholder
BattlePyramid_TrainerBattle::
trainerbattle TRAINER_BATTLE_PYRAMID, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText
trainerbattle TRAINER_BATTLE_HILL, OBJ_ID_NONE, TRAINER_PHILLIP, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE
pyramid_showhint
waitmessage
waitbuttonpress

View File

@ -51,138 +51,60 @@ BattleFrontier_Lounge5_Text_NatureGirlNoneShown::
.string "Boo!\n"
.string "Cheapie!$"
BattleFrontier_Lounge5_Text_NatureGirlHardy::
BattleFrontier_Lounge5_Text_NatureGirlAttackHighAttackLow::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlLonely::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlBrave::
BattleFrontier_Lounge5_Text_NatureGirlAttackHighDefenseLow::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
BattleFrontier_Lounge5_Text_NatureGirlAdamant::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlNaughty::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlBold::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlRelaxed::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlImpish::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
BattleFrontier_Lounge5_Text_NatureGirlLax::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlTimid::
BattleFrontier_Lounge5_Text_NatureGirlAttackHighSupportLow::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
BattleFrontier_Lounge5_Text_NatureGirlHasty::
BattleFrontier_Lounge5_Text_NatureGirlDefenseHighAttackLow::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "It will battle even if it has a lot\l"
.string "of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlSerious::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlJolly::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlModest::
BattleFrontier_Lounge5_Text_NatureGirlDefenseHighDefenseLow::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself whether\l"
.string "or not it has a lot of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlMild::
BattleFrontier_Lounge5_Text_NatureGirlDefenseHighSupportLow::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
BattleFrontier_Lounge5_Text_NatureGirlBashful::
BattleFrontier_Lounge5_Text_NatureGirlSupportHighAttackLow::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself even\l"
.string "if it has a lot of ouchies!$"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlRash::
BattleFrontier_Lounge5_Text_NatureGirlSupportHighDefenseLow::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "But if it gets enough ouchies,\l"
.string "it will worry about itself!$"
BattleFrontier_Lounge5_Text_NatureGirlSupportHighSupportLow::
.string "Hmhm…\p"
.string "This one says it likes to be sneaky!\n"
.string "It says it likes to be sneaky even\l"
.string "if it has a lot of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlCalm::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "It says it worries about itself even\l"
.string "if it has a lot of ouchies!$"
BattleFrontier_Lounge5_Text_NatureGirlGentle::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will hit back!$"
BattleFrontier_Lounge5_Text_NatureGirlSassy::
.string "Hmhm…\p"
.string "This one says it likes to battle!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
BattleFrontier_Lounge5_Text_NatureGirlCareful::
.string "Hmhm…\p"
.string "This one says it looks after itself!\n"
.string "But if it gets enough ouchies,\l"
.string "it will turn sneaky!$"
BattleFrontier_Lounge5_Text_NatureGirlEgg::
.string "That's silly! An EGG is asleep!\n"
.string "I can't talk to it!$"

View File

@ -104,7 +104,7 @@ LavaridgeTown_Gym_1F_EventScript_FlanneryRematch::
end
LavaridgeTown_Gym_1F_EventScript_Cole::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_COLE, LOCALID_COLE, LavaridgeTown_Gym_1F_Text_ColeIntro, LavaridgeTown_Gym_1F_Text_ColeDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_COLE, TRAINER_COLE, LavaridgeTown_Gym_1F_Text_ColeIntro, LavaridgeTown_Gym_1F_Text_ColeDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_1F_Text_ColePostBattle, MSGBOX_AUTOCLOSE
end
@ -116,37 +116,37 @@ LavaridgeTown_Gym_EventScript_CheckTrainerScript::
end
LavaridgeTown_Gym_1F_EventScript_Axle::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_AXLE, LOCALID_AXLE, LavaridgeTown_Gym_1F_Text_AxleIntro, LavaridgeTown_Gym_1F_Text_AxleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_AXLE, TRAINER_AXLE, LavaridgeTown_Gym_1F_Text_AxleIntro, LavaridgeTown_Gym_1F_Text_AxleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_1F_Text_AxlePostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_B1F_EventScript_Keegan::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_KEEGAN, LOCALID_KEEGAN, LavaridgeTown_Gym_B1F_Text_KeeganIntro, LavaridgeTown_Gym_B1F_Text_KeeganDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_KEEGAN, TRAINER_KEEGAN, LavaridgeTown_Gym_B1F_Text_KeeganIntro, LavaridgeTown_Gym_B1F_Text_KeeganDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_B1F_Text_KeeganPostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_1F_EventScript_Danielle::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_DANIELLE, LOCALID_DANIELLE, LavaridgeTown_Gym_1F_Text_DanielleIntro, LavaridgeTown_Gym_1F_Text_DanielleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_DANIELLE, TRAINER_DANIELLE, LavaridgeTown_Gym_1F_Text_DanielleIntro, LavaridgeTown_Gym_1F_Text_DanielleDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_1F_Text_DaniellePostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_1F_EventScript_Gerald::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_GERALD, LOCALID_GERALD, LavaridgeTown_Gym_1F_Text_GeraldIntro, LavaridgeTown_Gym_1F_Text_GeraldDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_GERALD, TRAINER_GERALD, LavaridgeTown_Gym_1F_Text_GeraldIntro, LavaridgeTown_Gym_1F_Text_GeraldDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_1F_Text_GeraldPostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_B1F_EventScript_Jace::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_JACE, LOCALID_JACE, LavaridgeTown_Gym_B1F_Text_JaceIntro, LavaridgeTown_Gym_B1F_Text_JaceDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_JACE, TRAINER_JACE, LavaridgeTown_Gym_B1F_Text_JaceIntro, LavaridgeTown_Gym_B1F_Text_JaceDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_B1F_Text_JacePostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_B1F_EventScript_Jeff::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_JEFF, LOCALID_JEFF, LavaridgeTown_Gym_B1F_Text_JeffIntro, LavaridgeTown_Gym_B1F_Text_JeffDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_JEFF, TRAINER_JEFF, LavaridgeTown_Gym_B1F_Text_JeffIntro, LavaridgeTown_Gym_B1F_Text_JeffDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_B1F_Text_JeffPostBattle, MSGBOX_AUTOCLOSE
end
LavaridgeTown_Gym_B1F_EventScript_Eli::
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, TRAINER_ELI, LOCALID_ELI, LavaridgeTown_Gym_B1F_Text_EliIntro, LavaridgeTown_Gym_B1F_Text_EliDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_ELI, TRAINER_ELI, LavaridgeTown_Gym_B1F_Text_EliIntro, LavaridgeTown_Gym_B1F_Text_EliDefeat, LavaridgeTown_Gym_EventScript_CheckTrainerScript, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
msgbox LavaridgeTown_Gym_B1F_Text_EliPostBattle, MSGBOX_AUTOCLOSE
end

View File

@ -1,9 +1,16 @@
@ 'requests_effects' should be set to 1 if the command contains a call
@ to 'Script_RequestEffects', which allows it to be analyzed with
@ 'RunScriptImmediatelyUntilEffect'.
.ifndef SCRIPT_CMD_TABLE_ENTRY_MACRO
.set SCRIPT_CMD_TABLE_ENTRY_MACRO, 1
.macro script_cmd_table_entry constant:req value:req
.macro script_cmd_table_entry constant:req value:req, requests_effects=0
.if ALLOCATE_SCRIPT_CMD_TABLE
.if \requests_effects == 0
.4byte \value
.else
.4byte \value + ROM_SIZE
.endif
.else
enum \constant
.endif
.endm
@ -15,235 +22,235 @@
.align 2
gScriptCmdTable::
.endif
script_cmd_table_entry SCR_OP_NOP ScrCmd_nop @ 0x00
script_cmd_table_entry SCR_OP_NOP1 ScrCmd_nop1 @ 0x01
script_cmd_table_entry SCR_OP_END ScrCmd_end @ 0x02
script_cmd_table_entry SCR_OP_RETURN ScrCmd_return @ 0x03
script_cmd_table_entry SCR_OP_CALL ScrCmd_call @ 0x04
script_cmd_table_entry SCR_OP_GOTO ScrCmd_goto @ 0x05
script_cmd_table_entry SCR_OP_GOTO_IF ScrCmd_goto_if @ 0x06
script_cmd_table_entry SCR_OP_CALL_IF ScrCmd_call_if @ 0x07
script_cmd_table_entry SCR_OP_GOTO_STD ScrCmd_gotostd @ 0x08
script_cmd_table_entry SCR_OP_CALL_STD ScrCmd_callstd @ 0x09
script_cmd_table_entry SCR_OP_GOTO_STD_IF ScrCmd_gotostd_if @ 0x0a
script_cmd_table_entry SCR_OP_CALL_STD_IF ScrCmd_callstd_if @ 0x0b
script_cmd_table_entry SCR_OP_RETURNRAM ScrCmd_returnram @ 0x0c
script_cmd_table_entry SCR_OP_ENDRAM ScrCmd_endram @ 0x0d
script_cmd_table_entry SCR_OP_SETMYSTERYEVENTSTATUS ScrCmd_setmysteryeventstatus @ 0x0e
script_cmd_table_entry SCR_OP_LOAD_WORD ScrCmd_loadword @ 0x0f
script_cmd_table_entry SCR_OP_LOAD_BYTE ScrCmd_loadbyte @ 0x10
script_cmd_table_entry SCR_OP_SETPTR ScrCmd_setptr @ 0x11
script_cmd_table_entry SCR_OP_LOADBYTEFROMPTR ScrCmd_loadbytefromptr @ 0x12
script_cmd_table_entry SCR_OP_SETPTRBYTE ScrCmd_setptrbyte @ 0x13
script_cmd_table_entry SCR_OP_COPYLOCAL ScrCmd_copylocal @ 0x14
script_cmd_table_entry SCR_OP_COPYBYTE ScrCmd_copybyte @ 0x15
script_cmd_table_entry SCR_OP_SETVAR ScrCmd_setvar @ 0x16
script_cmd_table_entry SCR_OP_ADDVAR ScrCmd_addvar @ 0x17
script_cmd_table_entry SCR_OP_SUBVAR ScrCmd_subvar @ 0x18
script_cmd_table_entry SCR_OP_COPYVAR ScrCmd_copyvar @ 0x19
script_cmd_table_entry SCR_OP_SETORCOPYVAR ScrCmd_setorcopyvar @ 0x1a
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_LOCAL ScrCmd_compare_local_to_local @ 0x1b
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_VALUE ScrCmd_compare_local_to_value @ 0x1c
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_PTR ScrCmd_compare_local_to_ptr @ 0x1d
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_LOCAL ScrCmd_compare_ptr_to_local @ 0x1e
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_VALUE ScrCmd_compare_ptr_to_value @ 0x1f
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_PTR ScrCmd_compare_ptr_to_ptr @ 0x20
script_cmd_table_entry SCR_OP_COMPARE_VAR_TO_VALUE ScrCmd_compare_var_to_value @ 0x21
script_cmd_table_entry SCR_OP_COMPARE_VAR_TO_VAR ScrCmd_compare_var_to_var @ 0x22
script_cmd_table_entry SCR_OP_CALLNATIVE ScrCmd_callnative @ 0x23
script_cmd_table_entry SCR_OP_GOTONATIVE ScrCmd_gotonative @ 0x24
script_cmd_table_entry SCR_OP_SPECIAL ScrCmd_special @ 0x25
script_cmd_table_entry SCR_OP_SPECIALVAR ScrCmd_specialvar @ 0x26
script_cmd_table_entry SCR_OP_WAITSTATE ScrCmd_waitstate @ 0x27
script_cmd_table_entry SCR_OP_DELAY ScrCmd_delay @ 0x28
script_cmd_table_entry SCR_OP_SETFLAG ScrCmd_setflag @ 0x29
script_cmd_table_entry SCR_OP_CLEARFLAG ScrCmd_clearflag @ 0x2a
script_cmd_table_entry SCR_OP_CHECKFLAG ScrCmd_checkflag @ 0x2b
script_cmd_table_entry SCR_OP_INITCLOCK ScrCmd_initclock @ 0x2c
script_cmd_table_entry SCR_OP_DOTIMEBASEDEVENTS ScrCmd_dotimebasedevents @ 0x2d
script_cmd_table_entry SCR_OP_GETTIME ScrCmd_gettime @ 0x2e
script_cmd_table_entry SCR_OP_PLAYSE ScrCmd_playse @ 0x2f
script_cmd_table_entry SCR_OP_WAITSE ScrCmd_waitse @ 0x30
script_cmd_table_entry SCR_OP_PLAYFANFARE ScrCmd_playfanfare @ 0x31
script_cmd_table_entry SCR_OP_WAITFANFARE ScrCmd_waitfanfare @ 0x32
script_cmd_table_entry SCR_OP_PLAYBGM ScrCmd_playbgm @ 0x33
script_cmd_table_entry SCR_OP_SAVEBGM ScrCmd_savebgm @ 0x34
script_cmd_table_entry SCR_OP_FADEDEFAULTBGM ScrCmd_fadedefaultbgm @ 0x35
script_cmd_table_entry SCR_OP_FADENEWBGM ScrCmd_fadenewbgm @ 0x36
script_cmd_table_entry SCR_OP_FADEOUTBGM ScrCmd_fadeoutbgm @ 0x37
script_cmd_table_entry SCR_OP_FADEINBGM ScrCmd_fadeinbgm @ 0x38
script_cmd_table_entry SCR_OP_WARP ScrCmd_warp @ 0x39
script_cmd_table_entry SCR_OP_WARPSILENT ScrCmd_warpsilent @ 0x3a
script_cmd_table_entry SCR_OP_WARPDOOR ScrCmd_warpdoor @ 0x3b
script_cmd_table_entry SCR_OP_WARPHOLE ScrCmd_warphole @ 0x3c
script_cmd_table_entry SCR_OP_WARPTELEPORT ScrCmd_warpteleport @ 0x3d
script_cmd_table_entry SCR_OP_SETWARP ScrCmd_setwarp @ 0x3e
script_cmd_table_entry SCR_OP_SETDYNAMICWARP ScrCmd_setdynamicwarp @ 0x3f
script_cmd_table_entry SCR_OP_SETDIVEWARP ScrCmd_setdivewarp @ 0x40
script_cmd_table_entry SCR_OP_SETHOLEWARP ScrCmd_setholewarp @ 0x41
script_cmd_table_entry SCR_OP_GETPLAYERXY ScrCmd_getplayerxy @ 0x42
script_cmd_table_entry SCR_OP_GETPARTYSIZE ScrCmd_getpartysize @ 0x43
script_cmd_table_entry SCR_OP_ADDITEM ScrCmd_additem @ 0x44
script_cmd_table_entry SCR_OP_REMOVEITEM ScrCmd_removeitem @ 0x45
script_cmd_table_entry SCR_OP_CHECKITEMSPACE ScrCmd_checkitemspace @ 0x46
script_cmd_table_entry SCR_OP_CHECKITEM ScrCmd_checkitem @ 0x47
script_cmd_table_entry SCR_OP_CHECKITEMTYPE ScrCmd_checkitemtype @ 0x48
script_cmd_table_entry SCR_OP_ADDPCITEM ScrCmd_addpcitem @ 0x49
script_cmd_table_entry SCR_OP_CHECKPCITEM ScrCmd_checkpcitem @ 0x4a
script_cmd_table_entry SCR_OP_ADDDECORATION ScrCmd_adddecoration @ 0x4b
script_cmd_table_entry SCR_OP_REMOVEDECORATION ScrCmd_removedecoration @ 0x4c
script_cmd_table_entry SCR_OP_CHECKDECOR ScrCmd_checkdecor @ 0x4d
script_cmd_table_entry SCR_OP_CHECKDECORSPACE ScrCmd_checkdecorspace @ 0x4e
script_cmd_table_entry SCR_OP_APPLYMOVEMENT ScrCmd_applymovement @ 0x4f
script_cmd_table_entry SCR_OP_APPLYMOVEMENTAT ScrCmd_applymovementat @ 0x50
script_cmd_table_entry SCR_OP_WAITMOVEMENT ScrCmd_waitmovement @ 0x51
script_cmd_table_entry SCR_OP_WAITMOVEMENTAT ScrCmd_waitmovementat @ 0x52
script_cmd_table_entry SCR_OP_REMOVEOBJECT ScrCmd_removeobject @ 0x53
script_cmd_table_entry SCR_OP_REMOVEOBJECTAT ScrCmd_removeobjectat @ 0x54
script_cmd_table_entry SCR_OP_ADDOBJECT ScrCmd_addobject @ 0x55
script_cmd_table_entry SCR_OP_ADDOBJECTAT ScrCmd_addobjectat @ 0x56
script_cmd_table_entry SCR_OP_SETOBJECTXY ScrCmd_setobjectxy @ 0x57
script_cmd_table_entry SCR_OP_SHOWOBJECTAT ScrCmd_showobjectat @ 0x58
script_cmd_table_entry SCR_OP_HIDEOBJECTAT ScrCmd_hideobjectat @ 0x59
script_cmd_table_entry SCR_OP_FACEPLAYER ScrCmd_faceplayer @ 0x5a
script_cmd_table_entry SCR_OP_TURNOBJECT ScrCmd_turnobject @ 0x5b
script_cmd_table_entry SCR_OP_TRAINERBATTLE ScrCmd_trainerbattle @ 0x5c
script_cmd_table_entry SCR_OP_DOTRAINERBATTLE ScrCmd_dotrainerbattle @ 0x5d
script_cmd_table_entry SCR_OP_GOTOPOSTBATTLESCRIPT ScrCmd_gotopostbattlescript @ 0x5e
script_cmd_table_entry SCR_OP_GOTOBEATENSCRIPT ScrCmd_gotobeatenscript @ 0x5f
script_cmd_table_entry SCR_OP_CHECKTRAINERFLAG ScrCmd_checktrainerflag @ 0x60
script_cmd_table_entry SCR_OP_SETTRAINERFLAG ScrCmd_settrainerflag @ 0x61
script_cmd_table_entry SCR_OP_CLEARTRAINERFLAG ScrCmd_cleartrainerflag @ 0x62
script_cmd_table_entry SCR_OP_SETOBJECTXYPERM ScrCmd_setobjectxyperm @ 0x63
script_cmd_table_entry SCR_OP_COPYOBJECTXYTOPERM ScrCmd_copyobjectxytoperm @ 0x64
script_cmd_table_entry SCR_OP_SETOBJECTMOVEMENTTYPE ScrCmd_setobjectmovementtype @ 0x65
script_cmd_table_entry SCR_OP_WAITMESSAGE ScrCmd_waitmessage @ 0x66
script_cmd_table_entry SCR_OP_MESSAGE ScrCmd_message @ 0x67
script_cmd_table_entry SCR_OP_CLOSEMESSAGE ScrCmd_closemessage @ 0x68
script_cmd_table_entry SCR_OP_LOCKALL ScrCmd_lockall @ 0x69
script_cmd_table_entry SCR_OP_LOCK ScrCmd_lock @ 0x6a
script_cmd_table_entry SCR_OP_RELEASEALL ScrCmd_releaseall @ 0x6b
script_cmd_table_entry SCR_OP_RELEASE ScrCmd_release @ 0x6c
script_cmd_table_entry SCR_OP_WAITBUTTONPRESS ScrCmd_waitbuttonpress @ 0x6d
script_cmd_table_entry SCR_OP_YESNOBOX ScrCmd_yesnobox @ 0x6e
script_cmd_table_entry SCR_OP_MULTICHOICE ScrCmd_multichoice @ 0x6f
script_cmd_table_entry SCR_OP_MULTICHOICEDEFAULT ScrCmd_multichoicedefault @ 0x70
script_cmd_table_entry SCR_OP_MULTICHOICEGRID ScrCmd_multichoicegrid @ 0x71
script_cmd_table_entry SCR_OP_DRAWBOX ScrCmd_drawbox @ 0x72
script_cmd_table_entry SCR_OP_ERASEBOX ScrCmd_erasebox @ 0x73
script_cmd_table_entry SCR_OP_DRAWBOXTEXT ScrCmd_drawboxtext @ 0x74
script_cmd_table_entry SCR_OP_SHOWMONPIC ScrCmd_showmonpic @ 0x75
script_cmd_table_entry SCR_OP_HIDEMONPIC ScrCmd_hidemonpic @ 0x76
script_cmd_table_entry SCR_OP_SHOWCONTESTPAINTING ScrCmd_showcontestpainting @ 0x77
script_cmd_table_entry SCR_OP_BRAILLEMESSAGE ScrCmd_braillemessage @ 0x78
script_cmd_table_entry SCR_OP_GIVEMON ScrCmd_nop1 @ 0x79
script_cmd_table_entry SCR_OP_GIVEEGG ScrCmd_giveegg @ 0x7a
script_cmd_table_entry SCR_OP_SETMONMOVE ScrCmd_setmonmove @ 0x7b
script_cmd_table_entry SCR_OP_CHECKPARTYMOVE ScrCmd_checkpartymove @ 0x7c
script_cmd_table_entry SCR_OP_BUFFERSPECIESNAME ScrCmd_bufferspeciesname @ 0x7d
script_cmd_table_entry SCR_OP_BUFFERLEADMONSPECIESNAME ScrCmd_bufferleadmonspeciesname @ 0x7e
script_cmd_table_entry SCR_OP_BUFFERPARTYMONNICK ScrCmd_bufferpartymonnick @ 0x7f
script_cmd_table_entry SCR_OP_BUFFERITEMNAME ScrCmd_bufferitemname @ 0x80
script_cmd_table_entry SCR_OP_BUFFERDECORATIONNAME ScrCmd_bufferdecorationname @ 0x81
script_cmd_table_entry SCR_OP_BUFFERMOVENAME ScrCmd_buffermovename @ 0x82
script_cmd_table_entry SCR_OP_BUFFERNUMBERSTRING ScrCmd_buffernumberstring @ 0x83
script_cmd_table_entry SCR_OP_BUFFERSTDSTRING ScrCmd_bufferstdstring @ 0x84
script_cmd_table_entry SCR_OP_BUFFERSTRING ScrCmd_bufferstring @ 0x85
script_cmd_table_entry SCR_OP_POKEMART ScrCmd_pokemart @ 0x86
script_cmd_table_entry SCR_OP_POKEMARTDECORATION ScrCmd_pokemartdecoration @ 0x87
script_cmd_table_entry SCR_OP_POKEMARTDECORATION2 ScrCmd_pokemartdecoration2 @ 0x88
script_cmd_table_entry SCR_OP_PLAYSLOTMACHINE ScrCmd_playslotmachine @ 0x89
script_cmd_table_entry SCR_OP_SETBERRYTREE ScrCmd_setberrytree @ 0x8a
script_cmd_table_entry SCR_OP_CHOOSECONTESTMON ScrCmd_choosecontestmon @ 0x8b
script_cmd_table_entry SCR_OP_STARTCONTEST ScrCmd_startcontest @ 0x8c
script_cmd_table_entry SCR_OP_SHOWCONTESTRESULTS ScrCmd_showcontestresults @ 0x8d
script_cmd_table_entry SCR_OP_CONTESTLINKTRANSFER ScrCmd_contestlinktransfer @ 0x8e
script_cmd_table_entry SCR_OP_RANDOM ScrCmd_random @ 0x8f
script_cmd_table_entry SCR_OP_ADDMONEY ScrCmd_addmoney @ 0x90
script_cmd_table_entry SCR_OP_REMOVEMONEY ScrCmd_removemoney @ 0x91
script_cmd_table_entry SCR_OP_CHECKMONEY ScrCmd_checkmoney @ 0x92
script_cmd_table_entry SCR_OP_SHOWMONEYBOX ScrCmd_showmoneybox @ 0x93
script_cmd_table_entry SCR_OP_HIDEMONEYBOX ScrCmd_hidemoneybox @ 0x94
script_cmd_table_entry SCR_OP_UPDATEMONEYBOX ScrCmd_updatemoneybox @ 0x95
script_cmd_table_entry SCR_OP_GETPOKENEWSACTIVE ScrCmd_getpokenewsactive @ 0x96
script_cmd_table_entry SCR_OP_FADESCREEN ScrCmd_fadescreen @ 0x97
script_cmd_table_entry SCR_OP_FADESCREENSPEED ScrCmd_fadescreenspeed @ 0x98
script_cmd_table_entry SCR_OP_SETFLASHLEVEL ScrCmd_setflashlevel @ 0x99
script_cmd_table_entry SCR_OP_ANIMATEFLASH ScrCmd_animateflash @ 0x9a
script_cmd_table_entry SCR_OP_MESSAGEAUTOSCROLL ScrCmd_messageautoscroll @ 0x9b
script_cmd_table_entry SCR_OP_DOFIELDEFFECT ScrCmd_dofieldeffect @ 0x9c
script_cmd_table_entry SCR_OP_SETFIELDEFFECTARGUMENT ScrCmd_setfieldeffectargument @ 0x9d
script_cmd_table_entry SCR_OP_WAITFIELDEFFECT ScrCmd_waitfieldeffect @ 0x9e
script_cmd_table_entry SCR_OP_SETRESPAWN ScrCmd_setrespawn @ 0x9f
script_cmd_table_entry SCR_OP_CHECKPLAYERGENDER ScrCmd_checkplayergender @ 0xa0
script_cmd_table_entry SCR_OP_PLAYMONCRY ScrCmd_playmoncry @ 0xa1
script_cmd_table_entry SCR_OP_SETMETATILE ScrCmd_setmetatile @ 0xa2
script_cmd_table_entry SCR_OP_RESETWEATHER ScrCmd_resetweather @ 0xa3
script_cmd_table_entry SCR_OP_SETWEATHER ScrCmd_setweather @ 0xa4
script_cmd_table_entry SCR_OP_DOWEATHER ScrCmd_doweather @ 0xa5
script_cmd_table_entry SCR_OP_SETSTEPCALLBACK ScrCmd_setstepcallback @ 0xa6
script_cmd_table_entry SCR_OP_SETMAPLAYOUTINDEX ScrCmd_setmaplayoutindex @ 0xa7
script_cmd_table_entry SCR_OP_SETOBJECTSUBPRIORITY ScrCmd_setobjectsubpriority @ 0xa8
script_cmd_table_entry SCR_OP_RESETOBJECTSUBPRIORITY ScrCmd_resetobjectsubpriority @ 0xa9
script_cmd_table_entry SCR_OP_CREATEVOBJECT ScrCmd_createvobject @ 0xaa
script_cmd_table_entry SCR_OP_TURNVOBJECT ScrCmd_turnvobject @ 0xab
script_cmd_table_entry SCR_OP_OPENDOOR ScrCmd_opendoor @ 0xac
script_cmd_table_entry SCR_OP_CLOSEDOOR ScrCmd_closedoor @ 0xad
script_cmd_table_entry SCR_OP_WAITDOORANIM ScrCmd_waitdooranim @ 0xae
script_cmd_table_entry SCR_OP_SETDOOROPEN ScrCmd_setdooropen @ 0xaf
script_cmd_table_entry SCR_OP_SETDOORCLOSED ScrCmd_setdoorclosed @ 0xb0
script_cmd_table_entry SCR_OP_ADDELEVMENUITEM ScrCmd_addelevmenuitem @ 0xb1
script_cmd_table_entry SCR_OP_SHOWELEVMENU ScrCmd_showelevmenu @ 0xb2
script_cmd_table_entry SCR_OP_CHECKCOINS ScrCmd_checkcoins @ 0xb3
script_cmd_table_entry SCR_OP_ADDCOINS ScrCmd_addcoins @ 0xb4
script_cmd_table_entry SCR_OP_REMOVECOINS ScrCmd_removecoins @ 0xb5
script_cmd_table_entry SCR_OP_SETWILDBATTLE ScrCmd_setwildbattle @ 0xb6
script_cmd_table_entry SCR_OP_DOWILDBATTLE ScrCmd_dowildbattle @ 0xb7
script_cmd_table_entry SCR_OP_SETVADDRESS ScrCmd_setvaddress @ 0xb8
script_cmd_table_entry SCR_OP_VGOTO ScrCmd_vgoto @ 0xb9
script_cmd_table_entry SCR_OP_VCALL ScrCmd_vcall @ 0xba
script_cmd_table_entry SCR_OP_VGOTO_IF ScrCmd_vgoto_if @ 0xbb
script_cmd_table_entry SCR_OP_VCALL_IF ScrCmd_vcall_if @ 0xbc
script_cmd_table_entry SCR_OP_VMESSAGE ScrCmd_vmessage @ 0xbd
script_cmd_table_entry SCR_OP_VBUFFERMESSAGE ScrCmd_vbuffermessage @ 0xbe
script_cmd_table_entry SCR_OP_VBUFFERSTRING ScrCmd_vbufferstring @ 0xbf
script_cmd_table_entry SCR_OP_SHOWCOINSBOX ScrCmd_showcoinsbox @ 0xc0
script_cmd_table_entry SCR_OP_HIDECOINSBOX ScrCmd_hidecoinsbox @ 0xc1
script_cmd_table_entry SCR_OP_UPDATECOINSBOX ScrCmd_updatecoinsbox @ 0xc2
script_cmd_table_entry SCR_OP_INCREMENTGAMESTAT ScrCmd_incrementgamestat @ 0xc3
script_cmd_table_entry SCR_OP_SETESCAPEWARP ScrCmd_setescapewarp @ 0xc4
script_cmd_table_entry SCR_OP_WAITMONCRY ScrCmd_waitmoncry @ 0xc5
script_cmd_table_entry SCR_OP_BUFFERBOXNAME ScrCmd_bufferboxname @ 0xc6
script_cmd_table_entry SCR_OP_TEXTCOLOR ScrCmd_nop1 @ 0xc7
script_cmd_table_entry SCR_OP_LOADHELP ScrCmd_nop1 @ 0xc8
script_cmd_table_entry SCR_OP_UNLOADHELP ScrCmd_nop1 @ 0xc9
script_cmd_table_entry SCR_OP_SIGNMSG ScrCmd_nop1 @ 0xca
script_cmd_table_entry SCR_OP_NORMALMSG ScrCmd_nop1 @ 0xcb
script_cmd_table_entry SCR_OP_COMPAREHIDDENVAR ScrCmd_nop1 @ 0xcc
script_cmd_table_entry SCR_OP_SETMODERNFATEFULENCOUNTER ScrCmd_setmodernfatefulencounter @ 0xcd
script_cmd_table_entry SCR_OP_CHECKMODERNFATEFULENCOUNTER ScrCmd_checkmodernfatefulencounter @ 0xce
script_cmd_table_entry SCR_OP_TRYWONDERCARDSCRIPT ScrCmd_trywondercardscript @ 0xcf
script_cmd_table_entry SCR_OP_SETWORLDMAPFLAG ScrCmd_nop1 @ 0xd0
script_cmd_table_entry SCR_OP_WARPSPINENTER ScrCmd_warpspinenter @ 0xd1
script_cmd_table_entry SCR_OP_SETMONMETLOCATION ScrCmd_setmonmetlocation @ 0xd2
script_cmd_table_entry SCR_OP_MOVEROTATINGTILEOBJECTS ScrCmd_moverotatingtileobjects @ 0xd3
script_cmd_table_entry SCR_OP_TURNROTATINGTILEOBJECTS ScrCmd_turnrotatingtileobjects @ 0xd4
script_cmd_table_entry SCR_OP_INITROTATINGTILEPUZZLE ScrCmd_initrotatingtilepuzzle @ 0xd5
script_cmd_table_entry SCR_OP_FREEROTATINGTILEPUZZLE ScrCmd_freerotatingtilepuzzle @ 0xd6
script_cmd_table_entry SCR_OP_WARPMOSSDEEPGYM ScrCmd_warpmossdeepgym @ 0xd7
script_cmd_table_entry SCR_OP_SELECTAPPROACHINGTRAINER ScrCmd_selectapproachingtrainer @ 0xd8
script_cmd_table_entry SCR_OP_LOCKFORTRAINER ScrCmd_lockfortrainer @ 0xd9
script_cmd_table_entry SCR_OP_CLOSEBRAILLEMESSAGE ScrCmd_closebraillemessage @ 0xda
script_cmd_table_entry SCR_OP_MESSAGEINSTANT ScrCmd_messageinstant @ 0xdb
script_cmd_table_entry SCR_OP_FADESCREENSWAPBUFFERS ScrCmd_fadescreenswapbuffers @ 0xdc
script_cmd_table_entry SCR_OP_BUFFERTRAINERCLASSNAME ScrCmd_buffertrainerclassname @ 0xdd
script_cmd_table_entry SCR_OP_BUFFERTRAINERNAME ScrCmd_buffertrainername @ 0xde
script_cmd_table_entry SCR_OP_POKENAVCALL ScrCmd_pokenavcall @ 0xdf
script_cmd_table_entry SCR_OP_WARPWHITEFADE ScrCmd_warpwhitefade @ 0xe0
script_cmd_table_entry SCR_OP_BUFFERCONTESTNAME ScrCmd_buffercontestname @ 0xe1
script_cmd_table_entry SCR_OP_BUFFERITEMNAMEPLURAL ScrCmd_bufferitemnameplural @ 0xe2
script_cmd_table_entry SCR_OP_DYNMULTICHOICE ScrCmd_dynmultichoice @ 0xe3
script_cmd_table_entry SCR_OP_DYNMULTIPUSH ScrCmd_dynmultipush @ 0xe4
script_cmd_table_entry SCR_OP_NOP ScrCmd_nop, requests_effects=1 @ 0x00
script_cmd_table_entry SCR_OP_NOP1 ScrCmd_nop1, requests_effects=1 @ 0x01
script_cmd_table_entry SCR_OP_END ScrCmd_end, requests_effects=1 @ 0x02
script_cmd_table_entry SCR_OP_RETURN ScrCmd_return, requests_effects=1 @ 0x03
script_cmd_table_entry SCR_OP_CALL ScrCmd_call, requests_effects=1 @ 0x04
script_cmd_table_entry SCR_OP_GOTO ScrCmd_goto, requests_effects=1 @ 0x05
script_cmd_table_entry SCR_OP_GOTO_IF ScrCmd_goto_if, requests_effects=1 @ 0x06
script_cmd_table_entry SCR_OP_CALL_IF ScrCmd_call_if, requests_effects=1 @ 0x07
script_cmd_table_entry SCR_OP_GOTO_STD ScrCmd_gotostd, requests_effects=1 @ 0x08
script_cmd_table_entry SCR_OP_CALL_STD ScrCmd_callstd, requests_effects=1 @ 0x09
script_cmd_table_entry SCR_OP_GOTO_STD_IF ScrCmd_gotostd_if, requests_effects=1 @ 0x0a
script_cmd_table_entry SCR_OP_CALL_STD_IF ScrCmd_callstd_if, requests_effects=1 @ 0x0b
script_cmd_table_entry SCR_OP_RETURNRAM ScrCmd_returnram, requests_effects=1 @ 0x0c
script_cmd_table_entry SCR_OP_ENDRAM ScrCmd_endram, requests_effects=1 @ 0x0d
script_cmd_table_entry SCR_OP_SETMYSTERYEVENTSTATUS ScrCmd_setmysteryeventstatus, requests_effects=1 @ 0x0e
script_cmd_table_entry SCR_OP_LOAD_WORD ScrCmd_loadword, requests_effects=1 @ 0x0f
script_cmd_table_entry SCR_OP_LOAD_BYTE ScrCmd_loadbyte, requests_effects=1 @ 0x10
script_cmd_table_entry SCR_OP_SETPTR ScrCmd_setptr, requests_effects=1 @ 0x11
script_cmd_table_entry SCR_OP_LOADBYTEFROMPTR ScrCmd_loadbytefromptr, requests_effects=1 @ 0x12
script_cmd_table_entry SCR_OP_SETPTRBYTE ScrCmd_setptrbyte, requests_effects=1 @ 0x13
script_cmd_table_entry SCR_OP_COPYLOCAL ScrCmd_copylocal, requests_effects=1 @ 0x14
script_cmd_table_entry SCR_OP_COPYBYTE ScrCmd_copybyte, requests_effects=1 @ 0x15
script_cmd_table_entry SCR_OP_SETVAR ScrCmd_setvar, requests_effects=1 @ 0x16
script_cmd_table_entry SCR_OP_ADDVAR ScrCmd_addvar, requests_effects=1 @ 0x17
script_cmd_table_entry SCR_OP_SUBVAR ScrCmd_subvar, requests_effects=1 @ 0x18
script_cmd_table_entry SCR_OP_COPYVAR ScrCmd_copyvar, requests_effects=1 @ 0x19
script_cmd_table_entry SCR_OP_SETORCOPYVAR ScrCmd_setorcopyvar, requests_effects=1 @ 0x1a
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_LOCAL ScrCmd_compare_local_to_local, requests_effects=1 @ 0x1b
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_VALUE ScrCmd_compare_local_to_value, requests_effects=1 @ 0x1c
script_cmd_table_entry SCR_OP_COMPARE_LOCAL_TO_PTR ScrCmd_compare_local_to_ptr, requests_effects=1 @ 0x1d
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_LOCAL ScrCmd_compare_ptr_to_local, requests_effects=1 @ 0x1e
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_VALUE ScrCmd_compare_ptr_to_value, requests_effects=1 @ 0x1f
script_cmd_table_entry SCR_OP_COMPARE_PTR_TO_PTR ScrCmd_compare_ptr_to_ptr, requests_effects=1 @ 0x20
script_cmd_table_entry SCR_OP_COMPARE_VAR_TO_VALUE ScrCmd_compare_var_to_value, requests_effects=1 @ 0x21
script_cmd_table_entry SCR_OP_COMPARE_VAR_TO_VAR ScrCmd_compare_var_to_var, requests_effects=1 @ 0x22
script_cmd_table_entry SCR_OP_CALLNATIVE ScrCmd_callnative, requests_effects=1 @ 0x23
script_cmd_table_entry SCR_OP_GOTONATIVE ScrCmd_gotonative, requests_effects=1 @ 0x24
script_cmd_table_entry SCR_OP_SPECIAL ScrCmd_special, requests_effects=1 @ 0x25
script_cmd_table_entry SCR_OP_SPECIALVAR ScrCmd_specialvar, requests_effects=1 @ 0x26
script_cmd_table_entry SCR_OP_WAITSTATE ScrCmd_waitstate, requests_effects=1 @ 0x27
script_cmd_table_entry SCR_OP_DELAY ScrCmd_delay, requests_effects=1 @ 0x28
script_cmd_table_entry SCR_OP_SETFLAG ScrCmd_setflag, requests_effects=1 @ 0x29
script_cmd_table_entry SCR_OP_CLEARFLAG ScrCmd_clearflag, requests_effects=1 @ 0x2a
script_cmd_table_entry SCR_OP_CHECKFLAG ScrCmd_checkflag, requests_effects=1 @ 0x2b
script_cmd_table_entry SCR_OP_INITCLOCK ScrCmd_initclock, requests_effects=1 @ 0x2c
script_cmd_table_entry SCR_OP_DOTIMEBASEDEVENTS ScrCmd_dotimebasedevents, requests_effects=1 @ 0x2d
script_cmd_table_entry SCR_OP_GETTIME ScrCmd_gettime, requests_effects=1 @ 0x2e
script_cmd_table_entry SCR_OP_PLAYSE ScrCmd_playse, requests_effects=1 @ 0x2f
script_cmd_table_entry SCR_OP_WAITSE ScrCmd_waitse, requests_effects=1 @ 0x30
script_cmd_table_entry SCR_OP_PLAYFANFARE ScrCmd_playfanfare, requests_effects=1 @ 0x31
script_cmd_table_entry SCR_OP_WAITFANFARE ScrCmd_waitfanfare, requests_effects=1 @ 0x32
script_cmd_table_entry SCR_OP_PLAYBGM ScrCmd_playbgm, requests_effects=1 @ 0x33
script_cmd_table_entry SCR_OP_SAVEBGM ScrCmd_savebgm, requests_effects=1 @ 0x34
script_cmd_table_entry SCR_OP_FADEDEFAULTBGM ScrCmd_fadedefaultbgm, requests_effects=1 @ 0x35
script_cmd_table_entry SCR_OP_FADENEWBGM ScrCmd_fadenewbgm, requests_effects=1 @ 0x36
script_cmd_table_entry SCR_OP_FADEOUTBGM ScrCmd_fadeoutbgm, requests_effects=1 @ 0x37
script_cmd_table_entry SCR_OP_FADEINBGM ScrCmd_fadeinbgm, requests_effects=1 @ 0x38
script_cmd_table_entry SCR_OP_WARP ScrCmd_warp, requests_effects=1 @ 0x39
script_cmd_table_entry SCR_OP_WARPSILENT ScrCmd_warpsilent, requests_effects=1 @ 0x3a
script_cmd_table_entry SCR_OP_WARPDOOR ScrCmd_warpdoor, requests_effects=1 @ 0x3b
script_cmd_table_entry SCR_OP_WARPHOLE ScrCmd_warphole, requests_effects=1 @ 0x3c
script_cmd_table_entry SCR_OP_WARPTELEPORT ScrCmd_warpteleport, requests_effects=1 @ 0x3d
script_cmd_table_entry SCR_OP_SETWARP ScrCmd_setwarp, requests_effects=1 @ 0x3e
script_cmd_table_entry SCR_OP_SETDYNAMICWARP ScrCmd_setdynamicwarp, requests_effects=1 @ 0x3f
script_cmd_table_entry SCR_OP_SETDIVEWARP ScrCmd_setdivewarp, requests_effects=1 @ 0x40
script_cmd_table_entry SCR_OP_SETHOLEWARP ScrCmd_setholewarp, requests_effects=1 @ 0x41
script_cmd_table_entry SCR_OP_GETPLAYERXY ScrCmd_getplayerxy, requests_effects=1 @ 0x42
script_cmd_table_entry SCR_OP_GETPARTYSIZE ScrCmd_getpartysize, requests_effects=1 @ 0x43
script_cmd_table_entry SCR_OP_ADDITEM ScrCmd_additem, requests_effects=1 @ 0x44
script_cmd_table_entry SCR_OP_REMOVEITEM ScrCmd_removeitem, requests_effects=1 @ 0x45
script_cmd_table_entry SCR_OP_CHECKITEMSPACE ScrCmd_checkitemspace, requests_effects=1 @ 0x46
script_cmd_table_entry SCR_OP_CHECKITEM ScrCmd_checkitem, requests_effects=1 @ 0x47
script_cmd_table_entry SCR_OP_CHECKITEMTYPE ScrCmd_checkitemtype, requests_effects=1 @ 0x48
script_cmd_table_entry SCR_OP_ADDPCITEM ScrCmd_addpcitem, requests_effects=1 @ 0x49
script_cmd_table_entry SCR_OP_CHECKPCITEM ScrCmd_checkpcitem, requests_effects=1 @ 0x4a
script_cmd_table_entry SCR_OP_ADDDECORATION ScrCmd_adddecoration, requests_effects=1 @ 0x4b
script_cmd_table_entry SCR_OP_REMOVEDECORATION ScrCmd_removedecoration, requests_effects=1 @ 0x4c
script_cmd_table_entry SCR_OP_CHECKDECOR ScrCmd_checkdecor, requests_effects=1 @ 0x4d
script_cmd_table_entry SCR_OP_CHECKDECORSPACE ScrCmd_checkdecorspace, requests_effects=1 @ 0x4e
script_cmd_table_entry SCR_OP_APPLYMOVEMENT ScrCmd_applymovement, requests_effects=1 @ 0x4f
script_cmd_table_entry SCR_OP_APPLYMOVEMENTAT ScrCmd_applymovementat, requests_effects=1 @ 0x50
script_cmd_table_entry SCR_OP_WAITMOVEMENT ScrCmd_waitmovement, requests_effects=1 @ 0x51
script_cmd_table_entry SCR_OP_WAITMOVEMENTAT ScrCmd_waitmovementat, requests_effects=1 @ 0x52
script_cmd_table_entry SCR_OP_REMOVEOBJECT ScrCmd_removeobject, requests_effects=1 @ 0x53
script_cmd_table_entry SCR_OP_REMOVEOBJECTAT ScrCmd_removeobjectat, requests_effects=1 @ 0x54
script_cmd_table_entry SCR_OP_ADDOBJECT ScrCmd_addobject, requests_effects=1 @ 0x55
script_cmd_table_entry SCR_OP_ADDOBJECTAT ScrCmd_addobjectat, requests_effects=1 @ 0x56
script_cmd_table_entry SCR_OP_SETOBJECTXY ScrCmd_setobjectxy, requests_effects=1 @ 0x57
script_cmd_table_entry SCR_OP_SHOWOBJECTAT ScrCmd_showobjectat, requests_effects=1 @ 0x58
script_cmd_table_entry SCR_OP_HIDEOBJECTAT ScrCmd_hideobjectat, requests_effects=1 @ 0x59
script_cmd_table_entry SCR_OP_FACEPLAYER ScrCmd_faceplayer, requests_effects=1 @ 0x5a
script_cmd_table_entry SCR_OP_TURNOBJECT ScrCmd_turnobject, requests_effects=1 @ 0x5b
script_cmd_table_entry SCR_OP_TRAINERBATTLE ScrCmd_trainerbattle, requests_effects=1 @ 0x5c
script_cmd_table_entry SCR_OP_DOTRAINERBATTLE ScrCmd_dotrainerbattle, requests_effects=1 @ 0x5d
script_cmd_table_entry SCR_OP_GOTOPOSTBATTLESCRIPT ScrCmd_gotopostbattlescript, requests_effects=1 @ 0x5e
script_cmd_table_entry SCR_OP_GOTOBEATENSCRIPT ScrCmd_gotobeatenscript, requests_effects=1 @ 0x5f
script_cmd_table_entry SCR_OP_CHECKTRAINERFLAG ScrCmd_checktrainerflag, requests_effects=1 @ 0x60
script_cmd_table_entry SCR_OP_SETTRAINERFLAG ScrCmd_settrainerflag, requests_effects=1 @ 0x61
script_cmd_table_entry SCR_OP_CLEARTRAINERFLAG ScrCmd_cleartrainerflag, requests_effects=1 @ 0x62
script_cmd_table_entry SCR_OP_SETOBJECTXYPERM ScrCmd_setobjectxyperm, requests_effects=1 @ 0x63
script_cmd_table_entry SCR_OP_COPYOBJECTXYTOPERM ScrCmd_copyobjectxytoperm, requests_effects=1 @ 0x64
script_cmd_table_entry SCR_OP_SETOBJECTMOVEMENTTYPE ScrCmd_setobjectmovementtype, requests_effects=1 @ 0x65
script_cmd_table_entry SCR_OP_WAITMESSAGE ScrCmd_waitmessage, requests_effects=1 @ 0x66
script_cmd_table_entry SCR_OP_MESSAGE ScrCmd_message, requests_effects=1 @ 0x67
script_cmd_table_entry SCR_OP_CLOSEMESSAGE ScrCmd_closemessage, requests_effects=1 @ 0x68
script_cmd_table_entry SCR_OP_LOCKALL ScrCmd_lockall, requests_effects=1 @ 0x69
script_cmd_table_entry SCR_OP_LOCK ScrCmd_lock, requests_effects=1 @ 0x6a
script_cmd_table_entry SCR_OP_RELEASEALL ScrCmd_releaseall, requests_effects=1 @ 0x6b
script_cmd_table_entry SCR_OP_RELEASE ScrCmd_release, requests_effects=1 @ 0x6c
script_cmd_table_entry SCR_OP_WAITBUTTONPRESS ScrCmd_waitbuttonpress, requests_effects=1 @ 0x6d
script_cmd_table_entry SCR_OP_YESNOBOX ScrCmd_yesnobox, requests_effects=1 @ 0x6e
script_cmd_table_entry SCR_OP_MULTICHOICE ScrCmd_multichoice, requests_effects=1 @ 0x6f
script_cmd_table_entry SCR_OP_MULTICHOICEDEFAULT ScrCmd_multichoicedefault, requests_effects=1 @ 0x70
script_cmd_table_entry SCR_OP_MULTICHOICEGRID ScrCmd_multichoicegrid, requests_effects=1 @ 0x71
script_cmd_table_entry SCR_OP_DRAWBOX ScrCmd_drawbox, requests_effects=1 @ 0x72
script_cmd_table_entry SCR_OP_ERASEBOX ScrCmd_erasebox, requests_effects=1 @ 0x73
script_cmd_table_entry SCR_OP_DRAWBOXTEXT ScrCmd_drawboxtext, requests_effects=1 @ 0x74
script_cmd_table_entry SCR_OP_SHOWMONPIC ScrCmd_showmonpic, requests_effects=1 @ 0x75
script_cmd_table_entry SCR_OP_HIDEMONPIC ScrCmd_hidemonpic, requests_effects=1 @ 0x76
script_cmd_table_entry SCR_OP_SHOWCONTESTPAINTING ScrCmd_showcontestpainting, requests_effects=1 @ 0x77
script_cmd_table_entry SCR_OP_BRAILLEMESSAGE ScrCmd_braillemessage, requests_effects=1 @ 0x78
script_cmd_table_entry SCR_OP_GIVEMON ScrCmd_nop1, requests_effects=1 @ 0x79
script_cmd_table_entry SCR_OP_GIVEEGG ScrCmd_giveegg, requests_effects=1 @ 0x7a
script_cmd_table_entry SCR_OP_SETMONMOVE ScrCmd_setmonmove, requests_effects=1 @ 0x7b
script_cmd_table_entry SCR_OP_CHECKPARTYMOVE ScrCmd_checkpartymove, requests_effects=1 @ 0x7c
script_cmd_table_entry SCR_OP_BUFFERSPECIESNAME ScrCmd_bufferspeciesname, requests_effects=1 @ 0x7d
script_cmd_table_entry SCR_OP_BUFFERLEADMONSPECIESNAME ScrCmd_bufferleadmonspeciesname, requests_effects=1 @ 0x7e
script_cmd_table_entry SCR_OP_BUFFERPARTYMONNICK ScrCmd_bufferpartymonnick, requests_effects=1 @ 0x7f
script_cmd_table_entry SCR_OP_BUFFERITEMNAME ScrCmd_bufferitemname, requests_effects=1 @ 0x80
script_cmd_table_entry SCR_OP_BUFFERDECORATIONNAME ScrCmd_bufferdecorationname, requests_effects=1 @ 0x81
script_cmd_table_entry SCR_OP_BUFFERMOVENAME ScrCmd_buffermovename, requests_effects=1 @ 0x82
script_cmd_table_entry SCR_OP_BUFFERNUMBERSTRING ScrCmd_buffernumberstring, requests_effects=1 @ 0x83
script_cmd_table_entry SCR_OP_BUFFERSTDSTRING ScrCmd_bufferstdstring, requests_effects=1 @ 0x84
script_cmd_table_entry SCR_OP_BUFFERSTRING ScrCmd_bufferstring, requests_effects=1 @ 0x85
script_cmd_table_entry SCR_OP_POKEMART ScrCmd_pokemart, requests_effects=1 @ 0x86
script_cmd_table_entry SCR_OP_POKEMARTDECORATION ScrCmd_pokemartdecoration, requests_effects=1 @ 0x87
script_cmd_table_entry SCR_OP_POKEMARTDECORATION2 ScrCmd_pokemartdecoration2, requests_effects=1 @ 0x88
script_cmd_table_entry SCR_OP_PLAYSLOTMACHINE ScrCmd_playslotmachine, requests_effects=1 @ 0x89
script_cmd_table_entry SCR_OP_SETBERRYTREE ScrCmd_setberrytree, requests_effects=1 @ 0x8a
script_cmd_table_entry SCR_OP_CHOOSECONTESTMON ScrCmd_choosecontestmon, requests_effects=1 @ 0x8b
script_cmd_table_entry SCR_OP_STARTCONTEST ScrCmd_startcontest, requests_effects=1 @ 0x8c
script_cmd_table_entry SCR_OP_SHOWCONTESTRESULTS ScrCmd_showcontestresults, requests_effects=1 @ 0x8d
script_cmd_table_entry SCR_OP_CONTESTLINKTRANSFER ScrCmd_contestlinktransfer, requests_effects=1 @ 0x8e
script_cmd_table_entry SCR_OP_RANDOM ScrCmd_random, requests_effects=1 @ 0x8f
script_cmd_table_entry SCR_OP_ADDMONEY ScrCmd_addmoney, requests_effects=1 @ 0x90
script_cmd_table_entry SCR_OP_REMOVEMONEY ScrCmd_removemoney, requests_effects=1 @ 0x91
script_cmd_table_entry SCR_OP_CHECKMONEY ScrCmd_checkmoney, requests_effects=1 @ 0x92
script_cmd_table_entry SCR_OP_SHOWMONEYBOX ScrCmd_showmoneybox, requests_effects=1 @ 0x93
script_cmd_table_entry SCR_OP_HIDEMONEYBOX ScrCmd_hidemoneybox, requests_effects=1 @ 0x94
script_cmd_table_entry SCR_OP_UPDATEMONEYBOX ScrCmd_updatemoneybox, requests_effects=1 @ 0x95
script_cmd_table_entry SCR_OP_GETPOKENEWSACTIVE ScrCmd_getpokenewsactive, requests_effects=1 @ 0x96
script_cmd_table_entry SCR_OP_FADESCREEN ScrCmd_fadescreen, requests_effects=1 @ 0x97
script_cmd_table_entry SCR_OP_FADESCREENSPEED ScrCmd_fadescreenspeed, requests_effects=1 @ 0x98
script_cmd_table_entry SCR_OP_SETFLASHLEVEL ScrCmd_setflashlevel, requests_effects=1 @ 0x99
script_cmd_table_entry SCR_OP_ANIMATEFLASH ScrCmd_animateflash, requests_effects=1 @ 0x9a
script_cmd_table_entry SCR_OP_MESSAGEAUTOSCROLL ScrCmd_messageautoscroll, requests_effects=1 @ 0x9b
script_cmd_table_entry SCR_OP_DOFIELDEFFECT ScrCmd_dofieldeffect, requests_effects=1 @ 0x9c
script_cmd_table_entry SCR_OP_SETFIELDEFFECTARGUMENT ScrCmd_setfieldeffectargument, requests_effects=1 @ 0x9d
script_cmd_table_entry SCR_OP_WAITFIELDEFFECT ScrCmd_waitfieldeffect, requests_effects=1 @ 0x9e
script_cmd_table_entry SCR_OP_SETRESPAWN ScrCmd_setrespawn, requests_effects=1 @ 0x9f
script_cmd_table_entry SCR_OP_CHECKPLAYERGENDER ScrCmd_checkplayergender, requests_effects=1 @ 0xa0
script_cmd_table_entry SCR_OP_PLAYMONCRY ScrCmd_playmoncry, requests_effects=1 @ 0xa1
script_cmd_table_entry SCR_OP_SETMETATILE ScrCmd_setmetatile, requests_effects=1 @ 0xa2
script_cmd_table_entry SCR_OP_RESETWEATHER ScrCmd_resetweather, requests_effects=1 @ 0xa3
script_cmd_table_entry SCR_OP_SETWEATHER ScrCmd_setweather, requests_effects=1 @ 0xa4
script_cmd_table_entry SCR_OP_DOWEATHER ScrCmd_doweather, requests_effects=1 @ 0xa5
script_cmd_table_entry SCR_OP_SETSTEPCALLBACK ScrCmd_setstepcallback, requests_effects=1 @ 0xa6
script_cmd_table_entry SCR_OP_SETMAPLAYOUTINDEX ScrCmd_setmaplayoutindex, requests_effects=1 @ 0xa7
script_cmd_table_entry SCR_OP_SETOBJECTSUBPRIORITY ScrCmd_setobjectsubpriority, requests_effects=1 @ 0xa8
script_cmd_table_entry SCR_OP_RESETOBJECTSUBPRIORITY ScrCmd_resetobjectsubpriority, requests_effects=1 @ 0xa9
script_cmd_table_entry SCR_OP_CREATEVOBJECT ScrCmd_createvobject, requests_effects=1 @ 0xaa
script_cmd_table_entry SCR_OP_TURNVOBJECT ScrCmd_turnvobject, requests_effects=1 @ 0xab
script_cmd_table_entry SCR_OP_OPENDOOR ScrCmd_opendoor, requests_effects=1 @ 0xac
script_cmd_table_entry SCR_OP_CLOSEDOOR ScrCmd_closedoor, requests_effects=1 @ 0xad
script_cmd_table_entry SCR_OP_WAITDOORANIM ScrCmd_waitdooranim, requests_effects=1 @ 0xae
script_cmd_table_entry SCR_OP_SETDOOROPEN ScrCmd_setdooropen, requests_effects=1 @ 0xaf
script_cmd_table_entry SCR_OP_SETDOORCLOSED ScrCmd_setdoorclosed, requests_effects=1 @ 0xb0
script_cmd_table_entry SCR_OP_ADDELEVMENUITEM ScrCmd_addelevmenuitem, requests_effects=1 @ 0xb1
script_cmd_table_entry SCR_OP_SHOWELEVMENU ScrCmd_showelevmenu, requests_effects=1 @ 0xb2
script_cmd_table_entry SCR_OP_CHECKCOINS ScrCmd_checkcoins, requests_effects=1 @ 0xb3
script_cmd_table_entry SCR_OP_ADDCOINS ScrCmd_addcoins, requests_effects=1 @ 0xb4
script_cmd_table_entry SCR_OP_REMOVECOINS ScrCmd_removecoins, requests_effects=1 @ 0xb5
script_cmd_table_entry SCR_OP_SETWILDBATTLE ScrCmd_setwildbattle, requests_effects=1 @ 0xb6
script_cmd_table_entry SCR_OP_DOWILDBATTLE ScrCmd_dowildbattle, requests_effects=1 @ 0xb7
script_cmd_table_entry SCR_OP_SETVADDRESS ScrCmd_setvaddress, requests_effects=1 @ 0xb8
script_cmd_table_entry SCR_OP_VGOTO ScrCmd_vgoto, requests_effects=1 @ 0xb9
script_cmd_table_entry SCR_OP_VCALL ScrCmd_vcall, requests_effects=1 @ 0xba
script_cmd_table_entry SCR_OP_VGOTO_IF ScrCmd_vgoto_if, requests_effects=1 @ 0xbb
script_cmd_table_entry SCR_OP_VCALL_IF ScrCmd_vcall_if, requests_effects=1 @ 0xbc
script_cmd_table_entry SCR_OP_VMESSAGE ScrCmd_vmessage, requests_effects=1 @ 0xbd
script_cmd_table_entry SCR_OP_VBUFFERMESSAGE ScrCmd_vbuffermessage, requests_effects=1 @ 0xbe
script_cmd_table_entry SCR_OP_VBUFFERSTRING ScrCmd_vbufferstring, requests_effects=1 @ 0xbf
script_cmd_table_entry SCR_OP_SHOWCOINSBOX ScrCmd_showcoinsbox, requests_effects=1 @ 0xc0
script_cmd_table_entry SCR_OP_HIDECOINSBOX ScrCmd_hidecoinsbox, requests_effects=1 @ 0xc1
script_cmd_table_entry SCR_OP_UPDATECOINSBOX ScrCmd_updatecoinsbox, requests_effects=1 @ 0xc2
script_cmd_table_entry SCR_OP_INCREMENTGAMESTAT ScrCmd_incrementgamestat, requests_effects=1 @ 0xc3
script_cmd_table_entry SCR_OP_SETESCAPEWARP ScrCmd_setescapewarp, requests_effects=1 @ 0xc4
script_cmd_table_entry SCR_OP_WAITMONCRY ScrCmd_waitmoncry, requests_effects=1 @ 0xc5
script_cmd_table_entry SCR_OP_BUFFERBOXNAME ScrCmd_bufferboxname, requests_effects=1 @ 0xc6
script_cmd_table_entry SCR_OP_TEXTCOLOR ScrCmd_nop1, requests_effects=1 @ 0xc7
script_cmd_table_entry SCR_OP_LOADHELP ScrCmd_nop1, requests_effects=1 @ 0xc8
script_cmd_table_entry SCR_OP_UNLOADHELP ScrCmd_nop1, requests_effects=1 @ 0xc9
script_cmd_table_entry SCR_OP_SIGNMSG ScrCmd_nop1, requests_effects=1 @ 0xca
script_cmd_table_entry SCR_OP_NORMALMSG ScrCmd_nop1, requests_effects=1 @ 0xcb
script_cmd_table_entry SCR_OP_COMPAREHIDDENVAR ScrCmd_nop1, requests_effects=1 @ 0xcc
script_cmd_table_entry SCR_OP_SETMODERNFATEFULENCOUNTER ScrCmd_setmodernfatefulencounter, requests_effects=1 @ 0xcd
script_cmd_table_entry SCR_OP_CHECKMODERNFATEFULENCOUNTER ScrCmd_checkmodernfatefulencounter, requests_effects=1 @ 0xce
script_cmd_table_entry SCR_OP_TRYWONDERCARDSCRIPT ScrCmd_trywondercardscript, requests_effects=1 @ 0xcf
script_cmd_table_entry SCR_OP_SETWORLDMAPFLAG ScrCmd_nop1, requests_effects=1 @ 0xd0
script_cmd_table_entry SCR_OP_WARPSPINENTER ScrCmd_warpspinenter, requests_effects=1 @ 0xd1
script_cmd_table_entry SCR_OP_SETMONMETLOCATION ScrCmd_setmonmetlocation, requests_effects=1 @ 0xd2
script_cmd_table_entry SCR_OP_MOVEROTATINGTILEOBJECTS ScrCmd_moverotatingtileobjects, requests_effects=1 @ 0xd3
script_cmd_table_entry SCR_OP_TURNROTATINGTILEOBJECTS ScrCmd_turnrotatingtileobjects, requests_effects=1 @ 0xd4
script_cmd_table_entry SCR_OP_INITROTATINGTILEPUZZLE ScrCmd_initrotatingtilepuzzle, requests_effects=1 @ 0xd5
script_cmd_table_entry SCR_OP_FREEROTATINGTILEPUZZLE ScrCmd_freerotatingtilepuzzle, requests_effects=1 @ 0xd6
script_cmd_table_entry SCR_OP_WARPMOSSDEEPGYM ScrCmd_warpmossdeepgym, requests_effects=1 @ 0xd7
script_cmd_table_entry SCR_OP_SELECTAPPROACHINGTRAINER ScrCmd_selectapproachingtrainer, requests_effects=1 @ 0xd8
script_cmd_table_entry SCR_OP_LOCKFORTRAINER ScrCmd_lockfortrainer, requests_effects=1 @ 0xd9
script_cmd_table_entry SCR_OP_CLOSEBRAILLEMESSAGE ScrCmd_closebraillemessage, requests_effects=1 @ 0xda
script_cmd_table_entry SCR_OP_MESSAGEINSTANT ScrCmd_messageinstant, requests_effects=1 @ 0xdb
script_cmd_table_entry SCR_OP_FADESCREENSWAPBUFFERS ScrCmd_fadescreenswapbuffers, requests_effects=1 @ 0xdc
script_cmd_table_entry SCR_OP_BUFFERTRAINERCLASSNAME ScrCmd_buffertrainerclassname, requests_effects=1 @ 0xdd
script_cmd_table_entry SCR_OP_BUFFERTRAINERNAME ScrCmd_buffertrainername, requests_effects=1 @ 0xde
script_cmd_table_entry SCR_OP_POKENAVCALL ScrCmd_pokenavcall, requests_effects=1 @ 0xdf
script_cmd_table_entry SCR_OP_WARPWHITEFADE ScrCmd_warpwhitefade, requests_effects=1 @ 0xe0
script_cmd_table_entry SCR_OP_BUFFERCONTESTNAME ScrCmd_buffercontestname, requests_effects=1 @ 0xe1
script_cmd_table_entry SCR_OP_BUFFERITEMNAMEPLURAL ScrCmd_bufferitemnameplural, requests_effects=1 @ 0xe2
script_cmd_table_entry SCR_OP_DYNMULTICHOICE ScrCmd_dynmultichoice, requests_effects=1 @ 0xe3
script_cmd_table_entry SCR_OP_DYNMULTIPUSH ScrCmd_dynmultipush, requests_effects=1 @ 0xe4
.if ALLOCATE_SCRIPT_CMD_TABLE
gScriptCmdTableEnd::

View File

@ -270,6 +270,11 @@ Debug_ShowExpansionVersion::
Debug_ExpansionVersion:
.string "pokeemerald-expansion {STR_VAR_1}$"
Debug_EventScript_Steven_Multi::
call MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle
release
end
Debug_BerryPestsDisabled::
msgbox DebugText_BerryPestsDisabled, MSGBOX_DEFAULT
release

47
data/scripts/dexnav.inc Normal file
View File

@ -0,0 +1,47 @@
EventScript_StartDexNavBattle::
lock
playse SE_PIN
applymovement OBJ_EVENT_ID_PLAYER Common_Movement_ExclamationMark
waitmovement 0
waitse
dowildbattle
release
end
EventScript_NotFoundNearby::
msgbox sText_NotFoundNearby, MSGBOX_SIGN
end
EventScript_MovedTooFast::
msgbox sText_TryMovingSlower, MSGBOX_SIGN
end
EventScript_PokemonGotAway::
msgbox sText_PokemonGotAway, MSGBOX_SIGN
end
EventScript_LostSignal::
msgbox sText_LostSignal, MSGBOX_SIGN
end
EventScript_TooDark::
msgbox sText_TooDark, MSGBOX_SIGN
end
sText_NotFoundNearby:
.string "It couldn't be found nearby.\n"
.string "Try looking in a different area!$"
sText_TryMovingSlower:
.string "The Pokémon got away!\n"
.string "Try moving more slowly.$"
sText_PokemonGotAway:
.string "The Pokémon got away!$"
sText_LostSignal:
.string "There is no reaction.\n"
.string "The signal was lost!$"
sText_TooDark:
.string "It's too dark to search\nfor a Pokémon!$"

View File

@ -60,7 +60,7 @@ TrainerHill_1F_Movement_SetInvisible::
@ TRAINER_PHILLIP is an actual Trainer on the SS Tidal, but is used as a placeholder here
TrainerHill_EventScript_TrainerBattle::
trainerbattle TRAINER_BATTLE_HILL, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText
trainerbattle TRAINER_BATTLE_HILL, OBJ_ID_NONE, TRAINER_PHILLIP, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE
trainerhill_postbattletext
waitmessage
waitbuttonpress

View File

@ -20,3 +20,9 @@ EventScript_GotoTrainerScript::
gotobeatenscript
releaseall
end
EventScript_ObjectApproachPlayer::
lock
special DoTrainerApproach
waitstate
gotonative LoadTrainerObjectScript

View File

@ -1,9 +1,16 @@
.macro def_special ptr
@ 'requests_effects' should be set to 1 if the special contains a call
@ to 'Script_RequestEffects', which allows it to be analyzed with
@ 'RunScriptImmediatelyUntilEffect'.
.macro def_special ptr:req, requests_effects=0
.global SPECIAL_\ptr
.set SPECIAL_\ptr, __special__
.set __special__, __special__ + 1
.if \requests_effects == 0
.4byte \ptr
.endm
.else
.4byte \ptr + ROM_SIZE
.endif
.endm
.set __special__, 0
.align 2
@ -297,7 +304,7 @@ gSpecials::
def_special WaitWeather
def_special BufferEReaderTrainerName
def_special GetSlotMachineId
def_special GetPlayerFacingDirection
def_special GetPlayerFacingDirection, requests_effects=TRUE
def_special FoundAbandonedShipRoom1Key
def_special FoundAbandonedShipRoom2Key
def_special FoundAbandonedShipRoom4Key
@ -554,3 +561,5 @@ gSpecials::
def_special Script_GetChosenMonOffensiveIVs
def_special Script_GetChosenMonDefensiveIVs
def_special UseBlankMessageToCancelPokemonPic
def_special EnterCode
def_special GetCodeFeedback

View File

@ -22,6 +22,12 @@ gText_PkmnTransferredLanettesPCBoxFull::
.string "{STR_VAR_2} was transferred to\n"
.string "BOX “{STR_VAR_1}.”$"
gText_PkmnSentToPCAfterCatch::
.string "{STR_VAR_2} was sent to\n"
.string "{B_PC_CREATOR_NAME} PC.\p"
.string "It was placed in \n"
.string "BOX “{STR_VAR_1}”.$"
gText_NoMoreRoomForPokemon::
.string "There's no more room for POKéMON!\p"
.string "The POKéMON BOXES are full and\n"

View File

@ -18,7 +18,10 @@
- [v1.7.x](tutorials/how_to_new_pokemon_1_7_0.md)
- [v1.6.x](tutorials/how_to_new_pokemon_1_6_0.md)
- [How to use the Testing System](tutorials/how_to_testing_system.md)
- [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md)
- [Changelog](./CHANGELOG.md)
- [1.11.x]()
- [Version 1.11.0](changelogs/1.11.x/1.11.0.md)
- [1.10.x]()
- [Version 1.10.3](changelogs/1.10.x/1.10.3.md)
- [Version 1.10.2](changelogs/1.10.x/1.10.2.md)

View File

@ -0,0 +1,385 @@
```md
## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH test
`.
```
## 🌋 *REFACTORS* 🌋
📜 = Uses a migration script.
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
* Atk Canceller refactor / reorder / clean up by @AlexOn1ine in [#5885](https://github.com/rh-hideout/pokeemerald-expansion/pull/5885)
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Introduces BattleTurnCounter to simplify timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
* Convert max effects to normal move effects by @AlexOn1ine in [#6143](https://github.com/rh-hideout/pokeemerald-expansion/pull/6143)
* Redefine IsBattlerAlive in battle.h as a static inline by @AlexOn1ine in [#6211](https://github.com/rh-hideout/pokeemerald-expansion/pull/6211)
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
## 🧬 General 🧬
### Added
* Add Script Cmd for Forcing Save Game by @ghoulslash in [#6090](https://github.com/rh-hideout/pokeemerald-expansion/pull/6090)
* Trainer Party Pools by @hedara90 in [#5731](https://github.com/rh-hideout/pokeemerald-expansion/pull/5731)
- Documentation on how to use this can be found under `docs/tutorials/how_to_trainer_party_pool.md`
* Add Code Entry functionality by @Pawkkie and @PCG06 for the Mystery Gift iteration in [#5951](https://github.com/rh-hideout/pokeemerald-expansion/pull/5951)
### Changed
* Added "Game Clear" flag toggle to debug menu by @AsparagusEduardo in [#5929](https://github.com/rh-hideout/pokeemerald-expansion/pull/5929)
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
- Added `dmaxLevel` option to `givemon` and `createmon`.
- Added `WEATHER_COUNT`.
- Cleaned up repeated code instances in debug menu.
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
* Reorder Makefile rules so that pokeemerald-test.elf builds in build/test by @mrgriffin in [#6004](https://github.com/rh-hideout/pokeemerald-expansion/pull/6004)
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
* Ewram and unused function cleanup sweep by @hedara90 in [#6019](https://github.com/rh-hideout/pokeemerald-expansion/pull/6019)
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
* Add Steven Multi to debug menu by @Pawkkie in [#6064](https://github.com/rh-hideout/pokeemerald-expansion/pull/6064)
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
* Trainer Battle Parameter Consolidation by @u8-Salem in [#5982](https://github.com/rh-hideout/pokeemerald-expansion/pull/5982)
Breaking: raw uses of `trainerbattle` need to be adjusted to provide all possible parameter. Unused parameter musst be 0 or an alias. already parameterized macros like `trainerbattle_single` work out of the box.
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
### Fixed
* Don't write to NULL in TryFindHiddenPokemon by @DizzyEggg in [#5983](https://github.com/rh-hideout/pokeemerald-expansion/pull/5983)
* Allow Party Menu with 0 Pokemon by @DizzyEggg in [#5997](https://github.com/rh-hideout/pokeemerald-expansion/pull/5997)
* Revert map related enum conversion by @hedara90 in [#6078](https://github.com/rh-hideout/pokeemerald-expansion/pull/6078)
* Revert "Revert map related enum conversion" by @hedara90 in [#6079](https://github.com/rh-hideout/pokeemerald-expansion/pull/6079)
* Revert "Converts a bunch of defines to enums" by @Bassoonian in [#6082](https://github.com/rh-hideout/pokeemerald-expansion/pull/6082)
* Fix upcoming not working on no cash by @DizzyEggg in [#6121](https://github.com/rh-hideout/pokeemerald-expansion/pull/6121)
* Add the header required for TPP tags to work by @hedara90 in [#6162](https://github.com/rh-hideout/pokeemerald-expansion/pull/6162)
* Fixed regression from master/upcoming merge by @AsparagusEduardo and @hedara90 , for doing the original merge when I couldn't in [#6199](https://github.com/rh-hideout/pokeemerald-expansion/pull/6199)
* Fix Using a Safari Ball crashes the game #6206 by @ExMingYan in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* Fixed typo in requests_effects by @hedara90 and @purrfectdoodle in [#6215](https://github.com/rh-hideout/pokeemerald-expansion/pull/6215)
* Try a new solution to Fix Safari #6206 by @ExMingYan in [#6228](https://github.com/rh-hideout/pokeemerald-expansion/pull/6228)
* Remove obsolete check for steven when retrieving partner name by @u8-Salem and @hedara90 in [#6283](https://github.com/rh-hideout/pokeemerald-expansion/pull/6283)
* Fix spit up getting skipped by @cawtds in [#6295](https://github.com/rh-hideout/pokeemerald-expansion/pull/6295)
## 🗺️ Overworld 🗺️
### Added
* Adds Dexnav by @ghoulslash in [#4818](https://github.com/rh-hideout/pokeemerald-expansion/pull/4818)
* Fly from Pokenav by @khbsd in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
* Expanded Pokémon Follower transformation functionality by @AsparagusEduardo in [#5048](https://github.com/rh-hideout/pokeemerald-expansion/pull/5048)
### Changed
* Arbitrary trainer scripts + on frame/trigger softlock prevention by @mrgriffin in [#5033](https://github.com/rh-hideout/pokeemerald-expansion/pull/5033)
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
* Match current gen behavior for battle environment after fishing by @kittenchilly in [#6099](https://github.com/rh-hideout/pokeemerald-expansion/pull/6099)
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
* Merrp merge (12th of February) by @hedara90 in [#6244](https://github.com/rh-hideout/pokeemerald-expansion/pull/6244)
* Adds a follower flag define to disable followers on the fly by @AlexOn1ine in [#6174](https://github.com/rh-hideout/pokeemerald-expansion/pull/6174)
### Fixed
* Fix Trainer Hill OOB array access by @SBird1337 in [#5930](https://github.com/rh-hideout/pokeemerald-expansion/pull/5930)
* Revert #5033 change to MapHeaderRunScriptType by @mrgriffin in [#5975](https://github.com/rh-hideout/pokeemerald-expansion/pull/5975)
* Restore lock/lockall/locktrainer/release/releaseall in triggers by @mrgriffin in [#5976](https://github.com/rh-hideout/pokeemerald-expansion/pull/5976)
* Follower Object Event refactor by @hedara90 and @AsparagusEduardo in [#6129](https://github.com/rh-hideout/pokeemerald-expansion/pull/6129)
- Fixes `OBJ_EVENT_GFX_SPECIES_SHINY`
- Adds `OBJ_EVENT_GFX_SPECIES_FEMALE` and `OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE`
* Fixes Static Assert from pr #6174 by @AlexOn1ine in [#6258](https://github.com/rh-hideout/pokeemerald-expansion/pull/6258)
* Fixed Kecleon Shiny palette by @hedara90 in [#6298](https://github.com/rh-hideout/pokeemerald-expansion/pull/6298)
## 🐉 Pokémon 🐉
### Added
* IV/EV Info on Summary Screen by @khbsd in [#6027](https://github.com/rh-hideout/pokeemerald-expansion/pull/6027)
* Add caught mon to full party by sending a different mon to the Box by @fakuzatsu in [#6058](https://github.com/rh-hideout/pokeemerald-expansion/pull/6058)
### Changed
* Remove form change function footguns by @AsparagusEduardo and @AlexOn1ine for letting me know of this potential issue. in [#5995](https://github.com/rh-hideout/pokeemerald-expansion/pull/5995)
- `GetBattleFormChangeTargetSpecies`, `GetFormChangeTargetSpecies` and `GetFormChangeTargetSpeciesBoxMon` now return the current species of the Pokémon instead of `SPECIES_NONE` as a precaution to avoid accidental deletions of Pokémon when using these functions.
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
* Add Poltchageist family form data by @Bassoonian and @wiz1989 in [#6163](https://github.com/rh-hideout/pokeemerald-expansion/pull/6163)
### Fixed
* Evolution level 1 learn by @hedara90 in [#5791](https://github.com/rh-hideout/pokeemerald-expansion/pull/5791)
* Fixed non-regional forms breeding incorrectly by @AsparagusEduardo and @cawtds in [#4985](https://github.com/rh-hideout/pokeemerald-expansion/pull/4985)
* Fixed compilation error when turning P_GENDER_DIFFERENCES off by @AsparagusEduardo in [#6223](https://github.com/rh-hideout/pokeemerald-expansion/pull/6223)
* Reverted compound literal OW mon pic tables by @AsparagusEduardo in [#6216](https://github.com/rh-hideout/pokeemerald-expansion/pull/6216)
## ⚔️ Battle General ⚔️
### Added
* Add B_FLAG_SLEEP_CLAUSE by @Pawkkie, @Pawkkie and @iriv24 in [#5566](https://github.com/rh-hideout/pokeemerald-expansion/pull/5566)
- Based on Smogon's sleep clause [philosophy](https://www.smogon.com/xy/articles/clauses#:~:text=Sleep%20Clause,t%20be%20put%20to%20sleep.)
- Toggleable per-battle by setting / unsetting the flag assigned to B_FLAG_SLEEP_CLAUSE
* Variadic IS_BATTLER_OF_TYPE and GetBattlerTypes by @mrgriffin in [#5708](https://github.com/rh-hideout/pokeemerald-expansion/pull/5708)
* Simultaneous HP Reduction (CFRU Port) by @AsparagusEduardo and @AlexOn1ine for the port to expansion. @Skeli789 for the CFRU implementation. in [#5770](https://github.com/rh-hideout/pokeemerald-expansion/pull/5770)
* Destiny Bond fails on repeated use in Gen 7+ by @Pawkkie in [#5652](https://github.com/rh-hideout/pokeemerald-expansion/pull/5652)
* Adds Pledge Side Statuses as Starting Statuses by @AlexOn1ine in [#5899](https://github.com/rh-hideout/pokeemerald-expansion/pull/5899)
* Adds B_VAR_DIFFICULTY and related functions READ DESC by @pkmnsnfrn in [#5337](https://github.com/rh-hideout/pokeemerald-expansion/pull/5337)
* Config for move slot rearrangement in battle by @hedara90 and @ghoulslash for pointing out the exact point in the code where move slot rearrangement is handled. in [#6017](https://github.com/rh-hideout/pokeemerald-expansion/pull/6017)
- Move slot rearrangement is disabled by default in battle, set `B_MOVE_REARRANGEMENT_IN_BATTLE` to `GEN_3` to enable rearrangement again.
### Changed
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
* move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
* Easy customizable Hidden Move types by @AsparagusEduardo in [#5872](https://github.com/rh-hideout/pokeemerald-expansion/pull/5872)
- `gTypesInfo` now has a `isHiddenPowerType` field that inserts them into the Hidden Power type calculation.
- ***Warning:*** Changing this from the vanilla settings will change any existing Hidden Power's type, and external calculators will not work either.
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Introduces BattleTurnCounter to simplfy timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
### Fixed
* Fix Sleep Clause AI handling of partner sleeping moves by @Pawkkie in [#5761](https://github.com/rh-hideout/pokeemerald-expansion/pull/5761)
* Fix fixed point damage calculation off-by-1s by @SBird1337 in [#5775](https://github.com/rh-hideout/pokeemerald-expansion/pull/5775)
Fixes a bunch of rounding errors that cause wrong outputs in the damage calculation.
* Fixes simu hp reduction when no partner was on field by @AlexOn1ine in [#5799](https://github.com/rh-hideout/pokeemerald-expansion/pull/5799)
* Fixes Regenerator healing past maxHP by @PhallenTree in [#5861](https://github.com/rh-hideout/pokeemerald-expansion/pull/5861)
* Fixes Pursuit + Emergency Exit causing double switches and Pursuit user fainting causing target to not finish switch by @PhallenTree in [#5849](https://github.com/rh-hideout/pokeemerald-expansion/pull/5849)
* Fixes regression caused by argument refactor by @AlexOn1ine in [#5870](https://github.com/rh-hideout/pokeemerald-expansion/pull/5870)
* Fixes Sparkling Aria Shield Dust / Covert Cloak interaction by @AlexOn1ine in [#5911](https://github.com/rh-hideout/pokeemerald-expansion/pull/5911)
* Battle Weather Refactor oversight by @AlexOn1ine in [#5960](https://github.com/rh-hideout/pokeemerald-expansion/pull/5960)
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
* Dynamic move type was ignored in doubles for spread moves by @AlexOn1ine in [#5984](https://github.com/rh-hideout/pokeemerald-expansion/pull/5984)
* Fixes self effect moves not procing for spread moves when battler 3 w… by @AlexOn1ine in [#6020](https://github.com/rh-hideout/pokeemerald-expansion/pull/6020)
* Fix UB when accessing move result flags by @cawtds in [#6030](https://github.com/rh-hideout/pokeemerald-expansion/pull/6030)
* Fix Powder (status) config and some terrain timers not using gBattleTurnCounter by @PhallenTree in [#6109](https://github.com/rh-hideout/pokeemerald-expansion/pull/6109)
* Fix Powder config not checking for Powder status by @PhallenTree in [#6113](https://github.com/rh-hideout/pokeemerald-expansion/pull/6113)
* Fixes battler mutation during the intim script by @AlexOn1ine in [#6151](https://github.com/rh-hideout/pokeemerald-expansion/pull/6151)
* Fixes Dynamic Moves types in SumScreen while in Battle by @AlexOn1ine in [#6145](https://github.com/rh-hideout/pokeemerald-expansion/pull/6145)
* Fixes Dragon Tail missing timing against Rocky Helmet / Iron Barbs by @AlexOn1ine in [#6154](https://github.com/rh-hideout/pokeemerald-expansion/pull/6154)
* Prevent sameMoveTurns from incrementing when unable to use move by @moostoet in [#6167](https://github.com/rh-hideout/pokeemerald-expansion/pull/6167)
* Fixes Suction Cups ability popup and Red Card + Guard Dog interaction by @PhallenTree in [#6171](https://github.com/rh-hideout/pokeemerald-expansion/pull/6171)
* Fixed Unnerve message and wrote tests by @hedara90 in [#6192](https://github.com/rh-hideout/pokeemerald-expansion/pull/6192)
* Fixes Spectral Thief stealing boost at the wrong time by @AlexOn1ine in [#6197](https://github.com/rh-hideout/pokeemerald-expansion/pull/6197)
* Fixes BATTLER_TURN_DAMAGED battler id by @AlexOn1ine in [#6236](https://github.com/rh-hideout/pokeemerald-expansion/pull/6236)
* Fixed multi battle forced switches by @hedara90 in [#6243](https://github.com/rh-hideout/pokeemerald-expansion/pull/6243)
* Fixes ability Embody Aspect triggering multiple times by @AlexOn1ine in [#6259](https://github.com/rh-hideout/pokeemerald-expansion/pull/6259)
* Fixes Called moves ignoring redirection by @PhallenTree in [#6267](https://github.com/rh-hideout/pokeemerald-expansion/pull/6267)
* Fixes Protean not restoring types after ai damage calcs by @AlexOn1ine in [#6280](https://github.com/rh-hideout/pokeemerald-expansion/pull/6280)
* Restoretarget in Rototiller script + Tests by @AlexOn1ine in [#6296](https://github.com/rh-hideout/pokeemerald-expansion/pull/6296)
* Fixes inconsistency for Kings rock. by @AlexOn1ine in [#6302](https://github.com/rh-hideout/pokeemerald-expansion/pull/6302)
* Fixes Shell Bell for Spread Moves by @AlexOn1ine in [#6303](https://github.com/rh-hideout/pokeemerald-expansion/pull/6303)
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
* Fixes doesnt effect message for Thunder Wave by @AlexOn1ine in [#6304](https://github.com/rh-hideout/pokeemerald-expansion/pull/6304)
* Fixes Tera Shell activating on moves that have no effect on target by @AlexOn1ine in [#6271](https://github.com/rh-hideout/pokeemerald-expansion/pull/6271)
* Fixes fainted battler being able to select an action by @PhallenTree in [#6339](https://github.com/rh-hideout/pokeemerald-expansion/pull/6339)
## 🤹 Moves 🤹
### Added
* Added missing in-battle "Move Info" button prompt by @AsparagusEduardo and @TeamAquasHideout from who I got the source from and @BelialClover from who Archie got the source from. in [#6155](https://github.com/rh-hideout/pokeemerald-expansion/pull/6155)
### Changed
* New Volt Switch Animation by @AlexOn1ine in [#5729](https://github.com/rh-hideout/pokeemerald-expansion/pull/5729)
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
* Tera starstorm by @hedara90 in [#6073](https://github.com/rh-hideout/pokeemerald-expansion/pull/6073)
* Tachyon Cutter and Salt Cure animations by @hedara90 in [#6182](https://github.com/rh-hideout/pokeemerald-expansion/pull/6182)
* Heal Bell/Aromatherapy/Sparkly Swirl improvements and fixes by @AsparagusEduardo in [#6210](https://github.com/rh-hideout/pokeemerald-expansion/pull/6210)
- Removed `EFFECT_SPARKLY_SWIRL` in favor of `MOVE_EFFECT_AROMATHEROPY`.
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
* Fixes non-Ghost type Curse animation by @PhallenTree in [#6299](https://github.com/rh-hideout/pokeemerald-expansion/pull/6299)
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
### Fixed
* Fixes moves based on Dragon Darts with strikeCount > 2 always hitting the same battler from the second hit onwards by @PhallenTree in [#5830](https://github.com/rh-hideout/pokeemerald-expansion/pull/5830)
* Last fix for Sparkling Aria / Covert Cloak / Shield Dust interaction by @AlexOn1ine in [#5956](https://github.com/rh-hideout/pokeemerald-expansion/pull/5956)
* Added WEATHER_DOWNPOUR to Weather Ball's dynamic type by @fdeblasio in [#6100](https://github.com/rh-hideout/pokeemerald-expansion/pull/6100)
* Fixed Future Sight not being affected by Electrify by @AsparagusEduardo in [#6213](https://github.com/rh-hideout/pokeemerald-expansion/pull/6213)
* Fixes Expanding Force and Spectral Thief move animations by @PhallenTree in [#6185](https://github.com/rh-hideout/pokeemerald-expansion/pull/6185)
* Made some move animations fit in VRAM by @hedara90 in [#6289](https://github.com/rh-hideout/pokeemerald-expansion/pull/6289)
## 🧶 Items 🧶
### Fixed
* Adds missing Friend Ball friendship bonus upon catching by @PhallenTree in [#5795](https://github.com/rh-hideout/pokeemerald-expansion/pull/5795)
## 🤖 Battle AI 🤖
### Added
* Smart Switching handles Soundproof by @Pawkkie and @Robdeezy for the idea! in [#5703](https://github.com/rh-hideout/pokeemerald-expansion/pull/5703)
* Add Revival Blessing AI by @Pawkkie in [#5704](https://github.com/rh-hideout/pokeemerald-expansion/pull/5704)
* Add AI_FLAG_WEIGH_ABILITY_PREDICTION by @Pawkkie and @khbsd and @ghoulslash for the idea, @AlexOn1ine and @mrgriffin for getting it working :) in [#5636](https://github.com/rh-hideout/pokeemerald-expansion/pull/5636)
* Add AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE by @Pawkkie in [#6025](https://github.com/rh-hideout/pokeemerald-expansion/pull/6025)
* Add AI_FLAG_PREDICT_SWITCH by @Pawkkie and @kithr1 in [#6028](https://github.com/rh-hideout/pokeemerald-expansion/pull/6028)
* Add AI_FLAG_PREDICT_INCOMING_MON: AI will score against predicted switchin if predicting switch by @Pawkkie in [#6037](https://github.com/rh-hideout/pokeemerald-expansion/pull/6037)
* Switch trapping AI will consider Trace by @Pawkkie in [#6059](https://github.com/rh-hideout/pokeemerald-expansion/pull/6059)
* AI adds score to Pursuit if it OHKOs by @Pawkkie in [#6166](https://github.com/rh-hideout/pokeemerald-expansion/pull/6166)
* Switch chance config support by @Pawkkie in [#6187](https://github.com/rh-hideout/pokeemerald-expansion/pull/6187)
- Config can be changed in config/ai.h
* Add function to adjust AI scoring for generalized item effects by @moostoet and @AlexOn1ine and @Pawkkie for the input on slight changes to make to the logic (config, no magic numbers...) in [#6247](https://github.com/rh-hideout/pokeemerald-expansion/pull/6247)
### Changed
* Fixed AI not handling type effectiveness beyond x8 by @AsparagusEduardo and @/sshadowzkmao in [#6127](https://github.com/rh-hideout/pokeemerald-expansion/pull/6127)
- Removed the use of `AI_EFFECTIVENESS_` in favor of storing the actual type effectiveness.
- Renamed `AI_GetTypeEffectiveness` to `AI_GetMoveEffectiveness`, removing the original one.
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
### Fixed
* Eject item ace flag switch AI fixes by @Pawkkie and @wiz1989 for reporting the bug in [#6098](https://github.com/rh-hideout/pokeemerald-expansion/pull/6098)
* Fix Choice'd mons referring to incorrect move when switching by @Pawkkie and @/capncrunch in [#6204](https://github.com/rh-hideout/pokeemerald-expansion/pull/6204)
* Fix AI switching in absorbing mon incorrectly by @Pawkkie in [#6227](https://github.com/rh-hideout/pokeemerald-expansion/pull/6227)
* Improve Yawn and Status Switching by @Pawkkie and @/Chape for finding this behaviour in [#6202](https://github.com/rh-hideout/pokeemerald-expansion/pull/6202)
* Fix AI wrongly thinking it strikes first with priority even if player is using priority themselves by @moostoet in [#6274](https://github.com/rh-hideout/pokeemerald-expansion/pull/6274)
* Fix AI hazard move handling, minor AI tweaks by @Pawkkie and @ShadowzLmao2 in [#6311](https://github.com/rh-hideout/pokeemerald-expansion/pull/6311)
* Fix Overzealous Absorber Switching by @Pawkkie and @iriv24 and @ravepossum for squinting at a conditional for nearly 30mins with me to find a semicolon in [#6318](https://github.com/rh-hideout/pokeemerald-expansion/pull/6318)
* Fix Substitute / Shed Tail Switch AI by @Pawkkie in [#6334](https://github.com/rh-hideout/pokeemerald-expansion/pull/6334)
## 🧹 Other Cleanup 🧹
* Split "Do nothing" move effects by @AsparagusEduardo in [#5613](https://github.com/rh-hideout/pokeemerald-expansion/pull/5613)
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
* Converts multi-choice options to COMPOUND_STRINGs by @fdeblasio in [#5686](https://github.com/rh-hideout/pokeemerald-expansion/pull/5686)
* Converted item-related variables to COMPOUND_STRINGs by @fdeblasio in [#5714](https://github.com/rh-hideout/pokeemerald-expansion/pull/5714)
* Adds SleepClauseBlock enum to CanBeSlept by @Pawkkie and @AlexOn1ine in [#5773](https://github.com/rh-hideout/pokeemerald-expansion/pull/5773)
* Swapped DESELECT and CHECK_TAG to be in right places by @fdeblasio in [#5794](https://github.com/rh-hideout/pokeemerald-expansion/pull/5794)
* Changes target TURN_DAMAGED and MAX_HP to inlines by @AlexOn1ine in [#5822](https://github.com/rh-hideout/pokeemerald-expansion/pull/5822)
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
* Remove fno-toplevel-reorder by @DizzyEggg in [#5809](https://github.com/rh-hideout/pokeemerald-expansion/pull/5809)
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
* Clean up redundancy for mugshots by @AlexOn1ine in [#5906](https://github.com/rh-hideout/pokeemerald-expansion/pull/5906)
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
* Remove EWRAM gHpDealt (not needed anymore) by @AlexOn1ine in [#5925](https://github.com/rh-hideout/pokeemerald-expansion/pull/5925)
* Fix DexNav static asserts by @Bassoonian in [#5944](https://github.com/rh-hideout/pokeemerald-expansion/pull/5944)
* Move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn, @doejohn126 discovered the issue in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
* Multiple removals of hardcoded move IDs by @AsparagusEduardo in [#5964](https://github.com/rh-hideout/pokeemerald-expansion/pull/5964)
* Missed two uses of new hazard type enum by @Pawkkie in [#5996](https://github.com/rh-hideout/pokeemerald-expansion/pull/5996)
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
- Added `dmaxLevel` option to `givemon` and `createmon`.
- Added `WEATHER_COUNT`.
- Cleaned up repeated code instances in debug menu.
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
* Free some IWRAM by @DizzyEggg in [#6000](https://github.com/rh-hideout/pokeemerald-expansion/pull/6000)
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
* Future Sight Innards Out follow up for upcoming by @AlexOn1ine in [#5998](https://github.com/rh-hideout/pokeemerald-expansion/pull/5998)
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
* Rename DexNav flags and vars by @Bassoonian in [#6044](https://github.com/rh-hideout/pokeemerald-expansion/pull/6044)
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
* Moved front animations frames to gSpeciesInfo by @AsparagusEduardo in [#5605](https://github.com/rh-hideout/pokeemerald-expansion/pull/5605)
* Clean up array access by using index instead of dereferencing the value by @AlexOn1ine in [#6057](https://github.com/rh-hideout/pokeemerald-expansion/pull/6057)
* Add a uniquely striking pair of brackets by @Pawkkie in [#6068](https://github.com/rh-hideout/pokeemerald-expansion/pull/6068)
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
* Converts a bunch of defines to enums by @Bassoonian in [#6071](https://github.com/rh-hideout/pokeemerald-expansion/pull/6071)
- Replaced `BATTLE_TERRAIN` #defines with the `BattleTerrain` enum
- Replaced `MAP_TYPE` #defines with the `MapType` enum
- Replaced `MAP_BATTLE_SCENE` #defines with the `MapBattleScene` enum
- Replaced `BACK_ANIM` #defines with the `BackAnim` enum
- Replaced `ANIM` #defines with the `AnimFunctionIDs` enum
- Replaced `INGAME_TRADE` #defines with the `InGameTradeID` enum
- Replaced `TRAINER_CLASS` #defines with the `TRAINER_CLASS` enum
* Return the universe to a state of balanced quilibrium by @Pawkkie in [#6074](https://github.com/rh-hideout/pokeemerald-expansion/pull/6074)
* Cleaned up Debug Menu by @AsparagusEduardo in [#6070](https://github.com/rh-hideout/pokeemerald-expansion/pull/6070)
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Terrain function standarization by @fdeblasio in [#6097](https://github.com/rh-hideout/pokeemerald-expansion/pull/6097)
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
* Remove UnusedBattleInit from battle_bg.c by @DizzyEggg in [#6116](https://github.com/rh-hideout/pokeemerald-expansion/pull/6116)
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
* Clean up follow up for Simultaneous Reduction HP by @AlexOn1ine in [#6139](https://github.com/rh-hideout/pokeemerald-expansion/pull/6139)
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
* Clarify MOVE_EFFECT_SLEEP sleep clause handling by @Pawkkie in [#6161](https://github.com/rh-hideout/pokeemerald-expansion/pull/6161)
* Remove unused PainSplit scripting global by @AlexOn1ine in [#6164](https://github.com/rh-hideout/pokeemerald-expansion/pull/6164)
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
* Cleaned up party data access GetPartyBattlerData by @AsparagusEduardo in [#6172](https://github.com/rh-hideout/pokeemerald-expansion/pull/6172)
* Changed two LocalRandom calls to new LocalRandom32 by @hedara90 in [#6173](https://github.com/rh-hideout/pokeemerald-expansion/pull/6173)
* Cleanup some global battler ID usage by @ghoulslash in [#6181](https://github.com/rh-hideout/pokeemerald-expansion/pull/6181)
* Clean up - Add ability args instead of calcing the ability again by @AlexOn1ine in [#6186](https://github.com/rh-hideout/pokeemerald-expansion/pull/6186)
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
* Fix typo in Nuzzle's description by @Bassoonian in [#6209](https://github.com/rh-hideout/pokeemerald-expansion/pull/6209)
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
* Fixed missing move encapsulation in upcoming by @AsparagusEduardo in [#6226](https://github.com/rh-hideout/pokeemerald-expansion/pull/6226)
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
* Add abstraction layer for battler positions by @AlexOn1ine in [#6212](https://github.com/rh-hideout/pokeemerald-expansion/pull/6212)
* Revert unintentional change by @AlexOn1ine in [#6239](https://github.com/rh-hideout/pokeemerald-expansion/pull/6239)
* Remove whitespace from trainers data file by @AsparagusEduardo in [#6234](https://github.com/rh-hideout/pokeemerald-expansion/pull/6234)
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
* fix for battle ui for add to party menu (#6229) by @fakuzatsu in [#6240](https://github.com/rh-hideout/pokeemerald-expansion/pull/6240)
* Changed bit order for follower graphicsId creation by @hedara90 in [#6249](https://github.com/rh-hideout/pokeemerald-expansion/pull/6249)
* Minor Clean up for CanAbilityX. Follow up for #6183 by @AlexOn1ine in [#6252](https://github.com/rh-hideout/pokeemerald-expansion/pull/6252)
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
* Use more accurate count in MovesInfo by @AlexOn1ine in [#6260](https://github.com/rh-hideout/pokeemerald-expansion/pull/6260)
* Fix Extra `task->tState++` and `break` in `Task_DrawFieldMessageBox` by @Deokishisu in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
* Expand usage of IsBattlerAlly (rename from IsAlly) by @AlexOn1ine in [#6251](https://github.com/rh-hideout/pokeemerald-expansion/pull/6251)
* Rename SetPhotonGeyser to a more general use and clean up by @AlexOn1ine in [#6272](https://github.com/rh-hideout/pokeemerald-expansion/pull/6272)
* Fix padding amount in MoveInfo by @AlexOn1ine in [#6307](https://github.com/rh-hideout/pokeemerald-expansion/pull/6307)
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
* Clean up leftover from simu hp reduction development by @AlexOn1ine in [#6323](https://github.com/rh-hideout/pokeemerald-expansion/pull/6323)
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
## 🧪 Test Runner 🧪
### Changed
* New Ally Switch test fails on CI by @AlexOn1ine in [#5896](https://github.com/rh-hideout/pokeemerald-expansion/pull/5896)
* Added final Sparkling Aria+Shield Dust interaction test by @hedara90 in [#5923](https://github.com/rh-hideout/pokeemerald-expansion/pull/5923)
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Tests for Big Pecks by @hedara90 in [#6158](https://github.com/rh-hideout/pokeemerald-expansion/pull/6158)
* Water Compaction tests by @hedara90 in [#6159](https://github.com/rh-hideout/pokeemerald-expansion/pull/6159)
* Wrote tests for Electrify by @hedara90 in [#6179](https://github.com/rh-hideout/pokeemerald-expansion/pull/6179)
* Sheer Force Test Fixes by @ghoulslash in [#6198](https://github.com/rh-hideout/pokeemerald-expansion/pull/6198)
* Minor Terrain Seed Test Improvement by @ghoulslash in [#6207](https://github.com/rh-hideout/pokeemerald-expansion/pull/6207)
* Fix Liquid Ooze + Leech Seed Test by @ghoulslash in [#6217](https://github.com/rh-hideout/pokeemerald-expansion/pull/6217)
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
* Added test support for 5 battle configs by @AsparagusEduardo in [#5914](https://github.com/rh-hideout/pokeemerald-expansion/pull/5914)
* Added missing Dream Eater and Reflect Type tests by @AsparagusEduardo in [#6245](https://github.com/rh-hideout/pokeemerald-expansion/pull/6245)
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
### Fixed
* Fix ASSUMPTIONS not working by @DizzyEggg in [#5869](https://github.com/rh-hideout/pokeemerald-expansion/pull/5869)
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
* Adjusted G-Max Depletion test by @AsparagusEduardo and @AlexOn1ine for being a cool dude being patient with me during the PR. in [#6201](https://github.com/rh-hideout/pokeemerald-expansion/pull/6201)
* Do not add TRAINER_FLAG_DOUBLE_BATTLE to recorded battles by @mrgriffin in [#6285](https://github.com/rh-hideout/pokeemerald-expansion/pull/6285)
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
## 📚 Documentation 📚
* Updating install instructions by @hedara90 in [#5610](https://github.com/rh-hideout/pokeemerald-expansion/pull/5610)
- Install instructions have been moved into individual files under `docs/install/ `
* Documentation for DisableStruct by @AlexOn1ine in [#6066](https://github.com/rh-hideout/pokeemerald-expansion/pull/6066)
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
* Update how_to_testing_system.md by @hedara90 in [#6281](https://github.com/rh-hideout/pokeemerald-expansion/pull/6281)
## 📦 Branch Synchronisation 📦
### pret
* 11th of February in [#6231](https://github.com/rh-hideout/pokeemerald-expansion/pull/6231)
* Replace easy_chat alphabetialOrder magic numbers with EC_INDEX values by @rayrobdod in [pret#2096](https://github.com/pret/pokeemerald/pull/2096)
* Fixed switchout bug in multibattle where order of mons gets messed up by @shachar700 in [pret#2099](https://github.com/pret/pokeemerald/pull/2099)
## New Contributors
* @khbsd made their first contribution in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
* @ExMingYan made their first contribution in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
* @Deokishisu made their first contribution in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.2...test
<!--Last PR: 6339-->
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->

View File

@ -29,12 +29,14 @@ This section lists all of expansions AI Flags and briefly describes the effec
## Composite AI Flags
Expansion has two "composite" AI flags, `AI_FLAG_BASIC_TRAINER` and `AI_FLAG_SMART_TRAINER`. This means that these flags have no unique functionality themselves, and can instead be thought of as groups of other flags that are all enabled when this flag is enabled. The idea behind these flags is that if you don't care to manage the detailed behaviour of a particular trainer, you can use these as a baseline instead, and expansion will keep them updated for you.
Expansion has a few "composite" AI flags. This means that these flags have no unique functionality themselves, and can instead be thought of as groups of other flags that are all enabled when this flag is enabled. The idea behind these flags is that if you don't care to manage the detailed behaviour of a particular trainer, you can use these as a baseline instead, and expansion will keep them updated for you.
`AI_FLAG_BASIC_TRAINER` is expansion's version of generic, normal AI behaviour. It includes `AI_FLAG_CHECK_BAD_MOVE` (don't use bad moves), `AI_FLAG_TRY_TO_FAINT` (faint the player where possible), and `AI_FLAG_CHECK_VIABILITY` (choose the most effective move to use in the current context). Trainers with this flag will still be smarter than they are in vanilla as there have been dramatic improvements made to move selection, but not incredibly so. Trainers with this flag should feel like normal trainers. In general we recommend these three flags be used in all cases, unless you specifically want a trainer who makes obvious mistakes in battle.
`AI_FLAG_SMART_TRAINER` is expansion's version of a "smart AI". It includes everything in `AI_FLAG_BASIC_TRAINER` along with `AI_FLAG_SMART_SWITCHING` (make smart decisions about when to switch), `AI_FLAG_SMART_MON_CHOICES` (make smart decisions about what mon to send in after a switch / KO), and `AI_FLAG_OMNISCIENT` (awareness of what moves, items, and abilities the player's mons have to better inform decisions). Expansion will keep this updated to represent the most objectively intelligent behaviour our flags are capable of producing.
`AI_FLAG_PREDICTION` will enable all of the prediction flags at once, so the AI can perform as well as possible. It is best paired with the flags in `AI_FLAG_SMART_TRAINER` for optimal behaviour. This currently includes `AI_FLAG_PREDICT_SWITCH` and `AI_FLAG_PREDICT_INCOMING_MON`, but will likely be expanded in the future.
Expansion has LOADS of flags, which will be covered in the rest of this guide. If you don't want to engage with detailed trainer AI tuning though, you can just use these two composite flags, and trust that expansion will keep their contents updated to always represent the most standard and the smartest behaviour we can.
## `AI_FLAG_CHECK_BAD_MOVE`
@ -165,3 +167,15 @@ AI always assumes it will roll the lowest possible result when comparing damage
## `AI_FLAG_SEQUENCE_SWITCHING`
AI will always switch out after a KO in exactly party order as defined in the trainer data (ie. slot 1, then 2, then 3, etc.). The AI will never switch out mid-battle unless forced to (Roar etc.). If the AI uses a move that requires a switch where it makes a decision about what to send in (U-Turn etc.), it will always switch out into the lowest available party index.
## `AI_FLAG_WEIGH_ABILITY_PREDICTION`
AI will predict the player's ability based to its aiRating. Without this flag the AI randomly assumes an ability with an even distribution between all possible abilities until one is confirmed. With this flag, it instead guesses proportionally to each ability's aiRating, making it far more likely to guess an ability like Water Absorb than Damp if both are options.
## `AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE`
AI will add score to its highest damaging move, regardless of accuracy or secondary effects. Replaces deprecated `AI_FLAG_PREFER_STRONGEST_MOVE`.
## `AI_FLAG_PREDICT_SWITCH`
AI will determine whether it would switch out in the player's situation or not, and predict the player to switch accordingly. In any case where the AI would consider switching, it will assume the player will switch. This is modulated by a 50% failure rate, so the behaviour is non-deterministic and can change from turn to turn to emulate the inconsistency in human predictions. This behaviour is improved significantly by using `AI_FLAG_SMART_SWITCHING` and `AI_FLAG_SMART_MON_CHOICES` as they improve the AI's ability to determine good situations to switch, and also by `AI_FLAG_OMNISCIENT` so the AI can use all its knowledge of the player's team to make the decision.
## `AI_FLAG_PREDICT_INCOMING_MON`
This flag requires `AI_FLAG_PREDICT_SWITCH` to function. If the AI predicts that the player will switch, this flag allows the AI to run its move scoring calculation against the Pokémon it expects the player to switch into, instead of the Pokémon that it expects to switch out.

View File

@ -0,0 +1,395 @@
## How to use the code entry system
This system involves using the `EnterCode` special to prompt the player to enter a text string, and then the `GetCodeFeedback` special to perform some function based on the string entered. Using this system to make your own cheat codes or mystery gifts will involve both scripting and editing the `GetCodeFeedback` function itself to include your new functionality, and may involve further changes to the codebase if you want to implement something more far reaching (ie. a grindrunning mode).
This tutorial will use the example of entering the string "CaughtEmAll" to flag every Pokemon as caught
### 1. Choose where to initiaze your event scripting
This can be anywhere or anything, pre-existing or added by you in porymap. I usually like using signs for testing things but this can be anything. I'm going to give the main script a more generic name, and you can attach it to whatever object you like.
In that object's event script, add the following:
```diff
EventScript_CodeEntry::
special EnterCode
waitstate
special GetCodeFeedback
end
```
This will prompt text entry from the object and prepare it to handle reading the entered text after it's been entered, but it won't do anything yet. Next we need to add our functionality to `GetCodeFeedback`.
### 2. Add code string and code function to `GetCodeFeedback`
You can find `GetCodeFeedback` in `src/field_specials.c`. Let's start by taking a look at the function:
```
void GetCodeFeedback(void)
{
static const u8 sText_SampleCode[] = _("SampleCode");
if (!StringCompare(gStringVar2, sText_SampleCode))
gSpecialVar_Result = 1;
else
gSpecialVar_Result = 0;
}
```
What this function does is compare the input string (`gStringVar2`) against a specified string (`sText_SampleCode`) and returns a value depending on whether the strings matched (`gSpecialVar_Result`). Note that due to the way `StringCompare` works, the comparison does need to be negated with `!`. By default, this sample setup returns 1 when the string "SampleCode" is entered by the player.
Let's leave that functionality alone in case we ever want to reference it again, and just add a brand new code instead. We want to use the string "CaughtEmAll" as our code, so we'll start by making a string for it, and a new conditional that checks if the entered string matches. We'll also want to make sure we return a new unique number for `gSpecialVar_Result` so our event script knows what happened.
```diff
void GetCodeFeedback(void)
{
static const u8 sText_SampleCode[] = _("SampleCode");
+ static const u8 sText_CaughtEmAll_[] = _("CaughtEmAll"); // Mark entire Pokedex as caught
if (!StringCompare(gStringVar2, sText_SampleCode))
gSpecialVar_Result = 1;
+ else if (!StringCompare(gStringVar2, sText_CaughtEmAll))
+ {
+ // TODO
+ gSpecialVar_Result = 2;
+ }
else
gSpecialVar_Result = 0;
}
```
Great! Now we have a new case to handle our new code, but it still doesn't do anything. This is the part that will change dramatically depending on what you want to do, and you can do anything you want, from setting flags to calling other functions or anything else! Just make sure you do it from within the conditional that matches your code. In our case we want to iterate through the Pokedex to mark everything as caught, which I'll just do here for simplicity.
```diff
void GetCodeFeedback(void)
{
static const u8 sText_SampleCode[] = _("SampleCode");
static const u8 sText_CaughtEmAll_[] = _("CaughtEmAll"); // Mark entire Pokedex as caught
if (!StringCompare(gStringVar2, sText_SampleCode))
gSpecialVar_Result = 1;
else if (!StringCompare(gStringVar2, sText_CaughtEmAll))
{
+ u32 i;
+ for (i = 0; i < NATIONAL_DEX_COUNT; i++)
+ {
+ GetSetPokedexFlag(i + 1, FLAG_SET_CAUGHT);
+ }
gSpecialVar_Result = 2;
}
else
gSpecialVar_Result = 0;
}
```
Awesome! Now our `GetCodeFeedback` function performs the task we want it to, and returns a 2 to our event script so it can handle the situation appropriately. That's our next and final step!
### 3. Handle new `GetCodeFeedback` case in event script
To clarify, this step is *optional*. You don't need to do anything else after `GetCodeFeedback` has run if you don't want to, as all the functionality is there; once that function finishes, everything in the Pokedex will be marked as caught.
The reason we might want to do this step, and the reason we pass results back to the event script in the first place, is so we can handle providing the player with some dialogue based on what they're doing.
Let's go back to our event script.
```
EventScript_CodeEntry::
special EnterCode
waitstate
special GetCodeFeedback
end
```
Maybe we first want to prompt the player with a message that says something like "Enter a code?"
```diff
EventScript_CodeEntry::
+ lockall
+ msgbox EnterCode_EnterCodeText, MSGBOX_YESNO
+ compare VAR_RESULT, 0
+ goto_if_eq CodeExit
special EnterCode
waitstate
special GetCodeFeedback
end
+CodeExit::
+ releaseall
+ end
+
+EnterCode_EnterCodeText:
+ .string "Enter a code?$"
```
This is all straightforward scripting stuff, the sign will first give the player a YES / NO box and ask whether they'd like to enter a code. Let's now add some cases and messages that handle the different results of the code entry from `GetCodeFeedback`. Let's look at the sign first:
```diff
EventScript_CodeEntry::
lockall
msgbox EnterCode_EnterCodeText, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq CodeExit
special EnterCode
waitstate
special GetCodeFeedback
+ goto_if_eq VAR_RESULT, 0, CodeFailed
+ goto_if_eq VAR_RESULT, 1, CodeSampleCode
+ goto_if_eq VAR_RESULT, 2, CodeCaughtEmAll
end
```
Now we're handling cases for each of the possible return values from `GetCodeFeedback`! except we don't have any of those functions, so this will cause errors as the script has nothing to `goto_if_eq`. Let's write those too:
```diff
CodeFailed::
msgbox EnterCode_FailedText, MSGBOX_DEFAULT
releaseall
end
CodeSampleString::
msgbox EnterCode_SucceededText, MSGBOX_DEFAULT
msgbox CodeSampleCode_Text, MSGBOX_DEFAULT
releaseall
end
CodeCaughtEmAll::
msgbox EnterCode_SucceededText, MSGBOX_DEFAULT
msgbox CodeCaughtEmAll_Text, MSGBOX_DEFAULT
releaseall
end
```
And lastly, we'll need to add all of the strings we now need to reference:
```
EnterCode_FailedText:
.string "...nothing happened.$"
EnterCode_SucceededText:
.string "The code worked!$"
CodeSampleCode_Text
.string "You entered the sample code!$"
CodeCaughtEmAll_Text
.string "Encyclopedic knowledge fills your head.\n"
.string "It's like you've caught 'em all!$"
```
So to finish up, our event script file now looks like this, with all said and done:
```
EventScript_CodeEntry::
lockall
msgbox EnterCode_EnterCodeText, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq CodeExit
special EnterCode
waitstate
special GetCodeFeedback
goto_if_eq VAR_RESULT, 0, CodeFailed
goto_if_eq VAR_RESULT, 1, CodeSampleCode
goto_if_eq VAR_RESULT, 2, CodeCaughtEmAll
end
CodeExit::
releaseall
end
CodeFailed::
msgbox EnterCode_FailedText, MSGBOX_DEFAULT
releaseall
end
CodeSampleString::
msgbox EnterCode_SucceededText, MSGBOX_DEFAULT
msgbox CodeSampleCode_Text, MSGBOX_DEFAULT
releaseall
end
CodeCaughtEmAll::
msgbox EnterCode_SucceededText, MSGBOX_DEFAULT
msgbox CodeCaughtEmAll_Text, MSGBOX_DEFAULT
releaseall
end
EnterCode_EnterCodeText:
.string "Enter a code?$"
EnterCode_FailedText:
.string "...nothing happened.$"
EnterCode_SucceededText:
.string "The code worked!$"
CodeSampleCode_Text
.string "You entered the sample code!$"
CodeCaughtEmAll_Text
.string "Encyclopedic knowledge fills your head.\n"
.string "It's like you've caught 'em all!$"
```
And that's it! Feel free to expand this in whatever way you wish, the pattern can just be repeated as much as you like, and you can made the code called from `GetCodeFeedback` do whatever you like.
## Can I change the icon on the name entry screen?
Absolutely! In `naming_screen.c`, look for the `NamingScreen_CreateCodeIcon` function. It's very short. There's one relevant line that needs to be changed:
```
spriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MYSTERY_GIFT_MAN, SpriteCallbackDummy, 56, 37, 0);
```
Just swap out `OBJ_EVENT_GFX_MYSTERY_GIFT_MAN` for whatever event object sprite you'd like to use instead. You may need to adjust the position (the 56 and 37 in this example) depending on your sprite.
## What about a mystery gift setup?
I'd like to cover this separately because it's best handled via `givemon` script commands, which means we don't do much in `GetCodeFeedback` other than return a unique identifier. I'm gonna reference @PCG06's mystery gift implementation which is based on this code entry system for a clean and really thorough example.
### 3. Mystery Gift `GetCodeFeedback`
Let's say you have two mystery gift mons and no other cases you want to handle, one for Celebi and one for Jirachi. Your `GetCodeFeedback` function will look something like this:
```
{
static const u8 sText_CodeCelebi[] = _("Celebi");
static const u8 sText_CodeJirachi[] = _("Jirachi");
if (!StringCompare(gStringVar2, sText_CodeCelebi))
gSpecialVar_Result = 1;
else if (!StringCompare(gStringVar2, sText_CodeJirachi))
gSpecialVar_Result = 2;
else
gSpecialVar_Result = 0;
}
```
and that's it, super simple. All of the other handling will have to be done on the scripting end, as we'll be leaning on `givemon` and its associated handling.
### 2. Mystery Gift Scripting
Let's return back to our EventScript_CodeEntry pattern from before, but instead use our new codes.
```
EventScript_CodeEntry::
lockall
msgbox EnterCode_EnterCodeText, MSGBOX_YESNO
compare VAR_RESULT, 0
goto_if_eq CodeExit
special EnterCode
waitstate
special GetCodeFeedback
goto_if_eq VAR_RESULT, 0, CodeFailed
goto_if_eq VAR_RESULT, 1, MysteryGift_EventScript_Celebi
goto_if_eq VAR_RESULT, 2, MysteryGift_EventScript_Jirachi
end
```
Straightforward enough! The actual work is in writing `MysteryGift_EventScript_Celebi` and `MysteryGift_EventScript_Jirachi` to handle their givemons appropriately, prompt nicknaming, send them to the PC if the party is full, etc. We should also keep in mind that each Mystery Gift should only be entered once, so we'll want to track that with a flag; conveniently, expansion already has 15 flags we can use for the purpose. Let's do Celebi first.
```
MysteryGift_EventScript_Celebi::
goto_if_set FLAG_MYSTERY_GIFT_1, MysteryGift_EventScript_Redeemed
bufferspeciesname STR_VAR_1, SPECIES_CELEBI
setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_CELEBI
givemon SPECIES_CELEBI, 100, ITEM_LIFE_ORB, ITEM_CHERISH_BALL, NATURE_TIMID, 0, MON_GENDERLESS, 0, 0, 4, 252, 252, 0, 31, 31, 31, 30, 31, 31, MOVE_ENERGY_BALL, MOVE_PSYCHIC, MOVE_NASTY_PLOT, MOVE_CELEBRATE, TRUE, FALSE, TYPE_PSYCHIC
setflag FLAG_MYSTERY_GIFT_1
call MysteryGift_EventScript_ReceivedMon
releaseall
end
```
Walking through this, it's clear we'll need some more scripting. We first check if Celebi's corresponding Mystery Gift flag has been set, and if it has, we need to tell the player they've already redeemed it and can't again. If they haven't though, we get ourselves setup for the givemon, do the givemon, and set the mystery gift flag. Then we need soem more generic handling to prompt nicknaming and some fanfare.
Two things, then; an event script to handle the case where a mystery gift mon has already been redeemed, and an event script to handle when a mystery gift mon has successfully been received.
Just for the sake of simplicity, I'm going to handle entering a used mystery gift code the same way I'd handle an incorrect code. You're welcome to add more complex scripting if you prefer.
```
MysteryGift_EventScript_Redeemed::
msgbox EnterCode_FailedText, MSGBOX_DEFAULT
releaseall
end
```
And then the scripto handle the player having successfully received a mon:
```
MysteryGift_EventScript_ReceivedMon::
msgbox MysteryGift_Text_SucceededText, MSGBOX_DEFAULT
playfanfare MUS_OBTAIN_ITEM
message MysteryGift_Text_ReceivedGiftMon
waitfanfare
goto_if_eq VAR_RESULT, MON_GIVEN_TO_PARTY, MysteryGift_EventScript_NicknamePartyMon
goto_if_eq VAR_RESULT, MON_GIVEN_TO_PC, MysteryGift_EventScript_NicknamePCMon
goto Common_EventScript_NoMoreRoomForPokemon
msgbox MysteryGift_Text_PleaseVisitAgain, MSGBOX_DEFAULT
end
```
Almost done! Just need to handle the specific nicknaming scripts, and then add all of the text.
```
MysteryGift_EventScript_NicknamePartyMon::
msgbox gText_NicknameThisPokemon, MSGBOX_YESNO
goto_if_eq VAR_RESULT, NO, MysteryGift_EventScript_Exit
call Common_EventScript_GetGiftMonPartySlot
call Common_EventScript_NameReceivedPartyMon
goto MysteryGift_EventScript_Exit
end
MysteryGift_EventScript_NicknamePCMon::
msgbox gText_NicknameThisPokemon, MSGBOX_YESNO
goto_if_eq VAR_RESULT, NO, MysteryGift_EventScript_TransferredToPC
call Common_EventScript_NameReceivedBoxMon
call Common_EventScript_TransferredToPC
releaseall
end
MysteryGift_EventScript_TransferredToPC::
call Common_EventScript_TransferredToPC
releaseall
end
MysteryGift_Text_WelcomeToMysteryGiftSystem:
.string "Hello, {PLAYER}!\p"
.string "Welcome to the Mystery Gift System!\p"
.string "Would you like to enter a code?$"
MysteryGift_Text_CurrentlyUnavailable:
.string "I'm sorry, but the Mystery Gift System\n"
.string "is currently unavailable.\p"
.string "Please try again later.\p"
.string "Thank you!$"
MysteryGift_Text_PleaseVisitAgain:
.string "Please visit again!$"
MysteryGift_Text_EnterCode:
.string "Please enter the code.$"
MysteryGift_Text_SucceededText:
.string "The code was valid!\p"
.string "Enjoy your gift!$"
MysteryGift_Text_FailedText:
.string "The code was invalid!\p"
.string "Would you like to enter a new code?$"
MysteryGift_Text_RedeemedText:
.string "This code was already redeemed!\p"
.string "Would you like you enter a new code?$"
MysteryGift_Text_ReceivedGiftMon:
.string "{PLAYER} received a {STR_VAR_1}!$"
```
Goodness, so much infrastructure scripting! The nice thing is that now that all the infrastructure is set up, much like before, adding new cases becomes really straightforward. With Celebi and all of the skeleton scripting finished, let's add Jirachi.
```
MysteryGift_EventScript_Jirachi::
goto_if_set FLAG_MYSTERY_GIFT_2, MysteryGift_EventScript_Redeemed
bufferspeciesname STR_VAR_1, SPECIES_JIRACHI
setvar VAR_TEMP_TRANSFERRED_SPECIES, SPECIES_JIRACHI
givemon SPECIES_JIRACHI, 100, ITEM_LIFE_ORB, ITEM_CHERISH_BALL, NATURE_ADAMANT, 0, MON_GENDERLESS, 0, 252, 4, 252, 0, 0, 31, 31, 31, 31, 31, 31, MOVE_IRON_HEAD, MOVE_ZEN_HEADBUTT, MOVE_PLAY_ROUGH, MOVE_CELEBRATE, TRUE, FALSE, TYPE_STEEL
setflag FLAG_MYSTERY_GIFT_2
call MysteryGift_EventScript_ReceivedMon
releaseall
end
```
And that's it! Super straightforward from here, just make sure to iterate `FLAG_MYSTERY_GIFT` each time you add a new mon, and of course add their code to both `GetCodeFeedback` and the main script controlling code entry.

View File

@ -0,0 +1,205 @@
# Adding New Trainer Slides
## Define Slides Per Trainer
We are going to add a Trainer Slide to Wally's first Victory Road battle, before he Mega Evolves his Gallade. This battle takes place outside a Battle Facility, so `sTrainerSlides` must be edited.
### `src/trainer_slide.c`
```diff
+ const u8 gText_ThatsTheWay[] = _("That's the way, Gallade! Go!{PAUSE_UNTIL_PRESS}");
static const u8* const sTrainerSlides[DIFFICULTY_COUNT][TRAINERS_COUNT][TRAINER_SLIDE_COUNT] =
{
[DIFFICULTY_NORMAL] =
{
+ [TRAINER_WALLY_VR_1] = // use the Trainer's Id from include/constants/opponents.h
+ {
+ [TRAINER_SLIDE_MEGA_EVOLUTION] = COMPOUND_STRING("That's the way, Gallade! Go!{PAUSE_UNTIL_PRESS}"), // find the id for the slide to be used.
+ //[TRAINER_SLIDE_MEGA_EVOLUTION] = gText_ThatsTheWay, // You can use globals or COMPOUND_STRING to define text here.
+ }
},
};
```
If we were to edit a Trainer that appears in a Battle Facility, `sFrontierTrainerSlides` would be edited instead. Here, we'll give Anabel a line before she uses a Z-Move.
### `src/trainer_slide.c`
```diff
static const u8* const sFrontierTrainerSlides[DIFFICULTY_COUNT][FRONTIER_TRAINERS_COUNT][TRAINER_SLIDE_COUNT] =
{
[DIFFICULTY_NORMAL] =
{
+ [TRAINER_ANABEL] =
+ {
+ [TRAINER_SLIDE_Z_MOVE] = COMPOUND_STRING("Victory...is ours!"), //{PAUSE_UNTIL_PRESS} is omitted, so the battle will continue as soon as the next is finished printing.
+ }
},
};
```
## Add New Slides
* [Example Commit](<https://github.com/rh-hideout/pokeemerald-expansion/commit/d6424688007cbd923c861cfd35272e5ebfaa4016>)
* [Patch](<https://github.com/rh-hideout/pokeemerald-expansion/commit/d6424688007cbd923c861cfd35272e5ebfaa4016.patch>)
* [Diff](<https://github.com/rh-hideout/pokeemerald-expansion/commit/d6424688007cbd923c861cfd35272e5ebfaa4016.diff>)
### `include/constants/trainer_slide.h`
```diff
enum TrainerSlideType
{
TRAINER_SLIDE_BEFORE_FIRST_TURN,
TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT,
+ TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT, // Each Trainer Slide has a unqiue id.
TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT,
TRAINER_SLIDE_PLAYER_LANDS_FIRST_STAB_MOVE,
TRAINER_SLIDE_PLAYER_LANDS_FIRST_DOWN,
TRAINER_SLIDE_ENEMY_MON_UNAFFECTED,
TRAINER_SLIDE_LAST_SWITCHIN,
TRAINER_SLIDE_LAST_HALF_HP,
TRAINER_SLIDE_LAST_LOW_HP,
TRAINER_SLIDE_MEGA_EVOLUTION,
TRAINER_SLIDE_Z_MOVE,
TRAINER_SLIDE_DYNAMAX,
TRAINER_SLIDE_COUNT,
};
```
Each Trainer Slide has a unique id and needs to be added to this list.
### `include/trainer_slide.h`
If your new Trainer Slide needs to check for beforen initalized, a function is declared here to be used externally. Critical hits are used to initalize this Trainer Slide but the slide doesn't play instantly, so we will create an function to initialize it.
```diff
void SetTrainerSlideMessage(enum DifficultyLevel, u32, u32);
void TryInitializeFirstSTABMoveTrainerSlide(u32, u32, u32);
void TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(u32);
+ void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32);
void TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32);
void TryInitializeTrainerSlideEnemyMonUnaffected(u32);
bool32 IsTrainerSlideInitialized(enum TrainerSlideType);
```
### `src/trainer_slide.c`
```diff
return IsTrainerSlideInitialized(slideId);
}
+static bool32 ShouldRunTrainerSlideEnemyLandsFirstCriticalHit(enum TrainerSlideType slideId)
+{
+ return IsTrainerSlideInitialized(slideId);
+}
+
static bool32 ShouldRunTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 battler, enum TrainerSlideType slideId)
{
if (!IsTrainerSlideInitialized(slideId))
```
```diff
case TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT:
shouldRun = ShouldRunTrainerSlidePlayerLandsFirstCriticalHit(slideId);
break;
+ case TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT:
+ shouldRun = ShouldRunTrainerSlideEnemyLandsFirstCriticalHit(slideId);
+ break;
case TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT:
shouldRun = ShouldRunTrainerSlidePlayerLandsFirstSuperEffectiveHit(battler, slideId);
break;
```
The function that determines if a Slide should play has different function for most Slides. We need to check if this Slide was initialized by a critical hit previously, so a function is created here. This function and the Id and then added to the switch statement in `ShouldDoTrainerSlide`.
```diff
InitalizeTrainerSlide(slideId);
}
+void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32 target)
+{
+ enum TrainerSlideType slideId = TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT;
+
+ if (IsSlideInitalizedOrPlayed(slideId))
+ return;
+
+ if (GetBattlerSide(target) == B_SIDE_OPPONENT)
+ return;
+
+ InitalizeTrainerSlide(slideId);
+}
+
```
The function to check if this slide SHOULD be initalized is added to the bottom of this file.
### `src/battle_main.c`
```diff
BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT)))
BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
+ else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT)))
+ BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT)))
BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_PLAYER_LANDS_FIRST_STAB_MOVE)))
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
```
In `BattleTurnPassed`, most Trainer Slides are checked to see if they should run, so our new call is added here.
### `src/battle_script_commands.c`
```diff
{
PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker);
+ TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(gBattlerTarget);
TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(gBattlerTarget);
gBattleCommunication[MSG_DISPLAY] = 1;
```
The actual usage of `TryInitializeTrainerSlideEnemyLandsFirstCriticalHit` is added and is checked whenever a critical hit is scored.
### `test/battle/trainer_slides.c`
```diff
}
}
+SINGLE_BATTLE_TEST("Trainer Slide: Enemy Lands First Critical Hit")
+{
+ gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT;
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_LASER_FOCUS) == EFFECT_LASER_FOCUS);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_LASER_FOCUS); }
+ TURN { MOVE(opponent, MOVE_TACKLE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LASER_FOCUS, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
+ MESSAGE("A critical hit!");
+ MESSAGE("This message plays after the enemy lands their first critical hit.{PAUSE_UNTIL_PRESS}");
+ }
+}
+
SINGLE_BATTLE_TEST("Trainer Slide: Player Lands First STAB Hit")
{
gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_PLAYER_LANDS_FIRST_STAB_MOVE;
diff --git a/test/battle/trainer_slides.h b/test/battle/trainer_slides.h
```
### `test/battle/trainer_slides.h`
```diff
[TRAINER_SLIDE_PLAYER_LANDS_FIRST_CRITICAL_HIT] = COMPOUND_STRING("This message plays after the player lands their first critical hit.{PAUSE_UNTIL_PRESS}"),
},
+ [TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT] =
+ {
+ [TRAINER_SLIDE_ENEMY_LANDS_FIRST_CRITICAL_HIT] = COMPOUND_STRING("This message plays after the enemy lands their first critical hit.{PAUSE_UNTIL_PRESS}"),
+ },
[TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT] =
{
[TRAINER_SLIDE_PLAYER_LANDS_FIRST_SUPER_EFFECTIVE_HIT] = COMPOUND_STRING("This message plays after the player lands their first super effective hit.{PAUSE_UNTIL_PRESS}"),
```
Tests are added to make sure the new Trainer Slide works. A test is added to the c file, and the trainer to run the entry in the test is added to `sTestTrainerSlides`.

View File

@ -32,7 +32,7 @@ This can be translated to an automated test as follows:
```
ASSUMPTIONS
{
ASSUME(gMovesInfo[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE);
ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_PARALYZE);
}
SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis")
@ -78,7 +78,7 @@ This can again be translated as follows:
SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_STUN_SPORE].powderMove);
ASSUME(IsPowderMove(MOVE_STUN_SPORE));
ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS);
PLAYER(SPECIES_ODDISH); // 1.
OPPONENT(SPECIES_ODDISH); // 2.
@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage)
PARAMETRIZE { raiseAttack = FALSE; }
PARAMETRIZE { raiseAttack = TRUE; }
GIVEN {
ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL);
ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@ -146,7 +146,7 @@ The overworld is not available, so it is only possible to test commands which do
### `ASSUME`
`ASSUME(cond)`
Causes the test to be skipped if `cond` is false. Used to document any prerequisites of the test, e.g. to test Burn reducing the Attack of a Pokémon we can observe the damage of a physical attack with and without the burn. To document that this test assumes the attack is physical we can use:
`ASSUME(gMovesInfo[MOVE_WHATEVER].category == DAMAGE_CATEGORY_PHYSICAL);`
`ASSUME(GetMoveCategory(MOVE_WHATEVER) == DAMAGE_CATEGORY_PHYSICAL);`
### `ASSUMPTIONS`
```
@ -159,7 +159,7 @@ Should be placed immediately after any `#includes` and contain any `ASSUME` stat
```
ASSUMPTIONS
{
ASSUME(gMovesInfo[MOVE_POISON_STING].effect == EFFECT_POISON_HIT);
ASSUME(GetMoveEffect(MOVE_POISON_STING) == EFFECT_POISON_HIT);
}
```
@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage)
PARAMETRIZE { hp = 99; }
PARAMETRIZE { hp = 33; }
GIVEN {
ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE);
ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@ -233,7 +233,7 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn")
All `BattleRandom` calls involving tag will return the same number, so this cannot be used to have two moves independently hit or miss, for example.
If the tag is not provided, runs the test 50 times and computes an approximate pass ratio.
`PASSES_RANDOMLY(gMovesInfo[move].accuracy, 100);`
`PASSES_RANDOMLY(GetMoveAccuracy(move), 100);`
Note that this mode of PASSES_RANDOMLY makes the tests run very slowly and should be avoided where possible. If the mechanic you are testing is missing its tag, you should add it.
### `GIVEN`

View File

@ -1,178 +0,0 @@
# How to add a new trainer class
## Content
* [Quick Summary](#quick-summary)
* [The Graphics](#the-graphics)
* [1. Edit the sprites](#2-edit-the-sprites)
* [2. Register the sprites](#2-register-the-sprites)
* [3. The Animation](#2-the-animation)
* [4. Connecting pictures to the data](#2-connecting-pictures-to-the-data)
* [The Data](#the-data)
* [5. Defining the trainer class](#2-defining-the-trainer-class)
* [Usage](#usage)
## Quick Summary
(Page contains out of date information, [new instructions for Sprites here](https://github.com/rh-hideout/pokeemerald-expansion/pull/3597).)
If you've done this before and just need a quick lookup, here's what files you need:
1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics)
2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes)
3. Register sprites to [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h)
4. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h)
5. Add animation to: [src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h)
6. Add the trainer to all three structs in: [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h)
7. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h)
## The Graphics
### 1. Edit the sprites
We will start with a graphic that we want to use for our new trainer class. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder:
[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics)
**Remember to limit yourself to 16 colors including transparency in the first slot!**
Export the pallette and place into the same folder.
### 2. Register the sprites
Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. First, create constants for the file paths.
Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h):
```diff
extern const u32 gTrainerFrontPic_RubySapphireMay[];
+ extern const u32 gTrainerFrontPic_myTrainerClass[];
extern const u32 gTrainerPalette_Hiker[];
...
...
extern const u32 gTrainerPalette_RubySapphireMay[];
+ extern const u32 gTrainerPalette_myTrainerClass[];
extern const u8 gTrainerBackPic_Brendan[];
```
Now link the graphic files.
[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h):
```diff
const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz");
const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire_may_front_pic.4bpp.lz");
const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz");
+ const u32 gTrainerFrontPic_Sheriff[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass_front_pic.4bpp.lz");
+ const u32 gTrainerPalette_Sheriff[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz");
const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan_back_pic.4
```
### 3. The Animation
Add the Animation of the trainer here:
[src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h)
The trainers don't really move, but in theory they could, it's just that the animation defined for each trainer just shows one frame:
```diff
static const union AnimCmd *const sAnims_RubySapphireMay[] ={
sAnim_GeneralFrame0,
};
+ static const union AnimCmd *const sAnims_MyTrainerClass[] ={
+ sAnim_GeneralFrame0,
+ };
const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[] =
{
[TRAINER_PIC_HIKER] = sAnims_Hiker,
[TRAINER_PIC_AQUA_GRUNT_M] = sAnims_AquaGruntM,
[TRAINER_PIC_POKEMON_BREEDER_F] = sAnims_PokemonBreederF,
...
...
[TRAINER_PIC_RS_BRENDAN] = sAnims_RubySapphireBrendan,
[TRAINER_PIC_RS_MAY] = sAnims_RubySapphireMay,
+ [TRAINER_PIC_MYTRAINERCLASS] = sAnims_MyTrainerClass,
};
```
### 4. Connecting the Pictures to the Data
The last few things we have to do is prepare the graphics for usage. In [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) you'll find the structs, we need to add the trainer to all of these. You can just copy the last trainer type defined and edit it, but as far as I understand, these are what they do:
1. gTrainerFrontPicCoords: Pretty self explanatory. Coordinates like size and offset on the y-axis to position the sprite on screen.
2. gTrainerFrontPicTable: Connects the trainer type with the image we defined earlier.
3. gTrainerFrontPicPaletteTable: Connects the trainer type with the palette we defined earlier.
So, finally, it needs to look like this:
```diff
const struct MonCoords gTrainerFrontPicCoords[] =
{
[TRAINER_PIC_HIKER] = {.size = 8, .y_offset = 1},
[TRAINER_PIC_AQUA_GRUNT_M] = {.size = 8, .y_offset = 1},
...
...
[TRAINER_PIC_RS_BRENDAN] = {.size = 8, .y_offset = 1},
[TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1},
+ [TRAINER_PIC_MYTRAINERCLASS] = {.size = 8, .y_offset = 1},
};
#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic}
const struct CompressedSpriteSheet gTrainerFrontPicTable[] =
{
TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800),
TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800),
TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800),
TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800),
...
...
TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800),
TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800),
+ TRAINER_SPRITE(MYTRAINERCLASS, gTrainerFrontPic_MyTrainerClass, 0x800),
};
#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic}
const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] =
{
TRAINER_PAL(HIKER, gTrainerPalette_Hiker),
TRAINER_PAL(AQUA_GRUNT_M, gTrainerPalette_AquaGruntM),
TRAINER_PAL(POKEMON_BREEDER_F, gTrainerPalette_PokemonBreederF),
...
...
TRAINER_PAL(RS_BRENDAN, gTrainerPalette_RubySapphireBrendan),
TRAINER_PAL(RS_MAY, gTrainerPalette_RubySapphireMay),
+ TRAINER_PAL(MYTRAINERCLASS, gTrainerPalette_MyTrainerClass),
};
```
### The Data
#### 5. Defining the trainer class
Finally, let's bring it all together by defining our new trainer class in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h):
```diff
#define TRAINER_PIC_RS_MAY 92
+ #define TRAINER_PIC_MYTRAINERCLASS 93
#define TRAINER_BACK_PIC_BRENDAN 0
#define TRAINER_BACK_PIC_MAY 1
```
Remember to count the number next to the trainer class up by one!
## Usage
You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example:
```diff
[TRAINER_BRENDAN_PLACEHOLDER] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
- .trainerPic = TRAINER_PIC_RS_BRENDAN,
+ .trainerPic = TRAINER_PIC_MYTRAINERCLASS,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
.partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder),
.party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder},
},
```

View File

@ -0,0 +1,122 @@
# How to use Trainer Party Pools
Trainer Party Pools (TPP) is a way to introduce a bit of unpredictability to trainer battles by allowing trainer to generate parties from pools defined by the user.
The maximum number of mons that can be in a single trainer's pool is 255.
## Turning on TPP with `trainer.sparty`
To use TPP with `trainers.party`, all that's needed is to define a `Party Size` that's smaller than than the number of defined mons for the trainer.
## Turning on TPP with `trainers.h`
To use TPP with `trainers.h`, the trainer need to have the `.poolSize` field set to a value that's larger than the `.partySize` and equal to the number of mons defined in the trainer.
## How the pool works
When generating a party for a trainer with a pool, the party is picked from the pool randomly according to rules set for the pool and tags assigned to individual mons in the pool.
### Pool Rules
Pool rules are defined in `src/data/battle_pool_rules.h`. To begin with some default pools are defined, `defaultPoolRules` which any trainer that doesn't otherwise have a specified pool ruleset uses, and some custom rules for common scenarios.
- `POOL_RULESET_BASIC`, a ruleset that will pick a mon from the pool with the tag `MON_POOL_TAG_LEAD` if possible to put in the first slot and `MON_POOL_TAG_ACE` in the last slot, and not pick mons with those tags for any other position.
- `POOL_RULESET_DOUBLES`, a ruleset that will pick up to two mons from the pool with the tag `MON_POOL_TAG_LEAD` if possible to put in the first two slots and `MON_POOL_TAG_ACE` in the last two slots, and not pick mons with those tags for any other position.
- `POOL_RULESET_WEATHER_SINGLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_WEATHER_SETTER` if possible, and at least one mon with the tag `MON_POOL_TAG_WEATHER_ABUSER` if possible, in addition to the same conditions as `POOL_RULESET_BASIC`.
- `POOL_RULESET_WEATHER_DOUBLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_WEATHER_SETTER` if possible, and at least one mon with the tag `MON_POOL_TAG_WEATHER_ABUSER` if possible, in addition to the same conditions as `POOL_RULESET_DOUBLES`.
- `POOL_RULESET_SUPPORT_DOUBLES`, a ruleset that will pick at most one mon with the tag `MON_POOL_TAG_SUPPORT` if possible, in addition to the same conditions as `POOL_RULESET_DOUBLES`.
All these pools also have the options `.speciesClause`, `.excludeForms`, `.itemClause` and `.itemClauseExclusions` set to the values defined in `include/config/battle.h` under `B_POOL_RULE_<rule>`.
- `.speciesClause` if set to `TRUE` means that the same exact species as defined by `.species` can't be picked twice for the party from the pool.
- `.excludeForms` if set to `FALSE` means that the same exact species as defined by NetDex number can't be picked twice for the party from the pool.
- `.itemClause` if set to `TRUE` means that pokemon with the same held item can't be picked twice for the party from the pool.
- `.itemClauseExclusions` if set to `TRUE` means that multiple pokemon with the same item can be picked for the party if the item is listed in `poolItemClauseExclusions`. By default `ITEM_ORAN_BERRY` and `ITEM_SITRUS_BERRY` are the only items in the list of exclusions.
Individual tags can have rules which change how they're included.
By setting the `.tagMaxMembers[POOL_TAG_<tag>]` field to a number, only that many mons with that tag will at max be part of the party, or if set to `POOL_MEMBER_COUNT_NONE` no mons with this tag will be included, and if set to `POOL_MEMBER_COUNT_UNLIMITED` no restrictions on the number of mons with the tag will apply.
By setting `.tagRequired[POOL_TAG_<tag>]` option field to `TRUE`, this tag will be picked before any tags that are not required, after the tag has been picked for the pool it will be set to `FALSE` for that tag.
The tags `Lead` and `Ace` has special handling where they will be picked for the first or last party position respectively.
### Tags
There are currently 8 tags specified in the TPP implementation, `Lead`, `Ace`, `Weather Setter`, `Weather Abuser`, `Support`, `Tag 5`, `Tag 6` and `Tag 7`.
If using `trainers.party`, these tags are applied to mons with the field `Tags: `, separated by `/`. Example `Tags: Lead / Weather Setter`
If using `trainers.h`, these tags are applied to mons with the field `.tags`, separated by `|`. Example: `.tags = MON_POOL_TAG_LEAD | MON_POOL_TAG_WEATHER_SETTER`
Pokemon can have up to 32 different tags, but anything beyond the 8 initial tags has to be implemented. The numbered tags can be renamed too to better signify their purpose for developers.
## Trainer options
A few more trainer options are introduced in order to further customize how the pool picking process works.
- `Pool Pick Functions` (`.poolPickIndex`) controls which functons are used to pick mons from the pool, they're split into Lead, Ace, and Other.
By default, only `Default<position>PickFunction` and `PickLowest` are implemented. Must be an `enum` value in `enum PoolPickFunctions`.
- `Pool Prune` (`.poolPruneIndex`) controls if members in the pool should be removed before party members are picked from the pool.
By default, only `POOL_PRUNE_NONE`, which doesn't remove anything from the pool, and `POOL_PRUNE_TEST`, which removes Wobbuffet from the pool, are implemented. Must be an `enum` value in `enum PoolPruneOptions`.
## Example pool
```
=== TRAINER_TIANA ===
Name: TIANA
Class: Lass
Pic: Lass
Gender: Female
Music: Female
Double Battle: Yes
AI: Check Bad Move
Party Size: 4
Pool Rules: Weather Doubles
Pool Pick Index: Default
Zigzagoon
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Shroomish
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Psyduck
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Shellder
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Mew
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Tags: Ace
Giratina
Level: 4
IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
Tags: Ace
Vulpix
Ability: Drought
Level: 4
Tags: Lead / Weather Setter
Torkoal
Ability: Drought
Level: 4
Tags: Lead / Weather Setter
Bulbasaur
Ability: Chlorophyll
Level: 4
Tags: Lead / Weather Abuser
Cherrim
Level: 4
Tags: Lead / Weather Abuser
```
Here Tiana has been given a pool that's set up for a double battle with weather. Using the default pool rule `Weather Doubles` it will only pick one of each of the weather setters and abusers which Tiana will lead with. Tiana will also pick either Mew or Giratina as her Ace mon, and the last slot will be filled with one of Zigzagoon, Shroomish, Psyduck or Shellder.
## Pool settings
If no pool rule is specified in the trainer, the default rules will be used, which sets rules according to some defaults from `include/config/battle.h`.
This file also has settings for other pool options.
- `B_POOL_SETTING_CONSISTENT_RNG`, `TRUE` or `FALSE`, the party generated will always be the same on a particular save (RNG dependant on trainerId and encountered trainer).
- `B_POOL_SETTING_USE_FIXED_SEED`, `TRUE` or `FALSE`, the party generated will always be the same on a particular compiled ROM (RNG dependant on a chosen seed and encountered trainer).
- `B_POOL_SETTING_FIXED_SEED`, seed to use for fixed seed, does nothing if `B_POOL_SETTING_USE_FIXED_SEED` is `FALSE`.

View File

@ -0,0 +1,98 @@
# How to add a new trainer pic
## Content
* [Quick Summary](#quick-summary)
* [The Graphics](#the-graphics)
* [1. Edit the sprites](#2-edit-the-sprites)
* [2. Register the sprites](#2-register-the-sprites)
* [3. Connecting pictures to the data](#2-connecting-pictures-to-the-data)
* [The Data](#the-data)
* [4. Defining the trainer pic](#2-defining-the-trainer-pic)
* [Usage](#usage)
## Quick Summary
If you've done this before and just need a quick lookup, here's what files you need:
1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics)
2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes)
3. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h)
4. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h)
## The Graphics
### 1. Edit the sprites
We will start with a graphic that we want to use for our new trainer pic. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder:
[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics)
**Remember to limit yourself to 16 colors including transparency in the first slot!**
Export the palette and place into the same folder.
### 2. Register the sprites
Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them by linking the graphic files.
[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h):
```diff
const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz");
const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire.4bpp.lz");
const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz");
+ const u32 gTrainerFrontPic_myTrainerClass[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass.4bpp.lz");
+ const u32 gTrainerPalette_myTrainerClass[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz");
const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan.4bpp");
```
### 3. Connecting the Pictures to the Data
The last few things we have to do is prepare the graphics for usage. In [src/data/graphics/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) you'll find the gTrainerSprites struct, we need to add the trainer to this. You can just copy the last trainer type defined and edit it, but this is what it does: Connects the trainer type with the image we defined earlier.
So, finally, it needs to look like this:
```diff
define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \
[trainerPic] = \
{ \
.frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \
.palette = {paletteFile, trainerPic}, \
.mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \
.mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \
}
const struct TrainerSprite gTrainerSprites[] =
{
TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker),
TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM),
...
TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay),
TRAINER_SPRITE(TRAINER_PIC_MY_TRAINER_CLASS, gTrainerFrontPic_myTrainerClass, gTrainerPalette_myTrainerClass)
};
```
### The Data
#### 4. Defining the trainer pic
Finally, let's bring it all together by defining our new trainer pic in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h):
```diff
#define TRAINER_PIC_RS_MAY 92
+ #define TRAINER_PIC_MY_TRAINER_CLASS 93
#define TRAINER_BACK_PIC_BRENDAN 0
#define TRAINER_BACK_PIC_MAY 1
```
Remember to count the number next to the trainer pic up by one!
## Usage
You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example:
```diff
[TRAINER_BRENDAN_PLACEHOLDER] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
- .trainerPic = TRAINER_PIC_RS_BRENDAN,
+ .trainerPic = TRAINER_PIC_MY_TRAINER_CLASS,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
.partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder),
.party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder},
},
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
graphics/dexnav/cursor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

19
graphics/dexnav/gui.pal Normal file
View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
0 0 0
255 255 255
217 73 73
4 4 4
1 81 113
1 121 193
119 177 75
93 97 101
91 179 211
153 32 32
111 141 81
173 173 173
187 217 167
75 147 189
177 219 235
105 22 22

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
graphics/dexnav/hidden.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

BIN
graphics/dexnav/no_data.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

BIN
graphics/dexnav/star.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

BIN
graphics/dexnav/vision.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
255 1 255
159 122 85
207 189 157
199 181 149
114 88 61
132 101 70
199 173 141
225 209 193
189 165 133
181 149 115
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
48 72 56
48 120 64
50 86 102
80 80 80
122 122 122
48 152 72
120 120 152
0 0 0
160 168 200
192 136 208
184 192 208
156 233 255
216 216 232
201 255 255
232 232 248

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
41 66 79
26 113 141
50 86 102
80 80 80
122 122 122
16 141 183
120 120 152
0 0 0
160 168 200
192 136 208
184 192 208
156 233 255
216 216 232
201 255 255
232 232 248

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
40 48 64
64 72 88
64 72 96
128 32 32
96 104 128
120 128 160
0 0 0
176 184 200
208 216 232
232 232 248
96 104 128
120 128 160
40 48 64
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
72 32 40
124 38 38
64 72 96
128 32 32
192 56 56
240 88 88
0 0 0
176 184 200
208 216 232
232 232 248
96 104 128
120 128 160
40 48 64
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
62 62 62
96 16 16
92 92 92
72 64 96
122 122 122
128 88 128
128 112 176
0 0 0
144 136 200
184 136 192
176 176 224
200 200 208
232 232 248
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
62 62 62
96 16 16
92 92 92
72 64 96
122 122 122
79 76 138
169 112 176
0 0 0
186 136 200
112 116 222
208 176 224
200 200 208
232 232 248
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
48 40 56
72 64 80
104 96 112
97 97 120
97 108 120
208 88 88
64 96 128
104 144 200
128 128 144
153 153 174
176 176 192
0 0 0
208 208 216
232 232 248
104 96 112

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
16 56 48
32 88 88
48 128 120
120 110 97
120 99 97
208 88 88
64 96 128
208 88 88
64 167 157
174 164 153
192 185 176
0 0 0
216 212 208
248 241 232
108 105 100

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
37 37 40
71 42 23
111 79 63
93 93 99
144 120 56
201 65 59
144 109 96
216 168 48
248 216 96
176 176 184
176 176 188
0 0 0
232 232 248
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
37 37 40
71 42 23
142 72 100
93 93 99
144 120 56
201 65 59
193 103 130
216 168 48
248 216 96
176 176 184
176 176 188
0 0 0
232 232 248
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
0 32 96
0 64 104
72 80 104
40 104 152
40 128 168
112 128 144
64 168 216
96 192 232
0 0 0
168 176 192
208 224 232
248 248 248
0 0 0
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
77 96 16
104 95 18
72 80 104
151 146 55
167 149 58
112 128 144
215 194 85
231 209 115
0 0 0
168 176 192
208 224 232
248 248 248
0 0 0
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
104 88 8
48 56 64
80 96 112
128 24 8
184 56 16
240 88 80
152 128 24
200 160 32
240 208 88
112 128 152
136 152 176
184 200 224
0 0 0
232 232 248
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
98 43 91
48 56 64
80 96 112
8 62 128
16 74 184
80 165 240
147 75 141
187 98 185
226 161 225
112 128 152
136 152 176
184 200 224
0 0 0
232 232 248
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
112 64 72
128 88 24
184 144 24
216 192 72
226 115 139
209 165 186
0 0 0
248 224 136
240 202 222
248 228 238
248 248 248
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
112 64 104
128 88 24
184 144 24
216 192 72
184 144 24
209 165 186
0 0 0
248 224 136
233 202 240
245 228 248
248 248 248
0 0 0
0 0 0
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
44 36 58
72 56 16
120 96 24
71 58 87
100 87 115
160 128 40
200 160 48
178 90 154
135 115 144
213 106 188
243 120 219
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
32 59 58
72 56 16
120 96 24
52 85 89
81 114 117
160 128 40
200 160 48
178 90 154
109 135 146
213 106 188
243 120 219
0 0 0
0 0 0
0 0 0
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
51 49 47
51 50 47
104 80 40
80 80 80
192 40 64
183 143 49
245 202 48
144 144 144
154 152 145
245 231 171
0 0 0
192 192 192
210 220 221
232 232 248
255 255 255

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
51 49 47
51 50 47
69 104 42
80 80 80
44 81 173
100 183 54
107 245 56
144 144 144
154 152 145
245 231 171
0 0 0
192 192 192
210 220 221
232 232 248
255 255 255

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
72 40 8
48 56 88
80 80 80
160 8 48
128 80 8
176 112 24
152 136 80
200 168 80
240 200 80
64 120 216
112 152 224
136 136 136
184 184 184
0 0 0
232 232 248

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
56 67 11
66 56 79
80 80 80
160 8 48
86 118 14
128 165 32
152 136 80
200 168 80
240 200 80
120 96 184
154 135 200
136 136 136
184 184 184
0 0 0
232 232 248

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
97 21 7
114 42 38
78 78 78
112 88 64
176 38 38
219 60 53
238 122 36
237 106 99
176 128 80
208 184 88
248 208 80
32 96 184
240 224 152
255 242 183
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
97 48 7
114 42 38
78 78 78
112 88 64
176 80 38
219 110 53
238 122 36
237 148 99
176 128 80
208 184 88
248 208 80
32 96 184
240 224 152
255 242 183
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
32 37 41
88 32 32
48 56 64
96 85 64
88 96 96
178 53 27
213 77 26
227 111 51
128 112 80
217 132 42
235 192 61
160 152 120
192 184 152
0 0 0
248 248 248

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
32 37 41
57 57 62
48 56 64
96 85 64
88 96 96
96 94 118
213 77 26
142 134 159
128 112 80
217 132 42
235 192 61
160 152 120
192 184 152
0 0 0
248 248 248

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
30 31 36
80 29 52
126 40 64
74 78 90
91 94 103
107 109 115
40 96 142
74 132 189
57 173 255
126 178 213
160 160 160
0 0 0
149 209 241
165 231 255
216 216 248

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
136 245 178
30 31 36
80 29 52
126 40 64
45 83 75
62 116 105
71 136 123
142 40 54
189 74 84
57 173 255
126 178 213
160 160 160
0 0 0
149 209 241
165 231 255
216 216 248

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
96 48 0
96 64 0
40 72 88
192 16 32
144 64 32
200 88 40
248 120 56
248 184 16
216 168 48
240 208 112
64 128 128
160 160 160
0 0 0
216 216 248
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
53 34 65
77 76 80
118 33 45
192 16 32
86 72 106
115 96 142
146 122 178
248 184 16
163 161 167
196 194 199
160 61 70
160 160 160
0 0 0
216 216 248
0 0 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
45 46 58
75 77 101
167 41 91
198 152 98
116 120 150
217 95 170
182 166 178
227 199 137
242 154 218
0 0 0
225 213 222
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -0,0 +1,19 @@
JASC-PAL
0100
16
179 226 255
45 46 58
144 36 77
161 42 109
198 152 98
116 120 150
217 100 143
211 127 159
227 199 137
243 148 184
0 0 0
255 177 207
0 0 0
0 0 0
0 0 0
0 0 0

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