Merge branch 'upcoming' into upcoming-to-master-merge
@ -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
|
||||
|
||||
10
.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
vendored
@ -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
|
||||
|
||||
10
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
@ -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
@ -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)
|
||||
3
Makefile
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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!$"
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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::
|
||||
|
||||
@ -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
@ -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!$"
|
||||
@ -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
|
||||
|
||||
@ -20,3 +20,9 @@ EventScript_GotoTrainerScript::
|
||||
gotobeatenscript
|
||||
releaseall
|
||||
end
|
||||
|
||||
EventScript_ObjectApproachPlayer::
|
||||
lock
|
||||
special DoTrainerApproach
|
||||
waitstate
|
||||
gotonative LoadTrainerObjectScript
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
|
||||
385
docs/changelogs/1.11.x/1.11.0.md
Normal 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.-->
|
||||
@ -29,12 +29,14 @@ This section lists all of expansion’s 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.
|
||||
|
||||
395
docs/tutorials/how_to_code_entry.md
Normal 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.
|
||||
205
docs/tutorials/how_to_new_trainer_slide.md
Normal 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`.
|
||||
@ -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`
|
||||
|
||||
@ -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},
|
||||
},
|
||||
```
|
||||
122
docs/tutorials/how_to_trainer_party_pool.md
Normal 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`.
|
||||
98
docs/tutorials/how_to_trainer_pic.md
Normal 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},
|
||||
},
|
||||
```
|
||||
BIN
graphics/battle_anims/sprites/salt_particle.png
Normal file
|
After Width: | Height: | Size: 239 B |
BIN
graphics/battle_anims/sprites/starstorm_beam.png
Normal file
|
After Width: | Height: | Size: 300 B |
BIN
graphics/dexnav/captured_all.png
Normal file
|
After Width: | Height: | Size: 157 B |
BIN
graphics/dexnav/cursor.png
Normal file
|
After Width: | Height: | Size: 172 B |
19
graphics/dexnav/gui.pal
Normal 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
|
||||
BIN
graphics/dexnav/gui_tilemap.bin
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
graphics/dexnav/gui_tiles.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
graphics/dexnav/hidden.png
Normal file
|
After Width: | Height: | Size: 178 B |
BIN
graphics/dexnav/hidden_search.png
Normal file
|
After Width: | Height: | Size: 359 B |
BIN
graphics/dexnav/no_data.png
Normal file
|
After Width: | Height: | Size: 182 B |
BIN
graphics/dexnav/owned_icon.png
Normal file
|
After Width: | Height: | Size: 159 B |
BIN
graphics/dexnav/star.png
Normal file
|
After Width: | Height: | Size: 170 B |
BIN
graphics/dexnav/vision.png
Normal file
|
After Width: | Height: | Size: 242 B |
19
graphics/field_effects/palettes/cave_dust.pal
Normal 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
|
||||
BIN
graphics/field_effects/pics/cave_dust.png
Normal file
|
After Width: | Height: | Size: 409 B |
BIN
graphics/pokemon/abomasnow/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
19
graphics/pokemon/abomasnow/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/abomasnow/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/absol/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
19
graphics/pokemon/absol/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/absol/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/aerodactyl/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
19
graphics/pokemon/aerodactyl/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/aerodactyl/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/aggron/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
19
graphics/pokemon/aggron/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/aggron/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/alakazam/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
19
graphics/pokemon/alakazam/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/alakazam/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/altaria/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
19
graphics/pokemon/altaria/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/altaria/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/ampharos/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
19
graphics/pokemon/ampharos/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/ampharos/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/audino/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
19
graphics/pokemon/audino/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/audino/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/banette/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
19
graphics/pokemon/banette/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/banette/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/beedrill/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 944 B |
19
graphics/pokemon/beedrill/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/beedrill/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/blastoise/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
19
graphics/pokemon/blastoise/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/blastoise/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/blaziken/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
19
graphics/pokemon/blaziken/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/blaziken/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/camerupt/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
19
graphics/pokemon/camerupt/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/camerupt/mega/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/charizard/mega_x/overworld.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
19
graphics/pokemon/charizard/mega_x/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/charizard/mega_x/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/charizard/mega_y/overworld.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
19
graphics/pokemon/charizard/mega_y/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/charizard/mega_y/overworld_shiny.pal
Normal 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
|
||||
BIN
graphics/pokemon/diancie/mega/overworld.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
19
graphics/pokemon/diancie/mega/overworld_normal.pal
Normal 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
|
||||
19
graphics/pokemon/diancie/mega/overworld_shiny.pal
Normal 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
|
||||