Merge branch 'upcoming' of https://github.com/rh-hideout/pokeemerald-expansion into berryexpansion
This commit is contained in:
commit
418e551960
@ -23,8 +23,9 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.0 (Default)
|
||||
- 1.7.1 (Default)
|
||||
- upcoming (Edge)
|
||||
- 1.7.0
|
||||
- 1.6.2
|
||||
- 1.6.1
|
||||
- 1.6.0
|
||||
|
||||
@ -23,8 +23,9 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.0 (Default)
|
||||
- 1.7.1 (Default)
|
||||
- upcoming (Edge)
|
||||
- 1.7.0
|
||||
- 1.6.2
|
||||
- 1.6.1
|
||||
- 1.6.0
|
||||
|
||||
3
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
3
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
@ -23,8 +23,9 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.7.0 (Default)
|
||||
- 1.7.1 (Default)
|
||||
- upcoming (Edge)
|
||||
- 1.7.0
|
||||
- 1.6.2
|
||||
- 1.6.1
|
||||
- 1.6.0
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
# Pokeemerald-Expansion Changelogs
|
||||
|
||||
## [Version 1.7.1](docs/changelogs/1.7.1.md) - Bugfix Release
|
||||
|
||||
## [Version 1.7.0](docs/changelogs/1.7.0.md) - Feature Release
|
||||
|
||||
## [Version 1.6.2](docs/changelogs/1.6.2.md) - Bugfix release
|
||||
## [Version 1.6.2](docs/changelogs/1.6.2.md) - Bugfix Release
|
||||
|
||||
@ -89,6 +89,7 @@ Some tips before proceeding:
|
||||
|
||||
> If the above command does not work, try the above command but replacing `apt` with `apt-get`.
|
||||
</details>
|
||||
This will install GCC v10 on Ubuntu 22.04. pokeemerald-expansion works with GCC v10, but remote repositories and the RHH Team use GCC v13 for stricter error-checking. If you want to upgrade from v10 to v13, also follow the devkitpro install instructions.
|
||||
|
||||
### Choosing where to store pokeemerald (WSL1)
|
||||
WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pokeemerald within Windows.
|
||||
@ -408,6 +409,8 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
|
||||
> Where *\<folder where pokeemerald is to be stored>* is the path of the folder [where you chose to store pokeemerald](#Choosing-where-to-store-pokeemerald-WSL1). Then run the `git clone` command again.
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><i>Depreciated; installing agbcc is optional since 1.7.0</i>.</summary>
|
||||
2. Install agbcc into pokeemerald. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**:
|
||||
- If agbcc has **not been built before** in the folder where you chose to store pokeemerald, run the following commands to build and install it into pokeemerald:
|
||||
|
||||
@ -445,6 +448,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for
|
||||
```bash
|
||||
cd ..
|
||||
```
|
||||
</details>
|
||||
|
||||
Now you're ready to [build **pokeemerald**](#build-pokeemerald)
|
||||
## Build pokeemerald
|
||||
|
||||
4
Makefile
4
Makefile
@ -473,7 +473,7 @@ endif
|
||||
$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
|
||||
cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld
|
||||
|
||||
LDFLAGS = -Map ../../$(MAP)
|
||||
LDFLAGS = -Map ../../$(MAP) --no-warn-rwx-segments
|
||||
$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall
|
||||
@echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ <objects> <lib>"
|
||||
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat
|
||||
@ -495,7 +495,7 @@ $(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS)
|
||||
$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tools check-tools
|
||||
@echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ <objects> <test-objects> <lib>"
|
||||
@cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB)
|
||||
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
|
||||
$(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) -d0 --silent
|
||||
$(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0"
|
||||
|
||||
ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout)
|
||||
|
||||
@ -7,7 +7,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral
|
||||
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 v1.7.0 https://github.com/rh-hideout/pokeemerald-expansion/
|
||||
Based off RHH's pokeemerald-expansion v1.7.1 https://github.com/rh-hideout/pokeemerald-expansion/
|
||||
```
|
||||
|
||||
## What features are included?
|
||||
@ -166,7 +166,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple
|
||||
|
||||
## **How do I update my version of pokeemerald-expansion?**
|
||||
- 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 expansion/1.7.0`.
|
||||
- Once you have your remote set up, run the command `git pull RHH expansion/1.7.1`.
|
||||
|
||||
### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :)
|
||||
|
||||
|
||||
@ -1566,6 +1566,10 @@
|
||||
callnative BS_TryTriggerStatusForm
|
||||
.endm
|
||||
|
||||
.macro setphotongeysercategory
|
||||
callnative BS_SetPhotonGeyserCategory
|
||||
.endm
|
||||
|
||||
@ various command changed to more readable macros
|
||||
.macro cancelmultiturnmoves battler:req
|
||||
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
|
||||
@ -2134,10 +2138,6 @@
|
||||
.4byte \failInstr
|
||||
.endm
|
||||
|
||||
.macro photongeysercheck battler:req
|
||||
various \battler, VARIOUS_PHOTON_GEYSER_CHECK
|
||||
.endm
|
||||
|
||||
.macro shellsidearmcheck
|
||||
various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK
|
||||
.endm
|
||||
|
||||
@ -1735,6 +1735,38 @@
|
||||
.2byte \quantity
|
||||
.endm
|
||||
|
||||
.macro _dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, shouldSort:req, initialSelected:req, callbacks:req argv:vararg
|
||||
.byte 0xe3
|
||||
.2byte \left
|
||||
.2byte \top
|
||||
.byte \ignoreBPress
|
||||
.byte \maxBeforeScroll
|
||||
.byte \shouldSort
|
||||
.2byte \initialSelected
|
||||
.byte \callbacks
|
||||
.byte (.Ldynmultichoice_\@_2 - .Ldynmultichoice_\@_1) / 4
|
||||
.Ldynmultichoice_\@_1:
|
||||
.4byte \argv
|
||||
.Ldynmultichoice_\@_2:
|
||||
.endm
|
||||
|
||||
@ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made.
|
||||
@ Lists of options are provided in argv.
|
||||
@ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button.
|
||||
.macro dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, initialSelected:req, callbacks:req argv:vararg
|
||||
_dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, FALSE, \initialSelected, \callbacks, \argv
|
||||
.endm
|
||||
|
||||
.macro dynmultipush name:req, id:req
|
||||
.byte 0xe4
|
||||
.4byte \name
|
||||
.2byte \id
|
||||
.endm
|
||||
|
||||
.macro dynmultistack left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, shouldSort:req, initialSelected:req, callbacks:req
|
||||
_dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, \shouldSort, \initialSelected, \callbacks, NULL
|
||||
.endm
|
||||
|
||||
|
||||
@ Supplementary
|
||||
|
||||
|
||||
@ -5389,11 +5389,11 @@ Move_FOUL_PLAY:
|
||||
createsprite gFoulPlayImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1
|
||||
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
|
||||
playsewithpan SE_M_VITAL_THROW SOUND_PAN_TARGET
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0xa, 0x0, 0x0
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0xa, 0x0, 0x0
|
||||
createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0
|
||||
delay 0x8
|
||||
playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0xa, 0x0, 0x0
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0xa, 0x0, 0x0
|
||||
createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_TARGET
|
||||
@ -10409,7 +10409,7 @@ Move_LIGHT_OF_RUIN::
|
||||
delay 0x10
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x1, 0x0, 0x0, 0x0
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x1, 0x0, 0x0, 0x0
|
||||
waitforvisualfinish
|
||||
end
|
||||
LightOfRuinBeam:
|
||||
@ -11147,7 +11147,7 @@ SolarBladeUnleash:
|
||||
loadspritegfx ANIM_TAG_SUNLIGHT @sun rays
|
||||
monbg ANIM_ATTACKER
|
||||
setalpha 13, 3
|
||||
createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 0, 6, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 6, 0x7fff
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 16, 6, 1, 4
|
||||
@ -11164,7 +11164,7 @@ SolarBladeUnleash:
|
||||
delay 0x2
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 6, 0, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, 0x7fff
|
||||
waitforvisualfinish
|
||||
call UnsetPsychicBg
|
||||
clearmonbg ANIM_ATTACKER
|
||||
@ -15389,7 +15389,7 @@ Move_SILK_TRAP::
|
||||
Move_SNOWSCAPE::
|
||||
loadspritegfx ANIM_TAG_SNOWFLAKES
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB(11, 18, 22)
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB(11, 18, 22)
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_CreateSnowflakes, 2, 0, 3, 120
|
||||
createvisualtask AnimTask_CreateSnowflakes, 2, 0, 3, 120
|
||||
@ -15398,7 +15398,7 @@ Move_SNOWSCAPE::
|
||||
playsewithpan SE_M_GUST2, SOUND_PAN_ATTACKER
|
||||
delay 30
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB(11, 18, 22)
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB(11, 18, 22)
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
@ -15560,7 +15560,7 @@ Move_DRAGON_ENERGY::
|
||||
createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 0, 11, RGB(31, 28, 31) @;Pinkish White
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_DETECT, SOUND_PAN_TARGET
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x10, 0x0, 0x2C5E @;Regidrago Reddish Reddish, Purple
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x10, 0x0, 0x2C5E @;Regidrago Reddish Reddish, Purple
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -120, 0, 0, 1 @;Slide off off, screen
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_TARGET
|
||||
@ -16098,7 +16098,7 @@ Move_CHLOROBLAST::
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA,
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
waitbgfadein
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x0, 0x0 @;From Black
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x0, 0x0 @;From Black
|
||||
end
|
||||
ChloroblastShot:
|
||||
createsprite gSpriteTemplate_ChloroblastShot, ANIM_TARGET, 2, 0, 0, 0x19
|
||||
@ -16466,7 +16466,7 @@ Move_CEASELESS_EDGE::
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA,
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x10, 0x0, 0x7FFF @;From White
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x10, 0x0, 0x7FFF @;From White
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
@ -16929,6 +16929,29 @@ ChillyReceptionSnowballs:
|
||||
delay 3
|
||||
return
|
||||
|
||||
Move_BURNING_BULWARK::
|
||||
goto Move_PROTECT
|
||||
|
||||
Move_ALLURING_VOICE::
|
||||
loadspritegfx ANIM_TAG_THIN_RING
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d
|
||||
waitforvisualfinish
|
||||
createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE
|
||||
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1
|
||||
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
|
||||
createvisualtask SoundTask_WaitForCry, 5
|
||||
delay 0xA
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 26, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 26, 1
|
||||
waitforvisualfinish
|
||||
createvisualtask SoundTask_WaitForCry, 0x5
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
Move_TERA_BLAST::
|
||||
Move_AXE_KICK::
|
||||
Move_LAST_RESPECTS::
|
||||
@ -16980,13 +17003,11 @@ Move_IVY_CUDGEL::
|
||||
Move_ELECTRO_SHOT::
|
||||
Move_TERA_STARSTORM::
|
||||
Move_FICKLE_BEAM::
|
||||
Move_BURNING_BULWARK::
|
||||
Move_THUNDERCLAP::
|
||||
Move_MIGHTY_CLEAVE::
|
||||
Move_TACHYON_CUTTER::
|
||||
Move_HARD_PRESS::
|
||||
Move_DRAGON_CHEER::
|
||||
Move_ALLURING_VOICE::
|
||||
Move_TEMPER_FLARE::
|
||||
Move_SUPERCELL_SLAM::
|
||||
Move_PSYCHIC_NOISE::
|
||||
@ -16998,21 +17019,6 @@ Move_MALIGNANT_CHAIN::
|
||||
Move_NONE:
|
||||
Move_MIRROR_MOVE:
|
||||
Move_POUND:
|
||||
Move_833:
|
||||
Move_834:
|
||||
Move_835:
|
||||
Move_836:
|
||||
Move_837:
|
||||
Move_838:
|
||||
Move_839:
|
||||
Move_840:
|
||||
Move_841:
|
||||
Move_842:
|
||||
Move_843:
|
||||
Move_844:
|
||||
Move_845:
|
||||
Move_846:
|
||||
Move_847:
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
monbg ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
@ -19368,7 +19374,7 @@ Move_TELEPORT:
|
||||
call UnsetPsychicBg
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
|
||||
DoubleTeamAnimRet:
|
||||
setalpha 12, 8
|
||||
monbg ANIM_ATK_PARTNER
|
||||
@ -21863,14 +21869,14 @@ Move_DRAGON_RAGE:
|
||||
Move_RAIN_DANCE:
|
||||
loadspritegfx ANIM_TAG_RAIN_DROPS
|
||||
playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120
|
||||
createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120
|
||||
delay 120
|
||||
delay 30
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
@ -23303,7 +23309,7 @@ Move_SUNNY_DAY:
|
||||
loadspritegfx ANIM_TAG_SUNLIGHT
|
||||
monbg ANIM_ATK_PARTNER
|
||||
setalpha 13, 3
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 0, 6, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 6, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
call SunnyDayLightRay
|
||||
@ -23311,7 +23317,7 @@ Move_SUNNY_DAY:
|
||||
call SunnyDayLightRay
|
||||
call SunnyDayLightRay
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 6, 0, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATK_PARTNER
|
||||
blendoff
|
||||
@ -23527,9 +23533,9 @@ Move_HAZE:
|
||||
playsewithpan SE_M_HAZE, 0
|
||||
createvisualtask AnimTask_HazeScrollingFog, 5
|
||||
delay 30
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS, 2, 0, 16, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 16, RGB_BLACK
|
||||
delay 90
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS, 1, 16, 0, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK
|
||||
end
|
||||
|
||||
Move_FIRE_PUNCH:
|
||||
@ -24874,7 +24880,7 @@ Move_MORNING_SUN:
|
||||
loadspritegfx ANIM_TAG_BLUE_STAR
|
||||
createvisualtask AnimTask_MorningSunLightBeam, 5
|
||||
delay 8
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 8, 0, 12, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 8, 0, 12, RGB_WHITE
|
||||
delay 14
|
||||
call MorningSunStar
|
||||
call MorningSunStar
|
||||
@ -24891,7 +24897,7 @@ Move_MORNING_SUN:
|
||||
call MorningSunStar
|
||||
call MorningSunStar
|
||||
call MorningSunStar
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 3, 12, 0, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 12, 0, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
waitsound
|
||||
call HealingEffect
|
||||
@ -27196,13 +27202,13 @@ General_Rain:
|
||||
RainDrops:
|
||||
loadspritegfx ANIM_TAG_RAIN_DROPS
|
||||
playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 0, 4, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60
|
||||
createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60
|
||||
delay 50
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 2, 4, 0, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
return
|
||||
|
||||
@ -27651,14 +27657,14 @@ General_Rainbow::
|
||||
call RainDrops
|
||||
delay 30
|
||||
loadspritegfx ANIM_TAG_SUNLIGHT
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 0, 6, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 6, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0
|
||||
call SunnyDayLightRay
|
||||
call SunnyDayLightRay
|
||||
call SunnyDayLightRay
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS), 1, 6, 0, RGB_WHITE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
delay 30
|
||||
fadetobg BG_RAINBOW
|
||||
@ -28831,7 +28837,7 @@ FinishCorkscrewCrash:
|
||||
call CorkscrewCrashSprayRocks
|
||||
delay 0x6
|
||||
call CorkscrewCrashSprayRocks
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff
|
||||
waitforvisualfinish
|
||||
delay 0x10
|
||||
call ResetFromWhiteScreen
|
||||
@ -28914,7 +28920,7 @@ FinishInfernoOverdrive:
|
||||
call InfernoOverdriveExplosion
|
||||
delay 0x6
|
||||
call InfernoOverdriveExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x001b @ red bg pal
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x001b @ red bg pal
|
||||
delay 0x6
|
||||
call InfernoOverdriveExplosion
|
||||
waitforvisualfinish
|
||||
@ -29273,7 +29279,7 @@ BloomDoomPetalBlast:
|
||||
ResetFromGreenScreen:
|
||||
createvisualtask AnimTask_AllBattlersInvisible, 0xA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x33ED @Everything from green
|
||||
restorebg
|
||||
waitbgfadeout
|
||||
setarg 0x7 0xffff
|
||||
@ -29897,7 +29903,7 @@ DevastatingDrakeUniversalEnding:
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x10, 0x0, 0x40c0 @ fade from purple
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0 @ reset all colours
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x0 @ reset all colours
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA
|
||||
waitforvisualfinish
|
||||
@ -30090,7 +30096,7 @@ Move_BLACK_HOLE_ECLIPSE::
|
||||
unloadspritegfx ANIM_TAG_BLACK_BALL_2
|
||||
loadspritegfx ANIM_TAG_EXPLOSION_2
|
||||
call BlackHoleEclipseExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x7fff @ bg to white pal
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x7fff @ bg to white pal
|
||||
call BlackHoleEclipseExplosion
|
||||
waitforvisualfinish
|
||||
delay 0x18
|
||||
@ -30121,7 +30127,7 @@ BlackHoleEclipseExplosion:
|
||||
ResetFromWhiteScreen:
|
||||
createvisualtask AnimTask_AllBattlersInvisible, 0xA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x7FFF @everything from white
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x7FFF @everything from white
|
||||
restorebg
|
||||
waitbgfadeout
|
||||
setarg 0x7 0xffff
|
||||
@ -30440,10 +30446,10 @@ CatastropikaFinish:
|
||||
call CatastropikaThundering
|
||||
call CatastropikaThundering
|
||||
call CatastropikaThundering
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff @ bg to white
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff @ bg to white
|
||||
call CatastropikaThundering
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff @ bg to white
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x10, 0x0, 0x7fff @ bg to white
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @fix tgt position
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA
|
||||
@ -30647,11 +30653,11 @@ Move_10000000_VOLT_THUNDERBOLT::
|
||||
@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x40, 0x28, 0x1, 0x8003
|
||||
@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x80, 0x28, 0x0, 0x8003
|
||||
@ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x37, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff
|
||||
call TenMillionVoltThunderboltSparkGeyser
|
||||
waitforvisualfinish
|
||||
delay 0x10
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x10, 0x0, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x10, 0x0, 0x7fff
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA
|
||||
waitforvisualfinish
|
||||
@ -30867,10 +30873,10 @@ StokedSparksurferSparkGeyser:
|
||||
|
||||
Move_EXTREME_EVOBOOST::
|
||||
loadspritegfx ANIM_TAG_LEER @leer
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x0000
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x0000
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersInvisible, 0xA
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 3, 0, 0, 0 @Remove fading on everyone
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 3, 0, 0, 0 @Remove fading on everyone
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
|
||||
createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4
|
||||
@ -31079,7 +31085,7 @@ PulverizingPancakeFinish:
|
||||
delay 0x5
|
||||
loadspritegfx ANIM_TAG_EXPLOSION @explosion
|
||||
call PulverizingPancakeExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff @ everything goes white
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff @ everything goes white
|
||||
call PulverizingPancakeExplosion
|
||||
waitforvisualfinish
|
||||
call ResetFromWhiteScreen
|
||||
@ -31172,7 +31178,7 @@ GenesisSupernovaFinish:
|
||||
unloadspritegfx ANIM_TAG_METEOR @superpower
|
||||
call GenesisSupernovaBubbleExplosion
|
||||
call GenesisSupernovaBubbleExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x7fff
|
||||
call GenesisSupernovaBubbleExplosion
|
||||
waitforvisualfinish
|
||||
delay 0x10
|
||||
@ -31655,7 +31661,7 @@ Move_MALICIOUS_MOONSAULT::
|
||||
call MaliciousMoonsaultExplosion
|
||||
delay 0x6
|
||||
call MaliciousMoonsaultExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x1, 0x0, 0x10, 0x001b @ fade all to red
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x001b @ fade all to red
|
||||
delay 0x6
|
||||
call MaliciousMoonsaultExplosion
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10
|
||||
@ -31978,10 +31984,10 @@ SplinteredStormshardsByPlayer:
|
||||
call SplinteredStormshardsExplosionOpponent
|
||||
call SplinteredStormshardsExplosionOpponent
|
||||
SplinteredStormshardsEnd:
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff
|
||||
call SplinteredStormshardsBrownExplode
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x10, 0x0, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x10, 0x0, 0x7fff
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA
|
||||
waitforvisualfinish
|
||||
@ -32227,7 +32233,7 @@ Move_LETS_SNUGGLE_FOREVER::
|
||||
delay 0x8
|
||||
call LetsSnuggleForeverTears
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x0000
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x0000
|
||||
waitforvisualfinish
|
||||
loadspritegfx ANIM_TAG_SPARKLE_4 @detect
|
||||
playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
|
||||
@ -32429,7 +32435,7 @@ ClangorousSoulblazeOnPlayer:
|
||||
createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x60, 0xffe0, ANIM_ATTACKER, 0x1
|
||||
call ClangorousSoulblazePulse_2
|
||||
delay 0x5
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff
|
||||
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
|
||||
createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x65, 0xfff0, ANIM_ATTACKER, 0x1
|
||||
call ClangorousSoulblazePulse_3
|
||||
@ -32500,7 +32506,7 @@ ClangorousSoulblazeOnOpponent:
|
||||
createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x60, 0x45, ANIM_ATTACKER, 0x1
|
||||
call ClangorousSoulblazePulse_2
|
||||
delay 0x5
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff
|
||||
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
|
||||
createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x65, 0x35, ANIM_ATTACKER, 0x1
|
||||
call ClangorousSoulblazePulse_3
|
||||
@ -32654,7 +32660,7 @@ Move_GUARDIAN_OF_ALOLA::
|
||||
call GuardianOfAlolaRockGeyser
|
||||
call GuardianOfAlolaRockGeyser
|
||||
call GuardianOfAlolaRocksTarget
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x3, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x7fff
|
||||
call GuardianOfAlolaRockGeyser
|
||||
call GuardianOfAlolaRockGeyser
|
||||
call GuardianOfAlolaRockGeyser
|
||||
@ -32825,7 +32831,7 @@ SearingSunrazeSmashImpact:
|
||||
call SearingSunrazeSmashInferno
|
||||
call SearingSunrazeSmashInferno
|
||||
call SearingSunrazeSmashInferno
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x4, 0x0, 0x10, 0x001b @full red
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x001b @full red
|
||||
call SearingSunrazeSmashInferno
|
||||
call SearingSunrazeSmashInferno
|
||||
call SearingSunrazeSmashInferno
|
||||
@ -32905,7 +32911,7 @@ SearingSunrazeSmashCharge:
|
||||
ResetFromRedScreen:
|
||||
createvisualtask AnimTask_AllBattlersInvisible, 0xA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x1B @Everything from red
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x1B @Everything from red
|
||||
restorebg
|
||||
waitbgfadeout
|
||||
setarg 0x7 0xffff
|
||||
@ -33035,7 +33041,7 @@ MenacingMoonrazeMaelstromFinish:
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 76, 1
|
||||
call MenacingMoonrazeMaelstromExplosion
|
||||
call MenacingMoonrazeMaelstromExplosion
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x0, 0x10, 0x7fff
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff
|
||||
call MenacingMoonrazeMaelstromExplosion
|
||||
waitforvisualfinish
|
||||
call ResetFromWhiteScreen
|
||||
@ -33182,7 +33188,7 @@ Move_LIGHT_THAT_BURNS_THE_SKY::
|
||||
clearmonbg ANIM_TARGET
|
||||
waitforvisualfinish
|
||||
delay 0x10
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS), 0x0, 0x10, 0x0, 0x43FF
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x0, 0x10, 0x0, 0x43FF
|
||||
restorebg
|
||||
waitbgfadeout
|
||||
end
|
||||
@ -33384,9 +33390,9 @@ Move_SOUL_STEALING_7_STAR_STRIKE::
|
||||
waitforvisualfinish
|
||||
blendoff
|
||||
restorebg
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS), 0x2, 0x10, 0x0, 0x0 @everything from black
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x10, 0x0, 0x0 @everything from black
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS, 0x2, 0x0, 0x0, 0x0
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x0
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_AllBattlersVisible, 0xA
|
||||
waitforvisualfinish
|
||||
|
||||
@ -441,6 +441,8 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RAGE_FIST
|
||||
.4byte BattleScript_EffectDoodle @ EFFECT_DOODLE
|
||||
.4byte BattleScript_EffectFilletAway @ EFFECT_FILLET_AWAY
|
||||
.4byte BattleScript_EffectHit @ EFFECT_IVY_CUDGEL
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FICKLE_BEAM
|
||||
|
||||
BattleScript_EffectFilletAway:
|
||||
attackcanceler
|
||||
@ -1061,12 +1063,25 @@ BattleScript_EffectMeteorBeam::
|
||||
@ DecideTurn
|
||||
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
|
||||
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
|
||||
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_METEOR_BEAM
|
||||
jumpifmove MOVE_METEOR_BEAM, BattleScript_SetStringMeteorBeam
|
||||
jumpifmove MOVE_ELECTRO_SHOT, BattleScript_SetStringElectroShock
|
||||
BattleScript_TryCharging:
|
||||
call BattleScript_FirstChargingTurnMeteorBeam
|
||||
jumpifmove MOVE_METEOR_BEAM, BattleScript_TryMeteorBeam
|
||||
jumpifweatheraffected BS_ATTACKER, B_WEATHER_RAIN, BattleScript_TwoTurnMovesSecondTurn @ Check for move Electro Shot
|
||||
BattleScript_TryMeteorBeam:
|
||||
jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
|
||||
call BattleScript_PowerHerbActivation
|
||||
goto BattleScript_TwoTurnMovesSecondTurn
|
||||
|
||||
BattleScript_SetStringMeteorBeam:
|
||||
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_METEOR_BEAM
|
||||
goto BattleScript_TryCharging
|
||||
|
||||
BattleScript_SetStringElectroShock:
|
||||
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_ELECTRO_SHOCK
|
||||
goto BattleScript_TryCharging
|
||||
|
||||
BattleScript_FirstChargingTurnMeteorBeam::
|
||||
attackcanceler
|
||||
flushtextbox
|
||||
@ -1242,28 +1257,8 @@ BattleScript_EffectShellSideArm:
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectPhotonGeyser:
|
||||
attackcanceler
|
||||
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||
attackstring
|
||||
ppreduce
|
||||
critcalc
|
||||
damagecalc
|
||||
adjustdamage
|
||||
photongeysercheck BS_ATTACKER
|
||||
attackanimation
|
||||
waitanimation
|
||||
effectivenesssound
|
||||
hitanimation BS_TARGET
|
||||
waitstate
|
||||
healthbarupdate BS_TARGET
|
||||
datahpupdate BS_TARGET
|
||||
critmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
resultmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
seteffectwithchance
|
||||
tryfaintmon BS_TARGET
|
||||
goto BattleScript_MoveEnd
|
||||
setphotongeysercategory
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko
|
||||
jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectSpeedUpHit
|
||||
@ -1696,15 +1691,28 @@ BattleScript_StrengthSapTryHp:
|
||||
attackanimation
|
||||
waitanimation
|
||||
BattleScript_StrengthSapHp:
|
||||
jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg
|
||||
jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd
|
||||
jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd
|
||||
BattleScript_StrengthSapManipulateDmg:
|
||||
manipulatedamage DMG_BIG_ROOT
|
||||
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
|
||||
jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapLiquidOoze
|
||||
healthbarupdate BS_ATTACKER
|
||||
datahpupdate BS_ATTACKER
|
||||
printstring STRINGID_PKMNENERGYDRAINED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
BattleScript_StrengthSapLiquidOoze:
|
||||
call BattleScript_AbilityPopUpTarget
|
||||
manipulatedamage DMG_CHANGE_SIGN
|
||||
setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE
|
||||
healthbarupdate BS_ATTACKER
|
||||
datahpupdate BS_ATTACKER
|
||||
printfromtable gAbsorbDrainStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
tryfaintmon BS_ATTACKER
|
||||
goto BattleScript_MoveEnd
|
||||
BattleScript_StrengthSapMustLower:
|
||||
statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd
|
||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_MoveEnd
|
||||
@ -8103,6 +8111,7 @@ BattleScript_IllusionOff::
|
||||
return
|
||||
|
||||
BattleScript_CottonDownActivates::
|
||||
copybyte sSAVED_BATTLER, gBattlerAttacker
|
||||
showabilitypopup BS_TARGET
|
||||
pause B_WAIT_TIME_LONG
|
||||
destroyabilitypopup
|
||||
@ -8127,6 +8136,7 @@ BattleScript_CottonDownLoopIncrement:
|
||||
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop
|
||||
BattleScript_CottonDownReturn:
|
||||
swapattackerwithtarget
|
||||
copybyte gBattlerAttacker, sSAVED_BATTLER
|
||||
return
|
||||
|
||||
BattleScript_AnticipationActivates::
|
||||
|
||||
@ -227,6 +227,8 @@ gScriptCmdTable::
|
||||
.4byte ScrCmd_warpwhitefade @ 0xe0
|
||||
.4byte ScrCmd_buffercontestname @ 0xe1
|
||||
.4byte ScrCmd_bufferitemnameplural @ 0xe2
|
||||
.4byte ScrCmd_dynmultichoice @ 0xe3
|
||||
.4byte ScrCmd_dynmultipush @ 0xe4
|
||||
|
||||
gScriptCmdTableEnd::
|
||||
.4byte ScrCmd_nop
|
||||
|
||||
63
docs/changelogs/1.7.1.md
Normal file
63
docs/changelogs/1.7.1.md
Normal file
@ -0,0 +1,63 @@
|
||||
# Version 1.7.1
|
||||
|
||||
```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 expansion/1.7.1`.
|
||||
```
|
||||
|
||||
## 🧬 General 🧬
|
||||
### Changed
|
||||
* Deprecate agbcc and clarify gcc version usage in install instructions. by @GraionDilach in https://github.com/rh-hideout/pokeemerald-expansion/pull/3788
|
||||
### Fixed
|
||||
* Fix Update Message Saying 1.6.2 by @kaicardenas2 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3759
|
||||
* Fix exp gain when defeating two opponents at once by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/3798
|
||||
* Fix debug menu toggling first flag by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3796
|
||||
|
||||
## 🐉 Pokémon 🐉
|
||||
### Fixed
|
||||
* Fix Maushold-3 and Maushold-4 icons being swapped by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3809
|
||||
* Fixes Minior form change and likely other forms by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3822
|
||||
* Fix P_FAMILY #if blocks for Regigigas and Giratina in front_pic_anims.h by @gabrielcowley in https://github.com/rh-hideout/pokeemerald-expansion/pull/3823
|
||||
|
||||
## 🤹 Moves 🤹
|
||||
### Added
|
||||
* Adds data for The Indigo Disk moves by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3852
|
||||
* Many moves still have placeholder effects.
|
||||
### Fixed
|
||||
* Fix Telekinesis not working by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3763
|
||||
* Fix Ion Deluge interaction with Volt Absorb andLightning Rod by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3764
|
||||
* Fix Max Moves animations by @GraionDilach in https://github.com/rh-hideout/pokeemerald-expansion/pull/3769
|
||||
* Fix Cotton Down overwriting gBattlerAttacker by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/3783
|
||||
* Fix Photon Geyser by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3803 and https://github.com/rh-hideout/pokeemerald-expansion/pull/3807
|
||||
* Fix Metronome crash by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3852
|
||||
|
||||
## 🎭 Abilities 🎭
|
||||
### Fixed
|
||||
* Fix Ice Face ignoring move effects by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3755
|
||||
* Fix Frisk ability pop-up showing wrong battler by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3762
|
||||
* Prankster tests + fixes by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3766
|
||||
|
||||
## 🧶 Items 🧶
|
||||
### Fixed
|
||||
* Fixes Item Metronome damage by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3767
|
||||
* Fix gem boost description + test by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3817
|
||||
|
||||
## 🧹 Cleanup 🧹
|
||||
* Clear BattleScripting struct at the battle start by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3776
|
||||
* Fix Rain Dance and Sunny Day not blending opponent sprite by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3785
|
||||
* Same lists for healing moves by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3787
|
||||
* [battle_controller_player.c] refactor and fix buffer overread by @SBird1337 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3792
|
||||
* Make overworld weather-based terrain setting effects use B_MSG_TERRAIN_SET constants for intro text by @ravepossum in https://github.com/rh-hideout/pokeemerald-expansion/pull/3793
|
||||
* Clear Sky Battle & Dynamax flags upon whiteout by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3830
|
||||
|
||||
## 🧪 Test Runner 🧪
|
||||
### Added
|
||||
* Small test runner improvements by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3761
|
||||
* EXPECT_MUL_EQ thresholds are always at least ±1 by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3768
|
||||
* Added last CannotUseItemsInBattle tests by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3789
|
||||
|
||||
## New Contributors
|
||||
* @kaicardenas2 made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/3759
|
||||
|
||||
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.7.0...expansion/1.7.1
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 424 B After Width: | Height: | Size: 373 B |
Binary file not shown.
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 424 B |
@ -162,6 +162,7 @@ struct ProtectStruct
|
||||
u16 shellTrap:1;
|
||||
u16 maxGuarded:1;
|
||||
u16 silkTrapped:1;
|
||||
u16 burningBulwarked:1;
|
||||
u16 eatMirrorHerb:1;
|
||||
u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy
|
||||
u16 usedAllySwitch:1;
|
||||
@ -680,7 +681,7 @@ struct BattleStruct
|
||||
u16 arenaStartHp[2];
|
||||
u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting.
|
||||
u8 arenaLostOpponentMons;
|
||||
u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon.
|
||||
u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed Pokémon.
|
||||
u8 debugBattler;
|
||||
u8 magnitudeBasePower;
|
||||
u8 presentBasePower;
|
||||
@ -813,6 +814,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER
|
||||
|| gProtectStructs[battlerId].spikyShielded \
|
||||
|| gProtectStructs[battlerId].kingsShielded \
|
||||
|| gProtectStructs[battlerId].banefulBunkered \
|
||||
|| gProtectStructs[battlerId].burningBulwarked \
|
||||
|| gProtectStructs[battlerId].obstructed \
|
||||
|| gProtectStructs[battlerId].silkTrapped)
|
||||
|
||||
@ -953,7 +955,7 @@ struct BattleSpriteData
|
||||
|
||||
struct MonSpritesGfx
|
||||
{
|
||||
void *firstDecompressed; // ptr to the decompressed sprite of the first pokemon
|
||||
void *firstDecompressed; // ptr to the decompressed sprite of the first Pokémon
|
||||
union {
|
||||
void *ptr[MAX_BATTLERS_COUNT];
|
||||
u8 *byte[MAX_BATTLERS_COUNT];
|
||||
|
||||
@ -59,7 +59,6 @@ bool32 ShouldRestoreHpBerry(u32 battlerAtk, u32 item);
|
||||
bool32 IsStatBoostingBerry(u32 item);
|
||||
bool32 CanKnockOffItem(u32 battler, u32 item);
|
||||
bool32 IsAbilityOfRating(u32 ability, s8 rating);
|
||||
s8 GetAbilityRating(u32 ability);
|
||||
bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability);
|
||||
bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move);
|
||||
u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move);
|
||||
@ -118,7 +117,7 @@ bool32 ShouldSetSnow(u32 battler, u32 ability, u32 holdEffect);
|
||||
bool32 ShouldSetRain(u32 battlerAtk, u32 ability, u32 holdEffect);
|
||||
bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, u32 holdEffect);
|
||||
bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 IsHealingMoveEffect(u32 effect);
|
||||
bool32 IsHealingMove(u32 move);
|
||||
bool32 HasHealingEffect(u32 battler);
|
||||
bool32 IsTrappingMoveEffect(u32 effect);
|
||||
bool32 HasTrappingMoveEffect(u32 battler);
|
||||
|
||||
@ -4,12 +4,6 @@
|
||||
#include "pokemon.h"
|
||||
#include "data.h"
|
||||
|
||||
struct TrainerMoney
|
||||
{
|
||||
u8 classId;
|
||||
u8 value;
|
||||
};
|
||||
|
||||
// For displaying a multi battle partner's Pokémon in the party menu
|
||||
struct MultiPartnerMenuPokemon
|
||||
{
|
||||
@ -83,7 +77,6 @@ extern const struct SpriteTemplate gUnusedBattleInitSprite;
|
||||
extern const struct OamData gOamData_BattleSpriteOpponentSide;
|
||||
extern const struct OamData gOamData_BattleSpritePlayerSide;
|
||||
extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1];
|
||||
extern const struct TrainerMoney gTrainerMoneyTable[];
|
||||
|
||||
extern const u8 gStatusConditionString_PoisonJpn[8];
|
||||
extern const u8 gStatusConditionString_SleepJpn[8];
|
||||
|
||||
@ -222,16 +222,6 @@ void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
|
||||
bool32 IsAlly(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 IsGen6ExpShareEnabled(void);
|
||||
|
||||
// Ability checks
|
||||
bool32 IsSkillSwapBannedAbility(u16 ability);
|
||||
bool32 IsRolePlayDoodleBannedAbility(u16 ability);
|
||||
bool32 IsRolePlayDoodleBannedAbilityAttacker(u16 ability);
|
||||
bool32 IsWorrySeedBannedAbility(u16 ability);
|
||||
bool32 IsGastroAcidBannedAbility(u16 ability);
|
||||
bool32 IsEntrainmentBannedAbility(u16 ability);
|
||||
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
|
||||
bool32 IsSimpleBeamBannedAbility(u16 ability);
|
||||
|
||||
bool32 CanSleep(u32 battler);
|
||||
bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget);
|
||||
bool32 CanBeBurned(u32 battler);
|
||||
|
||||
@ -71,6 +71,9 @@
|
||||
#define B_PP_REDUCED_BY_SPITE GEN_LATEST // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
||||
#define B_EXTRAPOLATED_MOVE_FLAGS TRUE // Adds move flags to moves that they don't officially have but would likely have if they were in the latest core series game.
|
||||
|
||||
// Ability data settings
|
||||
#define B_UPDATED_ABILITY_DATA GEN_LATEST // Affects flags
|
||||
|
||||
// Move accuracy settings
|
||||
#define B_TOXIC_NEVER_MISS GEN_LATEST // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss.
|
||||
#define B_MINIMIZE_DMG_ACC GEN_LATEST // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
||||
@ -109,8 +112,8 @@
|
||||
#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost.
|
||||
#define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state.
|
||||
#define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms.
|
||||
#define B_WIDE_GUARD GEN_LATEST // In Gen5 only, Quick Guard has a chance to fail if used consecutively.
|
||||
#define B_QUICK_GUARD GEN_LATEST // In Gen5 only, Wide Guard has a chance to fail if used consecutively.
|
||||
#define B_WIDE_GUARD GEN_LATEST // In Gen5 only, Wide Guard has a chance to fail if used consecutively.
|
||||
#define B_QUICK_GUARD GEN_LATEST // In Gen5 only, Quick Guard has a chance to fail if used consecutively.
|
||||
#define B_IMPRISON GEN_LATEST // In Gen5+, Imprison doesn't fail if opposing pokemon don't have any moves the user knows.
|
||||
#define B_ALLY_SWITCH_FAIL_CHANCE GEN_LATEST // In Gen9, using Ally Switch consecutively decreases the chance of success for each consecutive use.
|
||||
#define B_SKETCH_BANS GEN_LATEST // In Gen9+, Sketch is unable to copy more moves than in previous generations.
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
#define I_VITAMIN_EV_CAP GEN_LATEST // In Gen8+, the Vitamins no longer have a cap of 100 EV per stat.
|
||||
#define I_BERRY_EV_JUMP GEN_LATEST // In Gen4 only, EV-lowering Berries lower a stat's EV to 100 if it is above 100.
|
||||
#define I_GRISEOUS_ORB_FORM_CHANGE GEN_LATEST // In Gen9+, the Griseous Orb no longer changes Giratina's form when held.
|
||||
#define I_GEM_BOOST_POWER GEN_LATEST // In Gen5+, the Gem boost power was reduced from 50% to 30%.
|
||||
#define I_GEM_BOOST_POWER GEN_LATEST // In Gen6+, the Gem boost power was reduced from 50% to 30%.
|
||||
#define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA.
|
||||
#define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, all regular type boosting held items had their power increased from 10% to 20%. eg. Charcoal
|
||||
#define I_SELL_VALUE_FRACTION GEN_LATEST // In Gen9+, items sell for 1/4 of their value instead of 1/2.
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
|
||||
// Other settings
|
||||
#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon
|
||||
#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space.
|
||||
#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs.
|
||||
#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255.
|
||||
#define P_CATCH_CURVE GEN_LATEST // Since Gen 6, the capture rate curve was changed to make pokeballs more effective on lower level pokemon
|
||||
|
||||
@ -594,5 +594,11 @@
|
||||
#define P_FAMILY_MUNKIDORI P_GEN_9_POKEMON
|
||||
#define P_FAMILY_FEZANDIPITI P_GEN_9_POKEMON
|
||||
#define P_FAMILY_OGERPON P_GEN_9_POKEMON
|
||||
#define P_FAMILY_GOUGING_FIRE P_GEN_9_POKEMON
|
||||
#define P_FAMILY_RAGING_BOLT P_GEN_9_POKEMON
|
||||
#define P_FAMILY_IRON_BOULDER P_GEN_9_POKEMON
|
||||
#define P_FAMILY_IRON_CROWN P_GEN_9_POKEMON
|
||||
#define P_FAMILY_TERAPAGOS P_GEN_9_POKEMON
|
||||
#define P_FAMILY_PECHARUNT P_GEN_9_POKEMON
|
||||
|
||||
#endif // GUARD_CONFIG_SPECIES_ENABLED_H
|
||||
|
||||
@ -642,5 +642,8 @@
|
||||
#define F_PAL_ADJACENT (F_PAL_DEF_SIDE | F_PAL_ATK_PARTNER)
|
||||
#define F_PAL_ALL_BUT_DEF (F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER)
|
||||
#define F_PAL_ALL_BUT_ATK_PARTNER (F_PAL_ATTACKER | F_PAL_DEF_SIDE)
|
||||
// The below are only used by AnimTask_BlendBattleAnimPal to get battler sprite palettes by position rather than by role.
|
||||
// It's redundant with F_PAL_BATTLERS, because they're only ever used together to refer to all the battlers at once.
|
||||
#define F_PAL_BATTLERS_2 (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10)
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_ANIM_H
|
||||
|
||||
@ -418,7 +418,9 @@
|
||||
#define EFFECT_RAGE_FIST 412
|
||||
#define EFFECT_DOODLE 413
|
||||
#define EFFECT_FILLET_AWAY 414
|
||||
#define EFFECT_IVY_CUDGEL 415
|
||||
#define EFFECT_FICKLE_BEAM 416
|
||||
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 415
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 417
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
|
||||
@ -16,12 +16,12 @@
|
||||
#define PALACE_DATA_WIN_STREAK 1
|
||||
#define PALACE_DATA_WIN_STREAK_ACTIVE 2
|
||||
|
||||
// Pokemon in Battle Palace have a move "group" type preference depending on nature
|
||||
// Pokémon in Battle Palace have a move "group" type preference depending on nature
|
||||
#define PALACE_MOVE_GROUP_ATTACK 0
|
||||
#define PALACE_MOVE_GROUP_DEFENSE 1
|
||||
#define PALACE_MOVE_GROUP_SUPPORT 2
|
||||
|
||||
// In palace doubles battles pokemon have a target preference depending on nature
|
||||
// In palace doubles battles Pokémon have a target preference depending on nature
|
||||
#define PALACE_TARGET_STRONGER 0
|
||||
#define PALACE_TARGET_WEAKER 1
|
||||
#define PALACE_TARGET_RANDOM 2
|
||||
|
||||
@ -210,37 +210,36 @@
|
||||
#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 118
|
||||
#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 119
|
||||
#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 120
|
||||
#define VARIOUS_PHOTON_GEYSER_CHECK 121
|
||||
#define VARIOUS_SHELL_SIDE_ARM_CHECK 122
|
||||
#define VARIOUS_TRY_NO_RETREAT 123
|
||||
#define VARIOUS_TRY_TAR_SHOT 124
|
||||
#define VARIOUS_CAN_TAR_SHOT_WORK 125
|
||||
#define VARIOUS_CHECK_POLTERGEIST 126
|
||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 127
|
||||
#define VARIOUS_TRY_END_NEUTRALIZING_GAS 128
|
||||
#define VARIOUS_JUMP_IF_UNDER_200 129
|
||||
#define VARIOUS_SET_SKY_DROP 130
|
||||
#define VARIOUS_CLEAR_SKY_DROP 131
|
||||
#define VARIOUS_SKY_DROP_YAWN 132
|
||||
#define VARIOUS_JUMP_IF_HOLD_EFFECT 133
|
||||
#define VARIOUS_CURE_CERTAIN_STATUSES 134
|
||||
#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 135
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 136
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 137
|
||||
#define VARIOUS_SAVE_BATTLER_ITEM 138
|
||||
#define VARIOUS_RESTORE_BATTLER_ITEM 139
|
||||
#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 140
|
||||
#define VARIOUS_SET_BEAK_BLAST 141
|
||||
#define VARIOUS_SWAP_SIDE_STATUSES 142
|
||||
#define VARIOUS_SWAP_STATS 143
|
||||
#define VARIOUS_TEATIME_INVUL 144
|
||||
#define VARIOUS_TEATIME_TARGETS 145
|
||||
#define VARIOUS_TRY_WIND_RIDER_POWER 146
|
||||
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 147
|
||||
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 148
|
||||
#define VARIOUS_STORE_HEALING_WISH 149
|
||||
#define VARIOUS_HIT_SWITCH_TARGET_FAILED 150
|
||||
#define VARIOUS_TRY_REVIVAL_BLESSING 151
|
||||
#define VARIOUS_SHELL_SIDE_ARM_CHECK 121
|
||||
#define VARIOUS_TRY_NO_RETREAT 122
|
||||
#define VARIOUS_TRY_TAR_SHOT 123
|
||||
#define VARIOUS_CAN_TAR_SHOT_WORK 124
|
||||
#define VARIOUS_CHECK_POLTERGEIST 125
|
||||
#define VARIOUS_CUT_1_3_HP_RAISE_STATS 126
|
||||
#define VARIOUS_TRY_END_NEUTRALIZING_GAS 127
|
||||
#define VARIOUS_JUMP_IF_UNDER_200 128
|
||||
#define VARIOUS_SET_SKY_DROP 129
|
||||
#define VARIOUS_CLEAR_SKY_DROP 130
|
||||
#define VARIOUS_SKY_DROP_YAWN 131
|
||||
#define VARIOUS_JUMP_IF_HOLD_EFFECT 132
|
||||
#define VARIOUS_CURE_CERTAIN_STATUSES 133
|
||||
#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 134
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 135
|
||||
#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 136
|
||||
#define VARIOUS_SAVE_BATTLER_ITEM 137
|
||||
#define VARIOUS_RESTORE_BATTLER_ITEM 138
|
||||
#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 139
|
||||
#define VARIOUS_SET_BEAK_BLAST 140
|
||||
#define VARIOUS_SWAP_SIDE_STATUSES 141
|
||||
#define VARIOUS_SWAP_STATS 142
|
||||
#define VARIOUS_TEATIME_INVUL 143
|
||||
#define VARIOUS_TEATIME_TARGETS 144
|
||||
#define VARIOUS_TRY_WIND_RIDER_POWER 145
|
||||
#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 146
|
||||
#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 147
|
||||
#define VARIOUS_STORE_HEALING_WISH 148
|
||||
#define VARIOUS_HIT_SWITCH_TARGET_FAILED 149
|
||||
#define VARIOUS_TRY_REVIVAL_BLESSING 150
|
||||
|
||||
// Cmd_manipulatedamage
|
||||
#define DMG_CHANGE_SIGN 0
|
||||
|
||||
@ -697,8 +697,9 @@
|
||||
#define STRINGID_THESWAMPDISAPPEARED 695
|
||||
#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 696
|
||||
#define STRINGID_HOSPITALITYRESTORATION 697
|
||||
#define STRINGID_ELECTROSHOCKCHARGING 698
|
||||
|
||||
#define BATTLESTRINGS_COUNT 698
|
||||
#define BATTLESTRINGS_COUNT 699
|
||||
|
||||
// This is the string id that gBattleStringsTable starts with.
|
||||
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,
|
||||
@ -756,6 +757,7 @@
|
||||
#define B_MSG_TURN1_FREEZE_SHOCK 10
|
||||
#define B_MSG_TURN1_SKY_DROP 11
|
||||
#define B_MSG_TURN1_METEOR_BEAM 12
|
||||
#define B_MSG_TURN1_ELECTRO_SHOCK 13
|
||||
|
||||
// gMoveWeatherChangeStringIds
|
||||
#define B_MSG_STARTED_RAIN 0
|
||||
|
||||
@ -2025,6 +2025,7 @@ enum {
|
||||
CRY_APPLETUN,
|
||||
#if P_GEN_9_CROSS_EVOS
|
||||
CRY_DIPPLIN,
|
||||
//CRY_HYDRAPPLE,
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
#endif //P_FAMILY_APPLIN
|
||||
#if P_FAMILY_SILICOBRA
|
||||
@ -2112,6 +2113,9 @@ enum {
|
||||
#endif //P_FAMILY_ARCTOVISH
|
||||
#if P_FAMILY_DURALUDON
|
||||
CRY_DURALUDON,
|
||||
#if P_GEN_9_CROSS_EVOS
|
||||
//CRY_ARCHALUDON,
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
#endif //P_FAMILY_DURALUDON
|
||||
#if P_FAMILY_DREEPY
|
||||
CRY_DREEPY,
|
||||
@ -2404,6 +2408,24 @@ enum {
|
||||
#if P_FAMILY_OGERPON
|
||||
CRY_OGERPON,
|
||||
#endif //P_FAMILY_OGERPON
|
||||
#if P_FAMILY_GOUGING_FIRE
|
||||
//CRY_GOUGING_FIRE,
|
||||
#endif //P_FAMILY_GOUGING_FIRE
|
||||
#if P_FAMILY_RAGING_BOLT
|
||||
//CRY_RAGING_BOLT,
|
||||
#endif //P_FAMILY_RAGING_BOLT
|
||||
#if P_FAMILY_IRON_BOULDER
|
||||
//CRY_IRON_BOULDER,
|
||||
#endif //P_FAMILY_IRON_BOULDER
|
||||
#if P_FAMILY_IRON_CROWN
|
||||
//CRY_IRON_CROWN,
|
||||
#endif //P_FAMILY_IRON_CROWN
|
||||
#if P_FAMILY_TERAPAGOS
|
||||
//CRY_TERAPAGOS,
|
||||
#endif //P_FAMILY_TERAPAGOS
|
||||
#if P_FAMILY_PECHARUNT
|
||||
//CRY_PECHARUNT,
|
||||
#endif //P_FAMILY_PECHARUNT
|
||||
CRY_COUNT,
|
||||
};
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
#define EXPANSION_VERSION_MAJOR 1
|
||||
#define EXPANSION_VERSION_MINOR 7
|
||||
#define EXPANSION_VERSION_PATCH 0
|
||||
#define EXPANSION_VERSION_PATCH 1
|
||||
|
||||
// FALSE if this this version of Expansion is not a tagged commit, i.e.
|
||||
// it contains unreleased changes.
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
#define DEPT_STORE_FLOORNUM_11F 14
|
||||
#define DEPT_STORE_FLOORNUM_ROOFTOP 15
|
||||
|
||||
// Lilycove Pokemon Trainer Fan Club
|
||||
// Lilycove Pokémon Trainer Fan Club
|
||||
#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
|
||||
|
||||
#define FANCLUB_GOT_FIRST_FANS 7
|
||||
|
||||
@ -9,9 +9,9 @@
|
||||
|
||||
// Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen.
|
||||
// In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen.
|
||||
// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------".
|
||||
// In Gen 4 only, migrated Pokémon with Diamond, Pearl, or Platinum's ID show as "----------".
|
||||
// Gen 5 and up read Diamond, Pearl, or Platinum's ID as "Sinnoh".
|
||||
// In Gen 4 and up, migrated Pokemon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string.
|
||||
// In Gen 4 and up, migrated Pokémon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string.
|
||||
#define VERSION_SAPPHIRE 1
|
||||
#define VERSION_RUBY 2
|
||||
#define VERSION_EMERALD 3
|
||||
|
||||
@ -160,7 +160,6 @@
|
||||
#define HOLD_EFFECT_COVERT_CLOAK 179
|
||||
#define HOLD_EFFECT_LOADED_DICE 180
|
||||
#define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented.
|
||||
#define HOLD_EFFECT_MASK 183
|
||||
|
||||
// Gen2 hold effect
|
||||
#define HOLD_EFFECT_BERSERK_GENE 184
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_CONSTANTS_POKEDEX_H
|
||||
#define GUARD_CONSTANTS_POKEDEX_H
|
||||
|
||||
// National Pokedex order.
|
||||
// National Pokédex order
|
||||
// These constants are NOT disabled by P_GEN_X_POKEMON to keep pokedex_orders.h clean.
|
||||
enum {
|
||||
NATIONAL_DEX_NONE,
|
||||
@ -1031,21 +1031,21 @@ enum {
|
||||
NATIONAL_DEX_MUNKIDORI,
|
||||
NATIONAL_DEX_FEZANDIPITI,
|
||||
NATIONAL_DEX_OGERPON,
|
||||
NATIONAL_DEX_1018,
|
||||
NATIONAL_DEX_1019,
|
||||
NATIONAL_DEX_1020,
|
||||
NATIONAL_DEX_1021,
|
||||
NATIONAL_DEX_1022,
|
||||
NATIONAL_DEX_1023,
|
||||
NATIONAL_DEX_1024,
|
||||
NATIONAL_DEX_1025,
|
||||
NATIONAL_DEX_ARCHALUDON,
|
||||
NATIONAL_DEX_HYDRAPPLE,
|
||||
NATIONAL_DEX_GOUGING_FIRE,
|
||||
NATIONAL_DEX_RAGING_BOLT,
|
||||
NATIONAL_DEX_IRON_BOULDER,
|
||||
NATIONAL_DEX_IRON_CROWN,
|
||||
NATIONAL_DEX_TERAPAGOS,
|
||||
NATIONAL_DEX_PECHARUNT,
|
||||
};
|
||||
|
||||
#define KANTO_DEX_COUNT NATIONAL_DEX_MEW
|
||||
#define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI
|
||||
|
||||
#if P_GEN_9_POKEMON == TRUE
|
||||
#define NATIONAL_DEX_COUNT NATIONAL_DEX_1025
|
||||
#define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT
|
||||
#elif P_GEN_8_POKEMON == TRUE
|
||||
#define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS
|
||||
#elif P_GEN_7_POKEMON == TRUE
|
||||
@ -1062,7 +1062,7 @@ enum {
|
||||
|
||||
#define POKEMON_SLOTS_NUMBER (NATIONAL_DEX_COUNT + 1)
|
||||
|
||||
// Hoenn Pokedex order
|
||||
// Hoenn Pokédex order
|
||||
enum {
|
||||
HOENN_DEX_NONE,
|
||||
HOENN_DEX_TREECKO,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_CONSTANTS_POKEMON_H
|
||||
#define GUARD_CONSTANTS_POKEMON_H
|
||||
|
||||
// Pokemon types
|
||||
// Pokémon types
|
||||
#define TYPE_NONE 255
|
||||
#define TYPE_NORMAL 0
|
||||
#define TYPE_FIGHTING 1
|
||||
@ -24,7 +24,7 @@
|
||||
#define TYPE_FAIRY 18
|
||||
#define NUMBER_OF_MON_TYPES 19
|
||||
|
||||
// Pokemon egg groups
|
||||
// Pokémon egg groups
|
||||
#define EGG_GROUP_NONE 0
|
||||
#define EGG_GROUP_MONSTER 1
|
||||
#define EGG_GROUP_WATER_1 2
|
||||
@ -44,7 +44,7 @@
|
||||
|
||||
#define EGG_GROUPS_PER_MON 2
|
||||
|
||||
// Pokemon natures
|
||||
// Pokémon natures
|
||||
#define NATURE_HARDY 0
|
||||
#define NATURE_LONELY 1
|
||||
#define NATURE_BRAVE 2
|
||||
@ -72,7 +72,7 @@
|
||||
#define NATURE_QUIRKY 24
|
||||
#define NUM_NATURES 25
|
||||
|
||||
// Pokemon Stats
|
||||
// Pokémon Stats
|
||||
#define STAT_HP 0
|
||||
#define STAT_ATK 1
|
||||
#define STAT_DEF 2
|
||||
@ -240,7 +240,7 @@
|
||||
#define GROWTH_FAST 4
|
||||
#define GROWTH_SLOW 5
|
||||
|
||||
// Body colors for pokedex search
|
||||
// Body colors for Pokédex search
|
||||
#define BODY_COLOR_RED 0
|
||||
#define BODY_COLOR_BLUE 1
|
||||
#define BODY_COLOR_YELLOW 2
|
||||
@ -316,7 +316,7 @@
|
||||
#define MON_PIC_HEIGHT 64
|
||||
#define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2)
|
||||
|
||||
// Most pokemon have 2 frames (a default and an alternate for their animation).
|
||||
// Most Pokémon have 2 frames (a default and an alternate for their animation).
|
||||
// There are 4 exceptions:
|
||||
// - Deoxys has 2 frames, 1 for each form
|
||||
// - Spinda has 1 frame, presumably to avoid the work of animating its spots
|
||||
|
||||
@ -166,4 +166,10 @@
|
||||
#define STDSTRING_BATTLE_PIKE 28
|
||||
#define STDSTRING_BATTLE_PYRAMID 29
|
||||
|
||||
// Dynamic Multichoice Callbacks
|
||||
|
||||
#define DYN_MULTICHOICE_CB_DEBUG 0
|
||||
#define DYN_MULTICHOICE_CB_SHOW_ITEM 1
|
||||
#define DYN_MULTICHOICE_CB_NONE 255
|
||||
|
||||
#endif //GUARD_SCRIPT_MENU_CONSTANTS_H
|
||||
|
||||
@ -1658,19 +1658,19 @@
|
||||
#define SPECIES_OGERPON_CORNERSTONE_MASK_TERA GEN9_START + 135
|
||||
#define SPECIES_URSALUNA_BLOODMOON GEN9_START + 136
|
||||
// Indigo Disk
|
||||
#define SPECIES_1018 GEN9_START + 137
|
||||
#define SPECIES_1019 GEN9_START + 138
|
||||
#define SPECIES_1020 GEN9_START + 139
|
||||
#define SPECIES_1021 GEN9_START + 140
|
||||
#define SPECIES_1022 GEN9_START + 141
|
||||
#define SPECIES_1023 GEN9_START + 142
|
||||
#define SPECIES_1024 SPECIES_1024_FORM_1
|
||||
#define SPECIES_1024_FORM_1 GEN9_START + 143
|
||||
#define SPECIES_1024_FORM_2 GEN9_START + 144
|
||||
#define SPECIES_1024_FORM_3 GEN9_START + 145
|
||||
#define SPECIES_1025 GEN9_START + 146
|
||||
#define SPECIES_ARCHALUDON GEN9_START + 137
|
||||
#define SPECIES_HYDRAPPLE GEN9_START + 138
|
||||
#define SPECIES_GOUGING_FIRE GEN9_START + 139
|
||||
#define SPECIES_RAGING_BOLT GEN9_START + 140
|
||||
#define SPECIES_IRON_BOULDER GEN9_START + 141
|
||||
#define SPECIES_IRON_CROWN GEN9_START + 142
|
||||
#define SPECIES_TERAPAGOS SPECIES_TERAPAGOS_NORMAL
|
||||
#define SPECIES_TERAPAGOS_NORMAL GEN9_START + 143
|
||||
#define SPECIES_TERAPAGOS_TERASTAL GEN9_START + 144
|
||||
#define SPECIES_TERAPAGOS_STELLAR GEN9_START + 145
|
||||
#define SPECIES_PECHARUNT GEN9_START + 146
|
||||
|
||||
#define PLACEHOLDER_START SPECIES_1025
|
||||
#define PLACEHOLDER_START SPECIES_PECHARUNT
|
||||
// XD: Gale of Darkness
|
||||
#define SPECIES_LUGIA_SHADOW PLACEHOLDER_START + 1
|
||||
// Diamond & Pearl
|
||||
|
||||
@ -170,7 +170,7 @@
|
||||
|
||||
#define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s
|
||||
|
||||
// TV Show states for Pokemon Contest Live Updates
|
||||
// TV Show states for Pokémon Contest Live Updates
|
||||
#define CONTESTLIVE_STATE_INTRO 0
|
||||
#define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1
|
||||
#define CONTESTLIVE_STATE_BETTER_ROUND2 2
|
||||
|
||||
@ -214,7 +214,7 @@ struct ContestantStatus
|
||||
u8 comboAppealBonus;
|
||||
u8 repeatJam;
|
||||
u8 nextTurnOrder; // turn position
|
||||
u8 attentionLevel; // How much the Pokemon "stood out"
|
||||
u8 attentionLevel; // How much the Pokémon "stood out"
|
||||
u8 contestantAnimTarget;
|
||||
};
|
||||
|
||||
|
||||
@ -3,4 +3,6 @@
|
||||
|
||||
extern u32 IntrMain[];
|
||||
|
||||
extern void ReInitializeEWRAM();
|
||||
|
||||
#endif //GUARD_CRT0_H
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define GUARD_DATA_H
|
||||
|
||||
#include "constants/moves.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
#define SPECIES_SHINY_TAG 5000
|
||||
|
||||
@ -86,6 +87,13 @@ struct Trainer
|
||||
/*0x1F*/ u8 partySize;
|
||||
};
|
||||
|
||||
struct TrainerClass
|
||||
{
|
||||
u8 name[13];
|
||||
u8 money;
|
||||
u16 ball;
|
||||
};
|
||||
|
||||
#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
|
||||
|
||||
extern const u16 gMinigameDigits_Pal[];
|
||||
@ -117,7 +125,7 @@ extern const struct TrainerBacksprite gTrainerBacksprites[];
|
||||
extern const struct Trainer gTrainers[];
|
||||
extern const struct Trainer gBattlePartners[];
|
||||
|
||||
extern const u8 gTrainerClassNames[][13];
|
||||
extern const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT];
|
||||
extern const u8 gMoveNames[MOVES_COUNT_DYNAMAX][MOVE_NAME_LENGTH + 1];
|
||||
extern const u8 *const gZMoveNames[];
|
||||
extern const u8 *const gMaxMoveNames[];
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
extern bool8 gBikeCyclingChallenge;
|
||||
extern u8 gBikeCollisions;
|
||||
extern u16 gScrollableMultichoice_ScrollOffset;
|
||||
|
||||
u8 GetLeadMonIndex(void);
|
||||
u8 IsDestinationBoxFull(void);
|
||||
|
||||
@ -6,8 +6,10 @@
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#define IWRAM_DATA __attribute__((section("iwram_data")))
|
||||
#define EWRAM_DATA __attribute__((section("ewram_data")))
|
||||
#define IWRAM_DATA __attribute__((section(".bss")))
|
||||
#define EWRAM_DATA __attribute__((section(".sbss")))
|
||||
#define IWRAM_INIT __attribute__((section(".iwram")))
|
||||
#define EWRAM_INIT __attribute__((section(".ewram")))
|
||||
#define UNUSED __attribute__((unused))
|
||||
|
||||
#if MODERN
|
||||
|
||||
@ -509,7 +509,7 @@ struct SaveBlock2
|
||||
/*0x90*/ u8 filler_90[0x8];
|
||||
/*0x98*/ struct Time localTimeOffset;
|
||||
/*0xA0*/ struct Time lastBerryTreeUpdate;
|
||||
/*0xA8*/ u32 gcnLinkFlags; // Read by Pokemon Colosseum/XD
|
||||
/*0xA8*/ u32 gcnLinkFlags; // Read by Pokémon Colosseum/XD
|
||||
/*0xAC*/ u32 encryptionKey;
|
||||
/*0xB0*/ struct PlayersApprentice playerApprentice;
|
||||
/*0xDC*/ struct Apprentice apprentices[APPRENTICE_COUNT];
|
||||
|
||||
@ -62,7 +62,7 @@ extern const u32 gBallGfx_Cherish[];
|
||||
extern const u32 gBallPal_Cherish[];
|
||||
extern const u32 gOpenPokeballGfx[];
|
||||
|
||||
// pokemon gfx
|
||||
// Pokémon gfx
|
||||
extern const u16 gMonIconPalettes[][16];
|
||||
|
||||
// pokeblock
|
||||
@ -278,7 +278,7 @@ extern const u32 gBattleTerrainPalette_StadiumGlacia[];
|
||||
extern const u32 gBattleTerrainPalette_StadiumDrake[];
|
||||
extern const u32 gBattleTerrainPalette_StadiumWallace[];
|
||||
|
||||
// pokedex
|
||||
// Pokédex
|
||||
extern const u32 gPokedexInterface_Gfx[];
|
||||
extern const u16 gPokedexBgHoenn_Pal[];
|
||||
extern const u32 gPokedexMenu_Gfx[];
|
||||
@ -1911,7 +1911,7 @@ extern const u32 gBerryPalette_Rowap[];
|
||||
extern const u32 gBerryPalette_Kee[];
|
||||
extern const u32 gBerryPalette_Maranga[];
|
||||
|
||||
//pokenav
|
||||
//PokéNav
|
||||
extern const u16 gPokenavCondition_Pal[];
|
||||
extern const u32 gPokenavCondition_Gfx[];
|
||||
extern const u32 gPokenavCondition_Tilemap[];
|
||||
@ -3133,11 +3133,11 @@ extern const u32 gBattleAnimBgImage_Rainbow[];
|
||||
extern const u32 gBattleAnimBGPalette_Rainbow[];
|
||||
extern const u32 gBattleAnimBgTilemap_Rainbow[];
|
||||
|
||||
// Pokedex Area Screen
|
||||
// Pokédex Area Screen
|
||||
extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
|
||||
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
|
||||
|
||||
// Pokemon Storage System
|
||||
// Pokémon Storage System
|
||||
extern const u32 gStorageSystemMenu_Gfx[];
|
||||
extern const u16 gStorageSystemPartyMenu_Pal[];
|
||||
extern const u32 gStorageSystemPartyMenu_Tilemap[];
|
||||
@ -3265,7 +3265,7 @@ extern const u32 gBerryCrush_Crusher_Gfx[];
|
||||
extern const u16 gBerryCrush_Crusher_Pal[];
|
||||
extern const u32 gBerryCrush_TextWindows_Tilemap[];
|
||||
|
||||
// Pokenav
|
||||
// PokéNav
|
||||
extern const u32 gPokenavMessageBox_Gfx[];
|
||||
extern const u32 gPokenavMessageBox_Tilemap[];
|
||||
extern const u16 gPokenavMessageBox_Pal[];
|
||||
|
||||
@ -126,5 +126,7 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16
|
||||
u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 firstPos, s32 secondPos, s32 fullyDownThreshold, s32 tileTag, s32 palTag, u16 *currItemPtr);
|
||||
void RemoveScrollIndicatorArrowPair(u8 taskId);
|
||||
void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId);
|
||||
bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
|
||||
bool8 ListMenuChangeSelectionFull(struct ListMenu *list, bool32 updateCursor, bool32 callCallback, u8 count, bool8 movingDown);
|
||||
|
||||
#endif //GUARD_LIST_MENU_H
|
||||
|
||||
@ -23,6 +23,7 @@ u16 GetNationalPokedexCount(u8);
|
||||
u16 GetHoennPokedexCount(u8);
|
||||
u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality);
|
||||
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
|
||||
void DrawFootprint(u8 windowId, u16 species);
|
||||
u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16);
|
||||
bool16 HasAllHoennMons(void);
|
||||
void ResetPokedexScrollPositions(void);
|
||||
|
||||
@ -403,7 +403,9 @@ struct SpeciesInfo /*0x8C*/
|
||||
/* 0x64 */ const u32 *shinyPaletteFemale;
|
||||
/* 0x68 */ const u8 *iconSprite;
|
||||
/* 0x6C */ const u8 *iconSpriteFemale;
|
||||
#if P_FOOTPRINTS
|
||||
/* 0x70 */ const u8 *footprint;
|
||||
#endif
|
||||
// All Pokémon pics are 64x64, but this data table defines where in this 64x64 frame the sprite's non-transparent pixels actually are.
|
||||
/* 0x74 */ u8 frontPicSize; // The dimensions of this drawn pixel area.
|
||||
/* 0x74 */ u8 frontPicSizeFemale; // The dimensions of this drawn pixel area.
|
||||
@ -513,6 +515,14 @@ struct Ability
|
||||
{
|
||||
u8 name[ABILITY_NAME_LENGTH + 1];
|
||||
const u8 *description;
|
||||
s8 aiRating;
|
||||
u8 cantBeCopied:1; // cannot be copied by Role Play or Doodle
|
||||
u8 cantBeSwapped:1; // cannot be swapped with Skill Swap or Wandering Spirit
|
||||
u8 cantBeTraced:1; // cannot be copied by Trace - same as cantBeCopied except for Wonder Guard
|
||||
u8 cantBeSuppressed:1; // cannot be negated by Gastro Acid or Neutralizing Gas
|
||||
u8 cantBeOverwritten:1; // cannot be overwritten by Entrainment, Worry Seed or Simple Beam (but can be by Mummy) - same as cantBeSuppressed except for Truant
|
||||
u8 breakable:1; // can be bypassed by Mold Breaker and clones
|
||||
u8 failsOnImposter:1; // doesn't work on an Imposter mon; when can we actually use this?
|
||||
};
|
||||
|
||||
#define SPINDA_SPOT_WIDTH 16
|
||||
|
||||
@ -17,7 +17,7 @@ void ShowPokemonSummaryScreenHandleDeoxys(u8 mode, struct BoxPokemon *mons, u8 m
|
||||
u8 GetMoveSlotToReplace(void);
|
||||
void SummaryScreen_SetAnimDelayTaskId(u8 taskId);
|
||||
|
||||
// The Pokemon Summary Screen can operate in different modes. Certain features,
|
||||
// The Pokémon Summary Screen can operate in different modes. Certain features,
|
||||
// such as move re-ordering, are available in the different modes.
|
||||
enum PokemonSummaryScreenMode
|
||||
{
|
||||
|
||||
@ -65,8 +65,8 @@ struct PokenavMonList
|
||||
enum
|
||||
{
|
||||
POKENAV_MODE_NORMAL, // Chosen from Start menu.
|
||||
POKENAV_MODE_FORCE_CALL_READY, // Pokenav tutorial before calling Mr. Stone
|
||||
POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone
|
||||
POKENAV_MODE_FORCE_CALL_READY, // PokéNav tutorial before calling Mr. Stone
|
||||
POKENAV_MODE_FORCE_CALL_EXIT, // PokéNav tutorial after calling Mr. Stone
|
||||
};
|
||||
|
||||
enum
|
||||
@ -232,8 +232,8 @@ enum
|
||||
[CHECK_PAGE_INTRO_2] = gText_MatchCall##name##_Intro2}
|
||||
|
||||
|
||||
// Pokenav Function IDs
|
||||
// Indices into the LoopedTask tables for each of the main Pokenav features
|
||||
// PokéNav Function IDs
|
||||
// Indices into the LoopedTask tables for each of the main PokéNav features
|
||||
|
||||
enum RegionMapFuncIds
|
||||
{
|
||||
|
||||
@ -177,6 +177,7 @@ enum RandomTag
|
||||
RNG_QUICK_DRAW,
|
||||
RNG_QUICK_CLAW,
|
||||
RNG_TRACE,
|
||||
RNG_FICKLE_BEAM,
|
||||
};
|
||||
|
||||
#define RandomWeighted(tag, ...) \
|
||||
|
||||
@ -31,6 +31,7 @@ void ScriptCall(struct ScriptContext *ctx, const u8 *ptr);
|
||||
void ScriptReturn(struct ScriptContext *ctx);
|
||||
u16 ScriptReadHalfword(struct ScriptContext *ctx);
|
||||
u32 ScriptReadWord(struct ScriptContext *ctx);
|
||||
u32 ScriptPeekWord(struct ScriptContext *ctx);
|
||||
void LockPlayerFieldControls(void);
|
||||
void UnlockPlayerFieldControls(void);
|
||||
bool8 ArePlayerFieldControlsLocked(void);
|
||||
|
||||
@ -1,11 +1,37 @@
|
||||
#ifndef GUARD_SCRIPT_MENU_H
|
||||
#define GUARD_SCRIPT_MENU_H
|
||||
|
||||
#include "list_menu.h"
|
||||
#include "constants/script_menu.h"
|
||||
#include "menu.h"
|
||||
|
||||
// The default size the stack for dynamic multichoice is initialized to
|
||||
// If you try to push an element when the stack is full, it will be reallocated
|
||||
// With increasing capacity of MULTICHOICE_DYNAMIC_STACK_INC
|
||||
|
||||
#define MULTICHOICE_DYNAMIC_STACK_SIZE 5
|
||||
#define MULTICHOICE_DYNAMIC_STACK_INC 5
|
||||
|
||||
extern const u8 *const gStdStrings[];
|
||||
|
||||
struct DynamicMultichoiceStack
|
||||
{
|
||||
s32 top;
|
||||
u32 capacity;
|
||||
struct ListMenuItem *elements;
|
||||
};
|
||||
|
||||
void MultichoiceDynamic_InitStack(u32 capacity);
|
||||
void MultichoiceDynamic_ReallocStack(u32 newCapacity);
|
||||
bool32 MultichoiceDynamic_StackFull(void);
|
||||
bool32 MultichoiceDynamic_StackEmpty(void);
|
||||
u32 MultichoiceDynamic_StackSize(void);
|
||||
void MultichoiceDynamic_PushElement(struct ListMenuItem item);
|
||||
struct ListMenuItem *MultichoiceDynamic_PopElement(void);
|
||||
struct ListMenuItem *MultichoiceDynamic_PeekElement(void);
|
||||
struct ListMenuItem *MultichoiceDynamic_PeekElementAt(u32 index);
|
||||
void MultichoiceDynamic_DestroyStack(void);
|
||||
bool8 ScriptMenu_MultichoiceDynamic(u8 left, u8 top, u8 argc, struct ListMenuItem *items, bool8 ignoreBPress, u8 maxBeforeScroll, u32 initialRow, u32 callbackSet);
|
||||
bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress);
|
||||
bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 defaultChoice);
|
||||
void DrawMultichoiceMenuInternal(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos, const struct MenuAction *actions, int count);
|
||||
|
||||
@ -524,7 +524,7 @@ extern const u8 gText_Speed[];
|
||||
extern const u8 gText_Dash[];
|
||||
extern const u8 gText_Plus[];
|
||||
|
||||
//pokedex text
|
||||
//Pokédex text
|
||||
extern const u8 gText_CryOf[];
|
||||
extern const u8 gText_SizeComparedTo[];
|
||||
extern const u8 gText_PokedexRegistration[];
|
||||
@ -1130,7 +1130,7 @@ extern const u8 gTrickHouse_Mechadoll_Six2[];
|
||||
extern const u8 gTrickHouse_Mechadoll_Seven2[];
|
||||
extern const u8 gTrickHouse_Mechadoll_Eight2[];
|
||||
|
||||
// Pokedex strings
|
||||
// Pokédex strings
|
||||
extern const u8 gText_SearchForPkmnBasedOnParameters[];
|
||||
extern const u8 gText_SwitchPokedexListings[];
|
||||
extern const u8 gText_ReturnToPokedex[];
|
||||
@ -2897,7 +2897,7 @@ extern const u8 gText_WantToPlayAgain[];
|
||||
extern const u8 gText_CommunicationStandby3[];
|
||||
extern const u8 gText_SomeoneDroppedOut[];
|
||||
|
||||
// Pokemon jump
|
||||
// Pokémon jump
|
||||
extern const u8 gText_WantToPlayAgain2[];
|
||||
extern const u8 gText_SomeoneDroppedOut2[];
|
||||
extern const u8 gText_CommunicationStandby4[];
|
||||
@ -2972,7 +2972,7 @@ extern const u8 gText_CutenessContest[];
|
||||
extern const u8 gText_SmartnessContest[];
|
||||
extern const u8 gText_ToughnessContest[];
|
||||
|
||||
// Pokenav Match Call
|
||||
// PokéNav Match Call
|
||||
extern const u8 gText_CallCantBeMadeHere[];
|
||||
extern const u8 gText_NumberRegistered[];
|
||||
extern const u8 gText_NumberOfBattles[];
|
||||
@ -2982,7 +2982,7 @@ extern const u8 gText_Call[];
|
||||
extern const u8 gText_Check[];
|
||||
extern const u8 gText_Cancel6[];
|
||||
|
||||
// Pokenav Menu Handler
|
||||
// PokéNav Menu Handler
|
||||
extern const u8 gText_CheckMapOfHoenn[];
|
||||
extern const u8 gText_CheckPokemonInDetail[];
|
||||
extern const u8 gText_CallRegisteredTrainer[];
|
||||
@ -2999,7 +2999,7 @@ extern const u8 gText_FindToughPokemon[];
|
||||
extern const u8 gText_ReturnToConditionMenu[];
|
||||
extern const u8 gText_NoRibbonWinners[];
|
||||
|
||||
// Pokenav
|
||||
// PokéNav
|
||||
extern const u8 gText_NumberIndex[];
|
||||
extern const u8 gText_RibbonsF700[];
|
||||
|
||||
|
||||
@ -166,6 +166,9 @@ struct Benchmark { s32 ticks; };
|
||||
static inline void BenchmarkStart(void)
|
||||
{
|
||||
gTestRunnerState.inBenchmark = TRUE;
|
||||
// Wait for a v-blank so that comparing two benchmarks is not affected
|
||||
// by the v-count (different numbers of IRQs may run).
|
||||
VBlankIntrWait();
|
||||
REG_TM3CNT = (TIMER_ENABLE | TIMER_64CLK) << 16;
|
||||
}
|
||||
|
||||
|
||||
38
ld_script.ld
38
ld_script.ld
@ -13,19 +13,35 @@ MEMORY
|
||||
|
||||
SECTIONS {
|
||||
|
||||
ewram 0x2000000 (NOLOAD) :
|
||||
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
__ewram_start = .;
|
||||
*(.ewram*)
|
||||
__ewram_end = .;
|
||||
} > EWRAM
|
||||
|
||||
.ewram.sbss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
INCLUDE "sym_ewram.ld"
|
||||
src/*.o(ewram_data);
|
||||
gflib/*.o(ewram_data);
|
||||
src/*.o(.sbss);
|
||||
gflib/*.o(.sbss);
|
||||
|
||||
*libc.a:impure.o(.data);
|
||||
*libc.a:locale.o(.data);
|
||||
*libc.a:mallocr.o(.data);
|
||||
} > EWRAM
|
||||
|
||||
iwram 0x3000000 (NOLOAD) :
|
||||
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_start = .;
|
||||
*(.iwram*);
|
||||
__iwram_end = .;
|
||||
} > IWRAM
|
||||
|
||||
.iwram.bss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
/* .bss starts at 0x3000000 */
|
||||
@ -1324,6 +1340,20 @@ SECTIONS {
|
||||
data/*.o(.rodata);
|
||||
} > ROM = 0
|
||||
|
||||
.data.iwram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_lma = .;
|
||||
. = . + (__iwram_end - __iwram_start);
|
||||
} > ROM = 0
|
||||
|
||||
.data.ewram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__ewram_lma = .;
|
||||
. = . + (__ewram_end - __ewram_start);
|
||||
} > ROM = 0
|
||||
|
||||
__rom_end = .;
|
||||
|
||||
/* DWARF debug sections.
|
||||
|
||||
@ -12,15 +12,32 @@ MEMORY
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
ewram 0x2000000 (NOLOAD) :
|
||||
|
||||
|
||||
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(ewram_data);
|
||||
gflib/*.o(ewram_data);
|
||||
|
||||
__ewram_start = .;
|
||||
*(.ewram*)
|
||||
__ewram_end = .;
|
||||
} > EWRAM
|
||||
|
||||
iwram 0x3000000 (NOLOAD) :
|
||||
.ewram.sbss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(.sbss);
|
||||
gflib/*.o(.sbss);
|
||||
} > EWRAM
|
||||
|
||||
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_start = .;
|
||||
*(.iwram*);
|
||||
__iwram_end = .;
|
||||
} > IWRAM
|
||||
|
||||
.iwram.bss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(.bss);
|
||||
@ -38,9 +55,8 @@ SECTIONS {
|
||||
} > IWRAM
|
||||
|
||||
/* BEGIN ROM DATA */
|
||||
. = 0x8000000;
|
||||
|
||||
.text :
|
||||
.text ORIGIN(ROM) :
|
||||
ALIGN(4)
|
||||
{
|
||||
src/rom_header.o(.text*);
|
||||
@ -125,6 +141,20 @@ SECTIONS {
|
||||
src/graphics.o(.rodata);
|
||||
} > ROM =0
|
||||
|
||||
.data.iwram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_lma = .;
|
||||
. = . + (__iwram_end - __iwram_start);
|
||||
} > ROM = 0
|
||||
|
||||
.data.ewram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__ewram_lma = .;
|
||||
. = . + (__ewram_end - __ewram_start);
|
||||
} > ROM = 0
|
||||
|
||||
__rom_end = .;
|
||||
|
||||
/* DWARF debug sections.
|
||||
|
||||
@ -12,15 +12,32 @@ MEMORY
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
ewram 0x2000000 (NOLOAD) :
|
||||
|
||||
.ewram ORIGIN(EWRAM) : AT (__ewram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(ewram_data);
|
||||
gflib/*.o(ewram_data);
|
||||
test/*.o(ewram_data);
|
||||
__ewram_start = .;
|
||||
*(.ewram*)
|
||||
__ewram_end = .;
|
||||
} > EWRAM
|
||||
|
||||
iwram 0x3000000 (NOLOAD) :
|
||||
.ewram.sbss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(.sbss);
|
||||
gflib/*.o(.sbss);
|
||||
test/*.o(.sbss);
|
||||
} > EWRAM
|
||||
|
||||
.iwram ORIGIN(IWRAM) : AT (__iwram_lma)
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_start = .;
|
||||
*(.iwram*);
|
||||
__iwram_end = .;
|
||||
} > IWRAM
|
||||
|
||||
.iwram.sbss (NOLOAD) :
|
||||
ALIGN(4)
|
||||
{
|
||||
src/*.o(.bss);
|
||||
@ -97,6 +114,20 @@ SECTIONS {
|
||||
src/libisagbprn.o(.rodata);
|
||||
} > ROM =0
|
||||
|
||||
.data.iwram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__iwram_lma = .;
|
||||
. = . + (__iwram_end - __iwram_start);
|
||||
} > ROM = 0
|
||||
|
||||
.data.ewram :
|
||||
ALIGN(4)
|
||||
{
|
||||
__ewram_lma = .;
|
||||
. = . + (__ewram_end - __ewram_start);
|
||||
} > ROM = 0
|
||||
|
||||
tests :
|
||||
ALIGN(4)
|
||||
{
|
||||
@ -109,6 +140,12 @@ SECTIONS {
|
||||
|
||||
__rom_end = .;
|
||||
|
||||
dacs 0x9FFC000 :
|
||||
ALIGN(4)
|
||||
{
|
||||
test/*.o(.dacs);
|
||||
} > ROM =0
|
||||
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
|
||||
@ -2153,8 +2153,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
case EFFECT_ROLE_PLAY:
|
||||
if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef]
|
||||
|| aiData->abilities[battlerDef] == ABILITY_NONE
|
||||
|| IsRolePlayDoodleBannedAbilityAttacker(aiData->abilities[battlerAtk])
|
||||
|| IsRolePlayDoodleBannedAbility(aiData->abilities[battlerDef]))
|
||||
|| gAbilities[aiData->abilities[battlerAtk]].cantBeSuppressed
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeCopied)
|
||||
ADJUST_SCORE(-10);
|
||||
else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5))
|
||||
ADJUST_SCORE(-4);
|
||||
@ -2183,25 +2183,26 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
break;
|
||||
case EFFECT_SKILL_SWAP:
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_NONE || aiData->abilities[battlerDef] == ABILITY_NONE
|
||||
|| IsSkillSwapBannedAbility(aiData->abilities[battlerAtk]) || IsSkillSwapBannedAbility(aiData->abilities[battlerDef])
|
||||
|| gAbilities[aiData->abilities[battlerAtk]].cantBeSwapped
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeSwapped
|
||||
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_WORRY_SEED:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_INSOMNIA
|
||||
|| IsWorrySeedBannedAbility(aiData->abilities[battlerDef])
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|
||||
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_GASTRO_ACID:
|
||||
if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID
|
||||
|| IsGastroAcidBannedAbility(aiData->abilities[battlerDef]))
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeSuppressed)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_ENTRAINMENT:
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_NONE
|
||||
|| IsEntrainmentBannedAbilityAttacker(aiData->abilities[battlerAtk])
|
||||
|| IsEntrainmentBannedAbility(aiData->abilities[battlerDef])
|
||||
|| gAbilities[aiData->abilities[battlerAtk]].cantBeCopied
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|
||||
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
@ -2209,7 +2210,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
break;
|
||||
case EFFECT_SIMPLE_BEAM:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_SIMPLE
|
||||
|| IsSimpleBeamBannedAbility(aiData->abilities[battlerDef])
|
||||
|| gAbilities[aiData->abilities[battlerDef]].cantBeOverwritten
|
||||
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
@ -2730,8 +2731,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
u32 atkPartnerAbility = aiData->abilities[BATTLE_PARTNER(battlerAtk)];
|
||||
u32 atkPartnerHoldEffect = aiData->holdEffects[BATTLE_PARTNER(battlerAtk)];
|
||||
bool32 partnerProtecting = (gBattleMoves[aiData->partnerMove].effect == EFFECT_PROTECT);
|
||||
bool32 attackerHasBadAbility = (GetAbilityRating(aiData->abilities[battlerAtk]) < 0);
|
||||
bool32 partnerHasBadAbility = (GetAbilityRating(atkPartnerAbility) < 0);
|
||||
bool32 attackerHasBadAbility = (gAbilities[aiData->abilities[battlerAtk]].aiRating < 0);
|
||||
bool32 partnerHasBadAbility = (gAbilities[atkPartnerAbility].aiRating < 0);
|
||||
u32 predictedMove = aiData->predictedMoves[battlerDef];
|
||||
|
||||
SetTypeBeforeUsingMove(move, battlerAtk);
|
||||
@ -4377,8 +4378,8 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
}
|
||||
break;
|
||||
case EFFECT_ROLE_PLAY:
|
||||
if (!IsRolePlayDoodleBannedAbilityAttacker(aiData->abilities[battlerAtk])
|
||||
&& !IsRolePlayDoodleBannedAbility(aiData->abilities[battlerDef])
|
||||
if (!gAbilities[aiData->abilities[battlerAtk]].cantBeSuppressed
|
||||
&& !gAbilities[aiData->abilities[battlerDef]].cantBeCopied
|
||||
&& !IsAbilityOfRating(aiData->abilities[battlerAtk], 5)
|
||||
&& IsAbilityOfRating(aiData->abilities[battlerDef], 5))
|
||||
ADJUST_SCORE(2);
|
||||
@ -4444,7 +4445,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
}
|
||||
break;
|
||||
case EFFECT_SKILL_SWAP:
|
||||
if (GetAbilityRating(aiData->abilities[battlerDef]) > GetAbilityRating(aiData->abilities[battlerAtk]))
|
||||
if (gAbilities[aiData->abilities[battlerDef]].aiRating > gAbilities[aiData->abilities[battlerAtk]].aiRating)
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case EFFECT_WORRY_SEED:
|
||||
@ -4454,7 +4455,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
ADJUST_SCORE(2);
|
||||
break;
|
||||
case EFFECT_ENTRAINMENT:
|
||||
if (IsAbilityOfRating(aiData->abilities[battlerDef], 5) || GetAbilityRating(aiData->abilities[battlerAtk]) <= 0)
|
||||
if (IsAbilityOfRating(aiData->abilities[battlerDef], 5) || gAbilities[aiData->abilities[battlerAtk]].aiRating <= 0)
|
||||
{
|
||||
if (aiData->abilities[battlerDef] != aiData->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID))
|
||||
ADJUST_SCORE(2);
|
||||
@ -4740,7 +4741,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case EFFECT_HEAL_BLOCK:
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMoveEffect(gBattleMoves[predictedMove].effect))
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMove(predictedMove))
|
||||
ADJUST_SCORE(3); // Try to cancel healing move
|
||||
else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS
|
||||
|| (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON)))
|
||||
|
||||
@ -249,7 +249,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult)
|
||||
if (GetBattlerAbility(GetBattlerAtPosition(opposingPosition)) != ABILITY_WONDER_GUARD)
|
||||
return FALSE;
|
||||
|
||||
// Check if Pokemon has a super effective move.
|
||||
// Check if Pokémon has a super effective move.
|
||||
for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
move = gBattleMons[battler].moves[i];
|
||||
@ -268,7 +268,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult)
|
||||
else
|
||||
party = gEnemyParty;
|
||||
|
||||
// Find a Pokemon in the party that has a super effective move.
|
||||
// Find a Pokémon in the party that has a super effective move.
|
||||
for (i = firstId; i < lastId; i++)
|
||||
{
|
||||
if (!IsValidForBattle(&party[i]))
|
||||
@ -295,7 +295,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult)
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
|
||||
return FALSE; // There is not a single Pokémon in the party that has a super effective move against a mon with Wonder Guard.
|
||||
}
|
||||
|
||||
static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult)
|
||||
|
||||
@ -35,267 +35,6 @@
|
||||
static u32 AI_GetEffectiveness(uq4_12_t multiplier);
|
||||
|
||||
// Const Data
|
||||
static const s8 sAiAbilityRatings[ABILITIES_COUNT] =
|
||||
{
|
||||
[ABILITY_ADAPTABILITY] = 8,
|
||||
[ABILITY_AFTERMATH] = 5,
|
||||
[ABILITY_AERILATE] = 8,
|
||||
[ABILITY_AIR_LOCK] = 5,
|
||||
[ABILITY_ANALYTIC] = 5,
|
||||
[ABILITY_ANGER_POINT] = 4,
|
||||
[ABILITY_ANTICIPATION] = 2,
|
||||
[ABILITY_ARENA_TRAP] = 9,
|
||||
[ABILITY_AROMA_VEIL] = 3,
|
||||
[ABILITY_AURA_BREAK] = 3,
|
||||
[ABILITY_BAD_DREAMS] = 4,
|
||||
[ABILITY_BATTERY] = 0,
|
||||
[ABILITY_BATTLE_ARMOR] = 2,
|
||||
[ABILITY_BATTLE_BOND] = 6,
|
||||
[ABILITY_BEAST_BOOST] = 7,
|
||||
[ABILITY_BERSERK] = 5,
|
||||
[ABILITY_BIG_PECKS] = 1,
|
||||
[ABILITY_BLAZE] = 5,
|
||||
[ABILITY_BULLETPROOF] = 7,
|
||||
[ABILITY_CHEEK_POUCH] = 4,
|
||||
[ABILITY_CHLOROPHYLL] = 6,
|
||||
[ABILITY_CLEAR_BODY] = 4,
|
||||
[ABILITY_CLOUD_NINE] = 5,
|
||||
[ABILITY_COLOR_CHANGE] = 2,
|
||||
[ABILITY_COMATOSE] = 6,
|
||||
[ABILITY_COMPETITIVE] = 5,
|
||||
[ABILITY_COMPOUND_EYES] = 7,
|
||||
[ABILITY_CONTRARY] = 8,
|
||||
[ABILITY_CORROSION] = 5,
|
||||
[ABILITY_CURSED_BODY] = 4,
|
||||
[ABILITY_CUTE_CHARM] = 2,
|
||||
[ABILITY_DAMP] = 2,
|
||||
[ABILITY_DANCER] = 5,
|
||||
[ABILITY_DARK_AURA] = 6,
|
||||
[ABILITY_DAZZLING] = 5,
|
||||
[ABILITY_DEFEATIST] = -1,
|
||||
[ABILITY_DEFIANT] = 5,
|
||||
[ABILITY_DELTA_STREAM] = 10,
|
||||
[ABILITY_DESOLATE_LAND] = 10,
|
||||
[ABILITY_DISGUISE] = 8,
|
||||
[ABILITY_DOWNLOAD] = 7,
|
||||
[ABILITY_DRIZZLE] = 9,
|
||||
[ABILITY_DROUGHT] = 9,
|
||||
[ABILITY_DRY_SKIN] = 6,
|
||||
[ABILITY_EARLY_BIRD] = 4,
|
||||
[ABILITY_EFFECT_SPORE] = 4,
|
||||
[ABILITY_ELECTRIC_SURGE] = 8,
|
||||
[ABILITY_EMERGENCY_EXIT] = 3,
|
||||
[ABILITY_FAIRY_AURA] = 6,
|
||||
[ABILITY_FILTER] = 6,
|
||||
[ABILITY_FLAME_BODY] = 4,
|
||||
[ABILITY_FLARE_BOOST] = 5,
|
||||
[ABILITY_FLASH_FIRE] = 6,
|
||||
[ABILITY_FLOWER_GIFT] = 4,
|
||||
[ABILITY_FLOWER_VEIL] = 0,
|
||||
[ABILITY_FLUFFY] = 5,
|
||||
[ABILITY_FORECAST] = 6,
|
||||
[ABILITY_FOREWARN] = 2,
|
||||
[ABILITY_FRIEND_GUARD] = 0,
|
||||
[ABILITY_FRISK] = 3,
|
||||
[ABILITY_FULL_METAL_BODY] = 4,
|
||||
[ABILITY_FUR_COAT] = 7,
|
||||
[ABILITY_GALE_WINGS] = 6,
|
||||
[ABILITY_GALVANIZE] = 8,
|
||||
[ABILITY_GLUTTONY] = 3,
|
||||
[ABILITY_GOOEY] = 5,
|
||||
[ABILITY_GRASS_PELT] = 2,
|
||||
[ABILITY_GRASSY_SURGE] = 8,
|
||||
[ABILITY_GUTS] = 6,
|
||||
[ABILITY_HARVEST] = 5,
|
||||
[ABILITY_HEALER] = 0,
|
||||
[ABILITY_HEATPROOF] = 5,
|
||||
[ABILITY_HEAVY_METAL] = -1,
|
||||
[ABILITY_HONEY_GATHER] = 0,
|
||||
[ABILITY_HUGE_POWER] = 10,
|
||||
[ABILITY_HUSTLE] = 7,
|
||||
[ABILITY_HYDRATION] = 4,
|
||||
[ABILITY_HYPER_CUTTER] = 3,
|
||||
[ABILITY_ICE_BODY] = 3,
|
||||
[ABILITY_ILLUMINATE] = 0,
|
||||
[ABILITY_ILLUSION] = 8,
|
||||
[ABILITY_IMMUNITY] = 4,
|
||||
[ABILITY_IMPOSTER] = 9,
|
||||
[ABILITY_INFILTRATOR] = 6,
|
||||
[ABILITY_INNARDS_OUT] = 5,
|
||||
[ABILITY_INNER_FOCUS] = 2,
|
||||
[ABILITY_INSOMNIA] = 4,
|
||||
[ABILITY_INTIMIDATE] = 7,
|
||||
[ABILITY_IRON_BARBS] = 6,
|
||||
[ABILITY_IRON_FIST] = 6,
|
||||
[ABILITY_JUSTIFIED] = 4,
|
||||
[ABILITY_KEEN_EYE] = 1,
|
||||
[ABILITY_KLUTZ] = -1,
|
||||
[ABILITY_LEAF_GUARD] = 2,
|
||||
[ABILITY_LEVITATE] = 7,
|
||||
[ABILITY_LIGHT_METAL] = 2,
|
||||
[ABILITY_LIGHTNING_ROD] = 7,
|
||||
[ABILITY_LIMBER] = 3,
|
||||
[ABILITY_LIQUID_OOZE] = 3,
|
||||
[ABILITY_LIQUID_VOICE] = 5,
|
||||
[ABILITY_LONG_REACH] = 3,
|
||||
[ABILITY_MAGIC_BOUNCE] = 9,
|
||||
[ABILITY_MAGIC_GUARD] = 9,
|
||||
[ABILITY_MAGICIAN] = 3,
|
||||
[ABILITY_MAGMA_ARMOR] = 1,
|
||||
[ABILITY_MAGNET_PULL] = 9,
|
||||
[ABILITY_MARVEL_SCALE] = 5,
|
||||
[ABILITY_MEGA_LAUNCHER] = 7,
|
||||
[ABILITY_MERCILESS] = 4,
|
||||
[ABILITY_MINUS] = 0,
|
||||
[ABILITY_MISTY_SURGE] = 8,
|
||||
[ABILITY_MOLD_BREAKER] = 7,
|
||||
[ABILITY_MOODY] = 10,
|
||||
[ABILITY_MOTOR_DRIVE] = 6,
|
||||
[ABILITY_MOXIE] = 7,
|
||||
[ABILITY_MULTISCALE] = 8,
|
||||
[ABILITY_MULTITYPE] = 8,
|
||||
[ABILITY_MUMMY] = 5,
|
||||
[ABILITY_NATURAL_CURE] = 7,
|
||||
[ABILITY_NEUROFORCE] = 6,
|
||||
[ABILITY_NO_GUARD] = 8,
|
||||
[ABILITY_NORMALIZE] = -1,
|
||||
[ABILITY_OBLIVIOUS] = 2,
|
||||
[ABILITY_OVERCOAT] = 5,
|
||||
[ABILITY_OVERGROW] = 5,
|
||||
[ABILITY_OWN_TEMPO] = 3,
|
||||
[ABILITY_PARENTAL_BOND] = 10,
|
||||
[ABILITY_PICKUP] = 1,
|
||||
[ABILITY_PICKPOCKET] = 3,
|
||||
[ABILITY_PIXILATE] = 8,
|
||||
[ABILITY_PLUS] = 0,
|
||||
[ABILITY_POISON_HEAL] = 8,
|
||||
[ABILITY_POISON_POINT] = 4,
|
||||
[ABILITY_POISON_TOUCH] = 4,
|
||||
[ABILITY_POWER_CONSTRUCT] = 10,
|
||||
[ABILITY_POWER_OF_ALCHEMY] = 0,
|
||||
[ABILITY_PRANKSTER] = 8,
|
||||
[ABILITY_PRESSURE] = 5,
|
||||
[ABILITY_PRIMORDIAL_SEA] = 10,
|
||||
[ABILITY_PRISM_ARMOR] = 6,
|
||||
[ABILITY_PROTEAN] = 8,
|
||||
[ABILITY_PSYCHIC_SURGE] = 8,
|
||||
[ABILITY_PURE_POWER] = 10,
|
||||
[ABILITY_QUEENLY_MAJESTY] = 6,
|
||||
[ABILITY_QUICK_FEET] = 5,
|
||||
[ABILITY_RAIN_DISH] = 3,
|
||||
[ABILITY_RATTLED] = 3,
|
||||
[ABILITY_RECEIVER] = 0,
|
||||
[ABILITY_RECKLESS] = 6,
|
||||
[ABILITY_REFRIGERATE] = 8,
|
||||
[ABILITY_REGENERATOR] = 8,
|
||||
[ABILITY_RIVALRY] = 1,
|
||||
[ABILITY_RKS_SYSTEM] = 8,
|
||||
[ABILITY_ROCK_HEAD] = 5,
|
||||
[ABILITY_ROUGH_SKIN] = 6,
|
||||
[ABILITY_RUN_AWAY] = 0,
|
||||
[ABILITY_SAND_FORCE] = 4,
|
||||
[ABILITY_SAND_RUSH] = 6,
|
||||
[ABILITY_SAND_STREAM] = 9,
|
||||
[ABILITY_SAND_VEIL] = 3,
|
||||
[ABILITY_SAP_SIPPER] = 7,
|
||||
[ABILITY_SCHOOLING] = 6,
|
||||
[ABILITY_SCRAPPY] = 6,
|
||||
[ABILITY_SERENE_GRACE] = 8,
|
||||
[ABILITY_SHADOW_SHIELD] = 8,
|
||||
[ABILITY_SHADOW_TAG] = 10,
|
||||
[ABILITY_SHED_SKIN] = 7,
|
||||
[ABILITY_SHEER_FORCE] = 8,
|
||||
[ABILITY_SHELL_ARMOR] = 2,
|
||||
[ABILITY_SHIELD_DUST] = 5,
|
||||
[ABILITY_SHIELDS_DOWN] = 6,
|
||||
[ABILITY_SIMPLE] = 8,
|
||||
[ABILITY_SKILL_LINK] = 7,
|
||||
[ABILITY_SLOW_START] = -2,
|
||||
[ABILITY_SLUSH_RUSH] = 5,
|
||||
[ABILITY_SNIPER] = 3,
|
||||
[ABILITY_SNOW_CLOAK] = 3,
|
||||
[ABILITY_SNOW_WARNING] = 8,
|
||||
[ABILITY_SOLAR_POWER] = 3,
|
||||
[ABILITY_SOLID_ROCK] = 6,
|
||||
[ABILITY_SOUL_HEART] = 7,
|
||||
[ABILITY_SOUNDPROOF] = 4,
|
||||
[ABILITY_SPEED_BOOST] = 9,
|
||||
[ABILITY_STAKEOUT] = 6,
|
||||
[ABILITY_STALL] = -1,
|
||||
[ABILITY_STAMINA] = 6,
|
||||
[ABILITY_STANCE_CHANGE] = 10,
|
||||
[ABILITY_STATIC] = 4,
|
||||
[ABILITY_STEADFAST] = 2,
|
||||
[ABILITY_STEELWORKER] = 6,
|
||||
[ABILITY_STENCH] = 1,
|
||||
[ABILITY_STICKY_HOLD] = 3,
|
||||
[ABILITY_STORM_DRAIN] = 7,
|
||||
[ABILITY_STRONG_JAW] = 6,
|
||||
[ABILITY_STURDY] = 6,
|
||||
[ABILITY_SUCTION_CUPS] = 2,
|
||||
[ABILITY_SUPER_LUCK] = 3,
|
||||
[ABILITY_SURGE_SURFER] = 4,
|
||||
[ABILITY_SWARM] = 5,
|
||||
[ABILITY_SWEET_VEIL] = 4,
|
||||
[ABILITY_SWIFT_SWIM] = 6,
|
||||
[ABILITY_SYMBIOSIS] = 0,
|
||||
[ABILITY_SYNCHRONIZE] = 4,
|
||||
[ABILITY_TANGLED_FEET] = 2,
|
||||
[ABILITY_TANGLING_HAIR] = 5,
|
||||
[ABILITY_TECHNICIAN] = 8,
|
||||
[ABILITY_TELEPATHY] = 0,
|
||||
[ABILITY_TERAVOLT] = 7,
|
||||
[ABILITY_THICK_FAT] = 7,
|
||||
[ABILITY_TINTED_LENS] = 7,
|
||||
[ABILITY_TORRENT] = 5,
|
||||
[ABILITY_TOXIC_BOOST] = 6,
|
||||
[ABILITY_TOUGH_CLAWS] = 7,
|
||||
[ABILITY_TRACE] = 6,
|
||||
[ABILITY_TRIAGE] = 7,
|
||||
[ABILITY_TRUANT] = -2,
|
||||
[ABILITY_TURBOBLAZE] = 7,
|
||||
[ABILITY_UNAWARE] = 6,
|
||||
[ABILITY_UNBURDEN] = 7,
|
||||
[ABILITY_UNNERVE] = 3,
|
||||
[ABILITY_VICTORY_STAR] = 6,
|
||||
[ABILITY_VITAL_SPIRIT] = 4,
|
||||
[ABILITY_VOLT_ABSORB] = 7,
|
||||
[ABILITY_WATER_ABSORB] = 7,
|
||||
[ABILITY_WATER_BUBBLE] = 8,
|
||||
[ABILITY_WATER_COMPACTION] = 4,
|
||||
[ABILITY_WATER_VEIL] = 4,
|
||||
[ABILITY_WEAK_ARMOR] = 2,
|
||||
[ABILITY_WHITE_SMOKE] = 4,
|
||||
[ABILITY_WIMP_OUT] = 3,
|
||||
[ABILITY_WONDER_GUARD] = 10,
|
||||
[ABILITY_WONDER_SKIN] = 4,
|
||||
[ABILITY_ZEN_MODE] = -1,
|
||||
[ABILITY_INTREPID_SWORD] = 3,
|
||||
[ABILITY_DAUNTLESS_SHIELD] = 3,
|
||||
[ABILITY_BALL_FETCH] = 0,
|
||||
[ABILITY_COTTON_DOWN] = 3,
|
||||
[ABILITY_MIRROR_ARMOR] = 6,
|
||||
[ABILITY_GULP_MISSILE] = 3,
|
||||
[ABILITY_STALWART] = 2,
|
||||
[ABILITY_PROPELLER_TAIL] = 2,
|
||||
[ABILITY_STEAM_ENGINE] = 3,
|
||||
[ABILITY_PUNK_ROCK] = 2,
|
||||
[ABILITY_SAND_SPIT] = 5,
|
||||
[ABILITY_ICE_SCALES] = 7,
|
||||
[ABILITY_RIPEN] = 4,
|
||||
[ABILITY_ICE_FACE] = 4,
|
||||
[ABILITY_POWER_SPOT] = 2,
|
||||
[ABILITY_MIMICRY] = 2,
|
||||
[ABILITY_SCREEN_CLEANER] = 3,
|
||||
[ABILITY_NEUTRALIZING_GAS] = 5,
|
||||
[ABILITY_HUNGER_SWITCH] = 2,
|
||||
[ABILITY_PASTEL_VEIL] = 4,
|
||||
[ABILITY_STEELY_SPIRIT] = 2,
|
||||
[ABILITY_PERISH_BODY] = -1,
|
||||
[ABILITY_WANDERING_SPIRIT] = 2,
|
||||
[ABILITY_GORILLA_TACTICS] = 4,
|
||||
};
|
||||
|
||||
static const u16 sEncouragedEncoreEffects[] =
|
||||
{
|
||||
EFFECT_DREAM_EATER,
|
||||
@ -710,11 +449,14 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
|
||||
gBattleStruct->zmove.baseMoves[battlerAtk] = move;
|
||||
gBattleStruct->zmove.active = TRUE;
|
||||
}
|
||||
else if (gBattleMoves[move].effect == EFFECT_PHOTON_GEYSER)
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == BATTLE_CATEGORY_PHYSICAL);
|
||||
|
||||
if (gBattleMoves[move].effect == EFFECT_NATURE_POWER)
|
||||
move = GetNaturePowerMove();
|
||||
|
||||
gBattleStruct->dynamicMoveType = 0;
|
||||
|
||||
if (move == MOVE_NATURE_POWER)
|
||||
move = GetNaturePowerMove();
|
||||
|
||||
SetTypeBeforeUsingMove(move, battlerAtk);
|
||||
GET_MOVE_TYPE(move, moveType);
|
||||
@ -826,6 +568,7 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
|
||||
// convert multiper to AI_EFFECTIVENESS_xX
|
||||
*typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier);
|
||||
|
||||
gBattleStruct->swapDamageCategory = FALSE;
|
||||
gBattleStruct->zmove.active = FALSE;
|
||||
gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE;
|
||||
return dmg;
|
||||
@ -2030,28 +1773,9 @@ bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsHealingMoveEffect(u32 effect)
|
||||
bool32 IsHealingMove(u32 move)
|
||||
{
|
||||
switch (effect)
|
||||
{
|
||||
case EFFECT_RESTORE_HP:
|
||||
case EFFECT_MORNING_SUN:
|
||||
case EFFECT_SYNTHESIS:
|
||||
case EFFECT_MOONLIGHT:
|
||||
case EFFECT_SOFTBOILED:
|
||||
case EFFECT_ROOST:
|
||||
case EFFECT_SWALLOW:
|
||||
case EFFECT_WISH:
|
||||
case EFFECT_HEALING_WISH:
|
||||
case EFFECT_HEAL_PULSE:
|
||||
case EFFECT_REST:
|
||||
case EFFECT_JUNGLE_HEALING:
|
||||
case EFFECT_ABSORB:
|
||||
case EFFECT_DREAM_EATER:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
return gBattleMoves[move].healBlockBanned;
|
||||
}
|
||||
|
||||
bool32 HasHealingEffect(u32 battlerId)
|
||||
@ -2061,7 +1785,7 @@ bool32 HasHealingEffect(u32 battlerId)
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && IsHealingMoveEffect(gBattleMoves[moves[i]].effect))
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && IsHealingMove(moves[i]))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -3485,16 +3209,11 @@ bool32 SideHasMoveCategory(u32 battlerId, u32 category)
|
||||
|
||||
bool32 IsAbilityOfRating(u32 ability, s8 rating)
|
||||
{
|
||||
if (sAiAbilityRatings[ability] >= rating)
|
||||
if (gAbilities[ability].aiRating >= rating)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
s8 GetAbilityRating(u32 ability)
|
||||
{
|
||||
return sAiAbilityRatings[ability];
|
||||
}
|
||||
|
||||
static const u16 sRecycleEncouragedItems[] =
|
||||
{
|
||||
ITEM_CHESTO_BERRY,
|
||||
|
||||
@ -543,7 +543,7 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite)
|
||||
}
|
||||
|
||||
// Linearly translates a mon to a target offset. The horizontal offset
|
||||
// is mirrored for the opponent's pokemon, and the vertical offset
|
||||
// is mirrored for the opponent's Pokémon, and the vertical offset
|
||||
// is only mirrored if arg 3 is set to 1.
|
||||
// arg 0: 0 = attacker, 1 = target
|
||||
// arg 1: target x pixel offset
|
||||
|
||||
@ -52,7 +52,7 @@ const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] =
|
||||
},
|
||||
};
|
||||
|
||||
// Placeholders for pokemon sprites to be created for a move animation effect (e.g. Role Play / Snatch)
|
||||
// Placeholders for Pokémon sprites to be created for a move animation effect (e.g. Role Play / Snatch)
|
||||
#define TAG_MOVE_EFFECT_MON_1 55125
|
||||
#define TAG_MOVE_EFFECT_MON_2 55126
|
||||
|
||||
@ -2052,7 +2052,7 @@ u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create pokemon sprite to be used for a move animation effect (e.g. Role Play / Snatch)
|
||||
// Create Pokémon sprite to be used for a move animation effect (e.g. Role Play / Snatch)
|
||||
u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, bool8 isShiny, u32 battlerId)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
@ -226,16 +226,16 @@ static u16 GetPrevBall(u16 ballId)
|
||||
return gBagPockets[BALLS_POCKET].itemSlots[i].itemId;
|
||||
}
|
||||
|
||||
static u16 GetNextBall(u16 ballId)
|
||||
static u32 GetNextBall(u32 ballId)
|
||||
{
|
||||
u16 ballNext = 0;
|
||||
u32 ballNext = ITEM_NONE;
|
||||
s32 i;
|
||||
CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]);
|
||||
for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++)
|
||||
for (i = 1; i < gBagPockets[BALLS_POCKET].capacity; i++)
|
||||
{
|
||||
if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i].itemId)
|
||||
if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i-1].itemId)
|
||||
{
|
||||
ballNext = gBagPockets[BALLS_POCKET].itemSlots[i+1].itemId;
|
||||
ballNext = gBagPockets[BALLS_POCKET].itemSlots[i].itemId;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1279,12 +1279,12 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler)
|
||||
bool32 bgmRestored = FALSE;
|
||||
bool32 battlerAnimsDone = FALSE;
|
||||
|
||||
// Start shiny animation if applicable for 1st pokemon
|
||||
// Start shiny animation if applicable for 1st Pokémon
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim
|
||||
&& !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive)
|
||||
TryShinyAnimation(battler, &gPlayerParty[gBattlerPartyIndexes[battler]]);
|
||||
|
||||
// Start shiny animation if applicable for 2nd pokemon
|
||||
// Start shiny animation if applicable for 2nd Pokémon
|
||||
if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim
|
||||
&& !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive)
|
||||
TryShinyAnimation(BATTLE_PARTNER(battler), &gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]);
|
||||
@ -1730,7 +1730,7 @@ static void MoveSelectionDisplayMoveType(u32 battler)
|
||||
{
|
||||
u8 *txtPtr;
|
||||
u8 type;
|
||||
u32 itemId;
|
||||
u32 speciesId;
|
||||
struct Pokemon *mon;
|
||||
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
|
||||
|
||||
@ -1742,10 +1742,12 @@ static void MoveSelectionDisplayMoveType(u32 battler)
|
||||
if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL)
|
||||
{
|
||||
mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]];
|
||||
itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
|
||||
speciesId = GetMonData(mon, MON_DATA_SPECIES);
|
||||
|
||||
if (ItemId_GetHoldEffect(itemId) == HOLD_EFFECT_MASK)
|
||||
type = ItemId_GetSecondaryId(itemId);
|
||||
if (speciesId == SPECIES_OGERPON_WELLSPRING_MASK || speciesId == SPECIES_OGERPON_WELLSPRING_MASK_TERA
|
||||
|| speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA
|
||||
|| speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)
|
||||
type = gBattleMons[battler].type2;
|
||||
else
|
||||
type = gBattleMoves[MOVE_IVY_CUDGEL].type;
|
||||
}
|
||||
|
||||
@ -769,6 +769,7 @@ static void Task_ShowAiPoints(u8 taskId)
|
||||
u32 i, count;
|
||||
struct WindowTemplate winTemplate;
|
||||
struct BattleDebugMenu *data = GetStructPtr(taskId);
|
||||
struct Pokemon *mon;
|
||||
|
||||
switch (data->aiViewState)
|
||||
{
|
||||
@ -800,8 +801,11 @@ static void Task_ShowAiPoints(u8 taskId)
|
||||
data->spriteIds.aiIconSpriteIds[i] = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
mon = &GetBattlerParty(data->aiBattlerId)[gBattlerPartyIndexes[data->aiBattlerId]];
|
||||
|
||||
data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
|
||||
gBattleMons[data->aiBattlerId].isShiny,
|
||||
GetMonData(mon, MON_DATA_IS_SHINY),
|
||||
gBattleMons[data->aiBattlerId].personality,
|
||||
TRUE,
|
||||
39, 130, 15, TAG_NONE);
|
||||
@ -926,6 +930,7 @@ static void Task_ShowAiKnowledge(u8 taskId)
|
||||
u32 i, count;
|
||||
struct WindowTemplate winTemplate;
|
||||
struct BattleDebugMenu *data = GetStructPtr(taskId);
|
||||
struct Pokemon *mon;
|
||||
|
||||
switch (data->aiViewState)
|
||||
{
|
||||
@ -957,8 +962,11 @@ static void Task_ShowAiKnowledge(u8 taskId)
|
||||
data->spriteIds.aiIconSpriteIds[i] = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
mon = &GetBattlerParty(data->aiBattlerId)[gBattlerPartyIndexes[data->aiBattlerId]];
|
||||
|
||||
data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
|
||||
gBattleMons[data->aiBattlerId].isShiny,
|
||||
GetMonData(mon, MON_DATA_IS_SHINY),
|
||||
gBattleMons[data->aiBattlerId].personality,
|
||||
TRUE,
|
||||
39, 130, 15, TAG_NONE);
|
||||
|
||||
@ -2224,7 +2224,7 @@ static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tou
|
||||
#ifdef BUGFIX
|
||||
u8 fixedIv = GetDomeTrainerMonIvs(DOME_TRAINERS[tournamentTrainerId].trainerId);
|
||||
#else
|
||||
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokemon have ivs of 3.
|
||||
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokémon have ivs of 3.
|
||||
#endif
|
||||
u8 level = SetFacilityPtrsGetLevel();
|
||||
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId],
|
||||
@ -2286,13 +2286,13 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId)
|
||||
}
|
||||
}
|
||||
|
||||
// Returns a bitmask representing which 2 of the trainer's 3 pokemon to select.
|
||||
// Returns a bitmask representing which 2 of the trainer's 3 Pokémon to select.
|
||||
// The choice is calculated solely depending on the type effectiveness of their
|
||||
// movesets against the player's pokemon.
|
||||
// movesets against the player's Pokémon.
|
||||
// There is a 50% chance of either a "good" or "bad" selection mode being used.
|
||||
// In the good mode movesets are preferred which are more effective against the
|
||||
// player, and in the bad mode the opposite is true. If all 3 pokemon tie, the
|
||||
// other mode will be tried. If they tie again, the pokemon selection is random.
|
||||
// player, and in the bad mode the opposite is true. If all 3 Pokémon tie, the
|
||||
// other mode will be tried. If they tie again, the Pokémon selection is random.
|
||||
int GetDomeTrainerSelectedMons(u16 tournamentTrainerId)
|
||||
{
|
||||
int selectedMonBits;
|
||||
@ -3928,12 +3928,12 @@ static u8 Task_GetInfoCardInput(u8 taskId)
|
||||
|
||||
#undef tUsingAlternateSlot
|
||||
|
||||
static bool32 IsDomeHealingMoveEffect(u32 effect)
|
||||
static bool32 IsDomeHealingMove(u32 move)
|
||||
{
|
||||
if (IsHealingMoveEffect(effect))
|
||||
if (IsHealingMove(move))
|
||||
return TRUE;
|
||||
// Check extra effects not considered plain healing by AI
|
||||
switch(effect)
|
||||
switch (gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_INGRAIN:
|
||||
case EFFECT_REFRESH:
|
||||
@ -4263,8 +4263,8 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
else
|
||||
j = GetFrontierOpponentClass(trainerId);
|
||||
|
||||
for (;gTrainerClassNames[j][i] != EOS; i++)
|
||||
gStringVar1[i] = gTrainerClassNames[j][i];
|
||||
for (;gTrainerClasses[j].name[i] != EOS; i++)
|
||||
gStringVar1[i] = gTrainerClasses[j].name[i];
|
||||
gStringVar1[i] = CHAR_SPACE;
|
||||
gStringVar1[i + 1] = EOS;
|
||||
|
||||
@ -4360,7 +4360,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
allocatedArray[k] = IsDomeRareMove(move) ? 1 : 0;
|
||||
break;
|
||||
case MOVE_POINTS_HEAL:
|
||||
allocatedArray[k] = IsDomeHealingMoveEffect(gBattleMoves[move].effect) ? 1 : 0;
|
||||
allocatedArray[k] = IsDomeHealingMove(move) ? 1 : 0;
|
||||
break;
|
||||
case MOVE_POINTS_RISKY:
|
||||
allocatedArray[k] = IsDomeRiskyMoveEffect(gBattleMoves[move].effect) ? 1 : 0;
|
||||
@ -4747,7 +4747,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
|
||||
if (lost[1])
|
||||
gSprites[sInfoCard->spriteIds[1 + arrId]].oam.paletteNum = 3;
|
||||
|
||||
// Draw left trainer's pokemon icons.
|
||||
// Draw left trainer's Pokémon icons.
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (trainerIds[0] == TRAINER_PLAYER)
|
||||
@ -4787,7 +4787,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
|
||||
}
|
||||
}
|
||||
|
||||
// Draw right trainer's pokemon icons.
|
||||
// Draw right trainer's Pokémon icons.
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (trainerIds[1] == TRAINER_PLAYER)
|
||||
@ -5138,7 +5138,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
|
||||
int movePower = 0;
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
// Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons.
|
||||
// Calc move points of all 4 moves for all 3 Pokémon hitting all 3 target mons.
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
|
||||
@ -337,7 +337,7 @@ static void GenerateOpponentMons(void)
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
|
||||
// Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player
|
||||
// Ensure none of the opponent's Pokémon are the same as the potential rental Pokémon for the player
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
@ -346,7 +346,7 @@ static void GenerateOpponentMons(void)
|
||||
if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons))
|
||||
continue;
|
||||
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
// "High tier" Pokémon are only allowed on open level mode
|
||||
if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
@ -554,7 +554,7 @@ static void GenerateInitialRentalMons(void)
|
||||
i = 0;
|
||||
while (i != PARTY_SIZE)
|
||||
{
|
||||
if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of pokemon
|
||||
if (i < rentalRank) // The more times the player has rented, the more initial rentals are generated from a better set of Pokémon
|
||||
monId = GetFactoryMonId(factoryLvlMode, challengeNum, TRUE);
|
||||
else
|
||||
monId = GetFactoryMonId(factoryLvlMode, challengeNum, FALSE);
|
||||
@ -562,7 +562,7 @@ static void GenerateInitialRentalMons(void)
|
||||
if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN)
|
||||
continue;
|
||||
|
||||
// Cannot have two pokemon of the same species.
|
||||
// Cannot have two Pokémon of the same species.
|
||||
for (j = firstMonId; j < firstMonId + i; j++)
|
||||
{
|
||||
u16 existingMonId = monIds[j];
|
||||
|
||||
@ -32,15 +32,15 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
// Select_ refers to the first Pokemon selection screen where you choose your initial 3 rental Pokemon.
|
||||
// Swap_ refers to the subsequent selection screens where you can swap a Pokemon with one from the beaten trainer
|
||||
// Select_ refers to the first Pokémon selection screen where you choose your initial 3 rental Pokémon.
|
||||
// Swap_ refers to the subsequent selection screens where you can swap a Pokémon with one from the beaten trainer
|
||||
|
||||
// Note that, generally, "Action" will refer to the immediate actions that can be taken on each screen,
|
||||
// i.e. selecting a pokemon or selecting the Cancel button
|
||||
// i.e. selecting a Pokémon or selecting the Cancel button
|
||||
// The "Options menu" will refer to the popup menu that shows when some actions have been selected
|
||||
|
||||
#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their pokemon to swap away
|
||||
#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new pokemon from the defeated party to swap for
|
||||
#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their Pokémon to swap away
|
||||
#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new Pokémon from the defeated party to swap for
|
||||
|
||||
#define SELECTABLE_MONS_COUNT 6
|
||||
|
||||
@ -89,7 +89,7 @@ struct FactorySelectableMon
|
||||
{
|
||||
u16 monId;
|
||||
u16 ballSpriteId;
|
||||
u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon
|
||||
u8 selectedId; // 0 - not selected, 1 - first Pokémon, 2 - second Pokémon, 3 - third Pokémon
|
||||
struct Pokemon monData;
|
||||
};
|
||||
|
||||
@ -1060,7 +1060,7 @@ static void SpriteCB_Pokeball(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED))
|
||||
{
|
||||
// Pokeball selected, do rocking animation
|
||||
// Poké Ball selected, do rocking animation
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
if (sprite->data[0] != 0)
|
||||
@ -1084,7 +1084,7 @@ static void SpriteCB_Pokeball(struct Sprite *sprite)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pokeball not selected, remain still
|
||||
// Poké Ball not selected, remain still
|
||||
StartSpriteAnimIfDifferent(sprite, 0);
|
||||
}
|
||||
}
|
||||
@ -1521,7 +1521,7 @@ static void Select_Task_Exit(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Handles the Yes/No prompt when confirming the 3 selected rental pokemon
|
||||
// Handles the Yes/No prompt when confirming the 3 selected rental Pokémon
|
||||
static void Select_Task_HandleYesNo(u8 taskId)
|
||||
{
|
||||
if (sFactorySelectScreen->monPicAnimating == TRUE)
|
||||
@ -1543,14 +1543,14 @@ static void Select_Task_HandleYesNo(u8 taskId)
|
||||
PlaySE(SE_SELECT);
|
||||
if (sFactorySelectScreen->yesNoCursorPos == 0)
|
||||
{
|
||||
// Selected Yes, confirmed selected pokemon
|
||||
// Selected Yes, confirmed selected Pokémon
|
||||
Select_HideChosenMons();
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].func = Select_Task_Exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Selected No, continue choosing pokemon
|
||||
// Selected No, continue choosing Pokémon
|
||||
Select_ErasePopupMenu(SELECT_WIN_YES_NO);
|
||||
Select_DeclineChosenMons();
|
||||
sFactorySelectScreen->fadeSpeciesNameActive = TRUE;
|
||||
@ -1560,7 +1560,7 @@ static void Select_Task_HandleYesNo(u8 taskId)
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
// Pressed B, Continue choosing pokemon
|
||||
// Pressed B, Continue choosing Pokémon
|
||||
PlaySE(SE_SELECT);
|
||||
Select_ErasePopupMenu(SELECT_WIN_YES_NO);
|
||||
Select_DeclineChosenMons();
|
||||
@ -1582,7 +1582,7 @@ static void Select_Task_HandleYesNo(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Handles the popup menu that shows when a pokemon is selected
|
||||
// Handles the popup menu that shows when a Pokémon is selected
|
||||
static void Select_Task_HandleMenu(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].tState)
|
||||
@ -2416,7 +2416,7 @@ static void Swap_Task_Exit(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
// Set return value for script
|
||||
// TRUE if player kept their current pokemon
|
||||
// TRUE if player kept their current Pokémon
|
||||
if (sFactorySwapScreen->monSwapped == TRUE)
|
||||
{
|
||||
gTasks[taskId].tState++;
|
||||
@ -2631,7 +2631,7 @@ static void Swap_Task_HandleMenu(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new pokemon to receive)
|
||||
// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new Pokémon to receive)
|
||||
static void Swap_Task_HandleChooseMons(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].tState)
|
||||
@ -2646,7 +2646,7 @@ static void Swap_Task_HandleChooseMons(u8 taskId)
|
||||
case STATE_CHOOSE_MONS_HANDLE_INPUT:
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
// Run whatever action is currently selected (a pokeball, the Cancel button, etc.)
|
||||
// Run whatever action is currently selected (a Poké Ball, the Cancel button, etc.)
|
||||
PlaySE(SE_SELECT);
|
||||
sFactorySwapScreen->fadeSpeciesNameActive = FALSE;
|
||||
Swap_PrintMonSpeciesAtFade();
|
||||
@ -3554,7 +3554,7 @@ static void Swap_HandleActionCursorChange(u8 cursorId)
|
||||
{
|
||||
if (cursorId < FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
// Cursor is on one of the pokemon
|
||||
// Cursor is on one of the Pokémon
|
||||
gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE;
|
||||
Swap_HideActionButtonHighlights();
|
||||
gSprites[sFactorySwapScreen->cursorSpriteId].x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].x;
|
||||
|
||||
@ -103,7 +103,7 @@ void FreeBattleSpritesData(void)
|
||||
FREE_AND_SET_NULL(gBattleSpritesDataPtr);
|
||||
}
|
||||
|
||||
// Pokemon chooses move to use in Battle Palace rather than player
|
||||
// Pokémon chooses move to use in Battle Palace rather than player
|
||||
u16 ChooseMoveAndTargetInBattlePalace(u32 battler)
|
||||
{
|
||||
s32 i, var1, var2;
|
||||
@ -163,7 +163,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler)
|
||||
chosenMoveId = BattleAI_ChooseMoveOrAction();
|
||||
}
|
||||
|
||||
// If no moves matched the selected group, pick a new move from groups the pokemon has
|
||||
// If no moves matched the selected group, pick a new move from groups the Pokémon has
|
||||
// In this case the AI is not checked again, so the choice may be worse
|
||||
// If a move is chosen this way, there's a 50% chance that it will be unable to use it anyway
|
||||
if (chosenMoveId == -1 || chosenMoveId >= MAX_MON_MOVES)
|
||||
@ -356,7 +356,7 @@ static u16 GetBattlePalaceTarget(u32 battler)
|
||||
return BATTLE_OPPOSITE(battler) << 8;
|
||||
}
|
||||
|
||||
// Wait for the pokemon to finish appearing out from the pokeball on send out
|
||||
// Wait for the Pokémon to finish appearing out from the Poké Ball on send out
|
||||
void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite)
|
||||
{
|
||||
u8 spriteId = sprite->data[1];
|
||||
|
||||
@ -322,92 +322,86 @@ const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] =
|
||||
[TYPE_FAIRY] = _("Fairy"),
|
||||
};
|
||||
|
||||
// This is a factor in how much money you get for beating a trainer.
|
||||
const struct TrainerMoney gTrainerMoneyTable[] =
|
||||
{
|
||||
{TRAINER_CLASS_TEAM_AQUA, 5},
|
||||
{TRAINER_CLASS_AQUA_ADMIN, 10},
|
||||
{TRAINER_CLASS_AQUA_LEADER, 20},
|
||||
{TRAINER_CLASS_AROMA_LADY, 10},
|
||||
{TRAINER_CLASS_RUIN_MANIAC, 15},
|
||||
{TRAINER_CLASS_INTERVIEWER, 12},
|
||||
{TRAINER_CLASS_TUBER_F, 1},
|
||||
{TRAINER_CLASS_TUBER_M, 1},
|
||||
{TRAINER_CLASS_SIS_AND_BRO, 3},
|
||||
{TRAINER_CLASS_COOLTRAINER, 12},
|
||||
{TRAINER_CLASS_HEX_MANIAC, 6},
|
||||
{TRAINER_CLASS_LADY, 50},
|
||||
{TRAINER_CLASS_BEAUTY, 20},
|
||||
{TRAINER_CLASS_RICH_BOY, 50},
|
||||
{TRAINER_CLASS_POKEMANIAC, 15},
|
||||
{TRAINER_CLASS_SWIMMER_M, 2},
|
||||
{TRAINER_CLASS_BLACK_BELT, 8},
|
||||
{TRAINER_CLASS_GUITARIST, 8},
|
||||
{TRAINER_CLASS_KINDLER, 8},
|
||||
{TRAINER_CLASS_CAMPER, 4},
|
||||
{TRAINER_CLASS_OLD_COUPLE, 10},
|
||||
{TRAINER_CLASS_BUG_MANIAC, 15},
|
||||
{TRAINER_CLASS_PSYCHIC, 6},
|
||||
{TRAINER_CLASS_GENTLEMAN, 20},
|
||||
{TRAINER_CLASS_ELITE_FOUR, 25},
|
||||
{TRAINER_CLASS_LEADER, 25},
|
||||
{TRAINER_CLASS_SCHOOL_KID, 5},
|
||||
{TRAINER_CLASS_SR_AND_JR, 4},
|
||||
{TRAINER_CLASS_POKEFAN, 20},
|
||||
{TRAINER_CLASS_EXPERT, 10},
|
||||
{TRAINER_CLASS_YOUNGSTER, 4},
|
||||
{TRAINER_CLASS_CHAMPION, 50},
|
||||
{TRAINER_CLASS_FISHERMAN, 10},
|
||||
{TRAINER_CLASS_TRIATHLETE, 10},
|
||||
{TRAINER_CLASS_DRAGON_TAMER, 12},
|
||||
{TRAINER_CLASS_BIRD_KEEPER, 8},
|
||||
{TRAINER_CLASS_NINJA_BOY, 3},
|
||||
{TRAINER_CLASS_BATTLE_GIRL, 6},
|
||||
{TRAINER_CLASS_PARASOL_LADY, 10},
|
||||
{TRAINER_CLASS_SWIMMER_F, 2},
|
||||
{TRAINER_CLASS_PICNICKER, 4},
|
||||
{TRAINER_CLASS_TWINS, 3},
|
||||
{TRAINER_CLASS_SAILOR, 8},
|
||||
{TRAINER_CLASS_COLLECTOR, 15},
|
||||
{TRAINER_CLASS_RIVAL, 15},
|
||||
{TRAINER_CLASS_PKMN_BREEDER, 10},
|
||||
{TRAINER_CLASS_PKMN_RANGER, 12},
|
||||
{TRAINER_CLASS_TEAM_MAGMA, 5},
|
||||
{TRAINER_CLASS_MAGMA_ADMIN, 10},
|
||||
{TRAINER_CLASS_MAGMA_LEADER, 20},
|
||||
{TRAINER_CLASS_LASS, 4},
|
||||
{TRAINER_CLASS_BUG_CATCHER, 4},
|
||||
{TRAINER_CLASS_HIKER, 10},
|
||||
{TRAINER_CLASS_YOUNG_COUPLE, 8},
|
||||
{TRAINER_CLASS_WINSTRATE, 10},
|
||||
{0xFF, 5}, // Any trainer class not listed above uses this
|
||||
};
|
||||
#define DEFAULT_MONEY 5
|
||||
#define DEFAULT_BALL ITEM_POKE_BALL
|
||||
|
||||
#if B_TRAINER_CLASS_POKE_BALLS >= GEN_7
|
||||
static const u16 sTrainerBallTable[TRAINER_CLASS_COUNT] =
|
||||
#define TRAINER_CLASS(trainerClass, trainerName, trainerMoney, trainerBall) \
|
||||
[TRAINER_CLASS_##trainerClass] = \
|
||||
{ \
|
||||
.name = _(trainerName), \
|
||||
.money = trainerMoney, \
|
||||
.ball = trainerBall, \
|
||||
}
|
||||
|
||||
const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] =
|
||||
{
|
||||
#if B_TRAINER_CLASS_POKE_BALLS == GEN_7
|
||||
[TRAINER_CLASS_PKMN_BREEDER] = ITEM_FRIEND_BALL,
|
||||
#elif B_TRAINER_CLASS_POKE_BALLS == GEN_8
|
||||
[TRAINER_CLASS_PKMN_BREEDER] = ITEM_HEAL_BALL,
|
||||
#endif
|
||||
[TRAINER_CLASS_COOLTRAINER] = ITEM_ULTRA_BALL,
|
||||
[TRAINER_CLASS_COLLECTOR] = ITEM_PREMIER_BALL,
|
||||
[TRAINER_CLASS_SWIMMER_M] = ITEM_DIVE_BALL,
|
||||
[TRAINER_CLASS_BLACK_BELT] = ITEM_ULTRA_BALL,
|
||||
[TRAINER_CLASS_AQUA_LEADER] = ITEM_MASTER_BALL,
|
||||
[TRAINER_CLASS_GENTLEMAN] = ITEM_LUXURY_BALL,
|
||||
[TRAINER_CLASS_ELITE_FOUR] = ITEM_ULTRA_BALL,
|
||||
#if B_TRAINER_CLASS_POKE_BALLS == GEN_7
|
||||
[TRAINER_CLASS_FISHERMAN] = ITEM_LURE_BALL,
|
||||
#elif B_TRAINER_CLASS_POKE_BALLS == GEN_8
|
||||
[TRAINER_CLASS_FISHERMAN] = ITEM_DIVE_BALL,
|
||||
#endif
|
||||
[TRAINER_CLASS_SWIMMER_F] = ITEM_DIVE_BALL,
|
||||
[TRAINER_CLASS_COOLTRAINER_2] = ITEM_ULTRA_BALL,
|
||||
[TRAINER_CLASS_MAGMA_LEADER] = ITEM_MASTER_BALL,
|
||||
TRAINER_CLASS(PKMN_TRAINER_1, "{PKMN} TRAINER", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PKMN_TRAINER_2, "{PKMN} TRAINER", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(HIKER, "HIKER", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(TEAM_AQUA, "TEAM AQUA", 5, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL),
|
||||
TRAINER_CLASS(COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(BIRD_KEEPER, "BIRD KEEPER", 8, DEFAULT_BALL),
|
||||
TRAINER_CLASS(COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL),
|
||||
TRAINER_CLASS(SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TEAM_MAGMA, "TEAM MAGMA", 5, DEFAULT_BALL),
|
||||
TRAINER_CLASS(EXPERT, "EXPERT", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(AQUA_ADMIN, "AQUA ADMIN", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(HEX_MANIAC, "HEX MANIAC", 6, DEFAULT_BALL),
|
||||
TRAINER_CLASS(AROMA_LADY, "AROMA LADY", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(RUIN_MANIAC, "RUIN MANIAC", 15, DEFAULT_BALL),
|
||||
TRAINER_CLASS(INTERVIEWER, "INTERVIEWER", 12, DEFAULT_BALL),
|
||||
TRAINER_CLASS(TUBER_F, "TUBER", 1, DEFAULT_BALL),
|
||||
TRAINER_CLASS(TUBER_M, "TUBER", 1, DEFAULT_BALL),
|
||||
TRAINER_CLASS(LADY, "LADY", 50, DEFAULT_BALL),
|
||||
TRAINER_CLASS(BEAUTY, "BEAUTY", 20, DEFAULT_BALL),
|
||||
TRAINER_CLASS(RICH_BOY, "RICH BOY", 50, DEFAULT_BALL),
|
||||
TRAINER_CLASS(POKEMANIAC, "POKéMANIAC", 15, DEFAULT_BALL),
|
||||
TRAINER_CLASS(GUITARIST, "GUITARIST", 8, DEFAULT_BALL),
|
||||
TRAINER_CLASS(KINDLER, "KINDLER", 8, DEFAULT_BALL),
|
||||
TRAINER_CLASS(CAMPER, "CAMPER", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PICNICKER, "PICNICKER", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(BUG_MANIAC, "BUG MANIAC", 15, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PSYCHIC, "PSYCHIC", 6, DEFAULT_BALL),
|
||||
TRAINER_CLASS(GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL),
|
||||
TRAINER_CLASS(ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(LEADER, "LEADER", 25, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SCHOOL_KID, "SCHOOL KID", 5, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SR_AND_JR, "SR. AND JR.", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(WINSTRATE, "WINSTRATE", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(POKEFAN, "POKéFAN", 20, DEFAULT_BALL),
|
||||
TRAINER_CLASS(YOUNGSTER, "YOUNGSTER", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(CHAMPION, "CHAMPION", 50, DEFAULT_BALL),
|
||||
TRAINER_CLASS(FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL),
|
||||
TRAINER_CLASS(TRIATHLETE, "TRIATHLETE", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(DRAGON_TAMER, "DRAGON TAMER", 12, DEFAULT_BALL),
|
||||
TRAINER_CLASS(NINJA_BOY, "NINJA BOY", 3, DEFAULT_BALL),
|
||||
TRAINER_CLASS(BATTLE_GIRL, "BATTLE GIRL", 6, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PARASOL_LADY, "PARASOL LADY", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TWINS, "TWINS", 3, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SAILOR, "SAILOR", 8, DEFAULT_BALL),
|
||||
TRAINER_CLASS(COOLTRAINER_2, "COOLTRAINER", DEFAULT_MONEY, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(MAGMA_ADMIN, "MAGMA ADMIN", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(RIVAL, "{PKMN} TRAINER", 15, DEFAULT_BALL),
|
||||
TRAINER_CLASS(BUG_CATCHER, "BUG CATCHER", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PKMN_RANGER, "{PKMN} RANGER", 12, DEFAULT_BALL),
|
||||
TRAINER_CLASS(MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(LASS, "LASS", 4, DEFAULT_BALL),
|
||||
TRAINER_CLASS(YOUNG_COUPLE, "YOUNG COUPLE", 8, DEFAULT_BALL),
|
||||
TRAINER_CLASS(OLD_COUPLE, "OLD COUPLE", 10, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SIS_AND_BRO, "SIS AND BRO", 3, DEFAULT_BALL),
|
||||
TRAINER_CLASS(SALON_MAIDEN, "SALON MAIDEN", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(DOME_ACE, "DOME ACE", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PALACE_MAVEN, "PALACE MAVEN", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(ARENA_TYCOON, "ARENA TYCOON", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(FACTORY_HEAD, "FACTORY HEAD", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PIKE_QUEEN, "PIKE QUEEN", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(PYRAMID_KING, "PYRAMID KING", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
TRAINER_CLASS(RS_PROTAG, "{PKMN} TRAINER", DEFAULT_MONEY, DEFAULT_BALL),
|
||||
};
|
||||
#endif
|
||||
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
{
|
||||
@ -2036,7 +2030,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
|
||||
#if B_TRAINER_CLASS_POKE_BALLS >= GEN_7
|
||||
if (ball == -1)
|
||||
{
|
||||
ball = (sTrainerBallTable[trainer->trainerClass]) ? sTrainerBallTable[trainer->trainerClass] : ITEM_POKE_BALL;
|
||||
ball = gTrainerClasses[trainer->trainerClass].ball ?: ITEM_POKE_BALL;
|
||||
SetMonData(&party[i], MON_DATA_POKEBALL, &ball);
|
||||
}
|
||||
#endif
|
||||
@ -3263,6 +3257,7 @@ const u8* FaintClearSetData(u32 battler)
|
||||
gProtectStructs[battler].quash = FALSE;
|
||||
gProtectStructs[battler].obstructed = FALSE;
|
||||
gProtectStructs[battler].silkTrapped = FALSE;
|
||||
gProtectStructs[battler].burningBulwarked = FALSE;
|
||||
gProtectStructs[battler].endured = FALSE;
|
||||
gProtectStructs[battler].noValidMoves = FALSE;
|
||||
gProtectStructs[battler].helpingHand = FALSE;
|
||||
@ -4727,7 +4722,7 @@ s8 GetMovePriority(u32 battler, u16 move)
|
||||
{
|
||||
priority++;
|
||||
}
|
||||
else if (ability == ABILITY_TRIAGE && IsHealingMoveEffect(gBattleMoves[move].effect))
|
||||
else if (ability == ABILITY_TRIAGE && IsHealingMove(move))
|
||||
priority += 3;
|
||||
|
||||
if (gProtectStructs[battler].quash)
|
||||
@ -5667,6 +5662,13 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
|
||||
{
|
||||
gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET;
|
||||
}
|
||||
else if (gBattleMoves[move].effect == EFFECT_IVY_CUDGEL
|
||||
&& (gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK_TERA
|
||||
|| gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA
|
||||
|| gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA ))
|
||||
{
|
||||
gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET;
|
||||
}
|
||||
else if (gBattleMoves[move].effect == EFFECT_NATURAL_GIFT)
|
||||
{
|
||||
if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES)
|
||||
|
||||
@ -304,7 +304,7 @@ static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}
|
||||
static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
|
||||
static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
|
||||
static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
|
||||
static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!");
|
||||
static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nliquid ooze!");
|
||||
static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
|
||||
static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!");
|
||||
const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p");
|
||||
@ -834,9 +834,11 @@ static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_A
|
||||
static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped\n{B_DEF_TEAM2} team!");
|
||||
static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2}\nteam disappeared!");
|
||||
static const u8 sText_HospitalityRestoration[] = _("The {B_ATK_PARTNER_NAME} drank down all\nthe matcha that Sinistcha made!");
|
||||
static const u8 sText_ElectroShockCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nelectricity!");
|
||||
|
||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
{
|
||||
[STRINGID_ELECTROSHOCKCHARGING - BATTLESTRINGS_TABLE_START] = sText_ElectroShockCharging,
|
||||
[STRINGID_HOSPITALITYRESTORATION - BATTLESTRINGS_TABLE_START] = sText_HospitalityRestoration,
|
||||
[STRINGID_THESWAMPDISAPPEARED - BATTLESTRINGS_TABLE_START] = sText_TheSwampDisappeared,
|
||||
[STRINGID_SWAMPENVELOPEDSIDE - BATTLESTRINGS_TABLE_START] = sText_SwampEnvelopedSide,
|
||||
@ -1764,6 +1766,7 @@ const u16 gFirstTurnOfTwoStringIds[] =
|
||||
[B_MSG_TURN1_FREEZE_SHOCK] = STRINGID_CLOAKEDINAFREEZINGLIGHT,
|
||||
[B_MSG_TURN1_SKY_DROP] = STRINGID_PKMNTOOKTARGETHIGH,
|
||||
[B_MSG_TURN1_METEOR_BEAM] = STRINGID_METEORBEAMCHARGING,
|
||||
[B_MSG_TURN1_ELECTRO_SHOCK] = STRINGID_ELECTROSHOCKCHARGING,
|
||||
};
|
||||
|
||||
// Index copied from move's index in sTrappingMoves
|
||||
@ -2921,7 +2924,7 @@ void BufferStringBattle(u16 stringID, u32 battler)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case STRINGID_USEDMOVE: // pokemon used a move msg
|
||||
case STRINGID_USEDMOVE: // Pokémon used a move msg
|
||||
if (gBattleStruct->zmove.active && gBattleStruct->zmove.activeCategory != BATTLE_CATEGORY_STATUS)
|
||||
StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove));
|
||||
else if (IsMaxMove(gBattleMsgDataPtr->currentMove))
|
||||
@ -3211,19 +3214,19 @@ static const u8 *BattleStringGetOpponentClassByTrainerId(u16 trainerId)
|
||||
const u8 *toCpy;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
|
||||
toCpy = gTrainerClasses[GetSecretBaseTrainerClass()].name;
|
||||
else if (trainerId == TRAINER_UNION_ROOM)
|
||||
toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
|
||||
toCpy = gTrainerClasses[GetUnionRoomTrainerClass()].name;
|
||||
else if (trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
|
||||
toCpy = gTrainerClasses[GetFrontierBrainTrainerClass()].name;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
|
||||
toCpy = gTrainerClassNames[GetFrontierOpponentClass(trainerId)];
|
||||
toCpy = gTrainerClasses[GetFrontierOpponentClass(trainerId)].name;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
|
||||
toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(trainerId)];
|
||||
toCpy = gTrainerClasses[GetTrainerHillOpponentClass(trainerId)].name;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
|
||||
toCpy = gTrainerClassNames[GetEreaderTrainerClassId()];
|
||||
toCpy = gTrainerClasses[GetEreaderTrainerClassId()].name;
|
||||
else
|
||||
toCpy = gTrainerClassNames[gTrainers[trainerId].trainerClass];
|
||||
toCpy = gTrainerClasses[gTrainers[trainerId].trainerClass].name;
|
||||
|
||||
return toCpy;
|
||||
}
|
||||
@ -3236,7 +3239,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
u32 dstID = 0; // if they used dstID, why not use srcID as well?
|
||||
const u8 *toCpy = NULL;
|
||||
// This buffer may hold either the name of a trainer, pokemon, or item.
|
||||
// This buffer may hold either the name of a trainer, Pokémon, or item.
|
||||
u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)];
|
||||
u8 multiplayerId;
|
||||
|
||||
@ -3572,7 +3575,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
}
|
||||
break;
|
||||
case B_TXT_PARTNER_CLASS:
|
||||
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)];
|
||||
toCpy = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name;
|
||||
break;
|
||||
case B_TXT_PARTNER_NAME:
|
||||
toCpy = BattleStringGetPlayerName(text, GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT));
|
||||
@ -3585,7 +3588,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)];
|
||||
toCpy = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name;
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A);
|
||||
|
||||
@ -1268,7 +1268,7 @@ static void TryHealMons(u8 healCount)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
indices[i] = i;
|
||||
|
||||
// Only 'healCount' number of pokemon will be healed.
|
||||
// Only 'healCount' number of Pokémon will be healed.
|
||||
// The order in which they're (attempted to be) healed is random,
|
||||
Shuffle(indices, FRONTIER_PARTY_SIZE, sizeof(indices[0]));
|
||||
|
||||
|
||||
@ -3134,6 +3134,9 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
switch (gBattleScripting.moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_CONFUSION:
|
||||
if (gCurrentMove == MOVE_ALLURING_VOICE && !gProtectStructs[gEffectBattler].statRaised)
|
||||
break;
|
||||
|
||||
if (!CanBeConfused(gEffectBattler))
|
||||
{
|
||||
gBattlescriptCurrInstr++;
|
||||
@ -3523,6 +3526,7 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
gProtectStructs[gBattlerTarget].banefulBunkered = FALSE;
|
||||
gProtectStructs[gBattlerTarget].obstructed = FALSE;
|
||||
gProtectStructs[gBattlerTarget].silkTrapped = FALSE;
|
||||
gProtectStructs[gBattlerAttacker].burningBulwarked = FALSE;
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
if (gCurrentMove == MOVE_HYPERSPACE_FURY)
|
||||
gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect;
|
||||
@ -4242,7 +4246,7 @@ static void Cmd_getexp(void)
|
||||
|
||||
if (IsTradedMon(&gPlayerParty[*expMonId]))
|
||||
{
|
||||
// check if the pokemon doesn't belong to the player
|
||||
// check if the Pokémon doesn't belong to the player
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && *expMonId >= 3)
|
||||
i = STRINGID_EMPTYSTRING4;
|
||||
else
|
||||
@ -5322,6 +5326,15 @@ static void Cmd_moveend(void)
|
||||
gBattlescriptCurrInstr = BattleScript_KingsShieldEffect;
|
||||
effect = 1;
|
||||
}
|
||||
else if (gProtectStructs[gBattlerTarget].burningBulwarked)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_BURN | MOVE_EFFECT_AFFECTS_USER;
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_BURNING_BULWARK);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect;
|
||||
effect = 1;
|
||||
}
|
||||
// Not strictly a protect effect, but works the same way
|
||||
else if (gProtectStructs[gBattlerTarget].beakBlastCharge
|
||||
&& CanBeBurned(gBattlerAttacker)
|
||||
@ -5746,7 +5759,7 @@ static void Cmd_moveend(void)
|
||||
}
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon.
|
||||
case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokémon.
|
||||
{
|
||||
u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
|
||||
// Set a flag if move hits either target (for throat spray that can't check damage)
|
||||
@ -6115,6 +6128,7 @@ static void Cmd_moveend(void)
|
||||
gBattleStruct->zmove.effect = EFFECT_HIT;
|
||||
gBattleStruct->hitSwitchTargetFailed = FALSE;
|
||||
gBattleStruct->isAtkCancelerForCalledMove = FALSE;
|
||||
gBattleStruct->swapDamageCategory = FALSE;
|
||||
gBattleStruct->enduredDamage = 0;
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
@ -7348,9 +7362,9 @@ static void Cmd_hitanimation(void)
|
||||
|
||||
static u32 GetTrainerMoneyToGive(u16 trainerId)
|
||||
{
|
||||
u32 i = 0;
|
||||
u32 lastMonLevel = 0;
|
||||
u32 moneyReward;
|
||||
u8 trainerMoney;
|
||||
|
||||
if (trainerId == TRAINER_SECRET_BASE)
|
||||
{
|
||||
@ -7360,19 +7374,14 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
|
||||
{
|
||||
const struct TrainerMon *party = gTrainers[trainerId].party;
|
||||
lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl;
|
||||
|
||||
for (; gTrainerMoneyTable[i].classId != 0xFF; i++)
|
||||
{
|
||||
if (gTrainerMoneyTable[i].classId == gTrainers[trainerId].trainerClass)
|
||||
break;
|
||||
}
|
||||
trainerMoney = gTrainerClasses[gTrainers[trainerId].trainerClass].money;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value;
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * gTrainerMoneyTable[i].value;
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * trainerMoney;
|
||||
else
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value;
|
||||
moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney;
|
||||
}
|
||||
|
||||
return moneyReward;
|
||||
@ -9196,28 +9205,14 @@ static void Cmd_various(void)
|
||||
i = GetBattlerAbility(gBattlerAbility);
|
||||
if (IsBattlerAlive(gBattlerAbility)
|
||||
&& (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY)
|
||||
&& GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD)
|
||||
&& GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD
|
||||
&& !gAbilities[gBattleMons[battler].ability].cantBeCopied)
|
||||
{
|
||||
switch (gBattleMons[battler].ability)
|
||||
{ // Can't copy these abilities.
|
||||
case ABILITY_POWER_OF_ALCHEMY: case ABILITY_RECEIVER:
|
||||
case ABILITY_FORECAST: case ABILITY_MULTITYPE:
|
||||
case ABILITY_FLOWER_GIFT: case ABILITY_ILLUSION:
|
||||
case ABILITY_WONDER_GUARD: case ABILITY_ZEN_MODE:
|
||||
case ABILITY_STANCE_CHANGE: case ABILITY_IMPOSTER:
|
||||
case ABILITY_POWER_CONSTRUCT: case ABILITY_BATTLE_BOND:
|
||||
case ABILITY_SCHOOLING: case ABILITY_COMATOSE:
|
||||
case ABILITY_SHIELDS_DOWN: case ABILITY_DISGUISE:
|
||||
case ABILITY_RKS_SYSTEM: case ABILITY_TRACE:
|
||||
case ABILITY_ZERO_TO_HERO:
|
||||
break;
|
||||
default:
|
||||
gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPush(cmd->nextInstr);
|
||||
gBattlescriptCurrInstr = BattleScript_ReceiverActivates;
|
||||
return;
|
||||
}
|
||||
gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPush(cmd->nextInstr);
|
||||
gBattlescriptCurrInstr = BattleScript_ReceiverActivates;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -9315,7 +9310,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_SET_SIMPLE_BEAM:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
if (IsSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)
|
||||
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten
|
||||
|| gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE)
|
||||
{
|
||||
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
|
||||
@ -9339,8 +9334,8 @@ static void Cmd_various(void)
|
||||
case VARIOUS_TRY_ENTRAINMENT:
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability)
|
||||
|| IsEntrainmentBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
if (gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeCopied
|
||||
|| gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten)
|
||||
{
|
||||
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
@ -10250,12 +10245,6 @@ static void Cmd_various(void)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
return;
|
||||
}
|
||||
case VARIOUS_PHOTON_GEYSER_CHECK:
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battler) == BATTLE_CATEGORY_SPECIAL);
|
||||
break;
|
||||
}
|
||||
case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment
|
||||
{
|
||||
VARIOUS_ARGS();
|
||||
@ -10725,6 +10714,11 @@ static void Cmd_setprotectlike(void)
|
||||
gProtectStructs[gBattlerAttacker].silkTrapped = TRUE;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
|
||||
}
|
||||
else if (gCurrentMove == MOVE_BURNING_BULWARK)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].burningBulwarked = TRUE;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
|
||||
}
|
||||
|
||||
gDisableStructs[gBattlerAttacker].protectUses++;
|
||||
fail = FALSE;
|
||||
@ -11807,7 +11801,7 @@ static void Cmd_forcerandomswitch(void)
|
||||
{
|
||||
firstMonId = 0;
|
||||
lastMonId = PARTY_SIZE;
|
||||
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles
|
||||
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one Pokémon out in single battles
|
||||
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget];
|
||||
}
|
||||
|
||||
@ -12357,7 +12351,7 @@ static void Cmd_setsubstitute(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; // one bit value will only work for pokemon which max hp can go to 1020(which is more than possible in games)
|
||||
gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; // one bit value will only work for Pokémon which max hp can go to 1020(which is more than possible in games)
|
||||
if (gBattleMoveDamage == 0)
|
||||
gBattleMoveDamage = 1;
|
||||
|
||||
@ -13853,7 +13847,7 @@ static void Cmd_tryswapitems(void)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
// can't swap if two pokemon don't have an item
|
||||
// can't swap if two Pokémon don't have an item
|
||||
// or if either of them is an enigma berry or a mail
|
||||
else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE)
|
||||
|| !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item)
|
||||
@ -13938,9 +13932,9 @@ static void Cmd_trycopyability(void)
|
||||
|
||||
if (gBattleMons[battler].ability == defAbility
|
||||
|| defAbility == ABILITY_NONE
|
||||
|| IsRolePlayDoodleBannedAbilityAttacker(gBattleMons[battler].ability)
|
||||
|| IsRolePlayDoodleBannedAbilityAttacker(gBattleMons[BATTLE_PARTNER(battler)].ability)
|
||||
|| IsRolePlayDoodleBannedAbility(defAbility))
|
||||
|| gAbilities[gBattleMons[battler].ability].cantBeSuppressed
|
||||
|| gAbilities[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed
|
||||
|| gAbilities[defAbility].cantBeCopied)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
@ -14016,7 +14010,7 @@ static void Cmd_setgastroacid(void)
|
||||
{
|
||||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSuppressed)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
}
|
||||
@ -14116,8 +14110,8 @@ static void Cmd_tryswapabilities(void)
|
||||
{
|
||||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability)
|
||||
|| IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
if (gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeSwapped
|
||||
|| gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSwapped)
|
||||
{
|
||||
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
@ -15476,7 +15470,8 @@ static void Cmd_tryworryseed(void)
|
||||
{
|
||||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
if (gAbilities[gBattleMons[gBattlerTarget].ability].cantBeOverwritten
|
||||
|| gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA)
|
||||
{
|
||||
RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
@ -16575,3 +16570,10 @@ void BS_AllySwitchFailChance(void)
|
||||
}
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
void BS_SetPhotonGeyserCategory(void)
|
||||
{
|
||||
NATIVE_ARGS();
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == BATTLE_CATEGORY_PHYSICAL);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ EWRAM_DATA static u8 *sTrainerBBattleScriptRetAddr = NULL;
|
||||
EWRAM_DATA static bool8 sShouldCheckTrainerBScript = FALSE;
|
||||
EWRAM_DATA static u8 sNoOfPossibleTrainerRetScripts = 0;
|
||||
|
||||
// The first transition is used if the enemy pokemon are lower level than our pokemon.
|
||||
// The first transition is used if the enemy Pokémon are lower level than our Pokémon.
|
||||
// Otherwise, the second transition is used.
|
||||
static const u8 sBattleTransitionTable_Wild[][2] =
|
||||
{
|
||||
@ -908,7 +908,7 @@ u8 GetTrainerBattleTransition(void)
|
||||
return B_TRANSITION_AQUA;
|
||||
|
||||
if (gTrainers[gTrainerBattleOpponent_A].doubleBattle == TRUE)
|
||||
minPartyCount = 2; // double battles always at least have 2 pokemon.
|
||||
minPartyCount = 2; // double battles always at least have 2 Pokémon.
|
||||
else
|
||||
minPartyCount = 1;
|
||||
|
||||
|
||||
@ -309,7 +309,7 @@ static void GenerateInitialRentalMons(void)
|
||||
i = 0;
|
||||
while (i != PARTY_SIZE)
|
||||
{
|
||||
// Cannot have two pokemon of the same species.
|
||||
// Cannot have two Pokémon of the same species.
|
||||
monSetId = Random() % NUM_SLATEPORT_TENT_MONS;
|
||||
for (j = firstMonId; j < firstMonId + i; j++)
|
||||
{
|
||||
@ -390,7 +390,7 @@ static void GenerateOpponentMons(void)
|
||||
{
|
||||
sRandMonId = monSet[Random() % numMons];
|
||||
|
||||
// Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player
|
||||
// Ensure none of the opponent's Pokémon are the same as the potential rental Pokémon for the player
|
||||
for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++)
|
||||
{
|
||||
if (gFacilityTrainerMons[sRandMonId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
|
||||
|
||||
@ -1646,8 +1646,8 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
}
|
||||
|
||||
// Regular battle frontier trainer.
|
||||
// Attempt to fill the trainer's party with random Pokemon until 3 have been
|
||||
// successfully chosen. The trainer's party may not have duplicate pokemon species
|
||||
// Attempt to fill the trainer's party with random Pokémon until 3 have been
|
||||
// successfully chosen. The trainer's party may not have duplicate Pokémon species
|
||||
// or duplicate held items.
|
||||
for (bfMonCount = 0; monSet[bfMonCount] != 0xFFFF; bfMonCount++)
|
||||
;
|
||||
@ -1657,12 +1657,12 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
{
|
||||
u16 monId = monSet[Random() % bfMonCount];
|
||||
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
// "High tier" Pokémon are only allowed on open level mode
|
||||
// 20 is not a possible value for level here
|
||||
if ((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER)
|
||||
continue;
|
||||
|
||||
// Ensure this pokemon species isn't a duplicate.
|
||||
// Ensure this Pokémon species isn't a duplicate.
|
||||
for (j = 0; j < i + firstMonId; j++)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species)
|
||||
@ -1681,7 +1681,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
if (j != i + firstMonId)
|
||||
continue;
|
||||
|
||||
// Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary
|
||||
// Ensure this exact Pokémon index isn't a duplicate. This check doesn't seem necessary
|
||||
// because the species and held items were already checked directly above.
|
||||
for (j = 0; j < i; j++)
|
||||
{
|
||||
@ -1693,7 +1693,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
|
||||
chosenMonIndices[i] = monId;
|
||||
|
||||
// Place the chosen pokemon into the trainer's party.
|
||||
// Place the chosen Pokémon into the trainer's party.
|
||||
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
|
||||
gFacilityTrainerMons[monId].species,
|
||||
level,
|
||||
@ -1703,7 +1703,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
otID);
|
||||
|
||||
friendship = MAX_FRIENDSHIP;
|
||||
// Give the chosen pokemon its specified moves.
|
||||
// Give the chosen Pokémon its specified moves.
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
|
||||
@ -1714,7 +1714,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
|
||||
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
|
||||
// The pokemon was successfully added to the trainer's party, so it's safe to move on to
|
||||
// The Pokémon was successfully added to the trainer's party, so it's safe to move on to
|
||||
// the next party slot.
|
||||
i++;
|
||||
}
|
||||
@ -1770,7 +1770,7 @@ u16 GetRandomFrontierMonFromSet(u16 trainerId)
|
||||
|
||||
do
|
||||
{
|
||||
// "High tier" pokemon are only allowed on open level mode
|
||||
// "High tier" Pokémon are only allowed on open level mode
|
||||
// 20 is not a possible value for level here
|
||||
monId = monSet[Random() % numMons];
|
||||
} while((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER);
|
||||
@ -2443,8 +2443,8 @@ static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId)
|
||||
// These partners can be an NPC or a former/record-mixed Apprentice
|
||||
// When talked to, their response consists of:
|
||||
// PARTNER_MSGID_INTRO - A greeting
|
||||
// PARTNER_MSGID_MON1 - Naming one pokemon on their team, and a move it has
|
||||
// PARTNER_MSGID_MON2_ASK - Naming a second pokemon on their team, a move it has, and asking if they'd like to be their partner
|
||||
// PARTNER_MSGID_MON1 - Naming one Pokémon on their team, and a move it has
|
||||
// PARTNER_MSGID_MON2_ASK - Naming a second Pokémon on their team, a move it has, and asking if they'd like to be their partner
|
||||
// PARTNER_MSGID_ACCEPT - If the player agrees to be their partner
|
||||
// PARTNER_MSGID_REJECT - If the player declines to be their partner
|
||||
static void ShowPartnerCandidateMessage(void)
|
||||
@ -2762,7 +2762,7 @@ static void AwardBattleTowerRibbons(void)
|
||||
#ifdef BUGFIX
|
||||
struct RibbonCounter ribbons[MAX_FRONTIER_PARTY_SIZE];
|
||||
#else
|
||||
struct RibbonCounter ribbons[3]; // BUG: 4 Pokemon can receive ribbons in a double battle mode.
|
||||
struct RibbonCounter ribbons[3]; // BUG: 4 Pokémon can receive ribbons in a double battle mode.
|
||||
#endif
|
||||
u8 ribbonType = 0;
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
@ -3458,7 +3458,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
{
|
||||
u16 monId = monSet[Random() % bfMonCount];
|
||||
|
||||
// Ensure this pokemon species isn't a duplicate.
|
||||
// Ensure this Pokémon species isn't a duplicate.
|
||||
for (j = 0; j < i + firstMonId; j++)
|
||||
{
|
||||
if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species)
|
||||
@ -3477,7 +3477,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
if (j != i + firstMonId)
|
||||
continue;
|
||||
|
||||
// Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary
|
||||
// Ensure this exact Pokémon index isn't a duplicate. This check doesn't seem necessary
|
||||
// because the species and held items were already checked directly above.
|
||||
for (j = 0; j < i; j++)
|
||||
{
|
||||
@ -3489,7 +3489,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
|
||||
chosenMonIndices[i] = monId;
|
||||
|
||||
// Place the chosen pokemon into the trainer's party.
|
||||
// Place the chosen Pokémon into the trainer's party.
|
||||
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
|
||||
gFacilityTrainerMons[monId].species,
|
||||
level,
|
||||
@ -3499,7 +3499,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
otID);
|
||||
|
||||
friendship = MAX_FRIENDSHIP;
|
||||
// Give the chosen pokemon its specified moves.
|
||||
// Give the chosen Pokémon its specified moves.
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
|
||||
@ -3510,7 +3510,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
|
||||
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
|
||||
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
|
||||
|
||||
// The pokemon was successfully added to the trainer's party, so it's safe to move on to
|
||||
// The Pokémon was successfully added to the trainer's party, so it's safe to move on to
|
||||
// the next party slot.
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -699,7 +699,7 @@ static const u16 *const sPointsArray[] =
|
||||
};
|
||||
|
||||
// Points will always be calculated for these messages
|
||||
// even if current pokemon does not have corresponding move
|
||||
// even if current Pokémon does not have corresponding move
|
||||
static const u16 sSpecialBattleStrings[] =
|
||||
{
|
||||
STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE,
|
||||
|
||||
@ -94,224 +94,6 @@ static const u8 sPkblToEscapeFactor[][3] = {
|
||||
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
||||
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
||||
|
||||
static const u16 sSkillSwapBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_NEUTRALIZING_GAS,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_WONDER_GUARD,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sRolePlayDoodleBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_FLOWER_GIFT,
|
||||
ABILITY_FORECAST,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_IMPOSTER,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_NEUTRALIZING_GAS,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_POWER_OF_ALCHEMY,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RECEIVER,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_TRACE,
|
||||
ABILITY_WONDER_GUARD,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sRolePlayDoodleBannedAttackerAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sWorrySeedBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_INSOMNIA,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_TRUANT,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sGastroAcidBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sEntrainmentBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_TRUANT,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sEntrainmentBannedAttackerAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_FLOWER_GIFT,
|
||||
ABILITY_FORECAST,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_IMPOSTER,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_NEUTRALIZING_GAS,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_POWER_OF_ALCHEMY,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RECEIVER,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_TRACE,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static const u16 sSimpleBeamBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_COMMANDER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_HADRON_ENGINE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ORICHALCUM_PULSE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_PROTOSYNTHESIS,
|
||||
ABILITY_QUARK_DRIVE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_SIMPLE,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_TRUANT,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
static u8 CalcBeatUpPower(void)
|
||||
{
|
||||
u8 basePower;
|
||||
@ -985,114 +767,6 @@ void HandleAction_ActionFinished(void)
|
||||
}
|
||||
}
|
||||
|
||||
static const u8 sAbilitiesAffectedByMoldBreaker[] =
|
||||
{
|
||||
[ABILITY_BATTLE_ARMOR] = 1,
|
||||
[ABILITY_CLEAR_BODY] = 1,
|
||||
[ABILITY_DAMP] = 1,
|
||||
[ABILITY_DRY_SKIN] = 1,
|
||||
[ABILITY_FILTER] = 1,
|
||||
[ABILITY_FLASH_FIRE] = 1,
|
||||
[ABILITY_FLOWER_GIFT] = 1,
|
||||
[ABILITY_HEATPROOF] = 1,
|
||||
[ABILITY_HYPER_CUTTER] = 1,
|
||||
[ABILITY_IMMUNITY] = 1,
|
||||
[ABILITY_INNER_FOCUS] = 1,
|
||||
[ABILITY_INSOMNIA] = 1,
|
||||
[ABILITY_KEEN_EYE] = 1,
|
||||
[ABILITY_LEAF_GUARD] = 1,
|
||||
[ABILITY_LEVITATE] = 1,
|
||||
[ABILITY_LIGHTNING_ROD] = 1,
|
||||
[ABILITY_LIMBER] = 1,
|
||||
[ABILITY_MAGMA_ARMOR] = 1,
|
||||
[ABILITY_MARVEL_SCALE] = 1,
|
||||
[ABILITY_MOTOR_DRIVE] = 1,
|
||||
[ABILITY_OBLIVIOUS] = 1,
|
||||
[ABILITY_OWN_TEMPO] = 1,
|
||||
[ABILITY_SAND_VEIL] = 1,
|
||||
[ABILITY_SHELL_ARMOR] = 1,
|
||||
[ABILITY_SHIELD_DUST] = 1,
|
||||
[ABILITY_SIMPLE] = 1,
|
||||
[ABILITY_SNOW_CLOAK] = 1,
|
||||
[ABILITY_SOLID_ROCK] = 1,
|
||||
[ABILITY_SOUNDPROOF] = 1,
|
||||
[ABILITY_STICKY_HOLD] = 1,
|
||||
[ABILITY_STORM_DRAIN] = 1,
|
||||
[ABILITY_STURDY] = 1,
|
||||
[ABILITY_SUCTION_CUPS] = 1,
|
||||
[ABILITY_TANGLED_FEET] = 1,
|
||||
[ABILITY_THICK_FAT] = 1,
|
||||
[ABILITY_UNAWARE] = 1,
|
||||
[ABILITY_VITAL_SPIRIT] = 1,
|
||||
[ABILITY_VOLT_ABSORB] = 1,
|
||||
[ABILITY_WATER_ABSORB] = 1,
|
||||
[ABILITY_WATER_VEIL] = 1,
|
||||
[ABILITY_WHITE_SMOKE] = 1,
|
||||
[ABILITY_WONDER_GUARD] = 1,
|
||||
[ABILITY_BIG_PECKS] = 1,
|
||||
[ABILITY_CONTRARY] = 1,
|
||||
[ABILITY_FRIEND_GUARD] = 1,
|
||||
[ABILITY_HEAVY_METAL] = 1,
|
||||
[ABILITY_LIGHT_METAL] = 1,
|
||||
[ABILITY_MAGIC_BOUNCE] = 1,
|
||||
[ABILITY_MULTISCALE] = 1,
|
||||
[ABILITY_SAP_SIPPER] = 1,
|
||||
[ABILITY_TELEPATHY] = 1,
|
||||
[ABILITY_WONDER_SKIN] = 1,
|
||||
[ABILITY_AROMA_VEIL] = 1,
|
||||
[ABILITY_BULLETPROOF] = 1,
|
||||
[ABILITY_FLOWER_VEIL] = 1,
|
||||
[ABILITY_FUR_COAT] = 1,
|
||||
[ABILITY_OVERCOAT] = 1,
|
||||
[ABILITY_SWEET_VEIL] = 1,
|
||||
[ABILITY_DAZZLING] = 1,
|
||||
[ABILITY_DISGUISE] = 1,
|
||||
[ABILITY_FLUFFY] = 1,
|
||||
[ABILITY_QUEENLY_MAJESTY] = 1,
|
||||
[ABILITY_WATER_BUBBLE] = 1,
|
||||
[ABILITY_MIRROR_ARMOR] = 1,
|
||||
[ABILITY_PUNK_ROCK] = 1,
|
||||
[ABILITY_ICE_SCALES] = 1,
|
||||
[ABILITY_ICE_FACE] = 1,
|
||||
[ABILITY_PASTEL_VEIL] = 1,
|
||||
[ABILITY_ARMOR_TAIL] = 1,
|
||||
[ABILITY_EARTH_EATER] = 1,
|
||||
[ABILITY_GOOD_AS_GOLD] = 1,
|
||||
[ABILITY_PURIFYING_SALT] = 1,
|
||||
[ABILITY_WELL_BAKED_BODY] = 1,
|
||||
[ABILITY_MINDS_EYE] = 1,
|
||||
[ABILITY_ILLUMINATE] = 1,
|
||||
};
|
||||
|
||||
static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] =
|
||||
{
|
||||
[ABILITY_AS_ONE_ICE_RIDER] = 1,
|
||||
[ABILITY_AS_ONE_SHADOW_RIDER] = 1,
|
||||
[ABILITY_BATTLE_BOND] = 1,
|
||||
[ABILITY_COMATOSE] = 1,
|
||||
[ABILITY_DISGUISE] = 1,
|
||||
[ABILITY_FLOWER_GIFT] = 1,
|
||||
[ABILITY_FORECAST] = 1,
|
||||
[ABILITY_GULP_MISSILE] = 1,
|
||||
[ABILITY_HUNGER_SWITCH] = 1,
|
||||
[ABILITY_ICE_FACE] = 1,
|
||||
[ABILITY_ILLUSION] = 1,
|
||||
[ABILITY_IMPOSTER] = 1,
|
||||
[ABILITY_MULTITYPE] = 1,
|
||||
[ABILITY_NEUTRALIZING_GAS] = 1,
|
||||
[ABILITY_NONE] = 1,
|
||||
[ABILITY_POWER_CONSTRUCT] = 1,
|
||||
[ABILITY_POWER_OF_ALCHEMY] = 1,
|
||||
[ABILITY_RECEIVER] = 1,
|
||||
[ABILITY_RKS_SYSTEM] = 1,
|
||||
[ABILITY_SCHOOLING] = 1,
|
||||
[ABILITY_SHIELDS_DOWN] = 1,
|
||||
[ABILITY_STANCE_CHANGE] = 1,
|
||||
[ABILITY_TRACE] = 1,
|
||||
[ABILITY_ZEN_MODE] = 1,
|
||||
[ABILITY_ZERO_TO_HERO] = 1,
|
||||
};
|
||||
|
||||
static const u8 sHoldEffectToType[][2] =
|
||||
{
|
||||
{HOLD_EFFECT_BUG_POWER, TYPE_BUG},
|
||||
@ -2870,7 +2544,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
{
|
||||
MAGIC_GUARD_CHECK;
|
||||
// R/S does not perform this sleep check, which causes the nightmare effect to
|
||||
// persist even after the affected Pokemon has been awakened by Shed Skin.
|
||||
// persist even after the affected Pokémon has been awakened by Shed Skin.
|
||||
if (gBattleMons[battler].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4;
|
||||
@ -2959,7 +2633,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
}
|
||||
if (gBattlerAttacker != gBattlersCount)
|
||||
{
|
||||
effect = 2; // a pokemon was awaken
|
||||
effect = 2; // a Pokémon was awaken
|
||||
break;
|
||||
}
|
||||
else
|
||||
@ -3023,7 +2697,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
if (gDisableStructs[battler].disabledMove == gBattleMons[battler].moves[i])
|
||||
break;
|
||||
}
|
||||
if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore
|
||||
if (i == MAX_MON_MOVES) // Pokémon does not have the disabled move anymore
|
||||
{
|
||||
gDisableStructs[battler].disabledMove = 0;
|
||||
gDisableStructs[battler].disableTimer = 0;
|
||||
@ -3040,7 +2714,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
case ENDTURN_ENCORE: // encore
|
||||
if (gDisableStructs[battler].encoreTimer != 0)
|
||||
{
|
||||
if (gBattleMons[battler].moves[gDisableStructs[battler].encoredMovePos] != gDisableStructs[battler].encoredMove) // pokemon does not have the encored move anymore
|
||||
if (gBattleMons[battler].moves[gDisableStructs[battler].encoredMovePos] != gDisableStructs[battler].encoredMove) // Pokémon does not have the encored move anymore
|
||||
{
|
||||
gDisableStructs[battler].encoredMove = 0;
|
||||
gDisableStructs[battler].encoreTimer = 0;
|
||||
@ -3429,7 +3103,8 @@ bool32 HandleFaintedMonActions(void)
|
||||
&& gCurrentTurnActionNumber != gBattlersCount)
|
||||
{
|
||||
gAbsentBattlerFlags |= gBitTable[gBattlerFainted];
|
||||
return FALSE;
|
||||
if (gBattleStruct->faintedActionsState != 1)
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
@ -4368,7 +4043,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
{
|
||||
// overworld weather started rain, so just do electric terrain anim
|
||||
gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain);
|
||||
effect++;
|
||||
}
|
||||
@ -4377,7 +4052,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
&& !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
|
||||
{
|
||||
gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain);
|
||||
effect++;
|
||||
}
|
||||
@ -4792,6 +4467,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT))
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
|
||||
effect++;
|
||||
}
|
||||
@ -5117,6 +4793,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case ABILITY_POWER_CONSTRUCT:
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT))
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
|
||||
effect++;
|
||||
}
|
||||
@ -5138,6 +4815,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case ABILITY_HUNGER_SWITCH:
|
||||
if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_TURN_END))
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
|
||||
effect++;
|
||||
}
|
||||
@ -5455,34 +5133,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
&& TARGET_TURN_DAMAGED
|
||||
&& IsMoveMakingContact(move, gBattlerAttacker)
|
||||
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget))
|
||||
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget)
|
||||
&& gBattleMons[gBattlerTarget].ability != ABILITY_MUMMY
|
||||
&& gBattleMons[gBattlerTarget].ability != ABILITY_LINGERING_AROMA
|
||||
&& !gAbilities[gBattleMons[gBattlerTarget].ability].cantBeSuppressed)
|
||||
{
|
||||
switch (gBattleMons[gBattlerAttacker].ability)
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
{
|
||||
case ABILITY_MUMMY:
|
||||
case ABILITY_BATTLE_BOND:
|
||||
case ABILITY_COMATOSE:
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_MULTITYPE:
|
||||
case ABILITY_POWER_CONSTRUCT:
|
||||
case ABILITY_RKS_SYSTEM:
|
||||
case ABILITY_SCHOOLING:
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
break;
|
||||
default:
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
{
|
||||
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
|
||||
break;
|
||||
}
|
||||
|
||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MummyActivates;
|
||||
effect++;
|
||||
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
|
||||
break;
|
||||
}
|
||||
|
||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MummyActivates;
|
||||
effect++;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ABILITY_WANDERING_SPIRIT:
|
||||
@ -5490,40 +5156,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
&& TARGET_TURN_DAMAGED
|
||||
&& IsMoveMakingContact(move, gBattlerAttacker)
|
||||
&& !IsDynamaxed(gBattlerTarget))
|
||||
&& !IsDynamaxed(gBattlerTarget)
|
||||
&& !gAbilities[gBattleMons[gBattlerAttacker].ability].cantBeSwapped)
|
||||
{
|
||||
switch (gBattleMons[gBattlerAttacker].ability)
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
{
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_FLOWER_GIFT:
|
||||
case ABILITY_GULP_MISSILE:
|
||||
case ABILITY_HUNGER_SWITCH:
|
||||
case ABILITY_ICE_FACE:
|
||||
case ABILITY_ILLUSION:
|
||||
case ABILITY_IMPOSTER:
|
||||
case ABILITY_RECEIVER:
|
||||
case ABILITY_RKS_SYSTEM:
|
||||
case ABILITY_SCHOOLING:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
case ABILITY_WONDER_GUARD:
|
||||
case ABILITY_ZEN_MODE:
|
||||
case ABILITY_ZERO_TO_HERO:
|
||||
break;
|
||||
default:
|
||||
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
|
||||
{
|
||||
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
|
||||
break;
|
||||
}
|
||||
|
||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
||||
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
|
||||
effect++;
|
||||
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD);
|
||||
break;
|
||||
}
|
||||
|
||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
||||
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
|
||||
effect++;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ABILITY_ANGER_POINT:
|
||||
@ -6142,23 +5790,23 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
if (gBattleMons[i].ability == ABILITY_TRACE && (gBattleResources->flags->flags[i] & RESOURCE_FLAG_TRACED))
|
||||
{
|
||||
u32 chosenTarget;
|
||||
u32 side = (BATTLE_OPPOSITE(GetBattlerPosition(i))) & BIT_SIDE; // side of the opposing pokemon
|
||||
u32 side = (BATTLE_OPPOSITE(GetBattlerPosition(i))) & BIT_SIDE; // side of the opposing Pokémon
|
||||
u32 target1 = GetBattlerAtPosition(side);
|
||||
u32 target2 = GetBattlerAtPosition(side + BIT_FLANK);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0
|
||||
&& !sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
|
||||
if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0
|
||||
&& !gAbilities[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0)
|
||||
chosenTarget = GetBattlerAtPosition((RandomPercentage(RNG_TRACE, 50) * 2) | side), effect++;
|
||||
else if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
|
||||
else if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0)
|
||||
chosenTarget = target1, effect++;
|
||||
else if (!sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
|
||||
else if (!gAbilities[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0)
|
||||
chosenTarget = target2, effect++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
|
||||
if (!gAbilities[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0)
|
||||
chosenTarget = target1, effect++;
|
||||
}
|
||||
|
||||
@ -6320,35 +5968,6 @@ bool32 TryPrimalReversion(u32 battler)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const u16 sNeutralizingGasBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ZERO_TO_HERO,
|
||||
};
|
||||
|
||||
bool32 IsNeutralizingGasBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sNeutralizingGasBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sNeutralizingGasBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsNeutralizingGasOnField(void)
|
||||
{
|
||||
u32 i;
|
||||
@ -6382,10 +6001,13 @@ bool32 IsMoldBreakerTypeAbility(u32 ability)
|
||||
|
||||
u32 GetBattlerAbility(u32 battler)
|
||||
{
|
||||
if (gAbilities[gBattleMons[battler].ability].cantBeSuppressed)
|
||||
return gBattleMons[battler].ability;
|
||||
|
||||
if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
|
||||
return ABILITY_NONE;
|
||||
|
||||
if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battler].ability))
|
||||
if (IsNeutralizingGasOnField() && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS)
|
||||
return ABILITY_NONE;
|
||||
|
||||
if (IsMyceliumMightOnField())
|
||||
@ -6394,7 +6016,7 @@ u32 GetBattlerAbility(u32 battler)
|
||||
if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability)
|
||||
&& !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID))
|
||||
|| gBattleMoves[gCurrentMove].ignoresTargetAbility)
|
||||
&& sAbilitiesAffectedByMoldBreaker[gBattleMons[battler].ability]
|
||||
&& gAbilities[gBattleMons[battler].ability].breakable
|
||||
&& gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker
|
||||
&& gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE
|
||||
&& gCurrentTurnActionNumber < gBattlersCount)
|
||||
@ -8492,6 +8114,8 @@ bool32 IsBattlerProtected(u32 battler, u32 move)
|
||||
return TRUE;
|
||||
else if (gProtectStructs[battler].banefulBunkered)
|
||||
return TRUE;
|
||||
else if (gProtectStructs[battler].burningBulwarked)
|
||||
return TRUE;
|
||||
else if ((gProtectStructs[battler].obstructed || gProtectStructs[battler].silkTrapped) && !IS_MOVE_STATUS(move))
|
||||
return TRUE;
|
||||
else if (gProtectStructs[battler].spikyShielded)
|
||||
@ -8998,6 +8622,10 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
|
||||
basePower += 50 * gBattleStruct->timesGotHit[GetBattlerSide(battlerAtk)][gBattlerPartyIndexes[battlerAtk]];
|
||||
basePower = (basePower > 350) ? 350 : basePower;
|
||||
break;
|
||||
case EFFECT_FICKLE_BEAM:
|
||||
if (RandomPercentage(RNG_FICKLE_BEAM, 30))
|
||||
basePower *= 2;
|
||||
break;
|
||||
}
|
||||
|
||||
// Move-specific base power changes
|
||||
@ -10943,95 +10571,6 @@ bool32 CanFling(u32 battler)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Ability checks
|
||||
bool32 IsSkillSwapBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sSkillSwapBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsRolePlayDoodleBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sRolePlayDoodleBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sRolePlayDoodleBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsRolePlayDoodleBannedAbilityAttacker(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sRolePlayDoodleBannedAttackerAbilities); i++)
|
||||
{
|
||||
if (ability == sRolePlayDoodleBannedAttackerAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsWorrySeedBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sWorrySeedBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsGastroAcidBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sGastroAcidBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsEntrainmentBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sEntrainmentBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++)
|
||||
{
|
||||
if (ability == sEntrainmentBannedAttackerAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsSimpleBeamBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sSimpleBeamBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sSimpleBeamBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Sort an array of battlers by speed
|
||||
// Useful for effects like pickpocket, eject button, red card, dancer
|
||||
void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast)
|
||||
|
||||
@ -20,7 +20,7 @@ bool16 ScriptGetPokedexInfo(void)
|
||||
return IsNationalPokedexEnabled();
|
||||
}
|
||||
|
||||
// This shows your Hoenn Pokedex rating and not your National Dex.
|
||||
// This shows your Hoenn Pokédex rating and not your National Dex.
|
||||
const u8 *GetPokedexRatingText(u16 count)
|
||||
{
|
||||
if (count < 10)
|
||||
|
||||
@ -194,7 +194,7 @@ static void SwapMoveDescAndContestTilemaps(void);
|
||||
#define CONTESTANT_TEXT_COLOR_START 10
|
||||
|
||||
enum {
|
||||
// The "{Pokemon Name} / {Trainer Name}" windows.
|
||||
// The "{Pokémon Name} / {Trainer Name}" windows.
|
||||
WIN_CONTESTANT0_NAME,
|
||||
WIN_CONTESTANT1_NAME,
|
||||
WIN_CONTESTANT2_NAME,
|
||||
@ -3429,11 +3429,11 @@ static void RankContestants(void)
|
||||
|
||||
// For each contestant, find the best rank with their point total.
|
||||
// Normally, each point total is different, and this will output the
|
||||
// rankings as expected. However, if two pokemon are tied, then they
|
||||
// rankings as expected. However, if two Pokémon are tied, then they
|
||||
// both get the best rank for that point total.
|
||||
//
|
||||
// For example if the point totals are [100, 80, 80, 50], the ranks will
|
||||
// be [1, 2, 2, 4]. The pokemon with a point total of 80 stop looking
|
||||
// be [1, 2, 2, 4]. The Pokémon with a point total of 80 stop looking
|
||||
// when they see the first 80 in the array, so they both share the '2'
|
||||
// rank.
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
@ -4585,10 +4585,10 @@ void MakeContestantNervous(u8 p)
|
||||
// ContestantStatus::nextTurnOrder field of each contestant. The remaining
|
||||
// turns are assigned such that the turn order will reverse.
|
||||
//
|
||||
// For example, if no pokemon have a defined nextTurnOrder, then the 4th
|
||||
// For example, if no Pokémon have a defined nextTurnOrder, then the 4th
|
||||
// will become 1st, the 3rd will become 2nd, etc.
|
||||
//
|
||||
// Note: This function assumes that multiple pokemon cannot have the same
|
||||
// Note: This function assumes that multiple Pokémon cannot have the same
|
||||
// nextTurnOrder value.
|
||||
static void ApplyNextTurnOrder(void)
|
||||
{
|
||||
|
||||
@ -64,12 +64,12 @@ enum {
|
||||
|
||||
struct CreditsData
|
||||
{
|
||||
u16 monToShow[NUM_MON_SLIDES]; // List of Pokemon species ids that will show during the credits
|
||||
u16 monToShow[NUM_MON_SLIDES]; // List of Pokémon species ids that will show during the credits
|
||||
u16 imgCounter; //how many mon images have been shown
|
||||
u16 nextImgPos; //if the next image spawns left/center/right
|
||||
u16 currShownMon; //index into monToShow
|
||||
u16 numMonToShow; //number of pokemon to show, always NUM_MON_SLIDES after determine function
|
||||
u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught pokemon
|
||||
u16 numMonToShow; //number of Pokémon to show, always NUM_MON_SLIDES after determine function
|
||||
u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught Pokémon
|
||||
u16 numCaughtMon; //count of filled spaces in caughtMonIds
|
||||
u16 unused[7];
|
||||
};
|
||||
@ -1556,8 +1556,8 @@ static void DeterminePokemonToShow(void)
|
||||
u16 dexNum;
|
||||
u16 j;
|
||||
|
||||
// Go through the Pokedex, and anything that has gotten caught we put into our massive array.
|
||||
// This basically packs all of the caught pokemon into the front of the array
|
||||
// Go through the Pokédex, and anything that has gotten caught we put into our massive array.
|
||||
// This basically packs all of the caught Pokémon into the front of the array
|
||||
for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++)
|
||||
{
|
||||
if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT))
|
||||
@ -1571,14 +1571,14 @@ static void DeterminePokemonToShow(void)
|
||||
for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++)
|
||||
sCreditsData->caughtMonIds[dexNum] = NATIONAL_DEX_NONE;
|
||||
|
||||
// Cap the number of pokemon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter)
|
||||
// Cap the number of Pokémon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter)
|
||||
sCreditsData->numCaughtMon = j;
|
||||
if (sCreditsData->numCaughtMon < NUM_MON_SLIDES)
|
||||
sCreditsData->numMonToShow = j;
|
||||
else
|
||||
sCreditsData->numMonToShow = NUM_MON_SLIDES;
|
||||
|
||||
// Loop through our list of caught pokemon and select randomly from it to fill the images to show
|
||||
// Loop through our list of caught Pokémon and select randomly from it to fill the images to show
|
||||
j = 0;
|
||||
do
|
||||
{
|
||||
@ -1599,7 +1599,7 @@ static void DeterminePokemonToShow(void)
|
||||
}
|
||||
while (sCreditsData->numCaughtMon != 0 && j < NUM_MON_SLIDES);
|
||||
|
||||
// If we don't have enough pokemon in the dex to fill everything, copy the selected mon into the end of the array, so it loops
|
||||
// If we don't have enough Pokémon in the dex to fill everything, copy the selected mon into the end of the array, so it loops
|
||||
if (sCreditsData->numMonToShow < NUM_MON_SLIDES)
|
||||
{
|
||||
for (j = sCreditsData->numMonToShow, page = 0; j < NUM_MON_SLIDES; j++)
|
||||
@ -1610,7 +1610,7 @@ static void DeterminePokemonToShow(void)
|
||||
if (page == sCreditsData->numMonToShow)
|
||||
page = 0;
|
||||
}
|
||||
// Ensure the last pokemon is our starter
|
||||
// Ensure the last Pokémon is our starter
|
||||
sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter;
|
||||
}
|
||||
else
|
||||
@ -1618,7 +1618,7 @@ static void DeterminePokemonToShow(void)
|
||||
// Check to see if our starter has already appeared in this list, break if it has
|
||||
for (dexNum = 0; sCreditsData->monToShow[dexNum] != starter && dexNum < NUM_MON_SLIDES; dexNum++);
|
||||
|
||||
// If it has, swap it with the last pokemon, to ensure our starter is the last image
|
||||
// If it has, swap it with the last Pokémon, to ensure our starter is the last image
|
||||
if (dexNum < sCreditsData->numMonToShow - 1)
|
||||
{
|
||||
sCreditsData->monToShow[dexNum] = sCreditsData->monToShow[NUM_MON_SLIDES-1];
|
||||
@ -1626,7 +1626,7 @@ static void DeterminePokemonToShow(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ensure the last pokemon is our starter
|
||||
// Ensure the last Pokémon is our starter
|
||||
sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter;
|
||||
}
|
||||
}
|
||||
|
||||
61
src/crt0.s
61
src/crt0.s
@ -6,22 +6,28 @@
|
||||
|
||||
.align 2, 0
|
||||
Init::
|
||||
@ Set up location for IRQ stack
|
||||
mov r0, #PSR_IRQ_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_irq
|
||||
@ Set up location for system stack
|
||||
mov r0, #PSR_SYS_MODE
|
||||
msr cpsr_cf, r0
|
||||
ldr sp, sp_sys
|
||||
@ Prepare for interrupt handling
|
||||
ldr r1, =INTR_VECTOR
|
||||
adr r0, IntrMain
|
||||
str r0, [r1]
|
||||
.if MODERN
|
||||
@ Dispatch memory reset request to hardware
|
||||
mov r0, #255 @ RESET_ALL
|
||||
svc #1 << 16
|
||||
.endif @ MODERN
|
||||
@ Fill RAM areas with appropriate data
|
||||
bl InitializeWorkingMemory
|
||||
@ Jump to AgbMain
|
||||
ldr r1, =AgbMain + 1
|
||||
mov lr, pc
|
||||
bx r1
|
||||
@ Re-init if AgbMain exits
|
||||
b Init
|
||||
|
||||
.align 2, 0
|
||||
@ -124,3 +130,54 @@ IntrMain_RetAddr:
|
||||
.pool
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
||||
@ Fills initialized IWRAM and EWRAM sections in RAM from LMA areas in ROM
|
||||
InitializeWorkingMemory:
|
||||
push {r0-r3,lr}
|
||||
ldr r0, =__iwram_lma
|
||||
ldr r1, =__iwram_start
|
||||
ldr r2, =__iwram_end
|
||||
cmp r1, r2
|
||||
beq skip_iwram_copy
|
||||
bl CopyMemory_DMA
|
||||
skip_iwram_copy:
|
||||
ldr r0, =__ewram_lma
|
||||
ldr r1, =__ewram_start
|
||||
ldr r2, =__ewram_end
|
||||
cmp r1, r2
|
||||
beq skip_ewram_copy
|
||||
bl CopyMemory_DMA
|
||||
skip_ewram_copy:
|
||||
pop {r0-r3,lr}
|
||||
bx lr
|
||||
|
||||
@ Uses a DMA transfer to load from r0 into r1 until r2
|
||||
CopyMemory_DMA:
|
||||
subs r2, r2, r1
|
||||
lsr r2, r2, #2
|
||||
mov r4, #0x80000000
|
||||
orr r4, r4, #(1 << 26)
|
||||
orr r2, r2, r4
|
||||
ldr r3, =REG_DMA3
|
||||
stmia r3, {r0, r1, r2}
|
||||
bx lr
|
||||
|
||||
.thumb
|
||||
@ Called from C code to reinitialize working memory after a link connection failure
|
||||
ReInitializeEWRAM::
|
||||
ldr r0, =__ewram_lma
|
||||
ldr r1, =__ewram_start
|
||||
ldr r2, =__ewram_end
|
||||
cmp r1, r2
|
||||
beq EndReinitializeEWRAM
|
||||
subs r2, r1
|
||||
movs r3, #1
|
||||
lsls r3, r3, #26
|
||||
orrs r2, r2, r3
|
||||
swi 0x0B
|
||||
EndReinitializeEWRAM:
|
||||
bx lr
|
||||
|
||||
.pool
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
|
||||
@ -220,6 +220,5 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] =
|
||||
};
|
||||
|
||||
#include "data/trainer_parties.h"
|
||||
#include "data/text/trainer_class_names.h"
|
||||
#include "data/trainers.h"
|
||||
#include "data/text/move_names.h"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -4172,7 +4172,7 @@
|
||||
FRONTIER_MON_##lastmon##_10,\
|
||||
-1
|
||||
|
||||
// The strong Psychic M/F trainers all use the below pokemon
|
||||
// The strong Psychic M/F trainers all use the below Pokémon
|
||||
// Additionally they use 1 of 3 legendary trios, and Latios or Latias depending on gender
|
||||
#define FRONTIER_MONS_PSYCHIC_2(lati, legend1, legend2, legend3) \
|
||||
FRONTIER_MON_WOBBUFFET_1, \
|
||||
|
||||
@ -11310,7 +11310,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.accuracy = 100,
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_SPECIAL,
|
||||
.ignoresTargetAbility = TRUE,
|
||||
@ -13887,7 +13887,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_IVY_CUDGEL] =
|
||||
{
|
||||
.effect = EFFECT_CHANGE_TYPE_ON_ITEM,
|
||||
.effect = EFFECT_IVY_CUDGEL,
|
||||
.power = 100,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 100,
|
||||
@ -13897,13 +13897,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.argument = HOLD_EFFECT_MASK,
|
||||
.metronomeBanned = TRUE,
|
||||
},
|
||||
|
||||
[MOVE_ELECTRO_SHOT] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //EFFECT_ELECTRO_SHOT
|
||||
.effect = EFFECT_METEOR_BEAM,
|
||||
.power = 130,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
@ -13934,7 +13933,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FICKLE_BEAM] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //EFFECT_FICKLE_BEAM
|
||||
.effect = EFFECT_FICKLE_BEAM,
|
||||
.power = 80,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 100,
|
||||
@ -13947,7 +13946,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BURNING_BULWARK] =
|
||||
{
|
||||
.effect = EFFECT_PROTECT, // NEEDS ACTUAL PROTECT SIDE EFFECT
|
||||
.effect = EFFECT_PROTECT,
|
||||
.power = 0,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 0,
|
||||
@ -14038,16 +14037,17 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_ALLURING_VOICE] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //EFFECT_ALLURING_VOICE
|
||||
.effect = EFFECT_CONFUSE_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FAIRY,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_SPECIAL,
|
||||
.soundMove = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
.ignoresSubstitute = TRUE,
|
||||
},
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -11292,42 +11292,36 @@ const struct Item gItems[] =
|
||||
{
|
||||
.name = _("CornrstneMask"),
|
||||
.price = 0,
|
||||
.holdEffect = HOLD_EFFECT_MASK,
|
||||
.description = COMPOUND_STRING("Allows Ogerpon to\n"
|
||||
"wield the Rock-\n"
|
||||
"type in battle."),
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
|
||||
.secondaryId = TYPE_ROCK,
|
||||
},
|
||||
|
||||
[ITEM_WELLSPRING_MASK] =
|
||||
{
|
||||
.name = _("WellsprngMask"),
|
||||
.price = 0,
|
||||
.holdEffect = HOLD_EFFECT_MASK,
|
||||
.description = COMPOUND_STRING("Allows Ogerpon to\n"
|
||||
"wield the Water-\n"
|
||||
"type in battle."),
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
|
||||
.secondaryId = TYPE_WATER,
|
||||
},
|
||||
|
||||
[ITEM_HEARTHFLAME_MASK] =
|
||||
{
|
||||
.name = _("HrthflameMask"),
|
||||
.price = 0,
|
||||
.holdEffect = HOLD_EFFECT_MASK,
|
||||
.description = COMPOUND_STRING("Allows Ogerpon to\n"
|
||||
"wield the Fire-\n"
|
||||
"type in battle."),
|
||||
.pocket = POCKET_ITEMS,
|
||||
.type = ITEM_USE_BAG_MENU,
|
||||
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
|
||||
.secondaryId = TYPE_FIRE,
|
||||
},
|
||||
|
||||
[ITEM_HEALTH_MOCHI] =
|
||||
|
||||
@ -64,7 +64,7 @@ static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
|
||||
|
||||
// Each layout array has an array for each of the 6 party slots
|
||||
// The array for each slot has the sprite coords of its various sprites in the following order
|
||||
// Pokemon icon (x, y), held item (x, y), status condition (x, y), menu pokeball (x, y)
|
||||
// Pokémon icon (x, y), held item (x, y), status condition (x, y), menu Poké Ball (x, y)
|
||||
static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
|
||||
{
|
||||
[PARTY_LAYOUT_SINGLE] =
|
||||
@ -953,7 +953,7 @@ static const struct CompressedSpritePalette sSpritePalette_MenuPokeball =
|
||||
gPartyMenuPokeball_Pal, TAG_POKEBALL
|
||||
};
|
||||
|
||||
// Used for the pokeball sprite on each party slot / Cancel button
|
||||
// Used for the Poké Ball sprite on each party slot / Cancel button
|
||||
static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
|
||||
{
|
||||
.tileTag = TAG_POKEBALL,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#define SQUARE(n)(n * n)
|
||||
#define CUBE(n)(n * n * n)
|
||||
#define SQUARE(n)((n) * (n))
|
||||
#define CUBE(n)((n) * (n) * (n))
|
||||
|
||||
#define EXP_SLOW(n)((5 * CUBE(n)) / 4) // (5 * (n)^3) / 4
|
||||
#define EXP_FAST(n)((4 * CUBE(n)) / 5) // (4 * (n)^3) / 5
|
||||
|
||||
@ -1092,5 +1092,14 @@ static const struct FormChange sOgerponFormChangeTable[] = {
|
||||
};
|
||||
#endif //P_FAMILY_OGERPON
|
||||
|
||||
#if P_FAMILY_TERAPAGOS
|
||||
static const struct FormChange sTerapagosFormChangeTable[] = {
|
||||
{FORM_CHANGE_BEGIN_BATTLE, SPECIES_TERAPAGOS_TERASTAL}, //needs to be tied to the ability
|
||||
//{FORM_CHANGE_TERASTALLIZATION, SPECIES_TERAPAGOS_STELLAR},
|
||||
{FORM_CHANGE_END_BATTLE, SPECIES_TERAPAGOS_NORMAL},
|
||||
{FORM_CHANGE_TERMINATOR},
|
||||
};
|
||||
#endif //P_FAMILY_TERAPAGOS
|
||||
|
||||
#undef WHEN_LEARNED
|
||||
#undef WHEN_FORGOTTEN
|
||||
|
||||
@ -1761,3 +1761,12 @@ static const u16 sOgerponFormSpeciesIdTable[] = {
|
||||
FORM_SPECIES_END,
|
||||
};
|
||||
#endif //P_FAMILY_OGERPON
|
||||
|
||||
#if P_FAMILY_TERAPAGOS
|
||||
static const u16 sTerapagosFormSpeciesIdTable[] = {
|
||||
SPECIES_TERAPAGOS_NORMAL,
|
||||
SPECIES_TERAPAGOS_TERASTAL,
|
||||
SPECIES_TERAPAGOS_STELLAR,
|
||||
FORM_SPECIES_END,
|
||||
};
|
||||
#endif //P_FAMILY_TERAPAGOS
|
||||
|
||||
@ -626,6 +626,10 @@ const u8 *const gItemEffectTable[ITEMS_COUNT] =
|
||||
[ITEM_BLACK_AUGURITE] = gItemEffect_EvoItem,
|
||||
[ITEM_LINKING_CORD] = gItemEffect_EvoItem,
|
||||
[ITEM_PEAT_BLOCK] = gItemEffect_EvoItem,
|
||||
[ITEM_SYRUPY_APPLE] = gItemEffect_EvoItem,
|
||||
[ITEM_UNREMARKABLE_TEACUP] = gItemEffect_EvoItem,
|
||||
[ITEM_MASTERPIECE_TEACUP] = gItemEffect_EvoItem,
|
||||
[ITEM_METAL_ALLOY] = gItemEffect_EvoItem,
|
||||
|
||||
// Berries
|
||||
[ITEM_CHERI_BERRY] = gItemEffect_CheriBerry,
|
||||
|
||||
@ -19855,6 +19855,26 @@ static const struct LevelUpMove sDipplinLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE(44, MOVE_SUBSTITUTE),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
|
||||
static const struct LevelUpMove sHydrappleLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 0, MOVE_FICKLE_BEAM),
|
||||
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
|
||||
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
|
||||
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
|
||||
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
|
||||
LEVEL_UP_MOVE( 4, MOVE_DRAGON_TAIL),
|
||||
LEVEL_UP_MOVE( 8, MOVE_GROWTH),
|
||||
LEVEL_UP_MOVE(12, MOVE_DRAGON_BREATH),
|
||||
LEVEL_UP_MOVE(16, MOVE_PROTECT),
|
||||
LEVEL_UP_MOVE(20, MOVE_BULLET_SEED),
|
||||
LEVEL_UP_MOVE(28, MOVE_SYRUP_BOMB),
|
||||
LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
|
||||
LEVEL_UP_MOVE(36, MOVE_RECOVER),
|
||||
LEVEL_UP_MOVE(40, MOVE_ENERGY_BALL),
|
||||
LEVEL_UP_MOVE(44, MOVE_SUBSTITUTE),
|
||||
LEVEL_UP_MOVE(54, MOVE_POWER_WHIP),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
#endif //P_FAMILY_APPLIN
|
||||
|
||||
@ -20571,6 +20591,26 @@ static const struct LevelUpMove sDuraludonLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
|
||||
#if P_GEN_9_CROSS_EVOS
|
||||
static const struct LevelUpMove sArchaludonLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 0, MOVE_ELECTRO_SHOT),
|
||||
LEVEL_UP_MOVE( 1, MOVE_LEER),
|
||||
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
|
||||
LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH),
|
||||
LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS),
|
||||
LEVEL_UP_MOVE(18, MOVE_METAL_SOUND),
|
||||
LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE),
|
||||
LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
|
||||
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
|
||||
LEVEL_UP_MOVE(42, MOVE_FOCUS_ENERGY),
|
||||
LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW),
|
||||
LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON),
|
||||
LEVEL_UP_MOVE(60, MOVE_METAL_BURST),
|
||||
LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
#endif //P_FAMILY_DURALUDON
|
||||
|
||||
#if P_FAMILY_DREEPY
|
||||
@ -23146,4 +23186,133 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif
|
||||
#endif //P_FAMILY_OGERPON
|
||||
|
||||
#if P_FAMILY_GOUGING_FIRE
|
||||
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_STOMP),
|
||||
LEVEL_UP_MOVE( 1, MOVE_LEER),
|
||||
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
|
||||
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
|
||||
LEVEL_UP_MOVE( 7, MOVE_FIRE_FANG),
|
||||
LEVEL_UP_MOVE(14, MOVE_HOWL),
|
||||
LEVEL_UP_MOVE(21, MOVE_BITE),
|
||||
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
|
||||
LEVEL_UP_MOVE(35, MOVE_CRUSH_CLAW),
|
||||
LEVEL_UP_MOVE(42, MOVE_MORNING_SUN),
|
||||
LEVEL_UP_MOVE(49, MOVE_BURNING_BULWARK),
|
||||
LEVEL_UP_MOVE(56, MOVE_DRAGON_RUSH),
|
||||
LEVEL_UP_MOVE(63, MOVE_FIRE_BLAST),
|
||||
LEVEL_UP_MOVE(70, MOVE_LAVA_PLUME),
|
||||
LEVEL_UP_MOVE(77, MOVE_OUTRAGE),
|
||||
LEVEL_UP_MOVE(84, MOVE_FLARE_BLITZ),
|
||||
LEVEL_UP_MOVE(91, MOVE_RAGING_FURY),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_GOUGING_FIRE
|
||||
|
||||
#if P_FAMILY_RAGING_BOLT
|
||||
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
|
||||
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
|
||||
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
|
||||
LEVEL_UP_MOVE( 1, MOVE_STOMP),
|
||||
LEVEL_UP_MOVE( 7, MOVE_CHARGE),
|
||||
LEVEL_UP_MOVE(14, MOVE_DRAGON_BREATH),
|
||||
LEVEL_UP_MOVE(21, MOVE_ELECTRIC_TERRAIN),
|
||||
LEVEL_UP_MOVE(28, MOVE_DISCHARGE),
|
||||
LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL),
|
||||
LEVEL_UP_MOVE(42, MOVE_CALM_MIND),
|
||||
LEVEL_UP_MOVE(49, MOVE_THUNDERCLAP),
|
||||
LEVEL_UP_MOVE(56, MOVE_DRAGON_HAMMER),
|
||||
LEVEL_UP_MOVE(63, MOVE_RISING_VOLTAGE),
|
||||
LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
|
||||
LEVEL_UP_MOVE(77, MOVE_ZAP_CANNON),
|
||||
LEVEL_UP_MOVE(84, MOVE_BODY_PRESS),
|
||||
LEVEL_UP_MOVE(91, MOVE_THUNDER),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_RAGING_BOLT
|
||||
|
||||
#if P_FAMILY_IRON_BOULDER
|
||||
static const struct LevelUpMove sIronBoulderLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
|
||||
LEVEL_UP_MOVE( 1, MOVE_LEER),
|
||||
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
|
||||
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
|
||||
LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK),
|
||||
LEVEL_UP_MOVE(14, MOVE_SLASH),
|
||||
LEVEL_UP_MOVE(21, MOVE_AGILITY),
|
||||
LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
|
||||
LEVEL_UP_MOVE(35, MOVE_COUNTER),
|
||||
LEVEL_UP_MOVE(42, MOVE_ROCK_TOMB),
|
||||
LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD),
|
||||
LEVEL_UP_MOVE(56, MOVE_MIGHTY_CLEAVE),
|
||||
LEVEL_UP_MOVE(63, MOVE_SWORDS_DANCE),
|
||||
LEVEL_UP_MOVE(70, MOVE_MEGAHORN),
|
||||
LEVEL_UP_MOVE(77, MOVE_QUICK_GUARD),
|
||||
LEVEL_UP_MOVE(84, MOVE_STONE_EDGE),
|
||||
LEVEL_UP_MOVE(91, MOVE_GIGA_IMPACT),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_IRON_BOULDER
|
||||
|
||||
#if P_FAMILY_IRON_CROWN
|
||||
static const struct LevelUpMove sIronCrownLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_LEER),
|
||||
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
|
||||
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
|
||||
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
|
||||
LEVEL_UP_MOVE( 7, MOVE_SMART_STRIKE),
|
||||
LEVEL_UP_MOVE(14, MOVE_SLASH),
|
||||
LEVEL_UP_MOVE(21, MOVE_IRON_DEFENSE),
|
||||
LEVEL_UP_MOVE(28, MOVE_PSYSHOCK),
|
||||
LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT),
|
||||
LEVEL_UP_MOVE(42, MOVE_FLASH_CANNON),
|
||||
LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD),
|
||||
LEVEL_UP_MOVE(56, MOVE_TACHYON_CUTTER),
|
||||
LEVEL_UP_MOVE(63, MOVE_FUTURE_SIGHT),
|
||||
LEVEL_UP_MOVE(70, MOVE_VOLT_SWITCH),
|
||||
LEVEL_UP_MOVE(77, MOVE_QUICK_GUARD),
|
||||
LEVEL_UP_MOVE(84, MOVE_METAL_BURST),
|
||||
LEVEL_UP_MOVE(91, MOVE_HYPER_BEAM),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_IRON_CROWN
|
||||
|
||||
#if P_FAMILY_TERAPAGOS
|
||||
static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
|
||||
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
|
||||
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
|
||||
LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER),
|
||||
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
|
||||
LEVEL_UP_MOVE(30, MOVE_PROTECT),
|
||||
LEVEL_UP_MOVE(40, MOVE_EARTH_POWER),
|
||||
LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
|
||||
LEVEL_UP_MOVE(60, MOVE_TERA_STARSTORM),
|
||||
LEVEL_UP_MOVE(70, MOVE_DOUBLE_EDGE),
|
||||
LEVEL_UP_MOVE(80, MOVE_ROCK_POLISH),
|
||||
LEVEL_UP_MOVE(90, MOVE_GYRO_BALL),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_TERAPAGOS
|
||||
|
||||
#if P_FAMILY_PECHARUNT
|
||||
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_SMOG),
|
||||
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
|
||||
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
|
||||
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
|
||||
LEVEL_UP_MOVE( 8, MOVE_WITHDRAW),
|
||||
LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND),
|
||||
LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS),
|
||||
LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT),
|
||||
LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL),
|
||||
LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN),
|
||||
LEVEL_UP_MOVE(56, MOVE_TOXIC),
|
||||
LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT),
|
||||
LEVEL_UP_MOVE(72, MOVE_RECOVER),
|
||||
LEVEL_UP_END
|
||||
};
|
||||
#endif //P_FAMILY_PECHARUNT
|
||||
|
||||
@ -26,6 +26,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_ARBOLIVA,
|
||||
NATIONAL_DEX_ARCANINE,
|
||||
NATIONAL_DEX_ARCEUS,
|
||||
NATIONAL_DEX_ARCHALUDON,
|
||||
NATIONAL_DEX_ARCHEN,
|
||||
NATIONAL_DEX_ARCHEOPS,
|
||||
NATIONAL_DEX_ARCTIBAX,
|
||||
@ -361,6 +362,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_GOTHITA,
|
||||
NATIONAL_DEX_GOTHITELLE,
|
||||
NATIONAL_DEX_GOTHORITA,
|
||||
NATIONAL_DEX_GOUGING_FIRE,
|
||||
NATIONAL_DEX_GOURGEIST,
|
||||
NATIONAL_DEX_GRAFAIAI,
|
||||
NATIONAL_DEX_GRANBULL,
|
||||
@ -416,6 +418,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_HOUNDOUR,
|
||||
NATIONAL_DEX_HOUNDSTONE,
|
||||
NATIONAL_DEX_HUNTAIL,
|
||||
NATIONAL_DEX_HYDRAPPLE,
|
||||
NATIONAL_DEX_HYDREIGON,
|
||||
NATIONAL_DEX_HYPNO,
|
||||
|
||||
@ -427,7 +430,9 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_INFERNAPE,
|
||||
NATIONAL_DEX_INKAY,
|
||||
NATIONAL_DEX_INTELEON,
|
||||
NATIONAL_DEX_IRON_BOULDER,
|
||||
NATIONAL_DEX_IRON_BUNDLE,
|
||||
NATIONAL_DEX_IRON_CROWN,
|
||||
NATIONAL_DEX_IRON_HANDS,
|
||||
NATIONAL_DEX_IRON_JUGULIS,
|
||||
NATIONAL_DEX_IRON_LEAVES,
|
||||
@ -658,6 +663,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_PAWMO,
|
||||
NATIONAL_DEX_PAWMOT,
|
||||
NATIONAL_DEX_PAWNIARD,
|
||||
NATIONAL_DEX_PECHARUNT,
|
||||
NATIONAL_DEX_PELIPPER,
|
||||
NATIONAL_DEX_PERRSERKER,
|
||||
NATIONAL_DEX_PERSIAN,
|
||||
@ -715,6 +721,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
|
||||
NATIONAL_DEX_RABOOT,
|
||||
NATIONAL_DEX_RABSCA,
|
||||
NATIONAL_DEX_RAGING_BOLT,
|
||||
NATIONAL_DEX_RAICHU,
|
||||
NATIONAL_DEX_RAIKOU,
|
||||
NATIONAL_DEX_RALTS,
|
||||
@ -906,6 +913,7 @@ const u16 gPokedexOrder_Alphabetical[] =
|
||||
NATIONAL_DEX_TENTACOOL,
|
||||
NATIONAL_DEX_TENTACRUEL,
|
||||
NATIONAL_DEX_TEPIG,
|
||||
NATIONAL_DEX_TERAPAGOS,
|
||||
NATIONAL_DEX_TERRAKION,
|
||||
NATIONAL_DEX_THIEVUL,
|
||||
NATIONAL_DEX_THROH,
|
||||
@ -1078,6 +1086,7 @@ const u16 gPokedexOrder_Weight[] =
|
||||
//NATIONAL_DEX_MINIOR_CORE_INDIGO,
|
||||
//NATIONAL_DEX_MINIOR_CORE_VIOLET,
|
||||
NATIONAL_DEX_MILCERY,
|
||||
NATIONAL_DEX_PECHARUNT,
|
||||
// 0.9 lbs / 0.4 kg
|
||||
NATIONAL_DEX_POLTEAGEIST,
|
||||
NATIONAL_DEX_CURSOLA,
|
||||
@ -1397,6 +1406,7 @@ const u16 gPokedexOrder_Weight[] =
|
||||
//NATIONAL_DEX_MELOETTA_PIROUETTE,
|
||||
NATIONAL_DEX_PAWMO,
|
||||
NATIONAL_DEX_SMOLIV,
|
||||
NATIONAL_DEX_TERAPAGOS,//_NORMAL
|
||||
// 14.6 lbs / 6.6 kg
|
||||
NATIONAL_DEX_RALTS,
|
||||
NATIONAL_DEX_WHIMSICOTT,
|
||||
@ -1662,6 +1672,7 @@ const u16 gPokedexOrder_Weight[] =
|
||||
NATIONAL_DEX_CORVISQUIRE,
|
||||
NATIONAL_DEX_NACLI,
|
||||
NATIONAL_DEX_MASCHIFF,
|
||||
//NATIONAL_DEX_TERAPAGOS_TERASTAL
|
||||
// 35.9 lbs / 16.3 kg
|
||||
NATIONAL_DEX_WHISMUR,
|
||||
NATIONAL_DEX_LILLIGANT,
|
||||
@ -2281,6 +2292,7 @@ const u16 gPokedexOrder_Weight[] =
|
||||
NATIONAL_DEX_LATIOS,
|
||||
//NATIONAL_DEX_GUMSHOOS_TOTEM_SIZED,
|
||||
NATIONAL_DEX_SANDY_SHOCKS,
|
||||
NATIONAL_DEX_ARCHALUDON,
|
||||
// 132.7 lbs / 60.2 kg
|
||||
NATIONAL_DEX_FINIZEN,
|
||||
NATIONAL_DEX_PALAFIN,//_ZERO,
|
||||
@ -2377,6 +2389,7 @@ const u16 gPokedexOrder_Weight[] =
|
||||
NATIONAL_DEX_COFAGRIGUS,
|
||||
// 168.9 lbs / 76.6 kg
|
||||
NATIONAL_DEX_GOLDUCK,
|
||||
//NATIONAL_DEX_TERAPAGOS_STELLAR
|
||||
// 170.6 lbs / 77.4 kg
|
||||
NATIONAL_DEX_CACTURNE,
|
||||
// 172.0 lbs / 78.0 kg
|
||||
@ -2477,6 +2490,8 @@ const u16 gPokedexOrder_Weight[] =
|
||||
// 204.8 lbs / 92.9 kg
|
||||
NATIONAL_DEX_DARMANITAN,//_STANDARD_MODE,
|
||||
//NATIONAL_DEX_DARMANITAN_ZEN_MODE,
|
||||
// 205.0 lbs / 93.0 kg
|
||||
NATIONAL_DEX_HYDRAPPLE,
|
||||
// 208.6 lbs / 94.6 kg
|
||||
NATIONAL_DEX_BOUFFALANT,
|
||||
NATIONAL_DEX_SAMUROTT,
|
||||
@ -2659,6 +2674,8 @@ const u16 gPokedexOrder_Weight[] =
|
||||
NATIONAL_DEX_ARCANINE,
|
||||
// 342.8 lbs / 155.5 kg
|
||||
//NATIONAL_DEX_VENUSAUR_MEGA,
|
||||
// 343.9 lbs / 156.0 kg
|
||||
NATIONAL_DEX_IRON_CROWN,
|
||||
// 352.7 lbs / 160.0 kg
|
||||
NATIONAL_DEX_HYDREIGON,
|
||||
NATIONAL_DEX_FARIGIRAF,
|
||||
@ -2666,6 +2683,8 @@ const u16 gPokedexOrder_Weight[] =
|
||||
//NATIONAL_DEX_SABLEYE_MEGA,
|
||||
// 357.1 lbs / 162.0 kg
|
||||
NATIONAL_DEX_MILOTIC,
|
||||
// 358.2 lbs / 162.5 kg
|
||||
NATIONAL_DEX_IRON_BOULDER,
|
||||
// 370.4 lbs / 168.0 kg
|
||||
//NATIONAL_DEX_ARCANINE_HISUIAN,
|
||||
NATIONAL_DEX_LUNATONE,
|
||||
@ -2859,6 +2878,8 @@ const u16 gPokedexOrder_Weight[] =
|
||||
// 1014.1 lbs / 460.0 kg
|
||||
NATIONAL_DEX_SNORLAX,
|
||||
//NATIONAL_DEX_NECROZMA_DUSK_MANE,
|
||||
// 1058.2 lbs / 480.0 kg
|
||||
NATIONAL_DEX_RAGING_BOLT,
|
||||
// 1080.3 lbs / 490.0 kg
|
||||
//NATIONAL_DEX_HOOPA_UNBOUND,
|
||||
// 1113.3 lbs / 505.0 kg
|
||||
@ -2867,6 +2888,8 @@ const u16 gPokedexOrder_Weight[] =
|
||||
NATIONAL_DEX_STONJOURNER,
|
||||
// 1212.5 lbs / 550.0 kg
|
||||
NATIONAL_DEX_METAGROSS,
|
||||
// 1300.7 lbs / 590.0 kg
|
||||
NATIONAL_DEX_GOUGING_FIRE,
|
||||
// 1344.8 lbs / 610.0 kg
|
||||
//NATIONAL_DEX_ZYGARDE_COMPLETE,
|
||||
// 1433.8 lbs / 650.0 kg
|
||||
@ -2965,6 +2988,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_RELLOR,
|
||||
NATIONAL_DEX_FLITTLE,
|
||||
NATIONAL_DEX_SINISTCHA,
|
||||
NATIONAL_DEX_TERAPAGOS,//_NORMAL
|
||||
// 1'00" / 0.3m
|
||||
NATIONAL_DEX_CATERPIE,
|
||||
NATIONAL_DEX_WEEDLE,
|
||||
@ -3129,6 +3153,8 @@ const u16 gPokedexOrder_Height[] =
|
||||
//NATIONAL_DEX_TATSUGIRI_DROOPY,
|
||||
//NATIONAL_DEX_TATSUGIRI_STRETCHY,
|
||||
NATIONAL_DEX_GIMMIGHOUL,//_CHEST,
|
||||
//NATIONAL_DEX_TERAPAGOS_TERASTAL,
|
||||
NATIONAL_DEX_PECHARUNT,
|
||||
// 0.4m
|
||||
NATIONAL_DEX_SPRIGATITO,
|
||||
NATIONAL_DEX_FUECOCO,
|
||||
@ -3871,6 +3897,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_GLIMMORA,
|
||||
NATIONAL_DEX_WO_CHIEN,
|
||||
NATIONAL_DEX_IRON_LEAVES,
|
||||
NATIONAL_DEX_IRON_BOULDER,
|
||||
// 5'03" / 1.6m
|
||||
NATIONAL_DEX_BLASTOISE,
|
||||
//NATIONAL_DEX_BLASTOISE_MEGA,
|
||||
@ -3918,6 +3945,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_CYCLIZAR,
|
||||
NATIONAL_DEX_FLAMIGO,
|
||||
NATIONAL_DEX_IRON_THORNS,
|
||||
NATIONAL_DEX_IRON_CROWN,
|
||||
// 5'07" / 1.7m
|
||||
NATIONAL_DEX_CHARIZARD,
|
||||
//NATIONAL_DEX_CHARIZARD_MEGA_X,
|
||||
@ -3955,6 +3983,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
//NATIONAL_DEX_GOURGEIST_SUPER,
|
||||
NATIONAL_DEX_VOLCANION,
|
||||
NATIONAL_DEX_CRABOMINABLE,
|
||||
//NATIONAL_DEX_TERAPAGOS_STELLAR
|
||||
// 5'11" / 1.8m
|
||||
NATIONAL_DEX_DODRIO,
|
||||
NATIONAL_DEX_AERODACTYL,
|
||||
@ -3993,6 +4022,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_CLODSIRE,
|
||||
NATIONAL_DEX_IRON_HANDS,
|
||||
NATIONAL_DEX_OKIDOGI,
|
||||
NATIONAL_DEX_HYDRAPPLE,
|
||||
// 6'03" / 1.9m
|
||||
NATIONAL_DEX_ARCANINE,
|
||||
NATIONAL_DEX_RHYDON,
|
||||
@ -4053,6 +4083,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_HOUNDSTONE,
|
||||
NATIONAL_DEX_KINGAMBIT,
|
||||
NATIONAL_DEX_ROARING_MOON,
|
||||
NATIONAL_DEX_ARCHALUDON,
|
||||
// 6'11" / 2.1m
|
||||
//NATIONAL_DEX_AERODACTYL_MEGA,
|
||||
NATIONAL_DEX_SNORLAX,
|
||||
@ -4198,6 +4229,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
NATIONAL_DEX_GROUDON,
|
||||
NATIONAL_DEX_MIRAIDON,
|
||||
NATIONAL_DEX_WALKING_WAKE,
|
||||
NATIONAL_DEX_GOUGING_FIRE,
|
||||
// 11'10" / 3.6m
|
||||
//NATIONAL_DEX_KYUREM_WHITE,
|
||||
NATIONAL_DEX_NAGANADEL,
|
||||
@ -4229,6 +4261,7 @@ const u16 gPokedexOrder_Height[] =
|
||||
//NATIONAL_DEX_ZYGARDE_50_POWER_CONSTRUCT,
|
||||
// 17'01" / 5.2m
|
||||
NATIONAL_DEX_LUGIA,
|
||||
NATIONAL_DEX_RAGING_BOLT,
|
||||
// 17'09" / 5.4m
|
||||
NATIONAL_DEX_DIALGA,
|
||||
// 18'01" / 5.5m
|
||||
|
||||
@ -217,6 +217,12 @@ const u8 gOgerponCornerstoneMaskPokedexText[] = _(
|
||||
.levelUpLearnset = s ## learn##LevelUpLearnset, \
|
||||
.teachableLearnset = s ## learn##TeachableLearnset
|
||||
|
||||
#if P_FOOTPRINTS
|
||||
#define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite,
|
||||
#else
|
||||
#define FOOTPRINT(sprite)
|
||||
#endif
|
||||
|
||||
// Maximum value for a female Pokémon is 254 (MON_FEMALE) which is 100% female.
|
||||
// 255 (MON_GENDERLESS) is reserved for genderless Pokémon.
|
||||
#define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100))
|
||||
@ -330,7 +336,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
|
||||
//PALETTE_FEMALE(CircledQuestionMark),
|
||||
ICON(QuestionMark, 0),
|
||||
//ICON_FEMALE(QuestionMark, 1),
|
||||
//.footprint = gMonFootprint_None,
|
||||
//FOOTPRINT(None)
|
||||
LEARNSETS(None),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_NONE},
|
||||
{EVO_ITEM, ITEM_MOOMOO_MILK, SPECIES_NONE}),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -47,7 +47,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Chikorita),
|
||||
ICON(Chikorita, 1),
|
||||
.footprint = gMonFootprint_Chikorita,
|
||||
FOOTPRINT(Chikorita)
|
||||
LEARNSETS(Chikorita),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_BAYLEEF}),
|
||||
},
|
||||
@ -96,7 +96,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Bayleef),
|
||||
ICON(Bayleef, 1),
|
||||
.footprint = gMonFootprint_Bayleef,
|
||||
FOOTPRINT(Bayleef)
|
||||
LEARNSETS(Bayleef),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_MEGANIUM}),
|
||||
},
|
||||
@ -147,7 +147,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Meganium),
|
||||
ICON(Meganium, 1),
|
||||
.footprint = gMonFootprint_Meganium,
|
||||
FOOTPRINT(Meganium)
|
||||
LEARNSETS(Meganium),
|
||||
},
|
||||
#endif //P_FAMILY_CHIKORITA
|
||||
@ -196,7 +196,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Cyndaquil),
|
||||
ICON(Cyndaquil, 3),
|
||||
.footprint = gMonFootprint_Cyndaquil,
|
||||
FOOTPRINT(Cyndaquil)
|
||||
LEARNSETS(Cyndaquil),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_QUILAVA}),
|
||||
},
|
||||
@ -245,7 +245,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Quilava),
|
||||
ICON(Quilava, 3),
|
||||
.footprint = gMonFootprint_Quilava,
|
||||
FOOTPRINT(Quilava)
|
||||
LEARNSETS(Quilava),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_TYPHLOSION},
|
||||
{EVO_NONE, 0, SPECIES_TYPHLOSION_HISUIAN}),
|
||||
@ -264,7 +264,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.speciesName = _("Typhlosion"), \
|
||||
.cryId = CRY_TYPHLOSION, \
|
||||
.natDexNum = NATIONAL_DEX_TYPHLOSION, \
|
||||
.footprint = gMonFootprint_Typhlosion, \
|
||||
FOOTPRINT(Typhlosion) \
|
||||
.formSpeciesIdTable = sTyphlosionFormSpeciesIdTable
|
||||
|
||||
[SPECIES_TYPHLOSION] =
|
||||
@ -386,7 +386,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Totodile),
|
||||
ICON(Totodile, 0),
|
||||
.footprint = gMonFootprint_Totodile,
|
||||
FOOTPRINT(Totodile)
|
||||
LEARNSETS(Totodile),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_CROCONAW}),
|
||||
},
|
||||
@ -436,7 +436,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Croconaw),
|
||||
ICON(Croconaw, 0),
|
||||
.footprint = gMonFootprint_Croconaw,
|
||||
FOOTPRINT(Croconaw)
|
||||
LEARNSETS(Croconaw),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_FERALIGATR}),
|
||||
},
|
||||
@ -486,7 +486,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Feraligatr),
|
||||
ICON(Feraligatr, 0),
|
||||
.footprint = gMonFootprint_Feraligatr,
|
||||
FOOTPRINT(Feraligatr)
|
||||
LEARNSETS(Feraligatr),
|
||||
},
|
||||
#endif //P_FAMILY_TOTODILE
|
||||
@ -535,7 +535,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Sentret),
|
||||
ICON(Sentret, 2),
|
||||
.footprint = gMonFootprint_Sentret,
|
||||
FOOTPRINT(Sentret)
|
||||
LEARNSETS(Sentret),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FURRET}),
|
||||
},
|
||||
@ -583,7 +583,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Furret),
|
||||
ICON(Furret, 2),
|
||||
.footprint = gMonFootprint_Furret,
|
||||
FOOTPRINT(Furret)
|
||||
LEARNSETS(Furret),
|
||||
},
|
||||
#endif //P_FAMILY_SENTRET
|
||||
@ -632,7 +632,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Hoothoot),
|
||||
ICON(Hoothoot, 2),
|
||||
.footprint = gMonFootprint_Hoothoot,
|
||||
FOOTPRINT(Hoothoot)
|
||||
LEARNSETS(Hoothoot),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_NOCTOWL}),
|
||||
},
|
||||
@ -680,7 +680,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_TRIANGLE_DOWN,
|
||||
PALETTES(Noctowl),
|
||||
ICON(Noctowl, 2),
|
||||
.footprint = gMonFootprint_Noctowl,
|
||||
FOOTPRINT(Noctowl)
|
||||
LEARNSETS(Noctowl),
|
||||
},
|
||||
#endif //P_FAMILY_HOOTHOOT
|
||||
@ -731,7 +731,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Ledyba),
|
||||
ICON(Ledyba, 0),
|
||||
.footprint = gMonFootprint_Ledyba,
|
||||
FOOTPRINT(Ledyba)
|
||||
LEARNSETS(Ledyba),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_LEDIAN}),
|
||||
},
|
||||
@ -782,7 +782,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Ledian),
|
||||
ICON(Ledian, 0),
|
||||
.footprint = gMonFootprint_Ledian,
|
||||
FOOTPRINT(Ledian)
|
||||
LEARNSETS(Ledian),
|
||||
},
|
||||
#endif //P_FAMILY_LEDYBA
|
||||
@ -831,7 +831,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Spinarak),
|
||||
ICON(Spinarak, 1),
|
||||
.footprint = gMonFootprint_Spinarak,
|
||||
FOOTPRINT(Spinarak)
|
||||
LEARNSETS(Spinarak),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_ARIADOS}),
|
||||
},
|
||||
@ -879,7 +879,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Ariados),
|
||||
ICON(Ariados, 0),
|
||||
.footprint = gMonFootprint_Ariados,
|
||||
FOOTPRINT(Ariados)
|
||||
LEARNSETS(Ariados),
|
||||
},
|
||||
#endif //P_FAMILY_SPINARAK
|
||||
@ -929,7 +929,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Chinchou),
|
||||
ICON(Chinchou, 2),
|
||||
.footprint = gMonFootprint_Chinchou,
|
||||
FOOTPRINT(Chinchou)
|
||||
LEARNSETS(Chinchou),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_LANTURN}),
|
||||
},
|
||||
@ -978,7 +978,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_FLASH_YELLOW,
|
||||
PALETTES(Lanturn),
|
||||
ICON(Lanturn, 0),
|
||||
.footprint = gMonFootprint_Lanturn,
|
||||
FOOTPRINT(Lanturn)
|
||||
LEARNSETS(Lanturn),
|
||||
},
|
||||
#endif //P_FAMILY_CHINCHOU
|
||||
@ -1029,7 +1029,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Togepi),
|
||||
ICON(Togepi, 0),
|
||||
.footprint = gMonFootprint_Togepi,
|
||||
FOOTPRINT(Togepi)
|
||||
LEARNSETS(Togepi),
|
||||
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}),
|
||||
},
|
||||
@ -1077,7 +1077,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Togetic),
|
||||
ICON(Togetic, 0),
|
||||
.footprint = gMonFootprint_Togetic,
|
||||
FOOTPRINT(Togetic)
|
||||
LEARNSETS(Togetic),
|
||||
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_TOGEKISS}),
|
||||
},
|
||||
@ -1133,7 +1133,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Togekiss),
|
||||
ICON(Togekiss, 2),
|
||||
.footprint = gMonFootprint_Togekiss,
|
||||
FOOTPRINT(Togekiss)
|
||||
LEARNSETS(Togekiss),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -1184,7 +1184,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Natu),
|
||||
ICON(Natu, 1),
|
||||
.footprint = gMonFootprint_Natu,
|
||||
FOOTPRINT(Natu)
|
||||
LEARNSETS(Natu),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_XATU}),
|
||||
},
|
||||
@ -1234,7 +1234,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Xatu),
|
||||
ICON(Xatu, 1),
|
||||
.footprint = gMonFootprint_Xatu,
|
||||
FOOTPRINT(Xatu)
|
||||
LEARNSETS(Xatu),
|
||||
},
|
||||
#endif //P_FAMILY_NATU
|
||||
@ -1284,7 +1284,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Mareep),
|
||||
ICON(Mareep, 0),
|
||||
.footprint = gMonFootprint_Mareep,
|
||||
FOOTPRINT(Mareep)
|
||||
LEARNSETS(Mareep),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FLAAFFY}),
|
||||
},
|
||||
@ -1332,7 +1332,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Flaaffy),
|
||||
ICON(Flaaffy, 0),
|
||||
.footprint = gMonFootprint_Flaaffy,
|
||||
FOOTPRINT(Flaaffy)
|
||||
LEARNSETS(Flaaffy),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_AMPHAROS}),
|
||||
},
|
||||
@ -1355,7 +1355,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.pokemonOffset = 4, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Ampharos, \
|
||||
FOOTPRINT(Ampharos) \
|
||||
LEARNSETS(Ampharos), \
|
||||
.formSpeciesIdTable = sAmpharosFormSpeciesIdTable, \
|
||||
.formChangeTable = sAmpharosFormChangeTable
|
||||
@ -1474,7 +1474,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Azurill),
|
||||
ICON(Azurill, 0),
|
||||
.footprint = gMonFootprint_Azurill,
|
||||
FOOTPRINT(Azurill)
|
||||
LEARNSETS(Azurill),
|
||||
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_MARILL}),
|
||||
},
|
||||
@ -1527,7 +1527,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Marill),
|
||||
ICON(Marill, 0),
|
||||
.footprint = gMonFootprint_Marill,
|
||||
FOOTPRINT(Marill)
|
||||
LEARNSETS(Marill),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_AZUMARILL}),
|
||||
},
|
||||
@ -1579,7 +1579,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Azumarill),
|
||||
ICON(Azumarill, 0),
|
||||
.footprint = gMonFootprint_Azumarill,
|
||||
FOOTPRINT(Azumarill)
|
||||
LEARNSETS(Azumarill),
|
||||
},
|
||||
#endif //P_FAMILY_MARILL
|
||||
@ -1629,7 +1629,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_VIBRATE,
|
||||
PALETTES(Bonsly),
|
||||
ICON(Bonsly, 1),
|
||||
.footprint = gMonFootprint_Bonsly,
|
||||
FOOTPRINT(Bonsly)
|
||||
LEARNSETS(Bonsly),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_MIMIC, SPECIES_SUDOWOODO}),
|
||||
},
|
||||
@ -1680,7 +1680,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Sudowoodo),
|
||||
ICON(Sudowoodo, 1),
|
||||
.footprint = gMonFootprint_Sudowoodo,
|
||||
FOOTPRINT(Sudowoodo)
|
||||
LEARNSETS(Sudowoodo),
|
||||
},
|
||||
#endif //P_FAMILY_SUDOWOODO
|
||||
@ -1730,7 +1730,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Hoppip),
|
||||
ICON(Hoppip, 1),
|
||||
.footprint = gMonFootprint_Hoppip,
|
||||
FOOTPRINT(Hoppip)
|
||||
LEARNSETS(Hoppip),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_SKIPLOOM}),
|
||||
},
|
||||
@ -1779,7 +1779,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Skiploom),
|
||||
ICON(Skiploom, 1),
|
||||
.footprint = gMonFootprint_Skiploom,
|
||||
FOOTPRINT(Skiploom)
|
||||
LEARNSETS(Skiploom),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_JUMPLUFF}),
|
||||
},
|
||||
@ -1828,7 +1828,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Jumpluff),
|
||||
ICON(Jumpluff, 2),
|
||||
.footprint = gMonFootprint_Jumpluff,
|
||||
FOOTPRINT(Jumpluff)
|
||||
LEARNSETS(Jumpluff),
|
||||
},
|
||||
#endif //P_FAMILY_HOPPIP
|
||||
@ -1879,7 +1879,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Aipom),
|
||||
ICON(Aipom, 2),
|
||||
.footprint = gMonFootprint_Aipom,
|
||||
FOOTPRINT(Aipom)
|
||||
LEARNSETS(Aipom),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_DOUBLE_HIT, SPECIES_AMBIPOM}),
|
||||
},
|
||||
@ -1930,7 +1930,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Ambipom),
|
||||
ICON(Ambipom, 2),
|
||||
.footprint = gMonFootprint_Ambipom,
|
||||
FOOTPRINT(Ambipom)
|
||||
LEARNSETS(Ambipom),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -1980,7 +1980,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Sunkern),
|
||||
ICON(Sunkern, 1),
|
||||
.footprint = gMonFootprint_Sunkern,
|
||||
FOOTPRINT(Sunkern)
|
||||
LEARNSETS(Sunkern),
|
||||
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}),
|
||||
},
|
||||
@ -2028,7 +2028,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Sunflora),
|
||||
ICON(Sunflora, 1),
|
||||
.footprint = gMonFootprint_Sunflora,
|
||||
FOOTPRINT(Sunflora)
|
||||
LEARNSETS(Sunflora),
|
||||
},
|
||||
#endif //P_FAMILY_SUNKERN
|
||||
@ -2079,7 +2079,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Yanma),
|
||||
ICON(Yanma, 1),
|
||||
.footprint = gMonFootprint_Yanma,
|
||||
FOOTPRINT(Yanma)
|
||||
LEARNSETS(Yanma),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_YANMEGA}),
|
||||
},
|
||||
@ -2130,7 +2130,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_VIBRATE,
|
||||
PALETTES(Yanmega),
|
||||
ICON(Yanmega, 1),
|
||||
.footprint = gMonFootprint_Yanmega,
|
||||
FOOTPRINT(Yanmega)
|
||||
LEARNSETS(Yanmega),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -2160,7 +2160,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.pokemonOffset = 21, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Wooper, \
|
||||
FOOTPRINT(Wooper) \
|
||||
.formSpeciesIdTable = sWooperFormSpeciesIdTable
|
||||
|
||||
[SPECIES_WOOPER] =
|
||||
@ -2236,7 +2236,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Quagsire),
|
||||
ICON(Quagsire, 0),
|
||||
.footprint = gMonFootprint_Quagsire,
|
||||
FOOTPRINT(Quagsire)
|
||||
LEARNSETS(Quagsire),
|
||||
},
|
||||
|
||||
@ -2311,7 +2311,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Clodsire),
|
||||
ICON(Clodsire, 2),
|
||||
//.footprint = gMonFootprint_Clodsire,
|
||||
//FOOTPRINT(Clodsire)
|
||||
LEARNSETS(Clodsire),
|
||||
},
|
||||
#endif //P_PALDEAN_FORMS
|
||||
@ -2364,7 +2364,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Murkrow),
|
||||
ICON(Murkrow, 2),
|
||||
.footprint = gMonFootprint_Murkrow,
|
||||
FOOTPRINT(Murkrow)
|
||||
LEARNSETS(Murkrow),
|
||||
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_HONCHKROW}),
|
||||
},
|
||||
@ -2413,7 +2413,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_STRETCH,
|
||||
PALETTES(Honchkrow),
|
||||
ICON(Honchkrow, 2),
|
||||
.footprint = gMonFootprint_Honchkrow,
|
||||
FOOTPRINT(Honchkrow)
|
||||
LEARNSETS(Honchkrow),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -2464,7 +2464,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_VIBRATE,
|
||||
PALETTES(Misdreavus),
|
||||
ICON(Misdreavus, 0),
|
||||
.footprint = gMonFootprint_Misdreavus,
|
||||
FOOTPRINT(Misdreavus)
|
||||
LEARNSETS(Misdreavus),
|
||||
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_MISMAGIUS}),
|
||||
},
|
||||
@ -2515,7 +2515,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Mismagius),
|
||||
ICON(Mismagius, 2),
|
||||
.footprint = gMonFootprint_Mismagius,
|
||||
FOOTPRINT(Mismagius)
|
||||
LEARNSETS(Mismagius),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -2559,7 +2559,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, \
|
||||
PALETTES(Unown), \
|
||||
ICON(Unown ##letter, 0), \
|
||||
.footprint = gMonFootprint_Unown, \
|
||||
FOOTPRINT(Unown) \
|
||||
LEARNSETS(Unown), \
|
||||
.formSpeciesIdTable = sUnownFormSpeciesIdTable
|
||||
|
||||
@ -2852,7 +2852,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Wynaut),
|
||||
ICON(Wynaut, 0),
|
||||
.footprint = gMonFootprint_Wynaut,
|
||||
FOOTPRINT(Wynaut)
|
||||
LEARNSETS(Wynaut),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_WOBBUFFET}),
|
||||
},
|
||||
@ -2906,7 +2906,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE
|
||||
ICON_FEMALE(Wobbuffet, 0),
|
||||
#endif
|
||||
.footprint = gMonFootprint_Wobbuffet,
|
||||
FOOTPRINT(Wobbuffet)
|
||||
LEARNSETS(Wobbuffet),
|
||||
},
|
||||
#endif //P_FAMILY_WOBBUFFET
|
||||
@ -2957,7 +2957,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Girafarig),
|
||||
ICON(Girafarig, 1),
|
||||
.footprint = gMonFootprint_Girafarig,
|
||||
FOOTPRINT(Girafarig)
|
||||
LEARNSETS(Girafarig),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_TWIN_BEAM, SPECIES_FARIGIRAF}),
|
||||
},
|
||||
@ -3006,7 +3006,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Farigiraf),
|
||||
ICON(Farigiraf, 0),
|
||||
//.footprint = gMonFootprint_Farigiraf,
|
||||
//FOOTPRINT(Farigiraf)
|
||||
LEARNSETS(Farigiraf),
|
||||
},
|
||||
#endif //P_GEN_9_CROSS_EVOS
|
||||
@ -3056,7 +3056,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SHAKE,
|
||||
PALETTES(Pineco),
|
||||
ICON(Pineco, 0),
|
||||
.footprint = gMonFootprint_Pineco,
|
||||
FOOTPRINT(Pineco)
|
||||
LEARNSETS(Pineco),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_FORRETRESS}),
|
||||
},
|
||||
@ -3104,7 +3104,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Forretress),
|
||||
ICON(Forretress, 2),
|
||||
.footprint = gMonFootprint_Forretress,
|
||||
FOOTPRINT(Forretress)
|
||||
LEARNSETS(Forretress),
|
||||
},
|
||||
#endif //P_FAMILY_PINECO
|
||||
@ -3154,7 +3154,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_TRIANGLE_DOWN,
|
||||
PALETTES(Dunsparce),
|
||||
ICON(Dunsparce, 0),
|
||||
.footprint = gMonFootprint_Dunsparce,
|
||||
FOOTPRINT(Dunsparce)
|
||||
LEARNSETS(Dunsparce),
|
||||
.evolutions = EVOLUTION({EVO_MOVE_TWO_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_TWO_SEGMENT},
|
||||
{EVO_MOVE_THREE_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_THREE_SEGMENT}),
|
||||
@ -3198,7 +3198,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.formSpeciesIdTable = sDudunsparceFormSpeciesIdTable
|
||||
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
//.footprint = gMonFootprint_Dudunsparce,
|
||||
//FOOTPRINT(Dudunsparce)
|
||||
|
||||
[SPECIES_DUDUNSPARCE_TWO_SEGMENT] =
|
||||
{
|
||||
@ -3273,7 +3273,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW,
|
||||
PALETTES(Gligar),
|
||||
ICON(Gligar, 0),
|
||||
.footprint = gMonFootprint_Gligar,
|
||||
FOOTPRINT(Gligar)
|
||||
LEARNSETS(Gligar),
|
||||
.evolutions = EVOLUTION({EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR},
|
||||
{EVO_ITEM_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}),
|
||||
@ -3324,7 +3324,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Gliscor),
|
||||
ICON(Gliscor, 2),
|
||||
.footprint = gMonFootprint_Gliscor,
|
||||
FOOTPRINT(Gliscor)
|
||||
LEARNSETS(Gliscor),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -3378,7 +3378,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Snubbull),
|
||||
ICON(Snubbull, 0),
|
||||
.footprint = gMonFootprint_Snubbull,
|
||||
FOOTPRINT(Snubbull)
|
||||
LEARNSETS(Snubbull),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 23, SPECIES_GRANBULL}),
|
||||
},
|
||||
@ -3430,7 +3430,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Granbull),
|
||||
ICON(Granbull, 2),
|
||||
.footprint = gMonFootprint_Granbull,
|
||||
FOOTPRINT(Granbull)
|
||||
LEARNSETS(Granbull),
|
||||
},
|
||||
#endif //P_FAMILY_SNUBBULL
|
||||
@ -3463,7 +3463,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.pokemonOffset = 0, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Qwilfish, \
|
||||
FOOTPRINT(Qwilfish) \
|
||||
.formSpeciesIdTable = sQwilfishFormSpeciesIdTable
|
||||
|
||||
[SPECIES_QWILFISH] =
|
||||
@ -3558,7 +3558,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Overqwil),
|
||||
ICON(Overqwil, 2),
|
||||
//.footprint = gMonFootprint_Overqwil,
|
||||
//FOOTPRINT(Overqwil)
|
||||
LEARNSETS(Overqwil),
|
||||
},
|
||||
#endif //P_HISUIAN_FORMS
|
||||
@ -3611,7 +3611,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Shuckle),
|
||||
ICON(Shuckle, 1),
|
||||
.footprint = gMonFootprint_Shuckle,
|
||||
FOOTPRINT(Shuckle)
|
||||
LEARNSETS(Shuckle),
|
||||
},
|
||||
#endif //P_FAMILY_SHUCKLE
|
||||
@ -3630,7 +3630,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.speciesName = _("Heracross"), \
|
||||
.natDexNum = NATIONAL_DEX_HERACROSS, \
|
||||
.categoryName = _("Single Horn"), \
|
||||
.footprint = gMonFootprint_Heracross, \
|
||||
FOOTPRINT(Heracross) \
|
||||
LEARNSETS(Heracross), \
|
||||
.formSpeciesIdTable = sHeracrossFormSpeciesIdTable, \
|
||||
.formChangeTable = sHeracrossFormChangeTable
|
||||
@ -3736,7 +3736,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.pokemonOffset = -3, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Sneasel, \
|
||||
FOOTPRINT(Sneasel) \
|
||||
.formSpeciesIdTable = sSneaselFormSpeciesIdTable
|
||||
|
||||
[SPECIES_SNEASEL] =
|
||||
@ -3815,7 +3815,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Weavile),
|
||||
ICON(Weavile, 0),
|
||||
.footprint = gMonFootprint_Weavile,
|
||||
FOOTPRINT(Weavile)
|
||||
LEARNSETS(Weavile),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -3893,7 +3893,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Sneasler),
|
||||
ICON(Sneasler, 2),
|
||||
//.footprint = gMonFootprint_Sneasler,
|
||||
//FOOTPRINT(Sneasler)
|
||||
LEARNSETS(Sneasler),
|
||||
},
|
||||
#endif //P_HISUIAN_FORMS
|
||||
@ -3944,7 +3944,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Teddiursa),
|
||||
ICON(Teddiursa, 0),
|
||||
.footprint = gMonFootprint_Teddiursa,
|
||||
FOOTPRINT(Teddiursa)
|
||||
LEARNSETS(Teddiursa),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_URSARING}),
|
||||
},
|
||||
@ -3994,7 +3994,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Ursaring),
|
||||
ICON(Ursaring, 2),
|
||||
.footprint = gMonFootprint_Ursaring,
|
||||
FOOTPRINT(Ursaring)
|
||||
LEARNSETS(Ursaring),
|
||||
.evolutions = EVOLUTION({EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA},
|
||||
{EVO_NONE, 0, SPECIES_URSALUNA_BLOODMOON}),
|
||||
@ -4047,7 +4047,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Ursaluna),
|
||||
ICON(Ursaluna, 2),
|
||||
//.footprint = gMonFootprint_Ursaluna,
|
||||
//FOOTPRINT(Ursaluna)
|
||||
LEARNSETS(Ursaluna),
|
||||
},
|
||||
|
||||
@ -4084,7 +4084,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(UrsalunaBloodmoon),
|
||||
//ICON(UrsalunaBloodmoon, 0),
|
||||
//.footprint = gMonFootprint_UrsalunaBloodmoon,
|
||||
//FOOTPRINT(UrsalunaBloodmoon)
|
||||
LEARNSETS(UrsalunaBloodmoon),
|
||||
},
|
||||
#endif //P_GEN_8_CROSS_EVOS
|
||||
@ -4134,7 +4134,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(Slugma),
|
||||
ICON(Slugma, 0),
|
||||
.footprint = gMonFootprint_Slugma,
|
||||
FOOTPRINT(Slugma)
|
||||
LEARNSETS(Slugma),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MAGCARGO}),
|
||||
},
|
||||
@ -4183,7 +4183,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(Magcargo),
|
||||
ICON(Magcargo, 0),
|
||||
.footprint = gMonFootprint_Magcargo,
|
||||
FOOTPRINT(Magcargo)
|
||||
LEARNSETS(Magcargo),
|
||||
},
|
||||
#endif //P_FAMILY_SLUGMA
|
||||
@ -4232,7 +4232,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Swinub),
|
||||
ICON(Swinub, 2),
|
||||
.footprint = gMonFootprint_Swinub,
|
||||
FOOTPRINT(Swinub)
|
||||
LEARNSETS(Swinub),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_PILOSWINE}),
|
||||
},
|
||||
@ -4283,7 +4283,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SHAKE,
|
||||
PALETTES(Piloswine),
|
||||
ICON(Piloswine, 2),
|
||||
.footprint = gMonFootprint_Piloswine,
|
||||
FOOTPRINT(Piloswine)
|
||||
LEARNSETS(Piloswine),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_MAMOSWINE}),
|
||||
},
|
||||
@ -4333,7 +4333,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Mamoswine),
|
||||
ICON(Mamoswine, 2),
|
||||
.footprint = gMonFootprint_Mamoswine,
|
||||
FOOTPRINT(Mamoswine)
|
||||
LEARNSETS(Mamoswine),
|
||||
},
|
||||
#endif //P_GEN_4_CROSS_EVOS
|
||||
@ -4361,7 +4361,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.pokemonOffset = 15, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Corsola, \
|
||||
FOOTPRINT(Corsola) \
|
||||
.formSpeciesIdTable = sCorsolaFormSpeciesIdTable
|
||||
|
||||
[SPECIES_CORSOLA] =
|
||||
@ -4472,7 +4472,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Cursola),
|
||||
ICON(Cursola, 0),
|
||||
.footprint = gMonFootprint_Cursola,
|
||||
FOOTPRINT(Cursola)
|
||||
LEARNSETS(Cursola),
|
||||
},
|
||||
#endif //P_GALARIAN_FORMS
|
||||
@ -4522,7 +4522,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Remoraid),
|
||||
ICON(Remoraid, 0),
|
||||
.footprint = gMonFootprint_Remoraid,
|
||||
FOOTPRINT(Remoraid)
|
||||
LEARNSETS(Remoraid),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_OCTILLERY}),
|
||||
},
|
||||
@ -4574,7 +4574,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW,
|
||||
PALETTES(Octillery),
|
||||
ICON(Octillery, 0),
|
||||
.footprint = gMonFootprint_Octillery,
|
||||
FOOTPRINT(Octillery)
|
||||
LEARNSETS(Octillery),
|
||||
},
|
||||
#endif //P_FAMILY_REMORAID
|
||||
@ -4623,7 +4623,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_TRIANGLE_DOWN,
|
||||
PALETTES(Delibird),
|
||||
ICON(Delibird, 1),
|
||||
.footprint = gMonFootprint_Delibird,
|
||||
FOOTPRINT(Delibird)
|
||||
LEARNSETS(Delibird),
|
||||
},
|
||||
#endif //P_FAMILY_DELIBIRD
|
||||
@ -4673,7 +4673,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Mantyke),
|
||||
ICON(Mantyke, 0),
|
||||
.footprint = gMonFootprint_Mantyke,
|
||||
FOOTPRINT(Mantyke)
|
||||
LEARNSETS(Mantyke),
|
||||
.evolutions = EVOLUTION({EVO_SPECIFIC_MON_IN_PARTY, SPECIES_REMORAID, SPECIES_MANTINE}),
|
||||
},
|
||||
@ -4723,7 +4723,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Mantine),
|
||||
ICON(Mantine, 2),
|
||||
.footprint = gMonFootprint_Mantine,
|
||||
FOOTPRINT(Mantine)
|
||||
LEARNSETS(Mantine),
|
||||
},
|
||||
#endif //P_FAMILY_MANTINE
|
||||
@ -4773,7 +4773,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Skarmory),
|
||||
ICON(Skarmory, 0),
|
||||
.footprint = gMonFootprint_Skarmory,
|
||||
FOOTPRINT(Skarmory)
|
||||
LEARNSETS(Skarmory),
|
||||
},
|
||||
#endif //P_FAMILY_SKARMORY
|
||||
@ -4822,7 +4822,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Houndour),
|
||||
ICON(Houndour, 0),
|
||||
.footprint = gMonFootprint_Houndour,
|
||||
FOOTPRINT(Houndour)
|
||||
LEARNSETS(Houndour),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_HOUNDOOM}),
|
||||
},
|
||||
@ -4840,7 +4840,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.speciesName = _("Houndoom"), \
|
||||
.natDexNum = NATIONAL_DEX_HOUNDOOM, \
|
||||
.categoryName = _("Dark"), \
|
||||
.footprint = gMonFootprint_Houndoom, \
|
||||
FOOTPRINT(Houndoom) \
|
||||
LEARNSETS(Houndoom), \
|
||||
.formSpeciesIdTable = sHoundoomFormSpeciesIdTable, \
|
||||
.formChangeTable = sHoundoomFormChangeTable
|
||||
@ -4962,7 +4962,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Phanpy),
|
||||
ICON(Phanpy, 0),
|
||||
.footprint = gMonFootprint_Phanpy,
|
||||
FOOTPRINT(Phanpy)
|
||||
LEARNSETS(Phanpy),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_DONPHAN}),
|
||||
},
|
||||
@ -5013,7 +5013,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Donphan),
|
||||
ICON(Donphan, 0),
|
||||
.footprint = gMonFootprint_Donphan,
|
||||
FOOTPRINT(Donphan)
|
||||
LEARNSETS(Donphan),
|
||||
},
|
||||
#endif //P_FAMILY_PHANPY
|
||||
@ -5062,7 +5062,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Stantler),
|
||||
ICON(Stantler, 2),
|
||||
.footprint = gMonFootprint_Stantler,
|
||||
FOOTPRINT(Stantler)
|
||||
LEARNSETS(Stantler),
|
||||
.evolutions = EVOLUTION({EVO_MOVE, MOVE_PSYSHIELD_BASH, SPECIES_WYRDEER}),
|
||||
},
|
||||
@ -5112,7 +5112,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
//.backAnimId = BACK_ANIM_NONE,
|
||||
PALETTES(Wyrdeer),
|
||||
ICON(Wyrdeer, 2),
|
||||
//.footprint = gMonFootprint_Wyrdeer,
|
||||
//FOOTPRINT(Wyrdeer)
|
||||
LEARNSETS(Wyrdeer),
|
||||
},
|
||||
#endif //P_GEN_8_CROSS_EVOS
|
||||
@ -5162,7 +5162,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Smeargle),
|
||||
ICON(Smeargle, 1),
|
||||
.footprint = gMonFootprint_Smeargle,
|
||||
FOOTPRINT(Smeargle)
|
||||
LEARNSETS(Smeargle),
|
||||
},
|
||||
#endif //P_FAMILY_SMEARGLE
|
||||
@ -5213,7 +5213,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Miltank),
|
||||
ICON(Miltank, 0),
|
||||
.footprint = gMonFootprint_Miltank,
|
||||
FOOTPRINT(Miltank)
|
||||
LEARNSETS(Miltank),
|
||||
},
|
||||
#endif //P_FAMILY_MILTANK
|
||||
@ -5268,7 +5268,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_FLASH_YELLOW,
|
||||
PALETTES(Raikou),
|
||||
ICON(Raikou, 2),
|
||||
.footprint = gMonFootprint_Raikou,
|
||||
FOOTPRINT(Raikou)
|
||||
LEARNSETS(Raikou),
|
||||
},
|
||||
#endif //P_FAMILY_RAIKOU
|
||||
@ -5323,7 +5323,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(Entei),
|
||||
ICON(Entei, 2),
|
||||
.footprint = gMonFootprint_Entei,
|
||||
FOOTPRINT(Entei)
|
||||
LEARNSETS(Entei),
|
||||
},
|
||||
#endif //P_FAMILY_ENTEI
|
||||
@ -5378,7 +5378,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_BLUE,
|
||||
PALETTES(Suicune),
|
||||
ICON(Suicune, 2),
|
||||
.footprint = gMonFootprint_Suicune,
|
||||
FOOTPRINT(Suicune)
|
||||
LEARNSETS(Suicune),
|
||||
},
|
||||
#endif //P_FAMILY_SUICUNE
|
||||
@ -5427,7 +5427,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Larvitar),
|
||||
ICON(Larvitar, 1),
|
||||
.footprint = gMonFootprint_Larvitar,
|
||||
FOOTPRINT(Larvitar)
|
||||
LEARNSETS(Larvitar),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_PUPITAR}),
|
||||
},
|
||||
@ -5475,7 +5475,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Pupitar),
|
||||
ICON(Pupitar, 2),
|
||||
.footprint = gMonFootprint_Pupitar,
|
||||
FOOTPRINT(Pupitar)
|
||||
LEARNSETS(Pupitar),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 55, SPECIES_TYRANITAR}),
|
||||
},
|
||||
@ -5493,7 +5493,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.speciesName = _("Tyranitar"), \
|
||||
.natDexNum = NATIONAL_DEX_TYRANITAR, \
|
||||
.categoryName = _("Armor"), \
|
||||
.footprint = gMonFootprint_Tyranitar, \
|
||||
FOOTPRINT(Tyranitar) \
|
||||
LEARNSETS(Tyranitar), \
|
||||
.formSpeciesIdTable = sTyranitarFormSpeciesIdTable, \
|
||||
.formChangeTable = sTyranitarFormChangeTable
|
||||
@ -5618,7 +5618,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_BLUE,
|
||||
PALETTES(Lugia),
|
||||
ICON(Lugia, 0),
|
||||
.footprint = gMonFootprint_Lugia,
|
||||
FOOTPRINT(Lugia)
|
||||
LEARNSETS(Lugia),
|
||||
},
|
||||
#endif //P_FAMILY_LUGIA
|
||||
@ -5671,7 +5671,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(HoOh),
|
||||
ICON(HoOh, 1),
|
||||
.footprint = gMonFootprint_HoOh,
|
||||
FOOTPRINT(HoOh)
|
||||
LEARNSETS(HoOh),
|
||||
},
|
||||
#endif //P_FAMILY_HO_OH
|
||||
@ -5724,7 +5724,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_GREEN,
|
||||
PALETTES(Celebi),
|
||||
ICON(Celebi, 1),
|
||||
.footprint = gMonFootprint_Celebi,
|
||||
FOOTPRINT(Celebi)
|
||||
LEARNSETS(Celebi),
|
||||
},
|
||||
#endif //P_FAMILY_CELEBI
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -47,7 +47,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Turtwig),
|
||||
ICON(Turtwig, 1),
|
||||
.footprint = gMonFootprint_Turtwig,
|
||||
FOOTPRINT(Turtwig)
|
||||
LEARNSETS(Turtwig),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_GROTLE}),
|
||||
},
|
||||
@ -96,7 +96,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Grotle),
|
||||
ICON(Grotle, 1),
|
||||
.footprint = gMonFootprint_Grotle,
|
||||
FOOTPRINT(Grotle)
|
||||
LEARNSETS(Grotle),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_TORTERRA}),
|
||||
},
|
||||
@ -146,7 +146,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_GREEN,
|
||||
PALETTES(Torterra),
|
||||
ICON(Torterra, 1),
|
||||
.footprint = gMonFootprint_Torterra,
|
||||
FOOTPRINT(Torterra)
|
||||
LEARNSETS(Torterra),
|
||||
},
|
||||
#endif //P_FAMILY_TURTWIG
|
||||
@ -196,7 +196,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Chimchar),
|
||||
ICON(Chimchar, 1),
|
||||
.footprint = gMonFootprint_Chimchar,
|
||||
FOOTPRINT(Chimchar)
|
||||
LEARNSETS(Chimchar),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_MONFERNO}),
|
||||
},
|
||||
@ -246,7 +246,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Monferno),
|
||||
ICON(Monferno, 0),
|
||||
.footprint = gMonFootprint_Monferno,
|
||||
FOOTPRINT(Monferno)
|
||||
LEARNSETS(Monferno),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_INFERNAPE}),
|
||||
},
|
||||
@ -296,7 +296,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(Infernape),
|
||||
ICON(Infernape, 0),
|
||||
.footprint = gMonFootprint_Infernape,
|
||||
FOOTPRINT(Infernape)
|
||||
LEARNSETS(Infernape),
|
||||
},
|
||||
#endif //P_FAMILY_CHIMCHAR
|
||||
@ -349,7 +349,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Piplup),
|
||||
ICON(Piplup, 0),
|
||||
.footprint = gMonFootprint_Piplup,
|
||||
FOOTPRINT(Piplup)
|
||||
LEARNSETS(Piplup),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_PRINPLUP}),
|
||||
},
|
||||
@ -401,7 +401,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Prinplup),
|
||||
ICON(Prinplup, 0),
|
||||
.footprint = gMonFootprint_Prinplup,
|
||||
FOOTPRINT(Prinplup)
|
||||
LEARNSETS(Prinplup),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_EMPOLEON}),
|
||||
},
|
||||
@ -453,7 +453,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_BLUE,
|
||||
PALETTES(Empoleon),
|
||||
ICON(Empoleon, 0),
|
||||
.footprint = gMonFootprint_Empoleon,
|
||||
FOOTPRINT(Empoleon)
|
||||
LEARNSETS(Empoleon),
|
||||
},
|
||||
#endif //P_FAMILY_PIPLUP
|
||||
@ -504,7 +504,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Starly),
|
||||
ICON(Starly, 0),
|
||||
.footprint = gMonFootprint_Starly,
|
||||
FOOTPRINT(Starly)
|
||||
LEARNSETS(Starly),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_STARAVIA}),
|
||||
},
|
||||
@ -554,7 +554,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_TRIANGLE_DOWN,
|
||||
PALETTES(Staravia),
|
||||
ICON(Staravia, 0),
|
||||
.footprint = gMonFootprint_Staravia,
|
||||
FOOTPRINT(Staravia)
|
||||
LEARNSETS(Staravia),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_STARAPTOR}),
|
||||
},
|
||||
@ -603,7 +603,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Staraptor),
|
||||
ICON(Staraptor, 0),
|
||||
.footprint = gMonFootprint_Staraptor,
|
||||
FOOTPRINT(Staraptor)
|
||||
LEARNSETS(Staraptor),
|
||||
},
|
||||
#endif //P_FAMILY_STARLY
|
||||
@ -654,7 +654,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Bidoof),
|
||||
ICON(Bidoof, 2),
|
||||
.footprint = gMonFootprint_Bidoof,
|
||||
FOOTPRINT(Bidoof)
|
||||
LEARNSETS(Bidoof),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_BIBAREL}),
|
||||
},
|
||||
@ -703,7 +703,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
|
||||
PALETTES(Bibarel),
|
||||
ICON(Bibarel, 2),
|
||||
.footprint = gMonFootprint_Bibarel,
|
||||
FOOTPRINT(Bibarel)
|
||||
LEARNSETS(Bibarel),
|
||||
},
|
||||
#endif //P_FAMILY_BIDOOF
|
||||
@ -755,7 +755,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Kricketot),
|
||||
ICON(Kricketot, 2),
|
||||
.footprint = gMonFootprint_Kricketot,
|
||||
FOOTPRINT(Kricketot)
|
||||
LEARNSETS(Kricketot),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 10, SPECIES_KRICKETUNE}),
|
||||
},
|
||||
@ -806,7 +806,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_VIBRATE,
|
||||
PALETTES(Kricketune),
|
||||
ICON(Kricketune, 2),
|
||||
.footprint = gMonFootprint_Kricketune,
|
||||
FOOTPRINT(Kricketune)
|
||||
LEARNSETS(Kricketune),
|
||||
},
|
||||
#endif //P_FAMILY_KRICKETOT
|
||||
@ -857,7 +857,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Shinx),
|
||||
ICON(Shinx, 0),
|
||||
.footprint = gMonFootprint_Shinx,
|
||||
FOOTPRINT(Shinx)
|
||||
LEARNSETS(Shinx),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_LUXIO}),
|
||||
},
|
||||
@ -907,7 +907,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Luxio),
|
||||
ICON(Luxio, 0),
|
||||
.footprint = gMonFootprint_Luxio,
|
||||
FOOTPRINT(Luxio)
|
||||
LEARNSETS(Luxio),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_LUXRAY}),
|
||||
},
|
||||
@ -957,7 +957,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Luxray),
|
||||
ICON(Luxray, 0),
|
||||
.footprint = gMonFootprint_Luxray,
|
||||
FOOTPRINT(Luxray)
|
||||
LEARNSETS(Luxray),
|
||||
},
|
||||
#endif //P_FAMILY_SHINX
|
||||
@ -1006,7 +1006,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_JOLT_RIGHT,
|
||||
PALETTES(Cranidos),
|
||||
ICON(Cranidos, 0),
|
||||
.footprint = gMonFootprint_Cranidos,
|
||||
FOOTPRINT(Cranidos)
|
||||
LEARNSETS(Cranidos),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_RAMPARDOS}),
|
||||
},
|
||||
@ -1054,7 +1054,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Rampardos),
|
||||
ICON(Rampardos, 0),
|
||||
.footprint = gMonFootprint_Rampardos,
|
||||
FOOTPRINT(Rampardos)
|
||||
LEARNSETS(Rampardos),
|
||||
},
|
||||
#endif //P_FAMILY_CRANIDOS
|
||||
@ -1103,7 +1103,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Shieldon),
|
||||
ICON(Shieldon, 1),
|
||||
.footprint = gMonFootprint_Shieldon,
|
||||
FOOTPRINT(Shieldon)
|
||||
LEARNSETS(Shieldon),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_BASTIODON}),
|
||||
},
|
||||
@ -1151,7 +1151,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Bastiodon),
|
||||
ICON(Bastiodon, 1),
|
||||
.footprint = gMonFootprint_Bastiodon,
|
||||
FOOTPRINT(Bastiodon)
|
||||
LEARNSETS(Bastiodon),
|
||||
},
|
||||
#endif //P_FAMILY_SHIELDON
|
||||
@ -1188,7 +1188,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.frontAnimId = ANIM_V_STRETCH, \
|
||||
.enemyMonElevation = 10, \
|
||||
.backAnimId = BACK_ANIM_H_SHAKE, \
|
||||
.footprint = gMonFootprint_Burmy, \
|
||||
FOOTPRINT(Burmy) \
|
||||
LEARNSETS(Burmy), \
|
||||
.formSpeciesIdTable = sBurmyFormSpeciesIdTable, \
|
||||
.formChangeTable = sBurmyFormChangeTable
|
||||
@ -1276,7 +1276,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.enemyMonElevation = 8, \
|
||||
.backPicYOffset = 2, \
|
||||
.backAnimId = BACK_ANIM_V_SHAKE, \
|
||||
.footprint = gMonFootprint_Wormadam, \
|
||||
FOOTPRINT(Wormadam) \
|
||||
.formSpeciesIdTable = sWormadamFormSpeciesIdTable
|
||||
|
||||
[SPECIES_WORMADAM_PLANT_CLOAK] =
|
||||
@ -1398,7 +1398,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SHAKE,
|
||||
PALETTES(Mothim),
|
||||
ICON(Mothim, 0),
|
||||
.footprint = gMonFootprint_Mothim,
|
||||
FOOTPRINT(Mothim)
|
||||
LEARNSETS(Mothim),
|
||||
},
|
||||
#endif //P_FAMILY_BURMY
|
||||
@ -1450,7 +1450,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
PALETTES(Combee),
|
||||
PALETTE_FEMALE(Combee),
|
||||
ICON(Combee, 0),
|
||||
.footprint = gMonFootprint_Combee,
|
||||
FOOTPRINT(Combee)
|
||||
LEARNSETS(Combee),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 21, SPECIES_VESPIQUEN}),
|
||||
},
|
||||
@ -1501,7 +1501,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE,
|
||||
PALETTES(Vespiquen),
|
||||
ICON(Vespiquen, 0),
|
||||
.footprint = gMonFootprint_Vespiquen,
|
||||
FOOTPRINT(Vespiquen)
|
||||
LEARNSETS(Vespiquen),
|
||||
},
|
||||
#endif //P_FAMILY_COMBEE
|
||||
@ -1551,7 +1551,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_FLASH_YELLOW,
|
||||
PALETTES(Pachirisu),
|
||||
ICON(Pachirisu, 0),
|
||||
.footprint = gMonFootprint_Pachirisu,
|
||||
FOOTPRINT(Pachirisu)
|
||||
LEARNSETS(Pachirisu),
|
||||
},
|
||||
#endif //P_FAMILY_PACHIRISU
|
||||
@ -1601,7 +1601,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Buizel),
|
||||
ICON(Buizel, 0),
|
||||
.footprint = gMonFootprint_Buizel,
|
||||
FOOTPRINT(Buizel)
|
||||
LEARNSETS(Buizel),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_FLOATZEL}),
|
||||
},
|
||||
@ -1650,7 +1650,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Floatzel),
|
||||
ICON(Floatzel, 0),
|
||||
.footprint = gMonFootprint_Floatzel,
|
||||
FOOTPRINT(Floatzel)
|
||||
LEARNSETS(Floatzel),
|
||||
},
|
||||
#endif //P_FAMILY_BUIZEL
|
||||
@ -1700,7 +1700,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Cherubi),
|
||||
ICON(Cherubi, 1),
|
||||
.footprint = gMonFootprint_Cherubi,
|
||||
FOOTPRINT(Cherubi)
|
||||
LEARNSETS(Cherubi),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_CHERRIM_OVERCAST}),
|
||||
},
|
||||
@ -1733,7 +1733,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.pokemonOffset = 13, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Cherrim, \
|
||||
FOOTPRINT(Cherrim) \
|
||||
LEARNSETS(Cherrim), \
|
||||
.formSpeciesIdTable = sCherrimFormSpeciesIdTable, \
|
||||
.formChangeTable = sCherrimFormChangeTable
|
||||
@ -1811,7 +1811,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.frontAnimId = ANIM_V_STRETCH, \
|
||||
.backPicYOffset = 8, \
|
||||
.backAnimId = BACK_ANIM_H_SPRING, \
|
||||
.footprint = gMonFootprint_Shellos, \
|
||||
FOOTPRINT(Shellos) \
|
||||
LEARNSETS(Shellos), \
|
||||
.formSpeciesIdTable = sShellosFormSpeciesIdTable
|
||||
|
||||
@ -1881,7 +1881,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.frontAnimId = ANIM_CIRCULAR_STRETCH_TWICE, \
|
||||
.backPicYOffset = 3, \
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE, \
|
||||
.footprint = gMonFootprint_Gastrodon, \
|
||||
FOOTPRINT(Gastrodon) \
|
||||
LEARNSETS(Gastrodon), \
|
||||
.formSpeciesIdTable = sGastrodonFormSpeciesIdTable
|
||||
|
||||
@ -1961,7 +1961,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Drifloon),
|
||||
ICON(Drifloon, 2),
|
||||
.footprint = gMonFootprint_Drifloon,
|
||||
FOOTPRINT(Drifloon)
|
||||
LEARNSETS(Drifloon),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_DRIFBLIM}),
|
||||
},
|
||||
@ -2010,7 +2010,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Drifblim),
|
||||
ICON(Drifblim, 2),
|
||||
.footprint = gMonFootprint_Drifblim,
|
||||
FOOTPRINT(Drifblim)
|
||||
LEARNSETS(Drifblim),
|
||||
},
|
||||
#endif //P_FAMILY_DRIFLOON
|
||||
@ -2059,7 +2059,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Buneary),
|
||||
ICON(Buneary, 2),
|
||||
.footprint = gMonFootprint_Buneary,
|
||||
FOOTPRINT(Buneary)
|
||||
LEARNSETS(Buneary),
|
||||
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY}),
|
||||
},
|
||||
@ -2076,7 +2076,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.speciesName = _("Lopunny"), \
|
||||
.natDexNum = NATIONAL_DEX_LOPUNNY, \
|
||||
.categoryName = _("Rabbit"), \
|
||||
.footprint = gMonFootprint_Lopunny, \
|
||||
FOOTPRINT(Lopunny) \
|
||||
LEARNSETS(Lopunny), \
|
||||
.formSpeciesIdTable = sLopunnyFormSpeciesIdTable, \
|
||||
.formChangeTable = sLopunnyFormChangeTable
|
||||
@ -2199,7 +2199,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW,
|
||||
PALETTES(Glameow),
|
||||
ICON(Glameow, 0),
|
||||
.footprint = gMonFootprint_Glameow,
|
||||
FOOTPRINT(Glameow)
|
||||
LEARNSETS(Glameow),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_PURUGLY}),
|
||||
},
|
||||
@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_GROW_STUTTER,
|
||||
PALETTES(Purugly),
|
||||
ICON(Purugly, 0),
|
||||
.footprint = gMonFootprint_Purugly,
|
||||
FOOTPRINT(Purugly)
|
||||
LEARNSETS(Purugly),
|
||||
},
|
||||
#endif //P_FAMILY_GLAMEOW
|
||||
@ -2296,7 +2296,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Stunky),
|
||||
ICON(Stunky, 2),
|
||||
.footprint = gMonFootprint_Stunky,
|
||||
FOOTPRINT(Stunky)
|
||||
LEARNSETS(Stunky),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SKUNTANK}),
|
||||
},
|
||||
@ -2344,7 +2344,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_STRETCH,
|
||||
PALETTES(Skuntank),
|
||||
ICON(Skuntank, 2),
|
||||
.footprint = gMonFootprint_Skuntank,
|
||||
FOOTPRINT(Skuntank)
|
||||
LEARNSETS(Skuntank),
|
||||
},
|
||||
#endif //P_FAMILY_STUNKY
|
||||
@ -2395,7 +2395,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_TRIANGLE_DOWN,
|
||||
PALETTES(Bronzor),
|
||||
ICON(Bronzor, 0),
|
||||
.footprint = gMonFootprint_Bronzor,
|
||||
FOOTPRINT(Bronzor)
|
||||
LEARNSETS(Bronzor),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_BRONZONG}),
|
||||
},
|
||||
@ -2446,7 +2446,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Bronzong),
|
||||
ICON(Bronzong, 0),
|
||||
.footprint = gMonFootprint_Bronzong,
|
||||
FOOTPRINT(Bronzong)
|
||||
LEARNSETS(Bronzong),
|
||||
},
|
||||
#endif //P_FAMILY_BRONZOR
|
||||
@ -2496,7 +2496,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Chatot),
|
||||
ICON(Chatot, 0),
|
||||
.footprint = gMonFootprint_Chatot,
|
||||
FOOTPRINT(Chatot)
|
||||
LEARNSETS(Chatot),
|
||||
},
|
||||
#endif //P_FAMILY_CHATOT
|
||||
@ -2546,7 +2546,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Spiritomb),
|
||||
ICON(Spiritomb, 5),
|
||||
.footprint = gMonFootprint_Spiritomb,
|
||||
FOOTPRINT(Spiritomb)
|
||||
LEARNSETS(Spiritomb),
|
||||
},
|
||||
#endif //P_FAMILY_SPIRITOMB
|
||||
@ -2597,7 +2597,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SHAKE,
|
||||
PALETTES(Gible),
|
||||
ICON(Gible, 0),
|
||||
.footprint = gMonFootprint_Gible,
|
||||
FOOTPRINT(Gible)
|
||||
LEARNSETS(Gible),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_GABITE}),
|
||||
},
|
||||
@ -2647,7 +2647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE,
|
||||
PALETTES(Gabite),
|
||||
ICON(Gabite, 0),
|
||||
.footprint = gMonFootprint_Gabite,
|
||||
FOOTPRINT(Gabite)
|
||||
LEARNSETS(Gabite),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_GARCHOMP}),
|
||||
},
|
||||
@ -2671,7 +2671,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.pokemonOffset = 1, \
|
||||
.trainerScale = 326, \
|
||||
.trainerOffset = 4, \
|
||||
.footprint = gMonFootprint_Garchomp, \
|
||||
FOOTPRINT(Garchomp) \
|
||||
LEARNSETS(Garchomp), \
|
||||
.formSpeciesIdTable = sGarchompFormSpeciesIdTable, \
|
||||
.formChangeTable = sGarchompFormChangeTable
|
||||
@ -2781,7 +2781,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_LARGE,
|
||||
PALETTES(Riolu),
|
||||
ICON(Riolu, 2),
|
||||
.footprint = gMonFootprint_Riolu,
|
||||
FOOTPRINT(Riolu)
|
||||
LEARNSETS(Riolu),
|
||||
.evolutions = EVOLUTION({EVO_FRIENDSHIP_DAY, 0, SPECIES_LUCARIO}),
|
||||
},
|
||||
@ -2800,7 +2800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.speciesName = _("Lucario"), \
|
||||
.natDexNum = NATIONAL_DEX_LUCARIO, \
|
||||
.categoryName = _("Aura"), \
|
||||
.footprint = gMonFootprint_Lucario, \
|
||||
FOOTPRINT(Lucario) \
|
||||
LEARNSETS(Lucario), \
|
||||
.formSpeciesIdTable = sLucarioFormSpeciesIdTable, \
|
||||
.formChangeTable = sLucarioFormChangeTable
|
||||
@ -2925,7 +2925,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE
|
||||
ICON_FEMALE(Hippopotas, 1),
|
||||
#endif
|
||||
.footprint = gMonFootprint_Hippopotas,
|
||||
FOOTPRINT(Hippopotas)
|
||||
LEARNSETS(Hippopotas),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_HIPPOWDON}),
|
||||
},
|
||||
@ -2977,7 +2977,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
#if P_CUSTOM_GENDER_DIFF_ICONS == TRUE
|
||||
ICON_FEMALE(Hippowdon, 1),
|
||||
#endif
|
||||
.footprint = gMonFootprint_Hippowdon,
|
||||
FOOTPRINT(Hippowdon)
|
||||
LEARNSETS(Hippowdon),
|
||||
},
|
||||
#endif //P_FAMILY_HIPPOPOTAS
|
||||
@ -3027,7 +3027,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_H_SLIDE,
|
||||
PALETTES(Skorupi),
|
||||
ICON(Skorupi, 0),
|
||||
.footprint = gMonFootprint_Skorupi,
|
||||
FOOTPRINT(Skorupi)
|
||||
LEARNSETS(Skorupi),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_DRAPION}),
|
||||
},
|
||||
@ -3076,7 +3076,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Drapion),
|
||||
ICON(Drapion, 2),
|
||||
.footprint = gMonFootprint_Drapion,
|
||||
FOOTPRINT(Drapion)
|
||||
LEARNSETS(Drapion),
|
||||
},
|
||||
#endif //P_FAMILY_SKORUPI
|
||||
@ -3128,7 +3128,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_GROW,
|
||||
PALETTES(Croagunk),
|
||||
ICON(Croagunk, 0),
|
||||
.footprint = gMonFootprint_Croagunk,
|
||||
FOOTPRINT(Croagunk)
|
||||
LEARNSETS(Croagunk),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_TOXICROAK}),
|
||||
},
|
||||
@ -3179,7 +3179,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_H_SLIDE,
|
||||
PALETTES(Toxicroak),
|
||||
ICON(Toxicroak, 0),
|
||||
.footprint = gMonFootprint_Toxicroak,
|
||||
FOOTPRINT(Toxicroak)
|
||||
LEARNSETS(Toxicroak),
|
||||
},
|
||||
#endif //P_FAMILY_CROAGUNK
|
||||
@ -3229,7 +3229,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Carnivine),
|
||||
ICON(Carnivine, 1),
|
||||
.footprint = gMonFootprint_Carnivine,
|
||||
FOOTPRINT(Carnivine)
|
||||
LEARNSETS(Carnivine),
|
||||
},
|
||||
#endif //P_FAMILY_CARNIVINE
|
||||
@ -3280,7 +3280,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Finneon),
|
||||
ICON(Finneon, 0),
|
||||
.footprint = gMonFootprint_Finneon,
|
||||
FOOTPRINT(Finneon)
|
||||
LEARNSETS(Finneon),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_LUMINEON}),
|
||||
},
|
||||
@ -3330,7 +3330,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Lumineon),
|
||||
ICON(Lumineon, 0),
|
||||
.footprint = gMonFootprint_Lumineon,
|
||||
FOOTPRINT(Lumineon)
|
||||
LEARNSETS(Lumineon),
|
||||
},
|
||||
#endif //P_FAMILY_FINNEON
|
||||
@ -3382,7 +3382,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_STRETCH,
|
||||
PALETTES(Snover),
|
||||
ICON(Snover, 1),
|
||||
.footprint = gMonFootprint_Snover,
|
||||
FOOTPRINT(Snover)
|
||||
LEARNSETS(Snover),
|
||||
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_ABOMASNOW}),
|
||||
},
|
||||
@ -3402,7 +3402,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.speciesName = _("Abomasnow"), \
|
||||
.natDexNum = NATIONAL_DEX_ABOMASNOW, \
|
||||
.categoryName = _("Frost Tree"), \
|
||||
.footprint = gMonFootprint_Abomasnow, \
|
||||
FOOTPRINT(Abomasnow) \
|
||||
LEARNSETS(Abomasnow), \
|
||||
.formSpeciesIdTable = sAbomasnowFormSpeciesIdTable, \
|
||||
.formChangeTable = sAbomasnowFormChangeTable
|
||||
@ -3502,7 +3502,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.pokemonOffset = 13, \
|
||||
.trainerScale = 256, \
|
||||
.trainerOffset = 0, \
|
||||
.footprint = gMonFootprint_Rotom, \
|
||||
FOOTPRINT(Rotom) \
|
||||
LEARNSETS(Rotom), \
|
||||
.formSpeciesIdTable = sRotomFormSpeciesIdTable, \
|
||||
.formChangeTable = sRotomFormChangeTable
|
||||
@ -3704,7 +3704,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Uxie),
|
||||
ICON(Uxie, 0),
|
||||
.footprint = gMonFootprint_Uxie,
|
||||
FOOTPRINT(Uxie)
|
||||
LEARNSETS(Uxie),
|
||||
},
|
||||
#endif //P_FAMILY_UXIE
|
||||
@ -3757,7 +3757,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Mesprit),
|
||||
ICON(Mesprit, 0),
|
||||
.footprint = gMonFootprint_Mesprit,
|
||||
FOOTPRINT(Mesprit)
|
||||
LEARNSETS(Mesprit),
|
||||
},
|
||||
#endif //P_FAMILY_MESPRIT
|
||||
@ -3809,7 +3809,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL,
|
||||
PALETTES(Azelf),
|
||||
ICON(Azelf, 0),
|
||||
.footprint = gMonFootprint_Azelf,
|
||||
FOOTPRINT(Azelf)
|
||||
LEARNSETS(Azelf),
|
||||
},
|
||||
#endif //P_FAMILY_AZELF
|
||||
@ -3831,7 +3831,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.cryId = CRY_DIALGA, \
|
||||
.natDexNum = NATIONAL_DEX_DIALGA, \
|
||||
.categoryName = _("Temporal"), \
|
||||
.footprint = gMonFootprint_Dialga, \
|
||||
FOOTPRINT(Dialga) \
|
||||
LEARNSETS(Dialga), \
|
||||
.formSpeciesIdTable = sDialgaFormSpeciesIdTable, \
|
||||
.formChangeTable = sDialgaFormChangeTable, \
|
||||
@ -3917,7 +3917,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.cryId = CRY_PALKIA, \
|
||||
.natDexNum = NATIONAL_DEX_PALKIA, \
|
||||
.categoryName = _("Spatial"), \
|
||||
.footprint = gMonFootprint_Palkia, \
|
||||
FOOTPRINT(Palkia) \
|
||||
LEARNSETS(Palkia), \
|
||||
.formSpeciesIdTable = sPalkiaFormSpeciesIdTable, \
|
||||
.formChangeTable = sPalkiaFormChangeTable, \
|
||||
@ -4031,7 +4031,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHAKE_GLOW_RED,
|
||||
PALETTES(Heatran),
|
||||
ICON(Heatran, 0),
|
||||
.footprint = gMonFootprint_Heatran,
|
||||
FOOTPRINT(Heatran)
|
||||
LEARNSETS(Heatran),
|
||||
},
|
||||
#endif //P_FAMILY_HEATRAN
|
||||
@ -4081,7 +4081,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_V_SHAKE_LOW,
|
||||
PALETTES(Regigigas),
|
||||
ICON(Regigigas, 0),
|
||||
.footprint = gMonFootprint_Regigigas,
|
||||
FOOTPRINT(Regigigas)
|
||||
LEARNSETS(Regigigas),
|
||||
},
|
||||
#endif //P_FAMILY_REGIGIGAS
|
||||
@ -4102,7 +4102,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.cryId = CRY_GIRATINA, \
|
||||
.natDexNum = NATIONAL_DEX_GIRATINA, \
|
||||
.categoryName = _("Renegade"), \
|
||||
.footprint = gMonFootprint_Giratina, \
|
||||
FOOTPRINT(Giratina) \
|
||||
LEARNSETS(Giratina), \
|
||||
.formSpeciesIdTable = sGiratinaFormSpeciesIdTable, \
|
||||
.formChangeTable = sGiratinaFormChangeTable, \
|
||||
@ -4220,7 +4220,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Cresselia),
|
||||
ICON(Cresselia, 0),
|
||||
.footprint = gMonFootprint_Cresselia,
|
||||
FOOTPRINT(Cresselia)
|
||||
LEARNSETS(Cresselia),
|
||||
},
|
||||
#endif //P_FAMILY_CRESSELIA
|
||||
@ -4271,7 +4271,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Phione),
|
||||
ICON(Phione, 0),
|
||||
.footprint = gMonFootprint_Phione,
|
||||
FOOTPRINT(Phione)
|
||||
LEARNSETS(Phione),
|
||||
},
|
||||
|
||||
@ -4320,7 +4320,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC,
|
||||
PALETTES(Manaphy),
|
||||
ICON(Manaphy, 0),
|
||||
.footprint = gMonFootprint_Manaphy,
|
||||
FOOTPRINT(Manaphy)
|
||||
LEARNSETS(Manaphy),
|
||||
},
|
||||
#endif //P_FAMILY_MANAPHY
|
||||
@ -4372,7 +4372,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_SHRINK_GROW_VIBRATE,
|
||||
PALETTES(Darkrai),
|
||||
ICON(Darkrai, 0),
|
||||
.footprint = gMonFootprint_Darkrai,
|
||||
FOOTPRINT(Darkrai)
|
||||
LEARNSETS(Darkrai),
|
||||
},
|
||||
#endif //P_FAMILY_DARKRAI
|
||||
@ -4393,7 +4393,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.speciesName = _("Shaymin"), \
|
||||
.natDexNum = NATIONAL_DEX_SHAYMIN, \
|
||||
.categoryName = _("Gratitude"), \
|
||||
.footprint = gMonFootprint_Shaymin, \
|
||||
FOOTPRINT(Shaymin) \
|
||||
.formSpeciesIdTable = sShayminFormSpeciesIdTable, \
|
||||
.formChangeTable = sShayminFormChangeTable, \
|
||||
.isMythical = TRUE
|
||||
@ -4510,7 +4510,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.backAnimId = BACK_ANIM_GROW_STUTTER, \
|
||||
PALETTES(Arceus ##typeName), \
|
||||
ICON(Arceus, 1), \
|
||||
.footprint = gMonFootprint_Arceus, \
|
||||
FOOTPRINT(Arceus) \
|
||||
LEARNSETS(Arceus), \
|
||||
.formSpeciesIdTable = sArceusFormSpeciesIdTable, \
|
||||
.formChangeTable = sArceusFormChangeTable, \
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user