diff --git a/.all-contributorsrc b/.all-contributorsrc
index 55ff294842..e2bb282730 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -57,7 +57,8 @@
"profile": "https://github.com/ghoulslash",
"contributions": [
"maintenance",
- "code"
+ "code",
+ "design"
]
},
{
@@ -375,7 +376,8 @@
"profile": "https://github.com/Pyredrid",
"contributions": [
"userTesting",
- "maintenance"
+ "maintenance",
+ "code"
]
},
{
@@ -505,6 +507,96 @@
"contributions": [
"data"
]
+ },
+ {
+ "login": "mrdollsteak",
+ "name": "mrdollsteak",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5975698?v=4",
+ "profile": "https://github.com/mrdollsteak",
+ "contributions": [
+ "data"
+ ]
+ },
+ {
+ "login": "TheXaman",
+ "name": "TheXaman",
+ "avatar_url": "https://avatars.githubusercontent.com/u/48356183?v=4",
+ "profile": "https://github.com/TheXaman",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ZnogyroP",
+ "name": "ZnogyroP",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20970593?v=4",
+ "profile": "https://github.com/ZnogyroP",
+ "contributions": [
+ "design"
+ ]
+ },
+ {
+ "login": "luckytyphlosion",
+ "name": "luckytyphlosion",
+ "avatar_url": "https://avatars.githubusercontent.com/u/10688458?v=4",
+ "profile": "https://github.com/luckytyphlosion",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "ShinyDragonHunter",
+ "name": "Josh",
+ "avatar_url": "https://avatars.githubusercontent.com/u/32826900?v=4",
+ "profile": "https://github.com/ShinyDragonHunter",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Gamer2020",
+ "name": "Gamer2020",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6243575?v=4",
+ "profile": "https://github.com/Gamer2020",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "SonikkuA-DatH",
+ "name": "SonikkuA-DatH",
+ "avatar_url": "https://avatars.githubusercontent.com/u/58025603?v=4",
+ "profile": "https://github.com/SonikkuA-DatH",
+ "contributions": [
+ "design"
+ ]
+ },
+ {
+ "login": "Jaizu",
+ "name": "Jaizu",
+ "avatar_url": "https://avatars.githubusercontent.com/u/18596778?v=4",
+ "profile": "https://jaizu.moe",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "izrofid",
+ "name": "Kildemal",
+ "avatar_url": "https://avatars.githubusercontent.com/u/206095739?v=4",
+ "profile": "https://github.com/izrofid",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "Skeli789",
+ "name": "Skeli",
+ "avatar_url": "https://avatars.githubusercontent.com/u/17243618?v=4",
+ "profile": "https://github.com/Skeli789",
+ "contributions": [
+ "design"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
index 2f25421ea0..a8e9c9326a 100644
--- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
+++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
@@ -43,9 +43,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using?
options:
- - 1.14.1 (Latest release)
+ - 1.14.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
+ - 1.14.1
- 1.14.0
- 1.13.4
- 1.13.3
diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
index b0ee167021..e6762925b4 100644
--- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
+++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
@@ -43,9 +43,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using?
options:
- - 1.14.1 (Latest release)
+ - 1.14.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
+ - 1.14.1
- 1.14.0
- 1.13.4
- 1.13.3
diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml
index 4dcb2b3093..8fa4e94564 100644
--- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml
+++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml
@@ -43,9 +43,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using?
options:
- - 1.14.1 (Latest release)
+ - 1.14.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
+ - 1.14.1
- 1.14.0
- 1.13.4
- 1.13.3
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index da1a943e83..bb069cf6c0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -31,11 +31,11 @@ jobs:
env:
COMPARE: 0
run: make -j${nproc} -O all
-
- - name: LTO
+
+ - name: Release
run: |
make tidy
- make -j${nproc} LTO=1
+ make -j${nproc} release
# make tidy to purge previous build
- name: Test
diff --git a/CREDITS.md b/CREDITS.md
index dfec2d747c..38d03ba139 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -1,13 +1,3 @@
-
-
-
-
-
-
-
-
-
-
## Credits ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
@@ -22,7 +12,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Alex 🚧 💻 |
 Bassoonian 🚧 💻 |
 DizzyEggg 🚧 💻 |
-  ghoulslash 🚧 💻 |
+  ghoulslash 🚧 💻 🎨 |
 hedara90 🚧 💻 |
 Martin Griffin 🚧 💻 |
@@ -64,7 +54,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Enrico Drago 📖 📓 |
-  Pyredrid 📓 🚧 |
+  Pyredrid 📓 🚧 💻 |
 mv 💻 🎨 |
 Avara 🔣 |
 Doesnty 🎨 |
@@ -83,6 +73,18 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Eva 🎨 |
 amiosi 🔣 |
+  mrdollsteak 🔣 |
+  TheXaman 💻 |
+  ZnogyroP 🎨 |
+  luckytyphlosion 💻 |
+  Josh 💻 |
+
+
+  Gamer2020 💻 |
+  SonikkuA-DatH 🎨 |
+  Jaizu 💻 |
+  Kildemal 💻 |
+  Skeli 🎨 |
diff --git a/README.md b/README.md
index 8094c29e85..c74b22fa29 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity.
```
-Based off RHH's pokeemerald-expansion 1.14.1 https://github.com/rh-hideout/pokeemerald-expansion/
+Based off RHH's pokeemerald-expansion 1.14.2 https://github.com/rh-hideout/pokeemerald-expansion/
```
Please consider [crediting all contributors](CREDITS.md) involved in the project!
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
index 7d7812c3b4..d8a8be7612 100644
--- a/asm/macros/battle_script.inc
+++ b/asm/macros/battle_script.inc
@@ -1,44 +1,44 @@
@ commands
.macro attackcanceler
- .byte 0x0
+ .byte B_SCR_OP_ATTACKCANCELER
.endm
.macro accuracycheck failInstr:req, move:req
- .byte 0x1
+ .byte B_SCR_OP_ACCURACYCHECK
.4byte \failInstr
.2byte \move
.endm
.macro printattackstring
- .byte 0x2
+ .byte B_SCR_OP_PRINTATTACKSTRING
.endm
.macro unused_0x3
- .byte 0x3
+ .byte B_SCR_OP_UNUSED_0x3
.endm
.macro critcalc
- .byte 0x4
+ .byte B_SCR_OP_CRITCALC
.endm
.macro damagecalc
- .byte 0x5
+ .byte B_SCR_OP_DAMAGECALC
.endm
.macro typecalc
- .byte 0x6
+ .byte B_SCR_OP_TYPECALC
.endm
.macro adjustdamage
- .byte 0x7
+ .byte B_SCR_OP_ADJUSTDAMAGE
.endm
.macro multihitresultmessage
- .byte 0x8
+ .byte B_SCR_OP_MULTIHITRESULTMESSAGE
.endm
.macro attackanimation
- .byte 0x9
+ .byte B_SCR_OP_ATTACKANIMATION
.endm
.macro waitanimation
@@ -70,7 +70,7 @@
.endm
.macro printstring id:req
- .byte 0x10
+ .byte B_SCR_OP_PRINTSTRING
.2byte \id
.endm
@@ -79,28 +79,28 @@
.endm
.macro printselectionstring id:req
- .byte 0x11
+ .byte B_SCR_OP_PRINTSELECTIONSTRING
.2byte \id
.endm
.macro waitmessage time:req
- .byte 0x12
+ .byte B_SCR_OP_WAITMESSAGE
.2byte \time
.endm
.macro printfromtable ptr:req
- .byte 0x13
+ .byte B_SCR_OP_PRINTFROMTABLE
.4byte \ptr
.endm
.macro printselectionstringfromtable ptr:req
- .byte 0x14
+ .byte B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE
.4byte \ptr
.endm
.macro setadditionaleffects
1:
- .byte 0x15
+ .byte B_SCR_OP_SETADDITIONALEFFECTS
jumpifhalfword CMP_EQUAL, sMOVE_EFFECT, MOVE_EFFECT_CONTINUE, 1b
.endm
@@ -108,7 +108,7 @@
.if \moveEffect != 0
setmoveeffect \moveEffect
.endif
- .byte 0x16
+ .byte B_SCR_OP_SETEFFECTPRIMARY
.byte \battler
.byte \effectBattler
.endm
@@ -117,26 +117,26 @@
.if \moveEffect != 0
setmoveeffect \moveEffect
.endif
- .byte 0x17
+ .byte B_SCR_OP_SETEFFECTSECONDARY
.byte \battler
.byte \effectBattler
.endm
.macro clearvolatile battler:req, volatile:req
- .byte 0x18
+ .byte B_SCR_OP_CLEARVOLATILE
.byte \battler
.byte \volatile
.endm
.macro tryfaintmon battler:req
- .byte 0x19
+ .byte B_SCR_OP_TRYFAINTMON
.byte \battler
.byte FALSE
.4byte NULL
.endm
.macro tryfaintmon_spikes battler:req, instr:req
- .byte 0x19
+ .byte B_SCR_OP_TRYFAINTMON
.byte \battler
.byte TRUE
.4byte \instr
@@ -181,7 +181,7 @@
.endm
.macro jumpifstat battler:req, comparison:req, stat:req, value:req, jumpInstr:req
- .byte 0x20
+ .byte B_SCR_OP_JUMPIFSTAT
.byte \battler
.byte \comparison
.byte \stat
@@ -190,7 +190,7 @@
.endm
.macro jumpifstatignorecontrary battler:req, comparison:req, stat:req, value:req, jumpInstr:req
- .byte 0x21
+ .byte B_SCR_OP_JUMPIFSTATIGNORECONTRARY
.byte \battler
.byte \comparison
.byte \stat
@@ -199,7 +199,7 @@
.endm
.macro jumpbasedontype battler:req, type:req, jumpIfType:req, jumpInstr:req
- .byte 0x22
+ .byte B_SCR_OP_JUMPBASEDONTYPE
.byte \battler
.byte \type
.byte \jumpIfType
@@ -215,36 +215,36 @@
.endm
.macro getexp battler:req
- .byte 0x23
+ .byte B_SCR_OP_GETEXP
.byte \battler
.endm
.macro checkteamslost jumpInstr:req
- .byte 0x24
+ .byte B_SCR_OP_CHECKTEAMSLOST
.4byte \jumpInstr
.endm
.macro movevaluescleanup
- .byte 0x25
+ .byte B_SCR_OP_MOVEVALUESCLEANUP
.endm
.macro setmultihit value:req
- .byte 0x26
+ .byte B_SCR_OP_SETMULTIHIT
.byte \value
.endm
.macro decrementmultihit loopInstr:req
- .byte 0x27
+ .byte B_SCR_OP_DECREMENTMULTIHIT
.4byte \loopInstr
.endm
.macro goto instr:req
- .byte 0x28
+ .byte B_SCR_OP_GOTO
.4byte \instr
.endm
.macro jumpifbyte comparison:req, bytePtr:req, value:req, jumpInstr:req
- .byte 0x29
+ .byte B_SCR_OP_JUMPIFBYTE
.byte \comparison
.4byte \bytePtr
.byte \value
@@ -296,20 +296,20 @@
.endm
.macro subbyte bytePtr:req, value:req
- .byte 0x30
+ .byte B_SCR_OP_SUBBYTE
.4byte \bytePtr
.byte \value
.endm
.macro copyarray dest:req, src:req, size:req
- .byte 0x31
+ .byte B_SCR_OP_COPYARRAY
.4byte \dest
.4byte \src
.byte \size
.endm
.macro copyarraywithindex dest:req, src:req, indexPtr:req, size:req
- .byte 0x32
+ .byte B_SCR_OP_COPYARRAYWITHINDEX
.4byte \dest
.4byte \src
.4byte \indexPtr
@@ -317,48 +317,48 @@
.endm
.macro orbyte bytePtr:req, value:req
- .byte 0x33
+ .byte B_SCR_OP_ORBYTE
.4byte \bytePtr
.byte \value
.endm
.macro orhalfword halfwordPtr:req, value:req
- .byte 0x34
+ .byte B_SCR_OP_ORHALFWORD
.4byte \halfwordPtr
.2byte \value
.endm
.macro orword wordPtr:req, value:req
- .byte 0x35
+ .byte B_SCR_OP_ORWORD
.4byte \wordPtr
.4byte \value
.endm
.macro bicbyte bytePtr:req, value:req
- .byte 0x36
+ .byte B_SCR_OP_BICBYTE
.4byte \bytePtr
.byte \value
.endm
.macro bichalfword halfwordPtr:req, value:req
- .byte 0x37
+ .byte B_SCR_OP_BICHALFWORD
.4byte \halfwordPtr
.2byte \value
.endm
.macro bicword wordPtr:req, value:req
- .byte 0x38
+ .byte B_SCR_OP_BICWORD
.4byte \wordPtr
.4byte \value
.endm
.macro pause frames:req
- .byte 0x39
+ .byte B_SCR_OP_PAUSE
.2byte \frames
.endm
.macro setchargingturn
- .byte 0x40
+ .byte B_SCR_OP_SETCHARGINGTURN
.endm
.macro waitstate
@@ -386,51 +386,51 @@
.endm
.macro call instr:req
- .byte 0x41
+ .byte B_SCR_OP_CALL
.4byte \instr
.endm
.macro setroost
- .byte 0x42
+ .byte B_SCR_OP_SETROOST
.endm
.macro jumpifabilitypresent ability:req, jumpInstr:req
- .byte 0x43
+ .byte B_SCR_OP_JUMPIFABILITYPRESENT
.2byte \ability
.4byte \jumpInstr
.endm
.macro endselectionscript
- .byte 0x44
+ .byte B_SCR_OP_ENDSELECTIONSCRIPT
.endm
.macro playanimation battler:req, animId:req, argPtr=NULL
- .byte 0x45
+ .byte B_SCR_OP_PLAYANIMATION
.byte \battler
.byte \animId
.4byte \argPtr
.endm
.macro playanimation_var battler:req, animIdPtr:req, argPtr=NULL
- .byte 0x46
+ .byte B_SCR_OP_PLAYANIMATION_VAR
.byte \battler
.4byte \animIdPtr
.4byte \argPtr
.endm
.macro jumpfifsemiinvulnerable battler:req, state:req, jumpInstr:req
- .byte 0x47
+ .byte B_SCR_OP_JUMPFIFSEMIINVULNERABLE
.byte \battler
.byte \state
.4byte \jumpInstr
.endm
.macro unused_0x48
- .byte 0x48
+ .byte B_SCR_OP_UNUSED_0x48
.endm
.macro moveend endMode:req, endState:req
- .byte 0x49
+ .byte B_SCR_OP_MOVEEND
.byte \endMode
.byte \endState
.endm
@@ -500,54 +500,54 @@
.endm
.macro openpartyscreen battler:req, failInstr:req
- .byte 0x50
+ .byte B_SCR_OP_OPENPARTYSCREEN
.byte \battler
.4byte \failInstr
.endm
.macro switchhandleorder battler:req, state:req
- .byte 0x51
+ .byte B_SCR_OP_SWITCHHANDLEORDER
.byte \battler
.byte \state
.endm
.macro switchineffects battler:req
- .byte 0x52
+ .byte B_SCR_OP_SWITCHINEFFECTS
.byte \battler
.endm
.macro trainerslidein position:req
- .byte 0x53
+ .byte B_SCR_OP_TRAINERSLIDEIN
.byte \position
.endm
.macro playse song:req
- .byte 0x54
+ .byte B_SCR_OP_PLAYSE
.2byte \song
.endm
.macro fanfare song:req
- .byte 0x55
+ .byte B_SCR_OP_FANFARE
.2byte \song
.endm
.macro playfaintcry battler:req
- .byte 0x56
+ .byte B_SCR_OP_PLAYFAINTCRY
.byte \battler
.endm
.macro endlinkbattle
- .byte 0x57
+ .byte B_SCR_OP_ENDLINKBATTLE
.endm
.macro returntoball battler:req, changingForm:req
- .byte 0x58
+ .byte B_SCR_OP_RETURNTOBALL
.byte \battler
.byte \changingForm
.endm
.macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req
- .byte 0x59
+ .byte B_SCR_OP_HANDLELEARNNEWMOVE
.4byte \learnedMoveInstr
.4byte \nothingToLearnInstr
.byte \isFirstMove
@@ -582,27 +582,27 @@
.endm
.macro incrementgamestat stat:req
- .byte 0x60
+ .byte B_SCR_OP_INCREMENTGAMESTAT
.byte \stat
.endm
.macro drawpartystatussummary battler:req
- .byte 0x61
+ .byte B_SCR_OP_DRAWPARTYSTATUSSUMMARY
.byte \battler
.endm
.macro hidepartystatussummary battler:req
- .byte 0x62
+ .byte B_SCR_OP_HIDEPARTYSTATUSSUMMARY
.byte \battler
.endm
.macro jumptocalledmove notChosenMove:req
- .byte 0x63
+ .byte B_SCR_OP_JUMPTOCALLEDMOVE
.byte \notChosenMove
.endm
.macro statusanimation battler:req, status=0, isVolatile=FALSE
- .byte 0x64
+ .byte B_SCR_OP_STATUSANIMATION
.byte \battler
.4byte \status
.byte \isVolatile
@@ -613,15 +613,15 @@
.endm
.macro yesnobox
- .byte 0x67
+ .byte B_SCR_OP_YESNOBOX
.endm
.macro cancelallactions
- .byte 0x68
+ .byte B_SCR_OP_CANCELALLACTIONS
.endm
.macro setgravity failInstr:req
- .byte 0x69
+ .byte B_SCR_OP_SETGRAVITY
.4byte \failInstr
.endm
@@ -652,47 +652,47 @@
.endm
.macro recordability battler:req
- .byte 0x70
+ .byte B_SCR_OP_RECORDABILITY
.byte \battler
.endm
.macro buffermovetolearn
- .byte 0x71
+ .byte B_SCR_OP_BUFFERMOVETOLEARN
.endm
.macro jumpifplayerran jumpInstr:req
- .byte 0x72
+ .byte B_SCR_OP_JUMPIFPLAYERRAN
.4byte \jumpInstr
.endm
.macro hpthresholds battler:req
- .byte 0x73
+ .byte B_SCR_OP_HPTHRESHOLDS
.byte \battler
.endm
.macro hpthresholds2 battler:req
- .byte 0x74
+ .byte B_SCR_OP_HPTHRESHOLDS2
.byte \battler
.endm
.macro useitemonopponent
- .byte 0x75
+ .byte B_SCR_OP_USEITEMONOPPONENT
.endm
.macro unused_0x78
- .byte 0x76
+ .byte B_SCR_OP_UNUSED_0x78
.endm
.macro setprotectlike
- .byte 0x77
+ .byte B_SCR_OP_SETPROTECTLIKE
.endm
.macro tryexplosion
- .byte 0x78
+ .byte B_SCR_OP_TRYEXPLOSION
.endm
.macro setatkhptozero
- .byte 0x79
+ .byte B_SCR_OP_SETATKHPTOZERO
.endm
.macro jumpifnexttargetvalid jumpInstr:req
@@ -724,38 +724,38 @@
.endm
.macro manipulatedamage mode:req
- .byte 0x80
+ .byte B_SCR_OP_MANIPULATEDAMAGE
.byte \mode
.endm
.macro trysetrest
- .byte 0x81
+ .byte B_SCR_OP_TRYSETREST
.endm
.macro unused_0x82
- .byte 0x82
+ .byte B_SCR_OP_UNUSED_0x82
.endm
.macro unused_0x83
- .byte 0x83
+ .byte B_SCR_OP_UNUSED_0x83
.endm
.macro jumpifuproarwakes jumpInstr:req
- .byte 0x84
+ .byte B_SCR_OP_JUMPIFUPROARWAKES
.4byte \jumpInstr
.endm
.macro stockpile id:req
- .byte 0x85
+ .byte B_SCR_OP_STOCKPILE
.byte \id
.endm
.macro stockpiletobasedamage
- .byte 0x86
+ .byte B_SCR_OP_STOCKPILETOBASEDAMAGE
.endm
.macro stockpiletohpheal failInstr:req
- .byte 0x87
+ .byte B_SCR_OP_STOCKPILETOHPHEAL
.4byte \failInstr
.endm
@@ -764,11 +764,11 @@
.endm
.macro unused_0x88
- .byte 0x88
+ .byte B_SCR_OP_UNUSED_0x88
.endm
.macro statbuffchange battler:req, flags:req, failInstr:req, stats=0
- .byte 0x89
+ .byte B_SCR_OP_STATBUFFCHANGE
.byte \battler
.2byte \flags
.4byte \failInstr
@@ -814,50 +814,50 @@
.endm
.macro tryconversiontypechange failInstr:req
- .byte 0x90
+ .byte B_SCR_OP_TRYCONVERSIONTYPECHANGE
.4byte \failInstr
.endm
.macro givepaydaymoney
- .byte 0x91
+ .byte B_SCR_OP_GIVEPAYDAYMONEY
.endm
.macro setlightscreen
- .byte 0x92
+ .byte B_SCR_OP_SETLIGHTSCREEN
.endm
.macro tryKO failInstr:req
- .byte 0x93
+ .byte B_SCR_OP_TRYKO
.4byte \failInstr
.endm
.macro checknonvolatiletrigger nonVolatile:req, failInstr:req
- .byte 0x94
+ .byte B_SCR_OP_CHECKNONVOLATILETRIGGER
.2byte \nonVolatile
.4byte \failInstr
.endm
.macro copybidedmg
- .byte 0x95
+ .byte B_SCR_OP_COPYBIDEDMG
.endm
.macro animatewildpokemonafterfailedpokeball battler:req
- .byte 0x96
+ .byte B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL
.byte \battler
.endm
.macro tryinfatuating failInstr:req
- .byte 0x97
+ .byte B_SCR_OP_TRYINFATUATING
.4byte \failInstr
.endm
.macro updatestatusicon battler:req
- .byte 0x98
+ .byte B_SCR_OP_UPDATESTATUSICON
.byte \battler
.endm
.macro setmist
- .byte 0x99
+ .byte B_SCR_OP_SETMIST
.endm
.macro setfocusenergy battler:req
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index 6abaeff265..8868f83f7d 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -2364,26 +2364,26 @@
.4byte \minutes
.endm
- @ When OW_USE_FAKE_RTC is true, adds a specified number of days to the time.
+ @ When OW_USE_FAKE_RTC is true, adds a specified number of days to the time.
.macro adddays days:req
callnative ScrCmd_adddays, requests_effects=1
.4byte \days
.endm
- @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time.
+ @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time.
.macro addhours hours:req
callnative ScrCmd_addhours, requests_effects=1
.4byte \hours
.endm
- @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time.
+ @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time.
.macro addminutes minutes:req
callnative ScrCmd_addminutes, requests_effects=1
.4byte \minutes
.endm
- @ Forwards the time to a specified hour and minute.
- @ This causes the time to go to the next day if the time has already been past.
+ @ Forwards the time to a specified hour and minute.
+ @ This causes the time to go to the next day if the time has already been past.
.macro fwdtime hours:req, minutes:req
callnative ScrCmd_fwdtime, requests_effects=1
.4byte \hours
diff --git a/asm/macros/map.inc b/asm/macros/map.inc
index 56d7387238..04a749026a 100644
--- a/asm/macros/map.inc
+++ b/asm/macros/map.inc
@@ -112,6 +112,9 @@
@ Defines a background hidden item event for map data
.macro bg_hidden_item_event x:req, y:req, elevation:req, item:req, flag:req
+ .if \flag < FLAG_HIDDEN_ITEMS_START
+ .error "Hidden Item flag \flag is too small. Must be >= FLAG_HIDDEN_ITEMS_START."
+ .endif
bg_event \x, \y, \elevation, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START)
.endm
diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc
index 2599b6c4aa..73f98f31f7 100644
--- a/constants/m4a_constants.inc
+++ b/constants/m4a_constants.inc
@@ -181,7 +181,7 @@
struct_field o_MusicPlayerTrack_ToneData_sustain, 1
struct_field o_MusicPlayerTrack_ToneData_release, 1
struct_field o_MusicPlayerTrack_gap, 10
- struct_field o_MusicPlayerTrack_unk_3A, 2
+ struct_field o_MusicPlayerTrack_timer, 2
struct_field o_MusicPlayerTrack_unk_3C, 4
struct_field o_MusicPlayerTrack_cmdPtr, 4
struct_field o_MusicPlayerTrack_patternStack, 12
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 5623654048..7344b2d3e6 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -341,7 +341,6 @@ gBattleAnimMove_MetalBurst::
waitforvisualfinish
end
-@Credits: Skeli
gBattleAnimMove_UTurn::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_RAZOR_LEAF
@@ -1979,7 +1978,6 @@ SnowSlide1:
delay 2
return
-@Credits to Skeli
gBattleAnimMove_IceShard::
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
@@ -2419,7 +2417,6 @@ InitRoomAnimation:
createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1
return
-@ Credits to Skeli
gBattleAnimMove_DracoMeteor::
loadspritegfx ANIM_TAG_ROCKS @Rocks
loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour
@@ -5606,7 +5603,6 @@ GrassPledgeMiddleFountain:
delay 4
return
-@Credits to Skeli
gBattleAnimMove_VoltSwitch::
loadspritegfx ANIM_TAG_SHADOW_BALL
loadspritegfx ANIM_TAG_IONS
@@ -14105,7 +14101,6 @@ SmallAppleShower:
delay 2
return
-@ credits to Skeli
gBattleAnimMove_SpiritBreak::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_TEAL_ALERT
@@ -14212,7 +14207,6 @@ gBattleAnimMove_Obstruct::
clearmonbg ANIM_ATK_PARTNER
end
-@Credits to Skeli
gBattleAnimMove_FalseSurrender::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_CROSS_IMPACT
@@ -14435,7 +14429,6 @@ SetSteelBeamBgPlayer:
fadetobg BG_STEEL_BEAM_PLAYER
goto SetHighSpeedBgFade
-@Credits to Skeli
gBattleAnimMove_ExpandingForce::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_EXPLOSION_2
@@ -14546,7 +14539,6 @@ MaxKnuckleExplosionGeyser:
return
-@Credits to Skeli
gBattleAnimMove_SteelRoller::
loadspritegfx ANIM_TAG_STEAMROLLER
loadspritegfx ANIM_TAG_IMPACT
@@ -14569,7 +14561,6 @@ SteelRollerRocks:
createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x19, 0x4, 0x4
return
-@Credits to Skeli
gBattleAnimMove_ScaleShot::
loadspritegfx ANIM_TAG_SHELL_RIGHT
loadspritegfx ANIM_TAG_IMPACT
@@ -14586,7 +14577,6 @@ gBattleAnimMove_ScaleShot::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_MeteorBeam::
loadspritegfx ANIM_TAG_ROCKS
fadetobg BG_COSMIC
@@ -14692,7 +14682,6 @@ gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_MistyExplosion::
loadspritegfx ANIM_TAG_EXPLOSION
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(27, 18, 30), 8, RGB_BLACK, 8
@@ -14709,7 +14698,6 @@ gBattleAnimMove_MistyExplosion::
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 16, 0, RGB(31, 27, 31) @;White Pink
end
-@Credits to Skeli
gBattleAnimMove_GrassyGlide::
loadspritegfx ANIM_TAG_LEAF @leaves
loadspritegfx ANIM_TAG_IMPACT @hits
@@ -14725,7 +14713,6 @@ gBattleAnimMove_GrassyGlide::
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2
end
-@Credits to Skeli
gBattleAnimMove_RisingVoltage::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
@@ -14929,7 +14916,6 @@ gBattleAnimMove_SkitterSmack::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_BurningJealousy::
loadspritegfx ANIM_TAG_SMALL_EMBER
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
@@ -14982,7 +14968,6 @@ BurningJealousyFlames:
return
-@Credits to Skeli
gBattleAnimMove_LashOut::
loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
@@ -15063,7 +15048,6 @@ gBattleAnimMove_Poltergeist::
unloadspritegfx ANIM_TAG_ITEM_BAG
end
-@Credits to Skeli
gBattleAnimMove_CorrosiveGas::
loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINK_CLOUD, 0, 14, 14, RGB(15, 15, 6) @;Garbage green
@@ -15089,7 +15073,6 @@ gBattleAnimMove_CorrosiveGas::
clearmonbg ANIM_ATTACKER
end
-@Credits to Skeli
gBattleAnimMove_Coaching::
playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 1
@@ -15100,7 +15083,6 @@ gBattleAnimMove_Coaching::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_FlipTurn::
loadspritegfx ANIM_TAG_ICE_CRYSTALS @;Bubbles
loadspritegfx ANIM_TAG_HYDRO_PUMP
@@ -15124,7 +15106,6 @@ gBattleAnimMove_FlipTurn::
end
-@Credits to Skeli
gBattleAnimMove_TripleAxel::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
@@ -15169,7 +15150,6 @@ TripleAxelEnd:
blendoff
end
-@Credits to Skeli
gBattleAnimMove_DualWingbeat::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_WHITE_FEATHER
@@ -15226,7 +15206,6 @@ DualWingbeatFeatherScatterRight:
createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0xfe80, 0xffe1
return
-@ credits to Skeli
gBattleAnimMove_ScorchingSands::
loadspritegfx ANIM_TAG_MUD_SAND
loadspritegfx ANIM_TAG_SMALL_EMBER
@@ -15251,7 +15230,6 @@ gBattleAnimMove_ScorchingSands::
blendoff
end
-@ credits to skeli
gBattleAnimMove_JungleHealing::
loadspritegfx ANIM_TAG_ROOTS
loadspritegfx ANIM_TAG_ORBS
@@ -15289,7 +15267,6 @@ gBattleAnimMove_JungleHealing::
waitbgfadein
end
-@ credits to ghoulslash
gBattleAnimMove_SilkTrap::
loadspritegfx ANIM_TAG_PROTECT
loadspritegfx ANIM_TAG_SPIDER_WEB
@@ -15305,7 +15282,6 @@ gBattleAnimMove_SilkTrap::
clearmonbg ANIM_ATK_PARTNER
end
-@ Also used by Snow weather. Credits to Dat.H A
gBattleAnimMove_Snowscape::
loadspritegfx ANIM_TAG_SNOWFLAKES
playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER
@@ -15322,7 +15298,6 @@ gBattleAnimMove_Snowscape::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_WickedBlow::
loadspritegfx ANIM_TAG_FOCUS_ENERGY
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -15385,7 +15360,6 @@ WickedBlowBuffEffect:
-@Credits to Skeli
gBattleAnimMove_SurgingStrikes::
loadspritegfx ANIM_TAG_IMPACT_2
loadspritegfx ANIM_TAG_WATER_IMPACT
@@ -15432,7 +15406,6 @@ SURGING_STRIKES_2:
end
-@Credits to Skeli
gBattleAnimMove_ThunderCage::
loadspritegfx ANIM_TAG_SHOCK_3 @Thunderbolt Ball
loadspritegfx ANIM_TAG_SPARK @Electric lines
@@ -15471,7 +15444,6 @@ ThunderCageBolts:
return
-@Credits to Skeli
gBattleAnimMove_DragonEnergy::
loadspritegfx ANIM_TAG_HYDRO_PUMP
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple
@@ -15530,7 +15502,6 @@ DragonEnergyShot:
return
-@Credits to Skeli
gBattleAnimMove_FreezingGlare::
loadspritegfx ANIM_TAG_SMALL_RED_EYE
loadspritegfx ANIM_TAG_EYE_SPARKLE
@@ -15549,7 +15520,6 @@ gBattleAnimMove_FreezingGlare::
end
-@Credits to Skeli
gBattleAnimMove_FieryWrath::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_PURPLE_RING
@@ -15629,7 +15599,6 @@ FieryWrathGeyser:
return
-@Credits to Skeli
gBattleAnimMove_ThunderousKick::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -15666,7 +15635,6 @@ gBattleAnimMove_ThunderousKick::
end
-@Credits to Skeli
gBattleAnimMove_GlacialLance::
loadspritegfx ANIM_TAG_ICICLE_SPEAR
loadspritegfx ANIM_TAG_ICE_CUBE
@@ -15821,7 +15789,6 @@ AstralBarrageFlames5:
return
-@Credits to Skeli
gBattleAnimMove_EerieSpell::
loadspritegfx ANIM_TAG_PURPLE_FLAME
call SetPsychicBackground
@@ -15864,7 +15831,6 @@ EerieSpellConvergingFlames:
return
@@@@@@@@@@@@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@@@@@@@@@@@@
-@ credits to Skeli
gBattleAnimMove_DireClaw::
loadspritegfx ANIM_TAG_SLASH
loadspritegfx ANIM_TAG_POISON_BUBBLE
@@ -15885,7 +15851,6 @@ gBattleAnimMove_DireClaw::
end
-@ credits to Skeli
gBattleAnimMove_PsyshieldBash::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_WATER_GUN @Blue colour
@@ -15914,7 +15879,6 @@ gBattleAnimMove_PsyshieldBash::
blendoff
end
-@ credits to skeli
gBattleAnimMove_PowerShift::
loadspritegfx ANIM_TAG_BLUEGREEN_ORB
loadspritegfx ANIM_TAG_RED_HEART @Red colour for orb
@@ -15930,7 +15894,6 @@ gBattleAnimMove_PowerShift::
end
-@ credits to skeli
gBattleAnimMove_StoneAxe::
loadspritegfx ANIM_TAG_SLAM_HIT_2 @Cut
loadspritegfx ANIM_TAG_ROCKS
@@ -15960,7 +15923,6 @@ StoneAxeRockFragments:
return
-@Credits to Skeli
gBattleAnimMove_SpringtideStorm::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_RED_HEART
@@ -15999,7 +15961,6 @@ SpringtideStormHeartSwirl:
return
-@Credits to Skeli
gBattleAnimMove_MysticalPower::
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour
@@ -16054,7 +16015,6 @@ MysticalPowerFoeTwoRingsOnly:
return
-@Credits to Skeli
gBattleAnimMove_RagingFury::
loadspritegfx ANIM_TAG_SMALL_EMBER
loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3
@@ -16071,7 +16031,6 @@ gBattleAnimMove_RagingFury::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_WaveCrash::
loadspritegfx ANIM_TAG_WATER_IMPACT
loadspritegfx ANIM_TAG_SMALL_BUBBLES
@@ -16092,7 +16051,6 @@ gBattleAnimMove_WaveCrash::
end
-@Credits to Skeli
gBattleAnimMove_Chloroblast::
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_HYDRO_PUMP
@@ -16153,7 +16111,6 @@ ChloroblastShot:
delay 2
return
-@Credits to Skeli
gBattleAnimMove_MountainGale::
loadspritegfx ANIM_TAG_ROCKS @Rocks
loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour
@@ -16186,7 +16143,6 @@ MountainGaleIceRock:
-@Credits to Skeli
gBattleAnimMove_VictoryDance::
loadspritegfx ANIM_TAG_HOLLOW_ORB
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 40, 6, 3, 3
@@ -16206,7 +16162,6 @@ gBattleAnimMove_VictoryDance::
waitforvisualfinish
end
-@Credits to Skeli
gBattleAnimMove_HeadlongRush::
loadspritegfx ANIM_TAG_MUD_SAND @Dig
loadspritegfx ANIM_TAG_IMPACT
@@ -16293,7 +16248,6 @@ MaxQuake_DirtGeyser:
return
-@Credits to Skeli
gBattleAnimMove_BarbBarrage::
loadspritegfx ANIM_TAG_SPIKES
loadspritegfx ANIM_TAG_SHADOW_BALL @Spikes colour
@@ -16326,7 +16280,6 @@ BarbBarrageSpikeShoot:
-@Credits to Skeli
gBattleAnimMove_EsperWing::
loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade
loadspritegfx ANIM_TAG_WHITE_FEATHER
@@ -16363,7 +16316,6 @@ WingAttackFeatherScatter:
return
-@Credits to Skeli
gBattleAnimMove_BitterMalice::
loadspritegfx ANIM_TAG_PURPLE_RING
loadspritegfx ANIM_TAG_EYE_SPARKLE
@@ -16397,7 +16349,6 @@ BitterMaliceSwirl:
delay 2
return
-@ credits to Skeli
gBattleAnimMove_Shelter::
loadspritegfx ANIM_TAG_SHELL_LEFT
loadspritegfx ANIM_TAG_SHELL_RIGHT
@@ -16413,7 +16364,6 @@ gBattleAnimMove_Shelter::
end
-@Credits to Skeli
gBattleAnimMove_TripleArrows::
loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -16447,7 +16397,6 @@ TripleArrowsOnOpponent:
-@Credits to Skeli
gBattleAnimMove_InfernalParade::
loadspritegfx ANIM_TAG_PURPLE_FLAME
loadspritegfx ANIM_TAG_WISP_FIRE
@@ -16493,7 +16442,6 @@ InfernalFlames:
-@Credits to Skeli
gBattleAnimMove_CeaselessEdge::
loadspritegfx ANIM_TAG_SLASH
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
@@ -16531,7 +16479,6 @@ CeaselessEdgeSlashes:
return
-@Credits to Skeli
gBattleAnimMove_BleakwindStorm::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -16571,7 +16518,6 @@ BleakwindStormIceSwirl:
return
-@Credits to Skeli
gBattleAnimMove_WildboltStorm::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_SPARK_2
@@ -16617,7 +16563,6 @@ WildboltStormSparkSwirl:
return
-@Credits to Skeli
gBattleAnimMove_SandsearStorm::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_SMALL_EMBER
@@ -16659,7 +16604,6 @@ SandsearStormFireSpin:
return
-@Credits to Skeli
gBattleAnimMove_LunarBlessing::
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_MOON
@@ -16693,7 +16637,6 @@ gBattleAnimMove_LunarBlessing::
end
-@Credits to Skeli
gBattleAnimMove_TakeHeart::
loadspritegfx ANIM_TAG_RED_HEART
loadspritegfx ANIM_TAG_SPARKLE_2
@@ -16796,7 +16739,6 @@ gBattleAnimMove_SyrupBomb::
jumpargeq 0x0, FALSE, gBattleAnimMove_SyrupBombRed
jumpargeq 0x0, TRUE, gBattleAnimMove_SyrupBombYellow
-@ Credits to Dat.H A
gBattleAnimMove_SyrupBombRed::
loadspritegfx ANIM_TAG_SYRUP_BLOB_RED
loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED
@@ -17015,7 +16957,6 @@ gBattleAnimMove_AlluringVoice::
waitforvisualfinish
end
-@ Credits to Z-nogyroP
gBattleAnimMove_AquaCutter::
loadspritegfx ANIM_TAG_SLASH_2
loadspritegfx ANIM_TAG_SMALL_BUBBLES
@@ -17054,7 +16995,6 @@ gBattleAnimMove_AquaCutter::
waitforvisualfinish
end
-@ Credits to Z-nogyroP
gBattleAnimMove_GigatonHammer::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER
@@ -17083,7 +17023,6 @@ GigatonHammerImpact:
createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x1e, 0x4, 0x3
return
-@ Credits to Z-nogyroP
gBattleAnimMove_IceSpinner::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_RAPID_SPIN
@@ -17126,7 +17065,6 @@ IceCrystalSpinEffect:
delay 2
return
-@ Credits to Z-nogyroP
gBattleAnimMove_RagingBull::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ANGER
@@ -17213,7 +17151,6 @@ RagingBullShatteredWall:
clearmonbg ANIM_TARGET
end
-@ Credits to Z-nogyroP. Simple anim that combines Force Palm + Fake Out
gBattleAnimMove_UpperHand::
loadspritegfx ANIM_TAG_SHADOW_BALL
loadspritegfx ANIM_TAG_HANDS_AND_FEET
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index e37074b339..b7abe25190 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -4958,6 +4958,7 @@ BattleScript_LeechSeedTurnDrain:
healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE
datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE
tryfaintmon BS_ATTACKER
+ tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD
return
BattleScript_BideStoringEnergy::
@@ -6294,6 +6295,7 @@ BattleScript_YawnMakesAsleepEnd2::
waitmessage B_WAIT_TIME_LONG
updatestatusicon BS_EFFECT_BATTLER
waitstate
+ tryactivateitem BS_EFFECT_BATTLER, ACTIVATION_ON_STATUS_CHANGE
jumpfifsemiinvulnerable BS_EFFECT_BATTLER, STATE_SKY_DROP, BattleScript_YawnEnd
makevisible BS_EFFECT_BATTLER
skydropyawn
diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s
index ce71a102fd..41bf18da94 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -399,4 +399,4 @@ gFieldEffectScript_RockClimbDust:: @ 82DBB28
gFieldEffectScript_ORASDowse::
field_eff_callnative FldEff_ORASDowsing
field_eff_end
-
+
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index e5835ea07b..ebf3e7727b 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -44,6 +44,7 @@
- [Vs. Seeker](tutorials/vs_seeker.md)
- [Changelog](./CHANGELOG.md)
- [1.14.x]()
+ - [Version 1.14.2](changelogs/1.14.x/1.14.2.md)
- [Version 1.14.1](changelogs/1.14.x/1.14.1.md)
- [Version 1.14.0](changelogs/1.14.x/1.14.0.md)
- [1.13.x]()
diff --git a/docs/changelogs/1.14.x/1.14.2.md b/docs/changelogs/1.14.x/1.14.2.md
new file mode 100644
index 0000000000..e4807b88cd
--- /dev/null
+++ b/docs/changelogs/1.14.x/1.14.2.md
@@ -0,0 +1,209 @@
+```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.14.2
+`.
+```
+
+## 🌋 *REFACTORS* 🌋
+📜 = Uses a migration script.
+* Renamed Config Test system to more general names by @AsparagusEduardo in [#7283](https://github.com/rh-hideout/pokeemerald-expansion/pull/7283)
+
+## 🧬 General 🧬
+### Changed
+* Fix docs not compiling by @hedara90 in [#8407](https://github.com/rh-hideout/pokeemerald-expansion/pull/8407)
+* Update mdbook to v0.5.1 by @rayrobdod in [#8437](https://github.com/rh-hideout/pokeemerald-expansion/pull/8437)
+* Add a ci step that checks that documentation md files are mentioned in `docs/SUMMARY.md` by @rayrobdod in [#8439](https://github.com/rh-hideout/pokeemerald-expansion/pull/8439)
+* Fix `GEN_6_ORAS` definition by @AsparagusEduardo in [#8537](https://github.com/rh-hideout/pokeemerald-expansion/pull/8537)
+* Add different Poke Balls to more Trainers by @amiosi in [#8467](https://github.com/rh-hideout/pokeemerald-expansion/pull/8467)
+* Remove another unused deoxys function by @FosterProgramming in [#8576](https://github.com/rh-hideout/pokeemerald-expansion/pull/8576)
+* Gorilla Tactics and Test typos fix by @bassforte123 in [#8653](https://github.com/rh-hideout/pokeemerald-expansion/pull/8653)
+* Use release instead of LTO in CI by @hedara90 in [#8706](https://github.com/rh-hideout/pokeemerald-expansion/pull/8706)
+
+### Fixed
+* Fix merge error that broke some hgss palette by @FosterProgramming in [#8411](https://github.com/rh-hideout/pokeemerald-expansion/pull/8411)
+* Make TRUE and 1 behave the same in config/species_enabled.h by @hedara90 in [#8421](https://github.com/rh-hideout/pokeemerald-expansion/pull/8421)
+* Do not add padding to end of smol file when smol is natually word-sized by @rayrobdod in [#8522](https://github.com/rh-hideout/pokeemerald-expansion/pull/8522)
+* Align gSpecialVars by @Stevebel in [#8541](https://github.com/rh-hideout/pokeemerald-expansion/pull/8541)
+* Fix Safari and Wally backsprites when reshowing battle screen by @AsparagusEduardo in [#8561](https://github.com/rh-hideout/pokeemerald-expansion/pull/8561)
+* Fix party pool oob by @hedara90 in [#8581](https://github.com/rh-hideout/pokeemerald-expansion/pull/8581)
+* Fix progbits flags for iwram asm functions by @DizzyEggg in [#8627](https://github.com/rh-hideout/pokeemerald-expansion/pull/8627)
+
+## 🗺️ Overworld 🗺️
+### Fixed
+* Fix bug with enterCode default value by @FosterProgramming in [#8438](https://github.com/rh-hideout/pokeemerald-expansion/pull/8438)
+* Free the allocated buffer before the second decompression call (hopefully helps) by @FosterProgramming in [#8301](https://github.com/rh-hideout/pokeemerald-expansion/pull/8301)
+* Fix truck fade being cancelled by @FosterProgramming in [#8617](https://github.com/rh-hideout/pokeemerald-expansion/pull/8617)
+* Refactor dexnav to not use overworld task by @FosterProgramming in [#8602](https://github.com/rh-hideout/pokeemerald-expansion/pull/8602)
+
+## 🐉 Pokémon 🐉
+### Changed
+* GBA Asset Fixes by @amiosi in [#8382](https://github.com/rh-hideout/pokeemerald-expansion/pull/8382)
+* Fix Flabébé and Floette overworld sprites by @estellarc in [#8511](https://github.com/rh-hideout/pokeemerald-expansion/pull/8511)
+* Fix Naclstack and Garganacl shadows by @kittenchilly in [#8698](https://github.com/rh-hideout/pokeemerald-expansion/pull/8698)
+
+### Fixed
+* Fix Summary screen lag with move relearner when there's a lot of TMs by @PCG06 in [#8503](https://github.com/rh-hideout/pokeemerald-expansion/pull/8503)
+* Small fix that prevented TM relearner if `P_ENABLE_ALL_TM_MOVES` was `TRUE` by @PCG06 in [#8525](https://github.com/rh-hideout/pokeemerald-expansion/pull/8525)
+* Re-colored Gliscor's anim_front.png by @DaniRainbow in [#8341](https://github.com/rh-hideout/pokeemerald-expansion/pull/8341)
+* Allow Floette Eternal to mega evolve by @PhallenTree in [#8558](https://github.com/rh-hideout/pokeemerald-expansion/pull/8558)
+* Redraw Gurdurr's overworld sprite by @artsquirrelb in [#8625](https://github.com/rh-hideout/pokeemerald-expansion/pull/8625)
+* Expansion OW sprites fix by @artsquirrelb in [#8633](https://github.com/rh-hideout/pokeemerald-expansion/pull/8633)
+* Fix the game not building with OW_POKEMON_OBJECT_EVENTS disabled by @kittenchilly in [#8654](https://github.com/rh-hideout/pokeemerald-expansion/pull/8654)
+* Fix the sprite visualizer not showing asymmetrical follower sprites by @kittenchilly in [#8643](https://github.com/rh-hideout/pokeemerald-expansion/pull/8643)
+* Fixes Kingambit evolution conditions by @PhallenTree in [#8689](https://github.com/rh-hideout/pokeemerald-expansion/pull/8689)
+
+## ⚔️ Battle General ⚔️
+### Changed
+* Generational Move Changes by @amiosi in [#8405](https://github.com/rh-hideout/pokeemerald-expansion/pull/8405)
+* Fix Lunar Dance not checking PP by @AsparagusEduardo in [#8364](https://github.com/rh-hideout/pokeemerald-expansion/pull/8364)
+ - Added `EFFECT_LUNAR_DANCE`, which is the same as `EFFECT_HEALING_WISH` but also heals PP.
+* Fixes Instruct's message by @PhallenTree in [#8543](https://github.com/rh-hideout/pokeemerald-expansion/pull/8543)
+* Adds tests for Beak Blast not burning when the target is protected by @PhallenTree in [#8713](https://github.com/rh-hideout/pokeemerald-expansion/pull/8713)
+
+### Fixed
+* Multiple bugfixes (mostly Dancer/called moves) by @PhallenTree in [#8401](https://github.com/rh-hideout/pokeemerald-expansion/pull/8401)
+* Fix Costar not copying partner's critical hit boosts by @moostoet in [#8386](https://github.com/rh-hideout/pokeemerald-expansion/pull/8386)
+* Fix transform tint applying to every from change on reload by @FosterProgramming in [#8417](https://github.com/rh-hideout/pokeemerald-expansion/pull/8417)
+* Fix illusion not breaking properly when behind substitute by @FosterProgramming in [#8423](https://github.com/rh-hideout/pokeemerald-expansion/pull/8423)
+* Fix substitute/defog interactions by @FosterProgramming in [#8418](https://github.com/rh-hideout/pokeemerald-expansion/pull/8418)
+* Fixes Wind Power/Electromorphosis potentially boosting 2 electric attacks by @PhallenTree in [#8431](https://github.com/rh-hideout/pokeemerald-expansion/pull/8431)
+* Add missing breakable flags by @AlexOn1ine in [#8454](https://github.com/rh-hideout/pokeemerald-expansion/pull/8454)
+* Adds missing cases for Revenge and Assurance doubling power by @AlexOn1ine in [#8453](https://github.com/rh-hideout/pokeemerald-expansion/pull/8453)
+* Fix potential issue when destiny knot fail after proccing from cute charm by @FosterProgramming in [#8459](https://github.com/rh-hideout/pokeemerald-expansion/pull/8459)
+* Fix bug when changing forms multiple times by @FosterProgramming in [#8458](https://github.com/rh-hideout/pokeemerald-expansion/pull/8458)
+* Fix gimmick icon not appearing correctly in 1v2 by @FosterProgramming in [#8474](https://github.com/rh-hideout/pokeemerald-expansion/pull/8474)
+* Give dead mons priority over eggs when assigning battlers by @FosterProgramming in [#8473](https://github.com/rh-hideout/pokeemerald-expansion/pull/8473)
+* Environment Fixes by @amiosi in [#8471](https://github.com/rh-hideout/pokeemerald-expansion/pull/8471)
+* Fixes Disguise + Counter/Mirror Coat/Metal Burst + Disguise tests by @PhallenTree in [#8495](https://github.com/rh-hideout/pokeemerald-expansion/pull/8495)
+* Fix battler side status check in CalcCritChanceStage by @AlexOn1ine in [#8524](https://github.com/rh-hideout/pokeemerald-expansion/pull/8524)
+* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516)
+* Fix incorrect "last to move" check for Analytic, Snatch, and Magic Coat by @moostoet in [#8536](https://github.com/rh-hideout/pokeemerald-expansion/pull/8536)
+* Fix species gfx change in link battles by @AsparagusEduardo in [#8552](https://github.com/rh-hideout/pokeemerald-expansion/pull/8552)
+* Fixes Water Sport/Mud Sport when B_SPORT_TURNS < GEN_6 by @PhallenTree in [#8613](https://github.com/rh-hideout/pokeemerald-expansion/pull/8613)
+* fix poisons absorbing toxic spikes when fainting from other hazards by @spindrift64 in [#8644](https://github.com/rh-hideout/pokeemerald-expansion/pull/8644)
+* Fix incorrectly applied change in atkcanceler by @AlexOn1ine in [#8641](https://github.com/rh-hideout/pokeemerald-expansion/pull/8641)
+* Fix transform shininess in link battles by @AlexOn1ine in [#8554](https://github.com/rh-hideout/pokeemerald-expansion/pull/8554)
+* Fix Mimic trying to access MOVE_UNAVAILABLE in an incredibly small amount of possible scenarios by @hedara90 in [#8685](https://github.com/rh-hideout/pokeemerald-expansion/pull/8685)
+* Fix stat access for stats other than Attack in BS_GetStatValue by @hedara90 in [#8684](https://github.com/rh-hideout/pokeemerald-expansion/pull/8684)
+* Add tests for abilities that affect weather by @Cle-bit in [#8709](https://github.com/rh-hideout/pokeemerald-expansion/pull/8709)
+
+## 🤹 Moves 🤹
+### Fixed
+* Fixes incorrect battler used in STRINGID_USEDINSTRUCTEDMOVE by @grintoul1 in [#8704](https://github.com/rh-hideout/pokeemerald-expansion/pull/8704)
+
+## 🎭 Abilities 🎭
+### Fixed
+* Fix some bugs related to abilities by @Cle-bit in [#8695](https://github.com/rh-hideout/pokeemerald-expansion/pull/8695)
+
+## 🤖 Battle AI 🤖
+### Added
+* Respect beneficial status in healing moves and add tests by @Cle-bit in [#8478](https://github.com/rh-hideout/pokeemerald-expansion/pull/8478)
+
+### Fixed
+* fix (setup): ignore self-speed drop when checking speed control on KO threshold change by @ghostyboyy97 in [#8409](https://github.com/rh-hideout/pokeemerald-expansion/pull/8409)
+ - AI now correctly sees that moves like Hammer Arm are self-targeted speed drops on the player when evaluating speed control in setup scenarios.
+* fix (hazards): ghosty used rapid spin! ghosty blew the semicolon away! by @ghostyboyy97 in [#8433](https://github.com/rh-hideout/pokeemerald-expansion/pull/8433)
+ - The AI will now correctly see if the player can prevent hazards on moves with a secondary Stealth Rock effect.
+* Fix incorrect Spikes reference in switch AI by @Pawkkie in [#8510](https://github.com/rh-hideout/pokeemerald-expansion/pull/8510)
+* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516)
+* Fix: AI should not use Helping Hand on a partner with ABILITY_GOOD_AS_GOLD by @Cle-bit in [#8560](https://github.com/rh-hideout/pokeemerald-expansion/pull/8560)
+* Fixing crash from Last Resort with Normalium Z in certain damage thresholds by @surskitty in [#8583](https://github.com/rh-hideout/pokeemerald-expansion/pull/8583)
+* fix (scoring): AI_IsMoveEffectInPlus - AI should not see secondary effect of Sheer Force boosted moves as beneficial by @ghostyboyy97 in [#8579](https://github.com/rh-hideout/pokeemerald-expansion/pull/8579)
+ - The AI is now aware if its positive move effects are removed by Sheer Force when evaluating both guaranteed and secondary effects.
+* Fix type check in Magnet Rise AI by @grintoul1 in [#8609](https://github.com/rh-hideout/pokeemerald-expansion/pull/8609)
+* Fix Commander Dondozo Switching by @Pawkkie in [#8624](https://github.com/rh-hideout/pokeemerald-expansion/pull/8624)
+* Prevent AI seeing Pollen Puff damage on its ally by @grintoul1 in [#8693](https://github.com/rh-hideout/pokeemerald-expansion/pull/8693)
+
+## 🧹 Other Cleanup 🧹
+* Include FEATURES.md in documentation by @AsparagusEduardo in [#8464](https://github.com/rh-hideout/pokeemerald-expansion/pull/8464)
+* Fix Lunar Dance not checking PP by @AsparagusEduardo in [#8364](https://github.com/rh-hideout/pokeemerald-expansion/pull/8364)
+ - Added `EFFECT_LUNAR_DANCE`, which is the same as `EFFECT_HEALING_WISH` but also heals PP.
+* Fixes Instruct's message by @PhallenTree in [#8543](https://github.com/rh-hideout/pokeemerald-expansion/pull/8543)
+* Fix `GEN_6_ORAS` definition by @AsparagusEduardo in [#8537](https://github.com/rh-hideout/pokeemerald-expansion/pull/8537)
+* Automatically fix TM numbers over 100 in Bag menu by @AsparagusEduardo in [#8531](https://github.com/rh-hideout/pokeemerald-expansion/pull/8531)
+* Add different Poke Balls to more Trainers by @amiosi in [#8467](https://github.com/rh-hideout/pokeemerald-expansion/pull/8467)
+* Remove another unused deoxys function by @FosterProgramming in [#8576](https://github.com/rh-hideout/pokeemerald-expansion/pull/8576)
+* Update maintainer list by @pkmnsnfrn in [#8638](https://github.com/rh-hideout/pokeemerald-expansion/pull/8638)
+
+## 🧪 Test Runner 🧪
+### Changed
+* Renamed Config Test system to more general names by @AsparagusEduardo in [#7283](https://github.com/rh-hideout/pokeemerald-expansion/pull/7283)
+* Create missing hold effect test files by @AsparagusEduardo in [#8397](https://github.com/rh-hideout/pokeemerald-expansion/pull/8397)
+* `WITH_CONFIG` Refactor by @AsparagusEduardo in [#7584](https://github.com/rh-hideout/pokeemerald-expansion/pull/7584)
+ - Changed the way configs into the testing system to occupy less memory and make it easier to add more.
+ - Fixes inconsistency in enum names.
+ - Starts reserving the memory necessary to allow testing for all configs.
+* Add test for lum berry multi status by @FosterProgramming in [#8430](https://github.com/rh-hideout/pokeemerald-expansion/pull/8430)
+* Added missing Move Effect TODO tests - Volume G by @AsparagusEduardo in [#8428](https://github.com/rh-hideout/pokeemerald-expansion/pull/8428)
+* Fixed KNOWN_FAILING Dire Claw test by @AsparagusEduardo in [#8442](https://github.com/rh-hideout/pokeemerald-expansion/pull/8442)
+* Finished Defog tests by @AsparagusEduardo in [#8424](https://github.com/rh-hideout/pokeemerald-expansion/pull/8424)
+* Fix move anim tests sometimes leaking tasks by @hedara90 in [#8493](https://github.com/rh-hideout/pokeemerald-expansion/pull/8493)
+* Added tests for stat-changing moves by @AsparagusEduardo in [#8278](https://github.com/rh-hideout/pokeemerald-expansion/pull/8278)
+* Expanded `B_EXP_CATCH` test by @AsparagusEduardo in [#8527](https://github.com/rh-hideout/pokeemerald-expansion/pull/8527)
+* Fixed `AI_GetSwitchinWeather` not considering `CONFIG_SNOW_WARNING` by @AsparagusEduardo in [#8533](https://github.com/rh-hideout/pokeemerald-expansion/pull/8533)
+* Expanded `B_SANDSTORM_SPDEF_BOOST` test by @AsparagusEduardo in [#8532](https://github.com/rh-hideout/pokeemerald-expansion/pull/8532)
+* `B_SYMBIOSIS_GEMS` tests by @AsparagusEduardo in [#8534](https://github.com/rh-hideout/pokeemerald-expansion/pull/8534)
+* Added Ability TODO tests - Volume D by @AsparagusEduardo in [#8538](https://github.com/rh-hideout/pokeemerald-expansion/pull/8538)
+* Finished Wish tests by @AsparagusEduardo in [#8530](https://github.com/rh-hideout/pokeemerald-expansion/pull/8530)
+* Add SUB_HIT check to tests by @hedara90 in [#8413](https://github.com/rh-hideout/pokeemerald-expansion/pull/8413)
+* Added Light Ball tests by @AsparagusEduardo in [#8526](https://github.com/rh-hideout/pokeemerald-expansion/pull/8526)
+* Add debug print to show what move failed in Sheer Force tests by @hedara90 in [#8523](https://github.com/rh-hideout/pokeemerald-expansion/pull/8523)
+* `B_STURDY` config test by @AsparagusEduardo in [#8565](https://github.com/rh-hideout/pokeemerald-expansion/pull/8565)
+* `B_KLUTZ_FLING_INTERACTION` config test by @AsparagusEduardo in [#8568](https://github.com/rh-hideout/pokeemerald-expansion/pull/8568)
+* `B_IRON_BALL` config test by @AsparagusEduardo in [#8569](https://github.com/rh-hideout/pokeemerald-expansion/pull/8569)
+* `B_SYNCHRONIZE_TOXIC` config test by @AsparagusEduardo in [#8572](https://github.com/rh-hideout/pokeemerald-expansion/pull/8572)
+* `B_BURN_DAMAGE` config tests by @AsparagusEduardo in [#8574](https://github.com/rh-hideout/pokeemerald-expansion/pull/8574)
+* `B_REDIRECT_ABILITY_IMMUNITY` config tests by @AsparagusEduardo in [#8571](https://github.com/rh-hideout/pokeemerald-expansion/pull/8571)
+* `B_UPDATED_CONVERSION_2` config tests by @AsparagusEduardo in [#8573](https://github.com/rh-hideout/pokeemerald-expansion/pull/8573)
+* `B_TAILWIND_TURNS` config tests by @AsparagusEduardo in [#8592](https://github.com/rh-hideout/pokeemerald-expansion/pull/8592)
+* `B_BINDING_TURNS` config tests by @AsparagusEduardo in [#8595](https://github.com/rh-hideout/pokeemerald-expansion/pull/8595)
+* `B_SPORT_DMG_REDUCTION` config tests by @AsparagusEduardo in [#8593](https://github.com/rh-hideout/pokeemerald-expansion/pull/8593)
+* Add tests for Intrepid Sword and Dauntless Shield at max stages by @FosterProgramming in [#8610](https://github.com/rh-hideout/pokeemerald-expansion/pull/8610)
+* Add some missing tests for heatproof, thick fat and grudge by @izrofid in [#8705](https://github.com/rh-hideout/pokeemerald-expansion/pull/8705)
+* Adds tests for Beak Blast not burning when the target is protected by @PhallenTree in [#8713](https://github.com/rh-hideout/pokeemerald-expansion/pull/8713)
+
+### Fixed
+* Fix random function in testing trying to run trials when rng tag is 0/RNG_NONE by @FosterProgramming in [#8460](https://github.com/rh-hideout/pokeemerald-expansion/pull/8460)
+* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516)
+* Corrects test system Forced Ability handing for multi battles by @grintoul1 in [#8611](https://github.com/rh-hideout/pokeemerald-expansion/pull/8611)
+* Fix Status1 icon not being registered for recorded partner in tests by @AsparagusEduardo in [#8520](https://github.com/rh-hideout/pokeemerald-expansion/pull/8520)
+* Prevent AI seeing Pollen Puff damage on its ally by @grintoul1 in [#8693](https://github.com/rh-hideout/pokeemerald-expansion/pull/8693)
+* Fix some bugs related to abilities by @Cle-bit in [#8695](https://github.com/rh-hideout/pokeemerald-expansion/pull/8695)
+* Add tests for abilities that affect weather by @Cle-bit in [#8709](https://github.com/rh-hideout/pokeemerald-expansion/pull/8709)
+
+## 📚 Documentation 📚
+* Fix docs not compiling by @hedara90 in [#8407](https://github.com/rh-hideout/pokeemerald-expansion/pull/8407)
+* Add a ci step that checks that documentation md files are mentioned in `docs/SUMMARY.md` by @rayrobdod in [#8439](https://github.com/rh-hideout/pokeemerald-expansion/pull/8439)
+* Include FEATURES.md in documentation by @AsparagusEduardo in [#8464](https://github.com/rh-hideout/pokeemerald-expansion/pull/8464)
+* Document magic number in `createspriteontargets` by @AsparagusEduardo in [#8551](https://github.com/rh-hideout/pokeemerald-expansion/pull/8551)
+* fix CONTRIBUTING.md by @u8-Salem in [#8577](https://github.com/rh-hideout/pokeemerald-expansion/pull/8577)
+* Update maintainer list by @pkmnsnfrn in [#8638](https://github.com/rh-hideout/pokeemerald-expansion/pull/8638)
+
+## 📦 Branch Synchronisation 📦
+### pret
+* 1st of January, 2026 in [#8737](https://github.com/rh-hideout/pokeemerald-expansion/pull/8737)
+ * Document UpdateLegendaryMarkingColor by @mrgriffin in [pret#2221](https://github.com/pret/pokeemerald/pull/2221)
+ * Fix some typos by @Jaizu in [pret#2219](https://github.com/pret/pokeemerald/pull/2219)
+ * Document m4a xcmd_0C by @ShinyDragonHunter in [pret#2218](https://github.com/pret/pokeemerald/pull/2218)
+ * Fixed pokenav glow issue by @shachar700 in [pret#2215](https://github.com/pret/pokeemerald/pull/2215)
+ * Added bugfix for missing no weather case in Cmd_weather_get by @Mitsunee in [pret#2203](https://github.com/pret/pokeemerald/pull/2203)
+ * Label unused functions in siirtc.c, m4a.c & rtc.c with the "UNUSED" attribute by @ShinyDragonHunter in [pret#2171](https://github.com/pret/pokeemerald/pull/2171)
+ * Add fix for possible crash when decompressing trainer back pics by @GriffinRichards in [pret#2074](https://github.com/pret/pokeemerald/pull/2074)
+ * Change rangeX and rangeY to u8 in ObjectEvent struct by @NTx86 in [pret#2176](https://github.com/pret/pokeemerald/pull/2176)
+ * Fix sScrollableMultichoice_ListMenuItem allocation size magic number by @NTx86 in [pret#2177](https://github.com/pret/pokeemerald/pull/2177)
+ * Name pokemon summary screen remaining unnamed symbols by @FosterProgramming in [pret#2178](https://github.com/pret/pokeemerald/pull/2178)
+ * Fix FLAG_REGISTERED_WALLY by @mrgriffin in [pret#2201](https://github.com/pret/pokeemerald/pull/2201)
+ * Display error for invalid hidden item flags by @GriffinRichards in [pret#2214](https://github.com/pret/pokeemerald/pull/2214)
+
+## New Contributors
+* @Stevebel made their first contribution in [#8541](https://github.com/rh-hideout/pokeemerald-expansion/pull/8541)
+* @DaniRainbow made their first contribution in [#8341](https://github.com/rh-hideout/pokeemerald-expansion/pull/8341)
+* @artsquirrelb made their first contribution in [#8625](https://github.com/rh-hideout/pokeemerald-expansion/pull/8625)
+* @izrofid made their first contribution in [#8705](https://github.com/rh-hideout/pokeemerald-expansion/pull/8705)
+
+**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.14.1...expansion/1.14.2
+
+
+
+
diff --git a/include/battle.h b/include/battle.h
index b95da58aa2..49d7cbb0ab 100755
--- a/include/battle.h
+++ b/include/battle.h
@@ -616,7 +616,7 @@ struct EventStates
u32 arenaTurn:8;
enum BattleSide battlerSide:4;
enum BattlerId moveEndBattler:4;
- enum FirstTurnEventsStates beforeFristTurn:8;
+ enum FirstTurnEventsStates beforeFirstTurn:8;
enum FaintedActions faintedAction:8;
enum BattlerId faintedActionBattler:4;
enum MoveSuccessOrder atkCanceler:8;
diff --git a/include/config/battle.h b/include/config/battle.h
index dd72cdbf1b..b5d11a9b3e 100644
--- a/include/config/battle.h
+++ b/include/config/battle.h
@@ -36,7 +36,7 @@
#define B_SPORT_DMG_REDUCTION GEN_LATEST // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%.
#define B_EXPLOSION_DEFENSE GEN_LATEST // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense.
#define B_PARENTAL_BOND_DMG GEN_LATEST // In Gen7+, Parental Bond's second hit does 25% of the initial hits damage. Before, it did 50%.
-#define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%.
+#define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. In Gen3, it was 50%, unless the move hit the entire field, in which case there was no reduction.
// Type settings
#define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle.
@@ -54,18 +54,18 @@
#define B_UPROAR_IGNORE_SOUNDPROOF GEN_LATEST // In Gen5+, Uproar status ignores Soundproof.
#define B_DISABLE_TURNS GEN_LATEST // Disable's turns. See Cmd_disablelastusedattack.
#define B_TAILWIND_TURNS GEN_LATEST // In Gen5+, Tailwind lasts 4 turns instead of 3.
-#define B_SLEEP_TURNS GEN_LATEST // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
+#define B_SLEEP_TURNS GEN_LATEST // In Gen5+, sleep lasts for 2-4 turns instead of 2-5 turns.
#define B_TAUNT_TURNS GEN_LATEST // In Gen5+, Taunt lasts 3 turns if the user acts before the target, or 4 turns if the target acted before the user. In Gen3, taunt lasts 2 turns and in Gen 4, 3-5 turns.
#define B_SPORT_TURNS GEN_LATEST // In Gen6+, Water/Mud Sport last 5 turns, even if the user switches out.
#define B_MEGA_EVO_TURN_ORDER GEN_LATEST // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before.
-#define B_RECALC_TURN_AFTER_ACTIONS GEN_LATEST // In Gen8, switching/using a move affects the current turn's order of actions, better known as dynamic speed.
+#define B_RECALC_TURN_AFTER_ACTIONS GEN_LATEST // In Gen8+, switching/using a move affects the current turn's order of actions, better known as dynamic speed.
#define B_FAINT_SWITCH_IN GEN_LATEST // In Gen4+, sending out a new Pokémon after the previous one fainted happens at the end of the turn. Before, it would happen after each action.
// Move data settings
#define B_UPDATED_MOVE_DATA GEN_LATEST // Updates move data in gMovesInfo, including Power, Accuracy, PP, stat changes, targets and chances of secondary effects.
#define B_UPDATED_MOVE_TYPES GEN_LATEST // Updates move types.
#define B_UPDATED_MOVE_FLAGS GEN_LATEST // Updates move flags.
-#define B_PHYSICAL_SPECIAL_SPLIT GEN_LATEST // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
+#define B_PHYSICAL_SPECIAL_SPLIT GEN_LATEST // In Gens1-3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
#define B_RECOIL_IF_MISS_DMG GEN_LATEST // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing.
#define B_KLUTZ_FLING_INTERACTION GEN_LATEST // In Gen5+, Pokémon with the Klutz ability can't use Fling.
#define B_UPDATED_CONVERSION GEN_LATEST // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random.
@@ -85,7 +85,7 @@
// Move stat change settings
#define B_FELL_STINGER_STAT_RAISE GEN_LATEST // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
#define B_KINGS_SHIELD_LOWER_ATK GEN_LATEST // In Gen8+, it lowers Atk by 1 stage instead of 2 of opponents that hit it.
-#define B_SPEED_BUFFING_RAPID_SPIN GEN_LATEST // In Gen8, Rapid Spin raises the user's Speed by 1 stage.
+#define B_SPEED_BUFFING_RAPID_SPIN GEN_LATEST // In Gen8+, Rapid Spin raises the user's Speed by 1 stage.
#define B_CHARGE_SPDEF_RAISE GEN_LATEST // In Gen5+, Charge raises the user's Special Defense by 1 stage.
#define B_MINIMIZE_EVASION GEN_LATEST // In Gen5+, Minimize raises evasion by 2 stages instead of 1.
#define B_GROWTH_STAT_RAISE GEN_LATEST // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead.
@@ -94,8 +94,8 @@
// Other move settings
#define B_INCINERATE_GEMS GEN_LATEST // In Gen6+, Incinerate can destroy Gems.
#define B_CAN_SPITE_FAIL GEN_LATEST // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
-#define B_CRASH_IF_TARGET_IMMUNE GEN_LATEST // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
-#define B_MEMENTO_FAIL GEN_LATEST // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6.
+#define B_CRASH_IF_TARGET_IMMUNE GEN_LATEST // In Gen4+, moves with crash damage will crash if the user attacks a target that is immune due to their typing.
+#define B_MEMENTO_FAIL GEN_LATEST // In Gen4+, Memento no longer fails if the target already has -6 Attack and Special Attack. Additionally, in Gen5+, it fails if there is no target, or if the target is protected or behind a Substitute.
#define B_GLARE_GHOST GEN_LATEST // In Gen4+, Glare can hit Ghost-type Pokémon normally.
#define B_SKILL_SWAP GEN_LATEST // In Gen4+, Skill Swap triggers switch-in abilities after use.
#define B_BRICK_BREAK GEN_LATEST // In Gen4+, you can destroy your own side's screens. In Gen 5+, screens are not removed if the target is immune.
@@ -118,11 +118,11 @@
#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_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.
#define B_KNOCK_OFF_REMOVAL GEN_LATEST // In Gen5+, Knock Off removes the foe's item instead of rendering it unusable.
#define B_HEAL_BELL_SOUNDPROOF GEN_LATEST // In Gen5, Heal Bell affects all mons with Soundproof. In Gen6-8 it affects inactive mons, but not battlers. In Gen9 it always affects the user.
-#define B_CHARGE GEN_LATEST // In Gen8-, Charge status is lost regardless of the typing of the next move.
+#define B_CHARGE GEN_LATEST // In Gens3-7, Charge status is lost regardless of the typing of the next move.
#define B_POWDER_RAIN GEN_LATEST // In Gen7+, Powder doesn't damage the user of a Fire type move in heavy rain.
#define B_AFTER_YOU_TURN_ORDER GEN_LATEST // In Gen8+, After You doesn't fail if the turn order wouldn't change after use.
#define B_QUASH_TURN_ORDER GEN_LATEST // In Gen8+, Quash-affected battlers move according to speed order. Before Gen8, Quash-affected battlers move in the order they were affected by Quash.
@@ -139,10 +139,10 @@
#define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger.
#define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
#define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation.
-#define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore.
+#define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8+, Moody CANNOT raise Accuracy and Evasion anymore.
#define B_FLASH_FIRE_FROZEN GEN_LATEST // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
#define B_SYNCHRONIZE_TOXIC GEN_LATEST // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned.
-#define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled.
+#define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8+, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled.
#define B_OBLIVIOUS_TAUNT GEN_LATEST // In Gen6+, Pokémon with Oblivious can't be taunted.
#define B_STURDY GEN_LATEST // In Gen5+, Sturdy causes the Pokémon to have 1 HP remaining if another Pokémon's attack or confusion damage would have brought it from full health to 0 HP.
#define B_PLUS_MINUS_INTERACTION GEN_LATEST // In Gen5+, Plus and Minus can be activated with themselves and the opposite ability. Before, only the opposing ability could activate it.
@@ -170,13 +170,13 @@
#define B_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user.
// Item settings
-#define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP.
+#define B_CONFUSE_BERRIES_HEAL GEN_LATEST // In Gens3-6, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP.
#define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
#define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before.
-#define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items.
+#define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games, trainers cannot steal items outside of facilities.
#define B_RETURN_STOLEN_NPC_ITEMS GEN_LATEST // In Gen5+, Thief and Covet no longer steal items from NPCs.
-#define B_STEAL_WILD_ITEMS GEN_LATEST // In Gen9, Thief and Covet steal a wild pokemon's item and send it to the bag. Before Gen9, the stolen item would be held by the Thief/Covet user.
-#define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9, all non-berry items are restored after battle.
+#define B_STEAL_WILD_ITEMS GEN_LATEST // In Gen9+, Thief and Covet steal a wild pokemon's item and send it to the bag. In Gens2-8, the stolen item would be held by the Thief/Covet user.
+#define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9+, all non-berry items are restored after battle.
#define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead.
#define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3.
#define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by x3.5 when Surfing or Fishing.
diff --git a/include/config/item.h b/include/config/item.h
index 8a5a0009dd..f260d76708 100644
--- a/include/config/item.h
+++ b/include/config/item.h
@@ -12,7 +12,7 @@
#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 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_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, type-enhancing held items (such as Charcoal) had their multiplier increased from 1.1x to 1.2x. Sea Incense was changed from 1.05x to 1.2x.
#define I_SELL_VALUE_FRACTION GEN_LATEST // In Gen9+, items sell for 1/4 of their value instead of 1/2.
#define I_PRICE GEN_LATEST // Some items have varied in value across generations.
#define I_BERRY_PRICE GEN_7 // Since Berries have become unplantable (Gen8+), their price has gone up.
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 234ebad0b2..78745aad8f 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -1,6 +1,266 @@
#ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
#define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
+enum BattleScriptOpcode
+{
+ B_SCR_OP_ATTACKCANCELER,
+ B_SCR_OP_ACCURACYCHECK,
+ B_SCR_OP_PRINTATTACKSTRING,
+ B_SCR_OP_UNUSED_0x3,
+ B_SCR_OP_CRITCALC,
+ B_SCR_OP_DAMAGECALC,
+ B_SCR_OP_TYPECALC,
+ B_SCR_OP_ADJUSTDAMAGE,
+ B_SCR_OP_MULTIHITRESULTMESSAGE,
+ B_SCR_OP_ATTACKANIMATION,
+ B_SCR_OP_WAITANIMATION,
+ B_SCR_OP_HEALTHBARUPDATE,
+ B_SCR_OP_DATAHPUPDATE,
+ B_SCR_OP_CRITMESSAGE,
+ B_SCR_OP_EFFECTIVENESSSOUND,
+ B_SCR_OP_RESULTMESSAGE,
+ B_SCR_OP_PRINTSTRING,
+ B_SCR_OP_PRINTSELECTIONSTRING,
+ B_SCR_OP_WAITMESSAGE,
+ B_SCR_OP_PRINTFROMTABLE,
+ B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE,
+ B_SCR_OP_SETADDITIONALEFFECTS,
+ B_SCR_OP_SETEFFECTPRIMARY,
+ B_SCR_OP_SETEFFECTSECONDARY,
+ B_SCR_OP_CLEARVOLATILE,
+ B_SCR_OP_TRYFAINTMON,
+ B_SCR_OP_DOFAINTANIMATION,
+ B_SCR_OP_CLEAREFFECTSONFAINT,
+ B_SCR_OP_JUMPIFSTATUS,
+ B_SCR_OP_JUMPIFVOLATILE,
+ B_SCR_OP_JUMPIFABILITY,
+ B_SCR_OP_JUMPIFSIDEAFFECTING,
+ B_SCR_OP_JUMPIFSTAT,
+ B_SCR_OP_JUMPIFSTATIGNORECONTRARY,
+ B_SCR_OP_JUMPBASEDONTYPE,
+ B_SCR_OP_GETEXP,
+ B_SCR_OP_CHECKTEAMSLOST,
+ B_SCR_OP_MOVEVALUESCLEANUP,
+ B_SCR_OP_SETMULTIHIT,
+ B_SCR_OP_DECREMENTMULTIHIT,
+ B_SCR_OP_GOTO,
+ B_SCR_OP_JUMPIFBYTE,
+ B_SCR_OP_JUMPIFHALFWORD,
+ B_SCR_OP_JUMPIFWORD,
+ B_SCR_OP_JUMPIFARRAYEQUAL,
+ B_SCR_OP_JUMPIFARRAYNOTEQUAL,
+ B_SCR_OP_SETBYTE,
+ B_SCR_OP_ADDBYTE,
+ B_SCR_OP_SUBBYTE,
+ B_SCR_OP_COPYARRAY,
+ B_SCR_OP_COPYARRAYWITHINDEX,
+ B_SCR_OP_ORBYTE,
+ B_SCR_OP_ORHALFWORD,
+ B_SCR_OP_ORWORD,
+ B_SCR_OP_BICBYTE,
+ B_SCR_OP_BICHALFWORD,
+ B_SCR_OP_BICWORD,
+ B_SCR_OP_PAUSE,
+ B_SCR_OP_WAITSTATE,
+ B_SCR_OP_ISDMGBLOCKEDBYDISGUISE,
+ B_SCR_OP_RETURN,
+ B_SCR_OP_END,
+ B_SCR_OP_END2,
+ B_SCR_OP_END3,
+ B_SCR_OP_SETCHARGINGTURN,
+ B_SCR_OP_CALL,
+ B_SCR_OP_SETROOST,
+ B_SCR_OP_JUMPIFABILITYPRESENT,
+ B_SCR_OP_ENDSELECTIONSCRIPT,
+ B_SCR_OP_PLAYANIMATION,
+ B_SCR_OP_PLAYANIMATION_VAR,
+ B_SCR_OP_JUMPFIFSEMIINVULNERABLE,
+ B_SCR_OP_UNUSED_0x48,
+ B_SCR_OP_MOVEEND,
+ B_SCR_OP_SETHEALBLOCK,
+ B_SCR_OP_RETURNATKTOBALL,
+ B_SCR_OP_GETSWITCHEDMONDATA,
+ B_SCR_OP_SWITCHINDATAUPDATE,
+ B_SCR_OP_SWITCHINANIM,
+ B_SCR_OP_JUMPIFCANTSWITCH,
+ B_SCR_OP_OPENPARTYSCREEN,
+ B_SCR_OP_SWITCHHANDLEORDER,
+ B_SCR_OP_SWITCHINEFFECTS,
+ B_SCR_OP_TRAINERSLIDEIN,
+ B_SCR_OP_PLAYSE,
+ B_SCR_OP_FANFARE,
+ B_SCR_OP_PLAYFAINTCRY,
+ B_SCR_OP_ENDLINKBATTLE,
+ B_SCR_OP_RETURNTOBALL,
+ B_SCR_OP_HANDLELEARNNEWMOVE,
+ B_SCR_OP_YESNOBOXLEARNMOVE,
+ B_SCR_OP_YESNOBOXSTOPLEARNINGMOVE,
+ B_SCR_OP_HITANIMATION,
+ B_SCR_OP_GETMONEYREWARD,
+ B_SCR_OP_UPDATEBATTLERMOVES,
+ B_SCR_OP_SWAPATTACKERWITHTARGET,
+ B_SCR_OP_INCREMENTGAMESTAT,
+ B_SCR_OP_DRAWPARTYSTATUSSUMMARY,
+ B_SCR_OP_HIDEPARTYSTATUSSUMMARY,
+ B_SCR_OP_JUMPTOCALLEDMOVE,
+ B_SCR_OP_STATUSANIMATION,
+ B_SCR_OP_UNUSED_0x65,
+ B_SCR_OP_UNUSED_0x66,
+ B_SCR_OP_YESNOBOX,
+ B_SCR_OP_CANCELALLACTIONS,
+ B_SCR_OP_SETGRAVITY,
+ B_SCR_OP_REMOVEITEM,
+ B_SCR_OP_ATKNAMEINBUFF1,
+ B_SCR_OP_DRAWLVLUPBOX,
+ B_SCR_OP_RESETSENTMONSVALUE,
+ B_SCR_OP_SETATKTOPLAYER0,
+ B_SCR_OP_MAKEVISIBLE,
+ B_SCR_OP_RECORDABILITY,
+ B_SCR_OP_BUFFERMOVETOLEARN,
+ B_SCR_OP_JUMPIFPLAYERRAN,
+ B_SCR_OP_HPTHRESHOLDS,
+ B_SCR_OP_HPTHRESHOLDS2,
+ B_SCR_OP_USEITEMONOPPONENT,
+ B_SCR_OP_UNUSED_0x78,
+ B_SCR_OP_SETPROTECTLIKE,
+ B_SCR_OP_TRYEXPLOSION,
+ B_SCR_OP_SETATKHPTOZERO,
+ B_SCR_OP_JUMPIFNEXTTARGETVALID,
+ B_SCR_OP_TRYHEALHALFHEALTH,
+ B_SCR_OP_UNUSED_0x7E,
+ B_SCR_OP_SETFIELDWEATHER,
+ B_SCR_OP_SETREFLECT,
+ B_SCR_OP_SETSEEDED,
+ B_SCR_OP_MANIPULATEDAMAGE,
+ B_SCR_OP_TRYSETREST,
+ B_SCR_OP_UNUSED_0x82,
+ B_SCR_OP_UNUSED_0x83,
+ B_SCR_OP_JUMPIFUPROARWAKES,
+ B_SCR_OP_STOCKPILE,
+ B_SCR_OP_STOCKPILETOBASEDAMAGE,
+ B_SCR_OP_STOCKPILETOHPHEAL,
+ B_SCR_OP_UNUSED_0x88,
+ B_SCR_OP_STATBUFFCHANGE,
+ B_SCR_OP_NORMALISEBUFFS,
+ B_SCR_OP_SETBIDE,
+ B_SCR_OP_TWOTURNMOVESCHARGESTRINGANDANIMATION,
+ B_SCR_OP_TRYNONVOLATILESTATUS,
+ B_SCR_OP_INITMULTIHITSTRING,
+ B_SCR_OP_FORCERANDOMSWITCH,
+ B_SCR_OP_TRYCONVERSIONTYPECHANGE,
+ B_SCR_OP_GIVEPAYDAYMONEY,
+ B_SCR_OP_SETLIGHTSCREEN,
+ B_SCR_OP_TRYKO,
+ B_SCR_OP_CHECKNONVOLATILETRIGGER,
+ B_SCR_OP_COPYBIDEDMG,
+ B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL,
+ B_SCR_OP_TRYINFATUATING,
+ B_SCR_OP_UPDATESTATUSICON,
+ B_SCR_OP_SETMIST,
+ B_SCR_OP_SETFOCUSENERGY,
+ B_SCR_OP_TRANSFORMDATAEXECUTION,
+ B_SCR_OP_SETSUBSTITUTE,
+ B_SCR_OP_MIMICATTACKCOPY,
+ B_SCR_OP_SETCALLEDMOVE,
+ B_SCR_OP_UNUSED_0x9F,
+ B_SCR_OP_UNUSED_0xA0,
+ B_SCR_OP_COUNTERDAMAGECALCULATOR,
+ B_SCR_OP_MIRRORCOATDAMAGECALCULATOR,
+ B_SCR_OP_DISABLELASTUSEDATTACK,
+ B_SCR_OP_TRYSETENCORE,
+ B_SCR_OP_PAINSPLITDMGCALC,
+ B_SCR_OP_SETTYPETORANDOMRESISTANCE,
+ B_SCR_OP_SETALWAYSHITFLAG,
+ B_SCR_OP_COPYMOVEPERMANENTLY,
+ B_SCR_OP_UNUSED_0xA9,
+ B_SCR_OP_UNUSED_AA,
+ B_SCR_OP_UNUSED_0xAB,
+ B_SCR_OP_SETTAILWIND,
+ B_SCR_OP_TRYSPITEPPREDUCE,
+ B_SCR_OP_HEALPARTYSTATUS,
+ B_SCR_OP_CURSETARGET,
+ B_SCR_OP_TRYSETSPIKES,
+ B_SCR_OP_SETVOLATILE,
+ B_SCR_OP_TRYSETPERISHSONG,
+ B_SCR_OP_HANDLEROLLOUT,
+ B_SCR_OP_JUMPIFCONFUSEDANDSTATMAXED,
+ B_SCR_OP_HANDLEFURYCUTTER,
+ B_SCR_OP_SETEMBARGO,
+ B_SCR_OP_PRESENTDAMAGECALCULATION,
+ B_SCR_OP_SETSAFEGUARD,
+ B_SCR_OP_MAGNITUDEDAMAGECALCULATION,
+ B_SCR_OP_JUMPIFNOPURSUITSWITCHDMG,
+ B_SCR_OP_TRYACTIVATEITEM,
+ B_SCR_OP_HALVEHP,
+ B_SCR_OP_COPYFOESTATS,
+ B_SCR_OP_RAPIDSPINFREE,
+ B_SCR_OP_UNUSED_0xBF,
+ B_SCR_OP_RECOVERBASEDONSUNLIGHT,
+ B_SCR_OP_SETSTICKYWEB,
+ B_SCR_OP_SELECTFIRSTVALIDTARGET,
+ B_SCR_OP_SETFUTUREATTACK,
+ B_SCR_OP_TRYDOBEATUP,
+ B_SCR_OP_SETSEMIINVULNERABLEBIT,
+ B_SCR_OP_TRYFIRETWOTURNMOVENOWBYEFFECT,
+ B_SCR_OP_UNUSED_0xC7,
+ B_SCR_OP_UNUSED_C8,
+ B_SCR_OP_TRYMEMENTO,
+ B_SCR_OP_SETFORCEDTARGET,
+ B_SCR_OP_UNUSED_0xCB,
+ B_SCR_OP_UNUSED_0xCC,
+ B_SCR_OP_CURESTATUSWITHMOVE,
+ B_SCR_OP_SETTORMENT,
+ B_SCR_OP_JUMPIFNODAMAGE,
+ B_SCR_OP_SETTAUNT,
+ B_SCR_OP_TRYSETHELPINGHAND,
+ B_SCR_OP_TRYSWAPITEMS,
+ B_SCR_OP_TRYCOPYABILITY,
+ B_SCR_OP_TRYWISH,
+ B_SCR_OP_SETTOXICSPIKES,
+ B_SCR_OP_SETGASTROACID,
+ B_SCR_OP_SETYAWN,
+ B_SCR_OP_SETDAMAGETOHEALTHDIFFERENCE,
+ B_SCR_OP_SETROOM,
+ B_SCR_OP_TRYSWAPABILITIES,
+ B_SCR_OP_TRYIMPRISON,
+ B_SCR_OP_SETSTEALTHROCK,
+ B_SCR_OP_TRYSETVOLATILE,
+ B_SCR_OP_UNUSED_0xDE,
+ B_SCR_OP_TRYSETMAGICCOAT,
+ B_SCR_OP_TRYSETSNATCH,
+ B_SCR_OP_UNUSED2,
+ B_SCR_OP_SWITCHOUTABILITIES,
+ B_SCR_OP_JUMPIFHASNOHP,
+ B_SCR_OP_UNUSED_0xE4,
+ B_SCR_OP_PICKUP,
+ B_SCR_OP_UNUSED_0xE6,
+ B_SCR_OP_UNUSED_0xE7,
+ B_SCR_OP_SETTYPEBASEDHALVERS,
+ B_SCR_OP_JUMPIFSUBSTITUTEBLOCKS,
+ B_SCR_OP_TRYRECYCLEITEM,
+ B_SCR_OP_SETTYPETOENVIRONMENT,
+ B_SCR_OP_PURSUITDOUBLES,
+ B_SCR_OP_SNATCHSETBATTLERS,
+ B_SCR_OP_REMOVESCREENS,
+ B_SCR_OP_HANDLEBALLTHROW,
+ B_SCR_OP_GIVECAUGHTMON,
+ B_SCR_OP_TRYSETCAUGHTMONDEXFLAGS,
+ B_SCR_OP_DISPLAYDEXINFO,
+ B_SCR_OP_TRYGIVECAUGHTMONNICK,
+ B_SCR_OP_UNUSED_0xF4,
+ B_SCR_OP_REMOVEATTACKERSTATUS1,
+ B_SCR_OP_FINISHACTION,
+ B_SCR_OP_FINISHTURN,
+ B_SCR_OP_TRAINERSLIDEOUT,
+ B_SCR_OP_SETTELEKINESIS,
+ B_SCR_OP_SWAPSTATSTAGES,
+ B_SCR_OP_AVERAGESTATS,
+ B_SCR_OP_JUMPIFCAPTIVATEAFFECTED,
+ B_SCR_OP_SETNONVOLATILESTATUS,
+ B_SCR_OP_TRYOVERWRITEABILITY,
+ B_SCR_OP_CALLNATIVE,
+};
+
// The following correspond to the struct members of BattleScripting by adding their offset
#define sUNUSED_0x00 (gBattleScripting + 0x00) // unused_0x00
#define sUNUSED_0x04 (gBattleScripting + 0x04) // unused_0x04
diff --git a/include/constants/expansion.h b/include/constants/expansion.h
index 36a4d7c89c..b280aefacc 100644
--- a/include/constants/expansion.h
+++ b/include/constants/expansion.h
@@ -1,10 +1,10 @@
#ifndef GUARD_CONSTANTS_EXPANSION_H
#define GUARD_CONSTANTS_EXPANSION_H
-// Last version: 1.14.1
+// Last version: 1.14.2
#define EXPANSION_VERSION_MAJOR 1
#define EXPANSION_VERSION_MINOR 14
-#define EXPANSION_VERSION_PATCH 2
+#define EXPANSION_VERSION_PATCH 3
// FALSE if this this version of Expansion is not a tagged commit, i.e.
// it contains unreleased changes.
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 47a3b245e1..e00e5422a2 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -445,7 +445,7 @@
#define FLAG_REGISTERED_TRENT (TRAINER_REGISTERED_FLAGS_START + REMATCH_TRENT)
#define FLAG_REGISTERED_SAWYER (TRAINER_REGISTERED_FLAGS_START + REMATCH_SAWYER)
#define FLAG_REGISTERED_KIRA_AND_DAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_KIRA_AND_DAN)
-#define FLAG_REGISTERED_WALLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLY)
+#define FLAG_REGISTERED_WALLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLY_VR)
#define FLAG_REGISTERED_ROXANNE (TRAINER_REGISTERED_FLAGS_START + REMATCH_ROXANNE)
#define FLAG_REGISTERED_BRAWLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_BRAWLY)
#define FLAG_REGISTERED_WATTSON (TRAINER_REGISTERED_FLAGS_START + REMATCH_WATTSON)
diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h
index 8cabad41ea..81ff4bece6 100644
--- a/include/constants/generational_changes.h
+++ b/include/constants/generational_changes.h
@@ -147,7 +147,7 @@
F(INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \
F(DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \
F(DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \
- F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
+ F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) \
F(PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \
F(MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
F(BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \
diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h
index 32dacc36d3..8be7b39bf2 100644
--- a/include/constants/hold_effects.h
+++ b/include/constants/hold_effects.h
@@ -157,6 +157,7 @@ enum ItemActivationState
ACTIVATION_ON_PICK_UP,
ACTIVATION_ON_HARVEST,
ACTIVATION_ON_HP_THRESHOLD,
+ ACTIVATION_ON_STATUS_CHANGE,
};
#endif // GUARD_HOLD_EFFECTS_H
diff --git a/include/dexnav.h b/include/dexnav.h
index b1956349b3..82350f665a 100644
--- a/include/dexnav.h
+++ b/include/dexnav.h
@@ -69,14 +69,15 @@ enum EncounterType
#define DEXNAV_MASK_SPECIES 0x3FFF // First 14 bits
#define DEXNAV_MASK_ENVIRONMENT 0xC000 // Last two bit
-void EndDexNavSearch(u8 taskId);
+void EndDexNavSearch(void);
void Task_OpenDexNavFromStartMenu(u8 taskId);
-bool8 TryStartDexNavSearch(void);
+bool32 TryStartDexNavSearch(void);
void TryIncrementSpeciesSearchLevel(void);
void ResetDexNavSearch(void);
-bool8 TryFindHiddenPokemon(void);
+bool32 TryFindHiddenPokemon(void);
u32 CalculateDexNavShinyRolls(void);
void IncrementDexNavChain(void);
+bool32 OnStep_DexNavSearch(void);
extern u16 gDexNavSpecies;
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 4ec46709e3..b322c37f46 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -3,6 +3,10 @@
#include "constants/event_object_movement.h"
+#if OW_BATTLE_ONLY_FORMS && !OW_POKEMON_OBJECT_EVENTS
+#error "OW_POKEMON_OBJECT_EVENTS needs to be TRUE in order for OW_BATTLE_ONLY_FORMS to work."
+#endif
+
#if OW_POKEMON_OBJECT_EVENTS == FALSE && OW_FOLLOWERS_ENABLED == TRUE
#error "OW_POKEMON_OBJECT_EVENTS needs to be TRUE in order for OW_FOLLOWERS_ENABLED to work."
#endif
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index 5c3a0872ce..90e5e421a8 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -257,8 +257,8 @@ struct PokemonCrySong
u8 tieCmd; // 0x29
u8 tieKeyValue; // 0x2A
u8 tieVelocityValue; // 0x2B
- u8 unkCmd0C[2]; // 0x2C
- u16 unkCmd0CParam; // 0x2E
+ u8 xwaitCmd[2]; // 0x2C
+ u16 length; // 0x2E
u8 end[2]; // 0x30
};
@@ -306,7 +306,7 @@ struct MusicPlayerTrack
struct SoundChannel *chan;
struct ToneData tone;
u8 gap[10];
- u16 unk_3A;
+ u16 timer;
u32 unk_3C;
u8 *cmdPtr;
u8 *patternStack[3];
@@ -495,7 +495,7 @@ void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
-void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
+void ply_xwait(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
#endif // GUARD_GBA_M4A_INTERNAL_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 5e0f99031d..2e162f2df9 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -232,8 +232,8 @@ struct ObjectEvent
u16 movementDirection:4;
struct __attribute__((packed))
{
- u16 rangeX:4;
- u16 rangeY:4;
+ u8 rangeX:4;
+ u8 rangeY:4;
} range;
/*0x1A*/ u8 fieldEffectSpriteId;
/*0x1B*/ u8 warpArrowSpriteId;
diff --git a/include/rtc.h b/include/rtc.h
index d0bb6a43de..56c30735e9 100644
--- a/include/rtc.h
+++ b/include/rtc.h
@@ -23,11 +23,6 @@ void RtcGetStatus(struct SiiRtcInfo *rtc);
void RtcGetRawInfo(struct SiiRtcInfo *rtc);
u16 RtcCheckInfo(struct SiiRtcInfo *rtc);
void RtcReset(void);
-void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second);
-void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second);
-void FormatHexRtcTime(u8 *dest);
-void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day);
-void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day);
void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t);
void RtcCalcLocalTime(void);
bool8 IsBetweenHours(s32 hours, s32 begin, s32 end);
diff --git a/include/siirtc.h b/include/siirtc.h
index 44dabfd11d..998f5b9623 100644
--- a/include/siirtc.h
+++ b/include/siirtc.h
@@ -28,6 +28,5 @@ bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc);
bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc);
bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc);
bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc);
-bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc);
#endif // GUARD_RTC_H
diff --git a/sound/direct_sound_samples/bicycle_bell.wav b/sound/direct_sound_samples/bicycle_bell.wav
index 92f9634069..d07fcceecb 100644
Binary files a/sound/direct_sound_samples/bicycle_bell.wav and b/sound/direct_sound_samples/bicycle_bell.wav differ
diff --git a/sound/direct_sound_samples/classical_choir_voice_ahhs.wav b/sound/direct_sound_samples/classical_choir_voice_ahhs.wav
index 7e38d3a3f7..51f5656cc4 100644
Binary files a/sound/direct_sound_samples/classical_choir_voice_ahhs.wav and b/sound/direct_sound_samples/classical_choir_voice_ahhs.wav differ
diff --git a/sound/direct_sound_samples/cries/abra.wav b/sound/direct_sound_samples/cries/abra.wav
index 14aba2d7a5..34d645d9d3 100644
Binary files a/sound/direct_sound_samples/cries/abra.wav and b/sound/direct_sound_samples/cries/abra.wav differ
diff --git a/sound/direct_sound_samples/cries/absol.wav b/sound/direct_sound_samples/cries/absol.wav
index 4a90ec5c01..2da72c44a5 100644
Binary files a/sound/direct_sound_samples/cries/absol.wav and b/sound/direct_sound_samples/cries/absol.wav differ
diff --git a/sound/direct_sound_samples/cries/aerodactyl.wav b/sound/direct_sound_samples/cries/aerodactyl.wav
index 95518884b9..23479e7448 100644
Binary files a/sound/direct_sound_samples/cries/aerodactyl.wav and b/sound/direct_sound_samples/cries/aerodactyl.wav differ
diff --git a/sound/direct_sound_samples/cries/aggron.wav b/sound/direct_sound_samples/cries/aggron.wav
index bc75b2dbdd..1d22470368 100644
Binary files a/sound/direct_sound_samples/cries/aggron.wav and b/sound/direct_sound_samples/cries/aggron.wav differ
diff --git a/sound/direct_sound_samples/cries/aipom.wav b/sound/direct_sound_samples/cries/aipom.wav
index 4d7bc829cd..2fe15f8756 100644
Binary files a/sound/direct_sound_samples/cries/aipom.wav and b/sound/direct_sound_samples/cries/aipom.wav differ
diff --git a/sound/direct_sound_samples/cries/alakazam.wav b/sound/direct_sound_samples/cries/alakazam.wav
index f397363d15..911472dece 100644
Binary files a/sound/direct_sound_samples/cries/alakazam.wav and b/sound/direct_sound_samples/cries/alakazam.wav differ
diff --git a/sound/direct_sound_samples/cries/altaria.wav b/sound/direct_sound_samples/cries/altaria.wav
index ca35cbf519..08395d0d64 100644
Binary files a/sound/direct_sound_samples/cries/altaria.wav and b/sound/direct_sound_samples/cries/altaria.wav differ
diff --git a/sound/direct_sound_samples/cries/ampharos.wav b/sound/direct_sound_samples/cries/ampharos.wav
index 346b2aa48b..da0bd761ca 100644
Binary files a/sound/direct_sound_samples/cries/ampharos.wav and b/sound/direct_sound_samples/cries/ampharos.wav differ
diff --git a/sound/direct_sound_samples/cries/anorith.wav b/sound/direct_sound_samples/cries/anorith.wav
index 349ffacf04..5840c57697 100644
Binary files a/sound/direct_sound_samples/cries/anorith.wav and b/sound/direct_sound_samples/cries/anorith.wav differ
diff --git a/sound/direct_sound_samples/cries/arbok.wav b/sound/direct_sound_samples/cries/arbok.wav
index cebc9e3e56..a7b9de89e3 100644
Binary files a/sound/direct_sound_samples/cries/arbok.wav and b/sound/direct_sound_samples/cries/arbok.wav differ
diff --git a/sound/direct_sound_samples/cries/arcanine.wav b/sound/direct_sound_samples/cries/arcanine.wav
index f6e3e36801..65aa4e21fa 100644
Binary files a/sound/direct_sound_samples/cries/arcanine.wav and b/sound/direct_sound_samples/cries/arcanine.wav differ
diff --git a/sound/direct_sound_samples/cries/ariados.wav b/sound/direct_sound_samples/cries/ariados.wav
index f059bcfc93..168f97552f 100644
Binary files a/sound/direct_sound_samples/cries/ariados.wav and b/sound/direct_sound_samples/cries/ariados.wav differ
diff --git a/sound/direct_sound_samples/cries/armaldo.wav b/sound/direct_sound_samples/cries/armaldo.wav
index de11795664..aecebd18e9 100644
Binary files a/sound/direct_sound_samples/cries/armaldo.wav and b/sound/direct_sound_samples/cries/armaldo.wav differ
diff --git a/sound/direct_sound_samples/cries/aron.wav b/sound/direct_sound_samples/cries/aron.wav
index 35c69f8dc4..42860d46b3 100644
Binary files a/sound/direct_sound_samples/cries/aron.wav and b/sound/direct_sound_samples/cries/aron.wav differ
diff --git a/sound/direct_sound_samples/cries/articuno.wav b/sound/direct_sound_samples/cries/articuno.wav
index 348fbcd2f0..7ad8dfcd09 100644
Binary files a/sound/direct_sound_samples/cries/articuno.wav and b/sound/direct_sound_samples/cries/articuno.wav differ
diff --git a/sound/direct_sound_samples/cries/azumarill.wav b/sound/direct_sound_samples/cries/azumarill.wav
index f9e9ed89a1..331da9d90e 100644
Binary files a/sound/direct_sound_samples/cries/azumarill.wav and b/sound/direct_sound_samples/cries/azumarill.wav differ
diff --git a/sound/direct_sound_samples/cries/azurill.wav b/sound/direct_sound_samples/cries/azurill.wav
index 65fa56e65b..b3eda262b7 100644
Binary files a/sound/direct_sound_samples/cries/azurill.wav and b/sound/direct_sound_samples/cries/azurill.wav differ
diff --git a/sound/direct_sound_samples/cries/bagon.wav b/sound/direct_sound_samples/cries/bagon.wav
index af36a96eb8..2f36926eed 100644
Binary files a/sound/direct_sound_samples/cries/bagon.wav and b/sound/direct_sound_samples/cries/bagon.wav differ
diff --git a/sound/direct_sound_samples/cries/baltoy.wav b/sound/direct_sound_samples/cries/baltoy.wav
index 395954b565..59867a0ed5 100644
Binary files a/sound/direct_sound_samples/cries/baltoy.wav and b/sound/direct_sound_samples/cries/baltoy.wav differ
diff --git a/sound/direct_sound_samples/cries/banette.wav b/sound/direct_sound_samples/cries/banette.wav
index f030fb66c2..b2af33b685 100644
Binary files a/sound/direct_sound_samples/cries/banette.wav and b/sound/direct_sound_samples/cries/banette.wav differ
diff --git a/sound/direct_sound_samples/cries/barboach.wav b/sound/direct_sound_samples/cries/barboach.wav
index 40539ce514..a955c76c21 100644
Binary files a/sound/direct_sound_samples/cries/barboach.wav and b/sound/direct_sound_samples/cries/barboach.wav differ
diff --git a/sound/direct_sound_samples/cries/bayleef.wav b/sound/direct_sound_samples/cries/bayleef.wav
index 754e6e6e6e..6dbcaf918d 100644
Binary files a/sound/direct_sound_samples/cries/bayleef.wav and b/sound/direct_sound_samples/cries/bayleef.wav differ
diff --git a/sound/direct_sound_samples/cries/beautifly.wav b/sound/direct_sound_samples/cries/beautifly.wav
index f9c3f26a5b..248428abc5 100644
Binary files a/sound/direct_sound_samples/cries/beautifly.wav and b/sound/direct_sound_samples/cries/beautifly.wav differ
diff --git a/sound/direct_sound_samples/cries/beedrill.wav b/sound/direct_sound_samples/cries/beedrill.wav
index 6ba426baea..a3fa107ac1 100644
Binary files a/sound/direct_sound_samples/cries/beedrill.wav and b/sound/direct_sound_samples/cries/beedrill.wav differ
diff --git a/sound/direct_sound_samples/cries/beldum.wav b/sound/direct_sound_samples/cries/beldum.wav
index 5d6514af4c..427bb24771 100644
Binary files a/sound/direct_sound_samples/cries/beldum.wav and b/sound/direct_sound_samples/cries/beldum.wav differ
diff --git a/sound/direct_sound_samples/cries/bellossom.wav b/sound/direct_sound_samples/cries/bellossom.wav
index 71680c16b2..7d47d8a78f 100644
Binary files a/sound/direct_sound_samples/cries/bellossom.wav and b/sound/direct_sound_samples/cries/bellossom.wav differ
diff --git a/sound/direct_sound_samples/cries/bellsprout.wav b/sound/direct_sound_samples/cries/bellsprout.wav
index dc7da2e277..0f7a8ed63c 100644
Binary files a/sound/direct_sound_samples/cries/bellsprout.wav and b/sound/direct_sound_samples/cries/bellsprout.wav differ
diff --git a/sound/direct_sound_samples/cries/blastoise.wav b/sound/direct_sound_samples/cries/blastoise.wav
index fecb7733b4..bcd068dd87 100644
Binary files a/sound/direct_sound_samples/cries/blastoise.wav and b/sound/direct_sound_samples/cries/blastoise.wav differ
diff --git a/sound/direct_sound_samples/cries/blaziken.wav b/sound/direct_sound_samples/cries/blaziken.wav
index b7b663d8ec..dd570e0bb0 100644
Binary files a/sound/direct_sound_samples/cries/blaziken.wav and b/sound/direct_sound_samples/cries/blaziken.wav differ
diff --git a/sound/direct_sound_samples/cries/blissey.wav b/sound/direct_sound_samples/cries/blissey.wav
index a5012768c1..5cd44825d6 100644
Binary files a/sound/direct_sound_samples/cries/blissey.wav and b/sound/direct_sound_samples/cries/blissey.wav differ
diff --git a/sound/direct_sound_samples/cries/breloom.wav b/sound/direct_sound_samples/cries/breloom.wav
index 49f57f53ec..226a65193f 100644
Binary files a/sound/direct_sound_samples/cries/breloom.wav and b/sound/direct_sound_samples/cries/breloom.wav differ
diff --git a/sound/direct_sound_samples/cries/bulbasaur.wav b/sound/direct_sound_samples/cries/bulbasaur.wav
index 77a2d1bd1c..d081218bae 100644
Binary files a/sound/direct_sound_samples/cries/bulbasaur.wav and b/sound/direct_sound_samples/cries/bulbasaur.wav differ
diff --git a/sound/direct_sound_samples/cries/butterfree.wav b/sound/direct_sound_samples/cries/butterfree.wav
index 796a1afa9a..19e781569c 100644
Binary files a/sound/direct_sound_samples/cries/butterfree.wav and b/sound/direct_sound_samples/cries/butterfree.wav differ
diff --git a/sound/direct_sound_samples/cries/cacnea.wav b/sound/direct_sound_samples/cries/cacnea.wav
index b2786069b6..dcf4323c4b 100644
Binary files a/sound/direct_sound_samples/cries/cacnea.wav and b/sound/direct_sound_samples/cries/cacnea.wav differ
diff --git a/sound/direct_sound_samples/cries/cacturne.wav b/sound/direct_sound_samples/cries/cacturne.wav
index 34c4525227..bc54463170 100644
Binary files a/sound/direct_sound_samples/cries/cacturne.wav and b/sound/direct_sound_samples/cries/cacturne.wav differ
diff --git a/sound/direct_sound_samples/cries/camerupt.wav b/sound/direct_sound_samples/cries/camerupt.wav
index 95fdce3575..bef89f41d0 100644
Binary files a/sound/direct_sound_samples/cries/camerupt.wav and b/sound/direct_sound_samples/cries/camerupt.wav differ
diff --git a/sound/direct_sound_samples/cries/carvanha.wav b/sound/direct_sound_samples/cries/carvanha.wav
index ae10c3b10c..07a2f9d455 100644
Binary files a/sound/direct_sound_samples/cries/carvanha.wav and b/sound/direct_sound_samples/cries/carvanha.wav differ
diff --git a/sound/direct_sound_samples/cries/cascoon.wav b/sound/direct_sound_samples/cries/cascoon.wav
index fff0be6815..3e3daf6260 100644
Binary files a/sound/direct_sound_samples/cries/cascoon.wav and b/sound/direct_sound_samples/cries/cascoon.wav differ
diff --git a/sound/direct_sound_samples/cries/castform.wav b/sound/direct_sound_samples/cries/castform.wav
index 83748d45b8..8b50b35d98 100644
Binary files a/sound/direct_sound_samples/cries/castform.wav and b/sound/direct_sound_samples/cries/castform.wav differ
diff --git a/sound/direct_sound_samples/cries/caterpie.wav b/sound/direct_sound_samples/cries/caterpie.wav
index ccdf1ba1ac..c507364462 100644
Binary files a/sound/direct_sound_samples/cries/caterpie.wav and b/sound/direct_sound_samples/cries/caterpie.wav differ
diff --git a/sound/direct_sound_samples/cries/celebi.wav b/sound/direct_sound_samples/cries/celebi.wav
index e217a99e81..c5a560e4b2 100644
Binary files a/sound/direct_sound_samples/cries/celebi.wav and b/sound/direct_sound_samples/cries/celebi.wav differ
diff --git a/sound/direct_sound_samples/cries/chansey.wav b/sound/direct_sound_samples/cries/chansey.wav
index 62d8e6cd9f..418acc387e 100644
Binary files a/sound/direct_sound_samples/cries/chansey.wav and b/sound/direct_sound_samples/cries/chansey.wav differ
diff --git a/sound/direct_sound_samples/cries/charizard.wav b/sound/direct_sound_samples/cries/charizard.wav
index fbbf3c555d..fd748e8ee7 100644
Binary files a/sound/direct_sound_samples/cries/charizard.wav and b/sound/direct_sound_samples/cries/charizard.wav differ
diff --git a/sound/direct_sound_samples/cries/charmander.wav b/sound/direct_sound_samples/cries/charmander.wav
index 3d82aca2fa..09762f2103 100644
Binary files a/sound/direct_sound_samples/cries/charmander.wav and b/sound/direct_sound_samples/cries/charmander.wav differ
diff --git a/sound/direct_sound_samples/cries/charmeleon.wav b/sound/direct_sound_samples/cries/charmeleon.wav
index a491f0586e..a5289e2b01 100644
Binary files a/sound/direct_sound_samples/cries/charmeleon.wav and b/sound/direct_sound_samples/cries/charmeleon.wav differ
diff --git a/sound/direct_sound_samples/cries/chikorita.wav b/sound/direct_sound_samples/cries/chikorita.wav
index 65cb0c1765..485f364e72 100644
Binary files a/sound/direct_sound_samples/cries/chikorita.wav and b/sound/direct_sound_samples/cries/chikorita.wav differ
diff --git a/sound/direct_sound_samples/cries/chimecho.wav b/sound/direct_sound_samples/cries/chimecho.wav
index a063bf739e..2ffa593507 100644
Binary files a/sound/direct_sound_samples/cries/chimecho.wav and b/sound/direct_sound_samples/cries/chimecho.wav differ
diff --git a/sound/direct_sound_samples/cries/chinchou.wav b/sound/direct_sound_samples/cries/chinchou.wav
index 8822996828..4fe6c6a772 100644
Binary files a/sound/direct_sound_samples/cries/chinchou.wav and b/sound/direct_sound_samples/cries/chinchou.wav differ
diff --git a/sound/direct_sound_samples/cries/clamperl.wav b/sound/direct_sound_samples/cries/clamperl.wav
index 6615de8779..5e80ebab66 100644
Binary files a/sound/direct_sound_samples/cries/clamperl.wav and b/sound/direct_sound_samples/cries/clamperl.wav differ
diff --git a/sound/direct_sound_samples/cries/claydol.wav b/sound/direct_sound_samples/cries/claydol.wav
index 037a9a4063..27b7ed5765 100644
Binary files a/sound/direct_sound_samples/cries/claydol.wav and b/sound/direct_sound_samples/cries/claydol.wav differ
diff --git a/sound/direct_sound_samples/cries/clefable.wav b/sound/direct_sound_samples/cries/clefable.wav
index 09b0d19b86..602577cab0 100644
Binary files a/sound/direct_sound_samples/cries/clefable.wav and b/sound/direct_sound_samples/cries/clefable.wav differ
diff --git a/sound/direct_sound_samples/cries/clefairy.wav b/sound/direct_sound_samples/cries/clefairy.wav
index b447b700cd..2214cb445b 100644
Binary files a/sound/direct_sound_samples/cries/clefairy.wav and b/sound/direct_sound_samples/cries/clefairy.wav differ
diff --git a/sound/direct_sound_samples/cries/cleffa.wav b/sound/direct_sound_samples/cries/cleffa.wav
index 53d18df415..946a75959e 100644
Binary files a/sound/direct_sound_samples/cries/cleffa.wav and b/sound/direct_sound_samples/cries/cleffa.wav differ
diff --git a/sound/direct_sound_samples/cries/cloyster.wav b/sound/direct_sound_samples/cries/cloyster.wav
index 4fc766ae19..acd5f7fc30 100644
Binary files a/sound/direct_sound_samples/cries/cloyster.wav and b/sound/direct_sound_samples/cries/cloyster.wav differ
diff --git a/sound/direct_sound_samples/cries/combusken.wav b/sound/direct_sound_samples/cries/combusken.wav
index 8da9de64a1..6c23eb499c 100644
Binary files a/sound/direct_sound_samples/cries/combusken.wav and b/sound/direct_sound_samples/cries/combusken.wav differ
diff --git a/sound/direct_sound_samples/cries/corphish.wav b/sound/direct_sound_samples/cries/corphish.wav
index 990029d333..72af4a9e0c 100644
Binary files a/sound/direct_sound_samples/cries/corphish.wav and b/sound/direct_sound_samples/cries/corphish.wav differ
diff --git a/sound/direct_sound_samples/cries/corsola.wav b/sound/direct_sound_samples/cries/corsola.wav
index 890208bc73..c40b570a14 100644
Binary files a/sound/direct_sound_samples/cries/corsola.wav and b/sound/direct_sound_samples/cries/corsola.wav differ
diff --git a/sound/direct_sound_samples/cries/cradily.wav b/sound/direct_sound_samples/cries/cradily.wav
index bb9d5bd425..ba4f755c7f 100644
Binary files a/sound/direct_sound_samples/cries/cradily.wav and b/sound/direct_sound_samples/cries/cradily.wav differ
diff --git a/sound/direct_sound_samples/cries/crawdaunt.wav b/sound/direct_sound_samples/cries/crawdaunt.wav
index e270a31791..2ce6659a3f 100644
Binary files a/sound/direct_sound_samples/cries/crawdaunt.wav and b/sound/direct_sound_samples/cries/crawdaunt.wav differ
diff --git a/sound/direct_sound_samples/cries/crobat.wav b/sound/direct_sound_samples/cries/crobat.wav
index fdad8d4a63..9000b8c299 100644
Binary files a/sound/direct_sound_samples/cries/crobat.wav and b/sound/direct_sound_samples/cries/crobat.wav differ
diff --git a/sound/direct_sound_samples/cries/croconaw.wav b/sound/direct_sound_samples/cries/croconaw.wav
index deb2a70035..9fd775fc0c 100644
Binary files a/sound/direct_sound_samples/cries/croconaw.wav and b/sound/direct_sound_samples/cries/croconaw.wav differ
diff --git a/sound/direct_sound_samples/cries/cubone.wav b/sound/direct_sound_samples/cries/cubone.wav
index b198c25403..44b97c4bb2 100644
Binary files a/sound/direct_sound_samples/cries/cubone.wav and b/sound/direct_sound_samples/cries/cubone.wav differ
diff --git a/sound/direct_sound_samples/cries/cyndaquil.wav b/sound/direct_sound_samples/cries/cyndaquil.wav
index 87921c52eb..23e9b3273e 100644
Binary files a/sound/direct_sound_samples/cries/cyndaquil.wav and b/sound/direct_sound_samples/cries/cyndaquil.wav differ
diff --git a/sound/direct_sound_samples/cries/delcatty.wav b/sound/direct_sound_samples/cries/delcatty.wav
index dce5e73b7a..7807052669 100644
Binary files a/sound/direct_sound_samples/cries/delcatty.wav and b/sound/direct_sound_samples/cries/delcatty.wav differ
diff --git a/sound/direct_sound_samples/cries/delibird.wav b/sound/direct_sound_samples/cries/delibird.wav
index 7ccf645de6..f4b27e7326 100644
Binary files a/sound/direct_sound_samples/cries/delibird.wav and b/sound/direct_sound_samples/cries/delibird.wav differ
diff --git a/sound/direct_sound_samples/cries/deoxys.wav b/sound/direct_sound_samples/cries/deoxys.wav
index 7ed0f65cc1..c5943318db 100644
Binary files a/sound/direct_sound_samples/cries/deoxys.wav and b/sound/direct_sound_samples/cries/deoxys.wav differ
diff --git a/sound/direct_sound_samples/cries/dewgong.wav b/sound/direct_sound_samples/cries/dewgong.wav
index 24af04411a..c99284027e 100644
Binary files a/sound/direct_sound_samples/cries/dewgong.wav and b/sound/direct_sound_samples/cries/dewgong.wav differ
diff --git a/sound/direct_sound_samples/cries/diglett.wav b/sound/direct_sound_samples/cries/diglett.wav
index 8eecd3bedb..ba098f64a6 100644
Binary files a/sound/direct_sound_samples/cries/diglett.wav and b/sound/direct_sound_samples/cries/diglett.wav differ
diff --git a/sound/direct_sound_samples/cries/ditto.wav b/sound/direct_sound_samples/cries/ditto.wav
index bbd9d02804..b26b2d56ca 100644
Binary files a/sound/direct_sound_samples/cries/ditto.wav and b/sound/direct_sound_samples/cries/ditto.wav differ
diff --git a/sound/direct_sound_samples/cries/dodrio.wav b/sound/direct_sound_samples/cries/dodrio.wav
index e43a8a9770..c23d097d82 100644
Binary files a/sound/direct_sound_samples/cries/dodrio.wav and b/sound/direct_sound_samples/cries/dodrio.wav differ
diff --git a/sound/direct_sound_samples/cries/doduo.wav b/sound/direct_sound_samples/cries/doduo.wav
index 065e9fd62f..3d7bad39e7 100644
Binary files a/sound/direct_sound_samples/cries/doduo.wav and b/sound/direct_sound_samples/cries/doduo.wav differ
diff --git a/sound/direct_sound_samples/cries/donphan.wav b/sound/direct_sound_samples/cries/donphan.wav
index ba6caf5bd8..64a69a34f6 100644
Binary files a/sound/direct_sound_samples/cries/donphan.wav and b/sound/direct_sound_samples/cries/donphan.wav differ
diff --git a/sound/direct_sound_samples/cries/dragonair.wav b/sound/direct_sound_samples/cries/dragonair.wav
index 3fd2efee29..ab902f69d5 100644
Binary files a/sound/direct_sound_samples/cries/dragonair.wav and b/sound/direct_sound_samples/cries/dragonair.wav differ
diff --git a/sound/direct_sound_samples/cries/dragonite.wav b/sound/direct_sound_samples/cries/dragonite.wav
index 8517e0da0f..98f044cc37 100644
Binary files a/sound/direct_sound_samples/cries/dragonite.wav and b/sound/direct_sound_samples/cries/dragonite.wav differ
diff --git a/sound/direct_sound_samples/cries/dratini.wav b/sound/direct_sound_samples/cries/dratini.wav
index 711c6b9a30..ab59d4c180 100644
Binary files a/sound/direct_sound_samples/cries/dratini.wav and b/sound/direct_sound_samples/cries/dratini.wav differ
diff --git a/sound/direct_sound_samples/cries/drowzee.wav b/sound/direct_sound_samples/cries/drowzee.wav
index 4132109663..3294d5f83d 100644
Binary files a/sound/direct_sound_samples/cries/drowzee.wav and b/sound/direct_sound_samples/cries/drowzee.wav differ
diff --git a/sound/direct_sound_samples/cries/dugtrio.wav b/sound/direct_sound_samples/cries/dugtrio.wav
index d159a2fae0..59be4c5a7f 100644
Binary files a/sound/direct_sound_samples/cries/dugtrio.wav and b/sound/direct_sound_samples/cries/dugtrio.wav differ
diff --git a/sound/direct_sound_samples/cries/dunsparce.wav b/sound/direct_sound_samples/cries/dunsparce.wav
index 5154546d10..b3bc21a042 100644
Binary files a/sound/direct_sound_samples/cries/dunsparce.wav and b/sound/direct_sound_samples/cries/dunsparce.wav differ
diff --git a/sound/direct_sound_samples/cries/dusclops.wav b/sound/direct_sound_samples/cries/dusclops.wav
index 81353887b9..0ae486972e 100644
Binary files a/sound/direct_sound_samples/cries/dusclops.wav and b/sound/direct_sound_samples/cries/dusclops.wav differ
diff --git a/sound/direct_sound_samples/cries/duskull.wav b/sound/direct_sound_samples/cries/duskull.wav
index eba8fc3ff1..7ef72a3975 100644
Binary files a/sound/direct_sound_samples/cries/duskull.wav and b/sound/direct_sound_samples/cries/duskull.wav differ
diff --git a/sound/direct_sound_samples/cries/dustox.wav b/sound/direct_sound_samples/cries/dustox.wav
index 42f23c1289..7647585626 100644
Binary files a/sound/direct_sound_samples/cries/dustox.wav and b/sound/direct_sound_samples/cries/dustox.wav differ
diff --git a/sound/direct_sound_samples/cries/eevee.wav b/sound/direct_sound_samples/cries/eevee.wav
index e21ce1f0e7..833528278b 100644
Binary files a/sound/direct_sound_samples/cries/eevee.wav and b/sound/direct_sound_samples/cries/eevee.wav differ
diff --git a/sound/direct_sound_samples/cries/ekans.wav b/sound/direct_sound_samples/cries/ekans.wav
index 2ae3e4a180..5a75158471 100644
Binary files a/sound/direct_sound_samples/cries/ekans.wav and b/sound/direct_sound_samples/cries/ekans.wav differ
diff --git a/sound/direct_sound_samples/cries/electabuzz.wav b/sound/direct_sound_samples/cries/electabuzz.wav
index b555d6631a..8443823fb7 100644
Binary files a/sound/direct_sound_samples/cries/electabuzz.wav and b/sound/direct_sound_samples/cries/electabuzz.wav differ
diff --git a/sound/direct_sound_samples/cries/electrike.wav b/sound/direct_sound_samples/cries/electrike.wav
index 8a210865bf..9b09301ff4 100644
Binary files a/sound/direct_sound_samples/cries/electrike.wav and b/sound/direct_sound_samples/cries/electrike.wav differ
diff --git a/sound/direct_sound_samples/cries/electrode.wav b/sound/direct_sound_samples/cries/electrode.wav
index 8f28521464..4ad346759d 100644
Binary files a/sound/direct_sound_samples/cries/electrode.wav and b/sound/direct_sound_samples/cries/electrode.wav differ
diff --git a/sound/direct_sound_samples/cries/elekid.wav b/sound/direct_sound_samples/cries/elekid.wav
index 82a9a2f675..2491113869 100644
Binary files a/sound/direct_sound_samples/cries/elekid.wav and b/sound/direct_sound_samples/cries/elekid.wav differ
diff --git a/sound/direct_sound_samples/cries/entei.wav b/sound/direct_sound_samples/cries/entei.wav
index cf7e9c0c2f..cce2db4b03 100644
Binary files a/sound/direct_sound_samples/cries/entei.wav and b/sound/direct_sound_samples/cries/entei.wav differ
diff --git a/sound/direct_sound_samples/cries/espeon.wav b/sound/direct_sound_samples/cries/espeon.wav
index 20743268e1..8456a350d6 100644
Binary files a/sound/direct_sound_samples/cries/espeon.wav and b/sound/direct_sound_samples/cries/espeon.wav differ
diff --git a/sound/direct_sound_samples/cries/exeggcute.wav b/sound/direct_sound_samples/cries/exeggcute.wav
index bfd825f800..865aedc1f5 100644
Binary files a/sound/direct_sound_samples/cries/exeggcute.wav and b/sound/direct_sound_samples/cries/exeggcute.wav differ
diff --git a/sound/direct_sound_samples/cries/exeggutor.wav b/sound/direct_sound_samples/cries/exeggutor.wav
index f2a0d6bedc..831eb36cd9 100644
Binary files a/sound/direct_sound_samples/cries/exeggutor.wav and b/sound/direct_sound_samples/cries/exeggutor.wav differ
diff --git a/sound/direct_sound_samples/cries/exploud.wav b/sound/direct_sound_samples/cries/exploud.wav
index 9b3cbf896b..1b81512ce3 100644
Binary files a/sound/direct_sound_samples/cries/exploud.wav and b/sound/direct_sound_samples/cries/exploud.wav differ
diff --git a/sound/direct_sound_samples/cries/farfetchd.wav b/sound/direct_sound_samples/cries/farfetchd.wav
index d090445d41..294322e04c 100644
Binary files a/sound/direct_sound_samples/cries/farfetchd.wav and b/sound/direct_sound_samples/cries/farfetchd.wav differ
diff --git a/sound/direct_sound_samples/cries/fearow.wav b/sound/direct_sound_samples/cries/fearow.wav
index 6ef7eadee9..d2ab288dd1 100644
Binary files a/sound/direct_sound_samples/cries/fearow.wav and b/sound/direct_sound_samples/cries/fearow.wav differ
diff --git a/sound/direct_sound_samples/cries/feebas.wav b/sound/direct_sound_samples/cries/feebas.wav
index a8f60a55f6..1e9037b7ec 100644
Binary files a/sound/direct_sound_samples/cries/feebas.wav and b/sound/direct_sound_samples/cries/feebas.wav differ
diff --git a/sound/direct_sound_samples/cries/feraligatr.wav b/sound/direct_sound_samples/cries/feraligatr.wav
index d1da192f90..f17eec474b 100644
Binary files a/sound/direct_sound_samples/cries/feraligatr.wav and b/sound/direct_sound_samples/cries/feraligatr.wav differ
diff --git a/sound/direct_sound_samples/cries/flaaffy.wav b/sound/direct_sound_samples/cries/flaaffy.wav
index a0cf3df062..9459c8e06d 100644
Binary files a/sound/direct_sound_samples/cries/flaaffy.wav and b/sound/direct_sound_samples/cries/flaaffy.wav differ
diff --git a/sound/direct_sound_samples/cries/flareon.wav b/sound/direct_sound_samples/cries/flareon.wav
index 6bd51168b3..d138a75e03 100644
Binary files a/sound/direct_sound_samples/cries/flareon.wav and b/sound/direct_sound_samples/cries/flareon.wav differ
diff --git a/sound/direct_sound_samples/cries/flygon.wav b/sound/direct_sound_samples/cries/flygon.wav
index b6c5d90ba0..2d64627eee 100644
Binary files a/sound/direct_sound_samples/cries/flygon.wav and b/sound/direct_sound_samples/cries/flygon.wav differ
diff --git a/sound/direct_sound_samples/cries/forretress.wav b/sound/direct_sound_samples/cries/forretress.wav
index 3f704f65b5..008140c1ec 100644
Binary files a/sound/direct_sound_samples/cries/forretress.wav and b/sound/direct_sound_samples/cries/forretress.wav differ
diff --git a/sound/direct_sound_samples/cries/furret.wav b/sound/direct_sound_samples/cries/furret.wav
index e3e4ec5842..605eeec172 100644
Binary files a/sound/direct_sound_samples/cries/furret.wav and b/sound/direct_sound_samples/cries/furret.wav differ
diff --git a/sound/direct_sound_samples/cries/gardevoir.wav b/sound/direct_sound_samples/cries/gardevoir.wav
index bd3a99acc2..a40ef12626 100644
Binary files a/sound/direct_sound_samples/cries/gardevoir.wav and b/sound/direct_sound_samples/cries/gardevoir.wav differ
diff --git a/sound/direct_sound_samples/cries/gastly.wav b/sound/direct_sound_samples/cries/gastly.wav
index 1bc2ff9667..7d9c25de30 100644
Binary files a/sound/direct_sound_samples/cries/gastly.wav and b/sound/direct_sound_samples/cries/gastly.wav differ
diff --git a/sound/direct_sound_samples/cries/gengar.wav b/sound/direct_sound_samples/cries/gengar.wav
index 9e8c24c28b..74ec623df3 100644
Binary files a/sound/direct_sound_samples/cries/gengar.wav and b/sound/direct_sound_samples/cries/gengar.wav differ
diff --git a/sound/direct_sound_samples/cries/geodude.wav b/sound/direct_sound_samples/cries/geodude.wav
index f355fc7e1a..0c1336a8e2 100644
Binary files a/sound/direct_sound_samples/cries/geodude.wav and b/sound/direct_sound_samples/cries/geodude.wav differ
diff --git a/sound/direct_sound_samples/cries/girafarig.wav b/sound/direct_sound_samples/cries/girafarig.wav
index d78162a29f..089b8bb045 100644
Binary files a/sound/direct_sound_samples/cries/girafarig.wav and b/sound/direct_sound_samples/cries/girafarig.wav differ
diff --git a/sound/direct_sound_samples/cries/glalie.wav b/sound/direct_sound_samples/cries/glalie.wav
index bf35bd147b..6f81e7a2a4 100644
Binary files a/sound/direct_sound_samples/cries/glalie.wav and b/sound/direct_sound_samples/cries/glalie.wav differ
diff --git a/sound/direct_sound_samples/cries/gligar.wav b/sound/direct_sound_samples/cries/gligar.wav
index 8fa3efa6b1..fa49131d87 100644
Binary files a/sound/direct_sound_samples/cries/gligar.wav and b/sound/direct_sound_samples/cries/gligar.wav differ
diff --git a/sound/direct_sound_samples/cries/gloom.wav b/sound/direct_sound_samples/cries/gloom.wav
index abc408a0f7..ce3da97083 100644
Binary files a/sound/direct_sound_samples/cries/gloom.wav and b/sound/direct_sound_samples/cries/gloom.wav differ
diff --git a/sound/direct_sound_samples/cries/golbat.wav b/sound/direct_sound_samples/cries/golbat.wav
index 20d2ecf5c9..4f098e5f2c 100644
Binary files a/sound/direct_sound_samples/cries/golbat.wav and b/sound/direct_sound_samples/cries/golbat.wav differ
diff --git a/sound/direct_sound_samples/cries/goldeen.wav b/sound/direct_sound_samples/cries/goldeen.wav
index 342df710c9..ec3b48ad44 100644
Binary files a/sound/direct_sound_samples/cries/goldeen.wav and b/sound/direct_sound_samples/cries/goldeen.wav differ
diff --git a/sound/direct_sound_samples/cries/golduck.wav b/sound/direct_sound_samples/cries/golduck.wav
index a9bf91b2da..bc6cc95af9 100644
Binary files a/sound/direct_sound_samples/cries/golduck.wav and b/sound/direct_sound_samples/cries/golduck.wav differ
diff --git a/sound/direct_sound_samples/cries/golem.wav b/sound/direct_sound_samples/cries/golem.wav
index 17ed6128e4..9a26adcc94 100644
Binary files a/sound/direct_sound_samples/cries/golem.wav and b/sound/direct_sound_samples/cries/golem.wav differ
diff --git a/sound/direct_sound_samples/cries/gorebyss.wav b/sound/direct_sound_samples/cries/gorebyss.wav
index 3d375f6dcf..cd14f26dd5 100644
Binary files a/sound/direct_sound_samples/cries/gorebyss.wav and b/sound/direct_sound_samples/cries/gorebyss.wav differ
diff --git a/sound/direct_sound_samples/cries/granbull.wav b/sound/direct_sound_samples/cries/granbull.wav
index 959793b724..faffbc5629 100644
Binary files a/sound/direct_sound_samples/cries/granbull.wav and b/sound/direct_sound_samples/cries/granbull.wav differ
diff --git a/sound/direct_sound_samples/cries/graveler.wav b/sound/direct_sound_samples/cries/graveler.wav
index 6b8591406f..e5a2e9d19e 100644
Binary files a/sound/direct_sound_samples/cries/graveler.wav and b/sound/direct_sound_samples/cries/graveler.wav differ
diff --git a/sound/direct_sound_samples/cries/grimer.wav b/sound/direct_sound_samples/cries/grimer.wav
index 092dfeed61..8ae15f4063 100644
Binary files a/sound/direct_sound_samples/cries/grimer.wav and b/sound/direct_sound_samples/cries/grimer.wav differ
diff --git a/sound/direct_sound_samples/cries/groudon.wav b/sound/direct_sound_samples/cries/groudon.wav
index 680d0ec047..0571205792 100644
Binary files a/sound/direct_sound_samples/cries/groudon.wav and b/sound/direct_sound_samples/cries/groudon.wav differ
diff --git a/sound/direct_sound_samples/cries/grovyle.wav b/sound/direct_sound_samples/cries/grovyle.wav
index 7e2f1acd0f..6ae949e00a 100644
Binary files a/sound/direct_sound_samples/cries/grovyle.wav and b/sound/direct_sound_samples/cries/grovyle.wav differ
diff --git a/sound/direct_sound_samples/cries/growlithe.wav b/sound/direct_sound_samples/cries/growlithe.wav
index 3f72ea6f97..96ea21385a 100644
Binary files a/sound/direct_sound_samples/cries/growlithe.wav and b/sound/direct_sound_samples/cries/growlithe.wav differ
diff --git a/sound/direct_sound_samples/cries/grumpig.wav b/sound/direct_sound_samples/cries/grumpig.wav
index e9c8157e0f..99f7684d15 100644
Binary files a/sound/direct_sound_samples/cries/grumpig.wav and b/sound/direct_sound_samples/cries/grumpig.wav differ
diff --git a/sound/direct_sound_samples/cries/gulpin.wav b/sound/direct_sound_samples/cries/gulpin.wav
index d1ab06b6b0..af1c2dd99d 100644
Binary files a/sound/direct_sound_samples/cries/gulpin.wav and b/sound/direct_sound_samples/cries/gulpin.wav differ
diff --git a/sound/direct_sound_samples/cries/gyarados.wav b/sound/direct_sound_samples/cries/gyarados.wav
index 6a4124085e..b76327da26 100644
Binary files a/sound/direct_sound_samples/cries/gyarados.wav and b/sound/direct_sound_samples/cries/gyarados.wav differ
diff --git a/sound/direct_sound_samples/cries/hariyama.wav b/sound/direct_sound_samples/cries/hariyama.wav
index 5567aae3a1..879f7d1e1d 100644
Binary files a/sound/direct_sound_samples/cries/hariyama.wav and b/sound/direct_sound_samples/cries/hariyama.wav differ
diff --git a/sound/direct_sound_samples/cries/haunter.wav b/sound/direct_sound_samples/cries/haunter.wav
index e22b1cfc13..999a0d02d1 100644
Binary files a/sound/direct_sound_samples/cries/haunter.wav and b/sound/direct_sound_samples/cries/haunter.wav differ
diff --git a/sound/direct_sound_samples/cries/heracross.wav b/sound/direct_sound_samples/cries/heracross.wav
index ed68648ba8..1482499085 100644
Binary files a/sound/direct_sound_samples/cries/heracross.wav and b/sound/direct_sound_samples/cries/heracross.wav differ
diff --git a/sound/direct_sound_samples/cries/hitmonchan.wav b/sound/direct_sound_samples/cries/hitmonchan.wav
index 806d206d35..130169e6e1 100644
Binary files a/sound/direct_sound_samples/cries/hitmonchan.wav and b/sound/direct_sound_samples/cries/hitmonchan.wav differ
diff --git a/sound/direct_sound_samples/cries/hitmonlee.wav b/sound/direct_sound_samples/cries/hitmonlee.wav
index e40d852b99..9ec63520a9 100644
Binary files a/sound/direct_sound_samples/cries/hitmonlee.wav and b/sound/direct_sound_samples/cries/hitmonlee.wav differ
diff --git a/sound/direct_sound_samples/cries/hitmontop.wav b/sound/direct_sound_samples/cries/hitmontop.wav
index 652222dc6c..fa26c699b8 100644
Binary files a/sound/direct_sound_samples/cries/hitmontop.wav and b/sound/direct_sound_samples/cries/hitmontop.wav differ
diff --git a/sound/direct_sound_samples/cries/ho_oh.wav b/sound/direct_sound_samples/cries/ho_oh.wav
index acf8812532..e098f9806b 100644
Binary files a/sound/direct_sound_samples/cries/ho_oh.wav and b/sound/direct_sound_samples/cries/ho_oh.wav differ
diff --git a/sound/direct_sound_samples/cries/hoothoot.wav b/sound/direct_sound_samples/cries/hoothoot.wav
index e7ca2f5780..303fddb12b 100644
Binary files a/sound/direct_sound_samples/cries/hoothoot.wav and b/sound/direct_sound_samples/cries/hoothoot.wav differ
diff --git a/sound/direct_sound_samples/cries/hoppip.wav b/sound/direct_sound_samples/cries/hoppip.wav
index ab14fdaec7..525c720e93 100644
Binary files a/sound/direct_sound_samples/cries/hoppip.wav and b/sound/direct_sound_samples/cries/hoppip.wav differ
diff --git a/sound/direct_sound_samples/cries/horsea.wav b/sound/direct_sound_samples/cries/horsea.wav
index ab67381edd..26efb0ca79 100644
Binary files a/sound/direct_sound_samples/cries/horsea.wav and b/sound/direct_sound_samples/cries/horsea.wav differ
diff --git a/sound/direct_sound_samples/cries/houndoom.wav b/sound/direct_sound_samples/cries/houndoom.wav
index a34e4cda2b..1add97cb82 100644
Binary files a/sound/direct_sound_samples/cries/houndoom.wav and b/sound/direct_sound_samples/cries/houndoom.wav differ
diff --git a/sound/direct_sound_samples/cries/houndour.wav b/sound/direct_sound_samples/cries/houndour.wav
index 51310524a8..ef683e68f6 100644
Binary files a/sound/direct_sound_samples/cries/houndour.wav and b/sound/direct_sound_samples/cries/houndour.wav differ
diff --git a/sound/direct_sound_samples/cries/huntail.wav b/sound/direct_sound_samples/cries/huntail.wav
index b2e3f99853..9c4e7af021 100644
Binary files a/sound/direct_sound_samples/cries/huntail.wav and b/sound/direct_sound_samples/cries/huntail.wav differ
diff --git a/sound/direct_sound_samples/cries/hypno.wav b/sound/direct_sound_samples/cries/hypno.wav
index 4369110c2c..3b1e2dab6e 100644
Binary files a/sound/direct_sound_samples/cries/hypno.wav and b/sound/direct_sound_samples/cries/hypno.wav differ
diff --git a/sound/direct_sound_samples/cries/igglybuff.wav b/sound/direct_sound_samples/cries/igglybuff.wav
index efec9bf4c4..0b8a7dfcaf 100644
Binary files a/sound/direct_sound_samples/cries/igglybuff.wav and b/sound/direct_sound_samples/cries/igglybuff.wav differ
diff --git a/sound/direct_sound_samples/cries/illumise.wav b/sound/direct_sound_samples/cries/illumise.wav
index 6570492f79..f0234b92e4 100644
Binary files a/sound/direct_sound_samples/cries/illumise.wav and b/sound/direct_sound_samples/cries/illumise.wav differ
diff --git a/sound/direct_sound_samples/cries/ivysaur.wav b/sound/direct_sound_samples/cries/ivysaur.wav
index 07d10c0e8d..1110a63382 100644
Binary files a/sound/direct_sound_samples/cries/ivysaur.wav and b/sound/direct_sound_samples/cries/ivysaur.wav differ
diff --git a/sound/direct_sound_samples/cries/jigglypuff.wav b/sound/direct_sound_samples/cries/jigglypuff.wav
index d3e925fe94..4b8d4ccc8f 100644
Binary files a/sound/direct_sound_samples/cries/jigglypuff.wav and b/sound/direct_sound_samples/cries/jigglypuff.wav differ
diff --git a/sound/direct_sound_samples/cries/jirachi.wav b/sound/direct_sound_samples/cries/jirachi.wav
index 43850cbaa0..f548e50bf7 100644
Binary files a/sound/direct_sound_samples/cries/jirachi.wav and b/sound/direct_sound_samples/cries/jirachi.wav differ
diff --git a/sound/direct_sound_samples/cries/jolteon.wav b/sound/direct_sound_samples/cries/jolteon.wav
index 8c5f8bea4c..61b5cb1604 100644
Binary files a/sound/direct_sound_samples/cries/jolteon.wav and b/sound/direct_sound_samples/cries/jolteon.wav differ
diff --git a/sound/direct_sound_samples/cries/jumpluff.wav b/sound/direct_sound_samples/cries/jumpluff.wav
index cce951b1f7..d58b0b11fa 100644
Binary files a/sound/direct_sound_samples/cries/jumpluff.wav and b/sound/direct_sound_samples/cries/jumpluff.wav differ
diff --git a/sound/direct_sound_samples/cries/jynx.wav b/sound/direct_sound_samples/cries/jynx.wav
index faacb1e957..bb833749e4 100644
Binary files a/sound/direct_sound_samples/cries/jynx.wav and b/sound/direct_sound_samples/cries/jynx.wav differ
diff --git a/sound/direct_sound_samples/cries/kabuto.wav b/sound/direct_sound_samples/cries/kabuto.wav
index 448b178914..598845740a 100644
Binary files a/sound/direct_sound_samples/cries/kabuto.wav and b/sound/direct_sound_samples/cries/kabuto.wav differ
diff --git a/sound/direct_sound_samples/cries/kabutops.wav b/sound/direct_sound_samples/cries/kabutops.wav
index 0c7b74fea3..9cc76e4536 100644
Binary files a/sound/direct_sound_samples/cries/kabutops.wav and b/sound/direct_sound_samples/cries/kabutops.wav differ
diff --git a/sound/direct_sound_samples/cries/kadabra.wav b/sound/direct_sound_samples/cries/kadabra.wav
index d7030b27a2..f2e3788e4b 100644
Binary files a/sound/direct_sound_samples/cries/kadabra.wav and b/sound/direct_sound_samples/cries/kadabra.wav differ
diff --git a/sound/direct_sound_samples/cries/kakuna.wav b/sound/direct_sound_samples/cries/kakuna.wav
index f147428e38..0a7b43f946 100644
Binary files a/sound/direct_sound_samples/cries/kakuna.wav and b/sound/direct_sound_samples/cries/kakuna.wav differ
diff --git a/sound/direct_sound_samples/cries/kangaskhan.wav b/sound/direct_sound_samples/cries/kangaskhan.wav
index eaf7244627..32a12fcbc2 100644
Binary files a/sound/direct_sound_samples/cries/kangaskhan.wav and b/sound/direct_sound_samples/cries/kangaskhan.wav differ
diff --git a/sound/direct_sound_samples/cries/kecleon.wav b/sound/direct_sound_samples/cries/kecleon.wav
index 96ab74ff2b..5d16ee144b 100644
Binary files a/sound/direct_sound_samples/cries/kecleon.wav and b/sound/direct_sound_samples/cries/kecleon.wav differ
diff --git a/sound/direct_sound_samples/cries/kingdra.wav b/sound/direct_sound_samples/cries/kingdra.wav
index 2a47d1479d..2263e72cbd 100644
Binary files a/sound/direct_sound_samples/cries/kingdra.wav and b/sound/direct_sound_samples/cries/kingdra.wav differ
diff --git a/sound/direct_sound_samples/cries/kingler.wav b/sound/direct_sound_samples/cries/kingler.wav
index 62418456d0..6d3f58e8cf 100644
Binary files a/sound/direct_sound_samples/cries/kingler.wav and b/sound/direct_sound_samples/cries/kingler.wav differ
diff --git a/sound/direct_sound_samples/cries/kirlia.wav b/sound/direct_sound_samples/cries/kirlia.wav
index c7dd3078c8..36706ca6f2 100644
Binary files a/sound/direct_sound_samples/cries/kirlia.wav and b/sound/direct_sound_samples/cries/kirlia.wav differ
diff --git a/sound/direct_sound_samples/cries/koffing.wav b/sound/direct_sound_samples/cries/koffing.wav
index afa520c03e..5fd7b7d4a6 100644
Binary files a/sound/direct_sound_samples/cries/koffing.wav and b/sound/direct_sound_samples/cries/koffing.wav differ
diff --git a/sound/direct_sound_samples/cries/krabby.wav b/sound/direct_sound_samples/cries/krabby.wav
index 0072ea777a..31644bacc1 100644
Binary files a/sound/direct_sound_samples/cries/krabby.wav and b/sound/direct_sound_samples/cries/krabby.wav differ
diff --git a/sound/direct_sound_samples/cries/kyogre.wav b/sound/direct_sound_samples/cries/kyogre.wav
index 00db984c66..d73951bb6d 100644
Binary files a/sound/direct_sound_samples/cries/kyogre.wav and b/sound/direct_sound_samples/cries/kyogre.wav differ
diff --git a/sound/direct_sound_samples/cries/lairon.wav b/sound/direct_sound_samples/cries/lairon.wav
index 574ffac745..1d82d06545 100644
Binary files a/sound/direct_sound_samples/cries/lairon.wav and b/sound/direct_sound_samples/cries/lairon.wav differ
diff --git a/sound/direct_sound_samples/cries/lanturn.wav b/sound/direct_sound_samples/cries/lanturn.wav
index 6d8b21dd99..3b68f58ad9 100644
Binary files a/sound/direct_sound_samples/cries/lanturn.wav and b/sound/direct_sound_samples/cries/lanturn.wav differ
diff --git a/sound/direct_sound_samples/cries/lapras.wav b/sound/direct_sound_samples/cries/lapras.wav
index d79819a971..2c0714995f 100644
Binary files a/sound/direct_sound_samples/cries/lapras.wav and b/sound/direct_sound_samples/cries/lapras.wav differ
diff --git a/sound/direct_sound_samples/cries/larvitar.wav b/sound/direct_sound_samples/cries/larvitar.wav
index e0e22cd6f5..6ef5d45663 100644
Binary files a/sound/direct_sound_samples/cries/larvitar.wav and b/sound/direct_sound_samples/cries/larvitar.wav differ
diff --git a/sound/direct_sound_samples/cries/latias.wav b/sound/direct_sound_samples/cries/latias.wav
index 87e6205ada..dac6c463fd 100644
Binary files a/sound/direct_sound_samples/cries/latias.wav and b/sound/direct_sound_samples/cries/latias.wav differ
diff --git a/sound/direct_sound_samples/cries/latios.wav b/sound/direct_sound_samples/cries/latios.wav
index 1409dba11a..f07efb29fc 100644
Binary files a/sound/direct_sound_samples/cries/latios.wav and b/sound/direct_sound_samples/cries/latios.wav differ
diff --git a/sound/direct_sound_samples/cries/ledian.wav b/sound/direct_sound_samples/cries/ledian.wav
index 554829075d..075bb15f07 100644
Binary files a/sound/direct_sound_samples/cries/ledian.wav and b/sound/direct_sound_samples/cries/ledian.wav differ
diff --git a/sound/direct_sound_samples/cries/ledyba.wav b/sound/direct_sound_samples/cries/ledyba.wav
index e539c3d60a..95d9dff2e8 100644
Binary files a/sound/direct_sound_samples/cries/ledyba.wav and b/sound/direct_sound_samples/cries/ledyba.wav differ
diff --git a/sound/direct_sound_samples/cries/lickitung.wav b/sound/direct_sound_samples/cries/lickitung.wav
index 33a0ab5ff3..89808fd3dc 100644
Binary files a/sound/direct_sound_samples/cries/lickitung.wav and b/sound/direct_sound_samples/cries/lickitung.wav differ
diff --git a/sound/direct_sound_samples/cries/lileep.wav b/sound/direct_sound_samples/cries/lileep.wav
index f890086d37..5fd0ba803f 100644
Binary files a/sound/direct_sound_samples/cries/lileep.wav and b/sound/direct_sound_samples/cries/lileep.wav differ
diff --git a/sound/direct_sound_samples/cries/linoone.wav b/sound/direct_sound_samples/cries/linoone.wav
index b8c191bcd0..a182b4f329 100644
Binary files a/sound/direct_sound_samples/cries/linoone.wav and b/sound/direct_sound_samples/cries/linoone.wav differ
diff --git a/sound/direct_sound_samples/cries/lombre.wav b/sound/direct_sound_samples/cries/lombre.wav
index 6d7888619e..f7c36acddd 100644
Binary files a/sound/direct_sound_samples/cries/lombre.wav and b/sound/direct_sound_samples/cries/lombre.wav differ
diff --git a/sound/direct_sound_samples/cries/lotad.wav b/sound/direct_sound_samples/cries/lotad.wav
index 8e28b10f32..ee0cb6f69a 100644
Binary files a/sound/direct_sound_samples/cries/lotad.wav and b/sound/direct_sound_samples/cries/lotad.wav differ
diff --git a/sound/direct_sound_samples/cries/loudred.wav b/sound/direct_sound_samples/cries/loudred.wav
index ff8b2c8104..06495bf49c 100644
Binary files a/sound/direct_sound_samples/cries/loudred.wav and b/sound/direct_sound_samples/cries/loudred.wav differ
diff --git a/sound/direct_sound_samples/cries/ludicolo.wav b/sound/direct_sound_samples/cries/ludicolo.wav
index 420ac54595..fa300674f9 100644
Binary files a/sound/direct_sound_samples/cries/ludicolo.wav and b/sound/direct_sound_samples/cries/ludicolo.wav differ
diff --git a/sound/direct_sound_samples/cries/lugia.wav b/sound/direct_sound_samples/cries/lugia.wav
index 855920839e..1a1c46ef41 100644
Binary files a/sound/direct_sound_samples/cries/lugia.wav and b/sound/direct_sound_samples/cries/lugia.wav differ
diff --git a/sound/direct_sound_samples/cries/lunatone.wav b/sound/direct_sound_samples/cries/lunatone.wav
index 8edd9a17e1..afd9473b8f 100644
Binary files a/sound/direct_sound_samples/cries/lunatone.wav and b/sound/direct_sound_samples/cries/lunatone.wav differ
diff --git a/sound/direct_sound_samples/cries/luvdisc.wav b/sound/direct_sound_samples/cries/luvdisc.wav
index da1c84b80e..c4261d76ea 100644
Binary files a/sound/direct_sound_samples/cries/luvdisc.wav and b/sound/direct_sound_samples/cries/luvdisc.wav differ
diff --git a/sound/direct_sound_samples/cries/machamp.wav b/sound/direct_sound_samples/cries/machamp.wav
index b7e091dc72..9535dcbab7 100644
Binary files a/sound/direct_sound_samples/cries/machamp.wav and b/sound/direct_sound_samples/cries/machamp.wav differ
diff --git a/sound/direct_sound_samples/cries/machoke.wav b/sound/direct_sound_samples/cries/machoke.wav
index 5e0fc98bf1..de76612e35 100644
Binary files a/sound/direct_sound_samples/cries/machoke.wav and b/sound/direct_sound_samples/cries/machoke.wav differ
diff --git a/sound/direct_sound_samples/cries/machop.wav b/sound/direct_sound_samples/cries/machop.wav
index a34a0ccc80..2e5af3e55f 100644
Binary files a/sound/direct_sound_samples/cries/machop.wav and b/sound/direct_sound_samples/cries/machop.wav differ
diff --git a/sound/direct_sound_samples/cries/magby.wav b/sound/direct_sound_samples/cries/magby.wav
index 8b083206c2..c8129db69e 100644
Binary files a/sound/direct_sound_samples/cries/magby.wav and b/sound/direct_sound_samples/cries/magby.wav differ
diff --git a/sound/direct_sound_samples/cries/magcargo.wav b/sound/direct_sound_samples/cries/magcargo.wav
index 6d97b90c1b..1bdd97d3ba 100644
Binary files a/sound/direct_sound_samples/cries/magcargo.wav and b/sound/direct_sound_samples/cries/magcargo.wav differ
diff --git a/sound/direct_sound_samples/cries/magikarp.wav b/sound/direct_sound_samples/cries/magikarp.wav
index 6c665d9e75..115fa23f27 100644
Binary files a/sound/direct_sound_samples/cries/magikarp.wav and b/sound/direct_sound_samples/cries/magikarp.wav differ
diff --git a/sound/direct_sound_samples/cries/magmar.wav b/sound/direct_sound_samples/cries/magmar.wav
index 902c15bf2e..6a3621c3ca 100644
Binary files a/sound/direct_sound_samples/cries/magmar.wav and b/sound/direct_sound_samples/cries/magmar.wav differ
diff --git a/sound/direct_sound_samples/cries/magnemite.wav b/sound/direct_sound_samples/cries/magnemite.wav
index 4fdc93f296..7dd1d550b9 100644
Binary files a/sound/direct_sound_samples/cries/magnemite.wav and b/sound/direct_sound_samples/cries/magnemite.wav differ
diff --git a/sound/direct_sound_samples/cries/magneton.wav b/sound/direct_sound_samples/cries/magneton.wav
index d69c276443..12513343d8 100644
Binary files a/sound/direct_sound_samples/cries/magneton.wav and b/sound/direct_sound_samples/cries/magneton.wav differ
diff --git a/sound/direct_sound_samples/cries/makuhita.wav b/sound/direct_sound_samples/cries/makuhita.wav
index 79b055ef98..6df74f2c11 100644
Binary files a/sound/direct_sound_samples/cries/makuhita.wav and b/sound/direct_sound_samples/cries/makuhita.wav differ
diff --git a/sound/direct_sound_samples/cries/manectric.wav b/sound/direct_sound_samples/cries/manectric.wav
index 939fc16093..db806c46af 100644
Binary files a/sound/direct_sound_samples/cries/manectric.wav and b/sound/direct_sound_samples/cries/manectric.wav differ
diff --git a/sound/direct_sound_samples/cries/mankey.wav b/sound/direct_sound_samples/cries/mankey.wav
index ab15ac9af6..9cf9f48668 100644
Binary files a/sound/direct_sound_samples/cries/mankey.wav and b/sound/direct_sound_samples/cries/mankey.wav differ
diff --git a/sound/direct_sound_samples/cries/mantine.wav b/sound/direct_sound_samples/cries/mantine.wav
index 919242e8fe..bc6f17e5e4 100644
Binary files a/sound/direct_sound_samples/cries/mantine.wav and b/sound/direct_sound_samples/cries/mantine.wav differ
diff --git a/sound/direct_sound_samples/cries/mareep.wav b/sound/direct_sound_samples/cries/mareep.wav
index 386925f5d5..b0a523d7d7 100644
Binary files a/sound/direct_sound_samples/cries/mareep.wav and b/sound/direct_sound_samples/cries/mareep.wav differ
diff --git a/sound/direct_sound_samples/cries/marill.wav b/sound/direct_sound_samples/cries/marill.wav
index 93201d1c51..8842fb0183 100644
Binary files a/sound/direct_sound_samples/cries/marill.wav and b/sound/direct_sound_samples/cries/marill.wav differ
diff --git a/sound/direct_sound_samples/cries/marowak.wav b/sound/direct_sound_samples/cries/marowak.wav
index 7bddb4b347..6701514d21 100644
Binary files a/sound/direct_sound_samples/cries/marowak.wav and b/sound/direct_sound_samples/cries/marowak.wav differ
diff --git a/sound/direct_sound_samples/cries/marshtomp.wav b/sound/direct_sound_samples/cries/marshtomp.wav
index 0caa959e29..ed906f7d1a 100644
Binary files a/sound/direct_sound_samples/cries/marshtomp.wav and b/sound/direct_sound_samples/cries/marshtomp.wav differ
diff --git a/sound/direct_sound_samples/cries/masquerain.wav b/sound/direct_sound_samples/cries/masquerain.wav
index b0c5372ae3..d7f5c700a3 100644
Binary files a/sound/direct_sound_samples/cries/masquerain.wav and b/sound/direct_sound_samples/cries/masquerain.wav differ
diff --git a/sound/direct_sound_samples/cries/mawile.wav b/sound/direct_sound_samples/cries/mawile.wav
index 9c54d40a48..bf0eb2e0a3 100644
Binary files a/sound/direct_sound_samples/cries/mawile.wav and b/sound/direct_sound_samples/cries/mawile.wav differ
diff --git a/sound/direct_sound_samples/cries/medicham.wav b/sound/direct_sound_samples/cries/medicham.wav
index be3668b173..e0853bfa77 100644
Binary files a/sound/direct_sound_samples/cries/medicham.wav and b/sound/direct_sound_samples/cries/medicham.wav differ
diff --git a/sound/direct_sound_samples/cries/meditite.wav b/sound/direct_sound_samples/cries/meditite.wav
index 23db4f297f..08675830b5 100644
Binary files a/sound/direct_sound_samples/cries/meditite.wav and b/sound/direct_sound_samples/cries/meditite.wav differ
diff --git a/sound/direct_sound_samples/cries/meganium.wav b/sound/direct_sound_samples/cries/meganium.wav
index 8f7920e937..2aaf870343 100644
Binary files a/sound/direct_sound_samples/cries/meganium.wav and b/sound/direct_sound_samples/cries/meganium.wav differ
diff --git a/sound/direct_sound_samples/cries/meowth.wav b/sound/direct_sound_samples/cries/meowth.wav
index bebca1c27e..a3b97ff953 100644
Binary files a/sound/direct_sound_samples/cries/meowth.wav and b/sound/direct_sound_samples/cries/meowth.wav differ
diff --git a/sound/direct_sound_samples/cries/metagross.wav b/sound/direct_sound_samples/cries/metagross.wav
index 5112b3afa8..35aa032c40 100644
Binary files a/sound/direct_sound_samples/cries/metagross.wav and b/sound/direct_sound_samples/cries/metagross.wav differ
diff --git a/sound/direct_sound_samples/cries/metang.wav b/sound/direct_sound_samples/cries/metang.wav
index 700759d207..d9203a3301 100644
Binary files a/sound/direct_sound_samples/cries/metang.wav and b/sound/direct_sound_samples/cries/metang.wav differ
diff --git a/sound/direct_sound_samples/cries/metapod.wav b/sound/direct_sound_samples/cries/metapod.wav
index 6df3b6aefb..1ef8849fce 100644
Binary files a/sound/direct_sound_samples/cries/metapod.wav and b/sound/direct_sound_samples/cries/metapod.wav differ
diff --git a/sound/direct_sound_samples/cries/mew.wav b/sound/direct_sound_samples/cries/mew.wav
index e75fa95f35..067c71b85e 100644
Binary files a/sound/direct_sound_samples/cries/mew.wav and b/sound/direct_sound_samples/cries/mew.wav differ
diff --git a/sound/direct_sound_samples/cries/mewtwo.wav b/sound/direct_sound_samples/cries/mewtwo.wav
index 947984f672..554564c041 100644
Binary files a/sound/direct_sound_samples/cries/mewtwo.wav and b/sound/direct_sound_samples/cries/mewtwo.wav differ
diff --git a/sound/direct_sound_samples/cries/mightyena.wav b/sound/direct_sound_samples/cries/mightyena.wav
index 0149976e2b..4c818b12b7 100644
Binary files a/sound/direct_sound_samples/cries/mightyena.wav and b/sound/direct_sound_samples/cries/mightyena.wav differ
diff --git a/sound/direct_sound_samples/cries/milotic.wav b/sound/direct_sound_samples/cries/milotic.wav
index 20db44692f..016657130f 100644
Binary files a/sound/direct_sound_samples/cries/milotic.wav and b/sound/direct_sound_samples/cries/milotic.wav differ
diff --git a/sound/direct_sound_samples/cries/miltank.wav b/sound/direct_sound_samples/cries/miltank.wav
index 5f51f525bb..949fd2812b 100644
Binary files a/sound/direct_sound_samples/cries/miltank.wav and b/sound/direct_sound_samples/cries/miltank.wav differ
diff --git a/sound/direct_sound_samples/cries/minun.wav b/sound/direct_sound_samples/cries/minun.wav
index 9e9a62f7e8..80d608c673 100644
Binary files a/sound/direct_sound_samples/cries/minun.wav and b/sound/direct_sound_samples/cries/minun.wav differ
diff --git a/sound/direct_sound_samples/cries/misdreavus.wav b/sound/direct_sound_samples/cries/misdreavus.wav
index f632986da9..cce18c27bb 100644
Binary files a/sound/direct_sound_samples/cries/misdreavus.wav and b/sound/direct_sound_samples/cries/misdreavus.wav differ
diff --git a/sound/direct_sound_samples/cries/moltres.wav b/sound/direct_sound_samples/cries/moltres.wav
index 7173a8cad4..c9c65b334d 100644
Binary files a/sound/direct_sound_samples/cries/moltres.wav and b/sound/direct_sound_samples/cries/moltres.wav differ
diff --git a/sound/direct_sound_samples/cries/mr_mime.wav b/sound/direct_sound_samples/cries/mr_mime.wav
index 23cf310532..a8121159bc 100644
Binary files a/sound/direct_sound_samples/cries/mr_mime.wav and b/sound/direct_sound_samples/cries/mr_mime.wav differ
diff --git a/sound/direct_sound_samples/cries/mudkip.wav b/sound/direct_sound_samples/cries/mudkip.wav
index c965efe30c..bcb613e41c 100644
Binary files a/sound/direct_sound_samples/cries/mudkip.wav and b/sound/direct_sound_samples/cries/mudkip.wav differ
diff --git a/sound/direct_sound_samples/cries/muk.wav b/sound/direct_sound_samples/cries/muk.wav
index 27cd6bdeb1..3cb2813826 100644
Binary files a/sound/direct_sound_samples/cries/muk.wav and b/sound/direct_sound_samples/cries/muk.wav differ
diff --git a/sound/direct_sound_samples/cries/murkrow.wav b/sound/direct_sound_samples/cries/murkrow.wav
index 5da336fa90..1ba1f55149 100644
Binary files a/sound/direct_sound_samples/cries/murkrow.wav and b/sound/direct_sound_samples/cries/murkrow.wav differ
diff --git a/sound/direct_sound_samples/cries/natu.wav b/sound/direct_sound_samples/cries/natu.wav
index 4a2c853178..3cf1fc15ba 100644
Binary files a/sound/direct_sound_samples/cries/natu.wav and b/sound/direct_sound_samples/cries/natu.wav differ
diff --git a/sound/direct_sound_samples/cries/nidoking.wav b/sound/direct_sound_samples/cries/nidoking.wav
index 556b20bdac..4a068c9092 100644
Binary files a/sound/direct_sound_samples/cries/nidoking.wav and b/sound/direct_sound_samples/cries/nidoking.wav differ
diff --git a/sound/direct_sound_samples/cries/nidoqueen.wav b/sound/direct_sound_samples/cries/nidoqueen.wav
index 7c23623a17..2835f1b366 100644
Binary files a/sound/direct_sound_samples/cries/nidoqueen.wav and b/sound/direct_sound_samples/cries/nidoqueen.wav differ
diff --git a/sound/direct_sound_samples/cries/nidoran_f.wav b/sound/direct_sound_samples/cries/nidoran_f.wav
index 2997c2b579..3d50a69174 100644
Binary files a/sound/direct_sound_samples/cries/nidoran_f.wav and b/sound/direct_sound_samples/cries/nidoran_f.wav differ
diff --git a/sound/direct_sound_samples/cries/nidoran_m.wav b/sound/direct_sound_samples/cries/nidoran_m.wav
index 160ab71e7f..94fcf0e5bd 100644
Binary files a/sound/direct_sound_samples/cries/nidoran_m.wav and b/sound/direct_sound_samples/cries/nidoran_m.wav differ
diff --git a/sound/direct_sound_samples/cries/nidorina.wav b/sound/direct_sound_samples/cries/nidorina.wav
index a46c416701..a2e1aa9d63 100644
Binary files a/sound/direct_sound_samples/cries/nidorina.wav and b/sound/direct_sound_samples/cries/nidorina.wav differ
diff --git a/sound/direct_sound_samples/cries/nidorino.wav b/sound/direct_sound_samples/cries/nidorino.wav
index 38db59c2f1..f4dea729c2 100644
Binary files a/sound/direct_sound_samples/cries/nidorino.wav and b/sound/direct_sound_samples/cries/nidorino.wav differ
diff --git a/sound/direct_sound_samples/cries/nincada.wav b/sound/direct_sound_samples/cries/nincada.wav
index dd5feb818d..ec9b888583 100644
Binary files a/sound/direct_sound_samples/cries/nincada.wav and b/sound/direct_sound_samples/cries/nincada.wav differ
diff --git a/sound/direct_sound_samples/cries/ninetales.wav b/sound/direct_sound_samples/cries/ninetales.wav
index f84b874364..0e5939ed20 100644
Binary files a/sound/direct_sound_samples/cries/ninetales.wav and b/sound/direct_sound_samples/cries/ninetales.wav differ
diff --git a/sound/direct_sound_samples/cries/ninjask.wav b/sound/direct_sound_samples/cries/ninjask.wav
index b61f4d37f5..20b496bc32 100644
Binary files a/sound/direct_sound_samples/cries/ninjask.wav and b/sound/direct_sound_samples/cries/ninjask.wav differ
diff --git a/sound/direct_sound_samples/cries/noctowl.wav b/sound/direct_sound_samples/cries/noctowl.wav
index ab705b6f2c..64f38a0443 100644
Binary files a/sound/direct_sound_samples/cries/noctowl.wav and b/sound/direct_sound_samples/cries/noctowl.wav differ
diff --git a/sound/direct_sound_samples/cries/nosepass.wav b/sound/direct_sound_samples/cries/nosepass.wav
index 1e15fb10d3..996cfbe7d7 100644
Binary files a/sound/direct_sound_samples/cries/nosepass.wav and b/sound/direct_sound_samples/cries/nosepass.wav differ
diff --git a/sound/direct_sound_samples/cries/numel.wav b/sound/direct_sound_samples/cries/numel.wav
index 2d2d16f021..a0ae3ebd82 100644
Binary files a/sound/direct_sound_samples/cries/numel.wav and b/sound/direct_sound_samples/cries/numel.wav differ
diff --git a/sound/direct_sound_samples/cries/nuzleaf.wav b/sound/direct_sound_samples/cries/nuzleaf.wav
index 5efb6e8068..60d0809efb 100644
Binary files a/sound/direct_sound_samples/cries/nuzleaf.wav and b/sound/direct_sound_samples/cries/nuzleaf.wav differ
diff --git a/sound/direct_sound_samples/cries/octillery.wav b/sound/direct_sound_samples/cries/octillery.wav
index 190d42c674..11bc1361d4 100644
Binary files a/sound/direct_sound_samples/cries/octillery.wav and b/sound/direct_sound_samples/cries/octillery.wav differ
diff --git a/sound/direct_sound_samples/cries/oddish.wav b/sound/direct_sound_samples/cries/oddish.wav
index de6855d369..bffae4bcf5 100644
Binary files a/sound/direct_sound_samples/cries/oddish.wav and b/sound/direct_sound_samples/cries/oddish.wav differ
diff --git a/sound/direct_sound_samples/cries/omanyte.wav b/sound/direct_sound_samples/cries/omanyte.wav
index 3db237ac3f..46e47b0a2f 100644
Binary files a/sound/direct_sound_samples/cries/omanyte.wav and b/sound/direct_sound_samples/cries/omanyte.wav differ
diff --git a/sound/direct_sound_samples/cries/omastar.wav b/sound/direct_sound_samples/cries/omastar.wav
index 69a4ea868f..021355da9e 100644
Binary files a/sound/direct_sound_samples/cries/omastar.wav and b/sound/direct_sound_samples/cries/omastar.wav differ
diff --git a/sound/direct_sound_samples/cries/onix.wav b/sound/direct_sound_samples/cries/onix.wav
index 57da601410..f0dd1f45e0 100644
Binary files a/sound/direct_sound_samples/cries/onix.wav and b/sound/direct_sound_samples/cries/onix.wav differ
diff --git a/sound/direct_sound_samples/cries/paras.wav b/sound/direct_sound_samples/cries/paras.wav
index ba4a051c9f..27101a52f1 100644
Binary files a/sound/direct_sound_samples/cries/paras.wav and b/sound/direct_sound_samples/cries/paras.wav differ
diff --git a/sound/direct_sound_samples/cries/parasect.wav b/sound/direct_sound_samples/cries/parasect.wav
index 5ff6ac2907..909803da7c 100644
Binary files a/sound/direct_sound_samples/cries/parasect.wav and b/sound/direct_sound_samples/cries/parasect.wav differ
diff --git a/sound/direct_sound_samples/cries/pelipper.wav b/sound/direct_sound_samples/cries/pelipper.wav
index 665dbcac9e..5af1e79984 100644
Binary files a/sound/direct_sound_samples/cries/pelipper.wav and b/sound/direct_sound_samples/cries/pelipper.wav differ
diff --git a/sound/direct_sound_samples/cries/persian.wav b/sound/direct_sound_samples/cries/persian.wav
index 96acf8296c..890089a511 100644
Binary files a/sound/direct_sound_samples/cries/persian.wav and b/sound/direct_sound_samples/cries/persian.wav differ
diff --git a/sound/direct_sound_samples/cries/phanpy.wav b/sound/direct_sound_samples/cries/phanpy.wav
index 4de13cafe1..dcd6793429 100644
Binary files a/sound/direct_sound_samples/cries/phanpy.wav and b/sound/direct_sound_samples/cries/phanpy.wav differ
diff --git a/sound/direct_sound_samples/cries/pichu.wav b/sound/direct_sound_samples/cries/pichu.wav
index d325103719..cfbbb6adb6 100644
Binary files a/sound/direct_sound_samples/cries/pichu.wav and b/sound/direct_sound_samples/cries/pichu.wav differ
diff --git a/sound/direct_sound_samples/cries/pidgeot.wav b/sound/direct_sound_samples/cries/pidgeot.wav
index f93ed99656..d56e2e5597 100644
Binary files a/sound/direct_sound_samples/cries/pidgeot.wav and b/sound/direct_sound_samples/cries/pidgeot.wav differ
diff --git a/sound/direct_sound_samples/cries/pidgeotto.wav b/sound/direct_sound_samples/cries/pidgeotto.wav
index 8b40a41e99..b8d075754c 100644
Binary files a/sound/direct_sound_samples/cries/pidgeotto.wav and b/sound/direct_sound_samples/cries/pidgeotto.wav differ
diff --git a/sound/direct_sound_samples/cries/pidgey.wav b/sound/direct_sound_samples/cries/pidgey.wav
index 34a1d1bd6a..5b58ae59bf 100644
Binary files a/sound/direct_sound_samples/cries/pidgey.wav and b/sound/direct_sound_samples/cries/pidgey.wav differ
diff --git a/sound/direct_sound_samples/cries/pikachu.wav b/sound/direct_sound_samples/cries/pikachu.wav
index d5f68416f2..dc1d354c87 100644
Binary files a/sound/direct_sound_samples/cries/pikachu.wav and b/sound/direct_sound_samples/cries/pikachu.wav differ
diff --git a/sound/direct_sound_samples/cries/piloswine.wav b/sound/direct_sound_samples/cries/piloswine.wav
index 4f181b7ec6..f28be1f9b6 100644
Binary files a/sound/direct_sound_samples/cries/piloswine.wav and b/sound/direct_sound_samples/cries/piloswine.wav differ
diff --git a/sound/direct_sound_samples/cries/pineco.wav b/sound/direct_sound_samples/cries/pineco.wav
index 70d841b9e5..cfaf5b9eee 100644
Binary files a/sound/direct_sound_samples/cries/pineco.wav and b/sound/direct_sound_samples/cries/pineco.wav differ
diff --git a/sound/direct_sound_samples/cries/pinsir.wav b/sound/direct_sound_samples/cries/pinsir.wav
index 3d3dcc7929..76ac8fa157 100644
Binary files a/sound/direct_sound_samples/cries/pinsir.wav and b/sound/direct_sound_samples/cries/pinsir.wav differ
diff --git a/sound/direct_sound_samples/cries/plusle.wav b/sound/direct_sound_samples/cries/plusle.wav
index 1b3cf87497..dcbe5fdd06 100644
Binary files a/sound/direct_sound_samples/cries/plusle.wav and b/sound/direct_sound_samples/cries/plusle.wav differ
diff --git a/sound/direct_sound_samples/cries/politoed.wav b/sound/direct_sound_samples/cries/politoed.wav
index 6472a08f55..9a90e1785a 100644
Binary files a/sound/direct_sound_samples/cries/politoed.wav and b/sound/direct_sound_samples/cries/politoed.wav differ
diff --git a/sound/direct_sound_samples/cries/poliwag.wav b/sound/direct_sound_samples/cries/poliwag.wav
index d35c8f4d8f..64fe686c93 100644
Binary files a/sound/direct_sound_samples/cries/poliwag.wav and b/sound/direct_sound_samples/cries/poliwag.wav differ
diff --git a/sound/direct_sound_samples/cries/poliwhirl.wav b/sound/direct_sound_samples/cries/poliwhirl.wav
index 0c59fbed64..924bb457cd 100644
Binary files a/sound/direct_sound_samples/cries/poliwhirl.wav and b/sound/direct_sound_samples/cries/poliwhirl.wav differ
diff --git a/sound/direct_sound_samples/cries/poliwrath.wav b/sound/direct_sound_samples/cries/poliwrath.wav
index c32bd44859..93afcf2b65 100644
Binary files a/sound/direct_sound_samples/cries/poliwrath.wav and b/sound/direct_sound_samples/cries/poliwrath.wav differ
diff --git a/sound/direct_sound_samples/cries/ponyta.wav b/sound/direct_sound_samples/cries/ponyta.wav
index 911954226d..bfa5b06ef3 100644
Binary files a/sound/direct_sound_samples/cries/ponyta.wav and b/sound/direct_sound_samples/cries/ponyta.wav differ
diff --git a/sound/direct_sound_samples/cries/poochyena.wav b/sound/direct_sound_samples/cries/poochyena.wav
index 16cabc29c6..8d46225c5f 100644
Binary files a/sound/direct_sound_samples/cries/poochyena.wav and b/sound/direct_sound_samples/cries/poochyena.wav differ
diff --git a/sound/direct_sound_samples/cries/porygon.wav b/sound/direct_sound_samples/cries/porygon.wav
index 11dd528dda..48c43c2db7 100644
Binary files a/sound/direct_sound_samples/cries/porygon.wav and b/sound/direct_sound_samples/cries/porygon.wav differ
diff --git a/sound/direct_sound_samples/cries/porygon2.wav b/sound/direct_sound_samples/cries/porygon2.wav
index 5699d8e450..965c1b7039 100644
Binary files a/sound/direct_sound_samples/cries/porygon2.wav and b/sound/direct_sound_samples/cries/porygon2.wav differ
diff --git a/sound/direct_sound_samples/cries/primeape.wav b/sound/direct_sound_samples/cries/primeape.wav
index bcd98e6bb4..146e924075 100644
Binary files a/sound/direct_sound_samples/cries/primeape.wav and b/sound/direct_sound_samples/cries/primeape.wav differ
diff --git a/sound/direct_sound_samples/cries/psyduck.wav b/sound/direct_sound_samples/cries/psyduck.wav
index bdc0d673e3..7b1a76da7a 100644
Binary files a/sound/direct_sound_samples/cries/psyduck.wav and b/sound/direct_sound_samples/cries/psyduck.wav differ
diff --git a/sound/direct_sound_samples/cries/pupitar.wav b/sound/direct_sound_samples/cries/pupitar.wav
index 5e797d420f..7768967293 100644
Binary files a/sound/direct_sound_samples/cries/pupitar.wav and b/sound/direct_sound_samples/cries/pupitar.wav differ
diff --git a/sound/direct_sound_samples/cries/quagsire.wav b/sound/direct_sound_samples/cries/quagsire.wav
index e4a8c0aad3..116c1bdf47 100644
Binary files a/sound/direct_sound_samples/cries/quagsire.wav and b/sound/direct_sound_samples/cries/quagsire.wav differ
diff --git a/sound/direct_sound_samples/cries/quilava.wav b/sound/direct_sound_samples/cries/quilava.wav
index ef0bd7381f..5b44632ece 100644
Binary files a/sound/direct_sound_samples/cries/quilava.wav and b/sound/direct_sound_samples/cries/quilava.wav differ
diff --git a/sound/direct_sound_samples/cries/qwilfish.wav b/sound/direct_sound_samples/cries/qwilfish.wav
index 0b11276dec..1f857d2c26 100644
Binary files a/sound/direct_sound_samples/cries/qwilfish.wav and b/sound/direct_sound_samples/cries/qwilfish.wav differ
diff --git a/sound/direct_sound_samples/cries/raichu.wav b/sound/direct_sound_samples/cries/raichu.wav
index 4e5dbaeb40..7b93bb5a3d 100644
Binary files a/sound/direct_sound_samples/cries/raichu.wav and b/sound/direct_sound_samples/cries/raichu.wav differ
diff --git a/sound/direct_sound_samples/cries/raikou.wav b/sound/direct_sound_samples/cries/raikou.wav
index fefeb1e3a5..35757a0ac8 100644
Binary files a/sound/direct_sound_samples/cries/raikou.wav and b/sound/direct_sound_samples/cries/raikou.wav differ
diff --git a/sound/direct_sound_samples/cries/ralts.wav b/sound/direct_sound_samples/cries/ralts.wav
index 4327c13a12..37948dc494 100644
Binary files a/sound/direct_sound_samples/cries/ralts.wav and b/sound/direct_sound_samples/cries/ralts.wav differ
diff --git a/sound/direct_sound_samples/cries/rapidash.wav b/sound/direct_sound_samples/cries/rapidash.wav
index 14ce75be75..953acc4504 100644
Binary files a/sound/direct_sound_samples/cries/rapidash.wav and b/sound/direct_sound_samples/cries/rapidash.wav differ
diff --git a/sound/direct_sound_samples/cries/raticate.wav b/sound/direct_sound_samples/cries/raticate.wav
index 545ebfcf12..bbef0c0af9 100644
Binary files a/sound/direct_sound_samples/cries/raticate.wav and b/sound/direct_sound_samples/cries/raticate.wav differ
diff --git a/sound/direct_sound_samples/cries/rattata.wav b/sound/direct_sound_samples/cries/rattata.wav
index 9e7a6b3cf6..951c3bd8a1 100644
Binary files a/sound/direct_sound_samples/cries/rattata.wav and b/sound/direct_sound_samples/cries/rattata.wav differ
diff --git a/sound/direct_sound_samples/cries/rayquaza.wav b/sound/direct_sound_samples/cries/rayquaza.wav
index c4e50535fc..94c4f7c014 100644
Binary files a/sound/direct_sound_samples/cries/rayquaza.wav and b/sound/direct_sound_samples/cries/rayquaza.wav differ
diff --git a/sound/direct_sound_samples/cries/regice.wav b/sound/direct_sound_samples/cries/regice.wav
index b65a79b4d4..8a2bfe7424 100644
Binary files a/sound/direct_sound_samples/cries/regice.wav and b/sound/direct_sound_samples/cries/regice.wav differ
diff --git a/sound/direct_sound_samples/cries/regirock.wav b/sound/direct_sound_samples/cries/regirock.wav
index 0df3c1a720..271b91f31d 100644
Binary files a/sound/direct_sound_samples/cries/regirock.wav and b/sound/direct_sound_samples/cries/regirock.wav differ
diff --git a/sound/direct_sound_samples/cries/registeel.wav b/sound/direct_sound_samples/cries/registeel.wav
index 0e2b21beb2..8bab7591fe 100644
Binary files a/sound/direct_sound_samples/cries/registeel.wav and b/sound/direct_sound_samples/cries/registeel.wav differ
diff --git a/sound/direct_sound_samples/cries/relicanth.wav b/sound/direct_sound_samples/cries/relicanth.wav
index 1a8c04473c..8561780d64 100644
Binary files a/sound/direct_sound_samples/cries/relicanth.wav and b/sound/direct_sound_samples/cries/relicanth.wav differ
diff --git a/sound/direct_sound_samples/cries/remoraid.wav b/sound/direct_sound_samples/cries/remoraid.wav
index 0465e033f1..ebab789ad3 100644
Binary files a/sound/direct_sound_samples/cries/remoraid.wav and b/sound/direct_sound_samples/cries/remoraid.wav differ
diff --git a/sound/direct_sound_samples/cries/rhydon.wav b/sound/direct_sound_samples/cries/rhydon.wav
index e4f024f312..2c3907c91e 100644
Binary files a/sound/direct_sound_samples/cries/rhydon.wav and b/sound/direct_sound_samples/cries/rhydon.wav differ
diff --git a/sound/direct_sound_samples/cries/rhyhorn.wav b/sound/direct_sound_samples/cries/rhyhorn.wav
index 10c6841f43..8583759915 100644
Binary files a/sound/direct_sound_samples/cries/rhyhorn.wav and b/sound/direct_sound_samples/cries/rhyhorn.wav differ
diff --git a/sound/direct_sound_samples/cries/roselia.wav b/sound/direct_sound_samples/cries/roselia.wav
index cd01f19f68..f9c67fae1f 100644
Binary files a/sound/direct_sound_samples/cries/roselia.wav and b/sound/direct_sound_samples/cries/roselia.wav differ
diff --git a/sound/direct_sound_samples/cries/sableye.wav b/sound/direct_sound_samples/cries/sableye.wav
index 9f32fbdd60..a1458cadc8 100644
Binary files a/sound/direct_sound_samples/cries/sableye.wav and b/sound/direct_sound_samples/cries/sableye.wav differ
diff --git a/sound/direct_sound_samples/cries/salamence.wav b/sound/direct_sound_samples/cries/salamence.wav
index 1c426adfad..135d90ecdc 100644
Binary files a/sound/direct_sound_samples/cries/salamence.wav and b/sound/direct_sound_samples/cries/salamence.wav differ
diff --git a/sound/direct_sound_samples/cries/sandshrew.wav b/sound/direct_sound_samples/cries/sandshrew.wav
index 8c324ed3d6..94f98193d1 100644
Binary files a/sound/direct_sound_samples/cries/sandshrew.wav and b/sound/direct_sound_samples/cries/sandshrew.wav differ
diff --git a/sound/direct_sound_samples/cries/sandslash.wav b/sound/direct_sound_samples/cries/sandslash.wav
index 95bcdb8698..ba3e29e083 100644
Binary files a/sound/direct_sound_samples/cries/sandslash.wav and b/sound/direct_sound_samples/cries/sandslash.wav differ
diff --git a/sound/direct_sound_samples/cries/sceptile.wav b/sound/direct_sound_samples/cries/sceptile.wav
index 32673bc773..5ff4d51010 100644
Binary files a/sound/direct_sound_samples/cries/sceptile.wav and b/sound/direct_sound_samples/cries/sceptile.wav differ
diff --git a/sound/direct_sound_samples/cries/scizor.wav b/sound/direct_sound_samples/cries/scizor.wav
index 8196df16b2..bc37f521c9 100644
Binary files a/sound/direct_sound_samples/cries/scizor.wav and b/sound/direct_sound_samples/cries/scizor.wav differ
diff --git a/sound/direct_sound_samples/cries/scyther.wav b/sound/direct_sound_samples/cries/scyther.wav
index 5b6ba415a1..021a6e0170 100644
Binary files a/sound/direct_sound_samples/cries/scyther.wav and b/sound/direct_sound_samples/cries/scyther.wav differ
diff --git a/sound/direct_sound_samples/cries/seadra.wav b/sound/direct_sound_samples/cries/seadra.wav
index c68a68a196..84c6ad7c76 100644
Binary files a/sound/direct_sound_samples/cries/seadra.wav and b/sound/direct_sound_samples/cries/seadra.wav differ
diff --git a/sound/direct_sound_samples/cries/seaking.wav b/sound/direct_sound_samples/cries/seaking.wav
index 6f2533e946..0534a12eda 100644
Binary files a/sound/direct_sound_samples/cries/seaking.wav and b/sound/direct_sound_samples/cries/seaking.wav differ
diff --git a/sound/direct_sound_samples/cries/sealeo.wav b/sound/direct_sound_samples/cries/sealeo.wav
index ad01a5fed3..744ab73901 100644
Binary files a/sound/direct_sound_samples/cries/sealeo.wav and b/sound/direct_sound_samples/cries/sealeo.wav differ
diff --git a/sound/direct_sound_samples/cries/seedot.wav b/sound/direct_sound_samples/cries/seedot.wav
index b4d74f65d6..367104936a 100644
Binary files a/sound/direct_sound_samples/cries/seedot.wav and b/sound/direct_sound_samples/cries/seedot.wav differ
diff --git a/sound/direct_sound_samples/cries/seel.wav b/sound/direct_sound_samples/cries/seel.wav
index 6e252b375a..95e027d5e8 100644
Binary files a/sound/direct_sound_samples/cries/seel.wav and b/sound/direct_sound_samples/cries/seel.wav differ
diff --git a/sound/direct_sound_samples/cries/sentret.wav b/sound/direct_sound_samples/cries/sentret.wav
index 0c6746c456..c7e1bb8a65 100644
Binary files a/sound/direct_sound_samples/cries/sentret.wav and b/sound/direct_sound_samples/cries/sentret.wav differ
diff --git a/sound/direct_sound_samples/cries/seviper.wav b/sound/direct_sound_samples/cries/seviper.wav
index b467378f4c..73529d9c1c 100644
Binary files a/sound/direct_sound_samples/cries/seviper.wav and b/sound/direct_sound_samples/cries/seviper.wav differ
diff --git a/sound/direct_sound_samples/cries/sharpedo.wav b/sound/direct_sound_samples/cries/sharpedo.wav
index 26c52b43c3..7f773d4fbb 100644
Binary files a/sound/direct_sound_samples/cries/sharpedo.wav and b/sound/direct_sound_samples/cries/sharpedo.wav differ
diff --git a/sound/direct_sound_samples/cries/shedinja.wav b/sound/direct_sound_samples/cries/shedinja.wav
index 956ae0be9f..6dda64b5d3 100644
Binary files a/sound/direct_sound_samples/cries/shedinja.wav and b/sound/direct_sound_samples/cries/shedinja.wav differ
diff --git a/sound/direct_sound_samples/cries/shelgon.wav b/sound/direct_sound_samples/cries/shelgon.wav
index 7648d06f9a..85ed3939c2 100644
Binary files a/sound/direct_sound_samples/cries/shelgon.wav and b/sound/direct_sound_samples/cries/shelgon.wav differ
diff --git a/sound/direct_sound_samples/cries/shellder.wav b/sound/direct_sound_samples/cries/shellder.wav
index 1fe4367d78..5c38501ba1 100644
Binary files a/sound/direct_sound_samples/cries/shellder.wav and b/sound/direct_sound_samples/cries/shellder.wav differ
diff --git a/sound/direct_sound_samples/cries/shiftry.wav b/sound/direct_sound_samples/cries/shiftry.wav
index 533115f404..dbba7208b9 100644
Binary files a/sound/direct_sound_samples/cries/shiftry.wav and b/sound/direct_sound_samples/cries/shiftry.wav differ
diff --git a/sound/direct_sound_samples/cries/shroomish.wav b/sound/direct_sound_samples/cries/shroomish.wav
index 07658c8801..05fa696706 100644
Binary files a/sound/direct_sound_samples/cries/shroomish.wav and b/sound/direct_sound_samples/cries/shroomish.wav differ
diff --git a/sound/direct_sound_samples/cries/shuckle.wav b/sound/direct_sound_samples/cries/shuckle.wav
index bb196dbfe9..afc303e4d8 100644
Binary files a/sound/direct_sound_samples/cries/shuckle.wav and b/sound/direct_sound_samples/cries/shuckle.wav differ
diff --git a/sound/direct_sound_samples/cries/shuppet.wav b/sound/direct_sound_samples/cries/shuppet.wav
index 6b043a2772..da206414c4 100644
Binary files a/sound/direct_sound_samples/cries/shuppet.wav and b/sound/direct_sound_samples/cries/shuppet.wav differ
diff --git a/sound/direct_sound_samples/cries/silcoon.wav b/sound/direct_sound_samples/cries/silcoon.wav
index 15827329e4..e5af66fbc2 100644
Binary files a/sound/direct_sound_samples/cries/silcoon.wav and b/sound/direct_sound_samples/cries/silcoon.wav differ
diff --git a/sound/direct_sound_samples/cries/skarmory.wav b/sound/direct_sound_samples/cries/skarmory.wav
index 2924973023..7062c9813d 100644
Binary files a/sound/direct_sound_samples/cries/skarmory.wav and b/sound/direct_sound_samples/cries/skarmory.wav differ
diff --git a/sound/direct_sound_samples/cries/skiploom.wav b/sound/direct_sound_samples/cries/skiploom.wav
index 30f9c26662..8aa05f5b7e 100644
Binary files a/sound/direct_sound_samples/cries/skiploom.wav and b/sound/direct_sound_samples/cries/skiploom.wav differ
diff --git a/sound/direct_sound_samples/cries/skitty.wav b/sound/direct_sound_samples/cries/skitty.wav
index 02aaa4fcbd..ee5717d07c 100644
Binary files a/sound/direct_sound_samples/cries/skitty.wav and b/sound/direct_sound_samples/cries/skitty.wav differ
diff --git a/sound/direct_sound_samples/cries/slaking.wav b/sound/direct_sound_samples/cries/slaking.wav
index ef34d94d69..44681126d4 100644
Binary files a/sound/direct_sound_samples/cries/slaking.wav and b/sound/direct_sound_samples/cries/slaking.wav differ
diff --git a/sound/direct_sound_samples/cries/slakoth.wav b/sound/direct_sound_samples/cries/slakoth.wav
index d4588b3a21..4c442f9c14 100644
Binary files a/sound/direct_sound_samples/cries/slakoth.wav and b/sound/direct_sound_samples/cries/slakoth.wav differ
diff --git a/sound/direct_sound_samples/cries/slowbro.wav b/sound/direct_sound_samples/cries/slowbro.wav
index fe03ab4cdd..c46e751f51 100644
Binary files a/sound/direct_sound_samples/cries/slowbro.wav and b/sound/direct_sound_samples/cries/slowbro.wav differ
diff --git a/sound/direct_sound_samples/cries/slowking.wav b/sound/direct_sound_samples/cries/slowking.wav
index f802796282..a32fea33df 100644
Binary files a/sound/direct_sound_samples/cries/slowking.wav and b/sound/direct_sound_samples/cries/slowking.wav differ
diff --git a/sound/direct_sound_samples/cries/slowpoke.wav b/sound/direct_sound_samples/cries/slowpoke.wav
index b3a45bef0a..275c2d9da1 100644
Binary files a/sound/direct_sound_samples/cries/slowpoke.wav and b/sound/direct_sound_samples/cries/slowpoke.wav differ
diff --git a/sound/direct_sound_samples/cries/slugma.wav b/sound/direct_sound_samples/cries/slugma.wav
index 389bc88657..fed73cced4 100644
Binary files a/sound/direct_sound_samples/cries/slugma.wav and b/sound/direct_sound_samples/cries/slugma.wav differ
diff --git a/sound/direct_sound_samples/cries/smeargle.wav b/sound/direct_sound_samples/cries/smeargle.wav
index e206f8f61b..abb48580b3 100644
Binary files a/sound/direct_sound_samples/cries/smeargle.wav and b/sound/direct_sound_samples/cries/smeargle.wav differ
diff --git a/sound/direct_sound_samples/cries/smoochum.wav b/sound/direct_sound_samples/cries/smoochum.wav
index a4abdde7ec..33f50b0469 100644
Binary files a/sound/direct_sound_samples/cries/smoochum.wav and b/sound/direct_sound_samples/cries/smoochum.wav differ
diff --git a/sound/direct_sound_samples/cries/sneasel.wav b/sound/direct_sound_samples/cries/sneasel.wav
index da76aefb71..dc960be0dc 100644
Binary files a/sound/direct_sound_samples/cries/sneasel.wav and b/sound/direct_sound_samples/cries/sneasel.wav differ
diff --git a/sound/direct_sound_samples/cries/snorlax.wav b/sound/direct_sound_samples/cries/snorlax.wav
index 12e717be17..c0e45a4572 100644
Binary files a/sound/direct_sound_samples/cries/snorlax.wav and b/sound/direct_sound_samples/cries/snorlax.wav differ
diff --git a/sound/direct_sound_samples/cries/snorunt.wav b/sound/direct_sound_samples/cries/snorunt.wav
index b4ecc4537f..586c131168 100644
Binary files a/sound/direct_sound_samples/cries/snorunt.wav and b/sound/direct_sound_samples/cries/snorunt.wav differ
diff --git a/sound/direct_sound_samples/cries/snubbull.wav b/sound/direct_sound_samples/cries/snubbull.wav
index 37cacda8f7..626da01c14 100644
Binary files a/sound/direct_sound_samples/cries/snubbull.wav and b/sound/direct_sound_samples/cries/snubbull.wav differ
diff --git a/sound/direct_sound_samples/cries/solrock.wav b/sound/direct_sound_samples/cries/solrock.wav
index 12f766af71..d99dcbd2b4 100644
Binary files a/sound/direct_sound_samples/cries/solrock.wav and b/sound/direct_sound_samples/cries/solrock.wav differ
diff --git a/sound/direct_sound_samples/cries/spearow.wav b/sound/direct_sound_samples/cries/spearow.wav
index a648481368..e441d27ed4 100644
Binary files a/sound/direct_sound_samples/cries/spearow.wav and b/sound/direct_sound_samples/cries/spearow.wav differ
diff --git a/sound/direct_sound_samples/cries/spheal.wav b/sound/direct_sound_samples/cries/spheal.wav
index 818caf8cd8..5602399340 100644
Binary files a/sound/direct_sound_samples/cries/spheal.wav and b/sound/direct_sound_samples/cries/spheal.wav differ
diff --git a/sound/direct_sound_samples/cries/spinarak.wav b/sound/direct_sound_samples/cries/spinarak.wav
index 3c45731327..764efce71f 100644
Binary files a/sound/direct_sound_samples/cries/spinarak.wav and b/sound/direct_sound_samples/cries/spinarak.wav differ
diff --git a/sound/direct_sound_samples/cries/spinda.wav b/sound/direct_sound_samples/cries/spinda.wav
index 4481e3a887..a865817789 100644
Binary files a/sound/direct_sound_samples/cries/spinda.wav and b/sound/direct_sound_samples/cries/spinda.wav differ
diff --git a/sound/direct_sound_samples/cries/spoink.wav b/sound/direct_sound_samples/cries/spoink.wav
index 36447fb84b..880637b5cc 100644
Binary files a/sound/direct_sound_samples/cries/spoink.wav and b/sound/direct_sound_samples/cries/spoink.wav differ
diff --git a/sound/direct_sound_samples/cries/squirtle.wav b/sound/direct_sound_samples/cries/squirtle.wav
index 0cf32c6b6c..fb533d7184 100644
Binary files a/sound/direct_sound_samples/cries/squirtle.wav and b/sound/direct_sound_samples/cries/squirtle.wav differ
diff --git a/sound/direct_sound_samples/cries/stantler.wav b/sound/direct_sound_samples/cries/stantler.wav
index f59953beb0..febf2e6163 100644
Binary files a/sound/direct_sound_samples/cries/stantler.wav and b/sound/direct_sound_samples/cries/stantler.wav differ
diff --git a/sound/direct_sound_samples/cries/starmie.wav b/sound/direct_sound_samples/cries/starmie.wav
index e3ace4fcf2..40edec6b9e 100644
Binary files a/sound/direct_sound_samples/cries/starmie.wav and b/sound/direct_sound_samples/cries/starmie.wav differ
diff --git a/sound/direct_sound_samples/cries/staryu.wav b/sound/direct_sound_samples/cries/staryu.wav
index c726206f43..611c0571ba 100644
Binary files a/sound/direct_sound_samples/cries/staryu.wav and b/sound/direct_sound_samples/cries/staryu.wav differ
diff --git a/sound/direct_sound_samples/cries/steelix.wav b/sound/direct_sound_samples/cries/steelix.wav
index 8683e3d242..85de343abe 100644
Binary files a/sound/direct_sound_samples/cries/steelix.wav and b/sound/direct_sound_samples/cries/steelix.wav differ
diff --git a/sound/direct_sound_samples/cries/sudowoodo.wav b/sound/direct_sound_samples/cries/sudowoodo.wav
index 48661df94e..97bb1d51a2 100644
Binary files a/sound/direct_sound_samples/cries/sudowoodo.wav and b/sound/direct_sound_samples/cries/sudowoodo.wav differ
diff --git a/sound/direct_sound_samples/cries/suicune.wav b/sound/direct_sound_samples/cries/suicune.wav
index f675d8fdc4..90218ad013 100644
Binary files a/sound/direct_sound_samples/cries/suicune.wav and b/sound/direct_sound_samples/cries/suicune.wav differ
diff --git a/sound/direct_sound_samples/cries/sunflora.wav b/sound/direct_sound_samples/cries/sunflora.wav
index 613422881c..ccad9c8c36 100644
Binary files a/sound/direct_sound_samples/cries/sunflora.wav and b/sound/direct_sound_samples/cries/sunflora.wav differ
diff --git a/sound/direct_sound_samples/cries/sunkern.wav b/sound/direct_sound_samples/cries/sunkern.wav
index b183f9ee94..0b670dadb2 100644
Binary files a/sound/direct_sound_samples/cries/sunkern.wav and b/sound/direct_sound_samples/cries/sunkern.wav differ
diff --git a/sound/direct_sound_samples/cries/surskit.wav b/sound/direct_sound_samples/cries/surskit.wav
index 04b1be882d..650fde3d18 100644
Binary files a/sound/direct_sound_samples/cries/surskit.wav and b/sound/direct_sound_samples/cries/surskit.wav differ
diff --git a/sound/direct_sound_samples/cries/swablu.wav b/sound/direct_sound_samples/cries/swablu.wav
index f24d349307..0fafb27d0d 100644
Binary files a/sound/direct_sound_samples/cries/swablu.wav and b/sound/direct_sound_samples/cries/swablu.wav differ
diff --git a/sound/direct_sound_samples/cries/swalot.wav b/sound/direct_sound_samples/cries/swalot.wav
index cfed979342..56e0b170b1 100644
Binary files a/sound/direct_sound_samples/cries/swalot.wav and b/sound/direct_sound_samples/cries/swalot.wav differ
diff --git a/sound/direct_sound_samples/cries/swampert.wav b/sound/direct_sound_samples/cries/swampert.wav
index a06f15992f..eab813edb7 100644
Binary files a/sound/direct_sound_samples/cries/swampert.wav and b/sound/direct_sound_samples/cries/swampert.wav differ
diff --git a/sound/direct_sound_samples/cries/swellow.wav b/sound/direct_sound_samples/cries/swellow.wav
index 637ff46540..118eb684c3 100644
Binary files a/sound/direct_sound_samples/cries/swellow.wav and b/sound/direct_sound_samples/cries/swellow.wav differ
diff --git a/sound/direct_sound_samples/cries/swinub.wav b/sound/direct_sound_samples/cries/swinub.wav
index 93eafa458d..e84ba9454a 100644
Binary files a/sound/direct_sound_samples/cries/swinub.wav and b/sound/direct_sound_samples/cries/swinub.wav differ
diff --git a/sound/direct_sound_samples/cries/taillow.wav b/sound/direct_sound_samples/cries/taillow.wav
index 9f1bb25f48..7d4135c76a 100644
Binary files a/sound/direct_sound_samples/cries/taillow.wav and b/sound/direct_sound_samples/cries/taillow.wav differ
diff --git a/sound/direct_sound_samples/cries/tangela.wav b/sound/direct_sound_samples/cries/tangela.wav
index 023a0362f9..991b787ff4 100644
Binary files a/sound/direct_sound_samples/cries/tangela.wav and b/sound/direct_sound_samples/cries/tangela.wav differ
diff --git a/sound/direct_sound_samples/cries/tauros.wav b/sound/direct_sound_samples/cries/tauros.wav
index a982d052d9..f7610d2dd0 100644
Binary files a/sound/direct_sound_samples/cries/tauros.wav and b/sound/direct_sound_samples/cries/tauros.wav differ
diff --git a/sound/direct_sound_samples/cries/teddiursa.wav b/sound/direct_sound_samples/cries/teddiursa.wav
index adc9b80d9c..d55bc9e4a6 100644
Binary files a/sound/direct_sound_samples/cries/teddiursa.wav and b/sound/direct_sound_samples/cries/teddiursa.wav differ
diff --git a/sound/direct_sound_samples/cries/tentacool.wav b/sound/direct_sound_samples/cries/tentacool.wav
index cd8f5afc7a..f35d2a6252 100644
Binary files a/sound/direct_sound_samples/cries/tentacool.wav and b/sound/direct_sound_samples/cries/tentacool.wav differ
diff --git a/sound/direct_sound_samples/cries/tentacruel.wav b/sound/direct_sound_samples/cries/tentacruel.wav
index dfbc8c7f09..3799a10754 100644
Binary files a/sound/direct_sound_samples/cries/tentacruel.wav and b/sound/direct_sound_samples/cries/tentacruel.wav differ
diff --git a/sound/direct_sound_samples/cries/togepi.wav b/sound/direct_sound_samples/cries/togepi.wav
index e13355c554..ac6bbf9ff8 100644
Binary files a/sound/direct_sound_samples/cries/togepi.wav and b/sound/direct_sound_samples/cries/togepi.wav differ
diff --git a/sound/direct_sound_samples/cries/togetic.wav b/sound/direct_sound_samples/cries/togetic.wav
index 957a45dc94..f8b70c0f41 100644
Binary files a/sound/direct_sound_samples/cries/togetic.wav and b/sound/direct_sound_samples/cries/togetic.wav differ
diff --git a/sound/direct_sound_samples/cries/torchic.wav b/sound/direct_sound_samples/cries/torchic.wav
index 39a2522b32..5dd5c56bed 100644
Binary files a/sound/direct_sound_samples/cries/torchic.wav and b/sound/direct_sound_samples/cries/torchic.wav differ
diff --git a/sound/direct_sound_samples/cries/torkoal.wav b/sound/direct_sound_samples/cries/torkoal.wav
index 497e92af20..aed3842962 100644
Binary files a/sound/direct_sound_samples/cries/torkoal.wav and b/sound/direct_sound_samples/cries/torkoal.wav differ
diff --git a/sound/direct_sound_samples/cries/totodile.wav b/sound/direct_sound_samples/cries/totodile.wav
index 93c0788473..4a4263ec2d 100644
Binary files a/sound/direct_sound_samples/cries/totodile.wav and b/sound/direct_sound_samples/cries/totodile.wav differ
diff --git a/sound/direct_sound_samples/cries/trapinch.wav b/sound/direct_sound_samples/cries/trapinch.wav
index 5cad4ad23e..abb851c1b7 100644
Binary files a/sound/direct_sound_samples/cries/trapinch.wav and b/sound/direct_sound_samples/cries/trapinch.wav differ
diff --git a/sound/direct_sound_samples/cries/treecko.wav b/sound/direct_sound_samples/cries/treecko.wav
index 0c982f8408..da43048452 100644
Binary files a/sound/direct_sound_samples/cries/treecko.wav and b/sound/direct_sound_samples/cries/treecko.wav differ
diff --git a/sound/direct_sound_samples/cries/tropius.wav b/sound/direct_sound_samples/cries/tropius.wav
index 55de362aa7..f7f7cbc389 100644
Binary files a/sound/direct_sound_samples/cries/tropius.wav and b/sound/direct_sound_samples/cries/tropius.wav differ
diff --git a/sound/direct_sound_samples/cries/typhlosion.wav b/sound/direct_sound_samples/cries/typhlosion.wav
index f1759989d7..cd525d5610 100644
Binary files a/sound/direct_sound_samples/cries/typhlosion.wav and b/sound/direct_sound_samples/cries/typhlosion.wav differ
diff --git a/sound/direct_sound_samples/cries/tyranitar.wav b/sound/direct_sound_samples/cries/tyranitar.wav
index 5bec5f7279..f2b7682106 100644
Binary files a/sound/direct_sound_samples/cries/tyranitar.wav and b/sound/direct_sound_samples/cries/tyranitar.wav differ
diff --git a/sound/direct_sound_samples/cries/tyrogue.wav b/sound/direct_sound_samples/cries/tyrogue.wav
index 46d032063d..4905a85661 100644
Binary files a/sound/direct_sound_samples/cries/tyrogue.wav and b/sound/direct_sound_samples/cries/tyrogue.wav differ
diff --git a/sound/direct_sound_samples/cries/umbreon.wav b/sound/direct_sound_samples/cries/umbreon.wav
index 48f62064af..8735d9fdec 100644
Binary files a/sound/direct_sound_samples/cries/umbreon.wav and b/sound/direct_sound_samples/cries/umbreon.wav differ
diff --git a/sound/direct_sound_samples/cries/unown.wav b/sound/direct_sound_samples/cries/unown.wav
index 1956ecef75..befaaedd00 100644
Binary files a/sound/direct_sound_samples/cries/unown.wav and b/sound/direct_sound_samples/cries/unown.wav differ
diff --git a/sound/direct_sound_samples/cries/unused_265.wav b/sound/direct_sound_samples/cries/unused_265.wav
index 12c3d8640f..5735db46fd 100644
Binary files a/sound/direct_sound_samples/cries/unused_265.wav and b/sound/direct_sound_samples/cries/unused_265.wav differ
diff --git a/sound/direct_sound_samples/cries/unused_268.wav b/sound/direct_sound_samples/cries/unused_268.wav
index 3501b24ef8..c698955e8d 100644
Binary files a/sound/direct_sound_samples/cries/unused_268.wav and b/sound/direct_sound_samples/cries/unused_268.wav differ
diff --git a/sound/direct_sound_samples/cries/ursaring.wav b/sound/direct_sound_samples/cries/ursaring.wav
index b3d4a99cb7..e8ccc67cac 100644
Binary files a/sound/direct_sound_samples/cries/ursaring.wav and b/sound/direct_sound_samples/cries/ursaring.wav differ
diff --git a/sound/direct_sound_samples/cries/vaporeon.wav b/sound/direct_sound_samples/cries/vaporeon.wav
index 8ec3094851..861bc93cbe 100644
Binary files a/sound/direct_sound_samples/cries/vaporeon.wav and b/sound/direct_sound_samples/cries/vaporeon.wav differ
diff --git a/sound/direct_sound_samples/cries/venomoth.wav b/sound/direct_sound_samples/cries/venomoth.wav
index ab5179df66..76deea6e8d 100644
Binary files a/sound/direct_sound_samples/cries/venomoth.wav and b/sound/direct_sound_samples/cries/venomoth.wav differ
diff --git a/sound/direct_sound_samples/cries/venonat.wav b/sound/direct_sound_samples/cries/venonat.wav
index 450c2bb222..52763c4ea1 100644
Binary files a/sound/direct_sound_samples/cries/venonat.wav and b/sound/direct_sound_samples/cries/venonat.wav differ
diff --git a/sound/direct_sound_samples/cries/venusaur.wav b/sound/direct_sound_samples/cries/venusaur.wav
index fdd299ae27..4273ac8471 100644
Binary files a/sound/direct_sound_samples/cries/venusaur.wav and b/sound/direct_sound_samples/cries/venusaur.wav differ
diff --git a/sound/direct_sound_samples/cries/vibrava.wav b/sound/direct_sound_samples/cries/vibrava.wav
index 5370104875..9f4b2b3625 100644
Binary files a/sound/direct_sound_samples/cries/vibrava.wav and b/sound/direct_sound_samples/cries/vibrava.wav differ
diff --git a/sound/direct_sound_samples/cries/victreebel.wav b/sound/direct_sound_samples/cries/victreebel.wav
index 19f11202f9..cea271b30b 100644
Binary files a/sound/direct_sound_samples/cries/victreebel.wav and b/sound/direct_sound_samples/cries/victreebel.wav differ
diff --git a/sound/direct_sound_samples/cries/vigoroth.wav b/sound/direct_sound_samples/cries/vigoroth.wav
index 5d21bd23b0..800a4989f9 100644
Binary files a/sound/direct_sound_samples/cries/vigoroth.wav and b/sound/direct_sound_samples/cries/vigoroth.wav differ
diff --git a/sound/direct_sound_samples/cries/vileplume.wav b/sound/direct_sound_samples/cries/vileplume.wav
index 7189097b18..06dfaab478 100644
Binary files a/sound/direct_sound_samples/cries/vileplume.wav and b/sound/direct_sound_samples/cries/vileplume.wav differ
diff --git a/sound/direct_sound_samples/cries/volbeat.wav b/sound/direct_sound_samples/cries/volbeat.wav
index ae6375b95f..d29a8ddbe1 100644
Binary files a/sound/direct_sound_samples/cries/volbeat.wav and b/sound/direct_sound_samples/cries/volbeat.wav differ
diff --git a/sound/direct_sound_samples/cries/voltorb.wav b/sound/direct_sound_samples/cries/voltorb.wav
index e303a3db73..0c698af270 100644
Binary files a/sound/direct_sound_samples/cries/voltorb.wav and b/sound/direct_sound_samples/cries/voltorb.wav differ
diff --git a/sound/direct_sound_samples/cries/vulpix.wav b/sound/direct_sound_samples/cries/vulpix.wav
index 71d58b0a72..895bf7f358 100644
Binary files a/sound/direct_sound_samples/cries/vulpix.wav and b/sound/direct_sound_samples/cries/vulpix.wav differ
diff --git a/sound/direct_sound_samples/cries/wailmer.wav b/sound/direct_sound_samples/cries/wailmer.wav
index ef43c515fd..514200f855 100644
Binary files a/sound/direct_sound_samples/cries/wailmer.wav and b/sound/direct_sound_samples/cries/wailmer.wav differ
diff --git a/sound/direct_sound_samples/cries/wailord.wav b/sound/direct_sound_samples/cries/wailord.wav
index a7e9d89f69..163660c6a9 100644
Binary files a/sound/direct_sound_samples/cries/wailord.wav and b/sound/direct_sound_samples/cries/wailord.wav differ
diff --git a/sound/direct_sound_samples/cries/walrein.wav b/sound/direct_sound_samples/cries/walrein.wav
index cbc5fa8cb4..9389f92273 100644
Binary files a/sound/direct_sound_samples/cries/walrein.wav and b/sound/direct_sound_samples/cries/walrein.wav differ
diff --git a/sound/direct_sound_samples/cries/wartortle.wav b/sound/direct_sound_samples/cries/wartortle.wav
index 950f87d74b..040292e128 100644
Binary files a/sound/direct_sound_samples/cries/wartortle.wav and b/sound/direct_sound_samples/cries/wartortle.wav differ
diff --git a/sound/direct_sound_samples/cries/weedle.wav b/sound/direct_sound_samples/cries/weedle.wav
index 6a209fede1..2c891cd309 100644
Binary files a/sound/direct_sound_samples/cries/weedle.wav and b/sound/direct_sound_samples/cries/weedle.wav differ
diff --git a/sound/direct_sound_samples/cries/weepinbell.wav b/sound/direct_sound_samples/cries/weepinbell.wav
index 48f7225cf5..206bd24e45 100644
Binary files a/sound/direct_sound_samples/cries/weepinbell.wav and b/sound/direct_sound_samples/cries/weepinbell.wav differ
diff --git a/sound/direct_sound_samples/cries/weezing.wav b/sound/direct_sound_samples/cries/weezing.wav
index b5a7b189d0..ee60585955 100644
Binary files a/sound/direct_sound_samples/cries/weezing.wav and b/sound/direct_sound_samples/cries/weezing.wav differ
diff --git a/sound/direct_sound_samples/cries/whiscash.wav b/sound/direct_sound_samples/cries/whiscash.wav
index ebec93d188..927713b050 100644
Binary files a/sound/direct_sound_samples/cries/whiscash.wav and b/sound/direct_sound_samples/cries/whiscash.wav differ
diff --git a/sound/direct_sound_samples/cries/whismur.wav b/sound/direct_sound_samples/cries/whismur.wav
index af3e3e0e31..3470acc99f 100644
Binary files a/sound/direct_sound_samples/cries/whismur.wav and b/sound/direct_sound_samples/cries/whismur.wav differ
diff --git a/sound/direct_sound_samples/cries/wigglytuff.wav b/sound/direct_sound_samples/cries/wigglytuff.wav
index a6b632a6ce..7e9e668a44 100644
Binary files a/sound/direct_sound_samples/cries/wigglytuff.wav and b/sound/direct_sound_samples/cries/wigglytuff.wav differ
diff --git a/sound/direct_sound_samples/cries/wingull.wav b/sound/direct_sound_samples/cries/wingull.wav
index 4e158409ad..b780295935 100644
Binary files a/sound/direct_sound_samples/cries/wingull.wav and b/sound/direct_sound_samples/cries/wingull.wav differ
diff --git a/sound/direct_sound_samples/cries/wobbuffet.wav b/sound/direct_sound_samples/cries/wobbuffet.wav
index 17e7464ad9..049aa83ba8 100644
Binary files a/sound/direct_sound_samples/cries/wobbuffet.wav and b/sound/direct_sound_samples/cries/wobbuffet.wav differ
diff --git a/sound/direct_sound_samples/cries/wooper.wav b/sound/direct_sound_samples/cries/wooper.wav
index 83c7e589df..280845b2b8 100644
Binary files a/sound/direct_sound_samples/cries/wooper.wav and b/sound/direct_sound_samples/cries/wooper.wav differ
diff --git a/sound/direct_sound_samples/cries/wurmple.wav b/sound/direct_sound_samples/cries/wurmple.wav
index b58d5007cf..09ac95d59b 100644
Binary files a/sound/direct_sound_samples/cries/wurmple.wav and b/sound/direct_sound_samples/cries/wurmple.wav differ
diff --git a/sound/direct_sound_samples/cries/wynaut.wav b/sound/direct_sound_samples/cries/wynaut.wav
index 6febe26aa4..dcdc2b3394 100644
Binary files a/sound/direct_sound_samples/cries/wynaut.wav and b/sound/direct_sound_samples/cries/wynaut.wav differ
diff --git a/sound/direct_sound_samples/cries/xatu.wav b/sound/direct_sound_samples/cries/xatu.wav
index 7c84f65723..47c470c4c3 100644
Binary files a/sound/direct_sound_samples/cries/xatu.wav and b/sound/direct_sound_samples/cries/xatu.wav differ
diff --git a/sound/direct_sound_samples/cries/yanma.wav b/sound/direct_sound_samples/cries/yanma.wav
index 166b373616..3fea5ab36f 100644
Binary files a/sound/direct_sound_samples/cries/yanma.wav and b/sound/direct_sound_samples/cries/yanma.wav differ
diff --git a/sound/direct_sound_samples/cries/zangoose.wav b/sound/direct_sound_samples/cries/zangoose.wav
index b1e3e9ffc3..a5306a2d16 100644
Binary files a/sound/direct_sound_samples/cries/zangoose.wav and b/sound/direct_sound_samples/cries/zangoose.wav differ
diff --git a/sound/direct_sound_samples/cries/zapdos.wav b/sound/direct_sound_samples/cries/zapdos.wav
index 58415b9344..f8168a603c 100644
Binary files a/sound/direct_sound_samples/cries/zapdos.wav and b/sound/direct_sound_samples/cries/zapdos.wav differ
diff --git a/sound/direct_sound_samples/cries/zigzagoon.wav b/sound/direct_sound_samples/cries/zigzagoon.wav
index ac0b68edcd..fca81cf0f3 100644
Binary files a/sound/direct_sound_samples/cries/zigzagoon.wav and b/sound/direct_sound_samples/cries/zigzagoon.wav differ
diff --git a/sound/direct_sound_samples/cries/zubat.wav b/sound/direct_sound_samples/cries/zubat.wav
index dc0756a06d..58c0c16e58 100644
Binary files a/sound/direct_sound_samples/cries/zubat.wav and b/sound/direct_sound_samples/cries/zubat.wav differ
diff --git a/sound/direct_sound_samples/dance_drums_ride_bell.wav b/sound/direct_sound_samples/dance_drums_ride_bell.wav
index a79a5c26f9..7a0e9eb3ea 100644
Binary files a/sound/direct_sound_samples/dance_drums_ride_bell.wav and b/sound/direct_sound_samples/dance_drums_ride_bell.wav differ
diff --git a/sound/direct_sound_samples/drum_and_percussion_kick.wav b/sound/direct_sound_samples/drum_and_percussion_kick.wav
index 49ba617f0c..4b6969b6eb 100644
Binary files a/sound/direct_sound_samples/drum_and_percussion_kick.wav and b/sound/direct_sound_samples/drum_and_percussion_kick.wav differ
diff --git a/sound/direct_sound_samples/ethnic_flavours_atarigane.wav b/sound/direct_sound_samples/ethnic_flavours_atarigane.wav
index d1fb2c1a4f..ebe975fee8 100644
Binary files a/sound/direct_sound_samples/ethnic_flavours_atarigane.wav and b/sound/direct_sound_samples/ethnic_flavours_atarigane.wav differ
diff --git a/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav b/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav
index 18731f5034..bb8653d051 100644
Binary files a/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav and b/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav differ
diff --git a/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav b/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav
index 5c99fedf38..133368a57a 100644
Binary files a/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav and b/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav differ
diff --git a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav
index c12ae6de34..e7f08c8100 100644
Binary files a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav and b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav differ
diff --git a/sound/direct_sound_samples/heart_of_asia_gamelan.wav b/sound/direct_sound_samples/heart_of_asia_gamelan.wav
index a6258c97d4..48513e4b79 100644
Binary files a/sound/direct_sound_samples/heart_of_asia_gamelan.wav and b/sound/direct_sound_samples/heart_of_asia_gamelan.wav differ
diff --git a/sound/direct_sound_samples/phonemes/01.wav b/sound/direct_sound_samples/phonemes/01.wav
index d7f43544f5..ebc90ac2f7 100644
Binary files a/sound/direct_sound_samples/phonemes/01.wav and b/sound/direct_sound_samples/phonemes/01.wav differ
diff --git a/sound/direct_sound_samples/phonemes/02.wav b/sound/direct_sound_samples/phonemes/02.wav
index 6b9e4134c8..4c6bdbff7e 100644
Binary files a/sound/direct_sound_samples/phonemes/02.wav and b/sound/direct_sound_samples/phonemes/02.wav differ
diff --git a/sound/direct_sound_samples/phonemes/03.wav b/sound/direct_sound_samples/phonemes/03.wav
index a080496adb..d2e9934376 100644
Binary files a/sound/direct_sound_samples/phonemes/03.wav and b/sound/direct_sound_samples/phonemes/03.wav differ
diff --git a/sound/direct_sound_samples/phonemes/04.wav b/sound/direct_sound_samples/phonemes/04.wav
index 0525f8f5d3..ecba93ebf9 100644
Binary files a/sound/direct_sound_samples/phonemes/04.wav and b/sound/direct_sound_samples/phonemes/04.wav differ
diff --git a/sound/direct_sound_samples/phonemes/05.wav b/sound/direct_sound_samples/phonemes/05.wav
index 5df5562768..d7726826a6 100644
Binary files a/sound/direct_sound_samples/phonemes/05.wav and b/sound/direct_sound_samples/phonemes/05.wav differ
diff --git a/sound/direct_sound_samples/phonemes/06.wav b/sound/direct_sound_samples/phonemes/06.wav
index 3774664d97..0034485041 100644
Binary files a/sound/direct_sound_samples/phonemes/06.wav and b/sound/direct_sound_samples/phonemes/06.wav differ
diff --git a/sound/direct_sound_samples/phonemes/07.wav b/sound/direct_sound_samples/phonemes/07.wav
index fc44b7f771..5ed58e7010 100644
Binary files a/sound/direct_sound_samples/phonemes/07.wav and b/sound/direct_sound_samples/phonemes/07.wav differ
diff --git a/sound/direct_sound_samples/phonemes/08.wav b/sound/direct_sound_samples/phonemes/08.wav
index 47c50d63b0..c353b5c50b 100644
Binary files a/sound/direct_sound_samples/phonemes/08.wav and b/sound/direct_sound_samples/phonemes/08.wav differ
diff --git a/sound/direct_sound_samples/phonemes/09.wav b/sound/direct_sound_samples/phonemes/09.wav
index 762ece0dd8..b0eb9bd4bf 100644
Binary files a/sound/direct_sound_samples/phonemes/09.wav and b/sound/direct_sound_samples/phonemes/09.wav differ
diff --git a/sound/direct_sound_samples/phonemes/10.wav b/sound/direct_sound_samples/phonemes/10.wav
index da9fa6727c..e931a7d9df 100644
Binary files a/sound/direct_sound_samples/phonemes/10.wav and b/sound/direct_sound_samples/phonemes/10.wav differ
diff --git a/sound/direct_sound_samples/phonemes/11.wav b/sound/direct_sound_samples/phonemes/11.wav
index 5cd1904b42..949865e64a 100644
Binary files a/sound/direct_sound_samples/phonemes/11.wav and b/sound/direct_sound_samples/phonemes/11.wav differ
diff --git a/sound/direct_sound_samples/phonemes/12.wav b/sound/direct_sound_samples/phonemes/12.wav
index da638d82b0..573867ca92 100644
Binary files a/sound/direct_sound_samples/phonemes/12.wav and b/sound/direct_sound_samples/phonemes/12.wav differ
diff --git a/sound/direct_sound_samples/phonemes/13.wav b/sound/direct_sound_samples/phonemes/13.wav
index 2eb58a5f3f..a4629fa1d6 100644
Binary files a/sound/direct_sound_samples/phonemes/13.wav and b/sound/direct_sound_samples/phonemes/13.wav differ
diff --git a/sound/direct_sound_samples/phonemes/14.wav b/sound/direct_sound_samples/phonemes/14.wav
index fef0bb0ded..d6ae4c4bce 100644
Binary files a/sound/direct_sound_samples/phonemes/14.wav and b/sound/direct_sound_samples/phonemes/14.wav differ
diff --git a/sound/direct_sound_samples/phonemes/15.wav b/sound/direct_sound_samples/phonemes/15.wav
index 1dbe8cbfa3..80ac82c0ef 100644
Binary files a/sound/direct_sound_samples/phonemes/15.wav and b/sound/direct_sound_samples/phonemes/15.wav differ
diff --git a/sound/direct_sound_samples/phonemes/16.wav b/sound/direct_sound_samples/phonemes/16.wav
index 83f1818582..451b571f8e 100644
Binary files a/sound/direct_sound_samples/phonemes/16.wav and b/sound/direct_sound_samples/phonemes/16.wav differ
diff --git a/sound/direct_sound_samples/phonemes/17.wav b/sound/direct_sound_samples/phonemes/17.wav
index ad55b8bda5..79ddc5e756 100644
Binary files a/sound/direct_sound_samples/phonemes/17.wav and b/sound/direct_sound_samples/phonemes/17.wav differ
diff --git a/sound/direct_sound_samples/phonemes/18.wav b/sound/direct_sound_samples/phonemes/18.wav
index ecadb6f608..5bff7c6b97 100644
Binary files a/sound/direct_sound_samples/phonemes/18.wav and b/sound/direct_sound_samples/phonemes/18.wav differ
diff --git a/sound/direct_sound_samples/phonemes/19.wav b/sound/direct_sound_samples/phonemes/19.wav
index ff905abe22..5f846bea00 100644
Binary files a/sound/direct_sound_samples/phonemes/19.wav and b/sound/direct_sound_samples/phonemes/19.wav differ
diff --git a/sound/direct_sound_samples/phonemes/20.wav b/sound/direct_sound_samples/phonemes/20.wav
index 595702e084..e79694f650 100644
Binary files a/sound/direct_sound_samples/phonemes/20.wav and b/sound/direct_sound_samples/phonemes/20.wav differ
diff --git a/sound/direct_sound_samples/phonemes/21.wav b/sound/direct_sound_samples/phonemes/21.wav
index 7d1709212c..b399a3bd5f 100644
Binary files a/sound/direct_sound_samples/phonemes/21.wav and b/sound/direct_sound_samples/phonemes/21.wav differ
diff --git a/sound/direct_sound_samples/phonemes/22.wav b/sound/direct_sound_samples/phonemes/22.wav
index 274f6137aa..13f47560d8 100644
Binary files a/sound/direct_sound_samples/phonemes/22.wav and b/sound/direct_sound_samples/phonemes/22.wav differ
diff --git a/sound/direct_sound_samples/phonemes/23.wav b/sound/direct_sound_samples/phonemes/23.wav
index 72633f73c1..f399a12fe4 100644
Binary files a/sound/direct_sound_samples/phonemes/23.wav and b/sound/direct_sound_samples/phonemes/23.wav differ
diff --git a/sound/direct_sound_samples/phonemes/24.wav b/sound/direct_sound_samples/phonemes/24.wav
index 1d0e7b1a14..f7d92b633d 100644
Binary files a/sound/direct_sound_samples/phonemes/24.wav and b/sound/direct_sound_samples/phonemes/24.wav differ
diff --git a/sound/direct_sound_samples/phonemes/25.wav b/sound/direct_sound_samples/phonemes/25.wav
index 135bb246dd..429f608fb8 100644
Binary files a/sound/direct_sound_samples/phonemes/25.wav and b/sound/direct_sound_samples/phonemes/25.wav differ
diff --git a/sound/direct_sound_samples/phonemes/26.wav b/sound/direct_sound_samples/phonemes/26.wav
index e466df4d86..032ab3fd36 100644
Binary files a/sound/direct_sound_samples/phonemes/26.wav and b/sound/direct_sound_samples/phonemes/26.wav differ
diff --git a/sound/direct_sound_samples/phonemes/27.wav b/sound/direct_sound_samples/phonemes/27.wav
index c4d4ce8008..73589258c0 100644
Binary files a/sound/direct_sound_samples/phonemes/27.wav and b/sound/direct_sound_samples/phonemes/27.wav differ
diff --git a/sound/direct_sound_samples/phonemes/28.wav b/sound/direct_sound_samples/phonemes/28.wav
index fe9dde8e35..4050d35113 100644
Binary files a/sound/direct_sound_samples/phonemes/28.wav and b/sound/direct_sound_samples/phonemes/28.wav differ
diff --git a/sound/direct_sound_samples/phonemes/29.wav b/sound/direct_sound_samples/phonemes/29.wav
index d05658c97e..ae48eac22b 100644
Binary files a/sound/direct_sound_samples/phonemes/29.wav and b/sound/direct_sound_samples/phonemes/29.wav differ
diff --git a/sound/direct_sound_samples/phonemes/30.wav b/sound/direct_sound_samples/phonemes/30.wav
index aaf163ae97..fd76403a08 100644
Binary files a/sound/direct_sound_samples/phonemes/30.wav and b/sound/direct_sound_samples/phonemes/30.wav differ
diff --git a/sound/direct_sound_samples/phonemes/31.wav b/sound/direct_sound_samples/phonemes/31.wav
index 64b2c7f6db..b43bba09a9 100644
Binary files a/sound/direct_sound_samples/phonemes/31.wav and b/sound/direct_sound_samples/phonemes/31.wav differ
diff --git a/sound/direct_sound_samples/phonemes/32.wav b/sound/direct_sound_samples/phonemes/32.wav
index 98862f1b64..02599973ef 100644
Binary files a/sound/direct_sound_samples/phonemes/32.wav and b/sound/direct_sound_samples/phonemes/32.wav differ
diff --git a/sound/direct_sound_samples/phonemes/33.wav b/sound/direct_sound_samples/phonemes/33.wav
index f96a5e49fd..0a88ce09d9 100644
Binary files a/sound/direct_sound_samples/phonemes/33.wav and b/sound/direct_sound_samples/phonemes/33.wav differ
diff --git a/sound/direct_sound_samples/phonemes/34.wav b/sound/direct_sound_samples/phonemes/34.wav
index 1439810d44..145cf68e89 100644
Binary files a/sound/direct_sound_samples/phonemes/34.wav and b/sound/direct_sound_samples/phonemes/34.wav differ
diff --git a/sound/direct_sound_samples/phonemes/35.wav b/sound/direct_sound_samples/phonemes/35.wav
index aa6599bcc8..9c65433459 100644
Binary files a/sound/direct_sound_samples/phonemes/35.wav and b/sound/direct_sound_samples/phonemes/35.wav differ
diff --git a/sound/direct_sound_samples/phonemes/36.wav b/sound/direct_sound_samples/phonemes/36.wav
index 59f90f4614..1465286781 100644
Binary files a/sound/direct_sound_samples/phonemes/36.wav and b/sound/direct_sound_samples/phonemes/36.wav differ
diff --git a/sound/direct_sound_samples/phonemes/37.wav b/sound/direct_sound_samples/phonemes/37.wav
index 4df9cffee6..9ecae8d509 100644
Binary files a/sound/direct_sound_samples/phonemes/37.wav and b/sound/direct_sound_samples/phonemes/37.wav differ
diff --git a/sound/direct_sound_samples/phonemes/38.wav b/sound/direct_sound_samples/phonemes/38.wav
index 759a23d514..49aaa6863a 100644
Binary files a/sound/direct_sound_samples/phonemes/38.wav and b/sound/direct_sound_samples/phonemes/38.wav differ
diff --git a/sound/direct_sound_samples/phonemes/39.wav b/sound/direct_sound_samples/phonemes/39.wav
index da335b2690..89d0abc6fa 100644
Binary files a/sound/direct_sound_samples/phonemes/39.wav and b/sound/direct_sound_samples/phonemes/39.wav differ
diff --git a/sound/direct_sound_samples/phonemes/40.wav b/sound/direct_sound_samples/phonemes/40.wav
index 14944784a4..d6f65e9121 100644
Binary files a/sound/direct_sound_samples/phonemes/40.wav and b/sound/direct_sound_samples/phonemes/40.wav differ
diff --git a/sound/direct_sound_samples/phonemes/41.wav b/sound/direct_sound_samples/phonemes/41.wav
index 57e38fb3c8..917ca8a163 100644
Binary files a/sound/direct_sound_samples/phonemes/41.wav and b/sound/direct_sound_samples/phonemes/41.wav differ
diff --git a/sound/direct_sound_samples/phonemes/42.wav b/sound/direct_sound_samples/phonemes/42.wav
index a990969146..a97bbadcb5 100644
Binary files a/sound/direct_sound_samples/phonemes/42.wav and b/sound/direct_sound_samples/phonemes/42.wav differ
diff --git a/sound/direct_sound_samples/phonemes/43.wav b/sound/direct_sound_samples/phonemes/43.wav
index ab4a046743..8b7392277e 100644
Binary files a/sound/direct_sound_samples/phonemes/43.wav and b/sound/direct_sound_samples/phonemes/43.wav differ
diff --git a/sound/direct_sound_samples/phonemes/44.wav b/sound/direct_sound_samples/phonemes/44.wav
index efca4e3f97..4b412698b9 100644
Binary files a/sound/direct_sound_samples/phonemes/44.wav and b/sound/direct_sound_samples/phonemes/44.wav differ
diff --git a/sound/direct_sound_samples/phonemes/45.wav b/sound/direct_sound_samples/phonemes/45.wav
index 0369d3c2a1..0e2bfb5674 100644
Binary files a/sound/direct_sound_samples/phonemes/45.wav and b/sound/direct_sound_samples/phonemes/45.wav differ
diff --git a/sound/direct_sound_samples/phonemes/46.wav b/sound/direct_sound_samples/phonemes/46.wav
index 0fa8eb1f88..589cc1cd1f 100644
Binary files a/sound/direct_sound_samples/phonemes/46.wav and b/sound/direct_sound_samples/phonemes/46.wav differ
diff --git a/sound/direct_sound_samples/phonemes/47.wav b/sound/direct_sound_samples/phonemes/47.wav
index a55f03a153..45668adda6 100644
Binary files a/sound/direct_sound_samples/phonemes/47.wav and b/sound/direct_sound_samples/phonemes/47.wav differ
diff --git a/sound/direct_sound_samples/phonemes/48.wav b/sound/direct_sound_samples/phonemes/48.wav
index f6c7dd4502..d4ad0fec8d 100644
Binary files a/sound/direct_sound_samples/phonemes/48.wav and b/sound/direct_sound_samples/phonemes/48.wav differ
diff --git a/sound/direct_sound_samples/phonemes/49.wav b/sound/direct_sound_samples/phonemes/49.wav
index 4168f2e137..f9f949503e 100644
Binary files a/sound/direct_sound_samples/phonemes/49.wav and b/sound/direct_sound_samples/phonemes/49.wav differ
diff --git a/sound/direct_sound_samples/phonemes/50.wav b/sound/direct_sound_samples/phonemes/50.wav
index 88ce07d9d7..bdb57f46e2 100644
Binary files a/sound/direct_sound_samples/phonemes/50.wav and b/sound/direct_sound_samples/phonemes/50.wav differ
diff --git a/sound/direct_sound_samples/phonemes/51.wav b/sound/direct_sound_samples/phonemes/51.wav
index bd1a514180..9c734aaba8 100644
Binary files a/sound/direct_sound_samples/phonemes/51.wav and b/sound/direct_sound_samples/phonemes/51.wav differ
diff --git a/sound/direct_sound_samples/register_noise.wav b/sound/direct_sound_samples/register_noise.wav
index 89d94e61cc..090b0cd5aa 100644
Binary files a/sound/direct_sound_samples/register_noise.wav and b/sound/direct_sound_samples/register_noise.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_accordion.wav b/sound/direct_sound_samples/sc88pro_accordion.wav
index f19a98d277..1b28fa0e6c 100644
Binary files a/sound/direct_sound_samples/sc88pro_accordion.wav and b/sound/direct_sound_samples/sc88pro_accordion.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav b/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav
index f19a98d277..1b28fa0e6c 100644
Binary files a/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav and b/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_bubbles.wav b/sound/direct_sound_samples/sc88pro_bubbles.wav
index d6e61596d5..17d3eaa64f 100644
Binary files a/sound/direct_sound_samples/sc88pro_bubbles.wav and b/sound/direct_sound_samples/sc88pro_bubbles.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_high.wav b/sound/direct_sound_samples/sc88pro_church_organ3_high.wav
index 0766a8503d..d71d5d7be2 100644
Binary files a/sound/direct_sound_samples/sc88pro_church_organ3_high.wav and b/sound/direct_sound_samples/sc88pro_church_organ3_high.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_low.wav b/sound/direct_sound_samples/sc88pro_church_organ3_low.wav
index afc9c18907..38af40268b 100644
Binary files a/sound/direct_sound_samples/sc88pro_church_organ3_low.wav and b/sound/direct_sound_samples/sc88pro_church_organ3_low.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_fingered_bass.wav b/sound/direct_sound_samples/sc88pro_fingered_bass.wav
index 0e723b742b..dff67c22c5 100644
Binary files a/sound/direct_sound_samples/sc88pro_fingered_bass.wav and b/sound/direct_sound_samples/sc88pro_fingered_bass.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_flute.wav b/sound/direct_sound_samples/sc88pro_flute.wav
index 409ce0f744..6ec093c817 100644
Binary files a/sound/direct_sound_samples/sc88pro_flute.wav and b/sound/direct_sound_samples/sc88pro_flute.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_french_horn_60.wav b/sound/direct_sound_samples/sc88pro_french_horn_60.wav
index 105c186a2a..da82c73b64 100644
Binary files a/sound/direct_sound_samples/sc88pro_french_horn_60.wav and b/sound/direct_sound_samples/sc88pro_french_horn_60.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_french_horn_72.wav b/sound/direct_sound_samples/sc88pro_french_horn_72.wav
index 380d796307..3221dc49bc 100644
Binary files a/sound/direct_sound_samples/sc88pro_french_horn_72.wav and b/sound/direct_sound_samples/sc88pro_french_horn_72.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_fretless_bass.wav b/sound/direct_sound_samples/sc88pro_fretless_bass.wav
index f639d5ccf2..e7c59f564e 100644
Binary files a/sound/direct_sound_samples/sc88pro_fretless_bass.wav and b/sound/direct_sound_samples/sc88pro_fretless_bass.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_glockenspiel.wav b/sound/direct_sound_samples/sc88pro_glockenspiel.wav
index 4c9cbae149..d24e64efe9 100644
Binary files a/sound/direct_sound_samples/sc88pro_glockenspiel.wav and b/sound/direct_sound_samples/sc88pro_glockenspiel.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_harp.wav b/sound/direct_sound_samples/sc88pro_harp.wav
index bdb176720c..3a137c593d 100644
Binary files a/sound/direct_sound_samples/sc88pro_harp.wav and b/sound/direct_sound_samples/sc88pro_harp.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_jingle_bell.wav b/sound/direct_sound_samples/sc88pro_jingle_bell.wav
index 1eb6b1de1a..8342322428 100644
Binary files a/sound/direct_sound_samples/sc88pro_jingle_bell.wav and b/sound/direct_sound_samples/sc88pro_jingle_bell.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_mute_high_conga.wav b/sound/direct_sound_samples/sc88pro_mute_high_conga.wav
index c009d7265c..afa56506a1 100644
Binary files a/sound/direct_sound_samples/sc88pro_mute_high_conga.wav and b/sound/direct_sound_samples/sc88pro_mute_high_conga.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav
index 7538f508ad..e40e641802 100644
Binary files a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav and b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_open_low_conga.wav b/sound/direct_sound_samples/sc88pro_open_low_conga.wav
index 34a1e3f32a..030797c0d6 100644
Binary files a/sound/direct_sound_samples/sc88pro_open_low_conga.wav and b/sound/direct_sound_samples/sc88pro_open_low_conga.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav
index c3f89f9c78..58d90c404f 100644
Binary files a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav and b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_orchestra_snare.wav b/sound/direct_sound_samples/sc88pro_orchestra_snare.wav
index 96b10bb05f..43bb9ed9b8 100644
Binary files a/sound/direct_sound_samples/sc88pro_orchestra_snare.wav and b/sound/direct_sound_samples/sc88pro_orchestra_snare.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_organ2.wav b/sound/direct_sound_samples/sc88pro_organ2.wav
index bf6f2ba520..437ee2d03c 100644
Binary files a/sound/direct_sound_samples/sc88pro_organ2.wav and b/sound/direct_sound_samples/sc88pro_organ2.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_piano1_48.wav b/sound/direct_sound_samples/sc88pro_piano1_48.wav
index c7bcfca138..72e1cb4aa2 100644
Binary files a/sound/direct_sound_samples/sc88pro_piano1_48.wav and b/sound/direct_sound_samples/sc88pro_piano1_48.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_piano1_60.wav b/sound/direct_sound_samples/sc88pro_piano1_60.wav
index 7199386c7b..29cb5a8801 100644
Binary files a/sound/direct_sound_samples/sc88pro_piano1_60.wav and b/sound/direct_sound_samples/sc88pro_piano1_60.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_piano1_72.wav b/sound/direct_sound_samples/sc88pro_piano1_72.wav
index 603006eb6f..396f094525 100644
Binary files a/sound/direct_sound_samples/sc88pro_piano1_72.wav and b/sound/direct_sound_samples/sc88pro_piano1_72.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_piano1_84.wav b/sound/direct_sound_samples/sc88pro_piano1_84.wav
index 0d76370756..1956f95dad 100644
Binary files a/sound/direct_sound_samples/sc88pro_piano1_84.wav and b/sound/direct_sound_samples/sc88pro_piano1_84.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav b/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav
index 6bb6bc74a9..d89ea7c8d4 100644
Binary files a/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav and b/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_rnd_kick.wav b/sound/direct_sound_samples/sc88pro_rnd_kick.wav
index b05d88a812..02c440ce4c 100644
Binary files a/sound/direct_sound_samples/sc88pro_rnd_kick.wav and b/sound/direct_sound_samples/sc88pro_rnd_kick.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_rnd_snare.wav b/sound/direct_sound_samples/sc88pro_rnd_snare.wav
index c00ee759f7..69c9a6010e 100644
Binary files a/sound/direct_sound_samples/sc88pro_rnd_snare.wav and b/sound/direct_sound_samples/sc88pro_rnd_snare.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_slap_bass.wav b/sound/direct_sound_samples/sc88pro_slap_bass.wav
index 41d747259e..4883695165 100644
Binary files a/sound/direct_sound_samples/sc88pro_slap_bass.wav and b/sound/direct_sound_samples/sc88pro_slap_bass.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_square_wave.wav b/sound/direct_sound_samples/sc88pro_square_wave.wav
index 020dae03a4..5689c13f4e 100644
Binary files a/sound/direct_sound_samples/sc88pro_square_wave.wav and b/sound/direct_sound_samples/sc88pro_square_wave.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav
index 26e9db076c..1e43b2e5e2 100644
Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav and b/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav
index 1699f831ca..5a3560bd3e 100644
Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav and b/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav
index 5616d094a0..c07c8c4318 100644
Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav and b/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_synth_bass.wav b/sound/direct_sound_samples/sc88pro_synth_bass.wav
index 5aa61ab8ca..98f6a4ef20 100644
Binary files a/sound/direct_sound_samples/sc88pro_synth_bass.wav and b/sound/direct_sound_samples/sc88pro_synth_bass.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_taiko.wav b/sound/direct_sound_samples/sc88pro_taiko.wav
index af01253368..433ab727ee 100644
Binary files a/sound/direct_sound_samples/sc88pro_taiko.wav and b/sound/direct_sound_samples/sc88pro_taiko.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_tambourine.wav b/sound/direct_sound_samples/sc88pro_tambourine.wav
index 016b2cc209..929ed5daca 100644
Binary files a/sound/direct_sound_samples/sc88pro_tambourine.wav and b/sound/direct_sound_samples/sc88pro_tambourine.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_timpani.wav b/sound/direct_sound_samples/sc88pro_timpani.wav
index bed5f113a1..03fb3ee714 100644
Binary files a/sound/direct_sound_samples/sc88pro_timpani.wav and b/sound/direct_sound_samples/sc88pro_timpani.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav b/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav
index 8ab1862d02..1c1560ed28 100644
Binary files a/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav and b/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav
index 2e07040cb4..9dba2ac9d6 100644
Binary files a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav and b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_trumpet_60.wav b/sound/direct_sound_samples/sc88pro_trumpet_60.wav
index 0c857d971d..0675873a14 100644
Binary files a/sound/direct_sound_samples/sc88pro_trumpet_60.wav and b/sound/direct_sound_samples/sc88pro_trumpet_60.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_trumpet_72.wav b/sound/direct_sound_samples/sc88pro_trumpet_72.wav
index 93a62dc0ef..27f75206e1 100644
Binary files a/sound/direct_sound_samples/sc88pro_trumpet_72.wav and b/sound/direct_sound_samples/sc88pro_trumpet_72.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_trumpet_84.wav b/sound/direct_sound_samples/sc88pro_trumpet_84.wav
index 12549376b5..f1713f901c 100644
Binary files a/sound/direct_sound_samples/sc88pro_trumpet_84.wav and b/sound/direct_sound_samples/sc88pro_trumpet_84.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_tuba_39.wav b/sound/direct_sound_samples/sc88pro_tuba_39.wav
index c3b78eea55..619ebf6e3a 100644
Binary files a/sound/direct_sound_samples/sc88pro_tuba_39.wav and b/sound/direct_sound_samples/sc88pro_tuba_39.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_tuba_51.wav b/sound/direct_sound_samples/sc88pro_tuba_51.wav
index fed8c72f43..4bb436de79 100644
Binary files a/sound/direct_sound_samples/sc88pro_tuba_51.wav and b/sound/direct_sound_samples/sc88pro_tuba_51.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_tubular_bell.wav b/sound/direct_sound_samples/sc88pro_tubular_bell.wav
index 8c892236b9..eed5b32b2b 100644
Binary files a/sound/direct_sound_samples/sc88pro_tubular_bell.wav and b/sound/direct_sound_samples/sc88pro_tubular_bell.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_wind.wav b/sound/direct_sound_samples/sc88pro_wind.wav
index 3856a4af1f..1b3c78c42d 100644
Binary files a/sound/direct_sound_samples/sc88pro_wind.wav and b/sound/direct_sound_samples/sc88pro_wind.wav differ
diff --git a/sound/direct_sound_samples/sc88pro_xylophone.wav b/sound/direct_sound_samples/sc88pro_xylophone.wav
index a08296baa1..59aec0711c 100644
Binary files a/sound/direct_sound_samples/sc88pro_xylophone.wav and b/sound/direct_sound_samples/sc88pro_xylophone.wav differ
diff --git a/sound/direct_sound_samples/sd90_ambient_tom.wav b/sound/direct_sound_samples/sd90_ambient_tom.wav
index 6f390959fc..f524a7c882 100644
Binary files a/sound/direct_sound_samples/sd90_ambient_tom.wav and b/sound/direct_sound_samples/sd90_ambient_tom.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav
index 3c96f1cbca..2940e14a58 100644
Binary files a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav and b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav
index 39e25a89ce..f1f8dac798 100644
Binary files a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav and b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav
index 097d91f734..23ab4ff457 100644
Binary files a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav and b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav
index d281d77572..475a15e82c 100644
Binary files a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav and b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_oboe.wav b/sound/direct_sound_samples/sd90_classical_oboe.wav
index 2b9e96afc4..5bfa900421 100644
Binary files a/sound/direct_sound_samples/sd90_classical_oboe.wav and b/sound/direct_sound_samples/sd90_classical_oboe.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav
index 7380be1e1b..231c987087 100644
Binary files a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav and b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_shakuhachi.wav b/sound/direct_sound_samples/sd90_classical_shakuhachi.wav
index 587cee2cb7..62609c87b0 100644
Binary files a/sound/direct_sound_samples/sd90_classical_shakuhachi.wav and b/sound/direct_sound_samples/sd90_classical_shakuhachi.wav differ
diff --git a/sound/direct_sound_samples/sd90_classical_whistle.wav b/sound/direct_sound_samples/sd90_classical_whistle.wav
index 61a58445bf..fd8b1395ac 100644
Binary files a/sound/direct_sound_samples/sd90_classical_whistle.wav and b/sound/direct_sound_samples/sd90_classical_whistle.wav differ
diff --git a/sound/direct_sound_samples/sd90_cowbell.wav b/sound/direct_sound_samples/sd90_cowbell.wav
index 9c35bf6541..7e5bd33541 100644
Binary files a/sound/direct_sound_samples/sd90_cowbell.wav and b/sound/direct_sound_samples/sd90_cowbell.wav differ
diff --git a/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav b/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav
index d87fc68b2b..92c04b1615 100644
Binary files a/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav and b/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav differ
diff --git a/sound/direct_sound_samples/sd90_open_triangle.wav b/sound/direct_sound_samples/sd90_open_triangle.wav
index 92df2b3074..415054e23c 100644
Binary files a/sound/direct_sound_samples/sd90_open_triangle.wav and b/sound/direct_sound_samples/sd90_open_triangle.wav differ
diff --git a/sound/direct_sound_samples/sd90_solo_snare.wav b/sound/direct_sound_samples/sd90_solo_snare.wav
index ad5d872844..7ff2c98e49 100644
Binary files a/sound/direct_sound_samples/sd90_solo_snare.wav and b/sound/direct_sound_samples/sd90_solo_snare.wav differ
diff --git a/sound/direct_sound_samples/sd90_special_scream_drive.wav b/sound/direct_sound_samples/sd90_special_scream_drive.wav
index 8b4b563ac7..3f97406269 100644
Binary files a/sound/direct_sound_samples/sd90_special_scream_drive.wav and b/sound/direct_sound_samples/sd90_special_scream_drive.wav differ
diff --git a/sound/direct_sound_samples/steinway_b_piano.wav b/sound/direct_sound_samples/steinway_b_piano.wav
index 5a4d94b0a8..ef5a4849c3 100644
Binary files a/sound/direct_sound_samples/steinway_b_piano.wav and b/sound/direct_sound_samples/steinway_b_piano.wav differ
diff --git a/sound/direct_sound_samples/trinity_30303_mega_bass.wav b/sound/direct_sound_samples/trinity_30303_mega_bass.wav
index 6ad677b7d8..6a6e249a47 100644
Binary files a/sound/direct_sound_samples/trinity_30303_mega_bass.wav and b/sound/direct_sound_samples/trinity_30303_mega_bass.wav differ
diff --git a/sound/direct_sound_samples/trinity_big_boned.wav b/sound/direct_sound_samples/trinity_big_boned.wav
index 7f42b9fcd9..5967713d65 100644
Binary files a/sound/direct_sound_samples/trinity_big_boned.wav and b/sound/direct_sound_samples/trinity_big_boned.wav differ
diff --git a/sound/direct_sound_samples/trinity_cymbal_crash.wav b/sound/direct_sound_samples/trinity_cymbal_crash.wav
index c3e52d3e29..36337b641c 100644
Binary files a/sound/direct_sound_samples/trinity_cymbal_crash.wav and b/sound/direct_sound_samples/trinity_cymbal_crash.wav differ
diff --git a/sound/direct_sound_samples/unknown_01.wav b/sound/direct_sound_samples/unknown_01.wav
index 75d05e7f4d..4e069d0bfd 100644
Binary files a/sound/direct_sound_samples/unknown_01.wav and b/sound/direct_sound_samples/unknown_01.wav differ
diff --git a/sound/direct_sound_samples/unknown_02.wav b/sound/direct_sound_samples/unknown_02.wav
index 1a25b1fe18..7c87e021b4 100644
Binary files a/sound/direct_sound_samples/unknown_02.wav and b/sound/direct_sound_samples/unknown_02.wav differ
diff --git a/sound/direct_sound_samples/unknown_03.wav b/sound/direct_sound_samples/unknown_03.wav
index 1a64c4b25d..922f43db1b 100644
Binary files a/sound/direct_sound_samples/unknown_03.wav and b/sound/direct_sound_samples/unknown_03.wav differ
diff --git a/sound/direct_sound_samples/unknown_04.wav b/sound/direct_sound_samples/unknown_04.wav
index a278be2758..d2d216aa9d 100644
Binary files a/sound/direct_sound_samples/unknown_04.wav and b/sound/direct_sound_samples/unknown_04.wav differ
diff --git a/sound/direct_sound_samples/unknown_05.wav b/sound/direct_sound_samples/unknown_05.wav
index dd5eee1d2c..c344cc5c6f 100644
Binary files a/sound/direct_sound_samples/unknown_05.wav and b/sound/direct_sound_samples/unknown_05.wav differ
diff --git a/sound/direct_sound_samples/unknown_06.wav b/sound/direct_sound_samples/unknown_06.wav
index 396eb3e721..01ac24db5f 100644
Binary files a/sound/direct_sound_samples/unknown_06.wav and b/sound/direct_sound_samples/unknown_06.wav differ
diff --git a/sound/direct_sound_samples/unknown_07.wav b/sound/direct_sound_samples/unknown_07.wav
index b1e0a0d08f..437393e8bb 100644
Binary files a/sound/direct_sound_samples/unknown_07.wav and b/sound/direct_sound_samples/unknown_07.wav differ
diff --git a/sound/direct_sound_samples/unknown_08.wav b/sound/direct_sound_samples/unknown_08.wav
index 420ee23ce3..70fbefc215 100644
Binary files a/sound/direct_sound_samples/unknown_08.wav and b/sound/direct_sound_samples/unknown_08.wav differ
diff --git a/sound/direct_sound_samples/unknown_09.wav b/sound/direct_sound_samples/unknown_09.wav
index fd1ee4dd78..1ed463a664 100644
Binary files a/sound/direct_sound_samples/unknown_09.wav and b/sound/direct_sound_samples/unknown_09.wav differ
diff --git a/sound/direct_sound_samples/unknown_10.wav b/sound/direct_sound_samples/unknown_10.wav
index 63cf6043cb..5732a06edd 100644
Binary files a/sound/direct_sound_samples/unknown_10.wav and b/sound/direct_sound_samples/unknown_10.wav differ
diff --git a/sound/direct_sound_samples/unknown_11.wav b/sound/direct_sound_samples/unknown_11.wav
index f2e648045b..e911c04a9b 100644
Binary files a/sound/direct_sound_samples/unknown_11.wav and b/sound/direct_sound_samples/unknown_11.wav differ
diff --git a/sound/direct_sound_samples/unknown_12.wav b/sound/direct_sound_samples/unknown_12.wav
index 146db2c348..39d75f2de4 100644
Binary files a/sound/direct_sound_samples/unknown_12.wav and b/sound/direct_sound_samples/unknown_12.wav differ
diff --git a/sound/direct_sound_samples/unknown_13.wav b/sound/direct_sound_samples/unknown_13.wav
index 1618ea28b5..79fe36dc1b 100644
Binary files a/sound/direct_sound_samples/unknown_13.wav and b/sound/direct_sound_samples/unknown_13.wav differ
diff --git a/sound/direct_sound_samples/unknown_14.wav b/sound/direct_sound_samples/unknown_14.wav
index 4c509795ad..2a44425a5f 100644
Binary files a/sound/direct_sound_samples/unknown_14.wav and b/sound/direct_sound_samples/unknown_14.wav differ
diff --git a/sound/direct_sound_samples/unknown_15.wav b/sound/direct_sound_samples/unknown_15.wav
index 080c4ad841..d9a4ae6a41 100644
Binary files a/sound/direct_sound_samples/unknown_15.wav and b/sound/direct_sound_samples/unknown_15.wav differ
diff --git a/sound/direct_sound_samples/unknown_16.wav b/sound/direct_sound_samples/unknown_16.wav
index 72cf7dcc95..a13c322bfe 100644
Binary files a/sound/direct_sound_samples/unknown_16.wav and b/sound/direct_sound_samples/unknown_16.wav differ
diff --git a/sound/direct_sound_samples/unknown_17.wav b/sound/direct_sound_samples/unknown_17.wav
index 5a277f7d44..639dd8fcc8 100644
Binary files a/sound/direct_sound_samples/unknown_17.wav and b/sound/direct_sound_samples/unknown_17.wav differ
diff --git a/sound/direct_sound_samples/unknown_18.wav b/sound/direct_sound_samples/unknown_18.wav
index 9ee0027921..5533e49898 100644
Binary files a/sound/direct_sound_samples/unknown_18.wav and b/sound/direct_sound_samples/unknown_18.wav differ
diff --git a/sound/direct_sound_samples/unknown_bell.wav b/sound/direct_sound_samples/unknown_bell.wav
index 4dc82a170b..d996d9274b 100644
Binary files a/sound/direct_sound_samples/unknown_bell.wav and b/sound/direct_sound_samples/unknown_bell.wav differ
diff --git a/sound/direct_sound_samples/unknown_close_hihat.wav b/sound/direct_sound_samples/unknown_close_hihat.wav
index 86774ce3ce..1c0ddae804 100644
Binary files a/sound/direct_sound_samples/unknown_close_hihat.wav and b/sound/direct_sound_samples/unknown_close_hihat.wav differ
diff --git a/sound/direct_sound_samples/unknown_female_voice.wav b/sound/direct_sound_samples/unknown_female_voice.wav
index 44e73b3395..75ebea6183 100644
Binary files a/sound/direct_sound_samples/unknown_female_voice.wav and b/sound/direct_sound_samples/unknown_female_voice.wav differ
diff --git a/sound/direct_sound_samples/unknown_koto_high.wav b/sound/direct_sound_samples/unknown_koto_high.wav
index b9591a098f..a37b333aab 100644
Binary files a/sound/direct_sound_samples/unknown_koto_high.wav and b/sound/direct_sound_samples/unknown_koto_high.wav differ
diff --git a/sound/direct_sound_samples/unknown_koto_low.wav b/sound/direct_sound_samples/unknown_koto_low.wav
index a1736cafc7..a8ea9d5fbe 100644
Binary files a/sound/direct_sound_samples/unknown_koto_low.wav and b/sound/direct_sound_samples/unknown_koto_low.wav differ
diff --git a/sound/direct_sound_samples/unknown_open_hihat.wav b/sound/direct_sound_samples/unknown_open_hihat.wav
index 3a9ee824c1..d9fb05ab7c 100644
Binary files a/sound/direct_sound_samples/unknown_open_hihat.wav and b/sound/direct_sound_samples/unknown_open_hihat.wav differ
diff --git a/sound/direct_sound_samples/unknown_snare.wav b/sound/direct_sound_samples/unknown_snare.wav
index 03295e4763..f9047e0d98 100644
Binary files a/sound/direct_sound_samples/unknown_snare.wav and b/sound/direct_sound_samples/unknown_snare.wav differ
diff --git a/sound/direct_sound_samples/unknown_synth_snare.wav b/sound/direct_sound_samples/unknown_synth_snare.wav
index 774194423d..1ec62fb576 100644
Binary files a/sound/direct_sound_samples/unknown_synth_snare.wav and b/sound/direct_sound_samples/unknown_synth_snare.wav differ
diff --git a/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav b/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav
index c75373087b..4dae4f0f7a 100644
Binary files a/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav and b/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav differ
diff --git a/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav b/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav
index 49d67a30f3..7ee8c27f6d 100644
Binary files a/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav and b/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav differ
diff --git a/sound/direct_sound_samples/unused_sc55_tom.wav b/sound/direct_sound_samples/unused_sc55_tom.wav
index b4c225827f..944e1031f5 100644
Binary files a/sound/direct_sound_samples/unused_sc55_tom.wav and b/sound/direct_sound_samples/unused_sc55_tom.wav differ
diff --git a/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav b/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav
index 690cbc9183..e9f48d6ff7 100644
Binary files a/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav and b/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav differ
diff --git a/sound/direct_sound_samples/unused_sd90_oboe.wav b/sound/direct_sound_samples/unused_sd90_oboe.wav
index e7609ed53d..6ffcb4e003 100644
Binary files a/sound/direct_sound_samples/unused_sd90_oboe.wav and b/sound/direct_sound_samples/unused_sd90_oboe.wav differ
diff --git a/sound/direct_sound_samples/unused_unknown_male_voice.wav b/sound/direct_sound_samples/unused_unknown_male_voice.wav
index 7612c9b61d..cd6f8b1cdf 100644
Binary files a/sound/direct_sound_samples/unused_unknown_male_voice.wav and b/sound/direct_sound_samples/unused_unknown_male_voice.wav differ
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index fab12b2df4..80d05b12df 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -1758,7 +1758,7 @@ static u32 GetSwitchinStatusDamage(u32 battler)
{
if (status & STATUS1_BURN)
{
- if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7)
+ if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1)
statusDamage = maxHP / 16;
else
statusDamage = maxHP / 8;
@@ -1769,7 +1769,7 @@ static u32 GetSwitchinStatusDamage(u32 battler)
}
else if (status & STATUS1_FROSTBITE)
{
- if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7)
+ if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1)
statusDamage = maxHP / 16;
else
statusDamage = maxHP / 8;
diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c
index fff35b4073..cc8338b687 100644
--- a/src/battle_anim_new.c
+++ b/src/battle_anim_new.c
@@ -9629,7 +9629,6 @@ void AnimTask_RandomBool(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-// Credit to Skeli
#define PRIMAL_PULSE_SCALE_SIZE 16
#define PRIMAL_PULSE_FRAME_COUNT 4
static const union AffineAnimCmd sSpriteAffineAnim_PrimalSymbol[] =
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index a2d40bc5e1..37d801c5b7 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -370,7 +370,7 @@ static void OpponentHandleDrawTrainerPic(u32 battler)
{
s16 xPos;
u32 trainerPicId;
-
+
// Sets Multibattle test opponent sprites to not be Hiker
if (IsMultibattleTest())
{
@@ -391,7 +391,7 @@ static void OpponentHandleDrawTrainerPic(u32 battler)
else
{
trainerPicId = OpponentGetTrainerPicId(battler);
-
+
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT)
{
if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 548e4eb871..bd9cd271b5 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -242,7 +242,8 @@ static void HandleInputChooseAction(u32 battler)
else
gPlayerDpadHoldFrames = 0;
- if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE)
+ if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE
+ && !(B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A))
{
if (!gLastUsedBallMenuPresent)
{
@@ -880,7 +881,8 @@ void HandleInputChooseMove(u32 battler)
MoveSelectionDisplayMoveType(battler);
}
}
- else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON))
+ else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) &&
+ !(B_MOVE_DESCRIPTION_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A))
{
gBattleStruct->descriptionSubmenu = TRUE;
TryMoveSelectionDisplayMoveDescription(battler);
@@ -2394,7 +2396,7 @@ static u32 CheckTypeEffectiveness(u32 battlerAtk, u32 battlerDef)
static u32 CheckTargetTypeEffectiveness(u32 battler)
{
- u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler));
+ u32 battlerFoe = BATTLE_OPPOSITE(battler);
u32 foeEffectiveness = CheckTypeEffectiveness(battler, battlerFoe);
if (IsDoubleBattle())
diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c
index ef5539ebbf..2e6c7159ee 100644
--- a/src/battle_end_turn.c
+++ b/src/battle_end_turn.c
@@ -531,7 +531,7 @@ static bool32 HandleEndTurnBurn(u32 battler)
&& IsBattlerAlive(battler)
&& !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD))
{
- s32 burnDamage = GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8);
+ s32 burnDamage = GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8);
if (ability == ABILITY_HEATPROOF)
{
if (burnDamage > (burnDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would.
@@ -556,7 +556,7 @@ static bool32 HandleEndTurnFrostbite(u32 battler)
&& IsBattlerAlive(battler)
&& !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD))
{
- SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8));
+ SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8));
BattleScriptExecute(BattleScript_FrostbiteTurnDmg);
effect = TRUE;
}
@@ -908,9 +908,11 @@ static bool32 HandleEndTurnYawn(u32 battler)
else
{
if (B_SLEEP_TURNS >= GEN_5)
- gBattleMons[battler].status1 |= ((Random() % 3) + 2);
+ gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 4));
+ else if (B_SLEEP_TURNS >= GEN_3)
+ gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 5));
else
- gBattleMons[battler].status1 |= ((Random() % 4) + 3);
+ gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 8));
CancelMultiTurnMoves(battler, SKY_DROP_STATUS_YAWN);
TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]);
diff --git a/src/battle_interface.c b/src/battle_interface.c
index e3aa330d1e..624ccad4d7 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -2988,6 +2988,9 @@ void TryToAddMoveInfoWindow(void)
if (!B_SHOW_MOVE_DESCRIPTION)
return;
+ if (B_MOVE_DESCRIPTION_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ return;
+
LoadSpritePalette(&sSpritePalette_AbilityPopUp);
if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF)
LoadSpriteSheet(&sSpriteSheet_MoveInfoWindow);
@@ -3097,6 +3100,9 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId)
void TryHideLastUsedBall(void)
{
+ if (B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ return;
+
if (B_LAST_USED_BALL == TRUE)
TryHideOrRestoreLastUsedBall(0);
}
@@ -3106,6 +3112,9 @@ void TryRestoreLastUsedBall(void)
if (B_LAST_USED_BALL == FALSE)
return;
+ if (B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ return;
+
if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
TryHideOrRestoreLastUsedBall(1);
else
diff --git a/src/battle_main.c b/src/battle_main.c
index 5b1fb06cc8..ef93616256 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -361,7 +361,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] =
[TRAINER_CLASS_YOUNG_COUPLE] = { _("热恋情侣"), 8 },
[TRAINER_CLASS_OLD_COUPLE] = { _("金婚夫妻"), 10 },
[TRAINER_CLASS_SIS_AND_BRO] = { _("海上姐弟"), 3 },
- [TRAINER_CLASS_SALON_MAIDEN] = { _("对战塔大君"), 0, BALL_ULTRA },
+ [TRAINER_CLASS_SALON_MAIDEN] = { _("对战塔大君"), 5, BALL_ULTRA },
[TRAINER_CLASS_DOME_ACE] = { _("巨蛋超级巨星") },
[TRAINER_CLASS_PALACE_MAVEN] = { _("宫殿守护者") },
[TRAINER_CLASS_ARENA_TYCOON] = { _("竞技场主将") },
@@ -1799,7 +1799,8 @@ void CB2_QuitRecordedBattle(void)
if (taskId != TASK_NONE)
DestroyTask(taskId);
- TestRunner_Battle_AfterLastTurn();
+ gCurrentActionFuncId = B_ACTION_FINISHED;
+ sEndTurnFuncsTable[gBattleOutcome & 0x7F](); // Contains TestRunner_Battle_AfterLastTurn
}
FreeRestoreBattleData();
FreeAllWindowBuffers();
@@ -3735,7 +3736,7 @@ static void DoBattleIntro(void)
case BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS:
if (!gBattleControllerExecFlags)
{
- gBattleStruct->eventState.beforeFristTurn = 0;
+ gBattleStruct->eventState.beforeFirstTurn = 0;
gBattleStruct->switchInBattlerCounter = 0;
Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield.
@@ -3773,7 +3774,7 @@ static void TryDoEventsBeforeFirstTurn(void)
if (gBattleControllerExecFlags)
return;
- switch (gBattleStruct->eventState.beforeFristTurn)
+ switch (gBattleStruct->eventState.beforeFirstTurn)
{
case FIRST_TURN_EVENTS_START:
// Set invalid mons as absent(for example when starting a double battle with only one pokemon).
@@ -3823,20 +3824,20 @@ static void TryDoEventsBeforeFirstTurn(void)
SwapTurnOrder(i, j);
}
}
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_OVERWORLD_WEATHER:
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_WEATHER))
return;
break;
case FIRST_TURN_EVENTS_TERRAIN:
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_TERRAIN))
return;
break;
case FIRST_TURN_EVENTS_STARTING_STATUS:
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
if (TryFieldEffects(FIELD_EFFECT_TRAINER_STATUSES))
return;
break;
@@ -3851,7 +3852,7 @@ static void TryDoEventsBeforeFirstTurn(void)
}
}
memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts for Mirror Herb and Opportunist
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_NEUTRALIZING_GAS:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3861,7 +3862,7 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3878,7 +3879,7 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_ITEM_EFFECTS:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3888,7 +3889,7 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_WHITE_HERB:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3898,7 +3899,7 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_OPPORTUNIST:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3908,7 +3909,7 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_MIRROR_HERB:
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
@@ -3918,10 +3919,10 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
}
gBattleStruct->switchInBattlerCounter = 0;
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
break;
case FIRST_TURN_EVENTS_EJECT_PACK:
- gBattleStruct->eventState.beforeFristTurn++;
+ gBattleStruct->eventState.beforeFirstTurn++;
if (TrySwitchInEjectPack(FIRST_TURN))
return;
break;
@@ -3960,7 +3961,7 @@ static void TryDoEventsBeforeFirstTurn(void)
if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN)))
BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
- gBattleStruct->eventState.beforeFristTurn = 0;
+ gBattleStruct->eventState.beforeFirstTurn = 0;
break;
}
}
@@ -5624,21 +5625,11 @@ static void HandleEndTurn_FinishBattle(void)
TryPutBreakingNewsOnAir();
}
- RecordedBattle_SetPlaybackFinished();
- if (gTestRunnerEnabled)
- TestRunner_Battle_AfterLastTurn();
BeginFastPaletteFade(3);
FadeOutMapMusic(5);
if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9)
TryRestoreHeldItems();
- // Undo Dynamax HP multiplier before recalculating stats.
- for (battler = 0; battler < gBattlersCount; ++battler)
- {
- if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
- UndoDynamax(battler);
- }
-
for (i = 0; i < PARTY_SIZE; i++)
{
bool32 changedForm = TryRevertPartyMonFormChange(i);
@@ -5647,6 +5638,9 @@ static void HandleEndTurn_FinishBattle(void)
if (!changedForm && B_RECALCULATE_STATS >= GEN_5)
CalculateMonStats(&gPlayerParty[i]);
}
+ RecordedBattle_SetPlaybackFinished();
+ if (gTestRunnerEnabled)
+ TestRunner_Battle_AfterLastTurn();
// Clear battle mon species to avoid a bug on the next battle that causes
// healthboxes loading incorrectly due to it trying to create a Mega Indicator
// if the previous battler would've had it.
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index be1189cfa9..e053aa31f5 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -598,262 +598,262 @@ static void Cmd_callnative(void);
void (*const gBattleScriptingCommandsTable[])(void) =
{
- Cmd_attackcanceler, //0x0
- Cmd_accuracycheck, //0x1
- Cmd_printattackstring, //0x2
- Cmd_unused_0x3, //0x3
- Cmd_critcalc, //0x4
- Cmd_damagecalc, //0x5
- Cmd_typecalc, //0x6
- Cmd_adjustdamage, //0x7
- Cmd_multihitresultmessage, //0x8
- Cmd_attackanimation, //0x9
- Cmd_waitanimation, //0xA
- Cmd_healthbarupdate, //0xB
- Cmd_datahpupdate, //0xC
- Cmd_critmessage, //0xD
- Cmd_effectivenesssound, //0xE
- Cmd_resultmessage, //0xF
- Cmd_printstring, //0x10
- Cmd_printselectionstring, //0x11
- Cmd_waitmessage, //0x12
- Cmd_printfromtable, //0x13
- Cmd_printselectionstringfromtable, //0x14
- Cmd_setadditionaleffects, //0x15
- Cmd_seteffectprimary, //0x16
- Cmd_seteffectsecondary, //0x17
- Cmd_clearvolatile, //0x18
- Cmd_tryfaintmon, //0x19
- Cmd_dofaintanimation, //0x1A
- Cmd_cleareffectsonfaint, //0x1B
- Cmd_jumpifstatus, //0x1C
- Cmd_jumpifvolatile, //0x1D
- Cmd_jumpifability, //0x1E
- Cmd_jumpifsideaffecting, //0x1F
- Cmd_jumpifstat, //0x20
- Cmd_jumpifstatignorecontrary, //0x21
- Cmd_jumpbasedontype, //0x22
- Cmd_getexp, //0x23
- Cmd_checkteamslost, //0x24
- Cmd_movevaluescleanup, //0x25
- Cmd_setmultihit, //0x26
- Cmd_decrementmultihit, //0x27
- Cmd_goto, //0x28
- Cmd_jumpifbyte, //0x29
- Cmd_jumpifhalfword, //0x2A
- Cmd_jumpifword, //0x2B
- Cmd_jumpifarrayequal, //0x2C
- Cmd_jumpifarraynotequal, //0x2D
- Cmd_setbyte, //0x2E
- Cmd_addbyte, //0x2F
- Cmd_subbyte, //0x30
- Cmd_copyarray, //0x31
- Cmd_copyarraywithindex, //0x32
- Cmd_orbyte, //0x33
- Cmd_orhalfword, //0x34
- Cmd_orword, //0x35
- Cmd_bicbyte, //0x36
- Cmd_bichalfword, //0x37
- Cmd_bicword, //0x38
- Cmd_pause, //0x39
- Cmd_waitstate, //0x3A
- Cmd_isdmgblockedbydisguise, //0x3B
- Cmd_return, //0x3C
- Cmd_end, //0x3D
- Cmd_end2, //0x3E
- Cmd_end3, //0x3F
- Cmd_setchargingturn, //0x40
- Cmd_call, //0x41
- Cmd_setroost, //0x42
- Cmd_jumpifabilitypresent, //0x43
- Cmd_endselectionscript, //0x44
- Cmd_playanimation, //0x45
- Cmd_playanimation_var, //0x46
- Cmd_jumpfifsemiinvulnerable, //0x47
- Cmd_unused_0x48, //0x48
- Cmd_moveend, //0x49
- Cmd_sethealblock, //0x4A
- Cmd_returnatktoball, //0x4B
- Cmd_getswitchedmondata, //0x4C
- Cmd_switchindataupdate, //0x4D
- Cmd_switchinanim, //0x4E
- Cmd_jumpifcantswitch, //0x4F
- Cmd_openpartyscreen, //0x50
- Cmd_switchhandleorder, //0x51
- Cmd_switchineffects, //0x52
- Cmd_trainerslidein, //0x53
- Cmd_playse, //0x54
- Cmd_fanfare, //0x55
- Cmd_playfaintcry, //0x56
- Cmd_endlinkbattle, //0x57
- Cmd_returntoball, //0x58
- Cmd_handlelearnnewmove, //0x59
- Cmd_yesnoboxlearnmove, //0x5A
- Cmd_yesnoboxstoplearningmove, //0x5B
- Cmd_hitanimation, //0x5C
- Cmd_getmoneyreward, //0x5D
- Cmd_updatebattlermoves, //0x5E
- Cmd_swapattackerwithtarget, //0x5F
- Cmd_incrementgamestat, //0x60
- Cmd_drawpartystatussummary, //0x61
- Cmd_hidepartystatussummary, //0x62
- Cmd_jumptocalledmove, //0x63
- Cmd_statusanimation, //0x64
- Cmd_unused_0x65, //0x65
- Cmd_unused_0x66, //0x66
- Cmd_yesnobox, //0x67
- Cmd_cancelallactions, //0x68
- Cmd_setgravity, //0x69
- Cmd_removeitem, //0x6A
- Cmd_atknameinbuff1, //0x6B
- Cmd_drawlvlupbox, //0x6C
- Cmd_resetsentmonsvalue, //0x6D
- Cmd_setatktoplayer0, //0x6E
- Cmd_makevisible, //0x6F
- Cmd_recordability, //0x70
- Cmd_buffermovetolearn, //0x71
- Cmd_jumpifplayerran, //0x72
- Cmd_hpthresholds, //0x73
- Cmd_hpthresholds2, //0x74
- Cmd_useitemonopponent, //0x75
- Cmd_unused_0x78, //0x76
- Cmd_setprotectlike, //0x77
- Cmd_tryexplosion, //0x78
- Cmd_setatkhptozero, //0x79
- Cmd_jumpifnexttargetvalid, //0x7A
- Cmd_tryhealhalfhealth, //0x7B
- Cmd_unused_0x7e, //0x7C
- Cmd_setfieldweather, //0x7D
- Cmd_setreflect, //0x7E
- Cmd_setseeded, //0x7F
- Cmd_manipulatedamage, //0x80
- Cmd_trysetrest, //0x81
- Cmd_unused_0x82, //0x82
- Cmd_unused_0x83, //0x83
- Cmd_jumpifuproarwakes, //0x84
- Cmd_stockpile, //0x85
- Cmd_stockpiletobasedamage, //0x86
- Cmd_stockpiletohpheal, //0x87
- Cmd_unused_0x88, //0x88
- Cmd_statbuffchange, //0x89
- Cmd_normalisebuffs, //0x8A
- Cmd_setbide, //0x8B
- Cmd_twoturnmoveschargestringandanimation, //0x8C
- Cmd_trynonvolatilestatus, //0x8D
- Cmd_initmultihitstring, //0x8E
- Cmd_forcerandomswitch, //0x8F
- Cmd_tryconversiontypechange, //0x90
- Cmd_givepaydaymoney, //0x91
- Cmd_setlightscreen, //0x92
- Cmd_tryKO, //0x93
- Cmd_checknonvolatiletrigger, //0x94
- Cmd_copybidedmg, //0x95
- Cmd_animatewildpokemonafterfailedpokeball, //0x96
- Cmd_tryinfatuating, //0x97
- Cmd_updatestatusicon, //0x98
- Cmd_setmist, //0x99
- Cmd_setfocusenergy, //0x9A
- Cmd_transformdataexecution, //0x9B
- Cmd_setsubstitute, //0x9C
- Cmd_mimicattackcopy, //0x9D
- Cmd_setcalledmove, //0x9E
- Cmd_unused_0x9f, //0x9F
- Cmd_unused_0xA0, //0xA0
- Cmd_counterdamagecalculator, //0xA1
- Cmd_mirrorcoatdamagecalculator, //0xA2
- Cmd_disablelastusedattack, //0xA3
- Cmd_trysetencore, //0xA4
- Cmd_painsplitdmgcalc, //0xA5
- Cmd_settypetorandomresistance, //0xA6
- Cmd_setalwayshitflag, //0xA7
- Cmd_copymovepermanently, //0xA8
- Cmd_unused_0xA9, //0xA9
- Cmd_unused_AA, //0xAA
- Cmd_unused_0xab, //0xAB
- Cmd_settailwind, //0xAC
- Cmd_tryspiteppreduce, //0xAD
- Cmd_healpartystatus, //0xAE
- Cmd_cursetarget, //0xAF
- Cmd_trysetspikes, //0xB0
- Cmd_setvolatile, //0xB1
- Cmd_trysetperishsong, //0xB2
- Cmd_handlerollout, //0xB3
- Cmd_jumpifconfusedandstatmaxed, //0xB4
- Cmd_handlefurycutter, //0xB5
- Cmd_setembargo, //0xB6
- Cmd_presentdamagecalculation, //0xB7
- Cmd_setsafeguard, //0xB8
- Cmd_magnitudedamagecalculation, //0xB9
- Cmd_jumpifnopursuitswitchdmg, //0xBA
- Cmd_tryactivateitem, //0xBB
- Cmd_halvehp, //0xBC
- Cmd_copyfoestats, //0xBD
- Cmd_rapidspinfree, //0xBE
- Cmd_unused_0xBF, //0xBF
- Cmd_recoverbasedonsunlight, //0xC0
- Cmd_setstickyweb, //0xC1
- Cmd_selectfirstvalidtarget, //0xC2
- Cmd_setfutureattack, //0xC3
- Cmd_trydobeatup, //0xC4
- Cmd_setsemiinvulnerablebit, //0xC5
- Cmd_tryfiretwoturnmovenowbyeffect, //0xC6
- Cmd_unused_0xC7, //0xC7
- Cmd_unused_c8, //0xC8
- Cmd_trymemento, //0xC9
- Cmd_setforcedtarget, //0xCA
- Cmd_unused_0xcb, //0xCB
- Cmd_unused_0xCC, //0xCC
- Cmd_curestatuswithmove, //0xCD
- Cmd_settorment, //0xCE
- Cmd_jumpifnodamage, //0xCF
- Cmd_settaunt, //0xD0
- Cmd_trysethelpinghand, //0xD1
- Cmd_tryswapitems, //0xD2
- Cmd_trycopyability, //0xD3
- Cmd_trywish, //0xD4
- Cmd_settoxicspikes, //0xD5
- Cmd_setgastroacid, //0xD6
- Cmd_setyawn, //0xD7
- Cmd_setdamagetohealthdifference, //0xD8
- Cmd_setroom, //0xD9
- Cmd_tryswapabilities, //0xDA
- Cmd_tryimprison, //0xDB
- Cmd_setstealthrock, //0xDC
- Cmd_trysetvolatile, //0xDD
- Cmd_unused_0xde, //0xDE
- Cmd_trysetmagiccoat, //0xDF
- Cmd_trysetsnatch, //0xE0
- Cmd_unused2, //0xE1
- Cmd_switchoutabilities, //0xE2
- Cmd_jumpifhasnohp, //0xE3
- Cmd_unused_0xE4, //0xE4
- Cmd_pickup, //0xE5
- Cmd_unused_0xE6, //0xE6
- Cmd_unused_0xE7, //0xE7
- Cmd_settypebasedhalvers, //0xE8
- Cmd_jumpifsubstituteblocks, //0xE9
- Cmd_tryrecycleitem, //0xEA
- Cmd_settypetoenvironment, //0xEB
- Cmd_pursuitdoubles, //0xEC
- Cmd_snatchsetbattlers, //0xED
- Cmd_removescreens, //0xEE
- Cmd_handleballthrow, //0xEF
- Cmd_givecaughtmon, //0xF0
- Cmd_trysetcaughtmondexflags, //0xF1
- Cmd_displaydexinfo, //0xF2
- Cmd_trygivecaughtmonnick, //0xF3
- Cmd_unused_0xf4, //0xF4
- Cmd_removeattackerstatus1, //0xF5
- Cmd_finishaction, //0xF6
- Cmd_finishturn, //0xF7
- Cmd_trainerslideout, //0xF8
- Cmd_settelekinesis, //0xF9
- Cmd_swapstatstages, //0xFA
- Cmd_averagestats, //0xFB
- Cmd_jumpifcaptivateaffected, //0xFC
- Cmd_setnonvolatilestatus, //0xFD
- Cmd_tryoverwriteability, //0xFE
- Cmd_callnative, //0xFF
+ [B_SCR_OP_ATTACKCANCELER] = Cmd_attackcanceler,
+ [B_SCR_OP_ACCURACYCHECK] = Cmd_accuracycheck,
+ [B_SCR_OP_PRINTATTACKSTRING] = Cmd_printattackstring,
+ [B_SCR_OP_UNUSED_0x3] = Cmd_unused_0x3,
+ [B_SCR_OP_CRITCALC] = Cmd_critcalc,
+ [B_SCR_OP_DAMAGECALC] = Cmd_damagecalc,
+ [B_SCR_OP_TYPECALC] = Cmd_typecalc,
+ [B_SCR_OP_ADJUSTDAMAGE] = Cmd_adjustdamage,
+ [B_SCR_OP_MULTIHITRESULTMESSAGE] = Cmd_multihitresultmessage,
+ [B_SCR_OP_ATTACKANIMATION] = Cmd_attackanimation,
+ [B_SCR_OP_WAITANIMATION] = Cmd_waitanimation,
+ [B_SCR_OP_HEALTHBARUPDATE] = Cmd_healthbarupdate,
+ [B_SCR_OP_DATAHPUPDATE] = Cmd_datahpupdate,
+ [B_SCR_OP_CRITMESSAGE] = Cmd_critmessage,
+ [B_SCR_OP_EFFECTIVENESSSOUND] = Cmd_effectivenesssound,
+ [B_SCR_OP_RESULTMESSAGE] = Cmd_resultmessage,
+ [B_SCR_OP_PRINTSTRING] = Cmd_printstring,
+ [B_SCR_OP_PRINTSELECTIONSTRING] = Cmd_printselectionstring,
+ [B_SCR_OP_WAITMESSAGE] = Cmd_waitmessage,
+ [B_SCR_OP_PRINTFROMTABLE] = Cmd_printfromtable,
+ [B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE] = Cmd_printselectionstringfromtable,
+ [B_SCR_OP_SETADDITIONALEFFECTS] = Cmd_setadditionaleffects,
+ [B_SCR_OP_SETEFFECTPRIMARY] = Cmd_seteffectprimary,
+ [B_SCR_OP_SETEFFECTSECONDARY] = Cmd_seteffectsecondary,
+ [B_SCR_OP_CLEARVOLATILE] = Cmd_clearvolatile,
+ [B_SCR_OP_TRYFAINTMON] = Cmd_tryfaintmon,
+ [B_SCR_OP_DOFAINTANIMATION] = Cmd_dofaintanimation,
+ [B_SCR_OP_CLEAREFFECTSONFAINT] = Cmd_cleareffectsonfaint,
+ [B_SCR_OP_JUMPIFSTATUS] = Cmd_jumpifstatus,
+ [B_SCR_OP_JUMPIFVOLATILE] = Cmd_jumpifvolatile,
+ [B_SCR_OP_JUMPIFABILITY] = Cmd_jumpifability,
+ [B_SCR_OP_JUMPIFSIDEAFFECTING] = Cmd_jumpifsideaffecting,
+ [B_SCR_OP_JUMPIFSTAT] = Cmd_jumpifstat,
+ [B_SCR_OP_JUMPIFSTATIGNORECONTRARY] = Cmd_jumpifstatignorecontrary,
+ [B_SCR_OP_JUMPBASEDONTYPE] = Cmd_jumpbasedontype,
+ [B_SCR_OP_GETEXP] = Cmd_getexp,
+ [B_SCR_OP_CHECKTEAMSLOST] = Cmd_checkteamslost,
+ [B_SCR_OP_MOVEVALUESCLEANUP] = Cmd_movevaluescleanup,
+ [B_SCR_OP_SETMULTIHIT] = Cmd_setmultihit,
+ [B_SCR_OP_DECREMENTMULTIHIT] = Cmd_decrementmultihit,
+ [B_SCR_OP_GOTO] = Cmd_goto,
+ [B_SCR_OP_JUMPIFBYTE] = Cmd_jumpifbyte,
+ [B_SCR_OP_JUMPIFHALFWORD] = Cmd_jumpifhalfword,
+ [B_SCR_OP_JUMPIFWORD] = Cmd_jumpifword,
+ [B_SCR_OP_JUMPIFARRAYEQUAL] = Cmd_jumpifarrayequal,
+ [B_SCR_OP_JUMPIFARRAYNOTEQUAL] = Cmd_jumpifarraynotequal,
+ [B_SCR_OP_SETBYTE] = Cmd_setbyte,
+ [B_SCR_OP_ADDBYTE] = Cmd_addbyte,
+ [B_SCR_OP_SUBBYTE] = Cmd_subbyte,
+ [B_SCR_OP_COPYARRAY] = Cmd_copyarray,
+ [B_SCR_OP_COPYARRAYWITHINDEX] = Cmd_copyarraywithindex,
+ [B_SCR_OP_ORBYTE] = Cmd_orbyte,
+ [B_SCR_OP_ORHALFWORD] = Cmd_orhalfword,
+ [B_SCR_OP_ORWORD] = Cmd_orword,
+ [B_SCR_OP_BICBYTE] = Cmd_bicbyte,
+ [B_SCR_OP_BICHALFWORD] = Cmd_bichalfword,
+ [B_SCR_OP_BICWORD] = Cmd_bicword,
+ [B_SCR_OP_PAUSE] = Cmd_pause,
+ [B_SCR_OP_WAITSTATE] = Cmd_waitstate,
+ [B_SCR_OP_ISDMGBLOCKEDBYDISGUISE] = Cmd_isdmgblockedbydisguise,
+ [B_SCR_OP_RETURN] = Cmd_return,
+ [B_SCR_OP_END] = Cmd_end,
+ [B_SCR_OP_END2] = Cmd_end2,
+ [B_SCR_OP_END3] = Cmd_end3,
+ [B_SCR_OP_SETCHARGINGTURN] = Cmd_setchargingturn,
+ [B_SCR_OP_CALL] = Cmd_call,
+ [B_SCR_OP_SETROOST] = Cmd_setroost,
+ [B_SCR_OP_JUMPIFABILITYPRESENT] = Cmd_jumpifabilitypresent,
+ [B_SCR_OP_ENDSELECTIONSCRIPT] = Cmd_endselectionscript,
+ [B_SCR_OP_PLAYANIMATION] = Cmd_playanimation,
+ [B_SCR_OP_PLAYANIMATION_VAR] = Cmd_playanimation_var,
+ [B_SCR_OP_JUMPFIFSEMIINVULNERABLE] = Cmd_jumpfifsemiinvulnerable,
+ [B_SCR_OP_UNUSED_0x48] = Cmd_unused_0x48,
+ [B_SCR_OP_MOVEEND] = Cmd_moveend,
+ [B_SCR_OP_SETHEALBLOCK] = Cmd_sethealblock,
+ [B_SCR_OP_RETURNATKTOBALL] = Cmd_returnatktoball,
+ [B_SCR_OP_GETSWITCHEDMONDATA] = Cmd_getswitchedmondata,
+ [B_SCR_OP_SWITCHINDATAUPDATE] = Cmd_switchindataupdate,
+ [B_SCR_OP_SWITCHINANIM] = Cmd_switchinanim,
+ [B_SCR_OP_JUMPIFCANTSWITCH] = Cmd_jumpifcantswitch,
+ [B_SCR_OP_OPENPARTYSCREEN] = Cmd_openpartyscreen,
+ [B_SCR_OP_SWITCHHANDLEORDER] = Cmd_switchhandleorder,
+ [B_SCR_OP_SWITCHINEFFECTS] = Cmd_switchineffects,
+ [B_SCR_OP_TRAINERSLIDEIN] = Cmd_trainerslidein,
+ [B_SCR_OP_PLAYSE] = Cmd_playse,
+ [B_SCR_OP_FANFARE] = Cmd_fanfare,
+ [B_SCR_OP_PLAYFAINTCRY] = Cmd_playfaintcry,
+ [B_SCR_OP_ENDLINKBATTLE] = Cmd_endlinkbattle,
+ [B_SCR_OP_RETURNTOBALL] = Cmd_returntoball,
+ [B_SCR_OP_HANDLELEARNNEWMOVE] = Cmd_handlelearnnewmove,
+ [B_SCR_OP_YESNOBOXLEARNMOVE] = Cmd_yesnoboxlearnmove,
+ [B_SCR_OP_YESNOBOXSTOPLEARNINGMOVE] = Cmd_yesnoboxstoplearningmove,
+ [B_SCR_OP_HITANIMATION] = Cmd_hitanimation,
+ [B_SCR_OP_GETMONEYREWARD] = Cmd_getmoneyreward,
+ [B_SCR_OP_UPDATEBATTLERMOVES] = Cmd_updatebattlermoves,
+ [B_SCR_OP_SWAPATTACKERWITHTARGET] = Cmd_swapattackerwithtarget,
+ [B_SCR_OP_INCREMENTGAMESTAT] = Cmd_incrementgamestat,
+ [B_SCR_OP_DRAWPARTYSTATUSSUMMARY] = Cmd_drawpartystatussummary,
+ [B_SCR_OP_HIDEPARTYSTATUSSUMMARY] = Cmd_hidepartystatussummary,
+ [B_SCR_OP_JUMPTOCALLEDMOVE] = Cmd_jumptocalledmove,
+ [B_SCR_OP_STATUSANIMATION] = Cmd_statusanimation,
+ [B_SCR_OP_UNUSED_0x65] = Cmd_unused_0x65,
+ [B_SCR_OP_UNUSED_0x66] = Cmd_unused_0x66,
+ [B_SCR_OP_YESNOBOX] = Cmd_yesnobox,
+ [B_SCR_OP_CANCELALLACTIONS] = Cmd_cancelallactions,
+ [B_SCR_OP_SETGRAVITY] = Cmd_setgravity,
+ [B_SCR_OP_REMOVEITEM] = Cmd_removeitem,
+ [B_SCR_OP_ATKNAMEINBUFF1] = Cmd_atknameinbuff1,
+ [B_SCR_OP_DRAWLVLUPBOX] = Cmd_drawlvlupbox,
+ [B_SCR_OP_RESETSENTMONSVALUE] = Cmd_resetsentmonsvalue,
+ [B_SCR_OP_SETATKTOPLAYER0] = Cmd_setatktoplayer0,
+ [B_SCR_OP_MAKEVISIBLE] = Cmd_makevisible,
+ [B_SCR_OP_RECORDABILITY] = Cmd_recordability,
+ [B_SCR_OP_BUFFERMOVETOLEARN] = Cmd_buffermovetolearn,
+ [B_SCR_OP_JUMPIFPLAYERRAN] = Cmd_jumpifplayerran,
+ [B_SCR_OP_HPTHRESHOLDS] = Cmd_hpthresholds,
+ [B_SCR_OP_HPTHRESHOLDS2] = Cmd_hpthresholds2,
+ [B_SCR_OP_USEITEMONOPPONENT] = Cmd_useitemonopponent,
+ [B_SCR_OP_UNUSED_0x78] = Cmd_unused_0x78,
+ [B_SCR_OP_SETPROTECTLIKE] = Cmd_setprotectlike,
+ [B_SCR_OP_TRYEXPLOSION] = Cmd_tryexplosion,
+ [B_SCR_OP_SETATKHPTOZERO] = Cmd_setatkhptozero,
+ [B_SCR_OP_JUMPIFNEXTTARGETVALID] = Cmd_jumpifnexttargetvalid,
+ [B_SCR_OP_TRYHEALHALFHEALTH] = Cmd_tryhealhalfhealth,
+ [B_SCR_OP_UNUSED_0x7E] = Cmd_unused_0x7e,
+ [B_SCR_OP_SETFIELDWEATHER] = Cmd_setfieldweather,
+ [B_SCR_OP_SETREFLECT] = Cmd_setreflect,
+ [B_SCR_OP_SETSEEDED] = Cmd_setseeded,
+ [B_SCR_OP_MANIPULATEDAMAGE] = Cmd_manipulatedamage,
+ [B_SCR_OP_TRYSETREST] = Cmd_trysetrest,
+ [B_SCR_OP_UNUSED_0x82] = Cmd_unused_0x82,
+ [B_SCR_OP_UNUSED_0x83] = Cmd_unused_0x83,
+ [B_SCR_OP_JUMPIFUPROARWAKES] = Cmd_jumpifuproarwakes,
+ [B_SCR_OP_STOCKPILE] = Cmd_stockpile,
+ [B_SCR_OP_STOCKPILETOBASEDAMAGE] = Cmd_stockpiletobasedamage,
+ [B_SCR_OP_STOCKPILETOHPHEAL] = Cmd_stockpiletohpheal,
+ [B_SCR_OP_UNUSED_0x88] = Cmd_unused_0x88,
+ [B_SCR_OP_STATBUFFCHANGE] = Cmd_statbuffchange,
+ [B_SCR_OP_NORMALISEBUFFS] = Cmd_normalisebuffs,
+ [B_SCR_OP_SETBIDE] = Cmd_setbide,
+ [B_SCR_OP_TWOTURNMOVESCHARGESTRINGANDANIMATION] = Cmd_twoturnmoveschargestringandanimation,
+ [B_SCR_OP_TRYNONVOLATILESTATUS] = Cmd_trynonvolatilestatus,
+ [B_SCR_OP_INITMULTIHITSTRING] = Cmd_initmultihitstring,
+ [B_SCR_OP_FORCERANDOMSWITCH] = Cmd_forcerandomswitch,
+ [B_SCR_OP_TRYCONVERSIONTYPECHANGE] = Cmd_tryconversiontypechange,
+ [B_SCR_OP_GIVEPAYDAYMONEY] = Cmd_givepaydaymoney,
+ [B_SCR_OP_SETLIGHTSCREEN] = Cmd_setlightscreen,
+ [B_SCR_OP_TRYKO] = Cmd_tryKO,
+ [B_SCR_OP_CHECKNONVOLATILETRIGGER] = Cmd_checknonvolatiletrigger,
+ [B_SCR_OP_COPYBIDEDMG] = Cmd_copybidedmg,
+ [B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL] = Cmd_animatewildpokemonafterfailedpokeball,
+ [B_SCR_OP_TRYINFATUATING] = Cmd_tryinfatuating,
+ [B_SCR_OP_UPDATESTATUSICON] = Cmd_updatestatusicon,
+ [B_SCR_OP_SETMIST] = Cmd_setmist,
+ [B_SCR_OP_SETFOCUSENERGY] = Cmd_setfocusenergy,
+ [B_SCR_OP_TRANSFORMDATAEXECUTION] = Cmd_transformdataexecution,
+ [B_SCR_OP_SETSUBSTITUTE] = Cmd_setsubstitute,
+ [B_SCR_OP_MIMICATTACKCOPY] = Cmd_mimicattackcopy,
+ [B_SCR_OP_SETCALLEDMOVE] = Cmd_setcalledmove,
+ [B_SCR_OP_UNUSED_0x9F] = Cmd_unused_0x9f,
+ [B_SCR_OP_UNUSED_0xA0] = Cmd_unused_0xA0,
+ [B_SCR_OP_COUNTERDAMAGECALCULATOR] = Cmd_counterdamagecalculator,
+ [B_SCR_OP_MIRRORCOATDAMAGECALCULATOR] = Cmd_mirrorcoatdamagecalculator,
+ [B_SCR_OP_DISABLELASTUSEDATTACK] = Cmd_disablelastusedattack,
+ [B_SCR_OP_TRYSETENCORE] = Cmd_trysetencore,
+ [B_SCR_OP_PAINSPLITDMGCALC] = Cmd_painsplitdmgcalc,
+ [B_SCR_OP_SETTYPETORANDOMRESISTANCE] = Cmd_settypetorandomresistance,
+ [B_SCR_OP_SETALWAYSHITFLAG] = Cmd_setalwayshitflag,
+ [B_SCR_OP_COPYMOVEPERMANENTLY] = Cmd_copymovepermanently,
+ [B_SCR_OP_UNUSED_0xA9] = Cmd_unused_0xA9,
+ [B_SCR_OP_UNUSED_AA] = Cmd_unused_AA,
+ [B_SCR_OP_UNUSED_0xAB] = Cmd_unused_0xab,
+ [B_SCR_OP_SETTAILWIND] = Cmd_settailwind,
+ [B_SCR_OP_TRYSPITEPPREDUCE] = Cmd_tryspiteppreduce,
+ [B_SCR_OP_HEALPARTYSTATUS] = Cmd_healpartystatus,
+ [B_SCR_OP_CURSETARGET] = Cmd_cursetarget,
+ [B_SCR_OP_TRYSETSPIKES] = Cmd_trysetspikes,
+ [B_SCR_OP_SETVOLATILE] = Cmd_setvolatile,
+ [B_SCR_OP_TRYSETPERISHSONG] = Cmd_trysetperishsong,
+ [B_SCR_OP_HANDLEROLLOUT] = Cmd_handlerollout,
+ [B_SCR_OP_JUMPIFCONFUSEDANDSTATMAXED] = Cmd_jumpifconfusedandstatmaxed,
+ [B_SCR_OP_HANDLEFURYCUTTER] = Cmd_handlefurycutter,
+ [B_SCR_OP_SETEMBARGO] = Cmd_setembargo,
+ [B_SCR_OP_PRESENTDAMAGECALCULATION] = Cmd_presentdamagecalculation,
+ [B_SCR_OP_SETSAFEGUARD] = Cmd_setsafeguard,
+ [B_SCR_OP_MAGNITUDEDAMAGECALCULATION] = Cmd_magnitudedamagecalculation,
+ [B_SCR_OP_JUMPIFNOPURSUITSWITCHDMG] = Cmd_jumpifnopursuitswitchdmg,
+ [B_SCR_OP_TRYACTIVATEITEM] = Cmd_tryactivateitem,
+ [B_SCR_OP_HALVEHP] = Cmd_halvehp,
+ [B_SCR_OP_COPYFOESTATS] = Cmd_copyfoestats,
+ [B_SCR_OP_RAPIDSPINFREE] = Cmd_rapidspinfree,
+ [B_SCR_OP_UNUSED_0xBF] = Cmd_unused_0xBF,
+ [B_SCR_OP_RECOVERBASEDONSUNLIGHT] = Cmd_recoverbasedonsunlight,
+ [B_SCR_OP_SETSTICKYWEB] = Cmd_setstickyweb,
+ [B_SCR_OP_SELECTFIRSTVALIDTARGET] = Cmd_selectfirstvalidtarget,
+ [B_SCR_OP_SETFUTUREATTACK] = Cmd_setfutureattack,
+ [B_SCR_OP_TRYDOBEATUP] = Cmd_trydobeatup,
+ [B_SCR_OP_SETSEMIINVULNERABLEBIT] = Cmd_setsemiinvulnerablebit,
+ [B_SCR_OP_TRYFIRETWOTURNMOVENOWBYEFFECT] = Cmd_tryfiretwoturnmovenowbyeffect,
+ [B_SCR_OP_UNUSED_0xC7] = Cmd_unused_0xC7,
+ [B_SCR_OP_UNUSED_C8] = Cmd_unused_c8,
+ [B_SCR_OP_TRYMEMENTO] = Cmd_trymemento,
+ [B_SCR_OP_SETFORCEDTARGET] = Cmd_setforcedtarget,
+ [B_SCR_OP_UNUSED_0xCB] = Cmd_unused_0xcb,
+ [B_SCR_OP_UNUSED_0xCC] = Cmd_unused_0xCC,
+ [B_SCR_OP_CURESTATUSWITHMOVE] = Cmd_curestatuswithmove,
+ [B_SCR_OP_SETTORMENT] = Cmd_settorment,
+ [B_SCR_OP_JUMPIFNODAMAGE] = Cmd_jumpifnodamage,
+ [B_SCR_OP_SETTAUNT] = Cmd_settaunt,
+ [B_SCR_OP_TRYSETHELPINGHAND] = Cmd_trysethelpinghand,
+ [B_SCR_OP_TRYSWAPITEMS] = Cmd_tryswapitems,
+ [B_SCR_OP_TRYCOPYABILITY] = Cmd_trycopyability,
+ [B_SCR_OP_TRYWISH] = Cmd_trywish,
+ [B_SCR_OP_SETTOXICSPIKES] = Cmd_settoxicspikes,
+ [B_SCR_OP_SETGASTROACID] = Cmd_setgastroacid,
+ [B_SCR_OP_SETYAWN] = Cmd_setyawn,
+ [B_SCR_OP_SETDAMAGETOHEALTHDIFFERENCE] = Cmd_setdamagetohealthdifference,
+ [B_SCR_OP_SETROOM] = Cmd_setroom,
+ [B_SCR_OP_TRYSWAPABILITIES] = Cmd_tryswapabilities,
+ [B_SCR_OP_TRYIMPRISON] = Cmd_tryimprison,
+ [B_SCR_OP_SETSTEALTHROCK] = Cmd_setstealthrock,
+ [B_SCR_OP_TRYSETVOLATILE] = Cmd_trysetvolatile,
+ [B_SCR_OP_UNUSED_0xDE] = Cmd_unused_0xde,
+ [B_SCR_OP_TRYSETMAGICCOAT] = Cmd_trysetmagiccoat,
+ [B_SCR_OP_TRYSETSNATCH] = Cmd_trysetsnatch,
+ [B_SCR_OP_UNUSED2] = Cmd_unused2,
+ [B_SCR_OP_SWITCHOUTABILITIES] = Cmd_switchoutabilities,
+ [B_SCR_OP_JUMPIFHASNOHP] = Cmd_jumpifhasnohp,
+ [B_SCR_OP_UNUSED_0xE4] = Cmd_unused_0xE4,
+ [B_SCR_OP_PICKUP] = Cmd_pickup,
+ [B_SCR_OP_UNUSED_0xE6] = Cmd_unused_0xE6,
+ [B_SCR_OP_UNUSED_0xE7] = Cmd_unused_0xE7,
+ [B_SCR_OP_SETTYPEBASEDHALVERS] = Cmd_settypebasedhalvers,
+ [B_SCR_OP_JUMPIFSUBSTITUTEBLOCKS] = Cmd_jumpifsubstituteblocks,
+ [B_SCR_OP_TRYRECYCLEITEM] = Cmd_tryrecycleitem,
+ [B_SCR_OP_SETTYPETOENVIRONMENT] = Cmd_settypetoenvironment,
+ [B_SCR_OP_PURSUITDOUBLES] = Cmd_pursuitdoubles,
+ [B_SCR_OP_SNATCHSETBATTLERS] = Cmd_snatchsetbattlers,
+ [B_SCR_OP_REMOVESCREENS] = Cmd_removescreens,
+ [B_SCR_OP_HANDLEBALLTHROW] = Cmd_handleballthrow,
+ [B_SCR_OP_GIVECAUGHTMON] = Cmd_givecaughtmon,
+ [B_SCR_OP_TRYSETCAUGHTMONDEXFLAGS] = Cmd_trysetcaughtmondexflags,
+ [B_SCR_OP_DISPLAYDEXINFO] = Cmd_displaydexinfo,
+ [B_SCR_OP_TRYGIVECAUGHTMONNICK] = Cmd_trygivecaughtmonnick,
+ [B_SCR_OP_UNUSED_0xF4] = Cmd_unused_0xf4,
+ [B_SCR_OP_REMOVEATTACKERSTATUS1] = Cmd_removeattackerstatus1,
+ [B_SCR_OP_FINISHACTION] = Cmd_finishaction,
+ [B_SCR_OP_FINISHTURN] = Cmd_finishturn,
+ [B_SCR_OP_TRAINERSLIDEOUT] = Cmd_trainerslideout,
+ [B_SCR_OP_SETTELEKINESIS] = Cmd_settelekinesis,
+ [B_SCR_OP_SWAPSTATSTAGES] = Cmd_swapstatstages,
+ [B_SCR_OP_AVERAGESTATS] = Cmd_averagestats,
+ [B_SCR_OP_JUMPIFCAPTIVATEAFFECTED] = Cmd_jumpifcaptivateaffected,
+ [B_SCR_OP_SETNONVOLATILESTATUS] = Cmd_setnonvolatilestatus,
+ [B_SCR_OP_TRYOVERWRITEABILITY] = Cmd_tryoverwriteability,
+ [B_SCR_OP_CALLNATIVE] = Cmd_callnative,
};
const struct StatFractions gAccuracyStageRatios[] =
@@ -2952,9 +2952,11 @@ static void SetNonVolatileStatus(u32 effectBattler, enum MoveEffect effect, cons
{
case MOVE_EFFECT_SLEEP:
if (B_SLEEP_TURNS >= GEN_5)
- gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3));
+ gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 4));
+ else if (B_SLEEP_TURNS >= GEN_3)
+ gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 5));
else
- gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5));
+ gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 8));
TryActivateSleepClause(effectBattler, gBattlerPartyIndexes[effectBattler]);
gBattlescriptCurrInstr = BattleScript_MoveEffectSleep;
break;
@@ -4702,7 +4704,7 @@ static void Cmd_getexp(void)
if ((holdEffect == HOLD_EFFECT_EXP_SHARE || IsGen6ExpShareEnabled())
&& (B_SPLIT_EXP < GEN_6 || gBattleStruct->battlerExpReward == 0)) // only give exp share bonus in later gens if the mon wasn't sent out
{
- gBattleStruct->battlerExpReward += GetSoftLevelCapExpValue(gPlayerParty[*expMonId].level, gBattleStruct->expShareExpValue);;
+ gBattleStruct->battlerExpReward += GetSoftLevelCapExpValue(gPlayerParty[*expMonId].level, gBattleStruct->expShareExpValue);
}
ApplyExperienceMultipliers(&gBattleStruct->battlerExpReward, *expMonId, gBattlerFainted);
@@ -5905,16 +5907,29 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect)
&& !gBattleStruct->noTargetPresent)
{
s32 recoil = 0;
- if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE))
+ if (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ {
+ recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2;
+ }
+ if (B_RECOIL_IF_MISS_DMG >= GEN_5)
+ {
recoil = GetNonDynamaxMaxHP(gBattlerAttacker) / 2;
- else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget])
- recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2;
- else if (B_RECOIL_IF_MISS_DMG == GEN_3)
- recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2;
+ }
+ else if (B_RECOIL_IF_MISS_DMG >= GEN_3)
+ {
+ if ((GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget])
+ recoil = gBattleStruct->moveDamage[gBattlerTarget];
+ else
+ recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2;
+ }
else if (B_RECOIL_IF_MISS_DMG == GEN_2)
- recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 8;
+ {
+ recoil = gBattleStruct->moveDamage[gBattlerTarget] / 8;
+ }
else
+ {
recoil = 1;
+ }
SetPassiveDamageAmount(gBattlerAttacker, recoil);
BattleScriptCall(BattleScript_RecoilIfMiss);
effect = TRUE;
@@ -8773,7 +8788,7 @@ static void Cmd_setgravity(void)
}
}
-static bool32 TryCheekPouch(u32 battler, u32 itemId)
+static bool32 TryCheekPouch(u32 battler, u32 itemId, const u8 *nextInstr)
{
if (GetItemPocket(itemId) == POCKET_BERRIES
&& GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH
@@ -8783,7 +8798,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId)
{
gBattlerAbility = battler;
SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 3);
- BattleScriptPush(gBattlescriptCurrInstr + 2);
+ BattleScriptPush(nextInstr);
gBattlescriptCurrInstr = BattleScript_CheekPouchActivates;
return TRUE;
}
@@ -8863,7 +8878,7 @@ static void Cmd_removeitem(void)
MarkBattlerForControllerExec(battler);
ClearBattlerItemEffectHistory(battler);
- if (!TryCheekPouch(battler, itemId) && !TrySymbiosis(battler, itemId, FALSE))
+ if (!TryCheekPouch(battler, itemId, cmd->nextInstr) && !TrySymbiosis(battler, itemId, FALSE))
gBattlescriptCurrInstr = cmd->nextInstr;
}
@@ -9708,7 +9723,6 @@ static void Cmd_setprotectlike(void)
{
CMD_ARGS();
- bool32 protectFails = TRUE;
bool32 notLastTurn = TRUE;
u32 protectMethod = GetMoveProtectMethod(gCurrentMove);
@@ -9738,10 +9752,8 @@ static void Cmd_setprotectlike(void)
}
gDisableStructs[gBattlerAttacker].protectUses++;
- protectFails = FALSE;
}
-
- if (protectFails)
+ else // Protect failed
{
gDisableStructs[gBattlerAttacker].protectUses = 0;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED;
@@ -12214,6 +12226,10 @@ static void Cmd_tryactivateitem(void)
if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnHpThresholdActivation))
return;
break;
+ case ACTIVATION_ON_STATUS_CHANGE:
+ if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnStatusChangeActivation))
+ return;
+ break;
}
}
@@ -12496,7 +12512,7 @@ static void Cmd_trymemento(void)
{
CMD_ARGS(const u8 *failInstr);
- if (B_MEMENTO_FAIL >= GEN_4
+ if (B_MEMENTO_FAIL >= GEN_5
&& (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED
|| IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)
|| IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove)
@@ -13577,6 +13593,8 @@ static void Cmd_handleballthrow(void)
case BALL_SAFARI:
if (B_SAFARI_BALL_MODIFIER <= GEN_7)
ballMultiplier = 150;
+ else if (B_SAFARI_BALL_MODIFIER == GEN_1)
+ ballMultiplier = 200;
break;
case BALL_NET:
if (IS_BATTLER_ANY_TYPE(gBattlerTarget, TYPE_WATER, TYPE_BUG))
@@ -17893,7 +17911,15 @@ void BS_ConsumeBerry(void)
if (cmd->fromBattler)
gLastUsedItem = gBattleMons[battler].item;
- if (GetItemPocket(gLastUsedItem) != POCKET_BERRIES || gBattleScripting.overrideBerryRequirements == 2)
+ if (gBattleScripting.overrideBerryRequirements == 2)
+ {
+ gBattleScripting.overrideBerryRequirements = 0;
+ if (!cmd->fromBattler && TryCheekPouch(battler, gLastUsedItem, cmd->nextInstr))
+ return;
+ gBattlescriptCurrInstr = cmd->nextInstr;
+ return;
+ }
+ if (GetItemPocket(gLastUsedItem) != POCKET_BERRIES)
{
gBattleScripting.overrideBerryRequirements = 0;
gBattlescriptCurrInstr = cmd->nextInstr;
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 2b28bf7dc7..ffb826664d 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -2446,7 +2446,7 @@ static bool8 Mugshot_WaitPlayerSlide(struct Task *task)
else
{
return FALSE;
- }
+ }
}
else
{
@@ -2468,7 +2468,7 @@ static bool8 Mugshot_WaitPlayerSlide(struct Task *task)
else
{
return FALSE;
- }
+ }
}
return FALSE;
}
@@ -2634,7 +2634,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task)
task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender),
DISPLAY_WIDTH + 32,
106,
- 0, NULL);
+ 0, NULL);
opponentSpriteA = &gSprites[task->tOpponentSpriteAId];
playerSprite = &gSprites[task->tPlayerSpriteId];
diff --git a/src/battle_util.c b/src/battle_util.c
index 46347b7028..5493354f0c 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -64,7 +64,7 @@ static bool32 TryRemoveScreens(u32 battler);
static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler);
static u32 GetFlingPowerFromItemId(u32 itemId);
static void SetRandomMultiHitCounter();
-static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option);
+static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, bool32 abilityAffected, const u8 *battleScript, enum FunctionCallOption option);
static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum FunctionCallOption option);
static bool32 IsOpposingSideEmpty(u32 battler);
static void ResetParadoxWeatherStat(u32 battler);
@@ -4686,7 +4686,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
break;
case ABILITY_SHED_SKIN:
if ((gBattleMons[battler].status1 & STATUS1_ANY)
- && (B_ABILITY_TRIGGER_CHANCE == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3)))
+ && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3)))
{
ABILITY_HEAL_MON_STATUS:
if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
@@ -5110,7 +5110,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
{
u32 poison, paralysis, sleep;
- if (B_ABILITY_TRIGGER_CHANCE >= GEN_5)
+ if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_5)
{
poison = 9;
paralysis = 19;
@@ -5122,7 +5122,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
sleep = 30;
- i = RandomUniform(RNG_EFFECT_SPORE, 0, B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? 99 : 299);
+ i = RandomUniform(RNG_EFFECT_SPORE, 0, GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? 99 : 299);
if (i < poison)
goto POISON_POINT;
if (i < paralysis)
@@ -5148,7 +5148,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_POISON_POINT:
- if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3))
+ if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3))
{
POISON_POINT:
{
@@ -5170,7 +5170,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_STATIC:
- if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3))
+ if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3))
{
STATIC:
{
@@ -5197,7 +5197,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move)
&& IsBattlerTurnDamaged(gBattlerTarget)
&& CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
- && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3)))
+ && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3)))
{
gEffectBattler = gBattlerAttacker;
gBattleScripting.battler = gBattlerTarget;
@@ -5212,7 +5212,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& IsBattlerTurnDamaged(gBattlerTarget)
&& IsBattlerAlive(gBattlerTarget)
- && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3))
+ && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3))
&& !(gBattleMons[gBattlerAttacker].volatiles.infatuation)
&& AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)
&& !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_OBLIVIOUS)
@@ -6251,7 +6251,7 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abil
return TRUE;
}
-static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option)
+static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, bool32 abilityAffected, const u8 *battleScript, enum FunctionCallOption option)
{
if (battleScript != NULL)
{
@@ -7834,8 +7834,9 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx)
}
break;
case ABILITY_ORICHALCUM_PULSE:
- if ((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move))
- modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333));
+ if ((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move)
+ && ctx->holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA)
+ modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333));
break;
case ABILITY_HADRON_ENGINE:
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IsBattleMoveSpecial(move))
@@ -8522,8 +8523,20 @@ s32 DoFixedDamageMoveCalc(struct DamageContext *ctx)
dmg = gBattleMons[ctx->battlerAtk].level;
break;
case EFFECT_PSYWAVE:
- randDamage = B_PSYWAVE_DMG >= GEN_5 ? (Random() % 101) : ((Random() % 11) * 10);
- dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100;
+ if (B_PSYWAVE_DMG >= GEN_5)
+ {
+ randDamage = Random() % 101;
+ dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100;
+ }
+ else if (B_PSYWAVE_DMG >= GEN_3)
+ {
+ randDamage = Random() % 11;
+ dmg = gBattleMons[ctx->battlerAtk].level * ((randDamage * 10) + 50) / 100;
+ }
+ else
+ {
+ dmg = Random() % ((gBattleMons[ctx->battlerAtk].level + (gBattleMons[ctx->battlerAtk].level / 2)) + 1);
+ }
break;
case EFFECT_FIXED_HP_DAMAGE:
dmg = GetMoveFixedHPDamage(ctx->move);
diff --git a/src/data/items.h b/src/data/items.h
index 03115a92c0..72cbaa8b1d 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -544,7 +544,7 @@ const struct Item gItemsInfo[] =
[ITEM_SPORT_BALL] =
{
.name = ITEM_NAME("竞赛球"),
- .price = (I_PRICE < GEN_3 || I_PRICE >= GEN_9) ? 0 : 300,
+ .price = (I_PRICE <= GEN_3 || I_PRICE >= GEN_9) ? 0 : 300,
.description = COMPOUND_STRING(
"曾在城都地区的捕\n"
"虫大赛上使用的特\n"
@@ -938,7 +938,13 @@ const struct Item gItemsInfo[] =
[ITEM_BURN_HEAL] =
{
.name = ITEM_NAME("灼伤药"),
- .price = (I_PRICE == GEN_7) ? 300 : ((I_PRICE <= GEN_7) ? 250 : 200),
+ #if I_PRICE >= GEN_8
+ .price = 200,
+ #elif I_PRICE == GEN_7
+ .price = 300,
+ #else
+ .price = 250,
+ #endif
.description = COMPOUND_STRING(
"喷雾式药水。能治\n"
"愈宝可梦的灼伤状\n"
@@ -957,7 +963,13 @@ const struct Item gItemsInfo[] =
[ITEM_ICE_HEAL] =
{
.name = ITEM_NAME("解冻药"),
- .price = (I_PRICE == GEN_7) ? 100 : ((I_PRICE <= GEN_7) ? 250 : 200),
+ #if I_PRICE >= GEN_8
+ .price = 200,
+ #elif I_PRICE == GEN_7
+ .price = 100,
+ #else
+ .price = 250,
+ #endif
.description = COMPOUND_STRING(
"喷雾式药水。能治\n"
"愈宝可梦的冰冻状\n"
@@ -976,7 +988,13 @@ const struct Item gItemsInfo[] =
[ITEM_AWAKENING] =
{
.name = ITEM_NAME("解眠药"),
- .price = (I_PRICE >= GEN_2 && I_PRICE <= GEN_6) ? 250 : ((I_PRICE == GEN_7) ? 100 : 200),
+ #if (I_PRICE >= GEN_8 || I_PRICE == GEN_1)
+ .price = 200,
+ #elif I_PRICE == GEN_7
+ .price = 100,
+ #else
+ .price = 250,
+ #endif
.description = COMPOUND_STRING(
"喷雾式药水。能治\n"
"愈宝可梦的睡眠状\n"
@@ -1409,7 +1427,13 @@ const struct Item gItemsInfo[] =
[ITEM_PP_UP] =
{
.name = ITEM_NAME("PP提升剂"),
- .price = (I_PRICE == GEN_1) ? 1 : ((I_PRICE >= GEN_7) ? 10000 : 9800),
+ #if I_PRICE >= GEN_7
+ .price = 10000,
+ #elif I_PRICE >= GEN_2
+ .price = 9800,
+ #else
+ .price = 1,
+ #endif
.description = COMPOUND_STRING(
"能让宝可梦学会的\n"
"其中1个招式PP\n"
@@ -1539,7 +1563,13 @@ const struct Item gItemsInfo[] =
[ITEM_ABILITY_CAPSULE] =
{
.name = ITEM_NAME("特性胶囊"),
- .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE < GEN_9) ? 10000 : 100000),
+ #if I_PRICE >= GEN_9
+ .price = 100000,
+ #elif I_PRICE >= GEN_7
+ .price = 10000,
+ #else
+ .price = 1000,
+ #endif
.holdEffectParam = 0,
.description = COMPOUND_STRING(
"能让有着2种特性\n"
@@ -2476,7 +2506,13 @@ const struct Item gItemsInfo[] =
[ITEM_POKE_DOLL] =
{
.name = ITEM_NAME("皮皮玩偶"),
- .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE == GEN_7) ? 100 : 300),
+ #if I_PRICE >= GEN_8
+ .price = 300,
+ #elif I_PRICE == GEN_7
+ .price = 100,
+ #else
+ .price = 1000,
+ #endif
.description = sPokeDollDesc,
.pocket = POCKET_ITEMS,
.sortType = ITEM_TYPE_BATTLE_ITEM,
@@ -2592,7 +2628,13 @@ const struct Item gItemsInfo[] =
[ITEM_BIG_NUGGET] =
{
.name = ITEM_NAME("巨大金珠"),
- .price = (I_PRICE >= GEN_7) ? (40000 * TREASURE_FACTOR) : 20000,
+ #if I_PRICE >= GEN_7
+ .price = 40000 * TREASURE_FACTOR,
+ #elif I_PRICE == GEN_6
+ .price = 20000,
+ #else
+ .price = 0,
+ #endif
.description = COMPOUND_STRING(
"以纯金制成闪着金\n"
"光的大珠子。可以\n"
@@ -2601,7 +2643,7 @@ const struct Item gItemsInfo[] =
.sortType = ITEM_TYPE_SELLABLE,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .flingPower = 130,
+ .flingPower = B_UPDATED_MOVE_DATA >= GEN_8 ? 130 : 80,
.iconPic = gItemIcon_BigNugget,
.iconPalette = gItemIconPalette_BigNugget,
},
@@ -2640,7 +2682,13 @@ const struct Item gItemsInfo[] =
[ITEM_BALM_MUSHROOM] =
{
.name = ITEM_NAME("芳香蘑菇"),
- .price = (I_PRICE >= GEN_7) ? 15000 * TREASURE_FACTOR: 12500,
+ #if I_PRICE >= GEN_7
+ .price = 15000 * TREASURE_FACTOR,
+ #elif I_PRICE == GEN_6
+ .price = 12500,
+ #else
+ .price = 0,
+ #endif
.description = sBigMushroomDesc,
.pocket = POCKET_ITEMS,
.sortType = ITEM_TYPE_SELLABLE,
@@ -2688,7 +2736,15 @@ const struct Item gItemsInfo[] =
[ITEM_PEARL_STRING] =
{
.name = ITEM_NAME("丸子珍珠"),
- .price = (I_PRICE >= GEN_8) ? 15000 * TREASURE_FACTOR: ((I_PRICE == GEN_7) ? 30000 : 15000),
+ #if I_PRICE >= GEN_8
+ .price = 20000 * TREASURE_FACTOR,
+ #elif I_PRICE == GEN_7
+ .price = 30000,
+ #elif I_PRICE == GEN_6
+ .price = 15000,
+ #else
+ .price = 0,
+ #endif
.description = COMPOUND_STRING(
"散发着光泽且非常\n"
"大颗的珍珠。可以\n"
@@ -2861,7 +2917,13 @@ const struct Item gItemsInfo[] =
[ITEM_HONEY] =
{
.name = ITEM_NAME("甜甜蜜"),
- .price = (I_PRICE < GEN_5) ? 100 : ((I_PRICE < GEN_8) ? 300 : 900),
+ #if I_PRICE >= GEN_8
+ .price = 900,
+ #elif I_PRICE == GEN_7
+ .price = 300,
+ #else
+ .price = 100,
+ #endif
.description = COMPOUND_STRING(
"宝可梦采集的清甜\n"
"芬芳的花蜜。可在\n"
@@ -2961,7 +3023,7 @@ const struct Item gItemsInfo[] =
[ITEM_RELIC_GOLD] =
{
.name = ITEM_NAME("古代金币"),
- .price = 0,
+ .price = (I_PRICE >= GEN_6) ? 60000 : 0,
.description = COMPOUND_STRING(
"约3000年前的\n"
"文明使用的金币。"),
@@ -3509,11 +3571,18 @@ const struct Item gItemsInfo[] =
},
// Apricorns
+ #if (I_PRICE >= GEN_8 || I_PRICE <= GEN_2)
+ #define APRICORN_PRICE 200
+ #elif I_PRICE >= GEN_5
+ #define APRICORN_PRICE 20
+ #else
+ #define APRICORN_PRICE 0
+ #endif
[ITEM_RED_APRICORN] =
{
.name = ITEM_NAME("红球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"红色的球果。有种\n"
"刺鼻的气味。"),
@@ -3528,7 +3597,7 @@ const struct Item gItemsInfo[] =
[ITEM_BLUE_APRICORN] =
{
.name = ITEM_NAME("蓝球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"蓝色的球果。略有\n"
"一股青草的香味。"),
@@ -3543,7 +3612,7 @@ const struct Item gItemsInfo[] =
[ITEM_YELLOW_APRICORN] =
{
.name = ITEM_NAME("黄球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"黄色的球果。有种\n"
"清爽的香味。"),
@@ -3558,7 +3627,7 @@ const struct Item gItemsInfo[] =
[ITEM_GREEN_APRICORN] =
{
.name = ITEM_NAME("绿球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"绿色的球果。有种\n"
"焦香的香味,非常\n"
@@ -3574,7 +3643,7 @@ const struct Item gItemsInfo[] =
[ITEM_PINK_APRICORN] =
{
.name = ITEM_NAME("粉球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"粉红色的球果。有\n"
"种甜甜的,好闻的\n"
@@ -3590,7 +3659,7 @@ const struct Item gItemsInfo[] =
[ITEM_WHITE_APRICORN] =
{
.name = ITEM_NAME("白球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"白色的球果。没有\n"
"任何气味。"),
@@ -3605,7 +3674,7 @@ const struct Item gItemsInfo[] =
[ITEM_BLACK_APRICORN] =
{
.name = ITEM_NAME("黑球果"),
- .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200),
+ .price = APRICORN_PRICE,
.description = COMPOUND_STRING(
"黑色的球果。有种\n"
"无法形容的气味。"),
@@ -3978,7 +4047,15 @@ const struct Item gItemsInfo[] =
[ITEM_MOON_STONE] =
{
.name = ITEM_NAME("月之石"),
- .price = (I_PRICE >= GEN_7) ? 3000 : 2100,
+ #if I_PRICE >= GEN_7
+ .price = 3000,
+ #elif I_PRICE >= GEN_4
+ .price = 2100,
+ #elif I_PRICE == GEN_3
+ .price = 0,
+ #else
+ .price = 1,
+ #endif
.description = sEvolutionStoneDesc,
.pocket = POCKET_ITEMS,
.sortType = ITEM_TYPE_EVOLUTION_STONE,
@@ -4275,7 +4352,13 @@ const struct Item gItemsInfo[] =
[ITEM_PRISM_SCALE] =
{
.name = ITEM_NAME("美丽鳞片"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 2000 : 500),
+ #if I_PRICE >= GEN_9
+ .price = 3000,
+ #elif I_PRICE >= GEN_7
+ .price = 2000,
+ #else
+ .price = 500,
+ #endif
.description = COMPOUND_STRING(
"能让某些宝可梦进\n"
"化的神奇鳞片。散\n"
@@ -6678,11 +6761,18 @@ const struct Item gItemsInfo[] =
},
// Gems
+ #if I_PRICE >= GEN_9
+ #define GEM_PRICE 15000
+ #elif I_PRICE >= GEN_7
+ #define GEM_PRICE 4000
+ #else
+ #define GEM_PRICE 200
+ #endif
[ITEM_NORMAL_GEM] =
{
.name = ITEM_NAME("一般宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6701,7 +6791,7 @@ const struct Item gItemsInfo[] =
[ITEM_FIRE_GEM] =
{
.name = ITEM_NAME("火之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6720,7 +6810,7 @@ const struct Item gItemsInfo[] =
[ITEM_WATER_GEM] =
{
.name = ITEM_NAME("水之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6739,7 +6829,7 @@ const struct Item gItemsInfo[] =
[ITEM_ELECTRIC_GEM] =
{
.name = ITEM_NAME("电之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6758,7 +6848,7 @@ const struct Item gItemsInfo[] =
[ITEM_GRASS_GEM] =
{
.name = ITEM_NAME("草之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6777,7 +6867,7 @@ const struct Item gItemsInfo[] =
[ITEM_ICE_GEM] =
{
.name = ITEM_NAME("冰之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6796,7 +6886,7 @@ const struct Item gItemsInfo[] =
[ITEM_FIGHTING_GEM] =
{
.name = ITEM_NAME("格斗宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6815,7 +6905,7 @@ const struct Item gItemsInfo[] =
[ITEM_POISON_GEM] =
{
.name = ITEM_NAME("毒之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6834,7 +6924,7 @@ const struct Item gItemsInfo[] =
[ITEM_GROUND_GEM] =
{
.name = ITEM_NAME("地面宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6853,7 +6943,7 @@ const struct Item gItemsInfo[] =
[ITEM_FLYING_GEM] =
{
.name = ITEM_NAME("飞行宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6872,7 +6962,7 @@ const struct Item gItemsInfo[] =
[ITEM_PSYCHIC_GEM] =
{
.name = ITEM_NAME("超能力宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6891,7 +6981,7 @@ const struct Item gItemsInfo[] =
[ITEM_BUG_GEM] =
{
.name = ITEM_NAME("虫之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6910,7 +7000,7 @@ const struct Item gItemsInfo[] =
[ITEM_ROCK_GEM] =
{
.name = ITEM_NAME("岩石宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6929,7 +7019,7 @@ const struct Item gItemsInfo[] =
[ITEM_GHOST_GEM] =
{
.name = ITEM_NAME("幽灵宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6948,7 +7038,7 @@ const struct Item gItemsInfo[] =
[ITEM_DRAGON_GEM] =
{
.name = ITEM_NAME("龙之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6967,7 +7057,7 @@ const struct Item gItemsInfo[] =
[ITEM_DARK_GEM] =
{
.name = ITEM_NAME("恶之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -6986,7 +7076,7 @@ const struct Item gItemsInfo[] =
[ITEM_STEEL_GEM] =
{
.name = ITEM_NAME("钢之宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -7005,7 +7095,7 @@ const struct Item gItemsInfo[] =
[ITEM_FAIRY_GEM] =
{
.name = ITEM_NAME("妖精宝石"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ .price = GEM_PRICE,
.holdEffect = HOLD_EFFECT_GEMS,
.holdEffectParam = GEM_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -7884,7 +7974,7 @@ const struct Item gItemsInfo[] =
.name = ITEM_NAME("海潮薰香"),
.price = (I_PRICE >= GEN_7) ? 2000 : 9600,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
- .holdEffectParam = 20,
+ .holdEffectParam = I_TYPE_BOOST_POWER >= GEN_4 ? 20 : 5,
.description = sSeaIncenseDesc,
.pocket = POCKET_ITEMS,
.sortType = ITEM_TYPE_INCENSE,
@@ -8257,11 +8347,18 @@ const struct Item gItemsInfo[] =
},
// Type-boosting Held Items
+ #if I_PRICE >= GEN_9
+ #define TYPE_BOOSTING_PRICE 3000
+ #elif I_PRICE >= GEN_7
+ #define TYPE_BOOSTING_PRICE 1000
+ #else
+ #define TYPE_BOOSTING_PRICE 100
+ #endif
[ITEM_SILK_SCARF] =
{
.name = ITEM_NAME("丝绸围巾"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8281,7 +8378,13 @@ const struct Item gItemsInfo[] =
[ITEM_CHARCOAL] =
{
.name = ITEM_NAME("木炭"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 9800),
+ #if I_PRICE >= GEN_9
+ .price = 3000,
+ #elif I_PRICE >= GEN_7
+ .price = 1000,
+ #else
+ .price = 9800,
+ #endif
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8301,7 +8404,7 @@ const struct Item gItemsInfo[] =
[ITEM_MYSTIC_WATER] =
{
.name = ITEM_NAME("神秘水滴"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8321,7 +8424,7 @@ const struct Item gItemsInfo[] =
[ITEM_MAGNET] =
{
.name = ITEM_NAME("磁铁"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8341,7 +8444,7 @@ const struct Item gItemsInfo[] =
[ITEM_MIRACLE_SEED] =
{
.name = ITEM_NAME("奇迹种子"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = sRoseIncenseDesc,
@@ -8358,7 +8461,7 @@ const struct Item gItemsInfo[] =
[ITEM_NEVER_MELT_ICE] =
{
.name = ITEM_NAME("不融冰"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8378,7 +8481,7 @@ const struct Item gItemsInfo[] =
[ITEM_BLACK_BELT] =
{
.name = ITEM_NAME("黑带"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8398,7 +8501,7 @@ const struct Item gItemsInfo[] =
[ITEM_POISON_BARB] =
{
.name = ITEM_NAME("毒针"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8418,7 +8521,7 @@ const struct Item gItemsInfo[] =
[ITEM_SOFT_SAND] =
{
.name = ITEM_NAME("柔软沙子"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8438,7 +8541,7 @@ const struct Item gItemsInfo[] =
[ITEM_SHARP_BEAK] =
{
.name = ITEM_NAME("锐利鸟嘴"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8458,7 +8561,7 @@ const struct Item gItemsInfo[] =
[ITEM_TWISTED_SPOON] =
{
.name = ITEM_NAME("弯曲的汤匙"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = sOddIncenseDesc,
@@ -8475,7 +8578,7 @@ const struct Item gItemsInfo[] =
[ITEM_SILVER_POWDER] =
{
.name = ITEM_NAME("银粉"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8495,7 +8598,7 @@ const struct Item gItemsInfo[] =
[ITEM_HARD_STONE] =
{
.name = ITEM_NAME("硬石头"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = sRockIncenseDesc,
@@ -8512,7 +8615,7 @@ const struct Item gItemsInfo[] =
[ITEM_SPELL_TAG] =
{
.name = ITEM_NAME("咒术之符"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8532,7 +8635,7 @@ const struct Item gItemsInfo[] =
[ITEM_DRAGON_FANG] =
{
.name = ITEM_NAME("龙之牙"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8552,7 +8655,7 @@ const struct Item gItemsInfo[] =
[ITEM_BLACK_GLASSES] =
{
.name = ITEM_NAME("黑色眼镜"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
+ .price = TYPE_BOOSTING_PRICE,
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8572,7 +8675,13 @@ const struct Item gItemsInfo[] =
[ITEM_METAL_COAT] =
{
.name = ITEM_NAME("金属膜"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 2000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 3000,
+ #elif I_PRICE >= GEN_7
+ .price = 2000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_TYPE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
.description = COMPOUND_STRING(
@@ -8595,7 +8704,13 @@ const struct Item gItemsInfo[] =
[ITEM_CHOICE_BAND] =
{
.name = ITEM_NAME("讲究头带"),
- .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 100000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_CHOICE_BAND,
.description = COMPOUND_STRING(
"有点讲究的头带。\n"
@@ -8613,7 +8728,13 @@ const struct Item gItemsInfo[] =
[ITEM_CHOICE_SPECS] =
{
.name = ITEM_NAME("讲究眼镜"),
- .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 100000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_CHOICE_SPECS,
.description = COMPOUND_STRING(
"有点讲究的眼镜。\n"
@@ -8631,7 +8752,13 @@ const struct Item gItemsInfo[] =
[ITEM_CHOICE_SCARF] =
{
.name = ITEM_NAME("讲究围巾"),
- .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 100000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_CHOICE_SCARF,
.description = COMPOUND_STRING(
"有点讲究的围巾。\n"
@@ -8651,7 +8778,13 @@ const struct Item gItemsInfo[] =
[ITEM_FLAME_ORB] =
{
.name = ITEM_NAME("火焰宝珠"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_FLAME_ORB,
.description = COMPOUND_STRING(
"会放出热量的神奇\n"
@@ -8669,7 +8802,13 @@ const struct Item gItemsInfo[] =
[ITEM_TOXIC_ORB] =
{
.name = ITEM_NAME("剧毒宝珠"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_TOXIC_ORB,
.description = COMPOUND_STRING(
"会放出毒的神奇宝\n"
@@ -8689,7 +8828,13 @@ const struct Item gItemsInfo[] =
[ITEM_DAMP_ROCK] =
{
.name = ITEM_NAME("潮湿岩石"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_DAMP_ROCK,
.description = COMPOUND_STRING(
"携带宝可梦使出求\n"
@@ -8707,7 +8852,13 @@ const struct Item gItemsInfo[] =
[ITEM_HEAT_ROCK] =
{
.name = ITEM_NAME("炽热岩石"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_HEAT_ROCK,
.description = COMPOUND_STRING(
"携带宝可梦使出大\n"
@@ -8725,7 +8876,13 @@ const struct Item gItemsInfo[] =
[ITEM_SMOOTH_ROCK] =
{
.name = ITEM_NAME("沙沙岩石"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_SMOOTH_ROCK,
.description = COMPOUND_STRING(
"携带宝可梦使出沙\n"
@@ -8743,7 +8900,13 @@ const struct Item gItemsInfo[] =
[ITEM_ICY_ROCK] =
{
.name = ITEM_NAME("冰冷岩石"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_ICY_ROCK,
.description = COMPOUND_STRING(
"携带宝可梦使出冰\n"
@@ -8841,7 +9004,13 @@ const struct Item gItemsInfo[] =
[ITEM_ABSORB_BULB] =
{
.name = ITEM_NAME("球根"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_ABSORB_BULB,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -8860,7 +9029,13 @@ const struct Item gItemsInfo[] =
[ITEM_CELL_BATTERY] =
{
.name = ITEM_NAME("充电电池"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_CELL_BATTERY,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -8879,7 +9054,13 @@ const struct Item gItemsInfo[] =
[ITEM_LUMINOUS_MOSS] =
{
.name = ITEM_NAME("光苔"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 1000),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 1000,
+ #endif
.holdEffect = HOLD_EFFECT_LUMINOUS_MOSS,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -8898,7 +9079,13 @@ const struct Item gItemsInfo[] =
[ITEM_SNOWBALL] =
{
.name = ITEM_NAME("雪丸"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_SNOWBALL,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -8919,7 +9106,13 @@ const struct Item gItemsInfo[] =
[ITEM_BRIGHT_POWDER] =
{
.name = ITEM_NAME("光粉"),
- .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 10),
+ #if I_PRICE >= GEN_9
+ .price = 30000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 10,
+ #endif
.holdEffect = HOLD_EFFECT_EVASION_UP,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -8938,7 +9131,13 @@ const struct Item gItemsInfo[] =
[ITEM_WHITE_HERB] =
{
.name = ITEM_NAME("白色香草"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_WHITE_HERB,
.description = COMPOUND_STRING(
"当携带宝可梦能力\n"
@@ -8958,11 +9157,20 @@ const struct Item gItemsInfo[] =
.name = ITEM_NAME("学习装置"),
.holdEffect = HOLD_EFFECT_EXP_SHARE,
.price = 0,
+ .importance = 1,
.description = COMPOUND_STRING(
- "打开后,能让同行\n"
- "的所有宝可梦获得\n"
- "经验值的装置。"),
- .pocket = I_EXP_SHARE_ITEM >= GEN_6 ? POCKET_KEY_ITEMS : POCKET_ITEMS,
+ "打开后,能让同行\n"
+ "的所有宝可梦获得\n"
+ "经验值的装置。"),
+ .pocket = POCKET_KEY_ITEMS,
+ #else
+ .price = (I_PRICE == GEN_1) ? 1 : 3000,
+ .description = COMPOUND_STRING(
+ "携带后,能让同行\n"
+ "的所有宝可梦获得\n"
+ "经验值的装置。"),
+ .pocket = POCKET_ITEMS,
+ #endif
.sortType = ITEM_TYPE_HELD_ITEM,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_ExpShare,
@@ -8974,7 +9182,13 @@ const struct Item gItemsInfo[] =
[ITEM_QUICK_CLAW] =
{
.name = ITEM_NAME("先制之爪"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_QUICK_CLAW,
.holdEffectParam = 20,
.description = COMPOUND_STRING(
@@ -8993,7 +9207,13 @@ const struct Item gItemsInfo[] =
[ITEM_SOOTHE_BELL] =
{
.name = ITEM_NAME("安抚之铃"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_FRIENDSHIP_UP,
.description = COMPOUND_STRING(
"音色悦耳的铃铛。\n"
@@ -9011,7 +9231,13 @@ const struct Item gItemsInfo[] =
[ITEM_MENTAL_HERB] =
{
.name = ITEM_NAME("心灵香草"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_MENTAL_HERB,
.description = COMPOUND_STRING(
"当携带宝可梦无法\n"
@@ -9029,7 +9255,13 @@ const struct Item gItemsInfo[] =
[ITEM_KINGS_ROCK] =
{
.name = ITEM_NAME("王者之证"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 5000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 5000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_FLINCH,
.holdEffectParam = 10,
.description = sKingsRockDesc,
@@ -9046,7 +9278,13 @@ const struct Item gItemsInfo[] =
[ITEM_AMULET_COIN] =
{
.name = ITEM_NAME("护符金币"),
- .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 10000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 30000,
+ #elif I_PRICE >= GEN_7
+ .price = 10000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_DOUBLE_PRIZE,
.description = sLuckIncenseDesc,
.pocket = POCKET_ITEMS,
@@ -9076,7 +9314,13 @@ const struct Item gItemsInfo[] =
[ITEM_SMOKE_BALL] =
{
.name = ITEM_NAME("烟雾球"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN,
.description = COMPOUND_STRING(
"携带宝可梦在和野\n"
@@ -9094,7 +9338,13 @@ const struct Item gItemsInfo[] =
[ITEM_FOCUS_BAND] =
{
.name = ITEM_NAME("气势头带"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_FOCUS_BAND,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -9131,7 +9381,13 @@ const struct Item gItemsInfo[] =
[ITEM_SCOPE_LENS] =
{
.name = ITEM_NAME("焦点镜"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_SCOPE_LENS,
.description = COMPOUND_STRING(
"能看见弱点的镜片\n"
@@ -9149,7 +9405,13 @@ const struct Item gItemsInfo[] =
[ITEM_LEFTOVERS] =
{
.name = ITEM_NAME("吃剩的东西"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_LEFTOVERS,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -9168,7 +9430,13 @@ const struct Item gItemsInfo[] =
[ITEM_SHELL_BELL] =
{
.name = ITEM_NAME("贝壳之铃"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_SHELL_BELL,
.holdEffectParam = 8,
.description = COMPOUND_STRING(
@@ -9187,7 +9455,13 @@ const struct Item gItemsInfo[] =
[ITEM_WIDE_LENS] =
{
.name = ITEM_NAME("广角镜"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_WIDE_LENS,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -9206,7 +9480,13 @@ const struct Item gItemsInfo[] =
[ITEM_MUSCLE_BAND] =
{
.name = ITEM_NAME("力量头带"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_MUSCLE_BAND,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -9225,7 +9505,13 @@ const struct Item gItemsInfo[] =
[ITEM_WISE_GLASSES] =
{
.name = ITEM_NAME("博识眼镜"),
- .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 8000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_WISE_GLASSES,
.holdEffectParam = 10,
.description = COMPOUND_STRING(
@@ -9244,7 +9530,13 @@ const struct Item gItemsInfo[] =
[ITEM_EXPERT_BELT] =
{
.name = ITEM_NAME("达人带"),
- .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 30000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_EXPERT_BELT,
.holdEffectParam = 20,
.description = COMPOUND_STRING(
@@ -9264,7 +9556,13 @@ const struct Item gItemsInfo[] =
[ITEM_LIGHT_CLAY] =
{
.name = ITEM_NAME("光之黏土"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_LIGHT_CLAY,
.description = COMPOUND_STRING(
"当携带后使出光墙\n"
@@ -9282,7 +9580,13 @@ const struct Item gItemsInfo[] =
[ITEM_LIFE_ORB] =
{
.name = ITEM_NAME("生命宝珠"),
- .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 50000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_LIFE_ORB,
.description = COMPOUND_STRING(
"携带后,虽然每次\n"
@@ -9300,7 +9604,13 @@ const struct Item gItemsInfo[] =
[ITEM_POWER_HERB] =
{
.name = ITEM_NAME("强力香草"),
- .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 30000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_POWER_HERB,
.description = COMPOUND_STRING(
"携带宝可梦可有1\n"
@@ -9318,7 +9628,13 @@ const struct Item gItemsInfo[] =
[ITEM_FOCUS_SASH] =
{
.name = ITEM_NAME("气势披带"),
- .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 50000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_FOCUS_SASH,
.description = COMPOUND_STRING(
"满HP时即使受致\n"
@@ -9336,7 +9652,13 @@ const struct Item gItemsInfo[] =
[ITEM_ZOOM_LENS] =
{
.name = ITEM_NAME("对焦镜"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_ZOOM_LENS,
.holdEffectParam = 20,
.description = COMPOUND_STRING(
@@ -9355,7 +9677,13 @@ const struct Item gItemsInfo[] =
[ITEM_METRONOME] =
{
.name = ITEM_NAME("节拍器"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_METRONOME,
.holdEffectParam = 20,
.description = COMPOUND_STRING(
@@ -9374,7 +9702,13 @@ const struct Item gItemsInfo[] =
[ITEM_IRON_BALL] =
{
.name = ITEM_NAME("黑色铁球"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_IRON_BALL,
.description = COMPOUND_STRING(
"携带后速度降低。\n"
@@ -9393,7 +9727,13 @@ const struct Item gItemsInfo[] =
[ITEM_LAGGING_TAIL] =
{
.name = ITEM_NAME("后攻之尾"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_LAGGING_TAIL,
.description = sFullIncenseDesc,
.pocket = POCKET_ITEMS,
@@ -9408,7 +9748,13 @@ const struct Item gItemsInfo[] =
[ITEM_DESTINY_KNOT] =
{
.name = ITEM_NAME("红线"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_DESTINY_KNOT,
.description = COMPOUND_STRING(
"携带后,在自己着\n"
@@ -9426,7 +9772,13 @@ const struct Item gItemsInfo[] =
[ITEM_BLACK_SLUDGE] =
{
.name = ITEM_NAME("黑色污泥"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_BLACK_SLUDGE,
.description = COMPOUND_STRING(
"携带后毒宝可梦会\n"
@@ -9444,7 +9796,13 @@ const struct Item gItemsInfo[] =
[ITEM_GRIP_CLAW] =
{
.name = ITEM_NAME("紧缠钩爪"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_GRIP_CLAW,
.description = COMPOUND_STRING(
"携带后,绑紧紧束\n"
@@ -9462,7 +9820,13 @@ const struct Item gItemsInfo[] =
[ITEM_STICKY_BARB] =
{
.name = ITEM_NAME("附着针"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_STICKY_BARB,
.description = COMPOUND_STRING(
"携带后,每回合都\n"
@@ -9480,7 +9844,13 @@ const struct Item gItemsInfo[] =
[ITEM_SHED_SHELL] =
{
.name = ITEM_NAME("美丽空壳"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 100),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 100,
+ #endif
.holdEffect = HOLD_EFFECT_SHED_SHELL,
.description = COMPOUND_STRING(
"结实坚硬的空壳。\n"
@@ -9498,7 +9868,13 @@ const struct Item gItemsInfo[] =
[ITEM_BIG_ROOT] =
{
.name = ITEM_NAME("大根茎"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_BIG_ROOT,
.holdEffectParam = 30,
.description = COMPOUND_STRING(
@@ -9517,7 +9893,13 @@ const struct Item gItemsInfo[] =
[ITEM_RAZOR_CLAW] =
{
.name = ITEM_NAME("锐利之爪"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 5000 : 2100),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 5000,
+ #else
+ .price = 2100,
+ #endif
.holdEffect = HOLD_EFFECT_SCOPE_LENS,
.description = COMPOUND_STRING(
"尖锐的爪子。携带\n"
@@ -9536,7 +9918,13 @@ const struct Item gItemsInfo[] =
[ITEM_RAZOR_FANG] =
{
.name = ITEM_NAME("锐利之牙"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 5000 : 2100),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 5000,
+ #else
+ .price = 2100,
+ #endif
.holdEffect = HOLD_EFFECT_FLINCH,
.holdEffectParam = 10,
.description = sKingsRockDesc,
@@ -9553,7 +9941,13 @@ const struct Item gItemsInfo[] =
[ITEM_EVIOLITE] =
{
.name = ITEM_NAME("进化奇石"),
- .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 50000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_EVIOLITE,
.holdEffectParam = 50,
.description = COMPOUND_STRING(
@@ -9572,7 +9966,13 @@ const struct Item gItemsInfo[] =
[ITEM_FLOAT_STONE] =
{
.name = ITEM_NAME("轻石"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_FLOAT_STONE,
.description = COMPOUND_STRING(
"非常轻的石头。携\n"
@@ -9590,7 +9990,13 @@ const struct Item gItemsInfo[] =
[ITEM_ROCKY_HELMET] =
{
.name = ITEM_NAME("凸凸头盔"),
- .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 50000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_ROCKY_HELMET,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -9609,7 +10015,13 @@ const struct Item gItemsInfo[] =
[ITEM_AIR_BALLOON] =
{
.name = ITEM_NAME("气球"),
- .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 15000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_AIR_BALLOON,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -9628,7 +10040,13 @@ const struct Item gItemsInfo[] =
[ITEM_RED_CARD] =
{
.name = ITEM_NAME("红牌"),
- .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 3000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_RED_CARD,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -9647,7 +10065,13 @@ const struct Item gItemsInfo[] =
[ITEM_RING_TARGET] =
{
.name = ITEM_NAME("标靶"),
- .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 10000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_RING_TARGET,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -9666,7 +10090,13 @@ const struct Item gItemsInfo[] =
[ITEM_BINDING_BAND] =
{
.name = ITEM_NAME("紧绑束带"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_BINDING_BAND,
.description = COMPOUND_STRING(
"携带后,绑紧招式\n"
@@ -9684,7 +10114,13 @@ const struct Item gItemsInfo[] =
[ITEM_EJECT_BUTTON] =
{
.name = ITEM_NAME("逃脱按键"),
- .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 200),
+ #if I_PRICE >= GEN_9
+ .price = 30000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 200,
+ #endif
.holdEffect = HOLD_EFFECT_EJECT_BUTTON,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -9741,7 +10177,13 @@ const struct Item gItemsInfo[] =
[ITEM_SAFETY_GOGGLES] =
{
.name = ITEM_NAME("防尘护目镜"),
- .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 1000),
+ #if I_PRICE >= GEN_9
+ .price = 20000,
+ #elif I_PRICE >= GEN_7
+ .price = 4000,
+ #else
+ .price = 1000,
+ #endif
.holdEffect = HOLD_EFFECT_SAFETY_GOGGLES,
.description = COMPOUND_STRING(
"能防御天气伤害和\n"
@@ -9759,7 +10201,13 @@ const struct Item gItemsInfo[] =
[ITEM_ADRENALINE_ORB] =
{
.name = ITEM_NAME("胆怯球"),
- .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300),
+ #if I_PRICE >= GEN_9
+ .price = 5000,
+ #elif I_PRICE == GEN_8
+ .price = 4000,
+ #else
+ .price = 300,
+ #endif
.holdEffect = HOLD_EFFECT_ADRENALINE_ORB,
.description = COMPOUND_STRING(
"携带后,在受到威\n"
@@ -12700,6 +13148,7 @@ const struct Item gItemsInfo[] =
{
.name = ITEM_NAME("极巨腕带"),
.price = 0,
+ .importance = 1,
.description = COMPOUND_STRING(
"内嵌了许愿星,在\n"
"能量点会发出光芒\n"
diff --git a/src/data/moves_info.h b/src/data/moves_info.h
index f8a980e467..cbf5ec9ae9 100644
--- a/src/data/moves_info.h
+++ b/src/data/moves_info.h
@@ -3159,7 +3159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.copycatBanned = TRUE,
.sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3,
.instructBanned = TRUE,
- .encoreBanned = TRUE,
+ .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.assistBanned = TRUE,
.contestEffect = C_UPDATED_MOVE_EFFECTS >= GEN_6 ? CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING : CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
@@ -5692,7 +5692,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.sleepTalkBanned = TRUE,
.instructBanned = TRUE,
.mimicBanned = TRUE,
- .encoreBanned = TRUE,
+ .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.assistBanned = TRUE,
.contestEffect = C_UPDATED_MOVE_EFFECTS >= GEN_6 ? CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING : CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
@@ -7069,7 +7069,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.copycatBanned = TRUE,
.sleepTalkBanned = TRUE,
.instructBanned = TRUE,
- .encoreBanned = TRUE,
+ .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.assistBanned = B_UPDATED_MOVE_FLAGS >= GEN_6,
.mimicBanned = TRUE,
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
@@ -7255,7 +7255,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.ignoresProtect = TRUE,
- .mirrorMoveBanned = TRUE,
+ .mirrorMoveBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4,
.copycatBanned = TRUE,
.sleepTalkBanned = TRUE,
@@ -8815,7 +8815,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_DEF_UP_1 },
- .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6,
+ .ignoresProtect = (B_UPDATED_MOVE_FLAGS >= GEN_6 || B_UPDATED_MOVE_FLAGS < GEN_3),
.magicCoatAffected = TRUE,
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
@@ -9972,7 +9972,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.copycatBanned = TRUE,
.sleepTalkBanned = TRUE,
.instructBanned = TRUE,
- .encoreBanned = TRUE,
+ .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.assistBanned = TRUE,
.mimicBanned = TRUE,
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
@@ -10003,7 +10003,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.copycatBanned = TRUE,
.sleepTalkBanned = TRUE,
.instructBanned = TRUE,
- .encoreBanned = TRUE,
+ .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3),
.assistBanned = TRUE,
.mimicBanned = TRUE,
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
@@ -11597,6 +11597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
.sleepTalkBanned = TRUE,
.instructBanned = TRUE,
.assistBanned = TRUE,
+ .sketchBanned = TRUE,
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_CONFUSION,
#if B_UPDATED_MOVE_DATA >= GEN_6
diff --git a/src/debug.c b/src/debug.c
index c9a0f8a022..a3d1e05392 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -1,12 +1,3 @@
-//CREDITS
-//TheXaman: https://github.com/TheXaman/pokeemerald/tree/tx_debug_system
-//CODE USED FROM:
-//ketsuban: https://github.com/pret/pokeemerald/wiki/Add-a-debug-menu
-//Pyredrid: https://github.com/Pyredrid/pokeemerald/tree/debugmenu
-//AsparagusEduardo: https://github.com/AsparagusEduardo/pokeemerald/tree/InfusedEmerald_v2
-//Ghoulslash: https://github.com/ghoulslash/pokeemerald
-//Jaizu: https://jaizu.moe/
-//AND OTHER RHH POKEEMERALD-EXPANSION CONTRIBUTORS
#include "global.h"
#include "battle.h"
#include "battle_setup.h"
@@ -2086,7 +2077,7 @@ static void Debug_Display_ItemInfo(u32 itemId, u32 digit, u8 windowId)
else if (CheckIfItemIsTMHMOrEvolutionStone(itemId) == 1)
{
end = StringCopy(end, COMPOUND_STRING(" None"));
- }
+ }
WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(windowId));
StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15);
diff --git a/src/decompress_asm.s b/src/decompress_asm.s
index 9704d83a6a..758a5fa7a0 100644
--- a/src/decompress_asm.s
+++ b/src/decompress_asm.s
@@ -6,7 +6,7 @@
.global FastUnsafeCopy32
.type FastUnsafeCopy32, %function
-
+
@ Word aligned, 32-byte copy
@ This function WILL overwrite your buffer, so make sure it is at least 32 bytes larger than the desired size.
FastUnsafeCopy32:
@@ -18,10 +18,7 @@ FastUnsafeCopy32:
bgt .Lloop_32
pop {r4-r10}
bx lr
-
-
-@ Credit to: luckytyphlosion as it's his implementation
-
+
.section .text @Copied to stack on run-time
.align 2
@@ -126,6 +123,6 @@ LZ77_EightBlockLoop_HandleLoop:
LZ77_Done:
pop {r4, r5, r6, lr}
bx lr
-
+
.global LZ77UnCompWRAMOptimized_end
LZ77UnCompWRAMOptimized_end:
diff --git a/src/dexnav.c b/src/dexnav.c
index 7b0099727f..14ff6bc335 100644
--- a/src/dexnav.c
+++ b/src/dexnav.c
@@ -107,6 +107,7 @@ struct DexNavSearch
u8 starSpriteIds[3];
u8 ownedIconSpriteId;
u8 exclamationSpriteId;
+ u32 startingTime;
u8 hiddenSearch:1;
u8 isHiddenMon:1;
u8 unk:6;
@@ -155,11 +156,10 @@ static u8 DexNavPickTile(enum EncounterType environment, u8 xSize, u8 ySize, boo
static void DexNavProximityUpdate(void);
static void DexNavDrawIcons(void);
static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel);
-static void Task_DexNavSearch(u8 taskId);
-static void EndDexNavSearchSetupScript(const u8 *script, u8 taskId);
// HIDDEN MONS
static void DexNavDrawHiddenIcons(void);
static void DrawHiddenSearchWindow(u8 width);
+static void RevealHiddenMon(void);
//// Const Data
// gui image data
@@ -818,16 +818,8 @@ static u8 GetSearchLevel(u16 species)
return searchLevel;
}
-#define tProximity data[0]
-#define tFrameCount data[1]
-#define tSpecies data[2]
-#define tEnvironment data[3]
-#define tRevealed data[4]
-
-static void Task_SetUpDexNavSearch(u8 taskId)
+static void SetUpDexNavSearch(void)
{
- struct Task *task = &gTasks[taskId];
-
u16 species = sDexNavSearchDataPtr->species;
u8 searchLevel = GetSearchLevel(species);
@@ -859,34 +851,29 @@ static void Task_SetUpDexNavSearch(u8 taskId)
DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, searchLevel);
}
- FlagSet(DN_FLAG_SEARCHING);
gPlayerAvatar.creeping = TRUE; //initialize as true in case mon appears beside you
- task->tProximity = gSprites[gPlayerAvatar.spriteId].x;
- task->tFrameCount = 0;
- task->func = Task_DexNavSearch;
+ sDexNavSearchDataPtr->proximity = gSprites[gPlayerAvatar.spriteId].x;
+ sDexNavSearchDataPtr->startingTime = gMain.vblankCounter1;
IncrementGameStat(GAME_STAT_DEXNAV_SCANNED);
}
-static void DexNavSearchBail(u8 taskId, const u8 *script)
+static void DexNavSearchBail(const u8 *script)
{
TRY_FREE_AND_SET_NULL(sDexNavSearchDataPtr);
+ FlagClear(DN_FLAG_SEARCHING);
FreeMonIconPalettes();
ScriptContext_SetupScript(script);
- DestroyTask(taskId);
}
-static void Task_InitDexNavSearch(u8 taskId)
+static bool8 InitDexNavSearch(u32 species, u32 environment)
{
- struct Task *task = &gTasks[taskId];
- u16 species = task->tSpecies;
- u8 environment = task->tEnvironment;
-
sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch));
if (sDexNavSearchDataPtr == NULL)
{
- DexNavSearchBail(taskId, EventScript_NotFoundNearby);
- return;
+ DexNavSearchBail(EventScript_NotFoundNearby);
+ return TRUE;
}
+ FlagSet(DN_FLAG_SEARCHING);
// assign non-objects to struct
sDexNavSearchDataPtr->species = species;
@@ -896,19 +883,19 @@ static void Task_InitDexNavSearch(u8 taskId)
if (GetFlashLevel() > 0)
{
- DexNavSearchBail(taskId, EventScript_TooDark);
- return;
+ DexNavSearchBail(EventScript_TooDark);
+ return TRUE;
}
if (sDexNavSearchDataPtr->monLevel == MON_LEVEL_NONEXISTENT || !TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 12, 12, FALSE))
{
- DexNavSearchBail(taskId, EventScript_NotFoundNearby);
- return;
+ DexNavSearchBail(EventScript_NotFoundNearby);
+ return TRUE;
}
sDexNavSearchDataPtr->hiddenSearch = FALSE;
- task->tRevealed = TRUE; //search window revealed
- task->func = Task_SetUpDexNavSearch;
+ SetUpDexNavSearch();
+ return FALSE;
}
static void DexNavDrawPotentialStars(u8 potential, u8 *dst)
@@ -977,36 +964,50 @@ static void DexNavDrawIcons(void)
/////////////////////
//// SEARCH TASK ////
/////////////////////
-bool8 TryStartDexNavSearch(void)
+static void RevealHiddenSearch(void)
+{
+ PlaySE(SE_DEX_SEARCH);
+ ClearStdWindowAndFrameToTransparent(sDexNavSearchDataPtr->windowId, FALSE);
+ CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3);
+ RemoveWindow(sDexNavSearchDataPtr->windowId);
+ DestroySprite(&gSprites[sDexNavSearchDataPtr->iconSpriteId]);
+ sDexNavSearchDataPtr->hiddenSearch = FALSE; //now its a regular dexnav search
+ RevealHiddenMon();
+}
+
+bool32 TryStartDexNavSearch(void)
{
- u8 taskId;
u16 val = VarGet(DN_VAR_SPECIES);
+ if (FlagGet(DN_FLAG_SEARCHING) && sDexNavSearchDataPtr->hiddenSearch)
+ {
+ RevealHiddenSearch();
+ return FALSE;
+ }
+
if (FlagGet(DN_FLAG_SEARCHING) || (val & DEXNAV_MASK_SPECIES) == SPECIES_NONE)
return FALSE;
HideMapNamePopUpWindow();
ChangeBgY_ScreenOff(0, 0, 0);
- taskId = CreateTask(Task_InitDexNavSearch, 0);
- gTasks[taskId].tSpecies = val & DEXNAV_MASK_SPECIES;
- gTasks[taskId].tEnvironment = val >> 14;
PlaySE(SE_DEX_SEARCH);
- return FALSE; //we dont actually want to enable the script context
+ return InitDexNavSearch(val & DEXNAV_MASK_SPECIES, val >> 14);
}
-void EndDexNavSearch(u8 taskId)
+void EndDexNavSearch(void)
{
- FlagClear(DN_FLAG_SEARCHING);
- DestroyTask(taskId);
+ if (!FlagGet(DN_FLAG_SEARCHING))
+ return;
RemoveDexNavWindowAndGfx();
FieldEffectStop(&gSprites[sDexNavSearchDataPtr->fldEffSpriteId], sDexNavSearchDataPtr->fldEffId);
- Free(sDexNavSearchDataPtr);
+ FREE_AND_SET_NULL(sDexNavSearchDataPtr);
+ FlagClear(DN_FLAG_SEARCHING);
}
-static void EndDexNavSearchSetupScript(const u8 *script, u8 taskId)
+static void EndDexNavSearchSetupScript(const u8 *script)
{
gSaveBlock3Ptr->dexNavChain = 0; //reset chain
- EndDexNavSearch(taskId);
+ EndDexNavSearch();
ScriptContext_SetupScript(script);
}
@@ -1020,9 +1021,8 @@ static u8 GetMovementProximityBySearchLevel(void)
return 4;
}
-static void Task_RevealHiddenMon(u8 taskId)
+static void RevealHiddenMon(void)
{
- struct Task *task = &gTasks[taskId];
u16 species = sDexNavSearchDataPtr->species;
// remove owned icon if it exists
@@ -1059,53 +1059,68 @@ static void Task_RevealHiddenMon(u8 taskId)
DrawDexNavSearchMonIcon(species, &sDexNavSearchDataPtr->iconSpriteId, GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT));
}
+ sDexNavSearchDataPtr->startingTime = gMain.vblankCounter1;
DexNavUpdateDirectionArrow();
- task->func = Task_DexNavSearch;
- task->tFrameCount = 0; //restart search clock
}
-static void Task_DexNavSearch(u8 taskId)
+bool32 OnStep_DexNavSearch(void)
{
- struct Task *task = &gTasks[taskId];
+ if (!FlagGet(DN_FLAG_SEARCHING))
+ return FALSE;
+
+ u32 frameCount = gMain.vblankCounter1 - sDexNavSearchDataPtr->startingTime;
+ DexNavProximityUpdate();
+ if (!sDexNavSearchDataPtr->hiddenSearch) //update search window info only if revealed mon
+ DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, sDexNavSearchDataPtr->searchLevel);
if (sDexNavSearchDataPtr->proximity > MAX_PROXIMITY)
{ // out of range
- if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed)
- EndDexNavSearch(taskId);
+ if (sDexNavSearchDataPtr->hiddenSearch)
+ {
+ EndDexNavSearch();
+ return FALSE;
+ }
else
- EndDexNavSearchSetupScript(EventScript_LostSignal, taskId);
- return;
+ {
+ EndDexNavSearchSetupScript(EventScript_LostSignal);
+ return TRUE;
+ }
}
- if (sDexNavSearchDataPtr->proximity <= CREEPING_PROXIMITY && !gPlayerAvatar.creeping && task->tFrameCount > 60)
+ if (sDexNavSearchDataPtr->proximity <= CREEPING_PROXIMITY && !gPlayerAvatar.creeping && frameCount > 60)
{ //should be creeping but player walks normally
- if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed)
- EndDexNavSearch(taskId);
+ if (sDexNavSearchDataPtr->hiddenSearch)
+ {
+ EndDexNavSearch();
+ return FALSE;
+ }
else
- EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId);
- return;
+ {
+ EndDexNavSearchSetupScript(EventScript_MovedTooFast);
+ return TRUE;
+ }
}
if (sDexNavSearchDataPtr->proximity <= SNEAKING_PROXIMITY && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_BIKE))
{ // running/biking too close
//always do event script, even if player hasn't revealed a hidden mon. It's assumed they would be creeping towards it
- EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId);
- return;
+ EndDexNavSearchSetupScript(EventScript_MovedTooFast);
+ return TRUE;
}
- if (ArePlayerFieldControlsLocked() == TRUE)
- { // check if script just executed
- EndDexNavSearch(taskId);
- return;
- }
-
- if (gTasks[taskId].tFrameCount > DEXNAV_TIMEOUT * 60)
+ if (frameCount > DEXNAV_TIMEOUT * 60)
{ // player took too long
- if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed)
- EndDexNavSearch(taskId);
+ if (sDexNavSearchDataPtr->hiddenSearch)
+ {
+ EndDexNavSearch();
+ return FALSE;
+ }
else
- EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId);
- return;
+ {
+ EndDexNavSearchSetupScript(EventScript_PokemonGotAway);
+ return TRUE;
+ }
+ return FALSE;
}
if (sDexNavSearchDataPtr->proximity < 1)
@@ -1114,54 +1129,34 @@ static void Task_DexNavSearch(u8 taskId)
CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel,
sDexNavSearchDataPtr->abilityNum, sDexNavSearchDataPtr->heldItem, sDexNavSearchDataPtr->moves);
- FlagClear(DN_FLAG_SEARCHING);
ScriptContext_SetupScript(EventScript_StartDexNavBattle);
- Free(sDexNavSearchDataPtr);
- DestroyTask(taskId);
- return;
+ FREE_AND_SET_NULL(sDexNavSearchDataPtr);
+ FlagClear(DN_FLAG_SEARCHING);
+ return TRUE;
}
- if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed &&
- (JOY_NEW(R_BUTTON) || (sDexNavSearchDataPtr->proximity < CREEPING_PROXIMITY)))
+ if (sDexNavSearchDataPtr->hiddenSearch && sDexNavSearchDataPtr->proximity < CREEPING_PROXIMITY)
{
- PlaySE(SE_DEX_SEARCH);
- ClearStdWindowAndFrameToTransparent(sDexNavSearchDataPtr->windowId, FALSE);
- CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3);
- RemoveWindow(sDexNavSearchDataPtr->windowId);
- DestroySprite(&gSprites[sDexNavSearchDataPtr->iconSpriteId]);
- task->tRevealed = TRUE; //regular dexnav search
- //sDexNavSearchDataPtr->hiddenSearch = FALSE; //now its a regular dexnav search
- task->func = Task_RevealHiddenMon;
- return;
+ RevealHiddenSearch();
+ return FALSE;
}
//Caves and water the pokemon moves around
if ((sDexNavSearchDataPtr->environment == ENCOUNTER_TYPE_WATER || GetCurrentMapType() == MAP_TYPE_UNDERGROUND)
&& sDexNavSearchDataPtr->proximity < GetMovementProximityBySearchLevel() && sDexNavSearchDataPtr->movementCount < 2
- && task->tRevealed)
+ && !sDexNavSearchDataPtr->hiddenSearch)
{
FieldEffectStop(&gSprites[sDexNavSearchDataPtr->fldEffSpriteId], sDexNavSearchDataPtr->fldEffId);
if (!TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 10, 10, TRUE))
{
- EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId);
- return;
+ EndDexNavSearchSetupScript(EventScript_PokemonGotAway);
+ return TRUE;
}
sDexNavSearchDataPtr->movementCount++;
}
-
- DexNavProximityUpdate();
- if (task->tProximity != sDexNavSearchDataPtr->proximity)
- {
- //player has moved
- if (task->tRevealed) //update search window info only if hidden mon has been revealed (always true for search mode)
- DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, sDexNavSearchDataPtr->searchLevel);
-
- task->tProximity = sDexNavSearchDataPtr->proximity;
- }
-
- task->tFrameCount++;
+ return FALSE;
}
static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel)
@@ -1864,14 +1859,10 @@ static void DexNavGuiFreeResources(void)
static void CB1_InitDexNavSearch(void)
{
- u8 taskId;
-
if (!gPaletteFade.active && !ArePlayerFieldControlsLocked() && gMain.callback2 == CB2_Overworld)
{
SetMainCallback1(CB1_Overworld);
- taskId = CreateTask(Task_InitDexNavSearch, 0);
- gTasks[taskId].tSpecies = gSpecialVar_0x8000;
- gTasks[taskId].tEnvironment = gSpecialVar_0x8001;
+ InitDexNavSearch(gSpecialVar_0x8000, gSpecialVar_0x8001);
}
}
@@ -2232,6 +2223,9 @@ static void CreateTypeIconSprites(void)
}
}
+#define tSpecies data[2]
+#define tEnvironment data[3]
+
static bool8 DexNav_DoGfxSetup(void)
{
u8 taskId;
@@ -2508,7 +2502,7 @@ static void Task_DexNavMain(u8 taskId)
/////////////////////////
//// HIDDEN POKEMON /////
/////////////////////////
-bool8 TryFindHiddenPokemon(void)
+bool32 TryFindHiddenPokemon(void)
{
u16 *stepPtr = GetVarPointer(DN_VAR_STEP_COUNTER);
@@ -2531,7 +2525,6 @@ bool8 TryFindHiddenPokemon(void)
u8 index;
u16 species;
enum EncounterType environment;
- u8 taskId;
enum TimeOfDay timeOfDay = GetTimeOfDayForEncounters(headerId, WILD_AREA_HIDDEN);
const struct WildPokemonInfo *hiddenMonsInfo = gWildMonHeaders[headerId].encounterTypes[timeOfDay].hiddenMonsInfo;
@@ -2596,7 +2589,7 @@ bool8 TryFindHiddenPokemon(void)
return FALSE;
sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch));
-
+ FlagSet(DN_FLAG_SEARCHING);
// init search data
sDexNavSearchDataPtr->isHiddenMon = isHiddenMon;
sDexNavSearchDataPtr->species = species;
@@ -2605,13 +2598,18 @@ bool8 TryFindHiddenPokemon(void)
sDexNavSearchDataPtr->monLevel = DexNavTryGenerateMonLevel(species, environment);
if (sDexNavSearchDataPtr->monLevel == MON_LEVEL_NONEXISTENT)
{
- Free(sDexNavSearchDataPtr);
+ FREE_AND_SET_NULL(sDexNavSearchDataPtr);
+ FlagClear(DN_FLAG_SEARCHING);
return FALSE;
}
// find tile for hidden mon and start effect if possible
if (!TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 8, 8, TRUE))
+ {
+ FREE_AND_SET_NULL(sDexNavSearchDataPtr);
+ FlagClear(DN_FLAG_SEARCHING);
return FALSE;
+ }
// exclamation mark over player
gFieldEffectArguments[0] = gSaveBlock1Ptr->pos.x;
@@ -2622,10 +2620,7 @@ bool8 TryFindHiddenPokemon(void)
FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON);
PlayCry_Script(species, 0);
- taskId = CreateTask(Task_SetUpDexNavSearch, 0);
- gTasks[taskId].tSpecies = sDexNavSearchDataPtr->species;
- gTasks[taskId].tEnvironment = sDexNavSearchDataPtr->environment;
- gTasks[taskId].tRevealed = FALSE;
+ SetUpDexNavSearch();
HideMapNamePopUpWindow();
ChangeBgY_ScreenOff(0, 0, 0);
return FALSE; // we dont actually want to enable the script context or the game will freeze
@@ -2699,7 +2694,7 @@ void ResetDexNavSearch(void)
gSaveBlock3Ptr->dexNavChain = 0; //reset dex nav chaining on new map
VarSet(DN_VAR_STEP_COUNTER, 0); //reset hidden pokemon step counter
if (FlagGet(DN_FLAG_SEARCHING))
- EndDexNavSearch(FindTaskIdByFunc(Task_DexNavSearch)); //moving to new map ends dexnav search
+ EndDexNavSearch(); //moving to new map ends dexnav search
}
void IncrementDexNavChain(void)
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index f35c349fc6..d3272d33ae 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -119,7 +119,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
input->pressedAButton = TRUE;
if (newKeys & B_BUTTON)
input->pressedBButton = TRUE;
- if (newKeys & R_BUTTON && !FlagGet(DN_FLAG_SEARCHING))
+ if (newKeys & R_BUTTON)
input->pressedRButton = TRUE;
}
@@ -618,6 +618,8 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB
return TRUE;
if (UpdateRepelCounter() == TRUE)
return TRUE;
+ if (OnStep_DexNavSearch())
+ return TRUE;
return FALSE;
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 8ac07cc693..1bc41d2c45 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2594,7 +2594,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId)
sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0);
ShowBattleFrontierTutorWindow(task->tScrollMultiId, 0);
- sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * 8);
+ sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * sizeof(struct ListMenuItem));
sFrontierExchangeCorner_NeverRead = 0;
InitScrollableMultichoice();
diff --git a/src/follower_npc.c b/src/follower_npc.c
index 2cca3186b3..3675a99bd3 100644
--- a/src/follower_npc.c
+++ b/src/follower_npc.c
@@ -226,7 +226,7 @@ static void TurnNPCIntoFollower(u32 localId, u32 followerFlags, u32 setScript, c
SetFollowerNPCData(FNPC_DATA_COME_OUT_DOOR, FNPC_DOOR_NONE);
if (FollowerNPCHasRunningFrames())
followerFlags |= FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES;
-
+
SetFollowerNPCData(FNPC_DATA_FOLLOWER_FLAGS, followerFlags);
// If the player is biking and the follower flags prohibit biking, force the player to dismount the bike.
@@ -810,7 +810,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr)
{
if (PlayerHasFollowerNPC())
return;
-
+
struct ObjectEvent *player = &gObjectEvents[gPlayerAvatar.objectEventId];
struct ObjectEvent *follower;
struct ObjectEventTemplate npc =
@@ -827,7 +827,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr)
follower = &gObjectEvents[GetFollowerNPCData(FNPC_DATA_OBJ_ID)];
follower->movementType = MOVEMENT_TYPE_NONE;
gSprites[follower->spriteId].callback = MovementType_None;
-
+
SetFollowerNPCData(FNPC_DATA_IN_PROGRESS, TRUE);
SetFollowerNPCData(FNPC_DATA_GFX_ID, follower->graphicsId);
SetFollowerNPCData(FNPC_DATA_SURF_BLOB, FNPC_SURF_BLOB_NONE);
@@ -835,7 +835,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr)
SetFollowerNPCScriptPointer(scriptPtr);
if (FollowerNPCHasRunningFrames())
followerFlags |= FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES;
-
+
SetFollowerNPCData(FNPC_DATA_FOLLOWER_FLAGS, followerFlags);
// If the player is biking and the follower flags prohibit biking, force the player to dismount the bike.
@@ -887,7 +887,7 @@ u32 DetermineFollowerNPCState(struct ObjectEvent *follower, u32 state, u32 direc
// Follower won't move if player is forced back onto the same tile.
if (GetFollowerNPCData(FNPC_DATA_FORCED_MOVEMENT) == FNPC_FORCED_STAY)
return MOVEMENT_ACTION_NONE;
-
+
GetXYCoordsPlayerMovementDest(playerMoveDirection, &playerDestX, &playerDestY);
newPlayerMB = MapGridGetMetatileBehaviorAt(playerDestX, playerDestY);
@@ -1863,7 +1863,7 @@ void ScriptHideNPCFollower(struct ScriptContext *ctx)
{
if (!FNPC_ENABLE_NPC_FOLLOWERS || !PlayerHasFollowerNPC())
return;
-
+
u32 walkSpeed = ScriptReadByte(ctx);
struct ObjectEvent *npc = &gObjectEvents[GetFollowerNPCObjectId()];
@@ -1893,7 +1893,7 @@ void ScriptChangeFollowerNPCBattlePartner(struct ScriptContext *ctx)
{
if (!FNPC_ENABLE_NPC_FOLLOWERS || !PlayerHasFollowerNPC())
return;
-
+
u32 newBattlePartner = ScriptReadHalfword(ctx);
SetFollowerNPCData(FNPC_DATA_BATTLE_PARTNER, newBattlePartner);
diff --git a/src/m4a.c b/src/m4a.c
index 24f9f3e16c..83abb44223 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -40,7 +40,7 @@ u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
}
-void UnusedDummyFunc(void)
+static void UNUSED UnusedDummyFunc(void)
{
}
@@ -132,7 +132,7 @@ void m4aSongNumStartOrChange(u16 n)
}
}
-void m4aSongNumStartOrContinue(u16 n)
+static void UNUSED m4aSongNumStartOrContinue(u16 n)
{
const struct MusicPlayer *mplayTable = gMPlayTable;
const struct Song *songTable = gSongTable;
@@ -158,7 +158,7 @@ void m4aSongNumStop(u16 n)
m4aMPlayStop(mplay->info);
}
-void m4aSongNumContinue(u16 n)
+static void UNUSED m4aSongNumContinue(u16 n)
{
const struct MusicPlayer *mplayTable = gMPlayTable;
const struct Song *songTable = gSongTable;
@@ -322,7 +322,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
soundInfo->ident = ident;
}
-void MusicPlayerJumpTableCopy(void)
+static void UNUSED MusicPlayerJumpTableCopy(void)
{
asm("swi 0x2A");
}
@@ -1609,26 +1609,26 @@ void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
track->cmdPtr++;
}
-void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+void ply_xwait(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
{
- u32 unk;
+ u32 len;
#ifdef UBFIX
- unk = 0;
+ len = 0;
#endif
- READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable
- READ_XCMD_BYTE(unk, 1)
+ READ_XCMD_BYTE(len, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(len, 1)
- if (track->unk_3A < (u16)unk)
+ if (track->timer < (u16)len)
{
- track->unk_3A++;
+ track->timer++;
track->cmdPtr -= 2;
track->wait = 1;
}
else
{
- track->unk_3A = 0;
+ track->timer = 0;
track->cmdPtr += 2;
}
}
@@ -1716,7 +1716,7 @@ void SetPokemonCryPitch(s16 val)
void SetPokemonCryLength(u16 val)
{
- gPokemonCrySong.unkCmd0CParam = val;
+ gPokemonCrySong.length = val;
}
void SetPokemonCryRelease(u8 val)
diff --git a/src/m4a_tables.c b/src/m4a_tables.c
index 5bc1075494..1f339b060f 100644
--- a/src/m4a_tables.c
+++ b/src/m4a_tables.c
@@ -251,6 +251,7 @@ const u8 gClockTable[] =
#define xRELE 0x07
#define xIECV 0x08
#define xIECL 0x09
+#define xWAIT 0x0c
#define EOT 0xce
#define TIE 0xcf
@@ -282,8 +283,8 @@ const struct PokemonCrySong gPokemonCrySongTemplate =
.tieCmd = TIE,
.tieKeyValue = 60, // default is Cn3
.tieVelocityValue = 127,
- .unkCmd0C = {XCMD, 0x0C},
- .unkCmd0CParam = 60,
+ .xwaitCmd = {XCMD, xWAIT},
+ .length = 60, // frames to wait
.end = {EOT, FINE}
};
@@ -301,6 +302,6 @@ const XcmdFunc gXcmdTable[] =
ply_xiecl,
ply_xleng,
ply_xswee,
- ply_xcmd_0C,
+ ply_xwait,
ply_xcmd_0D,
};
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index bf73692a36..94e3027ef5 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -713,7 +713,7 @@ static void Task_FossilFallAndSink(u8 taskId)
FieldEffectFreePaletteIfUnused(gSprites[sFallingFossil->spriteId].oam.paletteNum);
gSprites[sFallingFossil->spriteId].inUse = TRUE;
DestroySprite(&gSprites[sFallingFossil->spriteId]);
- FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);;
+ FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);
FREE_AND_SET_NULL(sFallingFossil->frameImage);
FREE_AND_SET_NULL(sFallingFossil->frameImageTiles);
FREE_AND_SET_NULL(sFallingFossil);
diff --git a/src/oras_dowse.c b/src/oras_dowse.c
index 237c456187..d3dab1253d 100644
--- a/src/oras_dowse.c
+++ b/src/oras_dowse.c
@@ -531,7 +531,7 @@ void UpdateDowsingAnimDirection(struct Sprite *sprite, struct ObjectEvent *playe
anim += 16;
break;
}
-
+
// Don't completely restart anim if wiggling didn't stop.
if (sprite->sPrevDowseState != ORASD_WIGGLE_NONE && sprite->sDowseState != ORASD_WIGGLE_NONE)
SetAndStartSpriteAnim(sprite, anim, sprite->animCmdIndex);
diff --git a/src/overworld.c b/src/overworld.c
index 4157236a79..ec66acaad8 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1125,7 +1125,7 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
return FALSE;
}
-static bool16 NoMusicInSotopolisWithLegendaries(struct WarpData *warp)
+static bool16 NoMusicInSootopolisWithLegendaries(struct WarpData *warp)
{
if (VarGet(VAR_SKY_PILLAR_STATE) != 1)
return FALSE;
@@ -1150,7 +1150,7 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp)
return FALSE;
}
-static bool16 IsInflitratedSpaceCenter(struct WarpData *warp)
+static bool16 IsInfiltratedSpaceCenter(struct WarpData *warp)
{
if (VarGet(VAR_MOSSDEEP_CITY_STATE) == 0)
return FALSE;
@@ -1166,11 +1166,11 @@ static bool16 IsInflitratedSpaceCenter(struct WarpData *warp)
u16 GetLocationMusic(struct WarpData *warp)
{
- if (NoMusicInSotopolisWithLegendaries(warp) == TRUE)
+ if (NoMusicInSootopolisWithLegendaries(warp) == TRUE)
return MUS_NONE;
else if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
return MUS_ABNORMAL_WEATHER;
- else if (IsInflitratedSpaceCenter(warp) == TRUE)
+ else if (IsInfiltratedSpaceCenter(warp) == TRUE)
return MUS_ENCOUNTER_MAGMA;
else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
return MUS_MT_CHIMNEY;
diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c
index 346536c8aa..33d9af2caa 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -1945,7 +1945,7 @@ static void FrontFlip_2(struct Sprite *sprite)
{
TryFlipX(sprite);
sprite->x2++;
- sprite->y2--;;
+ sprite->y2--;
if (sprite->x2 >= 0)
{
diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c
index 16c270e121..9cb93f80f3 100644
--- a/src/pokemon_sprite_visualizer.c
+++ b/src/pokemon_sprite_visualizer.c
@@ -1,4 +1,3 @@
-//Credits: Gamer2020, AsparagusEduardo, TheXaman, ShinyDragonHunter
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
@@ -472,7 +471,7 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data)
{
AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textL, 30, 0, 0, NULL);
AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textR, 30, 12, 0, NULL);
- if (GetSpeciesFormTable(data->currentmonId) != NULL)
+ if (GetSpeciesFormTable(species) != NULL)
AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomForms, 0, 0, 0, NULL);
else
AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottom, 0, 0, 0, NULL);
@@ -723,7 +722,7 @@ static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bo
static void SetConstSpriteValues(struct PokemonSpriteVisualizer *data)
{
- u16 species = data->currentmonId;
+ u16 species = SanitizeSpeciesId(data->currentmonId);
data->constSpriteValues.frontPicCoords = gSpeciesInfo[species].frontPicYOffset;
data->constSpriteValues.frontElevation = gSpeciesInfo[species].enemyMonElevation;
data->constSpriteValues.backPicCoords = gSpeciesInfo[species].backPicYOffset;
@@ -736,11 +735,11 @@ static void ResetOffsetSpriteValues(struct PokemonSpriteVisualizer *data)
data->offsetsSpriteValues.offset_front_elevation = 0;
}
-static void ResetShadowSettings(struct PokemonSpriteVisualizer *data, u16 species)
+static void ResetShadowSettings(struct PokemonSpriteVisualizer *data)
{
if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 || P_GBA_STYLE_SPECIES_GFX == TRUE)
return;
-
+ u16 species = SanitizeSpeciesId(data->currentmonId);
data->shadowSettings.definedX = gSpeciesInfo[species].enemyShadowXOffset;
data->shadowSettings.definedY = gSpeciesInfo[species].enemyShadowYOffset;
data->shadowSettings.definedSize = gSpeciesInfo[species].enemyShadowSize;
@@ -837,10 +836,10 @@ static void SpriteCB_Follower(struct Sprite *sprite)
}
}
-static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species)
+static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data)
{
bool8 invisible = FALSE;
- species = SanitizeSpeciesId(species);
+ u16 species = SanitizeSpeciesId(data->currentmonId);
if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
{
@@ -1039,6 +1038,32 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
LoadBattleBg(data->battleBgType, data->battleEnvironment);
}
+static void DrawFollowerSprite(struct PokemonSpriteVisualizer *data)
+{
+ if (!OW_POKEMON_OBJECT_EVENTS)
+ return;
+
+ u16 species = SanitizeSpeciesId(data->currentmonId);
+ u16 graphicsId = species + OBJ_EVENT_MON;
+ if (data->isShiny)
+ graphicsId += OBJ_EVENT_MON_SHINY;
+ if (data->isFemale)
+ graphicsId += OBJ_EVENT_MON_FEMALE;
+ data->followerspriteId = CreateObjectGraphicsSprite(graphicsId,
+ SpriteCB_Follower,
+ VISUALIZER_FOLLOWER_X,
+ VISUALIZER_FOLLOWER_Y,
+ 0);
+ gSprites[data->followerspriteId].oam.priority = 0;
+
+ const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale);
+ gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape;
+ gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size;
+ gSprites[data->followerspriteId].images = graphicsInfo->images;
+ gSprites[data->followerspriteId].anims = graphicsInfo->anims;
+ gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables;
+}
+
// *******************************
// Main functions
static void UpdateMonAnimNames(u8 taskId)
@@ -1246,7 +1271,7 @@ void CB2_Pokemon_Sprite_Visualizer(void)
SetStructPtr(taskId, data);
data->currentmonId = SPECIES_BULBASAUR;
- species = data->currentmonId;
+ species = SanitizeSpeciesId(data->currentmonId);
//Print instructions
PrintInstructionsOnWindow(data);
@@ -1256,8 +1281,6 @@ void CB2_Pokemon_Sprite_Visualizer(void)
LoadSpritePaletteWithTag(palette, species);
//Front
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->spritesGfx[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
- data->isShiny = FALSE;
- data->isFemale = FALSE;
BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 1);
SetMultiuseSpriteTemplateToPokemon(species, 1);
gMultiuseSpriteTemplate.paletteTag = species;
@@ -1267,15 +1290,15 @@ void CB2_Pokemon_Sprite_Visualizer(void)
gSprites[data->frontspriteId].callback = SpriteCallbackDummy;
gSprites[data->frontspriteId].oam.priority = 0;
//Front Shadow
- LoadAndCreateEnemyShadowSpriteCustom(data, species);
+ LoadAndCreateEnemyShadowSpriteCustom(data);
//Back
HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->spritesGfx[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
- BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 4);
+ BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 5);
SetMultiuseSpriteTemplateToPokemon(species, 2);
offset_y = gSpeciesInfo[species].backPicYOffset;
data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, VISUALIZER_MON_BACK_X, VISUALIZER_MON_BACK_Y + offset_y, 0);
- gSprites[data->backspriteId].oam.paletteNum = 4;
+ gSprites[data->backspriteId].oam.paletteNum = 5;
gSprites[data->backspriteId].callback = SpriteCallbackDummy;
gSprites[data->backspriteId].oam.priority = 0;
@@ -1284,26 +1307,7 @@ void CB2_Pokemon_Sprite_Visualizer(void)
gSprites[data->iconspriteId].oam.priority = 0;
//Follower Sprite
- u16 graphicsId = species + OBJ_EVENT_MON;
- if (data->isShiny)
- graphicsId += OBJ_EVENT_MON_SHINY;
- if (data->isFemale)
- graphicsId += OBJ_EVENT_MON_FEMALE;
- data->followerspriteId = CreateObjectGraphicsSprite(graphicsId,
- SpriteCB_Follower,
- VISUALIZER_FOLLOWER_X,
- VISUALIZER_FOLLOWER_Y,
- 0);
- gSprites[data->followerspriteId].oam.priority = 0;
- const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale);
- if (graphicsInfo != NULL)
- {
- gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape;
- gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size;
- gSprites[data->followerspriteId].images = graphicsInfo->images;
- gSprites[data->followerspriteId].anims = graphicsInfo->anims;
- gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables;
- }
+ DrawFollowerSprite(data);
//Modify Arrows
SetUpModifyArrows(data);
@@ -1317,7 +1321,7 @@ void CB2_Pokemon_Sprite_Visualizer(void)
//Anim names
data->animIdBack = GetSpeciesBackAnimSet(species) + 1;
- data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId;
+ data->animIdFront = gSpeciesInfo[species].frontAnimId;
UpdateMonAnimNames(taskId);
//BattleNg Name
@@ -1387,7 +1391,7 @@ static void ResetBGs_PokemonSpriteVisualizer(u16 a)
static void ApplyOffsetSpriteValues(struct PokemonSpriteVisualizer *data)
{
- u16 species = data->currentmonId;
+ u16 species = SanitizeSpeciesId(data->currentmonId);
//Back
gSprites[data->backspriteId].y = VISUALIZER_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + data->offsetsSpriteValues.offset_back_picCoords;
//Front
@@ -1400,6 +1404,7 @@ static void ApplyOffsetSpriteValues(struct PokemonSpriteVisualizer *data)
static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
{
struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
+ u16 species = SanitizeSpeciesId(data->currentmonId);
u8 option = data->submenuYpos[1];
switch (option)
@@ -1442,15 +1447,15 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
UpdateBattleBg(taskId, increment);
break;
case 3:
- if (GetSpeciesFormTable(data->currentmonId) != NULL)
+ if (GetSpeciesFormTable(species) != NULL)
{
struct PokemonSpriteVisualizerModifyArrows *modArrows = &data->modifyArrows;
- u8 formId = GetFormIdFromFormSpeciesId(data->currentmonId);
- const u16 *formTable = GetSpeciesFormTable(data->currentmonId);
+ u8 formId = GetFormIdFromFormSpeciesId(species);
+ const u16 *formTable = GetSpeciesFormTable(species);
if (increment)
{
if (formTable[formId + 1] != FORM_SPECIES_END)
- modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId + 1);
+ modArrows->currValue = GetFormSpeciesId(species, formId + 1);
else
modArrows->currValue = formTable[0];
}
@@ -1467,13 +1472,13 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
modArrows->currValue = formTable[lastForm];
}
else
- modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId - 1);
+ modArrows->currValue = GetFormSpeciesId(species, formId - 1);
}
data->animIdBack = GetSpeciesBackAnimSet(modArrows->currValue) + 1;
data->animIdFront = gSpeciesInfo[modArrows->currValue].frontAnimId;
UpdateMonAnimNames(taskId);
ResetOffsetSpriteValues(data);
- ResetShadowSettings(data, modArrows->currValue);
+ ResetShadowSettings(data);
UpdateBattlerValue(data);
ReloadPokemonSprites(data);
@@ -1489,7 +1494,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment)
{
struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
- u16 species = data->currentmonId;
+ u16 species = SanitizeSpeciesId(data->currentmonId);
u8 option = data->submenuYpos[2];
s8 offset;
u8 y;
@@ -1660,27 +1665,28 @@ static void Task_AnimateAfterDelay(u8 taskId)
static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
{
struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
+ u16 species = SanitizeSpeciesId(data->currentmonId);
struct Sprite *Frontsprite = &gSprites[data->frontspriteId];
struct Sprite *Backsprite = &gSprites[data->backspriteId];
if (JOY_NEW(L_BUTTON) && (Backsprite->callback == SpriteCallbackDummy))
{
- PlayCryInternal(data->currentmonId, 0, 120, 10, CRY_MODE_NORMAL);
+ PlayCryInternal(species, 0, 120, 10, CRY_MODE_NORMAL);
LaunchAnimationTaskForBackSprite(Backsprite, data->animIdBack-1);
}
if (JOY_NEW(R_BUTTON) && (Frontsprite->callback == SpriteCallbackDummy))
{
- PlayCryInternal(data->currentmonId, 0, 120, 10, CRY_MODE_NORMAL);
- if (HasTwoFramesAnimation(data->currentmonId))
+ PlayCryInternal(species, 0, 120, 10, CRY_MODE_NORMAL);
+ if (HasTwoFramesAnimation(species))
StartSpriteAnim(Frontsprite, 1);
- if (gSpeciesInfo[data->currentmonId].frontAnimDelay != 0)
+ if (gSpeciesInfo[species].frontAnimDelay != 0)
{
// Animation has delay, start delay task
u8 taskId = CreateTask(Task_AnimateAfterDelay, 0);
STORE_PTR_IN_TASK(Frontsprite, taskId, 0);
gTasks[taskId].sAnimId = data->animIdFront;
- gTasks[taskId].sAnimDelay = gSpeciesInfo[data->currentmonId].frontAnimDelay;
+ gTasks[taskId].sAnimDelay = gSpeciesInfo[species].frontAnimDelay;
}
else
{
@@ -1699,7 +1705,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
ReloadPokemonSprites(data);
ApplyOffsetSpriteValues(data);
}
- if (JOY_NEW(SELECT_BUTTON) && SpeciesHasGenderDifferences(data->currentmonId))
+ if (JOY_NEW(SELECT_BUTTON) && SpeciesHasGenderDifferences(species))
{
data->isFemale = !data->isFemale;
PrintDigitChars(data);
@@ -1730,10 +1736,10 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
data->isFemale = FALSE;
PrintDigitChars(data);
UpdateBattlerValue(data);
- ResetShadowSettings(data, data->currentmonId);
+ ResetShadowSettings(data);
ReloadPokemonSprites(data);
- data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1;
- data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId;
+ data->animIdBack = GetSpeciesBackAnimSet(species) + 1;
+ data->animIdFront = gSpeciesInfo[species].frontAnimId;
UpdateMonAnimNames(taskId);
ResetOffsetSpriteValues(data);
}
@@ -1747,10 +1753,10 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
data->isFemale = FALSE;
PrintDigitChars(data);
UpdateBattlerValue(data);
- ResetShadowSettings(data, data->currentmonId);
+ ResetShadowSettings(data);
ReloadPokemonSprites(data);
- data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1;
- data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId;
+ data->animIdBack = GetSpeciesBackAnimSet(species) + 1;
+ data->animIdFront = gSpeciesInfo[species].frontAnimId;
UpdateMonAnimNames(taskId);
ResetOffsetSpriteValues(data);
}
@@ -1787,7 +1793,8 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
SetConstSpriteValues(data);
UpdateYPosOffsetText(data);
- gSprites[data->followerspriteId].invisible = TRUE;
+ if (data->followerspriteId != 0)
+ gSprites[data->followerspriteId].invisible = TRUE;
}
else if (JOY_NEW(B_BUTTON))
{
@@ -1806,7 +1813,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
data->submenuYpos[1] += 1;
if (data->submenuYpos[1] >= 3)
{
- if ((GetSpeciesFormTable(data->currentmonId) == NULL) || (data->submenuYpos[1] >= 4))
+ if ((GetSpeciesFormTable(species) == NULL) || (data->submenuYpos[1] >= 4))
data->submenuYpos[1] = 0;
}
data->optionArrows.currentDigit = data->submenuYpos[1];
@@ -1816,7 +1823,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
{
if (data->submenuYpos[1] == 0)
{
- if (GetSpeciesFormTable(data->currentmonId) != NULL)
+ if (GetSpeciesFormTable(species) != NULL)
data->submenuYpos[1] = 3;
else
data->submenuYpos[1] = 2;
@@ -1852,8 +1859,9 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
SetArrowInvisibility(data);
PrintInstructionsOnWindow(data);
UpdateMonAnimNames(taskId);
-
- gSprites[data->followerspriteId].invisible = FALSE;
+
+ if (data->followerspriteId != 0)
+ gSprites[data->followerspriteId].invisible = FALSE;
}
else if (JOY_NEW(DPAD_DOWN))
{
@@ -1934,7 +1942,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
{
const u16 *palette;
- u16 species = data->currentmonId;
+ u16 species = SanitizeSpeciesId(data->currentmonId);
s16 offset_y;
u8 front_x = sBattlerCoords[0][1].x;
u8 front_y;
@@ -1942,7 +1950,9 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
DestroySprite(&gSprites[data->frontspriteId]);
DestroySprite(&gSprites[data->backspriteId]);
DestroySprite(&gSprites[data->iconspriteId]);
- DestroySprite(&gSprites[data->followerspriteId]);
+
+ if (data->followerspriteId != 0)
+ DestroySprite(&gSprites[data->followerspriteId]);
DestroySprite(&gSprites[data->frontShadowSpriteIdPrimary]);
if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE)
@@ -1975,7 +1985,7 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
gSprites[data->frontspriteId].callback = SpriteCallbackDummy;
gSprites[data->frontspriteId].oam.priority = 0;
//Front Shadow
- LoadAndCreateEnemyShadowSpriteCustom(data, species);
+ LoadAndCreateEnemyShadowSpriteCustom(data);
//Back
HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->spritesGfx[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
@@ -1992,26 +2002,7 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
gSprites[data->iconspriteId].oam.priority = 0;
//Follower Sprite
- u16 graphicsId = species + OBJ_EVENT_MON;
- if (data->isShiny)
- graphicsId += OBJ_EVENT_MON_SHINY;
- if (data->isFemale)
- graphicsId += OBJ_EVENT_MON_FEMALE;
- data->followerspriteId = CreateObjectGraphicsSprite(graphicsId,
- SpriteCB_Follower,
- VISUALIZER_FOLLOWER_X,
- VISUALIZER_FOLLOWER_Y,
- 0);
- gSprites[data->followerspriteId].oam.priority = 0;
- const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale);
- if (graphicsInfo != NULL)
- {
- gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape;
- gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size;
- gSprites[data->followerspriteId].images = graphicsInfo->images;
- gSprites[data->followerspriteId].anims = graphicsInfo->anims;
- gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables;
- }
+ DrawFollowerSprite(data);
//Modify Arrows
LoadSpritePalette(&gSpritePalette_Arrow);
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 038f4a62ff..9236040f40 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -232,12 +232,12 @@ static bool8 CanReplaceMove(void);
static void ShowCantForgetHMsWindow(u8);
static void Task_HandleInputCantForgetHMsMoves(u8);
static void DrawPagination(void);
-static void HandlePowerAccTilemap(u16, s16);
-static void Task_ShowPowerAccWindow(u8);
-static void HandleAppealJamTilemap(u16, s16, u16);
-static void Task_ShowAppealJamWindow(u8);
-static void HandleStatusTilemap(u16, s16);
-static void Task_ShowStatusWindow(u8);
+static void PositionPowerAccSlidingWindow(u16, s16);
+static void Task_SlidePowerAccWindow(u8);
+static void PositionAppealJamSlidingWindow(u16, s16, u16);
+static void Task_SlideAppealJamWindow(u8);
+static void PositionStatusSlidingWindow(u16, s16);
+static void Task_SlideStatusWindow(u8);
static void TilemapFiveMovesDisplay(u16 *, u16, bool8);
static void DrawPokerusCuredSymbol(struct Pokemon *);
static void DrawExperienceProgressBar(struct Pokemon *);
@@ -375,32 +375,52 @@ static const struct BgTemplate sBgTemplates[] =
},
};
-struct TilemapCtrl
+struct SlidingWindow
{
const u16 *gfx;
- u16 field_4;
- u8 field_6;
- u8 field_7;
- u8 field_8;
- u8 field_9;
+ u16 defaultTile;
+ u8 width;
+ u8 height;
+ u8 left;
+ u8 top;
};
static const u16 sStatusTilemap[] = INCBIN_U16("graphics/summary_screen/status_tilemap.bin");
-static const struct TilemapCtrl sStatusTilemapCtrl1 =
+static const struct SlidingWindow sStatusSlidingWindow1 =
{
- sStatusTilemap, 1, 10, 2, 0, 18
+ .gfx = sStatusTilemap,
+ .defaultTile = 1,
+ .width = 10,
+ .height = 2,
+ .left = 0,
+ .top = 18
};
-static const struct TilemapCtrl sStatusTilemapCtrl2 =
+static const struct SlidingWindow sStatusSlidingWindow2 =
{
- sStatusTilemap, 1, 10, 2, 0, 50
+ .gfx = sStatusTilemap,
+ .defaultTile = 1,
+ .width = 10,
+ .height = 2,
+ .left = 0,
+ .top = 50
};
-static const struct TilemapCtrl sBattleMoveTilemapCtrl =
+static const struct SlidingWindow sPowerAccSlidingWindow =
{
- gSummaryScreen_MoveEffect_Battle_Tilemap, 0, 10, 7, 0, 45
+ .gfx = gSummaryScreen_MoveEffect_Battle_Tilemap,
+ .defaultTile = 0,
+ .width = 10,
+ .height = 7,
+ .left = 0,
+ .top = 45
};
-static const struct TilemapCtrl sContestMoveTilemapCtrl =
+static const struct SlidingWindow sAppealJamSlidingWindow =
{
- gSummaryScreen_MoveEffect_Contest_Tilemap, 0, 10, 7, 0, 45
+ .gfx = gSummaryScreen_MoveEffect_Contest_Tilemap,
+ .defaultTile = 0,
+ .width = 10,
+ .height = 7,
+ .left = 0,
+ .top = 45
};
static const s8 sMultiBattleOrder[] = {0, 2, 3, 1, 4, 5};
static const struct WindowTemplate sSummaryTemplate[] =
@@ -1551,8 +1571,8 @@ static void SetDefaultTilemaps(void)
|| sMonSummaryScreen->mode == SUMMARY_MODE_RELEARNER_BATTLE
|| sMonSummaryScreen->mode == SUMMARY_MODE_RELEARNER_CONTEST)
{
- HandlePowerAccTilemap(0, 0xFF);
- HandleAppealJamTilemap(0, 0xFF, 0);
+ PositionPowerAccSlidingWindow(0, 0xFF);
+ PositionAppealJamSlidingWindow(0, 0xFF, 0);
}
else
{
@@ -1592,7 +1612,7 @@ static void SetDefaultTilemaps(void)
}
if (sMonSummaryScreen->summary.ailment == AILMENT_NONE)
- HandleStatusTilemap(0, 0xFF);
+ PositionStatusSlidingWindow(0, 0xFF);
else if ((sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES && sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES)
|| sMonSummaryScreen->mode == SUMMARY_MODE_RELEARNER_BATTLE
|| sMonSummaryScreen->mode == SUMMARY_MODE_RELEARNER_CONTEST)
@@ -2007,7 +2027,7 @@ void TryUpdateRelearnType(enum IncrDecrUpdateValues delta)
return;
}
zeroCounter++;
-
+
} while (zeroCounter <= MOVE_RELEARNER_COUNT && !hasRelearnableMoves);
}
@@ -2052,7 +2072,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta)
SetSpriteInvisibility(SPRITE_ARR_ID_STATUS, TRUE);
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
ScheduleBgCopyTilemapToVram(0);
- HandleStatusTilemap(0, 2);
+ PositionStatusSlidingWindow(0, 2);
}
sMonSummaryScreen->curMonIndex = monId;
gTasks[taskId].data[0] = 0;
@@ -2118,7 +2138,7 @@ static void Task_ChangeSummaryMon(u8 taskId)
break;
case 7:
if (sMonSummaryScreen->summary.ailment != AILMENT_NONE)
- HandleStatusTilemap(10, -2);
+ PositionStatusSlidingWindow(10, -2);
DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon);
data[1] = 0;
break;
@@ -2144,7 +2164,7 @@ static void Task_ChangeSummaryMon(u8 taskId)
gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].data[2] = 0;
break;
default:
- if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_ShowStatusWindow))
+ if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_SlideStatusWindow))
{
data[0] = 0;
gTasks[taskId].func = Task_HandleInput;
@@ -2387,9 +2407,8 @@ static void SwitchToMoveSelection(u8 taskId)
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
- HandlePowerAccTilemap(9, -3);
- HandleAppealJamTilemap(9, -3, move);
-
+ PositionPowerAccSlidingWindow(9, -3);
+ PositionAppealJamSlidingWindow(9, -3, move);
if (!sMonSummaryScreen->lockMovesFlag)
{
if (ShouldShowMoveRelearner())
@@ -2504,8 +2523,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
ScheduleBgCopyTilemapToVram(0);
- HandlePowerAccTilemap(9, -3);
- HandleAppealJamTilemap(9, -3, move);
+ PositionPowerAccSlidingWindow(9, -3);
+ PositionAppealJamSlidingWindow(9, -3, move);
}
if (*moveIndexPtr != MAX_MON_MOVES
&& newMoveIndex == MAX_MON_MOVES
@@ -2515,8 +2534,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
DestroyCategoryIcon();
ScheduleBgCopyTilemapToVram(0);
- HandlePowerAccTilemap(0, 3);
- HandleAppealJamTilemap(0, 3, 0);
+ PositionPowerAccSlidingWindow(0, 3);
+ PositionAppealJamSlidingWindow(0, 3, 0);
}
*moveIndexPtr = newMoveIndex;
@@ -2543,8 +2562,8 @@ static void CloseMoveSelectMode(u8 taskId)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
DestroyCategoryIcon();
- HandlePowerAccTilemap(0, 3);
- HandleAppealJamTilemap(0, 3, 0);
+ PositionPowerAccSlidingWindow(0, 3);
+ PositionAppealJamSlidingWindow(0, 3, 0);
}
ScheduleBgCopyTilemapToVram(0);
ScheduleBgCopyTilemapToVram(1);
@@ -2771,8 +2790,8 @@ static void ShowCantForgetHMsWindow(u8 taskId)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = TRUE;
ScheduleBgCopyTilemapToVram(0);
- HandlePowerAccTilemap(0, 3);
- HandleAppealJamTilemap(0, 3, 0);
+ PositionPowerAccSlidingWindow(0, 3);
+ PositionAppealJamSlidingWindow(0, 3, 0);
PrintHMMovesCantBeForgotten();
gTasks[taskId].func = Task_HandleInputCantForgetHMsMoves;
}
@@ -2782,7 +2801,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u16 move;
- if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1)
+ if (FuncIsActiveTask(Task_SlidePowerAccWindow) != 1)
{
if (JOY_NEW(DPAD_UP))
{
@@ -2810,8 +2829,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex];
gTasks[taskId].func = Task_HandleReplaceMoveInput;
ChangePage(taskId, -1);
- HandlePowerAccTilemap(9, -2);
- HandleAppealJamTilemap(9, -2, move);
+ PositionPowerAccSlidingWindow(9, -2);
+ PositionAppealJamSlidingWindow(9, -2, move);
}
}
else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
@@ -2824,8 +2843,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex];
gTasks[taskId].func = Task_HandleReplaceMoveInput;
ChangePage(taskId, 1);
- HandlePowerAccTilemap(9, -2);
- HandleAppealJamTilemap(9, -2, move);
+ PositionPowerAccSlidingWindow(9, -2);
+ PositionAppealJamSlidingWindow(9, -2, move);
}
}
else if (JOY_NEW(A_BUTTON | B_BUTTON))
@@ -2836,8 +2855,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex];
PrintMoveDetails(move);
ScheduleBgCopyTilemapToVram(0);
- HandlePowerAccTilemap(9, -3);
- HandleAppealJamTilemap(9, -3, move);
+ PositionPowerAccSlidingWindow(9, -3);
+ PositionAppealJamSlidingWindow(9, -3, move);
gTasks[taskId].func = Task_HandleReplaceMoveInput;
}
}
@@ -2915,65 +2934,69 @@ static void DrawPagination(void) // Updates the pagination dots at the top of th
Free(tilemap);
}
-static void ChangeTilemap(const struct TilemapCtrl *unkStruct, u16 *dest, u8 c, bool8 d)
+static void CopyNColumnsToTilemap(const struct SlidingWindow *slidingWindow, u16 *tilemapDest, u8 visibleColumns, bool8 isOpeningToTheLeft)
{
u16 i;
- u16 *alloced = Alloc(unkStruct->field_6 * 2 * unkStruct->field_7);
- CpuFill16(unkStruct->field_4, alloced, unkStruct->field_6 * 2 * unkStruct->field_7);
- if (unkStruct->field_6 != c)
+ u16 *alloced = Alloc(slidingWindow->width * 2 * slidingWindow->height);
+ CpuFill16(slidingWindow->defaultTile, alloced, slidingWindow->width * 2 * slidingWindow->height);
+ if (slidingWindow->width != visibleColumns)
{
- if (!d)
+ if (!isOpeningToTheLeft)
{
- for (i = 0; i < unkStruct->field_7; i++)
- CpuCopy16(&unkStruct->gfx[c + unkStruct->field_6 * i], &alloced[unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
+ for (i = 0; i < slidingWindow->height; i++)
+ CpuCopy16(&slidingWindow->gfx[visibleColumns + slidingWindow->width * i], &alloced[slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2);
}
else
{
- for (i = 0; i < unkStruct->field_7; i++)
- CpuCopy16(&unkStruct->gfx[unkStruct->field_6 * i], &alloced[c + unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
+ for (i = 0; i < slidingWindow->height; i++)
+ CpuCopy16(&slidingWindow->gfx[slidingWindow->width * i], &alloced[visibleColumns + slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2);
}
}
- for (i = 0; i < unkStruct->field_7; i++)
- CpuCopy16(&alloced[unkStruct->field_6 * i], &dest[(unkStruct->field_9 + i) * 32 + unkStruct->field_8], unkStruct->field_6 * 2);
+ for (i = 0; i < slidingWindow->height; i++)
+ CpuCopy16(&alloced[slidingWindow->width * i], &tilemapDest[(slidingWindow->top + i) * 32 + slidingWindow->left], slidingWindow->width * 2);
Free(alloced);
}
-static void HandlePowerAccTilemap(u16 a, s16 b)
+#define tScrollingSpeed data[0]
+#define tVisibleColumns data[1]
+#define tMove data[2]
+
+static void PositionPowerAccSlidingWindow(u16 visibleColumns, s16 speed)
{
- if (b > sBattleMoveTilemapCtrl.field_6)
- b = sBattleMoveTilemapCtrl.field_6;
- if (b == 0 || b == sBattleMoveTilemapCtrl.field_6)
+ if (speed > sPowerAccSlidingWindow.width)
+ speed = sPowerAccSlidingWindow.width;
+ if (speed == 0 || speed == sPowerAccSlidingWindow.width)
{
- ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], b, TRUE);
+ CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], speed, TRUE);
}
else
{
- u8 taskId = FindTaskIdByFunc(Task_ShowPowerAccWindow);
+ u8 taskId = FindTaskIdByFunc(Task_SlidePowerAccWindow);
if (taskId == TASK_NONE)
- taskId = CreateTask(Task_ShowPowerAccWindow, 8);
- gTasks[taskId].data[0] = b;
- gTasks[taskId].data[1] = a;
+ taskId = CreateTask(Task_SlidePowerAccWindow, 8);
+ gTasks[taskId].tScrollingSpeed = speed;
+ gTasks[taskId].tVisibleColumns = visibleColumns;
}
}
-static void Task_ShowPowerAccWindow(u8 taskId)
+static void Task_SlidePowerAccWindow(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1] += data[0];
- if (data[1] < 0)
+ tVisibleColumns += tScrollingSpeed;
+ if (tVisibleColumns < 0)
{
- data[1] = 0;
+ tVisibleColumns = 0;
}
- else if (data[1] > sBattleMoveTilemapCtrl.field_6)
+ else if (tVisibleColumns > sPowerAccSlidingWindow.width)
{
- data[1] = sBattleMoveTilemapCtrl.field_6;
+ tVisibleColumns = sPowerAccSlidingWindow.width;
}
- ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], data[1], TRUE);
- if (data[1] <= 0 || data[1] >= sBattleMoveTilemapCtrl.field_6)
+ CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], tVisibleColumns, TRUE);
+ if (tVisibleColumns <= 0 || tVisibleColumns >= sPowerAccSlidingWindow.width)
{
- if (data[0] < 0)
+ if (tScrollingSpeed < 0)
{
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
@@ -2991,46 +3014,46 @@ static void Task_ShowPowerAccWindow(u8 taskId)
ScheduleBgCopyTilemapToVram(2);
}
-static void HandleAppealJamTilemap(u16 a, s16 b, u16 move)
+static void PositionAppealJamSlidingWindow(u16 visibleColumns, s16 speed, u16 move)
{
- if (b > sContestMoveTilemapCtrl.field_6)
- b = sContestMoveTilemapCtrl.field_6;
+ if (speed > sAppealJamSlidingWindow.width)
+ speed = sAppealJamSlidingWindow.width;
- if (b == 0 || b == sContestMoveTilemapCtrl.field_6)
+ if (speed == 0 || speed == sAppealJamSlidingWindow.width)
{
- ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], b, TRUE);
+ CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], speed, TRUE);
}
else
{
- u8 taskId = FindTaskIdByFunc(Task_ShowAppealJamWindow);
+ u8 taskId = FindTaskIdByFunc(Task_SlideAppealJamWindow);
if (taskId == TASK_NONE)
- taskId = CreateTask(Task_ShowAppealJamWindow, 8);
- gTasks[taskId].data[0] = b;
- gTasks[taskId].data[1] = a;
- gTasks[taskId].data[2] = move;
+ taskId = CreateTask(Task_SlideAppealJamWindow, 8);
+ gTasks[taskId].tScrollingSpeed = speed;
+ gTasks[taskId].tVisibleColumns = visibleColumns;
+ gTasks[taskId].tMove = move;
}
}
-static void Task_ShowAppealJamWindow(u8 taskId)
+static void Task_SlideAppealJamWindow(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1] += data[0];
- if (data[1] < 0)
+ tVisibleColumns += tScrollingSpeed;
+ if (tVisibleColumns < 0)
{
- data[1] = 0;
+ tVisibleColumns = 0;
}
- else if (data[1] > sContestMoveTilemapCtrl.field_6)
+ else if (tVisibleColumns > sAppealJamSlidingWindow.width)
{
- data[1] = sContestMoveTilemapCtrl.field_6;
+ tVisibleColumns = sAppealJamSlidingWindow.width;
}
- ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], data[1], TRUE);
- if (data[1] <= 0 || data[1] >= sContestMoveTilemapCtrl.field_6)
+ CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], tVisibleColumns, TRUE);
+ if (tVisibleColumns <= 0 || tVisibleColumns >= sAppealJamSlidingWindow.width)
{
- if (data[0] < 0)
+ if (tScrollingSpeed < 0)
{
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES && FuncIsActiveTask(PssScrollRight) == 0)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
- DrawContestMoveHearts(data[2]);
+ DrawContestMoveHearts(tMove);
}
else
{
@@ -3047,37 +3070,37 @@ static void Task_ShowAppealJamWindow(u8 taskId)
ScheduleBgCopyTilemapToVram(2);
}
-static void HandleStatusTilemap(u16 a, s16 b)
+static void PositionStatusSlidingWindow(u16 visibleColumns, s16 speed)
{
- if (b > sStatusTilemapCtrl1.field_6)
- b = sStatusTilemapCtrl1.field_6;
- if (b == 0 || b == sStatusTilemapCtrl1.field_6)
+ if (speed > sStatusSlidingWindow1.width)
+ speed = sStatusSlidingWindow1.width;
+ if (speed == 0 || speed == sStatusSlidingWindow1.width)
{
- ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE);
- ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE);
+ CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE);
+ CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE);
}
else
{
- u8 taskId = CreateTask(Task_ShowStatusWindow, 8);
- gTasks[taskId].data[0] = b;
- gTasks[taskId].data[1] = a;
+ u8 taskId = CreateTask(Task_SlideStatusWindow, 8);
+ gTasks[taskId].tScrollingSpeed = speed;
+ gTasks[taskId].tVisibleColumns = visibleColumns;
}
}
-static void Task_ShowStatusWindow(u8 taskId)
+static void Task_SlideStatusWindow(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1] += data[0];
- if (data[1] < 0)
- data[1] = 0;
- else if (data[1] > sStatusTilemapCtrl1.field_6)
- data[1] = sStatusTilemapCtrl1.field_6;
- ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE);
- ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE);
+ tVisibleColumns += tScrollingSpeed;
+ if (tVisibleColumns < 0)
+ tVisibleColumns = 0;
+ else if (tVisibleColumns > sStatusSlidingWindow1.width)
+ tVisibleColumns = sStatusSlidingWindow1.width;
+ CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE);
+ CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE);
ScheduleBgCopyTilemapToVram(3);
- if (data[1] <= 0 || data[1] >= sStatusTilemapCtrl1.field_6)
+ if (tVisibleColumns <= 0 || tVisibleColumns >= sStatusSlidingWindow1.width)
{
- if (data[0] < 0)
+ if (tScrollingSpeed < 0)
{
CreateSetStatusSprite();
PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS);
@@ -3087,6 +3110,10 @@ static void Task_ShowStatusWindow(u8 taskId)
}
}
+#undef tScrollingSpeed
+#undef tVisibleColumns
+#undef tMove
+
// Toggles the "Cancel" window that appears when selecting a move
static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove)
{
diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c
index 2491a4682e..58952a8d85 100644
--- a/src/pokenav_menu_handler_gfx.c
+++ b/src/pokenav_menu_handler_gfx.c
@@ -1319,7 +1319,14 @@ static void SetupPokenavMenuScanlineEffects(void)
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_ALL);
SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ);
+#ifdef BUGFIX
+ // BUGFIX: Use full register write instead of |=.
+ // SetGpuRegBits left leftover window values from the Party screen,
+ // causing partial/missing glow highlights. SetGpuReg clears them fully.
+ SetGpuReg(REG_OFFSET_WIN0V, DISPLAY_HEIGHT);
+#else
SetGpuRegBits(REG_OFFSET_WIN0V, DISPLAY_HEIGHT);
+#endif
ScanlineEffect_Stop();
SetMenuOptionGlow();
ScanlineEffect_SetParams(sPokenavMainMenuScanlineEffectParams);
diff --git a/src/rtc.c b/src/rtc.c
index 555c86b87e..ace7bfb0c4 100644
--- a/src/rtc.c
+++ b/src/rtc.c
@@ -240,7 +240,7 @@ void RtcReset(void)
RtcRestoreInterrupts();
}
-void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second)
+static void UNUSED FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second)
{
dest = ConvertIntToDecimalStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
*dest++ = CHAR_COLON;
@@ -250,7 +250,7 @@ void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second)
*dest = EOS;
}
-void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second)
+static void UNUSED FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second)
{
dest = ConvertIntToHexStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
*dest++ = CHAR_COLON;
@@ -260,12 +260,12 @@ void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second)
*dest = EOS;
}
-void FormatHexRtcTime(u8 *dest)
+static void UNUSED FormatHexRtcTime(u8 *dest)
{
FormatHexTime(dest, sRtc.hour, sRtc.minute, sRtc.second);
}
-void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day)
+static void UNUSED FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day)
{
dest = ConvertIntToDecimalStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4);
*dest++ = CHAR_HYPHEN;
@@ -275,7 +275,7 @@ void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day)
*dest = EOS;
}
-void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day)
+static void UNUSED FormatHexDate(u8 *dest, s32 year, s32 month, s32 day)
{
dest = ConvertIntToHexStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4);
*dest++ = CHAR_HYPHEN;
diff --git a/src/script.c b/src/script.c
index 3a0c7c7afd..03fe4bb919 100644
--- a/src/script.c
+++ b/src/script.c
@@ -10,6 +10,8 @@
#include "constants/map_scripts.h"
#include "field_message_box.h"
+#include "dexnav.h"
+
#define RAM_SCRIPT_MAGIC 51
enum {
@@ -199,6 +201,7 @@ u32 ScriptPeekWord(struct ScriptContext *ctx)
void LockPlayerFieldControls(void)
{
sLockFieldControls = TRUE;
+ EndDexNavSearch();
}
void UnlockPlayerFieldControls(void)
diff --git a/src/siirtc.c b/src/siirtc.c
index ecce71a03c..156005dc14 100644
--- a/src/siirtc.c
+++ b/src/siirtc.c
@@ -343,7 +343,7 @@ bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc)
return TRUE;
}
-bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc)
+static bool8 UNUSED SiiRtcSetAlarm(struct SiiRtcInfo *rtc)
{
u8 i;
u8 alarmData[2];
diff --git a/src/title_screen.c b/src/title_screen.c
index 73b829cba1..1345567705 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -874,10 +874,10 @@ static void UpdateLegendaryMarkingColor(u8 frameNum)
{
if ((frameNum % 4) == 0) // Change color every 4th frame
{
- s32 intensity = Cos(frameNum, 128) + 128;
- s32 r = 31 - ((intensity * 32 - intensity) / 256);
- s32 g = 31 - (intensity * 22 / 256);
- s32 b = 12;
+ s32 intensity = Cos(frameNum, Q_8_8(0.5)) + Q_8_8(0.5);
+ u32 r = 31 - Q_8_8_TO_INT(intensity * 31);
+ u32 g = 31 - Q_8_8_TO_INT(intensity * 22);
+ u32 b = 12;
u16 color = RGB(r, g, b);
LoadPalette(&color, BG_PLTT_ID(14) + 15, sizeof(color));
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 6dc2a69956..b60f3fe7e6 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -57,18 +57,20 @@ bool16 ResetAllPicSprites(void)
return FALSE;
}
-static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
+static bool16 DecompressPic(u16 picId, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
{
if (!isTrainer)
{
+ u16 species = picId;
LoadSpecialPokePic(dest, species, personality, isFrontPic);
}
else
{
+ u16 trainerPicId = picId;
if (isFrontPic)
- DecompressPicFromTable(&gTrainerSprites[species].frontPic, dest);
+ DecompressPicFromTable(&gTrainerSprites[trainerPicId].frontPic, dest);
else
- CopyTrainerBackspriteFramesToDest(species, dest);
+ CopyTrainerBackspriteFramesToDest(trainerPicId, dest);
}
return FALSE;
}
diff --git a/src/trainer_see.c b/src/trainer_see.c
index bf66f66e2e..ea2869a97a 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -372,7 +372,7 @@ bool8 CheckForTrainersWantingBattle(void)
// Adds trainers wanting to battle to array
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
- {
+ {
if (!gObjectEvents[i].active)
continue;
if (gObjectEvents[i].trainerType != TRAINER_TYPE_NORMAL && gObjectEvents[i].trainerType != TRAINER_TYPE_SEE_ALL_DIRECTIONS && gObjectEvents[i].trainerType != TRAINER_TYPE_BURIED)
diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c
index 16ffad7adb..88c50a5562 100644
--- a/test/battle/ability/aftermath.c
+++ b/test/battle/ability/aftermath.c
@@ -6,10 +6,10 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai
s16 aftermathDamage;
GIVEN {
- PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); };
+ PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {MOVE(opponent, MOVE_SCRATCH);}
+ TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Scratch!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
@@ -24,10 +24,10 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai
SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: player point of view")
{
GIVEN {
- PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); };
- OPPONENT(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); };
+ PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }
+ OPPONENT(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }
} WHEN {
- TURN {MOVE(player, MOVE_HEADBUTT);}
+ TURN { MOVE(player, MOVE_HEADBUTT); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player);
MESSAGE("The opposing Voltorb fainted!");
@@ -38,10 +38,10 @@ SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: player
SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: opponent point of view")
{
GIVEN {
- PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); };
- OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); };
+ PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }
+ OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }
} WHEN {
- TURN {MOVE(opponent, MOVE_HEADBUTT);}
+ TURN { MOVE(opponent, MOVE_HEADBUTT); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, opponent);
MESSAGE("Voltorb fainted!");
diff --git a/test/battle/ability/anticipation.c b/test/battle/ability/anticipation.c
index ee5b602a13..d23cb0c6a5 100644
--- a/test/battle/ability/anticipation.c
+++ b/test/battle/ability/anticipation.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Anticipation causes notifies if an opponent has a super-effe
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CLOSE_COMBAT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Anticipation does not trigger even when a move is super effe
PLAYER(SPECIES_WHISCASH) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_PIKACHU) { Moves(MOVE_CELEBRATE, MOVE_THUNDERBOLT); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Anticipation causes notifies if an opponent has a One-hit KO
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_FISSURE, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Anticipation treats Self-Destruct and Explosion like all oth
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EXPLOSION, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Anticipation doesn't consider Normalize into their effective
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Moves(MOVE_CLOSE_COMBAT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Anticipation doesn't consider Scrappy into their effectivene
PLAYER(SPECIES_DOUBLADE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); Moves(MOVE_CLOSE_COMBAT, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -197,7 +197,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_ARCEUS) { Item(ITEM_FIST_PLATE); Moves(MOVE_JUDGMENT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -230,7 +230,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEPPA_BERRY); Moves(MOVE_NATURAL_GIFT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N
PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_GENESECT) { Item(ITEM_BURN_DRIVE); Moves(MOVE_TECHNO_BLAST, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -261,7 +261,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N
PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_ORICORIO_BAILE) { Moves(MOVE_REVELATION_DANCE, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -276,7 +276,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N
PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_SILVALLY) { Item(ITEM_FIGHTING_MEMORY); Moves(MOVE_MULTI_ATTACK, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -308,7 +308,7 @@ SINGLE_BATTLE_TEST("Anticipation does not consider ate-abilities")
PLAYER(SPECIES_WORMADAM_PLANT) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_AURORUS) { Ability(ABILITY_REFRIGERATE); Moves(MOVE_GROWL, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
@@ -343,7 +343,7 @@ SINGLE_BATTLE_TEST("Anticipation considers Inverse Battle types")
PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_GROWL, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_ANTICIPATION);
}
diff --git a/test/battle/ability/aroma_veil.c b/test/battle/ability/aroma_veil.c
index 08dedfae6e..9a911f5d21 100644
--- a/test/battle/ability/aroma_veil.c
+++ b/test/battle/ability/aroma_veil.c
@@ -159,7 +159,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Impriso
ASSUME(GetMoveEffect(MOVE_IMPRISON) == EFFECT_IMPRISON);
PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); }
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_IMPRISON, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_IMPRISON, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_IMPRISON); MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_SPLASH); }
diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c
index cb724e2411..0fa9f6ef61 100644
--- a/test/battle/ability/bad_dreams.c
+++ b/test/battle/ability/bad_dreams.c
@@ -9,9 +9,9 @@ SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of
PARAMETRIZE { status = STATUS1_SLEEP; }
GIVEN {
PLAYER(SPECIES_DARKRAI);
- OPPONENT(SPECIES_WOBBUFFET) {Status1(status);}
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(status); }
} WHEN {
- TURN {;}
+ TURN {}
} SCENE {
if (status == STATUS1_SLEEP) {
ABILITY_POPUP(player, ABILITY_BAD_DREAMS);
@@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Bad Dreams causes Pokémon with Comatose to lose 1/8 of HP")
PLAYER(SPECIES_DARKRAI);
OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); }
} WHEN {
- TURN {;}
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_BAD_DREAMS);
MESSAGE("The opposing Komala is tormented!");
@@ -55,11 +55,11 @@ DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is
{
GIVEN {
PLAYER(SPECIES_DARKRAI);
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {;}
+ TURN {}
} SCENE {
NONE_OF {
ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS);
@@ -76,12 +76,12 @@ DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is
DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping Pokémon on the player side")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_DARKRAI);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {;}
+ TURN {}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_BAD_DREAMS);
MESSAGE("Wobbuffet is tormented!");
@@ -99,14 +99,14 @@ DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping Pokémon on the playe
DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on player side")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);}
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);}
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
- PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_DARKRAI);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {SEND_OUT(playerLeft, 2); SEND_OUT(playerRight, 3);}
+ TURN { SEND_OUT(playerLeft, 2); SEND_OUT(playerRight, 3); }
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_BAD_DREAMS);
MESSAGE("Wobbuffet is tormented!");
@@ -123,12 +123,12 @@ DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on opponent side")
GIVEN {
PLAYER(SPECIES_DARKRAI);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);}
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);}
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
} WHEN {
- TURN {SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3);}
+ TURN { SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS);
MESSAGE("The opposing Wobbuffet is tormented!");
diff --git a/test/battle/ability/ball_fetch.c b/test/battle/ability/ball_fetch.c
index 762225c0f0..5a8b4d9530 100644
--- a/test/battle/ability/ball_fetch.c
+++ b/test/battle/ability/ball_fetch.c
@@ -15,7 +15,7 @@ WILD_BATTLE_TEST("Ball Fetch causes the Pokémon to pick up the last failed Ball
PLAYER(SPECIES_YAMPER) { Ability(ABILITY_BALL_FETCH); }
OPPONENT(SPECIES_METAGROSS);
} WHEN {
- TURN { USE_ITEM(player, item, WITH_RNG(RNG_BALLTHROW_SHAKE, MAX_u16) );}
+ TURN { USE_ITEM(player, item, WITH_RNG(RNG_BALLTHROW_SHAKE, MAX_u16)); }
TURN {}
} SCENE {
if (item != ITEM_X_ACCURACY)
@@ -51,8 +51,7 @@ WILD_BATTLE_TEST("Ball Fetch doesn't trigger if the Pokémon is already holding
}
else
{
- NONE_OF
- {
+ NONE_OF {
ABILITY_POPUP(player, ABILITY_BALL_FETCH);
MESSAGE("Yamper found a Great Ball!");
}
@@ -74,7 +73,7 @@ WILD_BATTLE_TEST("Ball Fetch only picks up the first failed ball, once per battl
PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_ULTRA_BALL; }
PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_FAST_BALL; }
PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_STRANGE_BALL; }
-
+
GIVEN {
PLAYER(SPECIES_YAMPER) { Ability(ABILITY_BALL_FETCH); }
diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c
index 95787429b1..9d8bb1b3cd 100644
--- a/test/battle/ability/battle_bond.c
+++ b/test/battle/ability/battle_bond.c
@@ -11,10 +11,10 @@ SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles")
{
u32 monsCountPlayer, monsCountOpponent;
- PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; }
- PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; }
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; }
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 1; }
+ PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 1; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; }
GIVEN {
WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8);
@@ -59,10 +59,10 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles")
{
u32 monsCountPlayer, monsCountOpponent;
- PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; }
- PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; }
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; }
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 1; }
+ PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 1; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; }
GIVEN {
WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8);
@@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles")
if (monsCountOpponent == 2) {
OPPONENT(SPECIES_WOBBUFFET);
}
- PLAYER(SPECIES_WOBBUFFET) {HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
if (monsCountPlayer == 2) {
PLAYER(SPECIES_WOBBUFFET);
}
@@ -107,10 +107,10 @@ DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its A
{
u32 monsCountPlayer, monsCountOpponent;
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
- PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 3; }
- PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 2; }
- PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 3; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 3; }
+ PARAMETRIZE { monsCountPlayer = 3; monsCountOpponent = 2; }
+ PARAMETRIZE { monsCountPlayer = 3; monsCountOpponent = 3; }
GIVEN {
WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8);
diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c
index 86172459ab..037a56386c 100644
--- a/test/battle/ability/beads_of_ruin.c
+++ b/test/battle/ability/beads_of_ruin.c
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_CHI_YU);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_CHI_YU);
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
diff --git a/test/battle/ability/cheek_pouch.c b/test/battle/ability/cheek_pouch.c
index ffd1c8416e..0e52ca3fe3 100644
--- a/test/battle/ability/cheek_pouch.c
+++ b/test/battle/ability/cheek_pouch.c
@@ -1,19 +1,178 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("Cheek Pouch restores 33% max HP")
-TO_DO_BATTLE_TEST("Cheek Pouch restores HP after the berry's effect")
-TO_DO_BATTLE_TEST("Cheek Pouch activates via Bug Bite/Pluck if it would trigger an effect")
-TO_DO_BATTLE_TEST("Cheek Pouch activates when receiving from Fling if it would trigger an effect")
-TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift")
-TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling")
-TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using a berry from the bag")
-TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate under Heal Block's effect")
+SINGLE_BATTLE_TEST("Cheek Pouch restores 33% max HP")
+{
+ s16 berryHeal, cheekPouchHeal;
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUPER_FANG); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ HP_BAR(player, captureDamage: &berryHeal);
+ ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ HP_BAR(player, captureDamage: &cheekPouchHeal);
+ } THEN {
+ EXPECT_LT(berryHeal, 0);
+ EXPECT_EQ(cheekPouchHeal, -(player->maxHP / 3));
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch restores HP after the berry's effect")
+{
+ u16 hpAfterBerry, hpAfterCheekPouch;
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUPER_FANG); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ HP_BAR(player, captureHP: &hpAfterBerry);
+ ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ HP_BAR(player, captureHP: &hpAfterCheekPouch);
+ } THEN {
+ EXPECT_GT(hpAfterCheekPouch, hpAfterBerry);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch activates via Bug Bite/Pluck if it would trigger an effect")
+{
+ u16 move;
+ s16 berryHeal, cheekPouchHeal;
+
+ PARAMETRIZE { move = MOVE_BUG_BITE; }
+ PARAMETRIZE { move = MOVE_PLUCK; }
+
+ GIVEN {
+ ASSUME(MoveHasAdditionalEffect(move, MOVE_EFFECT_BUG_BITE));
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(30); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }
+ } WHEN {
+ TURN { MOVE(player, move); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent);
+ HP_BAR(player, captureDamage: &berryHeal);
+ ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ HP_BAR(player, captureDamage: &cheekPouchHeal);
+ } THEN {
+ EXPECT_LT(berryHeal, 0);
+ EXPECT_EQ(cheekPouchHeal, -(player->maxHP / 3));
+ EXPECT_EQ(opponent->item, ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch activates when receiving from Fling if it would trigger an effect")
+{
+ s16 berryHeal, cheekPouchHeal;
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_WOBBUFFET) { Attack(1); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(30); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_FLING); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player);
+ HP_BAR(opponent);
+ HP_BAR(opponent, captureDamage: &berryHeal);
+ ABILITY_POPUP(opponent, ABILITY_CHEEK_POUCH);
+ HP_BAR(opponent, captureDamage: &cheekPouchHeal);
+ } THEN {
+ EXPECT_LT(berryHeal, 0);
+ EXPECT_EQ(cheekPouchHeal, -(opponent->maxHP / 3));
+ EXPECT_EQ(player->item, ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(40); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_NATURAL_GIFT); }
+ } SCENE {
+ NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ } THEN {
+ EXPECT_EQ(player->item, ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(40); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FLING); }
+ } SCENE {
+ NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ } THEN {
+ EXPECT_EQ(player->item, ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using a berry from the bag")
+{
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(20); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { USE_ITEM(player, ITEM_ORAN_BERRY, partyIndex: 0); }
+ } SCENE {
+ NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate under Heal Block's effect")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_HEAL_BLOCK) == EFFECT_HEAL_BLOCK);
+ ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
+ ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10);
+ PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_HEAL_BLOCK); }
+ TURN { MOVE(opponent, MOVE_SUPER_FANG); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent);
+ HP_BAR(player);
+ NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH);
+ } THEN {
+ EXPECT_EQ(player->item, ITEM_ORAN_BERRY);
+ }
+}
SINGLE_BATTLE_TEST("Cheek Pouch activation doesn't mutate damage when restoring HP mid battle")
{
- s16 damage;
- s16 healing;
+ s16 damage, healing;
GIVEN {
PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); Item(ITEM_CHOPLE_BERRY); HP(100); }
diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c
index f5b9573fe0..d1cd9f8d5e 100644
--- a/test/battle/ability/clear_body.c
+++ b/test/battle/ability/clear_body.c
@@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimid
PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; }
PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; }
GIVEN {
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(species) { Ability(ability); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(species) { Ability(ability); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -220,7 +220,7 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S
PLAYER(SPECIES_WOBBUFFET) { Speed(4); }
OPPONENT(species) { Speed(6); Ability(ability); Item(heldItem); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT ABILITY_POPUP(opponent, ability);
if (heldItem == ITEM_IRON_BALL) {
@@ -393,9 +393,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S
PLAYER(SPECIES_WOBBUFFET) { Speed(4); }
OPPONENT(species) { Speed(5); Ability(ability); }
} WHEN {
- TURN{ MOVE(opponent, MOVE_AGILITY); }
- TURN{ MOVE(player, MOVE_SPECTRAL_THIEF); }
- TURN{ }
+ TURN { MOVE(opponent, MOVE_AGILITY); }
+ TURN { MOVE(player, MOVE_SPECTRAL_THIEF); }
+ TURN {}
} SCENE {
if (ability == ABILITY_FULL_METAL_BODY)
MESSAGE("The opposing Solgaleo used Agility!");
diff --git a/test/battle/ability/color_change.c b/test/battle/ability/color_change.c
index 49eaa3e916..9c5176e3ac 100644
--- a/test/battle/ability/color_change.c
+++ b/test/battle/ability/color_change.c
@@ -90,8 +90,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur
OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); }
} WHEN {
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
MESSAGE("The opposing Kecleon took the Future Sight attack!");
@@ -107,8 +107,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Doom
OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); }
} WHEN {
TURN { MOVE(player, MOVE_DOOM_DESIRE); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOOM_DESIRE, player);
MESSAGE("The opposing Kecleon took the Doom Desire attack!");
@@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Electric when a Pokemon is
OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); }
- TURN { }
+ TURN {}
TURN { MOVE(opponent, MOVE_ELECTRIFY); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
@@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Normal when a Pokemon is hi
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { MOVE(player, MOVE_SOAK); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
MESSAGE("Wobbuffet used Soak!");
@@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type to Normal when a Pokem
} WHEN {
TURN { MOVE(player, MOVE_SOAK); }
TURN { MOVE(player, MOVE_STRUGGLE); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, player);
MESSAGE("The opposing Kecleon transformed into the Water type!");
diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c
index c64590a3a3..5a075a8ebf 100644
--- a/test/battle/ability/commander.c
+++ b/test/battle/ability/commander.c
@@ -64,7 +64,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a f
OPPONENT(SPECIES_TYRANITAR) { Ability(ABILITY_SAND_STREAM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
@@ -83,7 +83,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while i
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
@@ -176,7 +176,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri is not damaged by a double target move i
{
GIVEN {
ASSUME(GetMoveTarget(MOVE_SURF) == MOVE_TARGET_FOES_AND_ALLY);
- PLAYER(SPECIES_DONDOZO) { HP(1); };
+ PLAYER(SPECIES_DONDOZO) { HP(1); }
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
@@ -244,7 +244,7 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); }
} WHEN {
- TURN { }
+ TURN {}
TURN { SWITCH(opponentLeft, 2); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
diff --git a/test/battle/ability/competitive.c b/test/battle/ability/competitive.c
index 28cd0198ab..b7d938ae8d 100644
--- a/test/battle/ability/competitive.c
+++ b/test/battle/ability/competitive.c
@@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Competitive correctly activates after Sticky Web lowers Spee
} WHEN {
TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); }
TURN { SWITCH(player, 1); }
- TURN { MOVE(opponent, MOVE_GROWL);}
+ TURN { MOVE(opponent, MOVE_GROWL); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent);
diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c
index ef5b4c6c7d..577affeecb 100644
--- a/test/battle/ability/contrary.c
+++ b/test/battle/ability/contrary.c
@@ -246,7 +246,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn
{
GIVEN{
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT);
- PLAYER(SPECIES_HERACROSS){
+ PLAYER(SPECIES_HERACROSS) {
Level(44);
HP(1);
Speed(5);
@@ -254,7 +254,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn
Item(ITEM_LOADED_DICE);
Moves(MOVE_PIN_MISSILE);
}
- OPPONENT(SPECIES_SERPERIOR){
+ OPPONENT(SPECIES_SERPERIOR) {
Level(44);
Speed(10);
Nature(NATURE_TIMID);
@@ -262,7 +262,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn
Moves(MOVE_DRAGON_PULSE, MOVE_SPIN_OUT, MOVE_HIDDEN_POWER, MOVE_GLARE);
}
} WHEN {
- TURN{
+ TURN {
MOVE(player, MOVE_PIN_MISSILE);
EXPECT_MOVE(opponent, MOVE_SPIN_OUT); // previously all 107, now sees speed can rise w/ Contrary
}
diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c
index f46ad72a72..75ac0fc4bb 100644
--- a/test/battle/ability/corrosion.c
+++ b/test/battle/ability/corrosion.c
@@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion holds a T
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Item(ITEM_TOXIC_ORB); }
OPPONENT(SPECIES_ODDISH);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
STATUS_ICON(player, badPoison: TRUE);
diff --git a/test/battle/ability/cud_chew.c b/test/battle/ability/cud_chew.c
index aca9e79447..809d9f1d7c 100644
--- a/test/battle/ability/cud_chew.c
+++ b/test/battle/ability/cud_chew.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Kee Berry effect again on the next tu
OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { Ability(ABILITY_CUD_CHEW); Item(ITEM_KEE_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
- TURN { MOVE(player, MOVE_CELEBRATE);}
+ TURN { MOVE(player, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
HP_BAR(opponent);
@@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t
OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_DRAGON_RAGE); }
- TURN { MOVE(player, MOVE_CELEBRATE);}
+ TURN { MOVE(player, MOVE_CELEBRATE); }
TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, player);
diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c
index 0813296a2e..d2395fda17 100644
--- a/test/battle/ability/cute_charm.c
+++ b/test/battle/ability/cute_charm.c
@@ -48,13 +48,14 @@ SINGLE_BATTLE_TEST("Cute Charm cannot infatuate same gender")
TO_DO_BATTLE_TEST("Cute Charm cannot infatuate if either Pokémon are Gender-unknown")
-TO_DO_BATTLE_TEST("Cute Charm triggers 1/3 of the time (Gen 3)")
-
-SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time (Gen 4+)")
+SINGLE_BATTLE_TEST("Cute Charm triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time")
{
- PASSES_RANDOMLY(3, 10, RNG_CUTE_CHARM);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3%
+ PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30%
+ PASSES_RANDOMLY(passes, trials, RNG_CUTE_CHARM);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); }
diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c
index 91d5ceb4fc..9a8871d5d7 100644
--- a/test/battle/ability/dauntless_shield.c
+++ b/test/battle/ability/dauntless_shield.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/ability/defeatist.c b/test/battle/ability/defeatist.c
index 16f7c406ee..93d84e8a9d 100644
--- a/test/battle/ability/defeatist.c
+++ b/test/battle/ability/defeatist.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Defeatist halves Attack when HP <= 50%", s16 damage)
PARAMETRIZE { hp = 400; }
PARAMETRIZE { hp = 200; }
GIVEN {
- PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);}
+ PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_CELEBRATE); }
@@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Defeatist halves Special Attack when HP <= 50%", s16 damage)
PARAMETRIZE { hp = 400; }
PARAMETRIZE { hp = 200; }
GIVEN {
- PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);}
+ PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_ECHOED_VOICE); MOVE(opponent, MOVE_CELEBRATE); }
diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c
index 21c1e40a43..2c5c529717 100644
--- a/test/battle/ability/defiant.c
+++ b/test/battle/ability/defiant.c
@@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Co
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); }
- TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL);}
+ TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent);
@@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed if Court Cha
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); }
- TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL);}
+ TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent);
diff --git a/test/battle/ability/delta_stream.c b/test/battle/ability/delta_stream.c
index a2202d64c0..0ea7429ff4 100644
--- a/test/battle/ability/delta_stream.c
+++ b/test/battle/ability/delta_stream.c
@@ -5,5 +5,45 @@
//TO_DO_BATTLE_TEST("Delta Stream doesn't activate if is sent-out in a rotated-out position (Rotation)")
//TO_DO_BATTLE_TEST("Delta Stream doesn't activate if is rotated-in (Rotation)")
-TO_DO_BATTLE_TEST("Delta Stream doesn't activate if there's already strong winds")
-TO_DO_BATTLE_TEST("Strong winds continue as long as there's a Pokémon with Delta Stream on the field") // Doesn't need to be the original mon
+DOUBLE_BATTLE_TEST("Delta Stream doesn't activate if there's already strong winds")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { SWITCH(playerLeft, 2); }
+ } SCENE {
+ ABILITY_POPUP(opponentLeft, ABILITY_DELTA_STREAM);
+ MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Rayquaza");
+ NONE_OF {
+ ABILITY_POPUP(playerLeft, ABILITY_DELTA_STREAM);
+ MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!");
+ }
+ }
+}
+
+DOUBLE_BATTLE_TEST("Strong winds continue as long as there's a Pokémon with Delta Stream on the field")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); HP(1); }
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); SEND_OUT(playerLeft, 2); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft);
+ HP_BAR(playerLeft, hp: 0);
+ MESSAGE("Rayquaza fainted!");
+ SEND_IN_MESSAGE("Wobbuffet");
+ NOT MESSAGE("The mysterious strong winds have dissipated!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS);
+ }
+}
diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c
index d9f1e3924a..918ea720a2 100644
--- a/test/battle/ability/desolate_land.c
+++ b/test/battle/ability/desolate_land.c
@@ -10,7 +10,7 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves")
{
GIVEN {
- PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB);}
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_WATER_GUN); }
@@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th
ASSUME(!IsBattleMoveStatus(MOVE_SURF));
ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER);
ASSUME(GetMoveTarget(MOVE_SURF) == MOVE_TARGET_FOES_AND_ALLY);
- PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB); {Speed(5);}}
- PLAYER(SPECIES_WOBBUFFET) {Speed(5);}
- OPPONENT(SPECIES_WOBBUFFET) {Speed(10);}
- OPPONENT(SPECIES_WOBBUFFET) {Speed(8);}
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(5); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(8); }
} WHEN {
TURN { MOVE(opponentLeft, MOVE_SURF); }
} SCENE {
@@ -56,8 +56,8 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th
SINGLE_BATTLE_TEST("Desolate Land does not block a move if Pokémon is asleep and uses a Water-type move") // Sleep/confusion/paralysis all happen before the check for primal weather
{
GIVEN {
- PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB);}
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
} WHEN {
TURN { MOVE(opponent, MOVE_WATER_GUN); }
} SCENE {
@@ -99,14 +99,81 @@ SINGLE_BATTLE_TEST("Desolate Land is removed immediately if user faints")
}
}
-TO_DO_BATTLE_TEST("Desolate Land makes Sunny Day fail")
-TO_DO_BATTLE_TEST("Desolate Land makes Rain Dance fail")
-TO_DO_BATTLE_TEST("Desolate Land makes Sandstorm fail")
-TO_DO_BATTLE_TEST("Desolate Land makes Hail fail")
-TO_DO_BATTLE_TEST("Desolate Land makes Snowscape fail") // Extrapolation
-TO_DO_BATTLE_TEST("Desolate Land makes Drought fail to activate")
-TO_DO_BATTLE_TEST("Desolate Land makes Drizzle fail to activate")
-TO_DO_BATTLE_TEST("Desolate Land makes Sand Stream fail to activate")
-TO_DO_BATTLE_TEST("Desolate Land makes Snow Warning fail to activate")
-TO_DO_BATTLE_TEST("Desolate Land can be replaced by Delta Stream")
-TO_DO_BATTLE_TEST("Desolate Land can be replaced by Primordial Sea")
+SINGLE_BATTLE_TEST("Desolate Land blocks weather-setting moves")
+{
+ u16 move;
+ PARAMETRIZE { move = MOVE_SUNNY_DAY; }
+ PARAMETRIZE { move = MOVE_RAIN_DANCE; }
+ PARAMETRIZE { move = MOVE_SANDSTORM; }
+ PARAMETRIZE { move = MOVE_HAIL; }
+ PARAMETRIZE { move = MOVE_SNOWSCAPE; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY);
+ ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE);
+ ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
+ ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL);
+ ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE);
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, move); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Desolate Land prevents other weather abilities")
+{
+ u16 ability, species;
+ PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; }
+ PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; }
+ PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; }
+ PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; }
+
+ GIVEN {
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ability);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Desolate Land can be replaced by Delta Stream")
+{
+ GIVEN {
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_DELTA_STREAM);
+ MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Desolate Land can be replaced by Primordial Sea")
+{
+ GIVEN {
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA);
+ MESSAGE("A heavy rain began to fall!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL);
+ }
+}
diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c
index d77f94c1db..24a6a2d5ce 100644
--- a/test/battle/ability/disguise.c
+++ b/test/battle/ability/disguise.c
@@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes no damage from a confusion hit and c
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_CONFUSE_RAY); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player);
diff --git a/test/battle/ability/drizzle.c b/test/battle/ability/drizzle.c
index fd56704830..8e6f7876c9 100644
--- a/test/battle/ability/drizzle.c
+++ b/test/battle/ability/drizzle.c
@@ -22,3 +22,84 @@ SINGLE_BATTLE_TEST("Drizzle summons rain", s16 damage)
EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage);
}
}
+
+SINGLE_BATTLE_TEST("Drizzle sets up rain for 5 turns (Gen6+)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_DRIZZLE);
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("The rain stopped.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Drizzle sets up rain for 8 turns with Damp Rock (Gen6+)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); Item(ITEM_DAMP_ROCK); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_DRIZZLE);
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("The rain stopped.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Drizzle sets up permanent rain (Gen3-5)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3);
+ PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_DRIZZLE);
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ MESSAGE("Rain continues to fall.");
+ NOT MESSAGE("The rain stopped.");
+ }
+}
diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c
index ff61683b54..59b680f422 100644
--- a/test/battle/ability/effect_spore.c
+++ b/test/battle/ability/effect_spore.c
@@ -32,11 +32,15 @@ SINGLE_BATTLE_TEST("Effect Spore only inflicts status on contact")
}
}
-SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time")
+SINGLE_BATTLE_TEST("Effect Spore causes poison 3.3% (Gen3), 10% (Gen4) and 9% (Gen5+) of the time")
{
- PASSES_RANDOMLY(9, 100, RNG_EFFECT_SPORE);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3%
+ PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10%
+ PARAMETRIZE { config = GEN_5; passes = 9; trials = 100; } // 9%
+ PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
@@ -51,11 +55,15 @@ SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time")
}
}
-SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time")
+SINGLE_BATTLE_TEST("Effect Spore causes paralysis 3.3% (Gen3) and 10% (Gen4+) of the time")
{
- PASSES_RANDOMLY(10, 100, RNG_EFFECT_SPORE);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3%
+ PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10%
+ PARAMETRIZE { config = GEN_5; passes = 1; trials = 10; } // 10%
+ PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
@@ -70,11 +78,15 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time")
}
}
-SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time")
+SINGLE_BATTLE_TEST("Effect Spore causes sleep 3.3% (Gen3), 10% (Gen4) and 11% (Gen5+) of the time")
{
- PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3%
+ PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10%
+ PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11%
+ PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
@@ -91,9 +103,13 @@ SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time")
SINGLE_BATTLE_TEST("Effect Spore will check if it can inflict status onto attacker, not itself")
{
- PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3%
+ PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10%
+ PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11%
+ PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BRELOOM) { Status1(STATUS1_BURN); Ability(ABILITY_EFFECT_SPORE); }
diff --git a/test/battle/ability/electromorphosis.c b/test/battle/ability/electromorphosis.c
index 92fe09358e..5291a7d973 100644
--- a/test/battle/ability/electromorphosis.c
+++ b/test/battle/ability/electromorphosis.c
@@ -6,8 +6,8 @@ SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move")
s16 dmgBefore, dmgAfter;
u16 move;
- PARAMETRIZE {move = MOVE_SCRATCH; }
- PARAMETRIZE {move = MOVE_GUST; }
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_GUST; }
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move")
ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
PLAYER(SPECIES_BELLIBOLT) { Ability(ABILITY_ELECTROMORPHOSIS); Speed(10); }
- OPPONENT(SPECIES_WOBBUFFET) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed.
+ OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed.
}
WHEN {
TURN { MOVE(player, MOVE_THUNDER_SHOCK), MOVE(opponent, move); }
diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c
index e7ac53a9e8..326981125f 100644
--- a/test/battle/ability/embody_aspect.c
+++ b/test/battle/ability/embody_aspect.c
@@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Embody Aspect raises a stat depending on the users form by o
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(species) { Ability(ability); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ability);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/ability/emergency_exit.c b/test/battle/ability/emergency_exit.c
index 3592b91b01..a03a4853cb 100644
--- a/test/battle/ability/emergency_exit.c
+++ b/test/battle/ability/emergency_exit.c
@@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Emergency Exit switches out when taking 50% max-hp damage")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SUPER_FANG); SEND_OUT(opponent, 1); }
@@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Emergency Exit does not switch out when going below 50% max-
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET)
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); Item(ITEM_SITRUS_BERRY); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); Item(ITEM_SITRUS_BERRY); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SUPER_FANG); }
@@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Emergency Exit switches out when going below 50% max-HP but
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET)
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); Item(ITEM_ORAN_BERRY); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); Item(ITEM_ORAN_BERRY); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SUPER_FANG); SEND_OUT(opponent, 1); }
@@ -53,8 +53,8 @@ DOUBLE_BATTLE_TEST("Only the fastest Wimp Out (Emergency Exit) user switches out
GIVEN {
PLAYER(SPECIES_ZAPDOS) { Speed(10); }
PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
- OPPONENT(SPECIES_WIMPOD) { Speed(1); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); };
- OPPONENT(SPECIES_WIMPOD) { Speed(2); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); };
+ OPPONENT(SPECIES_WIMPOD) { Speed(1); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }
+ OPPONENT(SPECIES_WIMPOD) { Speed(2); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
} WHEN {
@@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SEND_OUT(opponent, 1); }
@@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when healing from under 50% max-hp
GIVEN {
ASSUME(GetMoveEffect(MOVE_AQUA_RING) == EFFECT_AQUA_RING);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Status1(STATUS1_BURN); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_AQUA_RING); SEND_OUT(opponent, 1); }
@@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SANDSTORM); SEND_OUT(opponent, 1); }
@@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when healing from under 50% max-hp
ASSUME(GetMoveEffect(MOVE_AQUA_RING) == EFFECT_AQUA_RING);
ASSUME(GetItemHoldEffect(ITEM_STICKY_BARB) == HOLD_EFFECT_STICKY_BARB);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Item(ITEM_STICKY_BARB); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Item(ITEM_STICKY_BARB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_AQUA_RING); SEND_OUT(opponent, 1); }
@@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(160); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(160); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SALT_CURE); SEND_OUT(opponent, 1); }
@@ -149,9 +149,9 @@ WILD_BATTLE_TEST("Emergency Exit makes the pokemon flee during wild battle")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }
} WHEN {
- TURN { MOVE(player, MOVE_SUPER_FANG);}
+ TURN { MOVE(player, MOVE_SUPER_FANG); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, player);
HP_BAR(opponent);
@@ -166,9 +166,9 @@ WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falli
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
HP_BAR(opponent);
ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT);
@@ -180,11 +180,11 @@ WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falli
WILD_BATTLE_TEST("Emergency Exit makes the player ran during wild battle")
{
GIVEN {
- PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); };
+ PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_SUPER_FANG);}
+ TURN { MOVE(opponent, MOVE_SUPER_FANG); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent);
HP_BAR(player);
@@ -197,11 +197,11 @@ WILD_BATTLE_TEST("Emergency Exit makes the player ran during wild battle")
WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falling under 50% max-hp (wild battle player side)")
{
GIVEN {
- PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); };
+ PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_SANDSTORM);}
+ TURN { MOVE(opponent, MOVE_SANDSTORM); }
} SCENE {
HP_BAR(player);
ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT);
diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c
index 6120af0c20..8db6f2c142 100644
--- a/test/battle/ability/flame_body.c
+++ b/test/battle/ability/flame_body.c
@@ -30,11 +30,14 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact")
}
}
-SINGLE_BATTLE_TEST("Flame Body triggers 30% of the time")
+SINGLE_BATTLE_TEST("Flame Body triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time")
{
- PASSES_RANDOMLY(3, 10, RNG_FLAME_BODY);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3%
+ PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30%
+ PASSES_RANDOMLY(passes, trials, RNG_FLAME_BODY);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_MAGMAR) { Ability(ABILITY_FLAME_BODY); }
diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c
index e20d2f5205..b39f53c481 100644
--- a/test/battle/ability/frisk.c
+++ b/test/battle/ability/frisk.c
@@ -4,12 +4,12 @@
DOUBLE_BATTLE_TEST("Frisk does not trigger when Pokémon hold no items")
{
GIVEN {
- PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); };
- PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); };
- OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); };
- OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); };
+ PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }
+ PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }
+ OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); }
+ OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
NONE_OF {
ABILITY_POPUP(playerLeft, ABILITY_FRISK);
@@ -23,10 +23,10 @@ DOUBLE_BATTLE_TEST("Frisk does not trigger when Pokémon hold no items")
SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle")
{
GIVEN {
- PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); };
- OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); };
+ PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); }
+ OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_FRISK);
MESSAGE("Furret frisked the opposing Sentret and found its Potion!");
@@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching
ASSUME(!IsBattleMoveStatus(MOVE_POUND));
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
- PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); };
+ PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }
OPPONENT(SPECIES_WYNAUT) { Item(ITEM_POTION); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
@@ -70,7 +70,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
- OPPONENT(SPECIES_FURRET) { Ability(ABILITY_FRISK); };
+ OPPONENT(SPECIES_FURRET) { Ability(ABILITY_FRISK); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); }
} SCENE {
diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c
index be82da81d4..cc40d98b87 100644
--- a/test/battle/ability/gale_wings.c
+++ b/test/battle/ability/gale_wings.c
@@ -11,8 +11,8 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP (Gen 7+)")
GIVEN {
WITH_CONFIG(CONFIG_GALE_WINGS, config);
ASSUME(GetMoveType(MOVE_AERIAL_ACE) == TYPE_FLYING);
- PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1);}
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100);};
+ PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(player, MOVE_AERIAL_ACE); }
} SCENE {
@@ -35,8 +35,8 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves")
GIVEN {
ASSUME(GetMoveType(MOVE_AERIAL_ACE) == TYPE_FLYING);
ASSUME(GetMoveType(MOVE_FLARE_BLITZ) == TYPE_FIRE);
- PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1);}
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100);};
+ PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
@@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural
ASSUME(gItemsInfo[ITEM_SKY_PLATE].secondaryId == TYPE_FLYING);
ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_LUM_BERRY)].type == TYPE_FLYING);
OPPONENT(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); Speed(1); Item(heldItem); HPIV(31); AttackIV(3); DefenseIV(31); SpAttackIV(30); SpDefenseIV(30); SpeedIV(30); TeraType(TYPE_FLYING); }
- PLAYER(SPECIES_WOBBUFFET) { Speed(100); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(opponent, move); }
} SCENE {
diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c
index bb212e589b..2fe20473df 100644
--- a/test/battle/ability/grim_neigh.c
+++ b/test/battle/ability/grim_neigh.c
@@ -15,7 +15,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly cau
OPPONENT(SPECIES_ABRA) { HP(1); }
OPPONENT(SPECIES_ABRA);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); }
+ TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft);
MESSAGE("The opposing Glalie fainted!");
@@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect dam
OPPONENT(SPECIES_ABRA) { HP(1); }
OPPONENT(SPECIES_ABRA);
} WHEN {
- TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); }
+ TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); }
} SCENE {
int i;
diff --git a/test/battle/ability/healer.c b/test/battle/ability/healer.c
index 6a113f407b..93422ed8a0 100644
--- a/test/battle/ability/healer.c
+++ b/test/battle/ability/healer.c
@@ -18,7 +18,7 @@ DOUBLE_BATTLE_TEST("Healer cures adjacent ally's status condition 30% of the tim
OPPONENT(SPECIES_WOBBUFFET) { Status1(status); }
OPPONENT(SPECIES_CHANSEY) { Ability(ABILITY_HEALER); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
MESSAGE("The opposing Chansey's Healer cured the opposing Wobbuffet's problem!");
}
diff --git a/test/battle/ability/heatproof.c b/test/battle/ability/heatproof.c
index 7f1d772bb7..154569fd2a 100644
--- a/test/battle/ability/heatproof.c
+++ b/test/battle/ability/heatproof.c
@@ -1,4 +1,52 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Heatproof (Ability) test titles")
+ASSUMPTIONS
+{
+ ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
+ ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
+}
+
+SINGLE_BATTLE_TEST("Heatproof halves damage from fire type moves")
+{
+ s16 damage[2];
+ GIVEN {
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); }
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_EMBER); }
+ TURN { MOVE(player, MOVE_WORRY_SEED); }
+ TURN { MOVE(player, MOVE_EMBER); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ EXPECT_MUL_EQ(damage[0], Q_4_12(2), damage[1]);
+ }
+}
+
+SINGLE_BATTLE_TEST("Heatproof halves the damage done by burn from 1/8th to 1/16th (Gen1-6) or 1/16th to 1/32nd (Gen 7+)")
+{
+ u32 config, burnRate;
+
+ PARAMETRIZE { config = GEN_7; burnRate = 32; }
+ PARAMETRIZE { config = GEN_6; burnRate = 16; }
+
+ GIVEN {
+ WITH_CONFIG(CONFIG_BURN_DAMAGE, config);
+ PLAYER (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); Status1(STATUS1_BURN); }
+ OPPONENT (SPECIES_WOBBUFFET);
+ }
+ WHEN {
+ TURN {}
+ }
+ SCENE {
+ s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
+ HP_BAR(player, damage: maxHP / burnRate);
+ }
+}
+
diff --git a/test/battle/ability/hospitality.c b/test/battle/ability/hospitality.c
index 2c89c3eb97..925c7b6ce1 100644
--- a/test/battle/ability/hospitality.c
+++ b/test/battle/ability/hospitality.c
@@ -14,7 +14,7 @@ DOUBLE_BATTLE_TEST("Hospitality user restores 25% of ally's health")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
if (health == 75) {
ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
@@ -72,8 +72,8 @@ DOUBLE_BATTLE_TEST("Hospitality ignores Substitute")
DOUBLE_BATTLE_TEST("Hospitality does not trigger if there is no ally on the field")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(1); }
- PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_POLTCHAGEIST) { Ability(ABILITY_HOSPITALITY); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
diff --git a/test/battle/ability/hunger_switch.c b/test/battle/ability/hunger_switch.c
index 469cf02d3c..0c2dc8a533 100644
--- a/test/battle/ability/hunger_switch.c
+++ b/test/battle/ability/hunger_switch.c
@@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Hunger Switch does not switch Morpeko's form when Terastalli
PLAYER(SPECIES_MORPEKO) { Ability(ABILITY_HUNGER_SWITCH); TeraType(TYPE_NORMAL); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_TERA); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Hunger Switch does not switch Morpeko's form after switching
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROAR); }
TURN { SWITCH(player, 0); }
} SCENE {
diff --git a/test/battle/ability/ice_face.c b/test/battle/ability/ice_face.c
index c3df84baeb..4abb9a9baf 100644
--- a/test/battle/ability/ice_face.c
+++ b/test/battle/ability/ice_face.c
@@ -11,7 +11,10 @@ SINGLE_BATTLE_TEST("Ice Face blocks physical moves, changing Eiscue into its Noi
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Eiscue transformed!");
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_EISCUE_NOICE);
}
}
@@ -26,6 +29,8 @@ SINGLE_BATTLE_TEST("Ice Face does not block special moves, Eiscue stays in Ice F
TURN { MOVE(opponent, MOVE_EMBER); }
} SCENE {
NOT ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_EISCUE_ICE);
}
}
@@ -46,11 +51,16 @@ SINGLE_BATTLE_TEST("Ice Face is restored if hail or snow begins while Noice Face
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Eiscue transformed!");
ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Eiscue transformed!");
ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Eiscue transformed!");
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_EISCUE_NOICE);
}
}
diff --git a/test/battle/ability/illusion.c b/test/battle/ability/illusion.c
index efa80cdafe..46d99c7741 100644
--- a/test/battle/ability/illusion.c
+++ b/test/battle/ability/illusion.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Illusion can only imitate Normal Form terapagos")
// Switch to Terapagos which enters Terastal Form
TURN { SWITCH(player, 1); }
// Switch back to Zoroark, should not be Terastal Terapagos
- TURN { SWITCH(player, 0); MOVE(opponent, MOVE_SCRATCH);}
+ TURN { SWITCH(player, 0); MOVE(opponent, MOVE_SCRATCH); }
// Switch back to Terapagos
TURN { SWITCH(player, 1); }
// Terapagos Stellar, Zoroark gets Roared in, should not be Stellar Terapagos
@@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Illusion breaks in Neutralizing Gas")
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, player);
@@ -117,12 +117,12 @@ SINGLE_BATTLE_TEST("Illusion breaks if user loses Illusion due to Worry Seed")
SINGLE_BATTLE_TEST("Illusion breaks when attacked behind a substitute")
{
GIVEN {
- PLAYER(SPECIES_DRAGAPULT) {Ability(ABILITY_INFILTRATOR); Speed(1);};
- OPPONENT(SPECIES_WOBBUFFET) {Speed(2);};
- OPPONENT(SPECIES_ZOROARK) {Speed(2);};
- OPPONENT(SPECIES_WYNAUT) {Speed(2);};
+ PLAYER(SPECIES_DRAGAPULT) { Ability(ABILITY_INFILTRATOR); Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
+ OPPONENT(SPECIES_ZOROARK) { Speed(2); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(2); }
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SHED_TAIL); SEND_OUT(opponent, 1);}
+ TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SHED_TAIL); SEND_OUT(opponent, 1); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SWAP_FROM_SUBSTITUTE, opponent);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, opponent);
diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c
index 516bde342e..87f730c1bb 100644
--- a/test/battle/ability/innards_out.c
+++ b/test/battle/ability/innards_out.c
@@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight")
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponent, MOVE_FUTURE_SIGHT); }
- TURN { }
+ TURN {}
TURN { SEND_OUT(player, 1); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponent);
diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c
index 7280725e88..ef0d8ea8a0 100644
--- a/test/battle/ability/inner_focus.c
+++ b/test/battle/ability/inner_focus.c
@@ -8,9 +8,9 @@ SINGLE_BATTLE_TEST("Inner Focus doesn't prevent intimidate (Gen3-7)")
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -35,9 +35,9 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate (Gen8+)")
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); };
+ OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }
} WHEN {
TURN { MOVE(player, MOVE_FAKE_OUT);
MOVE(opponent, MOVE_SCRATCH);
@@ -73,8 +73,8 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching")
SINGLE_BATTLE_TEST("Mold Breaker ignores Inner Focus")
{
GIVEN {
- PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); };
- OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); };
+ PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
+ OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }
} WHEN {
TURN { MOVE(player, MOVE_FAKE_OUT); }
} SCENE {
diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c
index 0606938d45..443566cb76 100644
--- a/test/battle/ability/intimidate.c
+++ b/test/battle/ability/intimidate.c
@@ -171,7 +171,7 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot")
DOUBLE_BATTLE_TEST("Intimidate activates immediately after the mon was switched in as long as one opposing mon is alive")
{
GIVEN {
- PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
+ PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); }
OPPONENT(SPECIES_WYNAUT) { HP(1); }
diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c
index f7c3705d44..2ea924fc26 100644
--- a/test/battle/ability/intrepid_sword.c
+++ b/test/battle/ability/intrepid_sword.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
@@ -122,9 +122,9 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage
PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); }
} WHEN {
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
TURN { MOVE(player, MOVE_SKILL_SWAP); }
} SCENE {
NONE_OF {
@@ -145,10 +145,10 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
} WHEN {
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
- TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);}
- TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1);}
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
} SCENE {
NONE_OF {
ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD);
diff --git a/test/battle/ability/magic_guard.c b/test/battle/ability/magic_guard.c
index adcfdfc5ac..7c080c1fa5 100644
--- a/test/battle/ability/magic_guard.c
+++ b/test/battle/ability/magic_guard.c
@@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by par
else
PASSES_RANDOMLY(75, 100, RNG_PARALYSIS);
GIVEN {
- PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);}
+ PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); }
@@ -35,10 +35,10 @@ SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by par
SINGLE_BATTLE_TEST("Magic Guard does not ignore speed stat changes caused by paralysis")
{
GIVEN {
- PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);}
+ PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(99); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
diff --git a/test/battle/ability/mimicry.c b/test/battle/ability/mimicry.c
index 5cdea7276f..ff65ebaa12 100644
--- a/test/battle/ability/mimicry.c
+++ b/test/battle/ability/mimicry.c
@@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Mimicry restores the battler's types when terrain is removed
GIVEN {
ASSUME(GetSpeciesType(SPECIES_STUNFISK_GALAR, 0) == TYPE_GROUND);
ASSUME(GetSpeciesType(SPECIES_STUNFISK_GALAR, 1) == TYPE_STEEL);
- PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); }
} WHEN {
TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); }
diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c
index 4ac339d899..2bc17b93d1 100644
--- a/test/battle/ability/minds_eye.c
+++ b/test/battle/ability/minds_eye.c
@@ -8,7 +8,7 @@ SINGLE_BATTLE_TEST("Mind's Eye allows to hit Ghost-type Pokémon with Normal- an
PARAMETRIZE { move = MOVE_KARATE_CHOP; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_MINDS_EYE); };
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_MINDS_EYE); }
OPPONENT(SPECIES_GASTLY);
} WHEN {
TURN { MOVE(player, move); }
@@ -26,8 +26,8 @@ SINGLE_BATTLE_TEST("Mind's Eye doesn't bypass a Ghost-type's Wonder Guard")
PARAMETRIZE { move = MOVE_KARATE_CHOP; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SCRAPPY); };
- OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); };
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SCRAPPY); }
+ OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c
index 771df02699..786ac6eaa8 100644
--- a/test/battle/ability/mirror_armor.c
+++ b/test/battle/ability/mirror_armor.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking Pokémon")
PARAMETRIZE { move = MOVE_FAKE_TEARS; statId = STAT_SPDEF; }
GIVEN {
- PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);}
+ PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponent, move); }
@@ -129,8 +129,8 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon
SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Contrary")
{
GIVEN {
- PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);}
- OPPONENT(SPECIES_SHUCKLE) {Ability(ABILITY_CONTRARY);}
+ PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); }
+ OPPONENT(SPECIES_SHUCKLE) { Ability(ABILITY_CONTRARY); }
} WHEN {
TURN { MOVE(opponent, MOVE_LEER); }
} SCENE {
@@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co
SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon if it is already at -6")
{
GIVEN {
- PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);}
+ PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(player, MOVE_SCREECH); }
@@ -177,15 +177,15 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court
ASSUME(GetMoveEffect(MOVE_COURT_CHANGE) == EFFECT_COURT_CHANGE);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); }
+ PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); }
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(playerLeft, MOVE_STICKY_WEB); }
TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); }
- TURN { SWITCH(playerRight, 2);}
- TURN { }
+ TURN { SWITCH(playerRight, 2); }
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Sticky Web!");
MESSAGE("The opposing Wynaut used Court Change!");
diff --git a/test/battle/ability/moody.c b/test/battle/ability/moody.c
index 739bee6d01..ca04ec1f70 100644
--- a/test/battle/ability/moody.c
+++ b/test/battle/ability/moody.c
@@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the user's Attack, Defense, Sp. Atk, S
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_MOODY);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Moody randomly lowers the user's Attack, Defense, Sp. Atk, S
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_MOODY);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
@@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the holder's Attack, Defense, Sp. Atk,
PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_MOODY);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c
index 01eb51b9e7..0903c24db0 100644
--- a/test/battle/ability/moxie.c
+++ b/test/battle/ability/moxie.c
@@ -16,7 +16,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct
OPPONENT(SPECIES_ABRA) { HP(1); }
OPPONENT(SPECIES_ABRA);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); SEND_OUT(opponentLeft, 2); }
+ TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); SEND_OUT(opponentLeft, 2); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft);
MESSAGE("The opposing Glalie fainted!");
@@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in
OPPONENT(SPECIES_ABRA) { HP(1); }
OPPONENT(SPECIES_ABRA);
} WHEN {
- TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); }
+ TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); }
} SCENE {
int i;
diff --git a/test/battle/ability/mummy.c b/test/battle/ability/mummy.c
index 990fba7a0d..ea1b0363da 100644
--- a/test/battle/ability/mummy.c
+++ b/test/battle/ability/mummy.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Mummy/Lingering Aroma replace the attacker's ability on cont
enum Ability ability;
PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; }
- PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK;}
+ PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; }
PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; }
PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; }
GIVEN {
diff --git a/test/battle/ability/mycelium_might.c b/test/battle/ability/mycelium_might.c
index 7ffac1c641..e5a8b569e1 100644
--- a/test/battle/ability/mycelium_might.c
+++ b/test/battle/ability/mycelium_might.c
@@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Mycelium Might ignores opposing abilities")
{
GIVEN {
PLAYER(SPECIES_TOEDSCOOL) { Speed(100); Ability(ABILITY_MYCELIUM_MIGHT); }
- OPPONENT(SPECIES_BELDUM) { Speed(1); Ability(ABILITY_CLEAR_BODY);}
+ OPPONENT(SPECIES_BELDUM) { Speed(1); Ability(ABILITY_CLEAR_BODY); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCREECH); }
} SCENE {
@@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Mycelium Might vs Stall action order depends on speed")
PARAMETRIZE { speed = 101; }
GIVEN {
PLAYER(SPECIES_TOEDSCOOL) { Speed(100); Ability(ABILITY_MYCELIUM_MIGHT); }
- OPPONENT(SPECIES_SABLEYE) { Speed(speed); Ability(ABILITY_STALL);}
+ OPPONENT(SPECIES_SABLEYE) { Speed(speed); Ability(ABILITY_STALL); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
diff --git a/test/battle/ability/neutralizing_gas.c b/test/battle/ability/neutralizing_gas.c
index 02f7323af2..9a28bff8f2 100644
--- a/test/battle/ability/neutralizing_gas.c
+++ b/test/battle/ability/neutralizing_gas.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas activates on switch-in")
PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
MESSAGE("Neutralizing gas filled the area!");
@@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas prevents opponent's switch-in ability from
PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
OPPONENT(SPECIES_ZEKROM) { Ability(ABILITY_TERAVOLT); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
NONE_OF {
@@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Neutralizing Gas prevents ally's switch-in ability from acti
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_NEUTRALIZING_GAS);
NONE_OF {
@@ -243,7 +243,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas prevents Trace from copying it")
PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); }
OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
NONE_OF {
diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c
index b50c46be09..24401c8e7f 100644
--- a/test/battle/ability/normalize.c
+++ b/test/battle/ability/normalize.c
@@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Normalize turns a move into a Normal-type move")
GIVEN {
ASSUME(GetSpeciesType(SPECIES_GASTLY, 0) == TYPE_GHOST);
PLAYER(SPECIES_GASTLY);
- OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN);}
+ OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN); }
} WHEN {
TURN { MOVE(opponent, MOVE_WATER_GUN); }
} SCENE {
@@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Normalize affects status moves")
ASSUME(GetMoveType(MOVE_THUNDER_WAVE) == TYPE_ELECTRIC);
ASSUME(GetSpeciesType(SPECIES_DRILBUR, 0) == TYPE_GROUND);
PLAYER(SPECIES_DRILBUR);
- OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_THUNDER_WAVE);}
+ OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_THUNDER_WAVE); }
} WHEN {
TURN { MOVE(opponent, MOVE_THUNDER_WAVE); }
} SCENE {
@@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Normalize still makes Freeze-Dry do super effective damage t
ASSUME(GetMoveEffect(MOVE_FREEZE_DRY) == EFFECT_SUPER_EFFECTIVE_ON_ARG);
ASSUME(GetSpeciesType(SPECIES_MUDKIP, 0) == TYPE_WATER);
PLAYER(SPECIES_MUDKIP);
- OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_FREEZE_DRY);}
+ OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_FREEZE_DRY); }
} WHEN {
TURN { MOVE(opponent, MOVE_FREEZE_DRY); }
} SCENE {
diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c
index 6e5b13dd31..b78ebc96a0 100644
--- a/test/battle/ability/opportunist.c
+++ b/test/battle/ability/opportunist.c
@@ -218,7 +218,7 @@ DOUBLE_BATTLE_TEST("Opportunist copies the stat of each Pokémon that were raise
OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_INTREPID_SWORD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
@@ -281,7 +281,7 @@ SINGLE_BATTLE_TEST("Opportunist and Mirror Herb stack stat increases")
PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_INTREPID_SWORD);
ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
@@ -303,7 +303,7 @@ DOUBLE_BATTLE_TEST("Opportunist and Mirror Herb resolve correctly")
OPPONENT(SPECIES_MEOWSCARADA) { Item(ITEM_MIRROR_HERB); }
OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_INTREPID_SWORD);
ABILITY_POPUP(opponentRight, ABILITY_OPPORTUNIST);
diff --git a/test/battle/ability/orichalcum_pulse.c b/test/battle/ability/orichalcum_pulse.c
index 295e0db23c..62509ce0c6 100644
--- a/test/battle/ability/orichalcum_pulse.c
+++ b/test/battle/ability/orichalcum_pulse.c
@@ -1,5 +1,112 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns");
-TO_DO_BATTLE_TEST("Orichalcum Pulse boosts the Pokémon's Attack by 33% in sun, even if it's holding an Utility Umbrella");
+SINGLE_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns")
+{
+ GIVEN {
+ PLAYER(SPECIES_KORAIDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_ORICHALCUM_PULSE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE);
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight faded.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Orichalcum Pulse sets up sun for 8 turns with Heat Rock")
+{
+ GIVEN {
+ PLAYER(SPECIES_KORAIDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_ORICHALCUM_PULSE); Item(ITEM_HEAT_ROCK); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE);
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight is strong.");
+ MESSAGE("The sunlight faded.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Orichalcum Pulse boosts physical moves by 33% in sun", s16 damage)
+{
+ u16 setupMove;
+ PARAMETRIZE { setupMove = MOVE_CELEBRATE; }
+ PARAMETRIZE { setupMove = MOVE_RAIN_DANCE; }
+
+ GIVEN {
+ ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
+ PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_RAIN_DANCE, MOVE_CELEBRATE); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, setupMove); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.3333), results[0].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Orichalcum Pulse boost applies even if the target holds Utility Umbrella", s16 damage)
+{
+ u16 targetItem;
+ PARAMETRIZE { targetItem = ITEM_NONE; }
+ PARAMETRIZE { targetItem = ITEM_UTILITY_UMBRELLA; }
+
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
+ ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
+ PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(10); Item(targetItem); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_EQ(results[0].damage, results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Orichalcum Pulse does not boost physical moves if holder has Utility Umbrella", s16 damage)
+{
+ u16 holdItem;
+ PARAMETRIZE { holdItem = ITEM_NONE; }
+ PARAMETRIZE { holdItem = ITEM_UTILITY_UMBRELLA; }
+
+ GIVEN {
+ ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA);
+ ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
+ PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); Item(holdItem); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.3333), results[0].damage);
+ }
+}
diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c
index b0e8984bec..7346691c46 100644
--- a/test/battle/ability/overcoat.c
+++ b/test/battle/ability/overcoat.c
@@ -78,8 +78,8 @@ SINGLE_BATTLE_TEST("Overcoat blocks Effect Spore's effect (Gen6+)")
PARAMETRIZE { config = GEN_6; }
GIVEN {
WITH_CONFIG(CONFIG_POWDER_OVERCOAT, config);
- PLAYER(SPECIES_PINECO) {Ability(ABILITY_OVERCOAT);}
- OPPONENT(SPECIES_SHROOMISH) {Ability(ABILITY_EFFECT_SPORE);}
+ PLAYER(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); }
+ OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_EFFECT_SPORE); }
} WHEN {
TURN { MOVE(player, MOVE_TACKLE, WITH_RNG(RNG_EFFECT_SPORE, 1)); }
} SCENE {
diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c
index c2b9f4d6d9..06b6f366ff 100644
--- a/test/battle/ability/own_tempo.c
+++ b/test/battle/ability/own_tempo.c
@@ -6,10 +6,10 @@ SINGLE_BATTLE_TEST("Own Tempo doesn't prevent Intimidate (Gen3-7)")
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7);
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_INTIMIDATE);
NONE_OF {
@@ -24,8 +24,8 @@ SINGLE_BATTLE_TEST("Own Tempo prevents Intimidate but no other stat down changes
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8);
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
TURN { MOVE(player, MOVE_SCARY_FACE); }
} SCENE {
@@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the opponent")
GIVEN {
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
TURN { MOVE(player, MOVE_CONFUSE_RAY); }
} SCENE {
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user")
GIVEN {
ASSUME(MoveHasAdditionalEffectSelf(MOVE_PETAL_DANCE, MOVE_EFFECT_THRASH));
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
TURN { MOVE(opponent, MOVE_PETAL_DANCE); }
TURN { MOVE(opponent, MOVE_PETAL_DANCE); }
@@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Mold Breaker ignores Own Tempo")
GIVEN {
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
TURN { MOVE(player, MOVE_CONFUSE_RAY); }
} SCENE {
@@ -92,8 +92,8 @@ SINGLE_BATTLE_TEST("Mold Breaker does not prevent Own Tempo from curing confusio
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
- PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); };
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
} WHEN {
TURN { MOVE(player, MOVE_CONFUSE_RAY); }
} SCENE {
@@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion if it's obtained via Skill Swap")
GIVEN {
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP);
- PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); };
+ PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CONFUSE_RAY); }
@@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from items")
GIVEN {
ASSUME(gItemsInfo[ITEM_BERSERK_GENE].holdEffect == HOLD_EFFECT_BERSERK_GENE);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); Item(ITEM_BERSERK_GENE); };
+ OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); Item(ITEM_BERSERK_GENE); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
diff --git a/test/battle/ability/poison_heal.c b/test/battle/ability/poison_heal.c
index 2ee7620c62..9d7acc38a8 100644
--- a/test/battle/ability/poison_heal.c
+++ b/test/battle/ability/poison_heal.c
@@ -28,8 +28,8 @@ SINGLE_BATTLE_TEST("Poison Heal heals from Toxic Poison damage are constant")
PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Status1(STATUS1_TOXIC_POISON); HP(1), MaxHP(400); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_POISON_HEAL);
MESSAGE("The poisoning healed Shroomish a little bit!");
diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c
index 243ed51bb5..2b6c4aa19f 100644
--- a/test/battle/ability/poison_point.c
+++ b/test/battle/ability/poison_point.c
@@ -31,11 +31,14 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact")
}
}
-SINGLE_BATTLE_TEST("Poison Point triggers 30% of the time")
+SINGLE_BATTLE_TEST("Poison Point triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time")
{
- PASSES_RANDOMLY(3, 10, RNG_POISON_POINT);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3%
+ PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30%
+ PASSES_RANDOMLY(passes, trials, RNG_POISON_POINT);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_NIDORAN_M) { Ability(ABILITY_POISON_POINT); }
diff --git a/test/battle/ability/poison_puppeteer.c b/test/battle/ability/poison_puppeteer.c
index db27691415..6956271236 100644
--- a/test/battle/ability/poison_puppeteer.c
+++ b/test/battle/ability/poison_puppeteer.c
@@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer does not trigger if poison is Toxic Spikes
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TOXIC_SPIKES);}
+ TURN { MOVE(player, MOVE_TOXIC_SPIKES); }
TURN { SWITCH(opponent, 1); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player);
diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c
index 6678394e6f..e3775d7427 100644
--- a/test/battle/ability/poison_touch.c
+++ b/test/battle/ability/poison_touch.c
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits")
ASSUME(MoveMakesContact(MOVE_ARM_THRUST));
ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN);
PLAYER(SPECIES_GRIMER) { Ability(ABILITY_POISON_TOUCH); }
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_ARM_THRUST); }
} SCENE {
diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c
index 7e170570cf..0f1fcd0930 100644
--- a/test/battle/ability/prankster.c
+++ b/test/battle/ability/prankster.c
@@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark
WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen);
PLAYER(SPECIES_UMBREON);
OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
- OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); };
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); }
} WHEN {
TURN { MOVE(opponent, MOVE_ASSIST); }
} SCENE {
@@ -89,7 +89,7 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect D
GIVEN {
WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen);
PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); }
- PLAYER(SPECIES_WOBBUFFET) { Speed(10);}
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
OPPONENT(SPECIES_UMBREON) { Speed(15); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
OPPONENT(SPECIES_UMBREON) { Speed(1); }
@@ -134,7 +134,7 @@ DOUBLE_BATTLE_TEST("Moves called via Prankster-affected After you affect Dark-ty
{
GIVEN {
PLAYER(SPECIES_VOLBEAT) { Speed(1); Ability(ABILITY_PRANKSTER); }
- PLAYER(SPECIES_WOBBUFFET) { Speed(1);}
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
OPPONENT(SPECIES_UMBREON) { Speed(10); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
} WHEN {
diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c
index f24219f263..7cf8dee531 100644
--- a/test/battle/ability/primordial_sea.c
+++ b/test/battle/ability/primordial_sea.c
@@ -10,7 +10,7 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves")
{
GIVEN {
- PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);}
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBER); }
@@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th
ASSUME(!IsBattleMoveStatus(MOVE_ERUPTION));
ASSUME(GetMoveType(MOVE_ERUPTION) == TYPE_FIRE);
ASSUME(GetMoveTarget(MOVE_ERUPTION) == MOVE_TARGET_BOTH);
- PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB); {Speed(5);}}
- PLAYER(SPECIES_WOBBUFFET) {Speed(5);}
- OPPONENT(SPECIES_WOBBUFFET) {Speed(10);}
- OPPONENT(SPECIES_WOBBUFFET) {Speed(8);}
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(8); }
} WHEN {
TURN { MOVE(opponentLeft, MOVE_ERUPTION); }
} SCENE {
@@ -55,8 +55,8 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th
SINGLE_BATTLE_TEST("Primordial Sea does not block a move if Pokémon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather
{
GIVEN {
- PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);}
- OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);}
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
} WHEN {
TURN { MOVE(opponent, MOVE_EMBER); }
} SCENE {
@@ -65,14 +65,81 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if Pokémon is asleep a
}
}
-TO_DO_BATTLE_TEST("Primordial Sea makes Sunny Day fail")
-TO_DO_BATTLE_TEST("Primordial Sea makes Rain Dance fail")
-TO_DO_BATTLE_TEST("Primordial Sea makes Sandstorm fail")
-TO_DO_BATTLE_TEST("Primordial Sea makes Hail fail")
-TO_DO_BATTLE_TEST("Primordial Sea makes Snowscape fail") // Extrapolation
-TO_DO_BATTLE_TEST("Primordial Sea makes Drought fail to activate")
-TO_DO_BATTLE_TEST("Primordial Sea makes Drizzle fail to activate")
-TO_DO_BATTLE_TEST("Primordial Sea makes Sand Stream fail to activate")
-TO_DO_BATTLE_TEST("Primordial Sea makes Snow Warning fail to activate")
-TO_DO_BATTLE_TEST("Primordial Sea can be replaced by Delta Stream")
-TO_DO_BATTLE_TEST("Primordial Sea can be replaced by Desolate Land")
+SINGLE_BATTLE_TEST("Primordial Sea blocks weather-setting moves")
+{
+ u16 move;
+ PARAMETRIZE { move = MOVE_SUNNY_DAY; }
+ PARAMETRIZE { move = MOVE_RAIN_DANCE; }
+ PARAMETRIZE { move = MOVE_SANDSTORM; }
+ PARAMETRIZE { move = MOVE_HAIL; }
+ PARAMETRIZE { move = MOVE_SNOWSCAPE; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY);
+ ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE);
+ ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
+ ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL);
+ ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE);
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, move); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Primordial Sea prevents other weather abilities")
+{
+ u16 ability, species;
+ PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; }
+ PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; }
+ PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; }
+ PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; }
+
+ GIVEN {
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ability);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Primordial Sea can be replaced by Delta Stream")
+{
+ GIVEN {
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_DELTA_STREAM);
+ MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Primordial Sea can be replaced by Desolate Land")
+{
+ GIVEN {
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_DESOLATE_LAND);
+ MESSAGE("The sunlight turned extremely harsh!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL);
+ }
+}
diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c
index a080e90a11..aca8e6fbf9 100644
--- a/test/battle/ability/protosynthesis.c
+++ b/test/battle/ability/protosynthesis.c
@@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Protosynthesis ability pop up activates only once during the
GIVEN {
WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
PLAYER(SPECIES_WALKING_WAKE) { Ability(ABILITY_PROTOSYNTHESIS); }
- OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); };
+ OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }
} WHEN {
for (turns = 0; turns < 5; turns++)
TURN {}
@@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_ROARING_MOON) { Ability(ABILITY_PROTOSYNTHESIS); }
- OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); };
+ OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
@@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Protosynthesis prioritizes stats in the case of a tie in the
PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); }
OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_DROUGHT);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
@@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an
PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_UTILITY_UMBRELLA); }
OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_DROUGHT);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c
index 80dc786117..df348752fb 100644
--- a/test/battle/ability/purifying_salt.c
+++ b/test/battle/ability/purifying_salt.c
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Purifying Salt halves damage from dynamic Ghost-type moves",
SINGLE_BATTLE_TEST("Purifying Salt makes Rest fail")
{
GIVEN {
- PLAYER(SPECIES_GARGANACL) { Ability(ABILITY_PURIFYING_SALT); HP(1); MaxHP(100);}
+ PLAYER(SPECIES_GARGANACL) { Ability(ABILITY_PURIFYING_SALT); HP(1); MaxHP(100); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_REST); }
diff --git a/test/battle/ability/quark_drive.c b/test/battle/ability/quark_drive.c
index 3523f7dca4..bdb8a26201 100644
--- a/test/battle/ability/quark_drive.c
+++ b/test/battle/ability/quark_drive.c
@@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Quark Drive activates on switch-in")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_IRON_MOTH) { Ability(ABILITY_QUARK_DRIVE); }
- OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
@@ -159,9 +159,9 @@ SINGLE_BATTLE_TEST("Quark Drive activates on Electric Terrain even if not ground
GIVEN {
ASSUME(GetSpeciesType(SPECIES_IRON_JUGULIS, 0) == TYPE_FLYING || GetSpeciesType(SPECIES_IRON_JUGULIS, 1) == TYPE_FLYING);
PLAYER(SPECIES_IRON_JUGULIS) { Ability(ABILITY_QUARK_DRIVE); }
- OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
@@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Quark Drive prioritizes stats in the case of a tie in the fo
PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); }
OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c
index e5e7b3b03e..485ce9daf0 100644
--- a/test/battle/ability/rattled.c
+++ b/test/battle/ability/rattled.c
@@ -21,8 +21,8 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ
PARAMETRIZE { move = MOVE_SHADOW_PUNCH; }
PARAMETRIZE { move = MOVE_SCRATCH; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Speed(42) ;}
- OPPONENT(SPECIES_SUDOWOODO) {Speed(40); Ability(ABILITY_RATTLED);}
+ PLAYER(SPECIES_WOBBUFFET) { Speed(42) ; }
+ OPPONENT(SPECIES_SUDOWOODO) { Speed(40); Ability(ABILITY_RATTLED); }
} WHEN {
TURN { MOVE(player, move); }
TURN { MOVE(player, move); }
@@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Rattled does not boost speed by 1 when affected by Intimidat
{
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7);
- PLAYER(SPECIES_GYARADOS) {Ability(ABILITY_INTIMIDATE); }
- OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); }
+ PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); }
} WHEN {
TURN {}
} SCENE {
@@ -76,8 +76,8 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate (Gen8+
{
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8);
- PLAYER(SPECIES_GYARADOS) {Ability(ABILITY_INTIMIDATE); }
- OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); }
+ PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); }
} WHEN {
TURN {}
} SCENE {
@@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific
ASSUME(GetMoveType(MOVE_U_TURN) == TYPE_BUG);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); }
+ OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); }
OPPONENT(SPECIES_SUDOWOODO);
} WHEN {
TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); }
diff --git a/test/battle/ability/rivalry.c b/test/battle/ability/rivalry.c
index fbb4ba4530..7db0fc1c91 100644
--- a/test/battle/ability/rivalry.c
+++ b/test/battle/ability/rivalry.c
@@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the attacker is genderless",
GIVEN {
ASSUME(GetSpeciesAbility(SPECIES_PORYGON, 0) == ABILITY_TRACE);
PLAYER(SPECIES_PORYGON) { Ability(ABILITY_TRACE); } // No genderless mon naturally gets Rivalry
- OPPONENT(species) { Ability(ability); };
+ OPPONENT(species) { Ability(ability); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
@@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the target is genderless", s
PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; }
GIVEN {
- PLAYER(species) { Ability(ability); };
+ PLAYER(species) { Ability(ability); }
OPPONENT(SPECIES_PORYGON);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
diff --git a/test/battle/ability/sand_spit.c b/test/battle/ability/sand_spit.c
index c2128f65de..cb97179443 100644
--- a/test/battle/ability/sand_spit.c
+++ b/test/battle/ability/sand_spit.c
@@ -1,4 +1,77 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Sand Spit (Ability) test titles")
+SINGLE_BATTLE_TEST("Sand Spit sets up sandstorm for 5 turns when hit")
+{
+ GIVEN {
+ PLAYER(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_SPIT); }
+ OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ MESSAGE("The opposing Landorus used Tackle!");
+ HP_BAR(player);
+ ABILITY_POPUP(player, ABILITY_SAND_SPIT);
+ MESSAGE("A sandstorm kicked up!");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm subsided.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sand Spit sets up sandstorm for 8 turns when hit with Smooth Rock")
+{
+ GIVEN {
+ PLAYER(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_SPIT); Item(ITEM_SMOOTH_ROCK); }
+ OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ MESSAGE("The opposing Landorus used Tackle!");
+ HP_BAR(player);
+ ABILITY_POPUP(player, ABILITY_SAND_SPIT);
+ MESSAGE("A sandstorm kicked up!");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm subsided.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sand Spit triggers even if the user is knocked out by the hit")
+{
+ GIVEN {
+ PLAYER(SPECIES_SANDSLASH) { Ability(ABILITY_SAND_SPIT); HP(1); Speed(1); }
+ PLAYER(SPECIES_LANDORUS) { Moves(MOVE_CELEBRATE); Speed(5); }
+ OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); }
+ } SCENE {
+ MESSAGE("The opposing Landorus used Tackle!");
+ HP_BAR(player);
+ ABILITY_POPUP(player, ABILITY_SAND_SPIT);
+ MESSAGE("A sandstorm kicked up!");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The opposing Landorus used Celebrate!");
+ MESSAGE("Landorus used Celebrate!");
+ MESSAGE("The sandstorm is raging.");
+ }
+}
diff --git a/test/battle/ability/sand_stream.c b/test/battle/ability/sand_stream.c
index 6cd1b06eb4..a1b9464c2a 100644
--- a/test/battle/ability/sand_stream.c
+++ b/test/battle/ability/sand_stream.c
@@ -1,4 +1,83 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Sand Stream (Ability) test titles")
+SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 5 turns (Gen6+)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); }
+ OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SAND_STREAM);
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm subsided.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 8 turns with Smooth Rock (Gen6+)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); Item(ITEM_SMOOTH_ROCK); }
+ OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SAND_STREAM);
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm subsided.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sand Stream sets up permanent sandstorm (Gen3-5)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3);
+ PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); }
+ OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SAND_STREAM);
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ MESSAGE("The sandstorm is raging.");
+ NOT MESSAGE("The sandstorm subsided.");
+ }
+}
diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c
index 045f7dbde9..58543911f8 100644
--- a/test/battle/ability/scrappy.c
+++ b/test/battle/ability/scrappy.c
@@ -8,9 +8,9 @@ SINGLE_BATTLE_TEST("Scrappy doesn't prevent Intimidate (Gen4-7)")
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -36,9 +36,9 @@ SINGLE_BATTLE_TEST("Scrappy prevents Intimidate (Gen8+)")
GIVEN {
WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8);
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Scrappy allows to hit Ghost-type Pokémon with Normal- and F
PARAMETRIZE { move = MOVE_KARATE_CHOP; }
GIVEN {
- PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); };
+ PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }
OPPONENT(SPECIES_GASTLY);
} WHEN {
TURN { MOVE(player, move); }
@@ -79,8 +79,8 @@ SINGLE_BATTLE_TEST("Scrappy doesn't bypass a Ghost-type's Wonder Guard")
PARAMETRIZE { move = MOVE_KARATE_CHOP; }
GIVEN {
- PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); };
- OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); };
+ PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }
+ OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c
index 60554f921e..73f09bc9e9 100644
--- a/test/battle/ability/shed_skin.c
+++ b/test/battle/ability/shed_skin.c
@@ -1,13 +1,16 @@
#include "global.h"
#include "test/battle.h"
-SINGLE_BATTLE_TEST("Shed Skin triggers 33% of the time")
+SINGLE_BATTLE_TEST("Shed Skin triggers 33% (Gen3, Gen5+) or 30% (Gen 4) of the time")
{
- if (B_ABILITY_TRIGGER_CHANCE == GEN_4)
- PASSES_RANDOMLY(30, 100, RNG_SHED_SKIN);
- else
- PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN);
+ u32 config, passes;
+ PARAMETRIZE { config = GEN_3; passes = 33; }
+ PARAMETRIZE { config = GEN_4; passes = 30; }
+ PARAMETRIZE { config = GEN_5; passes = 33; }
+
+ PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN);
GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_ARBOK) { Status1(STATUS1_POISON); Ability(ABILITY_SHED_SKIN); }
diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c
index 0f64fbf904..701c96360e 100644
--- a/test/battle/ability/sheer_force.c
+++ b/test/battle/ability/sheer_force.c
@@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Present", s16 damage)
} WHEN {
//Test will fail if present heals because the hp change would be 0
//so we want a damaging version of present
- TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 1)); }
+ TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 1)); }
} SCENE {
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
@@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Double Shock", s16 damage)
PARAMETRIZE { move = MOVE_CELEBRATE; }
GIVEN {
PLAYER(SPECIES_PIKACHU);
- OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); };
+ OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_DOUBLE_SHOCK); }
} SCENE {
@@ -270,7 +270,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Aura Wheel", s16 damage)
PARAMETRIZE { move = MOVE_CELEBRATE; }
GIVEN {
PLAYER(SPECIES_MORPEKO);
- OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); };
+ OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_AURA_WHEEL); }
} SCENE {
@@ -287,7 +287,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Hyperspace Fury", s16 damage)
PARAMETRIZE { move = MOVE_CELEBRATE; }
GIVEN {
PLAYER(SPECIES_HOOPA_UNBOUND);
- OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); };
+ OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_HYPERSPACE_FURY); }
} SCENE {
@@ -664,11 +664,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -752,11 +752,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -840,11 +840,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -928,11 +928,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -1016,11 +1016,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -1104,11 +1104,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -1192,11 +1192,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -1280,11 +1280,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
@@ -1369,11 +1369,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to
case EFFECT_SOLAR_BEAM:
case EFFECT_SKY_DROP:
TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
- TURN { ; }
+ TURN {}
break;
case EFFECT_FUTURE_SIGHT:
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
break;
case EFFECT_BIDE:
TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); }
diff --git a/test/battle/ability/shields_down.c b/test/battle/ability/shields_down.c
index 554e67b0d8..d16aa240da 100644
--- a/test/battle/ability/shields_down.c
+++ b/test/battle/ability/shields_down.c
@@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Minior Core transforms into Minior Meteor on battle start if
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_MINIOR_CORE) { Ability(ABILITY_SHIELDS_DOWN); HP(51); MaxHP(101); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_SHIELDS_DOWN);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponent);
diff --git a/test/battle/ability/snow_warning.c b/test/battle/ability/snow_warning.c
index bffee14e49..bfb27c5f49 100644
--- a/test/battle/ability/snow_warning.c
+++ b/test/battle/ability/snow_warning.c
@@ -1,30 +1,138 @@
#include "global.h"
#include "test/battle.h"
-SINGLE_BATTLE_TEST("Snow Warning summons hail (Gen4-8)")
+SINGLE_BATTLE_TEST("Snow Warning sets up hail for 5 turns (Gen6-8)")
{
GIVEN {
WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8);
- PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); }
- OPPONENT(SPECIES_WOBBUFFET);
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {}
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
- MESSAGE("It started to hail!");
- ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES);
+ ABILITY_POPUP(player, ABILITY_SNOW_WARNING);
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail stopped.");
}
}
-SINGLE_BATTLE_TEST("Snow Warning summons snow (Gen9+)")
+SINGLE_BATTLE_TEST("Snow Warning sets up hail for 8 turns with Icy Rock (Gen6-8)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8);
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
+ PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SNOW_WARNING);
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail stopped.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Snow Warning sets up permanent hail (Gen4-5)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8);
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_5);
+ PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SNOW_WARNING);
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ MESSAGE("The hail is crashing down.");
+ NOT MESSAGE("The hail stopped.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Snow Warning sets up snow for 5 turns (Gen9+)")
{
GIVEN {
WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9);
- PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); }
- OPPONENT(SPECIES_WOBBUFFET);
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9);
+ PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {}
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
- MESSAGE("It started to snow!");
- ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES);
+ ABILITY_POPUP(player, ABILITY_SNOW_WARNING);
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("The snow stopped.");
+ }
+}
+
+SINGLE_BATTLE_TEST("Snow Warning sets up snow for 8 turns with Icy Rock (Gen9+)")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9);
+ WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9);
+ PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SNOW_WARNING);
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("Snow continues to fall.");
+ MESSAGE("The snow stopped.");
}
}
diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c
index 39113fd15a..0d377f276f 100644
--- a/test/battle/ability/stamina.c
+++ b/test/battle/ability/stamina.c
@@ -20,8 +20,8 @@ SINGLE_BATTLE_TEST("Stamina raises Defense by 1 when hit by a move")
s16 turnOneHit, turnTwoHit;
u16 move;
- PARAMETRIZE {move = MOVE_SCRATCH; }
- PARAMETRIZE {move = MOVE_GUST; }
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_GUST; }
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
@@ -51,18 +51,18 @@ DOUBLE_BATTLE_TEST("Stamina activates correctly for every battler with the abili
{
enum Ability abilityLeft, abilityRight;
- PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_STAMINA; }
- PARAMETRIZE {abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_NONE; }
- PARAMETRIZE {abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_STAMINA; }
+ PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_STAMINA; }
+ PARAMETRIZE { abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_NONE; }
+ PARAMETRIZE { abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_STAMINA; }
GIVEN {
ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_WOBBUFFET) { Ability(abilityLeft); Speed(10); }
PLAYER(SPECIES_WOBBUFFET) { Ability(abilityRight); Speed(5); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(20); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(15); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(20); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(15); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_EARTHQUAKE);}
+ TURN { MOVE(opponentLeft, MOVE_EARTHQUAKE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponentLeft);
diff --git a/test/battle/ability/stance_change.c b/test/battle/ability/stance_change.c
index 0c82c93177..ebddb8a884 100644
--- a/test/battle/ability/stance_change.c
+++ b/test/battle/ability/stance_change.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "test/battle.h"
-
SINGLE_BATTLE_TEST("Stance Change changes Aegislash from Shield to Blade when using a damaging move")
{
u16 move;
diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c
index 110cfbaa0e..c40197e742 100644
--- a/test/battle/ability/static.c
+++ b/test/battle/ability/static.c
@@ -30,11 +30,14 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact")
}
}
-SINGLE_BATTLE_TEST("Static triggers 30% of the time")
+SINGLE_BATTLE_TEST("Static triggers 1/3 times (Gen3) or 30% (Gen4+) of the time")
{
- PASSES_RANDOMLY(3, 10, RNG_STATIC);
+ u32 config, passes, trials;
+ PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3%
+ PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30%
+ PASSES_RANDOMLY(passes, trials, RNG_STATIC);
GIVEN {
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); }
diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c
index 84cbf20f64..e6a5c9cdcc 100644
--- a/test/battle/ability/stench.c
+++ b/test/battle/ability/stench.c
@@ -63,7 +63,7 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move")
PLAYER(SPECIES_WOBBUFFET) { Speed(20); }
PLAYER(SPECIES_WYNAUT) { Speed(10); }
OPPONENT(SPECIES_GRIMER) { Speed(100); Ability(ABILITY_STENCH); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }
} WHEN {
TURN {
MOVE(playerLeft, MOVE_FAKE_OUT, target: opponentLeft);
diff --git a/test/battle/ability/super_luck.c b/test/battle/ability/super_luck.c
index 16dfc081a9..d271c6ff69 100644
--- a/test/battle/ability/super_luck.c
+++ b/test/battle/ability/super_luck.c
@@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by 1 stage")
GIVEN {
ASSUME(GetSpeciesBaseSpeed(SPECIES_TOGEPI) == 20);
WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig);
- PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); };
+ PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
diff --git a/test/battle/ability/supersweet_syrup.c b/test/battle/ability/supersweet_syrup.c
index cd819eda72..572f697757 100644
--- a/test/battle/ability/supersweet_syrup.c
+++ b/test/battle/ability/supersweet_syrup.c
@@ -34,7 +34,7 @@ DOUBLE_BATTLE_TEST("Supersweet Syrup lowers evasion of both opposing mon's in ba
OPPONENT(SPECIES_DIPPLIN) { Ability(ABILITY_SUPERSWEET_SYRUP); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_SUPERSWEET_SYRUP);
MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!");
diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c
index 759202cc1b..17f9abe7b7 100644
--- a/test/battle/ability/supreme_overlord.c
+++ b/test/battle/ability/supreme_overlord.c
@@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_KINGAMBIT) { Ability(ABILITY_SUPREME_OVERLORD); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_KINGAMBIT) { Ability(ABILITY_SUPREME_OVERLORD); }
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c
index a891f7d5a7..40c84b213f 100644
--- a/test/battle/ability/sword_of_ruin.c
+++ b/test/battle/ability/sword_of_ruin.c
@@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_CHIEN_PAO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_CHIEN_PAO);
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c
index 0b58edc793..74ac8c252e 100644
--- a/test/battle/ability/tablets_of_ruin.c
+++ b/test/battle/ability/tablets_of_ruin.c
@@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WO_CHIEN);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WO_CHIEN);
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
diff --git a/test/battle/ability/tangling_hair.c b/test/battle/ability/tangling_hair.c
index fdae4de06d..ec0798f180 100644
--- a/test/battle/ability/tangling_hair.c
+++ b/test/battle/ability/tangling_hair.c
@@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Tangling Hair does not trigger on Clear Body")
{
GIVEN {
PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); }
- OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); };
+ OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
@@ -103,7 +103,7 @@ SINGLE_BATTLE_TEST("Tangling Hair will trigger if move is boosted by Sheer Force
ASSUME(MoveIsAffectedBySheerForce(MOVE_POISON_JAB));
GIVEN {
PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); }
- OPPONENT(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); };
+ OPPONENT(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); }
} WHEN {
TURN { MOVE(opponent, MOVE_POISON_JAB); }
} SCENE {
diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c
index 55a6c3d626..11a77ca711 100644
--- a/test/battle/ability/tera_shell.c
+++ b/test/battle/ability/tera_shell.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all moves against Terapagos not very effect
PARAMETRIZE { hp = 100; }
PARAMETRIZE { hp = 99; }
GIVEN {
- PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); HP(hp); MaxHP(100);}
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); HP(hp); MaxHP(100); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
diff --git a/test/battle/ability/tera_shift.c b/test/battle/ability/tera_shift.c
index 9149160cd1..9213bf3b1b 100644
--- a/test/battle/ability/tera_shift.c
+++ b/test/battle/ability/tera_shift.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Tera Shift transforms Terapagos into its Terastal form on sw
PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_TERA_SHIFT);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
@@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Tera Shift can't be suppressed by Neutralizing Gas")
PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); }
OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
ABILITY_POPUP(player, ABILITY_TERA_SHIFT);
diff --git a/test/battle/ability/teraform_zero.c b/test/battle/ability/teraform_zero.c
index f6620d6625..17f086bf08 100644
--- a/test/battle/ability/teraform_zero.c
+++ b/test/battle/ability/teraform_zero.c
@@ -6,8 +6,8 @@ DOUBLE_BATTLE_TEST("Teraform Zero clears weather and terrain upon activation")
GIVEN {
PLAYER(SPECIES_TERAPAGOS_TERASTAL);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
- OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
} SCENE {
@@ -22,9 +22,9 @@ DOUBLE_BATTLE_TEST("Teraform Zero can be supressed")
GIVEN {
PLAYER(SPECIES_TERAPAGOS_TERASTAL);
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); }
- OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
- OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
+ OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
} SCENE {
@@ -87,10 +87,10 @@ DOUBLE_BATTLE_TEST("Teraform Zero shouldn't cause Neutralizing Gas to show it's
{
GIVEN {
PLAYER(SPECIES_TERAPAGOS_TERASTAL);
- PLAYER(SPECIES_ABSOL) {Ability(ABILITY_PRESSURE); }
- PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); }
- OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
- OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ PLAYER(SPECIES_ABSOL) { Ability(ABILITY_PRESSURE); }
+ PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
+ OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
} SCENE {
diff --git a/test/battle/ability/thick_fat.c b/test/battle/ability/thick_fat.c
index bcc4c9487c..ce13d12982 100644
--- a/test/battle/ability/thick_fat.c
+++ b/test/battle/ability/thick_fat.c
@@ -1,4 +1,39 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("TODO: Write Thick Fat (Ability) test titles")
+ASSUMPTIONS
+{
+ ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
+ ASSUME(GetMoveType(MOVE_POWDER_SNOW) == TYPE_ICE);
+ ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
+}
+
+SINGLE_BATTLE_TEST("Thick Fat halves damage from fire and ice type moves", s16 damage[2])
+{
+ u16 move;
+
+ PARAMETRIZE { move = MOVE_POWDER_SNOW; }
+ PARAMETRIZE { move = MOVE_EMBER; }
+
+ GIVEN {
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_SNORLAX) { Ability(ABILITY_THICK_FAT); }
+ }
+ WHEN {
+ TURN { MOVE(player, move); }
+ TURN { MOVE(player, MOVE_WORRY_SEED); }
+ TURN { MOVE(player, move); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage[0]);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage[1]);
+ }
+ FINALLY {
+ EXPECT_MUL_EQ(results[0].damage[0], Q_4_12(2), results[0].damage[1]);
+ EXPECT_MUL_EQ(results[1].damage[0], Q_4_12(2), results[1].damage[1]);
+ }
+}
+
diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c
index 4661849905..587cb846ed 100644
--- a/test/battle/ability/toxic_debris.c
+++ b/test/battle/ability/toxic_debris.c
@@ -11,8 +11,8 @@ SINGLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side if hit b
{
u32 move;
- PARAMETRIZE { move = MOVE_SCRATCH;}
- PARAMETRIZE { move = MOVE_SWIFT;}
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_SWIFT; }
GIVEN {
PLAYER(SPECIES_GLIMMORA) { Ability(ABILITY_TOXIC_DEBRIS); }
diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c
index 71d5035084..d52da66468 100644
--- a/test/battle/ability/trace.c
+++ b/test/battle/ability/trace.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability")
PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); }
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_TRACE);
MESSAGE("It traced the opposing Torchic's Blaze!");
@@ -48,7 +48,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly")
{
enum Ability ability1, ability2;
- PARAMETRIZE { ability1 = ABILITY_SPEED_BOOST; ability2 = ABILITY_BLAZE;}
+ PARAMETRIZE { ability1 = ABILITY_SPEED_BOOST; ability2 = ABILITY_BLAZE; }
PARAMETRIZE { ability1 = ABILITY_BLAZE; ability2 = ABILITY_SPEED_BOOST; }
PASSES_RANDOMLY(1, 2, RNG_TRACE);
@@ -58,7 +58,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly")
OPPONENT(SPECIES_TORCHIC) { Ability(ability1); }
OPPONENT(SPECIES_TORCHIC) { Ability(ability2); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_TRACE);
MESSAGE("It traced the opposing Torchic's Blaze!");
@@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Trace copies opponent's Intimidate and triggers it immediate
PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); }
OPPONENT(SPECIES_MASQUERAIN) { Ability(ABILITY_INTIMIDATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_TRACE);
ABILITY_POPUP(player, ABILITY_INTIMIDATE);
@@ -103,7 +103,7 @@ DOUBLE_BATTLE_TEST("Trace respects the turn order")
OPPONENT(SPECIES_HIPPOWDON) { Speed(10); Ability(ABILITY_SAND_STREAM); }
OPPONENT(SPECIES_DEOXYS_SPEED) { Speed(30); Ability(ABILITY_PRESSURE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_PRESSURE);
ABILITY_POPUP(opponentRight, ABILITY_PRESSURE);
diff --git a/test/battle/ability/unburden.c b/test/battle/ability/unburden.c
index 4498bb4922..5f13692935 100644
--- a/test/battle/ability/unburden.c
+++ b/test/battle/ability/unburden.c
@@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Unburden doubles speed once user uses item")
OPPONENT(SPECIES_RILLABOOM) { Speed(7); Ability(ABILITY_GRASSY_SURGE); }
} WHEN {
TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent);
ABILITY_POPUP(opponent, ABILITY_GRASSY_SURGE);
@@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Unburden doubles speed once user gets their item knocked off
OPPONENT(SPECIES_WOBBUFFET) { Speed(7); }
} WHEN {
TURN { MOVE(opponent, MOVE_KNOCK_OFF); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF, player);
@@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Unburden doesn't activate when item is consumed in Neutraliz
} WHEN {
TURN { MOVE(opponent, MOVE_KNOCK_OFF); }
TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); }
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent);
@@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Unburden doubling speed effect is ignored by Neutralizing Ga
TURN { MOVE(opponent, MOVE_KNOCK_OFF); }
TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); }
TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 0); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF, player);
diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c
index a1eabbcf5a..048b951964 100644
--- a/test/battle/ability/unnerve.c
+++ b/test/battle/ability/unnerve.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own ber
PLAYER(mon) { Ability(ability); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RAWST_BERRY); Status1(STATUS1_BURN); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ability);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
@@ -104,7 +104,7 @@ DOUBLE_BATTLE_TEST("Unnerve stops applying on death but applies on revive")
{
u16 mon;
u16 ability;
- PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE;}
+ PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; }
PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; }
GIVEN {
ASSUME(gItemsInfo[ITEM_RAWST_BERRY].holdEffect == HOLD_EFFECT_CURE_BRN);
diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c
index 1a075db8cf..18ac502c08 100644
--- a/test/battle/ability/vessel_of_ruin.c
+++ b/test/battle/ability/vessel_of_ruin.c
@@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_TING_LU);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_TING_LU);
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c
index c78df34190..aacf1811ae 100644
--- a/test/battle/ability/wind_power.c
+++ b/test/battle/ability/wind_power.c
@@ -21,12 +21,12 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for player when hit by a wind move
s16 dmgBefore, dmgAfter;
u16 move;
- PARAMETRIZE {move = MOVE_SCRATCH; }
- PARAMETRIZE {move = MOVE_AIR_CUTTER; }
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_AIR_CUTTER; }
GIVEN {
PLAYER(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(10); }
- OPPONENT(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed.
+ OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed.
} WHEN {
TURN { MOVE(player, MOVE_NUZZLE), MOVE(opponent, move); }
TURN { MOVE(player, MOVE_NUZZLE), MOVE(opponent, move); }
@@ -66,11 +66,11 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo
s16 dmgBefore, dmgAfter;
u16 move;
- PARAMETRIZE {move = MOVE_SCRATCH; }
- PARAMETRIZE {move = MOVE_AIR_CUTTER; }
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_AIR_CUTTER; }
GIVEN {
- PLAYER(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed.
+ PLAYER(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed.
OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(10); }
} WHEN {
TURN { MOVE(opponent, MOVE_NUZZLE), MOVE(player, move); }
@@ -111,12 +111,12 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for only one attack when hit by a
s16 dmgCharged, dmgAfter;
u16 move;
- PARAMETRIZE {move = MOVE_SCRATCH; }
- PARAMETRIZE {move = MOVE_AIR_CUTTER; }
+ PARAMETRIZE { move = MOVE_SCRATCH; }
+ PARAMETRIZE { move = MOVE_AIR_CUTTER; }
GIVEN {
PLAYER(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(5); }
- OPPONENT(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(10) ;} // Limber, so it doesn't get paralyzed.
+ OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(10); } // Limber, so it doesn't get paralyzed.
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_NUZZLE); }
TURN { MOVE(player, MOVE_NUZZLE); }
@@ -148,9 +148,9 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab
{
enum Ability abilityLeft, abilityRight;
- PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER;}
- PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; }
- PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; }
+ PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; }
+ PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; }
+ PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; }
GIVEN {
PLAYER(SPECIES_WATTREL) { Ability(abilityLeft); Speed(10); }
@@ -158,7 +158,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab
OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(20); }
OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(15); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_AIR_CUTTER); MOVE(opponentRight, MOVE_AIR_CUTTER);}
+ TURN { MOVE(opponentLeft, MOVE_AIR_CUTTER); MOVE(opponentRight, MOVE_AIR_CUTTER); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_AIR_CUTTER, opponentLeft);
@@ -189,9 +189,9 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab
{
enum Ability abilityLeft, abilityRight;
- PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; }
- PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; }
- PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; }
+ PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; }
+ PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; }
+ PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; }
GIVEN {
PLAYER(SPECIES_WATTREL) { Ability(abilityLeft); Speed(10); }
@@ -199,7 +199,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab
OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(20); }
OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(15); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_PETAL_BLIZZARD);}
+ TURN { MOVE(opponentLeft, MOVE_PETAL_BLIZZARD); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_BLIZZARD, opponentLeft);
@@ -228,8 +228,8 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used")
{
bool8 opponentSide;
- PARAMETRIZE {opponentSide = TRUE;}
- PARAMETRIZE {opponentSide = FALSE;}
+ PARAMETRIZE { opponentSide = TRUE; }
+ PARAMETRIZE { opponentSide = FALSE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_TAILWIND) == EFFECT_TAILWIND);
@@ -238,7 +238,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used")
OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(20); }
OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(15); }
} WHEN {
- TURN { MOVE((opponentSide == TRUE) ? opponentLeft : playerLeft, MOVE_TAILWIND);}
+ TURN { MOVE((opponentSide == TRUE) ? opponentLeft : playerLeft, MOVE_TAILWIND); }
} SCENE {
if (opponentSide) {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft);
diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c
index 1e73961cda..96f47a3180 100644
--- a/test/battle/ability/zen_mode.c
+++ b/test/battle/ability/zen_mode.c
@@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less
ABILITY_POPUP(player, ABILITY_ZEN_MODE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
} THEN {
- ASSUME(player->hp <= player->maxHP / 2);
+ EXPECT_LT(player->hp, player->maxHP / 2);
EXPECT_EQ(player->species, zenSpecies);
}
}
diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c
index 7df3f07702..9b4b362d75 100644
--- a/test/battle/ability/zero_to_hero.c
+++ b/test/battle/ability/zero_to_hero.c
@@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
PLAYER(SPECIES_PALAFIN_ZERO);
- PLAYER(SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_PALAFIN_ZERO);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1);}
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_FLIP_TURN); SEND_OUT(opponent, 1); }
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 0); }
diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c
index 0cb4a97375..43c6740f48 100644
--- a/test/battle/ai/ai.c
+++ b/test/battle/ai/ai.c
@@ -236,7 +236,7 @@ AI_SINGLE_BATTLE_TEST("AI prefers moves with the best possible score, chosen ran
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_WOBBUFFET) { HP(5); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(5); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_TAKE_DOWN); }
} WHEN {
@@ -253,7 +253,7 @@ AI_SINGLE_BATTLE_TEST("AI can choose a status move that boosts the attack by two
ASSUME(GetMoveCategory(MOVE_STRENGTH) == DAMAGE_CATEGORY_PHYSICAL);
ASSUME(GetMoveCategory(MOVE_HORN_ATTACK) == DAMAGE_CATEGORY_PHYSICAL);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_WOBBUFFET) { HP(277); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(277); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_KANGASKHAN) { Moves(MOVE_STRENGTH, MOVE_HORN_ATTACK, MOVE_SWORDS_DANCE); }
} WHEN {
@@ -292,7 +292,7 @@ AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking
OPPONENT(SPECIES_GEODUDE) { Moves(move1, move2, move3, move4); Ability(abilityAtk); Item(holdItemAtk); }
} WHEN {
TURN { if (expectedMove2 == MOVE_NONE) { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); }
- else {EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1);}
+ else { EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1); }
}
}
SCENE {
@@ -322,7 +322,7 @@ AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking
OPPONENT(SPECIES_GEODUDE) { Moves(move1, move2, move3, move4); Ability(abilityAtk); Item(holdItemAtk); }
} WHEN {
TURN { if (expectedMove2 == MOVE_NONE) { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); }
- else {EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1);}
+ else { EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1); }
}
}
SCENE {
@@ -490,7 +490,7 @@ AI_SINGLE_BATTLE_TEST("AI will only choose Surf 1/3 times if the opposing mon ha
GIVEN {
ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); };
+ PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }
OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); }
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_SURF); }
@@ -507,7 +507,7 @@ AI_SINGLE_BATTLE_TEST("AI will choose Thunderbolt then Surf 2/3 times if the opp
GIVEN {
ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); };
+ PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }
OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); }
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); }
@@ -522,8 +522,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Scratch over Power-up Punch with Contrary"
{
enum Ability ability;
- PARAMETRIZE {ability = ABILITY_SUCTION_CUPS; }
- PARAMETRIZE {ability = ABILITY_CONTRARY; }
+ PARAMETRIZE { ability = ABILITY_SUCTION_CUPS; }
+ PARAMETRIZE { ability = ABILITY_CONTRARY; }
GIVEN {
ASSUME(GetMovePower(MOVE_SCRATCH) == 40);
ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL);
@@ -548,8 +548,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Superpower over Outrage with Contrary")
{
enum Ability ability;
- PARAMETRIZE {ability = ABILITY_SUCTION_CUPS; }
- PARAMETRIZE {ability = ABILITY_CONTRARY; }
+ PARAMETRIZE { ability = ABILITY_SUCTION_CUPS; }
+ PARAMETRIZE { ability = ABILITY_CONTRARY; }
GIVEN {
ASSUME(GetMovePower(MOVE_SUPERPOWER) == 120);
ASSUME(GetMoveType(MOVE_SUPERPOWER) == TYPE_FIGHTING);
@@ -944,10 +944,10 @@ AI_SINGLE_BATTLE_TEST("AI will prefer resisted move over failing move")
GIVEN {
WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
- PLAYER(SPECIES_ROSELIA) { Moves(MOVE_ABSORB); };
+ PLAYER(SPECIES_ROSELIA) { Moves(MOVE_ABSORB); }
OPPONENT(SPECIES_GLOOM) { Moves(MOVE_MEGA_DRAIN, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_SYNTHESIS); }
} WHEN {
- TURN { MOVE(player, MOVE_ABSORB); EXPECT_MOVE(opponent, MOVE_MEGA_DRAIN);}
+ TURN { MOVE(player, MOVE_ABSORB); EXPECT_MOVE(opponent, MOVE_MEGA_DRAIN); }
}
}
diff --git a/test/battle/ai/ai_calc_best_move_score.c b/test/battle/ai/ai_calc_best_move_score.c
index 7fcf0ced24..715d30c1f5 100644
--- a/test/battle/ai/ai_calc_best_move_score.c
+++ b/test/battle/ai/ai_calc_best_move_score.c
@@ -15,7 +15,7 @@ AI_SINGLE_BATTLE_TEST("AI will not further increase Attack / Sp. Atk stat if it
|| GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY);
ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_CELEBRATE); };
+ PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KANGASKHAN) { Speed(20); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); }
} WHEN {
TURN { MOVE(player, MOVE_SKY_UPPERCUT); EXPECT_MOVE(opponent, move); }
@@ -36,7 +36,7 @@ AI_SINGLE_BATTLE_TEST("AI will not further increase Attack / Sp. Atk stat if it
|| GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY);
ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); };
+ PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KANGASKHAN) { Speed(15); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); }
} WHEN {
TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, move); }
@@ -48,7 +48,7 @@ AI_SINGLE_BATTLE_TEST("AI will increase speed if it is slower")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); };
+ PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KANGASKHAN) { Speed(15); Moves(MOVE_CHIP_AWAY, MOVE_AGILITY); }
} WHEN {
TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, MOVE_AGILITY); }
@@ -69,7 +69,7 @@ AI_SINGLE_BATTLE_TEST("AI will not waste a turn setting up if it knows target ca
|| GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY);
ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
- PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_DOUBLE_KICK, MOVE_FLAME_WHEEL, MOVE_CELEBRATE); };
+ PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_DOUBLE_KICK, MOVE_FLAME_WHEEL, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KANGASKHAN) { Speed(20); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); }
} WHEN {
TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, move); }
@@ -86,12 +86,12 @@ AI_SINGLE_BATTLE_TEST("AI will not use Throat Chop if opposing mon has a better
ASSUME(GetMovePower(MOVE_FLAME_BURST) == 70);
ASSUME(MoveHasAdditionalEffect(MOVE_THROAT_CHOP, MOVE_EFFECT_THROAT_CHOP) == TRUE);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_DISARMING_VOICE, MOVE_FLAME_BURST); };
+ PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_DISARMING_VOICE, MOVE_FLAME_BURST); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(20); Moves(MOVE_THROAT_CHOP, MOVE_PSYCHIC_FANGS); }
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); }
TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_DISARMING_VOICE); }
- TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST);}
+ TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); }
}
}
@@ -104,12 +104,12 @@ AI_SINGLE_BATTLE_TEST("AI will select Throat Chop if the sound move is the best
ASSUME(GetMovePower(MOVE_FLAME_BURST) == 70);
ASSUME(GetMovePower(MOVE_HYPER_VOICE) == 90);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_HYPER_VOICE, MOVE_FLAME_BURST); };
+ PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_HYPER_VOICE, MOVE_FLAME_BURST); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(20); Moves(MOVE_THROAT_CHOP, MOVE_PSYCHIC_FANGS); }
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); }
TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_HYPER_VOICE); }
- TURN { EXPECT_MOVE(opponent, MOVE_THROAT_CHOP); MOVE(player, MOVE_HYPER_VOICE);}
+ TURN { EXPECT_MOVE(opponent, MOVE_THROAT_CHOP); MOVE(player, MOVE_HYPER_VOICE); }
}
}
diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c
index 5ec4161a17..0e6170b5fa 100644
--- a/test/battle/ai/ai_check_viability.c
+++ b/test/battle/ai/ai_check_viability.c
@@ -456,7 +456,7 @@ AI_DOUBLE_BATTLE_TEST("AI sees type-changing moves as the correct type")
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Moves(fieldStatus, MOVE_RETURN, MOVE_TAUNT); }
- OPPONENT(species) { Ability(ability); Moves(MOVE_HYPER_VOICE); }
+ OPPONENT(species) { Ability(ability); Moves(MOVE_HYPER_VOICE); }
} WHEN {
if (ability != ABILITY_NONE)
TURN { EXPECT_MOVE(opponentLeft, fieldStatus); }
diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c
index 746789cf5e..f1edc31fbb 100644
--- a/test/battle/ai/ai_doubles.c
+++ b/test/battle/ai/ai_doubles.c
@@ -23,11 +23,12 @@ AI_DOUBLE_BATTLE_TEST("AI won't use a Weather changing move if partner already c
OPPONENT(SPECIES_WOBBUFFET) { Moves(weatherMoveLeft); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, weatherMoveRight); }
} WHEN {
- TURN { NOT_EXPECT_MOVE(opponentRight, weatherMoveRight);
- SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerLeft);
- SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerRight);
- SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:opponentLeft);
- }
+ TURN {
+ NOT_EXPECT_MOVE(opponentRight, weatherMoveRight);
+ SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerLeft);
+ SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerRight);
+ SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:opponentLeft);
+ }
}
}
@@ -46,11 +47,12 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_SCRATCH); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(move1, move2, move3, move4); }
} WHEN {
- TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND);
- SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft);
- SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerRight);
- SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft);
- }
+ TURN {
+ NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND);
+ SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft);
+ SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerRight);
+ SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft);
+ }
} SCENE {
NOT MESSAGE("The opposing Wobbuffet used Helping Hand!");
}
@@ -157,12 +159,13 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_EXPLOSION); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); }
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND);
- NOT_EXPECT_MOVE(opponentRight, statusMove);
- SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerLeft);
- SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerRight);
- SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft);
- }
+ TURN {
+ EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND);
+ NOT_EXPECT_MOVE(opponentRight, statusMove);
+ SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerLeft);
+ SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerRight);
+ SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft);
+ }
} SCENE {
MESSAGE("The opposing Wobbuffet used Helping Hand!");
}
@@ -415,7 +418,7 @@ AI_DOUBLE_BATTLE_TEST("AI will choose Earthquake if it kills both opposing mons"
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EARTHQUAKE, MOVE_SCRATCH); }
- OPPONENT(SPECIES_PARAS) { Moves(MOVE_CELEBRATE); HP(1); }
+ OPPONENT(SPECIES_PARAS) { Moves(MOVE_CELEBRATE); HP(1); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_EARTHQUAKE); }
}
@@ -437,7 +440,7 @@ AI_DOUBLE_BATTLE_TEST("AI will trigger its ally's Weakness Policy")
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EARTHQUAKE, MOVE_STOMPING_TANTRUM); }
- OPPONENT(species) { Moves(MOVE_CELEBRATE); Item(ITEM_WEAKNESS_POLICY); }
+ OPPONENT(species) { Moves(MOVE_CELEBRATE); Item(ITEM_WEAKNESS_POLICY); }
} WHEN {
if (species == SPECIES_INCINEROAR)
TURN { EXPECT_MOVE(opponentLeft, MOVE_EARTHQUAKE); }
@@ -655,7 +658,7 @@ AI_DOUBLE_BATTLE_TEST("AI sets up terrain for its ally")
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Moves(goodTerrain, badTerrain, MOVE_RETURN, MOVE_TAUNT); }
- OPPONENT(SPECIES_WOBBUFFET) { Moves(terrainTrigger, MOVE_EARTH_POWER); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(terrainTrigger, MOVE_EARTH_POWER); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, goodTerrain); }
}
@@ -724,12 +727,12 @@ AI_DOUBLE_BATTLE_TEST("AI uses Trick Room with both battlers on the turn it expi
OPPONENT(SPECIES_WYNAUT) { Moves(MOVE_TRICK_ROOM, MOVE_PSYCHIC); Speed(2); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TRICK_ROOM, MOVE_PSYCHIC); Speed(1); }
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
- TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
- TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
- TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
- TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
- }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
+ TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
+ TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
+ TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); }
+ }
}
AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if it's about to die")
@@ -747,10 +750,10 @@ AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if it's about to die")
OPPONENT(SPECIES_WOBBUFFET) { HP(hp); Moves(MOVE_HELPING_HAND, MOVE_MUDDY_WATER); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MUDDY_WATER); }
} WHEN {
- if (hp == 1)
- TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); }
- else
- TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); }
+ if (hp == 1)
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); }
+ else
+ TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); }
}
}
diff --git a/test/battle/ai/ai_flag_attacks_partner.c b/test/battle/ai/ai_flag_attacks_partner.c
index 4f2533fa5b..ddc4ced5fd 100644
--- a/test/battle/ai/ai_flag_attacks_partner.c
+++ b/test/battle/ai/ai_flag_attacks_partner.c
@@ -26,12 +26,11 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER is willing to kill either the par
ASSUME(gSpeciesInfo[SPECIES_ZIGZAGOON].baseDefense == 41);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_ATTACKS_PARTNER);
PLAYER(SPECIES_ZIGZAGOON) { Level(50); }
- PLAYER(SPECIES_ZIGZAGOON) { Level(16); }
+ PLAYER(SPECIES_ZIGZAGOON) { Level(16); }
OPPONENT(SPECIES_ZIGZAGOON) { Level(50); Moves(move, MOVE_OVERDRIVE, MOVE_TACKLE); }
OPPONENT(SPECIES_ZIGZAGOON) { Level(level); Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN
- {
+ TURN {
if (move == MOVE_MIGHTY_CLEAVE)
{
if (level == 1)
@@ -46,7 +45,7 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER is willing to kill either the par
else
EXPECT_MOVE(opponentLeft, MOVE_OVERDRIVE);
}
- }
+ }
}
}
@@ -59,18 +58,16 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER steps on its ally's weather")
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_ATTACKS_PARTNER);
- PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
- PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(75); Moves(weather1, move1, MOVE_HEADBUTT); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(weather2, move2, MOVE_HEADBUTT); }
} WHEN {
- TURN
- {
+ TURN {
EXPECT_MOVE(opponentLeft, weather1);
EXPECT_MOVE(opponentRight, weather2);
}
- TURN
- {
+ TURN {
EXPECT_MOVE(opponentLeft, move1);
EXPECT_MOVE(opponentRight, weather2);
}
diff --git a/test/battle/ai/ai_flag_predict_ability.c b/test/battle/ai/ai_flag_predict_ability.c
index 9d85773e3e..46ffb53ca0 100644
--- a/test/battle/ai/ai_flag_predict_ability.c
+++ b/test/battle/ai/ai_flag_predict_ability.c
@@ -8,7 +8,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_WEIGH_ABILITY_PREDICTION: AI will predict opposin
GIVEN {
ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_WEIGH_ABILITY_PREDICTION);
- PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); };
+ PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }
OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); }
} WHEN {
TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); }
diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c
index 56d7eb881f..3c9136bdb8 100644
--- a/test/battle/ai/ai_flag_sequence_switching.c
+++ b/test/battle/ai/ai_flag_sequence_switching.c
@@ -44,7 +44,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo
u32 move;
PARAMETRIZE { move = MOVE_ROAR; }
- PARAMETRIZE {move = MOVE_DRAGON_TAIL; }
+ PARAMETRIZE { move = MOVE_DRAGON_TAIL; }
PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH);
GIVEN {
diff --git a/test/battle/ai/ai_multi.c b/test/battle/ai/ai_multi.c
index 408a37f276..3fcc02d4c3 100644
--- a/test/battle/ai/ai_multi.c
+++ b/test/battle/ai/ai_multi.c
@@ -73,10 +73,10 @@ AI_MULTI_BATTLE_TEST("AI partner makes sensible move selections in battle (multi
MULTI_PARTNER(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL, MOVE_AURA_SPHERE); }
MULTI_OPPONENT_A(SPECIES_RATTATA) { Moves(MOVE_CELEBRATE); HP(1); }
MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
-
+
} WHEN {
- TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); };
- }
+ TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); }
+ }
}
// Used to test EXPECT_MOVE only on partner
@@ -90,10 +90,10 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner makes sensible move selections in battle (
MULTI_PARTNER(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL, MOVE_AURA_SPHERE); }
MULTI_OPPONENT_A(SPECIES_RATTATA) { Moves(MOVE_CELEBRATE); HP(1); }
MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
-
+
} WHEN {
- TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); };
- }
+ TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); }
+ }
}
AI_TWO_VS_ONE_BATTLE_TEST("Battler 3 has Battler 1 AI flags set correctly (2v1)")
@@ -138,7 +138,7 @@ AI_MULTI_BATTLE_TEST("Partner will not steal your pokemon when running out")
MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft);}
+ TURN { EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft); }
TURN {}
} THEN {
EXPECT_EQ(gAbsentBattlerFlags, (1u << GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)));
@@ -159,7 +159,7 @@ AI_MULTI_BATTLE_TEST("Partner will not steal your pokemon to delay using their a
MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft);}
+ TURN { EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft); }
TURN {}
} THEN {
EXPECT_EQ(SPECIES_METAGROSS, playerRight->species);
@@ -174,12 +174,12 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b
BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON);
MULTI_PLAYER(SPECIES_WOBBUFFET) { }
MULTI_PARTNER(SPECIES_WOBBUFFET) { }
- MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); HP(1);}
+ MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); HP(1); }
MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); }
MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
- TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
} THEN {
EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species);
}
@@ -188,19 +188,19 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b
AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi battle when forced out")
{
u32 item, move;
- PARAMETRIZE {item = ITEM_EJECT_BUTTON; move = MOVE_TACKLE;}
- PARAMETRIZE {item = ITEM_EJECT_PACK; move = MOVE_TAIL_WHIP;}
- PARAMETRIZE {item = ITEM_NONE; move = MOVE_ROAR;}
+ PARAMETRIZE { item = ITEM_EJECT_BUTTON; move = MOVE_TACKLE; }
+ PARAMETRIZE { item = ITEM_EJECT_PACK; move = MOVE_TAIL_WHIP; }
+ PARAMETRIZE { item = ITEM_NONE; move = MOVE_ROAR; }
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON);
MULTI_PLAYER(SPECIES_WOBBUFFET) { }
MULTI_PARTNER(SPECIES_WOBBUFFET) { }
- MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Item(item);}
+ MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Item(item); }
MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); }
MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {MOVE(playerLeft, move, target: opponentLeft); }
+ TURN { MOVE(playerLeft, move, target: opponentLeft); }
} THEN {
EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species);
}
@@ -213,11 +213,11 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b
BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON);
MULTI_PLAYER(SPECIES_WOBBUFFET) { }
MULTI_PARTNER(SPECIES_WOBBUFFET) { }
- MULTI_OPPONENT_A(SPECIES_GOLISOPOD) { Moves(MOVE_CELEBRATE); HP(101); MaxHP(200); Ability(ABILITY_EMERGENCY_EXIT);}
+ MULTI_OPPONENT_A(SPECIES_GOLISOPOD) { Moves(MOVE_CELEBRATE); HP(101); MaxHP(200); Ability(ABILITY_EMERGENCY_EXIT); }
MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); }
MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
} THEN {
EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species);
}
diff --git a/test/battle/ai/ai_smart_tera.c b/test/battle/ai/ai_smart_tera.c
index 7bed476b43..c2127a5787 100644
--- a/test/battle/ai/ai_smart_tera.c
+++ b/test/battle/ai/ai_smart_tera.c
@@ -31,7 +31,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_TERA: AI will not tera if it gets outsped a
OPPONENT(SPECIES_WOBBUFFET) { HP(60); Speed(1); Moves(MOVE_SEED_BOMB); TeraType(TYPE_GRASS); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); TeraType(TYPE_FIRE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
NOT MESSAGE("The opposing Wobbuffet terastallized into the Grass type!");
}
diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c
index f0eee3ac90..82c3c6d42a 100644
--- a/test/battle/ai/ai_switching.c
+++ b/test/battle/ai/ai_switching.c
@@ -28,12 +28,12 @@ AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill")
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_SCRATCH); }
- OPPONENT(SPECIES_CROBAT) {Moves(MOVE_SCRATCH); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH); }
+ OPPONENT(SPECIES_CROBAT) { Moves(MOVE_SCRATCH); }
} WHEN {
TURN { MOVE(player, MOVE_PERISH_SONG); }
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
TURN { EXPECT_SWITCH(opponent, 1); }
} SCENE {
MESSAGE(AI_TRAINER_NAME " sent out Crobat!");
@@ -47,11 +47,11 @@ AI_SINGLE_BATTLE_TEST("AI sees on-field player ability correctly and does not se
PARAMETRIZE { testAbility = ABILITY_VOLT_ABSORB; }
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT);
- PLAYER(SPECIES_PIKACHU) {Level(100); Moves(MOVE_VOLT_SWITCH, MOVE_SPARKLY_SWIRL); Ability(ABILITY_LIGHTNING_ROD); };
- PLAYER(SPECIES_LANTURN) {Level(44); Moves(MOVE_SCALD); Ability(testAbility); };
- OPPONENT(SPECIES_SOBBLE) {Level(44); Moves(MOVE_SCRATCH); }
- OPPONENT(SPECIES_BOMBIRDIER) {Level(42); Moves(MOVE_ROCK_SLIDE); }
- OPPONENT(SPECIES_IRON_THORNS) {Level(43); Moves(MOVE_SUPERCELL_SLAM, MOVE_ICE_PUNCH); }
+ PLAYER(SPECIES_PIKACHU) { Level(100); Moves(MOVE_VOLT_SWITCH, MOVE_SPARKLY_SWIRL); Ability(ABILITY_LIGHTNING_ROD); }
+ PLAYER(SPECIES_LANTURN) { Level(44); Moves(MOVE_SCALD); Ability(testAbility); }
+ OPPONENT(SPECIES_SOBBLE) { Level(44); Moves(MOVE_SCRATCH); }
+ OPPONENT(SPECIES_BOMBIRDIER) { Level(42); Moves(MOVE_ROCK_SLIDE); }
+ OPPONENT(SPECIES_IRON_THORNS) { Level(43); Moves(MOVE_SUPERCELL_SLAM, MOVE_ICE_PUNCH); }
} WHEN {
TURN {
MOVE(player, MOVE_VOLT_SWITCH);
@@ -66,8 +66,8 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -80,7 +80,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo
OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); }
} WHEN {
- TURN { EXPECT_SWITCH(opponentLeft, 3); };
+ TURN { EXPECT_SWITCH(opponentLeft, 3); }
} SCENE {
MESSAGE(AI_TRAINER_NAME " withdrew Gengar!");
MESSAGE(AI_TRAINER_NAME " sent out Raticate!");
@@ -96,8 +96,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch mid-turn into a player Pokémon
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -112,7 +112,7 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch mid-turn into a player Pokémon
MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { EXPECT_SWITCH(playerRight, 5); };
+ TURN { EXPECT_SWITCH(playerRight, 5); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " withdrew Gengar!");
MESSAGE(AI_PARTNER_NAME " sent out Raticate!");
@@ -128,8 +128,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch mid-turn into a player Pok
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -144,7 +144,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch mid-turn into a player Pok
MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { EXPECT_SWITCH(playerRight, 5); };
+ TURN { EXPECT_SWITCH(playerRight, 5); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " withdrew Gengar!");
MESSAGE(AI_PARTNER_NAME " sent out Raticate!");
@@ -160,8 +160,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon after fa
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -176,7 +176,7 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon after fa
MULTI_OPPONENT_B(SPECIES_VIBRAVA) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); };
+ TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " sent out Haunter!");
NONE_OF {
@@ -190,8 +190,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon aft
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -206,7 +206,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon aft
MULTI_OPPONENT_A(SPECIES_VIBRAVA) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); };
+ TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " sent out Haunter!");
NONE_OF {
@@ -220,8 +220,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon (multi)"
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -235,8 +235,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon (multi)"
MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); };
- TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); };
+ TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); }
+ TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " sent out Raticate!");
NONE_OF {
@@ -250,8 +250,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon (2v
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -265,8 +265,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon (2v
MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); }
} WHEN {
- TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); };
- TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); };
+ TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); }
+ TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); }
} SCENE {
MESSAGE(AI_PARTNER_NAME " sent out Raticate!");
NONE_OF {
@@ -279,8 +279,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -294,7 +294,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2
MULTI_OPPONENT_A(SPECIES_GASTLY) { Moves(MOVE_LICK); }
MULTI_OPPONENT_A(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); }
} WHEN {
- TURN { EXPECT_SWITCH(opponentLeft, 3); };
+ TURN { EXPECT_SWITCH(opponentLeft, 3); }
} SCENE {
MESSAGE(AI_TRAINER_NAME " withdrew Gengar!");
MESSAGE(AI_TRAINER_NAME " sent out Raticate!");
@@ -309,8 +309,8 @@ AI_ONE_VS_TWO_BATTLE_TEST("AI will not switch into a partner Pokémon in a 1v2 b
{
u32 flags;
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
+ PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE { flags = 0; }
PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD);
GIVEN {
@@ -324,7 +324,7 @@ AI_ONE_VS_TWO_BATTLE_TEST("AI will not switch into a partner Pokémon in a 1v2 b
MULTI_OPPONENT_B(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); }
} WHEN {
- TURN { EXPECT_SWITCH(opponentRight, 5); };
+ TURN { EXPECT_SWITCH(opponentRight, 5); }
} SCENE {
MESSAGE(AI_TRAINER_2_NAME " withdrew Gengar!");
MESSAGE(AI_TRAINER_2_NAME " sent out Raticate!");
@@ -359,7 +359,7 @@ AI_SINGLE_BATTLE_TEST("When AI switches out due to having no move that affects t
OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); }
OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); }
} WHEN {
- TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_SWITCH(opponent, 2); EXPECT_SEND_OUT(opponent, 0);}
+ TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_SWITCH(opponent, 2); EXPECT_SEND_OUT(opponent, 0); }
TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_MOVE(opponent, MOVE_TACKLE); }
}
}
@@ -377,7 +377,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo
OPPONENT(SPECIES_LINOONE) { Moves(MOVE_SCRATCH); }
OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
} WHEN {
- TURN { EXPECT_SWITCH(opponentLeft, 3); };
+ TURN { EXPECT_SWITCH(opponentLeft, 3); }
} SCENE {
MESSAGE(AI_TRAINER_NAME " withdrew Linoone!");
MESSAGE(AI_TRAINER_NAME " sent out Gengar!");
@@ -423,7 +423,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Eject Button will send out Ace
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag | AI_FLAG_ACE_POKEMON);
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); }
- OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_BUTTON); };
+ OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_BUTTON); }
OPPONENT(SPECIES_LINOONE);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_SCRATCH); EXPECT_SEND_OUT(opponent, 1); }
@@ -548,7 +548,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage whe
OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
} WHEN {
- TURN { MOVE(player, MOVE_STEALTH_ROCK) ;}
+ TURN { MOVE(player, MOVE_STEALTH_ROCK) ; }
TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard
}
}
@@ -584,7 +584,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); }
OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } // Mid battle, AI sends out Aron
- OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53);}
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); }
} WHEN {
TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); }
}
@@ -748,7 +748,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon m
ASSUME(GetSpeciesType(SPECIES_GOLURK, 1) == TYPE_GHOST);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchingFlag);
PLAYER(SPECIES_ELECTRODE) { Speed(4); Moves(MOVE_THUNDERBOLT, MOVE_AURA_SPHERE, MOVE_PROTECT); }
- PLAYER(SPECIES_WOBBUFFET) { Speed(1); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
OPPONENT(SPECIES_SNORLAX) { Speed(1); Moves(MOVE_HEADBUTT); }
OPPONENT(SPECIES_DUGTRIO) { Speed(3); Ability(ABILITY_ARENA_TRAP); Moves(MOVE_EARTHQUAKE); }
OPPONENT(SPECIES_GOLURK) { Speed(5); Moves(MOVE_EARTHQUAKE); }
@@ -775,9 +775,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will switch in trapping mon
OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); }
} WHEN {
if (aiSmartMonChoicesFlag == AI_FLAG_SMART_MON_CHOICES)
- TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); }
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); }
else
- TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); }
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); }
}
}
@@ -794,7 +794,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon
OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); }
OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); }
} WHEN {
- TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); }
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); }
}
}
@@ -824,7 +824,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_ELECTRODE) { Moves(MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK); }
- OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); };
+ OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); }
OPPONENT(SPECIES_RHYDON) { Moves(MOVE_EARTHQUAKE); Ability(ABILITY_ROCK_HEAD); }
} WHEN {
TURN { MOVE(player, MOVE_THUNDERBOLT) ; EXPECT_SWITCH(opponent, 1); }
@@ -1094,20 +1094,20 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an
{
u32 aiMon; u32 move;
enum Ability absorbingAbility;
- PARAMETRIZE { aiMon = SPECIES_NINETALES; absorbingAbility = ABILITY_FLASH_FIRE; move = MOVE_FLAMETHROWER;}
- PARAMETRIZE { aiMon = SPECIES_MANTINE; absorbingAbility = ABILITY_WATER_ABSORB; move = MOVE_SURF;}
- PARAMETRIZE { aiMon = SPECIES_TOXICROAK; absorbingAbility = ABILITY_DRY_SKIN; move = MOVE_SURF;}
- PARAMETRIZE { aiMon = SPECIES_GASTRODON; absorbingAbility = ABILITY_STORM_DRAIN; move = MOVE_SURF;}
- PARAMETRIZE { aiMon = SPECIES_JOLTEON; absorbingAbility = ABILITY_VOLT_ABSORB; move = MOVE_THUNDERBOLT;}
- PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT;}
- PARAMETRIZE { aiMon = SPECIES_MANECTRIC; absorbingAbility = ABILITY_LIGHTNING_ROD; move = MOVE_THUNDERBOLT;}
- PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT;}
- PARAMETRIZE { aiMon = SPECIES_AZUMARILL; absorbingAbility = ABILITY_SAP_SIPPER; move = MOVE_GIGA_DRAIN;}
- PARAMETRIZE { aiMon = SPECIES_ORTHWORM; absorbingAbility = ABILITY_EARTH_EATER; move = MOVE_EARTHQUAKE;}
- PARAMETRIZE { aiMon = SPECIES_BRONZONG; absorbingAbility = ABILITY_LEVITATE; move = MOVE_EARTHQUAKE;}
- PARAMETRIZE { aiMon = SPECIES_ELECTRODE; absorbingAbility = ABILITY_SOUNDPROOF; move = MOVE_HYPER_VOICE;}
- PARAMETRIZE { aiMon = SPECIES_CHESNAUGHT; absorbingAbility = ABILITY_BULLETPROOF; move = MOVE_SLUDGE_BOMB;}
- PARAMETRIZE { aiMon = SPECIES_BRAMBLEGHAST; absorbingAbility = ABILITY_WIND_RIDER; move = MOVE_HURRICANE;}
+ PARAMETRIZE { aiMon = SPECIES_NINETALES; absorbingAbility = ABILITY_FLASH_FIRE; move = MOVE_FLAMETHROWER; }
+ PARAMETRIZE { aiMon = SPECIES_MANTINE; absorbingAbility = ABILITY_WATER_ABSORB; move = MOVE_SURF; }
+ PARAMETRIZE { aiMon = SPECIES_TOXICROAK; absorbingAbility = ABILITY_DRY_SKIN; move = MOVE_SURF; }
+ PARAMETRIZE { aiMon = SPECIES_GASTRODON; absorbingAbility = ABILITY_STORM_DRAIN; move = MOVE_SURF; }
+ PARAMETRIZE { aiMon = SPECIES_JOLTEON; absorbingAbility = ABILITY_VOLT_ABSORB; move = MOVE_THUNDERBOLT; }
+ PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT; }
+ PARAMETRIZE { aiMon = SPECIES_MANECTRIC; absorbingAbility = ABILITY_LIGHTNING_ROD; move = MOVE_THUNDERBOLT; }
+ PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT; }
+ PARAMETRIZE { aiMon = SPECIES_AZUMARILL; absorbingAbility = ABILITY_SAP_SIPPER; move = MOVE_GIGA_DRAIN; }
+ PARAMETRIZE { aiMon = SPECIES_ORTHWORM; absorbingAbility = ABILITY_EARTH_EATER; move = MOVE_EARTHQUAKE; }
+ PARAMETRIZE { aiMon = SPECIES_BRONZONG; absorbingAbility = ABILITY_LEVITATE; move = MOVE_EARTHQUAKE; }
+ PARAMETRIZE { aiMon = SPECIES_ELECTRODE; absorbingAbility = ABILITY_SOUNDPROOF; move = MOVE_HYPER_VOICE; }
+ PARAMETRIZE { aiMon = SPECIES_CHESNAUGHT; absorbingAbility = ABILITY_BULLETPROOF; move = MOVE_SLUDGE_BOMB; }
+ PARAMETRIZE { aiMon = SPECIES_BRAMBLEGHAST; absorbingAbility = ABILITY_WIND_RIDER; move = MOVE_HURRICANE; }
GIVEN {
WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
@@ -1261,8 +1261,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac
u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE;
PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED);
- PARAMETRIZE {move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; };
- PARAMETRIZE {move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; };
+ PARAMETRIZE { move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }
+ PARAMETRIZE { move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_CHARM) == EFFECT_ATTACK_DOWN_2);
@@ -1282,8 +1282,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac
u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE, move2 = MOVE_NONE;
PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED);
- PARAMETRIZE {move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; };
- PARAMETRIZE {move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; };
+ PARAMETRIZE { move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }
+ PARAMETRIZE { move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_CHARM) == EFFECT_ATTACK_DOWN_2);
diff --git a/test/battle/ai/ai_trytofaint.c b/test/battle/ai/ai_trytofaint.c
index 50ab376503..f8bdded933 100644
--- a/test/battle/ai/ai_trytofaint.c
+++ b/test/battle/ai/ai_trytofaint.c
@@ -64,11 +64,12 @@ AI_SINGLE_BATTLE_TEST("AI sees Parental Bond killing through sturdy")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
- PLAYER(SPECIES_MAGNEZONE){Level(64); Ability(ABILITY_STURDY); Moves(MOVE_TACKLE, MOVE_LIGHT_SCREEN); }
- OPPONENT(SPECIES_KANGASKHAN_MEGA){Level(64); Moves(MOVE_DRAIN_PUNCH, MOVE_TAUNT); }
- } WHEN {
- TURN{ MOVE(player, MOVE_TACKLE);
- EXPECT_MOVE(opponent, MOVE_DRAIN_PUNCH); // AI should see drain punch as a kill due to multi hit, outscoring taunt
+ PLAYER(SPECIES_MAGNEZONE){ Level(64); Ability(ABILITY_STURDY); Moves(MOVE_TACKLE, MOVE_LIGHT_SCREEN); }
+ OPPONENT(SPECIES_KANGASKHAN_MEGA){ Level(64); Moves(MOVE_DRAIN_PUNCH, MOVE_TAUNT); }
+ } WHEN {
+ TURN {
+ MOVE(player, MOVE_TACKLE);
+ EXPECT_MOVE(opponent, MOVE_DRAIN_PUNCH); // AI should see drain punch as a kill due to multi hit, outscoring taunt
}
}
}
diff --git a/test/battle/ai/can_use_all_moves.c b/test/battle/ai/can_use_all_moves.c
index d7ea827f39..b9333978cf 100644
--- a/test/battle/ai/can_use_all_moves.c
+++ b/test/battle/ai/can_use_all_moves.c
@@ -19,7 +19,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Final Gambit")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_FINAL_GAMBIT); SEND_OUT(playerLeft, 2); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_FINAL_GAMBIT); SEND_OUT(playerLeft, 2); }
}
}
@@ -35,7 +35,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Guillotine")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_GUILLOTINE); SEND_OUT(playerLeft, 2); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_GUILLOTINE); SEND_OUT(playerLeft, 2); }
}
}
@@ -51,7 +51,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Sheer Cold")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_SHEER_COLD); SEND_OUT(playerLeft, 2); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_SHEER_COLD); SEND_OUT(playerLeft, 2); }
}
}
@@ -113,7 +113,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 1-100")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -189,7 +189,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 101-200")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -278,7 +278,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 201-300")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -355,7 +355,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -423,7 +423,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -498,7 +498,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -570,7 +570,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 601-700")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -639,7 +639,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 701-800")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
@@ -701,6 +701,6 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 801-900")
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, move); }
+ TURN { EXPECT_MOVE(opponentLeft, move); }
}
}
diff --git a/test/battle/badge_boost.c b/test/battle/badge_boost.c
index b03168d476..bc60778cb1 100644
--- a/test/battle/badge_boost.c
+++ b/test/battle/badge_boost.c
@@ -8,8 +8,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg)
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
- PARAMETRIZE{badge = FALSE; genConfig = gen;}
- PARAMETRIZE{badge = TRUE; genConfig = gen;}
+ PARAMETRIZE { badge = FALSE; genConfig = gen; }
+ PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
@@ -17,8 +17,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg)
else
FlagClear(B_FLAG_BADGE_BOOST_ATTACK);
WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig);
- PLAYER(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
@@ -40,8 +40,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
- PARAMETRIZE{badge = FALSE; genConfig = gen;}
- PARAMETRIZE{badge = TRUE; genConfig = gen;}
+ PARAMETRIZE { badge = FALSE; genConfig = gen; }
+ PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
@@ -49,8 +49,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s
else
FlagClear(B_FLAG_BADGE_BOOST_SPATK);
WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig);
- PLAYER(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_THUNDER_SHOCK); }
} SCENE {
@@ -72,8 +72,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dm
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
- PARAMETRIZE{badge = FALSE; genConfig = gen;}
- PARAMETRIZE{badge = TRUE; genConfig = gen;}
+ PARAMETRIZE { badge = FALSE; genConfig = gen; }
+ PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
@@ -82,8 +82,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dm
else
FlagClear(B_FLAG_BADGE_BOOST_DEFENSE);
WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig);
- PLAYER(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
@@ -105,8 +105,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense",
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
- PARAMETRIZE{badge = FALSE; genConfig = gen;}
- PARAMETRIZE{badge = TRUE; genConfig = gen;}
+ PARAMETRIZE { badge = FALSE; genConfig = gen; }
+ PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
@@ -115,8 +115,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense",
else
FlagClear(B_FLAG_BADGE_BOOST_SPDEF);
WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig);
- PLAYER(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); }
} SCENE {
@@ -138,8 +138,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg)
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
- PARAMETRIZE{badge = FALSE; genConfig = gen;}
- PARAMETRIZE{badge = TRUE; genConfig = gen;}
+ PARAMETRIZE { badge = FALSE; genConfig = gen; }
+ PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
@@ -150,7 +150,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg)
PLAYER(SPECIES_WOBBUFFET) { Speed(100); HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(101); HP(1); }
} WHEN {
- TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH);}
+ TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH); }
} THEN {
if (badge && genConfig <= GEN_3)
{
diff --git a/test/battle/battle_message.c b/test/battle/battle_message.c
index 423da7cf05..ac8917a156 100644
--- a/test/battle/battle_message.c
+++ b/test/battle/battle_message.c
@@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Battle Message: Send-in message depends on foe HP")
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET) { HP(hp); MaxHP(100); }
} WHEN {
- TURN { SWITCH(player, 1); }
+ TURN { SWITCH(player, 1); }
} SCENE {
if (hp > 69)
MESSAGE("Go! Wynaut!");
@@ -34,7 +34,7 @@ TO_DO_BATTLE_TEST("Battle Message: Switch-out message changes based on condition
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { SWITCH(player, 1); }
+ TURN { SWITCH(player, 1); }
} SCENE {
if (???)
MESSAGE("Wynaut, that's enough! Come back!");
diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c
index 8e1c9cf682..58650f7f5d 100644
--- a/test/battle/crit_chance.c
+++ b/test/battle/crit_chance.c
@@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Raising critical hit rate to 3 guarantees a cri
WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig);
ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1);
ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS);
- PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); };
+ PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SLASH); }
diff --git a/test/battle/end_turn_effects.c b/test/battle/end_turn_effects.c
index 931f792efe..cf65a50c6b 100644
--- a/test/battle/end_turn_effects.c
+++ b/test/battle/end_turn_effects.c
@@ -89,7 +89,7 @@ TWO_VS_ONE_BATTLE_TEST("End Turn Effects: First Event Block is executed correctl
s16 damage;
GIVEN {
- MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1);}
+ MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1); }
MULTI_PARTNER(SPECIES_EKANS) { HP(100); Ability(ABILITY_SHED_SKIN); Status1(STATUS1_BURN); Speed(2); }
MULTI_OPPONENT_A(SPECIES_WYNAUT) { HP(100); Item(ITEM_LEFTOVERS); Speed(3); }
MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { HP(100); Item(ITEM_BLACK_SLUDGE); Speed(4); }
@@ -118,7 +118,7 @@ ONE_VS_TWO_BATTLE_TEST("End Turn Effects: First Event Block is executed correctl
s16 damage;
GIVEN {
- MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1);}
+ MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1); }
MULTI_PLAYER(SPECIES_EKANS) { HP(100); Ability(ABILITY_SHED_SKIN); Status1(STATUS1_BURN); Speed(2); }
MULTI_OPPONENT_A(SPECIES_WYNAUT) { HP(100); Item(ITEM_LEFTOVERS); Speed(3); }
MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { HP(100); Item(ITEM_BLACK_SLUDGE); Speed(4); }
diff --git a/test/battle/form_change/begin_battle.c b/test/battle/form_change/begin_battle.c
index bee9c4fe6b..a133d321a3 100644
--- a/test/battle/form_change/begin_battle.c
+++ b/test/battle/form_change/begin_battle.c
@@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Zacian's Iron Head becomes Behemoth Blade upon form change")
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); }
} THEN {
- ASSUME(player->species == SPECIES_ZACIAN_CROWNED); // Assumes form change worked.
+ EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED);
EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BLADE);
}
}
@@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); }
} THEN {
- ASSUME(player->species == SPECIES_ZAMAZENTA_CROWNED); // Assumes form change worked.
+ EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED);
EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH);
}
}
diff --git a/test/battle/form_change/end_battle.c b/test/battle/form_change/end_battle.c
new file mode 100644
index 0000000000..9de52a83f2
--- /dev/null
+++ b/test/battle/form_change/end_battle.c
@@ -0,0 +1,288 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Xerneas returns its Neutral Form upon battle end")
+{
+ GIVEN {
+ PLAYER(SPECIES_XERNEAS_NEUTRAL);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_XERNEAS_NEUTRAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Zacian returns its Hero Form upon battle end")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZACIAN_HERO) { Item(ITEM_RUSTED_SWORD); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZACIAN_HERO);
+ }
+}
+
+SINGLE_BATTLE_TEST("Zacian returns its Hero Form upon battle end")
+{
+ GIVEN {
+ ASSUME(GetMovePP(MOVE_BEHEMOTH_BLADE) == 5);
+ PLAYER(SPECIES_ZACIAN_HERO) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZACIAN_HERO);
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_MOVE1), MOVE_IRON_HEAD);
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_PP1), 5); // Behemoth Blade's PP
+ }
+}
+
+SINGLE_BATTLE_TEST("Zamazenta returns its Hero Form upon battle end")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(ITEM_RUSTED_SHIELD); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZAMAZENTA_HERO);
+ }
+}
+
+SINGLE_BATTLE_TEST("Zamazenta returns its Hero Form upon battle end")
+{
+ GIVEN {
+ ASSUME(GetMovePP(MOVE_BEHEMOTH_BASH) == 5);
+ PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZAMAZENTA_HERO);
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_MOVE1), MOVE_IRON_HEAD);
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_PP1), 5); // Behemoth Bash's PP
+ }
+}
+
+SINGLE_BATTLE_TEST("Palafin returns to Zero form upon battle end")
+{
+ GIVEN {
+ PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { SWITCH(player, 1); }
+ TURN { SWITCH(player, 0); }
+ } SCENE {
+ SWITCH_OUT_MESSAGE("Palafin");
+ SEND_IN_MESSAGE("Wobbuffet");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Palafin");
+ ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO);
+ MESSAGE("Palafin underwent a heroic transformation!");
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_PALAFIN_ZERO);
+ }
+}
+
+SINGLE_BATTLE_TEST("Shaymin retains Land form if it was frozen or frostbitten in battle")
+{
+ KNOWN_FAILING; // changedSpecies is forcing the return to Sky Form
+ GIVEN {
+ ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE));
+ PLAYER(SPECIES_SHAYMIN_SKY);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_POWDER_SNOW); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, opponent);
+ FREEZE_OR_FROSTBURN_STATUS(player, TRUE);
+ NOT HP_BAR(player); // Regression caused by Mimikyu form change
+ MESSAGE("Shaymin transformed!");
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_SHAYMIN_LAND);
+ }
+}
+
+SINGLE_BATTLE_TEST("Meloetta returns to Aria form upon battle end after using Relic Song")
+{
+ GIVEN {
+ PLAYER(SPECIES_MELOETTA_ARIA);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_RELIC_SONG); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player);
+ HP_BAR(opponent);
+ MESSAGE("Meloetta transformed!");
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_MELOETTA_ARIA);
+ }
+}
+
+SINGLE_BATTLE_TEST("Battle Bond Greninja returns to base form upon battle end after knocking out an opponent")
+{
+ GIVEN {
+ WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8);
+ PLAYER(SPECIES_GRENINJA_BATTLE_BOND);
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); }
+ } SCENE {
+ HP_BAR(opponent);
+ MESSAGE("The opposing Wobbuffet fainted!");
+ ABILITY_POPUP(player, ABILITY_BATTLE_BOND);
+ MESSAGE("Greninja became fully charged due to its bond with its trainer!");
+ MESSAGE("Greninja became Ash-Greninja!");
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_GRENINJA_BATTLE_BOND);
+ }
+}
+
+SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon battle end after using an attack")
+{
+ GIVEN {
+ PLAYER(SPECIES_AEGISLASH_SHIELD);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD);
+ }
+}
+
+SINGLE_BATTLE_TEST("Wishiwashi reverts to Solo form upon battle end after changing form at the beginning of the battle")
+{
+ GIVEN {
+ PLAYER(SPECIES_WISHIWASHI_SOLO) { Level(100); Ability(ABILITY_SCHOOLING); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SCHOOLING);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_WISHIWASHI_SOLO);
+ }
+}
+
+SINGLE_BATTLE_TEST("Minior Meteor reverts to Core form upon battle end after changing form at the beginning of the battle")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_MINIOR_CORE) { Ability(ABILITY_SHIELDS_DOWN); HP(51); MaxHP(101); }
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_SHIELDS_DOWN);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[1], MON_DATA_SPECIES), SPECIES_MINIOR_CORE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Mimikyu Busted reverts to Disguised form upon battle end after busting its Disguise in battle")
+{
+ u32 species;
+ PARAMETRIZE { species = SPECIES_MIMIKYU_DISGUISED; }
+ PARAMETRIZE { species = SPECIES_MIMIKYU_TOTEM_DISGUISED; }
+ GIVEN {
+ WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_7);
+ PLAYER(species) { Ability(ABILITY_DISGUISE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_AERIAL_ACE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_AERIAL_ACE, opponent);
+ ABILITY_POPUP(player, ABILITY_DISGUISE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
+ }
+}
+
+SINGLE_BATTLE_TEST("Cramorant reverts to base Form upon battle end after using Surf in battle")
+{
+ GIVEN {
+ PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SURF); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, player);
+ HP_BAR(opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CRAMORANT);
+ }
+}
+
+SINGLE_BATTLE_TEST("Eiscue Noice reverts to Ice Form upon battle end after being hit by a physical move in battle")
+{
+ GIVEN {
+ ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
+ PLAYER(SPECIES_EISCUE_ICE);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SCRATCH); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_ICE_FACE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ MESSAGE("Eiscue transformed!");
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_EISCUE_ICE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Morpeko Hangry reverts to Full Belly Form upon battle end after changing forms at the end of the turn")
+{
+ GIVEN {
+ PLAYER(SPECIES_MORPEKO_FULL_BELLY) { Speed(2); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } SCENE {
+ MESSAGE("Morpeko used Celebrate!");
+ MESSAGE("The opposing Wobbuffet used Celebrate!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_MORPEKO_FULL_BELLY);
+ }
+}
+
+SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon battle end after terastallizing")
+{
+ u32 species;
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; }
+ PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; }
+ PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; }
+ GIVEN {
+ PLAYER(species);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
+ }
+}
+
+SINGLE_BATTLE_TEST("Terapagos reverts to the correct form upon battle end after terastallizing")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_NORMAL);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_TERAPAGOS_NORMAL);
+ }
+}
diff --git a/test/battle/form_change/end_battle_environment.c b/test/battle/form_change/end_battle_environment.c
new file mode 100644
index 0000000000..d4dfee3f5e
--- /dev/null
+++ b/test/battle/form_change/end_battle_environment.c
@@ -0,0 +1,33 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Burmy changes form based on the environment it appeared in-battle")
+{
+ u32 currentForm = 0, newForm = 0, environment = 0;
+
+ static u32 sBurmyForms[] = {
+ SPECIES_BURMY_PLANT,
+ SPECIES_BURMY_SANDY,
+ SPECIES_BURMY_TRASH,
+ };
+
+ for (u32 j = 0; j < ARRAY_COUNT(sBurmyForms); j++) {
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_GRASS; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_LONG_GRASS; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_POND; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_MOUNTAIN; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_PLAIN; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_SANDY; environment = BATTLE_ENVIRONMENT_CAVE; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_SANDY; environment = BATTLE_ENVIRONMENT_SAND; }
+ PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_TRASH; environment = BATTLE_ENVIRONMENT_BUILDING; }
+ }
+ GIVEN {
+ PLAYER(currentForm);
+ OPPONENT(SPECIES_WOBBUFFET);
+ Environment(environment);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), newForm);
+ }
+}
diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c
index 316ecca0bf..4f66dc84c1 100644
--- a/test/battle/form_change/faint.c
+++ b/test/battle/form_change/faint.c
@@ -8,12 +8,19 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting (start as Shi
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); }
+ TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
} SCENE {
- MESSAGE("The opposing Wobbuffet used Gust!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent);
+ HP_BAR(player);
MESSAGE("Aegislash fainted!");
+ SEND_IN_MESSAGE("Wobbuffet");
+ SWITCH_OUT_MESSAGE("Wobbuffet")
+ SEND_IN_MESSAGE("Aegislash");
} THEN {
- EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD);
+ // We do not check gPlayerParty data to avoid triggering FORM_CHANGE_END_BATTLE.
+ EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD);
}
}
@@ -25,11 +32,18 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting (start as Bla
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); }
+ TURN { USE_ITEM(player, ITEM_REVIVE, 0); }
+ TURN { SWITCH(player, 0); }
} SCENE {
- MESSAGE("The opposing Wobbuffet used Gust!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent);
+ HP_BAR(player);
MESSAGE("Aegislash fainted!");
+ SEND_IN_MESSAGE("Wobbuffet");
+ SWITCH_OUT_MESSAGE("Wobbuffet")
+ SEND_IN_MESSAGE("Aegislash");
} THEN {
- EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD);
+ // We do not check gPlayerParty data to avoid triggering FORM_CHANGE_END_BATTLE.
+ EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD);
}
}
diff --git a/test/battle/form_change/gigantamax.c b/test/battle/form_change/gigantamax.c
new file mode 100644
index 0000000000..92e2b49224
--- /dev/null
+++ b/test/battle/form_change/gigantamax.c
@@ -0,0 +1,45 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms change upon Dynamaxing")
+{
+ u32 species;
+ bool32 gigantamaxFactor;
+ PARAMETRIZE { gigantamaxFactor = FALSE; species = SPECIES_VENUSAUR; }
+ PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GMAX; }
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
+ } THEN {
+ EXPECT_EQ(player->species, species);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms revert upon switching")
+{
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
+ TURN { SWITCH(player, 1); }
+ TURN { SWITCH(player, 0); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_VENUSAUR);
+ }
+}
+
+SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon battle end after Gigantamaxing")
+{
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(TRUE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR);
+ }
+}
diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c
index af16b779b5..f246cf1cc6 100644
--- a/test/battle/form_change/mega_evolution.c
+++ b/test/battle/form_change/mega_evolution.c
@@ -76,14 +76,14 @@ SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)")
GIVEN {
WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_6);
PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); }
- OPPONENT(SPECIES_WOBBUFFET) {}
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Celebrate!");
MESSAGE("Gardevoir used Celebrate!");
} THEN {
- ASSUME(player->speed == 205);
+ EXPECT_EQ(player->speed, 205);
}
}
@@ -91,15 +91,15 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)")
{
GIVEN {
WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7);
- PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE);}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); }
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Gardevoir used Celebrate!");
MESSAGE("The opposing Wobbuffet used Celebrate!");
} THEN {
- ASSUME(player->speed == 205);
+ EXPECT_EQ(player->speed, 205);
}
}
@@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde
MESSAGE("Sableye used Celebrate!");
MESSAGE("The opposing Wobbuffet used Celebrate!");
} THEN {
- ASSUME(player->speed == 105);
+ EXPECT_EQ(player->speed, 105);
}
}
@@ -192,3 +192,27 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting"
}
}
}
+
+SINGLE_BATTLE_TEST("Venusaur returns its base Form upon battle end after Mega Evolving")
+{
+ GIVEN {
+ PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR);
+ }
+}
+
+SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon battle end after Mega Evolving")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_RAYQUAZA);
+ }
+}
diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c
index 7ae591f27b..c6bab2f77a 100644
--- a/test/battle/form_change/primal_reversion.c
+++ b/test/battle/form_change/primal_reversion.c
@@ -4,9 +4,9 @@
SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red Orb")
{
u16 heldItem;
- PARAMETRIZE { heldItem = ITEM_NONE;}
- PARAMETRIZE { heldItem = ITEM_RED_ORB;}
- PARAMETRIZE { heldItem = ITEM_BLUE_ORB;}
+ PARAMETRIZE { heldItem = ITEM_NONE; }
+ PARAMETRIZE { heldItem = ITEM_RED_ORB; }
+ PARAMETRIZE { heldItem = ITEM_BLUE_ORB; }
GIVEN {
PLAYER(SPECIES_GROUDON) { Item(heldItem); }
OPPONENT(SPECIES_WOBBUFFET);
@@ -36,9 +36,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O
SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue Orb")
{
u16 heldItem;
- PARAMETRIZE { heldItem = ITEM_NONE;}
- PARAMETRIZE { heldItem = ITEM_RED_ORB;}
- PARAMETRIZE { heldItem = ITEM_BLUE_ORB;}
+ PARAMETRIZE { heldItem = ITEM_NONE; }
+ PARAMETRIZE { heldItem = ITEM_RED_ORB; }
+ PARAMETRIZE { heldItem = ITEM_BLUE_ORB; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_KYOGRE) { Item(heldItem); }
@@ -68,8 +68,8 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O
DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent faster")
{
GIVEN {
- PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); };
- PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(15); };
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); }
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(15); }
OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(10); }
OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); }
} WHEN {
@@ -94,8 +94,8 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f
DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player faster")
{
GIVEN {
- PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); };
- PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(30); };
+ PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); }
+ PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(30); }
OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(10); }
OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(2); }
} WHEN {
@@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon
{
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
- PLAYER(SPECIES_WOBBUFFET) {HP(1); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -158,7 +158,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B
GIVEN {
ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH));
ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON);
- PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_EJECT_BUTTON); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }
PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -181,7 +181,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car
ASSUME(gItemsInfo[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
- OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_RED_CARD); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
@@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SPIKES); }
- TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1);}
+ TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1); }
} SCENE {
SEND_IN_MESSAGE("Groudon");
HP_BAR(player);
@@ -332,3 +332,18 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all
EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
}
}
+
+SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end")
+{
+ u32 species, item;
+ PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; }
+ PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; }
+ GIVEN {
+ PLAYER(species) { Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } THEN {
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
+ }
+}
diff --git a/test/battle/form_change/status.c b/test/battle/form_change/status.c
index 612c125497..02e346ed6e 100644
--- a/test/battle/form_change/status.c
+++ b/test/battle/form_change/status.c
@@ -35,6 +35,5 @@ SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitt
EXPECT_EQ(player->species, SPECIES_SHAYMIN_LAND);
else
EXPECT_EQ(player->species, SPECIES_SHAYMIN_SKY);
-
}
}
diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c
index 183f61ec87..fcb0efded5 100644
--- a/test/battle/form_change/ultra_burst.c
+++ b/test/battle/form_change/ultra_burst.c
@@ -59,15 +59,15 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order")
{
GIVEN {
WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7);
- PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z);}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
} SCENE {
MESSAGE("Necrozma used Celebrate!");
MESSAGE("The opposing Wobbuffet used Celebrate!");
} THEN {
- ASSUME(player->speed == 263);
+ EXPECT_EQ(player->speed, 263);
}
}
@@ -119,3 +119,19 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn")
EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA);
}
}
+
+SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon battle end after Ultra Bursting")
+{
+ u32 species;
+ PARAMETRIZE { species = SPECIES_NECROZMA_DUSK_MANE; }
+ PARAMETRIZE { species = SPECIES_NECROZMA_DAWN_WINGS; }
+ GIVEN {
+ PLAYER(species) { Item(ITEM_ULTRANECROZIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA);
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species);
+ }
+}
diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c
index 25a0d5d08e..e47cd2ca86 100644
--- a/test/battle/gimmick/dynamax.c
+++ b/test/battle/gimmick/dynamax.c
@@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax expires after three turns and correctly con
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: dynamax); }
TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH, WITH_RNG(RNG_DAMAGE_MODIFIER, 24)); }
- TURN { }
+ TURN {}
} SCENE {
if (dynamax)
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player);
@@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot be hit by OHKO moves")
SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are affected by Grudge")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Speed(50); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
@@ -270,7 +270,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by phazing moves
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET);
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -354,8 +354,8 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon can have base moves disabled on t
{
GIVEN {
ASSUME(B_DISABLE_TURNS >= GEN_5);
- PLAYER(SPECIES_WOBBUFFET) { Speed(50); };
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); }
TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
@@ -532,37 +532,6 @@ DOUBLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are immune to Instruct")
}
}
-SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms change upon Dynamaxing")
-{
- u32 species;
- bool32 gigantamaxFactor;
- PARAMETRIZE { gigantamaxFactor = FALSE; species = SPECIES_VENUSAUR; }
- PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GMAX; }
- GIVEN {
- PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); }
- OPPONENT(SPECIES_WOBBUFFET);
- } WHEN {
- TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
- } THEN {
- EXPECT_EQ(player->species, species);
- }
-}
-
-SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms revert upon switching")
-{
- GIVEN {
- PLAYER(SPECIES_VENUSAUR);
- PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET);
- } WHEN {
- TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
- TURN { SWITCH(player, 1); }
- TURN { SWITCH(player, 0); }
- } THEN {
- EXPECT_EQ(player->species, SPECIES_VENUSAUR);
- }
-}
-
SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Choice items", s16 damage)
{
u16 item;
@@ -570,7 +539,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Choice items"
PARAMETRIZE { item = ITEM_NONE; }
GIVEN {
ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND);
- PLAYER(SPECIES_WOBBUFFET) { Item(item); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
@@ -588,7 +557,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot use Max Guard while holdin
{
GIVEN {
ASSUME(gItemsInfo[ITEM_ASSAULT_VEST].holdEffect == HOLD_EFFECT_ASSAULT_VEST);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
@@ -733,7 +702,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Strike lowers both opponents' speed")
ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STRIKE, MOVE_EFFECT_LOWER_SPEED_SIDE));
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
PLAYER(SPECIES_WOBBUFFET) { Speed(79); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(100); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(99); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_SCRATCH, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
@@ -886,8 +855,8 @@ SINGLE_BATTLE_TEST("Dynamax: Max Overgrowth sets up Grassy Terrain")
GIVEN {
ASSUME(MoveHasAdditionalEffect(MOVE_MAX_OVERGROWTH, MOVE_EFFECT_GRASSY_TERRAIN));
ASSUME(GetSpeciesBaseHP(SPECIES_WOBBUFFET) == 190);
- OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
- PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
+ OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }
+ PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }
} WHEN {
TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
TURN { MOVE(player, MOVE_VINE_WHIP); MOVE(opponent, MOVE_CELEBRATE); }
@@ -979,7 +948,7 @@ SINGLE_BATTLE_TEST("Dynamax: G-Max Steelsurge sets up sharp steel")
} WHEN {
TURN { MOVE(player, MOVE_IRON_HEAD, gimmick: GIMMICK_DYNAMAX); }
TURN { SWITCH(opponent, 1); }
- TURN { } // wait out Dynamax
+ TURN {} // wait out Dynamax
TURN { MOVE(opponent, MOVE_DEFOG); }
} SCENE {
// turn 1
@@ -1301,10 +1270,10 @@ DOUBLE_BATTLE_TEST("Dynamax: G-Max Wildfire sets a field effect that damages non
OPPONENT(SPECIES_ARCANINE);
} WHEN {
TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
- TURN { }
+ TURN {}
TURN { SWITCH(opponentLeft, 2); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
// turn 1
MESSAGE("Charizard used G-Max Wildfire!");
@@ -1375,7 +1344,7 @@ DOUBLE_BATTLE_TEST("Dynamax: G-Max Snooze makes only the target drowsy")
OPPONENT(SPECIES_CHANSEY);
} WHEN {
TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
- TURN { }
+ TURN {}
} SCENE {
// turn 1
MESSAGE("Grimmsnarl used G-Max Snooze!");
@@ -1551,7 +1520,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Flare doesn't softlock the game when fainting p
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
@@ -1559,7 +1528,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Flare doesn't softlock the game when fainting p
TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX);
MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, gimmick: GIMMICK_DYNAMAX);
SEND_OUT(playerRight, 2); }
- TURN { }
+ TURN {}
}
}
@@ -1567,7 +1536,7 @@ SINGLE_BATTLE_TEST("Dynamax: Max Moves don't execute effects on fainted battlers
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
@@ -1664,8 +1633,8 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax is reverted before switch out")
SINGLE_BATTLE_TEST("Dynamax: max move against semi-invulnerable target prints the correct message")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Speed(1);};
- OPPONENT(SPECIES_WOBBUFFET) {Speed(2);};
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FLY); }
} SCENE {
@@ -1679,12 +1648,12 @@ DOUBLE_BATTLE_TEST("Dynamax stat lowering moves don't make stat-changing abiliti
{
u32 move, stat, ability;
move = 0; stat = 0; ability = 0;
- u32 abilityList[] = {ABILITY_COMPETITIVE, ABILITY_DEFIANT, ABILITY_CONTRARY, ABILITY_SIMPLE};
+ u32 abilityList[] = { ABILITY_COMPETITIVE, ABILITY_DEFIANT, ABILITY_CONTRARY, ABILITY_SIMPLE};
for (u32 j = 0; j < 4; j++)
{
PARAMETRIZE { move = MOVE_SCRATCH; stat = STAT_SPEED; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_FURY_CUTTER; stat = STAT_SPATK; ability = abilityList[j]; }
- PARAMETRIZE { move = MOVE_LICK; stat = STAT_DEF; ability = abilityList[j]; ;}
+ PARAMETRIZE { move = MOVE_LICK; stat = STAT_DEF; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_DRAGON_CLAW; stat = STAT_ATK; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_CRUNCH; stat = STAT_SPDEF; ability = abilityList[j]; }
}
@@ -1699,7 +1668,7 @@ DOUBLE_BATTLE_TEST("Dynamax stat lowering moves don't make stat-changing abiliti
OPPONENT(SPECIES_WOBBUFFET) { Ability(ability); }
OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); }
} WHEN {
- TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX);}
+ TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
@@ -1712,12 +1681,12 @@ DOUBLE_BATTLE_TEST("Dynamax stat raising moves don't make stat-changing abilitie
{
u32 move, stat, ability;
move = 0; stat = 0; ability = 0;
- u32 abilityList[] = {ABILITY_CONTRARY, ABILITY_SIMPLE};
+ u32 abilityList[] = { ABILITY_CONTRARY, ABILITY_SIMPLE};
for (u32 j = 0; j < 2; j++)
{
PARAMETRIZE { move = MOVE_PECK; stat = STAT_SPEED; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_POISON_JAB; stat = STAT_SPATK; ability = abilityList[j]; }
- PARAMETRIZE { move = MOVE_BULLET_PUNCH; stat = STAT_DEF; ability = abilityList[j]; ;}
+ PARAMETRIZE { move = MOVE_BULLET_PUNCH; stat = STAT_DEF; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_DOUBLE_KICK; stat = STAT_ATK; ability = abilityList[j]; }
PARAMETRIZE { move = MOVE_MUD_SLAP; stat = STAT_SPDEF; ability = abilityList[j]; }
}
@@ -1729,10 +1698,10 @@ DOUBLE_BATTLE_TEST("Dynamax stat raising moves don't make stat-changing abilitie
ASSUME(MoveHasAdditionalEffect(MOVE_MAX_DARKNESS, MOVE_EFFECT_LOWER_SP_DEF_SIDE));
PLAYER(SPECIES_WOBBUFFET) { Ability(ability); }
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); }
- OPPONENT(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX);}
+ TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c
index 9f98ea98ef..6e5a9884b8 100644
--- a/test/battle/hold_effect/ability_shield.c
+++ b/test/battle/hold_effect/ability_shield.c
@@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Neutralizing Gas")
PLAYER(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); Item(item); }
OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
MESSAGE("Neutralizing gas filled the area!");
diff --git a/test/battle/hold_effect/air_balloon.c b/test/battle/hold_effect/air_balloon.c
index ad0fb457a8..3493012e9c 100644
--- a/test/battle/hold_effect/air_balloon.c
+++ b/test/battle/hold_effect/air_balloon.c
@@ -12,7 +12,7 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from ground type moves")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_EARTHQUAKE); }
@@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from grou
SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is not ground type")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
@@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is no
SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage from ground type moves once it has been popped")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage
SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has been popped")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
@@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has be
SINGLE_BATTLE_TEST("Air Balloon prevents the user from being healed by Grassy Terrain")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); MaxHP(100); HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); MaxHP(100); HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_GRASSY_TERRAIN); }
@@ -91,8 +91,8 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the user from being healed by Grassy Te
SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen with Magician")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
- OPPONENT(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
+ OPPONENT(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
@@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen by Thief")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_THIEF) == EFFECT_STEAL_ITEM);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_THIEF); }
diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c
index c7b9ba0933..002d164d1e 100644
--- a/test/battle/hold_effect/berserk_gene.c
+++ b/test/battle/hold_effect/berserk_gene.c
@@ -269,7 +269,7 @@ SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with bag items")
PARAMETRIZE { item = ITEM_JUBILIFE_MUFFIN; }
GIVEN {
ASSUME(gItemsInfo[item].battleUsage == EFFECT_ITEM_CURE_STATUS);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);};
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }
OPPONENT(SPECIES_GENGAR);
} WHEN {
TURN { USE_ITEM(player, item, partyIndex: 0); }
@@ -290,8 +290,8 @@ SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with used held items"
GIVEN {
ASSUME(gItemsInfo[ITEM_PERSIM_BERRY].holdEffect == HOLD_EFFECT_CURE_CONFUSION);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);};
- OPPONENT(SPECIES_WOBBUFFET) { Item(item);};
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(item); }
} WHEN {
TURN { MOVE(player, MOVE_COVET, WITH_RNG(RNG_CONFUSION, FALSE)); }
TURN {}
diff --git a/test/battle/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c
index f98675a1e9..d59c17ef68 100644
--- a/test/battle/hold_effect/booster_energy.c
+++ b/test/battle/hold_effect/booster_energy.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Booster Energy will activate Quark Drive after Electric Terr
{
GIVEN {
PLAYER(SPECIES_IRON_MOTH) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
- OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
TURN {}
TURN {}
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Booster Energy will activate Protosynthesis after harsh sunl
GIVEN {
WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6);
PLAYER(SPECIES_RAGING_BOLT) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
- OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); };
+ OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); }
} WHEN {
TURN {}
TURN {}
@@ -72,11 +72,11 @@ SINGLE_BATTLE_TEST("Booster Energy's Protosynthesis boost is preserved when weat
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_SUNNY_DAY, MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(opponent, MOVE_SUNNY_DAY); }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
@@ -100,9 +100,9 @@ SINGLE_BATTLE_TEST("Booster Energy activates Protosynthesis and increases highes
GIVEN {
PLAYER(SPECIES_RAGING_BOLT) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
- OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
@@ -134,9 +134,9 @@ SINGLE_BATTLE_TEST("Booster Energy activates Quark Drive and increases highest s
GIVEN {
PLAYER(SPECIES_IRON_MOTH) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
- OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
if (attack == 110)
@@ -161,11 +161,11 @@ SINGLE_BATTLE_TEST("Booster Energy's Quark Drive boost is preserved when terrain
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_GRASSY_TERRAIN, MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(opponent, MOVE_GRASSY_TERRAIN); }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!");
@@ -192,7 +192,7 @@ SINGLE_BATTLE_TEST("Booster Energy increases special attack by 30% if it is the
GIVEN {
ASSUME(GetMoveCategory(MOVE_ROUND) == DAMAGE_CATEGORY_SPECIAL);
PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ability); Item(item); }
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(player, MOVE_ROUND); }
} SCENE {
@@ -218,7 +218,7 @@ SINGLE_BATTLE_TEST("Booster Energy increases special defense by 30% if it is the
GIVEN {
ASSUME(GetMoveCategory(MOVE_ROUND) == DAMAGE_CATEGORY_SPECIAL);
PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(100); SpDefense(110); Ability(ability); Item(item); }
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(opponent, MOVE_ROUND); }
} SCENE {
@@ -288,9 +288,9 @@ DOUBLE_BATTLE_TEST("Booster Energy activates on any terrain")
PLAYER(SPECIES_IRON_MOTH) { Speed(110); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
OPPONENT(SPECIES_TAPU_BULU) { Speed(100); Ability(ABILITY_GRASSY_SURGE); }
- OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_GRASSY_SURGE);
ABILITY_POPUP(playerLeft, ABILITY_QUARK_DRIVE);
@@ -305,7 +305,7 @@ DOUBLE_BATTLE_TEST("Booster Energy activates on air locked sun")
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_RAGING_BOLT) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
OPPONENT(SPECIES_PSYDUCK) { Ability(ABILITY_CLOUD_NINE); }
- OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); };
+ OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); }
} WHEN {
TURN { SWITCH(playerLeft, 2); }
} SCENE {
@@ -321,9 +321,9 @@ DOUBLE_BATTLE_TEST("Booster Energy will not activate on terrain if user has Prot
PLAYER(SPECIES_RAGING_BOLT) { Speed(110); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
OPPONENT(SPECIES_TAPU_BULU) { Speed(100); Ability(ABILITY_GRASSY_SURGE); }
- OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponentLeft, ABILITY_GRASSY_SURGE);
NOT ABILITY_POPUP(playerLeft, ABILITY_PROTOSYNTHESIS);
diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c
index 5c69655dc1..f073fe3a00 100644
--- a/test/battle/hold_effect/clear_amulet.c
+++ b/test/battle/hold_effect/clear_amulet.c
@@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate")
s16 turnTwoHit;
GIVEN {
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); };
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); };
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); }
@@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects")
ASSUME(GetMoveEffect(MOVE_SWEET_SCENT) == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN));
ASSUME(GetMoveEffect(MOVE_SAND_ATTACK) == EFFECT_ACCURACY_DOWN);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
@@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats")
ASSUME(MoveHasAdditionalEffect(MOVE_PSYCHIC, MOVE_EFFECT_SP_DEF_MINUS_1) == TRUE);
ASSUME(MoveHasAdditionalEffect(MOVE_MUD_SLAP, MOVE_EFFECT_ACC_MINUS_1) == TRUE);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c
index 4a5d354a10..0318d3991a 100644
--- a/test/battle/hold_effect/cure_status.c
+++ b/test/battle/hold_effect/cure_status.c
@@ -116,6 +116,25 @@ SINGLE_BATTLE_TEST("Chesto and Lum Berries cure sleep")
}
}
+SINGLE_BATTLE_TEST("Chesto Berry cures sleep when Yawn takes effect")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN);
+ ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHESTO_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_YAWN); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player);
+ STATUS_ICON(player, sleep: TRUE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ STATUS_ICON(player, sleep: FALSE);
+ }
+}
+
TO_DO_BATTLE_TEST("Chesto and Lum Berries don't trigger if the holder has Comatose")
SINGLE_BATTLE_TEST("Cheri and Lum Berries cure paralysis")
@@ -181,7 +200,7 @@ SINGLE_BATTLE_TEST("Berry hold effect cures status if a Pokémon enters a battle
PLAYER(SPECIES_WOBBUFFET) { Status1(status); Item(ITEM_LUM_BERRY); }
OPPONENT(SPECIES_WOBBUFFET) { Status1(status); Item(item); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
@@ -239,7 +258,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft
ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN);
ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS);
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_WOBBUFFET) {Item(item); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(item); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -297,20 +316,20 @@ DOUBLE_BATTLE_TEST("Lum Berry correctly cures all battlers if multiple fainted t
SINGLE_BATTLE_TEST("Lum Berry properly cures a battler affected by a non-volatiles status and confusion")
{
u32 status;
- PARAMETRIZE { status = STATUS1_BURN;}
- PARAMETRIZE { status = STATUS1_FREEZE;}
- PARAMETRIZE { status = STATUS1_PARALYSIS;}
- PARAMETRIZE { status = STATUS1_POISON;}
- PARAMETRIZE { status = STATUS1_TOXIC_POISON;}
- PARAMETRIZE { status = STATUS1_SLEEP;}
+ PARAMETRIZE { status = STATUS1_BURN; }
+ PARAMETRIZE { status = STATUS1_FREEZE; }
+ PARAMETRIZE { status = STATUS1_PARALYSIS; }
+ PARAMETRIZE { status = STATUS1_POISON; }
+ PARAMETRIZE { status = STATUS1_TOXIC_POISON; }
+ PARAMETRIZE { status = STATUS1_SLEEP; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE);
- PLAYER(SPECIES_WOBBUFFET) { Status1(status); Speed(1);};
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Speed(2);};
+ PLAYER(SPECIES_WOBBUFFET) { Status1(status); Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Speed(2); }
} WHEN {
- TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, 0));}
- TURN { MOVE(opponent, MOVE_SWITCHEROO);}
+ TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, 0)); }
+ TURN { MOVE(opponent, MOVE_SWITCHEROO); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Wobbuffet's Lum Berry normalized its status!");
diff --git a/test/battle/hold_effect/destiny_knot.c b/test/battle/hold_effect/destiny_knot.c
index 7c0fabff5d..566ded5735 100644
--- a/test/battle/hold_effect/destiny_knot.c
+++ b/test/battle/hold_effect/destiny_knot.c
@@ -9,10 +9,10 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is targeted")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
+ PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
- TURN { MOVE(player, MOVE_ATTRACT); }
+ TURN { MOVE(player, MOVE_ATTRACT); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
MESSAGE("Wobbuffet fell in love because of the Destiny Knot!");
@@ -24,10 +24,10 @@ SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is targeted")
SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is attacking")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Item(ITEM_DESTINY_KNOT);}
- OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM);}
+ PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Item(ITEM_DESTINY_KNOT); }
+ OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); }
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("The opposing Clefairy fell in love because of the Destiny Knot!");
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is attacking")
SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is already infatuated")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
+ PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
TURN { MOVE(opponent, MOVE_ATTRACT); MOVE(player, MOVE_ATTRACT, WITH_RNG(RNG_INFATUATION, FALSE)); }
@@ -68,11 +68,11 @@ SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is oblivious")
SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is already infatuated (cute charm)")
{
GIVEN {
- PLAYER(SPECIES_CLEFAIRY) { Gender(MON_MALE); Ability(ABILITY_CUTE_CHARM);}
+ PLAYER(SPECIES_CLEFAIRY) { Gender(MON_MALE); Ability(ABILITY_CUTE_CHARM); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); }
} WHEN {
- TURN { MOVE(opponent, MOVE_ATTRACT);}
- TURN { MOVE(opponent, MOVE_TACKLE);}
+ TURN { MOVE(opponent, MOVE_ATTRACT); }
+ TURN { MOVE(opponent, MOVE_TACKLE); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
MESSAGE("But it failed!");
diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c
index 836f3d0fd1..7e854055dd 100644
--- a/test/battle/hold_effect/eject_pack.c
+++ b/test/battle/hold_effect/eject_pack.c
@@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not activate if there are no Pokémon left t
PLAYER(SPECIES_WOBBUFFET) { HP(0); }
OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
NONE_OF {
@@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Emergency
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(opponent, 1); }
@@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Eject Pack will not trigger if the conditions are not met")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
- PLAYER(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); };
+ PLAYER(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }
PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); Item(ITEM_EJECT_PACK); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WYNAUT);
@@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not activate if mon is switched in due to Ej
GIVEN {
PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
diff --git a/test/battle/hold_effect/gems.c b/test/battle/hold_effect/gems.c
index b597beeab7..8455fe09da 100644
--- a/test/battle/hold_effect/gems.c
+++ b/test/battle/hold_effect/gems.c
@@ -9,7 +9,7 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Gem is consumed when it corresponds to the type of a move")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_EMBER); }
@@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Gem boost is only applied once")
s16 normalHit;
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
@@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Gem modifier is used for all hits of Multi Hit Moves")
s16 secondHit;
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
@@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Gem modifier is used for all hits of Multi Hit Moves")
SINGLE_BATTLE_TEST("Gem is consumed if the move type is changed")
{
GIVEN {
- PLAYER(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Item(ITEM_NORMAL_GEM); };
+ PLAYER(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Item(ITEM_NORMAL_GEM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
diff --git a/test/battle/hold_effect/iron_ball.c b/test/battle/hold_effect/iron_ball.c
index 90c370e8f3..48c87dbccb 100644
--- a/test/battle/hold_effect/iron_ball.c
+++ b/test/battle/hold_effect/iron_ball.c
@@ -13,9 +13,9 @@ SINGLE_BATTLE_TEST("Ground-type moves do neutral damage to non-grounded Flying t
GIVEN {
WITH_CONFIG(CONFIG_IRON_BALL, config);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_SKARMORY) { Item(ITEM_IRON_BALL); };
+ OPPONENT(SPECIES_SKARMORY) { Item(ITEM_IRON_BALL); }
} WHEN {
- TURN { MOVE(player, MOVE_EARTHQUAKE); };
+ TURN { MOVE(player, MOVE_EARTHQUAKE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player);
if (config >= GEN_5) {
diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c
index e7037db8d0..8e9e07d9ff 100644
--- a/test/battle/hold_effect/metronome.c
+++ b/test/battle/hold_effect/metronome.c
@@ -109,8 +109,8 @@ SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacki
{
u32 item;
- PARAMETRIZE {item = ITEM_NONE; }
- PARAMETRIZE {item = ITEM_METRONOME; }
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_METRONOME; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_SOLAR_BEAM) == EFFECT_SOLAR_BEAM);
PLAYER(SPECIES_WOBBUFFET) { Item(item); }
diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c
index 6618d41950..def6cdd429 100644
--- a/test/battle/hold_effect/mirror_herb.c
+++ b/test/battle/hold_effect/mirror_herb.c
@@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Mirror Herb copies the boost gained by an ability")
PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_INTREPID_SWORD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
diff --git a/test/battle/hold_effect/random_stat_up.c b/test/battle/hold_effect/random_stat_up.c
index ff6b03e035..53a11c6f9f 100644
--- a/test/battle/hold_effect/random_stat_up.c
+++ b/test/battle/hold_effect/random_stat_up.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Starf Berry randomly raises the holder's Attack, Defense, Sp
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STARF_BERRY); HP(100); MaxHP(400); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c
index 6b5e08c450..e020b43f59 100644
--- a/test/battle/hold_effect/red_card.c
+++ b/test/battle/hold_effect/red_card.c
@@ -485,7 +485,7 @@ SINGLE_BATTLE_TEST("Red Card prevents Emergency Exit activation when triggered")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_GOLISOPOD) { Item(ITEM_RED_CARD); Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); };
+ OPPONENT(SPECIES_GOLISOPOD) { Item(ITEM_RED_CARD); Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SUPER_FANG); MOVE(opponent, MOVE_CELEBRATE); }
diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c
index ef96ead7e4..2441e92449 100644
--- a/test/battle/hold_effect/restore_hp.c
+++ b/test/battle/hold_effect/restore_hp.c
@@ -63,3 +63,22 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing after a recoil mo
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
}
}
+
+SINGLE_BATTLE_TEST("Sitrus Berry restores HP immediately after Leech Seed damage")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED);
+ ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP);
+ PLAYER(SPECIES_WOBBUFFET) { MaxHP(80); HP(41); Item(ITEM_SITRUS_BERRY); }
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_LEECH_SEED); }
+ TURN { }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, player);
+ HP_BAR(player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ HP_BAR(player);
+ }
+}
diff --git a/test/battle/hold_effect/rocky_helmet.c b/test/battle/hold_effect/rocky_helmet.c
index bc52f44b87..f49d26c1eb 100644
--- a/test/battle/hold_effect/rocky_helmet.c
+++ b/test/battle/hold_effect/rocky_helmet.c
@@ -11,7 +11,7 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Rocky Helmet damages attacker even if damage is blocked by Disguise")
{
GIVEN {
- PLAYER(SPECIES_MIMIKYU) { Item(ITEM_ROCKY_HELMET); Ability(ABILITY_DISGUISE); };
+ PLAYER(SPECIES_MIMIKYU) { Item(ITEM_ROCKY_HELMET); Ability(ABILITY_DISGUISE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SHADOW_SNEAK); }
diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c
index ec90b251b3..a5cfca0769 100644
--- a/test/battle/hold_effect/safety_goggles.c
+++ b/test/battle/hold_effect/safety_goggles.c
@@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(player, MOVE_HAIL); }
} SCENE {
@@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(player, MOVE_SANDSTORM); }
} SCENE {
diff --git a/test/battle/hold_effect/scope_lens.c b/test/battle/hold_effect/scope_lens.c
index 2a073900a7..f74a06a1c5 100644
--- a/test/battle/hold_effect/scope_lens.c
+++ b/test/battle/hold_effect/scope_lens.c
@@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by 1 stage")
WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig);
ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS);
ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
diff --git a/test/battle/hold_effect/shed_shell.c b/test/battle/hold_effect/shed_shell.c
index 93c3fb0e53..f8f6277ff2 100644
--- a/test/battle/hold_effect/shed_shell.c
+++ b/test/battle/hold_effect/shed_shell.c
@@ -62,6 +62,6 @@ SINGLE_BATTLE_TEST("Shed Shell does not allow Teleport when trapped")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent);
MESSAGE("Wobbuffet used Teleport!");
- MESSAGE("But it failed!");
+ MESSAGE("But it failed!");
}
}
diff --git a/test/battle/hold_effect/shell_bell.c b/test/battle/hold_effect/shell_bell.c
index 82f1b0b184..7473f6db59 100644
--- a/test/battle/hold_effect/shell_bell.c
+++ b/test/battle/hold_effect/shell_bell.c
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Shell Bell recovers no HP if the move did no damage")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_SHELL_BELL); }
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_FALSE_SWIPE); }
} SCENE {
@@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP of damage dealt")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); }
- OPPONENT(SPECIES_WOBBUFFET) { Level(16); };
+ OPPONENT(SPECIES_WOBBUFFET) { Level(16); }
} WHEN {
TURN { MOVE(player, MOVE_SEISMIC_TOSS); }
} SCENE {
@@ -135,11 +135,11 @@ SINGLE_BATTLE_TEST("Shell Bell doesn't restore HP for damage dealt by a foreseen
GIVEN {
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); }
- OPPONENT(SPECIES_WOBBUFFET) { Level(16); };
+ OPPONENT(SPECIES_WOBBUFFET) { Level(16); }
} WHEN {
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
MESSAGE("The opposing Wobbuffet took the Future Sight attack!");
@@ -210,9 +210,9 @@ DOUBLE_BATTLE_TEST("Shell Bell heals accumulated damage for spread moves")
GIVEN {
ASSUME(GetMoveTarget(MOVE_DISCHARGE) == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_ARIADOS) { MaxHP(maxHp); HP(initHp); Item(ITEM_SHELL_BELL); }
- PLAYER(SPECIES_WOBBUFFET) {}
- OPPONENT(SPECIES_GYARADOS) {}
- OPPONENT(SPECIES_CHANSEY) {}
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_GYARADOS);
+ OPPONENT(SPECIES_CHANSEY);
} WHEN {
TURN {
MOVE(playerLeft, MOVE_DISCHARGE);
@@ -275,7 +275,7 @@ SINGLE_BATTLE_TEST("Shell Bell recovers only 1 damage if the move only did 1 dam
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_SHELL_BELL); }
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_DRAGON_RAGE); }
} SCENE {
diff --git a/test/battle/hold_effect/sticky_barb.c b/test/battle/hold_effect/sticky_barb.c
index 59c1e12270..b13f2a5987 100644
--- a/test/battle/hold_effect/sticky_barb.c
+++ b/test/battle/hold_effect/sticky_barb.c
@@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn")
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
HP_BAR(player, captureDamage: &damage);
} THEN {
diff --git a/test/battle/hold_effect/terrain_seed.c b/test/battle/hold_effect/terrain_seed.c
index b54dd54f5b..1ff1c252bf 100644
--- a/test/battle/hold_effect/terrain_seed.c
+++ b/test/battle/hold_effect/terrain_seed.c
@@ -155,7 +155,7 @@ SINGLE_BATTLE_TEST("Seeds get consumed in Terrain even if holder is not affected
PLAYER(SPECIES_PIDGEY) { Item(item); }
OPPONENT(species) { Ability(ability); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ability);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
@@ -170,7 +170,7 @@ SINGLE_BATTLE_TEST("Electric Seed is consumed on Electric Terrain before other a
PLAYER(SPECIES_TAPU_BULU) { Ability(ABILITY_GRASSY_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(5); }
OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(10); }
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/hold_effect/utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c
index 67a3be4c7a..83bb0539f4 100644
--- a/test/battle/hold_effect/utility_umbrella.c
+++ b/test/battle/hold_effect/utility_umbrella.c
@@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Sun damage modifiers", s16 damage)
PARAMETRIZE { setupMove = MOVE_SUNNY_DAY; attackingMove = MOVE_WATER_GUN; heldItem = ITEM_NONE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); }
} WHEN {
TURN { MOVE(opponent, setupMove); }
TURN { MOVE(player, attackingMove); }
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Rain damage modifiers", s16 damage)
PARAMETRIZE { setupMove = MOVE_RAIN_DANCE; attackingMove = MOVE_WATER_GUN; heldItem = ITEM_NONE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); }
} WHEN {
TURN { MOVE(opponent, setupMove); }
TURN { MOVE(player, attackingMove); }
diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c
index 8423c29fdb..fe4a34ad97 100644
--- a/test/battle/hold_effect/white_herb.c
+++ b/test/battle/hold_effect/white_herb.c
@@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); }
OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_INTIMIDATE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
@@ -50,7 +50,7 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi
PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
@@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o
GIVEN {
ASSUME(GetMoveEffect(MOVE_KNOCK_OFF) == EFFECT_KNOCK_OFF);
ASSUME(GetMoveEffect(MOVE_THIEF) == EFFECT_STEAL_ITEM);
- PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); }
+ PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, move); }
@@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o
SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it")
{
GIVEN {
- PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); }
+ PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); }
OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
@@ -196,7 +196,7 @@ SINGLE_BATTLE_TEST("White Herb has correct interactions with Intimidate triggere
PLAYER(species) { Ability(ability); Item(ITEM_WHITE_HERB); }
OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_INTIMIDATE);
ABILITY_POPUP(player, ability);
diff --git a/test/battle/inverse_battle.c b/test/battle/inverse_battle.c
new file mode 100644
index 0000000000..afa1ff23b0
--- /dev/null
+++ b/test/battle/inverse_battle.c
@@ -0,0 +1,124 @@
+#include "global.h"
+#include "test/battle.h"
+
+static bool32 IsSpeciesMonotypeOf(u32 species, enum Type type)
+{
+ return GetSpeciesType(species, 0) == type && GetSpeciesType(species, 1) == type;
+}
+
+ASSUMPTIONS
+{
+ // Pokemon Types
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_EEVEE, TYPE_NORMAL));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_MACHAMP, TYPE_FIGHTING));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_TORNADUS, TYPE_FLYING));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_ARBOK, TYPE_POISON));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_DUGTRIO, TYPE_GROUND));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_SUDOWOODO,TYPE_ROCK));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_PINSIR, TYPE_BUG));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_DUSKULL, TYPE_GHOST));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_REGISTEEL,TYPE_STEEL));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_FLAREON, TYPE_FIRE));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_VAPOREON, TYPE_WATER));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_LEAFEON, TYPE_GRASS));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_JOLTEON, TYPE_ELECTRIC));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_ESPEON, TYPE_PSYCHIC));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_GLACEON, TYPE_ICE));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_DRUDDIGON,TYPE_DRAGON));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_UMBREON, TYPE_DARK));
+ ASSUME(IsSpeciesMonotypeOf(SPECIES_SYLVEON, TYPE_FAIRY));
+
+ // Move types
+ ASSUME(GetMoveType(MOVE_TACKLE) == TYPE_NORMAL);
+ ASSUME(GetMoveType(MOVE_KARATE_CHOP) == TYPE_FIGHTING);
+ ASSUME(GetMoveType(MOVE_GUST) == TYPE_FLYING);
+ ASSUME(GetMoveType(MOVE_POISON_STING) == TYPE_POISON);
+ ASSUME(GetMoveType(MOVE_MUD_SLAP) == TYPE_GROUND);
+ ASSUME(GetMoveType(MOVE_ROCK_THROW) == TYPE_ROCK);
+ ASSUME(GetMoveType(MOVE_BUG_BITE) == TYPE_BUG);
+ ASSUME(GetMoveType(MOVE_SHADOW_BALL) == TYPE_GHOST);
+ ASSUME(GetMoveType(MOVE_METAL_CLAW) == TYPE_STEEL);
+ ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
+ ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER);
+ ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS);
+ ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
+ ASSUME(GetMoveType(MOVE_CONFUSION) == TYPE_PSYCHIC);
+ ASSUME(GetMoveType(MOVE_ICE_BEAM) == TYPE_ICE);
+ ASSUME(GetMoveType(MOVE_DRAGON_BREATH) == TYPE_DRAGON);
+ ASSUME(GetMoveType(MOVE_BITE) == TYPE_DARK);
+ ASSUME(GetMoveType(MOVE_FAIRY_WIND) == TYPE_FAIRY);
+}
+
+SINGLE_BATTLE_TEST("Inverse battle reverses type matchups")
+{
+ u32 species = SPECIES_NONE, move = MOVE_NONE;
+
+ static const u16 monotypeMons[] = {
+ SPECIES_EEVEE,
+ SPECIES_MACHAMP,
+ SPECIES_TORNADUS,
+ SPECIES_ARBOK,
+ SPECIES_DUGTRIO,
+ SPECIES_SUDOWOODO,
+ SPECIES_PINSIR,
+ SPECIES_DUSKULL,
+ SPECIES_REGISTEEL,
+ SPECIES_FLAREON,
+ SPECIES_VAPOREON,
+ SPECIES_LEAFEON,
+ SPECIES_JOLTEON,
+ SPECIES_ESPEON,
+ SPECIES_GLACEON,
+ SPECIES_DRUDDIGON,
+ SPECIES_UMBREON,
+ SPECIES_SYLVEON,
+ };
+
+ static const u16 typeMoves[] = {
+ MOVE_TACKLE,
+ MOVE_KARATE_CHOP,
+ MOVE_GUST,
+ MOVE_POISON_STING,
+ MOVE_MUD_SLAP,
+ MOVE_ROCK_THROW,
+ MOVE_BUG_BITE,
+ MOVE_SHADOW_BALL,
+ MOVE_METAL_CLAW,
+ MOVE_EMBER,
+ MOVE_WATER_GUN,
+ MOVE_VINE_WHIP,
+ MOVE_THUNDER_SHOCK,
+ MOVE_CONFUSION,
+ MOVE_ICE_BEAM,
+ MOVE_DRAGON_BREATH,
+ MOVE_BITE,
+ MOVE_FAIRY_WIND,
+ };
+
+ for (u32 i = 0; i < ARRAY_COUNT(monotypeMons); i++)
+ {
+ for (u32 j = 0; j < ARRAY_COUNT(typeMoves); j++)
+ {
+ PARAMETRIZE { species = monotypeMons[i]; move = typeMoves[j]; }
+ }
+ }
+
+ GIVEN {
+ FLAG_SET(B_FLAG_INVERSE_BATTLE);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(species);
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_WORRY_SEED); }
+ TURN { MOVE(player, move); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent);
+ if (gTypeEffectivenessTable[GetMoveType(move)][GetSpeciesType(species, 0)] == Q_4_12(2))
+ MESSAGE("It's not very effective…");
+ if (gTypeEffectivenessTable[GetMoveType(move)][GetSpeciesType(species, 0)] == Q_4_12(0.5))
+ MESSAGE("It's super effective!");
+ }
+}
+
diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c
index 79490b48dc..915196691b 100644
--- a/test/battle/item_effect/cure_status.c
+++ b/test/battle/item_effect/cure_status.c
@@ -36,9 +36,9 @@ DOUBLE_BATTLE_TEST("Antidote heals a battler from being poisoned (doubles)")
u32 index;
struct BattlePokemon *user = NULL;
struct BattlePokemon *target = NULL;
- PARAMETRIZE { index = 0; user = playerRight; target = playerLeft;}
- PARAMETRIZE { index = 1; user = playerLeft; target = playerRight;}
- PARAMETRIZE { index = 0; user = playerLeft; target = playerLeft;}
+ PARAMETRIZE { index = 0; user = playerRight; target = playerLeft; }
+ PARAMETRIZE { index = 1; user = playerLeft; target = playerRight; }
+ PARAMETRIZE { index = 0; user = playerLeft; target = playerLeft; }
PARAMETRIZE { index = 1; user = playerRight; target = playerRight; }
GIVEN {
@@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Antidote resets Toxic Counter")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_TOXIC); }
- TURN { ; }
+ TURN {}
TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Toxic!");
@@ -177,10 +177,10 @@ DOUBLE_BATTLE_TEST("Full Heal heals a battler from any primary status (doubles)"
struct BattlePokemon *target = NULL;
for (u32 j = 0; j < 7; j++)
{
- PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0;}
- PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1;}
- PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0;}
- PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerRight; index = 1;}
+ PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerRight; index = 1; }
}
GIVEN {
ASSUME(gItemsInfo[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS);
@@ -237,10 +237,10 @@ DOUBLE_BATTLE_TEST("Heal Powder heals a battler from any primary status (doubles
struct BattlePokemon *target = NULL;
for (u32 j = 0; j < 7; j++)
{
- PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0;}
- PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1;}
- PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0;}
- PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerRight; index = 1;}
+ PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0; }
+ PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerRight; index = 1; }
}
GIVEN {
ASSUME(gItemsInfo[ITEM_HEAL_POWDER].battleUsage == EFFECT_ITEM_CURE_STATUS);
@@ -387,7 +387,7 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status")
} WHEN {
TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); }
} SCENE {
- MESSAGE("Wobbuffet had its status healed!");;
+ MESSAGE("Wobbuffet had its status healed!");
} THEN {
EXPECT_EQ(player->status1, STATUS1_NONE);
}
diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c
index d85f11b33d..bb75625371 100644
--- a/test/battle/item_effect/heal_and_cure_status.c
+++ b/test/battle/item_effect/heal_and_cure_status.c
@@ -114,9 +114,9 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion")
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN{ MOVE(opponent, MOVE_CONFUSE_RAY); }
- TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); }
- TURN{ MOVE(player, MOVE_SCRATCH); }
+ TURN { MOVE(opponent, MOVE_CONFUSE_RAY); }
+ TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); }
+ TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
MESSAGE("Wobbuffet had its HP restored.");
NONE_OF { MESSAGE("Wobbuffet is confused!"); }
@@ -132,7 +132,7 @@ SINGLE_BATTLE_TEST("Full Restore resets Toxic Counter")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_TOXIC); }
- TURN { ; }
+ TURN {}
TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Toxic!");
diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c
index 227a638c6a..37b8501c4b 100644
--- a/test/battle/item_effect/increase_stat.c
+++ b/test/battle/item_effect/increase_stat.c
@@ -268,7 +268,7 @@ SINGLE_BATTLE_TEST("Using X items in battle raises Friendship", s16 damage)
PARAMETRIZE { startingFriendship = 0; }
PARAMETRIZE { startingFriendship = X_ITEM_MAX_FRIENDSHIP; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); };
+ PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); }
// Set met location to currentMapSec + 1 to avoid getting the friendship boost
// from being met in the current map section
SetMonData(&PLAYER_PARTY[0], MON_DATA_MET_LOCATION, &metLocation);
@@ -291,7 +291,7 @@ SINGLE_BATTLE_TEST("Using X items in battle where Pokemon was met raises Friends
PARAMETRIZE { startingFriendship = 0; }
PARAMETRIZE { startingFriendship = X_ITEM_MAX_FRIENDSHIP; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); };
+ PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); }
// Set met location to currentMapSec to get the friendship boost
SetMonData(&PLAYER_PARTY[0], MON_DATA_MET_LOCATION, &metLocation);
OPPONENT(SPECIES_WOBBUFFET);
diff --git a/test/battle/item_effect/revive.c b/test/battle/item_effect/revive.c
index df866edf0e..f12c208fb0 100644
--- a/test/battle/item_effect/revive.c
+++ b/test/battle/item_effect/revive.c
@@ -130,8 +130,8 @@ DOUBLE_BATTLE_TEST("Revive does reset abilities")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(opponentRight, MOVE_WORRY_SEED, target: playerLeft); MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); }
- TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 0); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SPORE, target: playerLeft);}
+ TURN { MOVE(opponentRight, MOVE_WORRY_SEED, target: playerLeft); MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); }
+ TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 0); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SPORE, target: playerLeft); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
@@ -184,7 +184,7 @@ DOUBLE_BATTLE_TEST("Revive does not grant a mon its pre-death types")
OPPONENT(SPECIES_POOCHYENA);
} WHEN {
TURN { MOVE(playerRight, MOVE_REFLECT_TYPE, target: opponentRight); MOVE(opponentLeft, MOVE_PSYSHOCK, target: playerRight); MOVE(opponentRight, MOVE_SCRATCH, target: playerRight); }
- TURN { USE_ITEM(playerLeft, ITEM_MAX_REVIVE, partyIndex: 1); SKIP_TURN(playerRight); MOVE(opponentLeft, MOVE_PSYCHIC, target: playerRight);}
+ TURN { USE_ITEM(playerLeft, ITEM_MAX_REVIVE, partyIndex: 1); SKIP_TURN(playerRight); MOVE(opponentLeft, MOVE_PSYCHIC, target: playerRight); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, playerRight);
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYSHOCK, opponentLeft);
@@ -203,12 +203,12 @@ DOUBLE_BATTLE_TEST("Revive force revived pokemon to replace absent battler immed
GIVEN {
PLAYER(SPECIES_WYNAUT) { HP(1); }
- PLAYER(SPECIES_WOBBUFFET) { };
- PLAYER(SPECIES_ARBOK) { Ability(ability); HP(0) ;} ;
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_ARBOK) { Ability(ability); HP(0); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft);}
+ TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); }
TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 2); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SCRATCH, target: playerRight); }
} SCENE {
if (ability == ABILITY_INTIMIDATE)
diff --git a/test/battle/move_animations/all_anims.c b/test/battle/move_animations/all_anims.c
index c30f1c3a13..d77cb5ec4c 100644
--- a/test/battle/move_animations/all_anims.c
+++ b/test/battle/move_animations/all_anims.c
@@ -382,11 +382,11 @@ static void WhenSingles(u32 move, struct BattlePokemon *attacker, struct BattleP
}
else if (gMovesInfo[move].effect == EFFECT_ROLLOUT)
{
- TURN {MOVE(attacker, move);};
- TURN {MOVE(attacker, move);};
- TURN {MOVE(attacker, move);};
- TURN {MOVE(attacker, move);};
- TURN {MOVE(attacker, MOVE_HELPING_HAND);};
+ TURN { MOVE(attacker, move); }
+ TURN { MOVE(attacker, move); }
+ TURN { MOVE(attacker, move); }
+ TURN { MOVE(attacker, move); }
+ TURN { MOVE(attacker, MOVE_HELPING_HAND); }
}
}
@@ -601,11 +601,11 @@ static void DoublesWhen(u32 move, struct BattlePokemon *attacker, struct BattleP
}
else if (gMovesInfo[move].effect == EFFECT_ROLLOUT)
{
- TURN {MOVE(attacker, move, target: target);};
- TURN {MOVE(attacker, move, target: target);};
- TURN {MOVE(attacker, move, target: target);};
- TURN {MOVE(attacker, move, target: target);};
- TURN {MOVE(attacker, MOVE_LAST_RESORT, target: attacker);};
+ TURN { MOVE(attacker, move, target: target); }
+ TURN { MOVE(attacker, move, target: target); }
+ TURN { MOVE(attacker, move, target: target); }
+ TURN { MOVE(attacker, move, target: target); }
+ TURN { MOVE(attacker, MOVE_LAST_RESORT, target: attacker); }
}
}
@@ -647,7 +647,7 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to op
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -695,7 +695,7 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -747,7 +747,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -818,7 +818,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -890,7 +890,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -962,7 +962,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -1034,7 +1034,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -1106,7 +1106,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -1178,7 +1178,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -1250,7 +1250,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
@@ -1556,7 +1556,7 @@ SINGLE_BATTLE_TEST("Move Animations occur before their stat change animations -
for (k = 0; k < variationsNumber; k++) {
ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k);
tempFriendship = ParametrizeFriendship(j, k);
- PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;}
+ PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; }
}
}
GIVEN {
diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c
index 9b0117afe1..af4e1810fc 100644
--- a/test/battle/move_effect/ally_switch.c
+++ b/test/battle/move_effect/ally_switch.c
@@ -358,7 +358,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler")
} WHEN {
TURN { MOVE(opponentLeft, MOVE_LEECH_SEED, target: playerLeft); }
TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); }
- TURN { ; }
+ TURN {}
} SCENE {
// turn 1
MESSAGE("The opposing Bulbasaur used Leech Seed!");
@@ -389,7 +389,7 @@ DOUBLE_BATTLE_TEST("Ally Switch updates attract battler")
} WHEN {
TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); }
TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); }
- TURN { ; }
+ TURN {}
} SCENE {
// turn 1
MESSAGE("Wobbuffet used Tackle!");
diff --git a/test/battle/move_effect/aura_wheel.c b/test/battle/move_effect/aura_wheel.c
index 3e26176eee..55af998c63 100644
--- a/test/battle/move_effect/aura_wheel.c
+++ b/test/battle/move_effect/aura_wheel.c
@@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Aura Wheel can be turned into a Normal-type move after Morpe
OPPONENT(SPECIES_DUSKULL);
} WHEN {
if (hangryMode)
- TURN { }
+ TURN {}
TURN { MOVE(opponent, MOVE_ENTRAINMENT); }
TURN { MOVE(player, MOVE_AURA_WHEEL); SWITCH(opponent, 1); }
} SCENE {
diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c
index 6e94a908e5..a837bda712 100644
--- a/test/battle/move_effect/beak_blast.c
+++ b/test/battle/move_effect/beak_blast.c
@@ -141,6 +141,71 @@ SINGLE_BATTLE_TEST("Beak Blast doesn't burn after being used")
}
}
+DOUBLE_BATTLE_TEST("Beak Blast doesn't burn if the target is protected")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_SPIKY_SHIELD; }
+ PARAMETRIZE { move = MOVE_BANEFUL_BUNKER; }
+ PARAMETRIZE { move = MOVE_BURNING_BULWARK; }
+ PARAMETRIZE { move = MOVE_SILK_TRAP; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(move) == EFFECT_PROTECT);
+ ASSUME(GetMoveEffect(MOVE_INSTRUCT) == EFFECT_INSTRUCT);
+ ASSUME(GetMovePriority(MOVE_BEAK_BLAST) > GetMovePriority(MOVE_TRICK_ROOM));
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ PLAYER(SPECIES_WYNAUT) { Speed(2); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponentLeft, move); }
+ TURN { MOVE(opponentRight, MOVE_INSTRUCT, target: opponentLeft, WITH_RNG(RNG_PROTECT_FAIL, 0));
+ MOVE(opponentLeft, MOVE_BEAK_BLAST, target: playerLeft);
+ MOVE(playerRight, MOVE_TRICK_ROOM);
+ MOVE(playerLeft, MOVE_POUND, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, playerLeft);
+ if (move == MOVE_SPIKY_SHIELD) {
+ HP_BAR(playerLeft);
+ } else if (move == MOVE_BANEFUL_BUNKER) {
+ STATUS_ICON(playerLeft, STATUS1_POISON);
+ } else if (move == MOVE_BURNING_BULWARK) {
+ STATUS_ICON(playerLeft, STATUS1_BURN);
+ } else if (move == MOVE_SILK_TRAP) {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
+ }
+ NOT STATUS_ICON(playerLeft, STATUS1_BURN);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Beak Blast doesn't burn if the target is protected by Quick Guard")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_QUICK_GUARD) == EFFECT_PROTECT);
+ ASSUME(GetMoveProtectMethod(MOVE_QUICK_GUARD) == PROTECT_QUICK_GUARD);
+ ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) > 0);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ PLAYER(SPECIES_WYNAUT) { Speed(2); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(10); }
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_BEAK_BLAST, target: playerLeft);
+ MOVE(opponentRight, MOVE_QUICK_GUARD);
+ MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentRight);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft);
+ STATUS_ICON(playerLeft, STATUS1_BURN);
+ }
+ }
+}
+
TO_DO_BATTLE_TEST("Beak Blast's charging message is shown regardless if it would've missed");
TO_DO_BATTLE_TEST("Beak Blast fails if it's forced by Encore after choosing a different move");
TO_DO_BATTLE_TEST("Bulletproof is immune to Beak Blast but not to the burn it causes");
diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c
index 38a41ae2c7..01bb244002 100644
--- a/test/battle/move_effect/belch.c
+++ b/test/battle/move_effect/belch.c
@@ -19,7 +19,7 @@ AI_SINGLE_BATTLE_TEST("AI: Belch has nonzero score after eating a berry")
OPPONENT(SPECIES_PIKACHU) { Level(15); Item(ITEM_SHUCA_BERRY); Moves(MOVE_BELCH, MOVE_SCRATCH); }
} WHEN {
TURN { MOVE(player, MOVE_MUD_SHOT); EXPECT_MOVE(opponent, MOVE_SCRATCH); }
- TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_BELCH);}
+ TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_BELCH); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, opponent);
}
diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c
index 194ee5b9d0..8b2cdf1d18 100644
--- a/test/battle/move_effect/belly_drum.c
+++ b/test/battle/move_effect/belly_drum.c
@@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Belly Drum maximizes the user's Attack stat", s16 damage)
SINGLE_BATTLE_TEST("Belly Drum fails if user's current HP is half or less than half its maximum")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50);}
+ PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BELLY_DRUM); }
diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c
index 48b77d8bdc..610230de11 100644
--- a/test/battle/move_effect/charge.c
+++ b/test/battle/move_effect/charge.c
@@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Charge's effect does not stack with Electromorphosis or Wind
GIVEN {
ASSUME(IsWindMove(MOVE_AIR_CUTTER));
- PLAYER(species) { Ability(ability); }
+ PLAYER(species) { Ability(ability); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_THUNDERBOLT); }
diff --git a/test/battle/move_effect/clangorous_soul.c b/test/battle/move_effect/clangorous_soul.c
index a1a7ffa42a..b2914c18aa 100644
--- a/test/battle/move_effect/clangorous_soul.c
+++ b/test/battle/move_effect/clangorous_soul.c
@@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3")
{
s16 dmg;
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); }
@@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3")
SINGLE_BATTLE_TEST("Clangorous Soul raises the user's Atk, Def, Sp. Atk. Sp. Def and Speed by 1 stage")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); }
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul raises the user's Atk, Def, Sp. Atk. Sp. Def
SINGLE_BATTLE_TEST("Clangorous Soul fails if the user's HP is less or equal than 1/3")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(300); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(300); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); }
diff --git a/test/battle/move_effect/coaching.c b/test/battle/move_effect/coaching.c
index 642727de51..76030f1811 100644
--- a/test/battle/move_effect/coaching.c
+++ b/test/battle/move_effect/coaching.c
@@ -99,7 +99,7 @@ DOUBLE_BATTLE_TEST("Coaching fails if there's no ally")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_WYNAUT) { HP(1); };
+ PLAYER(SPECIES_WYNAUT) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
@@ -132,7 +132,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Coaching")
OPPONENT(SPECIES_WOBBUFFET) { Moves(move); }
} WHEN {
if (move == MOVE_HEADBUTT)
- TURN { EXPECT_MOVE(opponentLeft, MOVE_COACHING); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_COACHING); }
else
TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_COACHING); }
}
diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c
index 84b7c1c70b..2d3678eaca 100644
--- a/test/battle/move_effect/corrosive_gas.c
+++ b/test/battle/move_effect/corrosive_gas.c
@@ -10,12 +10,12 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar
{
u16 item;
- PARAMETRIZE {item = ITEM_NONE; }
- PARAMETRIZE {item = ITEM_POTION; }
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_POTION; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(item); }
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); }
} SCENE {
@@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_MUK) {Item(ITEM_POISON_BARB); Ability(ABILITY_STICKY_HOLD); }
+ OPPONENT(SPECIES_MUK) { Item(ITEM_POISON_BARB); Ability(ABILITY_STICKY_HOLD); }
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); }
} SCENE {
@@ -54,8 +54,8 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_RECYCLE) == EFFECT_RECYCLE);
- PLAYER(SPECIES_WOBBUFFET) {Speed(15); }
- OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_ORAN_BERRY); Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(15); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); Speed(10); }
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); MOVE(opponent, MOVE_RECYCLE); }
} SCENE {
@@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on
for (j = 0; j < 2; j++) {
for (k = 0; k < 2; k++) {
for (l = 0; l < 2; l++) {
- PARAMETRIZE {itemOpponentLeft = (j & 1) ? ITEM_ORAN_BERRY : ITEM_NONE;
+ PARAMETRIZE { itemOpponentLeft = (j & 1) ? ITEM_ORAN_BERRY : ITEM_NONE;
itemOpponentRight = (k & 1) ? ITEM_CHESTO_BERRY : ITEM_NONE;
itemPlayerLeft = (l & 1) ? ITEM_CHERI_BERRY : ITEM_NONE; }
}
@@ -86,10 +86,10 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on
}
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Item(itemPlayerLeft);}
- PLAYER(SPECIES_WYNAUT) {Item(ITEM_SITRUS_BERRY);}
- OPPONENT(SPECIES_ABRA) {Item(itemOpponentLeft);}
- OPPONENT(SPECIES_KADABRA) {Item(itemOpponentRight);}
+ PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayerLeft); }
+ PLAYER(SPECIES_WYNAUT) { Item(ITEM_SITRUS_BERRY); }
+ OPPONENT(SPECIES_ABRA) { Item(itemOpponentLeft); }
+ OPPONENT(SPECIES_KADABRA) { Item(itemOpponentRight); }
} WHEN {
TURN { MOVE(playerRight, MOVE_CORROSIVE_GAS); }
} SCENE {
diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c
index 7fc9fb4b9f..7001d61451 100644
--- a/test/battle/move_effect/counter.c
+++ b/test/battle/move_effect/counter.c
@@ -134,7 +134,7 @@ DOUBLE_BATTLE_TEST("Counter fails if mon that damaged Counter user is no longer
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN {
diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c
index 5ebe4c70f6..7b2946f40a 100644
--- a/test/battle/move_effect/court_change.c
+++ b/test/battle/move_effect/court_change.c
@@ -93,10 +93,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror
TURN { MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_REFLECT); }
TURN { MOVE(opponentLeft, MOVE_LIGHT_SCREEN); MOVE(opponentRight, MOVE_TAILWIND); }
TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
MESSAGE("Wynaut used Snowscape!");
MESSAGE("The opposing Wobbuffet used Mist!");
@@ -132,10 +132,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur
TURN { MOVE(playerLeft, MOVE_AURORA_VEIL); MOVE(playerRight, MOVE_REFLECT); }
TURN { MOVE(playerLeft, MOVE_LIGHT_SCREEN); MOVE(playerRight, MOVE_TAILWIND); }
TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); }
- TURN { }
- TURN { }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Mist!");
MESSAGE("Wobbuffet used Safeguard!");
diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c
index f2fa558e13..4ff5eb8b0e 100644
--- a/test/battle/move_effect/defog.c
+++ b/test/battle/move_effect/defog.c
@@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Ability(ABILITY_SIMPLE);};
+ OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_SIMPLE); }
} WHEN {
TURN { MOVE(player, MOVE_DEFOG); }
TURN { MOVE(player, MOVE_DEFOG); }
@@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change behind
GIVEN {
WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_4);
PLAYER(SPECIES_WOBBUFFET) { Speed(4); }
- OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ABILITY_SIMPLE);}
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ABILITY_SIMPLE); }
} WHEN {
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); }
TURN { MOVE(player, MOVE_DEFOG); }
diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c
index ff532fa0d7..3be2384003 100644
--- a/test/battle/move_effect/destiny_bond.c
+++ b/test/battle/move_effect/destiny_bond.c
@@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Destiny Bond does not fail if used after failing (Gen7+)")
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Speed(50); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); }
diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c
index 3484dac6a0..b8db08bb84 100644
--- a/test/battle/move_effect/doodle.c
+++ b/test/battle/move_effect/doodle.c
@@ -14,7 +14,7 @@ DOUBLE_BATTLE_TEST("Doodle gives the target's ability to user and ally")
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft);
MESSAGE("Wynaut copied the opposing Torchic's Ability!");
@@ -33,7 +33,7 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability")
OPPONENT(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
} SCENE {
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft);
@@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if user has a banned Ability")
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
} SCENE {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft);
MESSAGE("But it failed!");
@@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if partner has a banned Ability")
OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
+ TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); }
} SCENE {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft);
MESSAGE("But it failed!");
diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c
index 01458bdc11..e7b24f3495 100644
--- a/test/battle/move_effect/dragon_cheer.c
+++ b/test/battle/move_effect/dragon_cheer.c
@@ -121,7 +121,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Dragon Cheer")
OPPONENT(species) { Moves(MOVE_DRAGON_CHEER, MOVE_POUND); }
} WHEN {
if (species == SPECIES_DRATINI)
- TURN { EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); }
else
TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); }
}
diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c
index 97694909fe..73df37e654 100644
--- a/test/battle/move_effect/dragon_darts.c
+++ b/test/battle/move_effect/dragon_darts.c
@@ -106,8 +106,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and th
ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_LANTURN) { Ability(abilityLeft); };
- OPPONENT(SPECIES_LANTURN) { Ability(abilityRight); };
+ OPPONENT(SPECIES_LANTURN) { Ability(abilityLeft); }
+ OPPONENT(SPECIES_LANTURN) { Ability(abilityRight); }
} WHEN {
TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); }
} SCENE {
@@ -132,8 +132,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and th
ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityLeft); };
- OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityRight); };
+ OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityLeft); }
+ OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityRight); }
} WHEN {
TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); }
} SCENE {
@@ -222,8 +222,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(itemLeft); };
- OPPONENT(SPECIES_WOBBUFFET) { Item(itemRight); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(itemLeft); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(itemRight); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget, hit: FALSE); }
} SCENE {
@@ -240,7 +240,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if one strike misses")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft, hit: FALSE); }
diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c
index 183a513b79..d65064c923 100644
--- a/test/battle/move_effect/dream_eater.c
+++ b/test/battle/move_effect/dream_eater.c
@@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); }
- TURN { }
+ TURN {}
TURN { MOVE(opponent, MOVE_DREAM_EATER); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Dream Eater!");
@@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen
{
s16 damage;
s16 healed;
- KNOWN_FAILING;
+ KNOWN_FAILING; // Dream Eater can hit and drain from a Substitute, but not bypass it.
GIVEN {
ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN);
ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE);
@@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); }
- TURN { }
+ TURN {}
TURN { MOVE(opponent, MOVE_DREAM_EATER); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, opponent);
diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c
index 41c456d9ac..ef577fef61 100644
--- a/test/battle/move_effect/embargo.c
+++ b/test/battle/move_effect/embargo.c
@@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held ite
GIVEN {
ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FOCUS_SASH); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FOCUS_SASH); }
} WHEN {
TURN { MOVE(player, MOVE_EMBARGO); }
TURN { MOVE(player, MOVE_FISSURE); }
@@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction")
// KNOWN_FAILING; // Pokémon are currently not obtaining Friendship for using items in battle.
// GIVEN {
// ASSUME(gItemsInfo[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT);
-// PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); };
+// PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); }
// OPPONENT(SPECIES_WOBBUFFET);
// } WHEN {
// TURN { USE_ITEM(player, ITEM_X_ACCURACY); }
@@ -149,7 +149,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block a held item's form-changing effect, bu
PARAMETRIZE { heldItem = ITEM_MEADOW_PLATE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_ARCEUS_GRASS) { Item(heldItem); };
+ OPPONENT(SPECIES_ARCEUS_GRASS) { Item(heldItem); }
ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].holdEffect == HOLD_EFFECT_PLATE);
ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].holdEffectParam == 20);
ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].secondaryId == TYPE_GRASS);
@@ -169,7 +169,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail")
PARAMETRIZE { heldItem = ITEM_LIGHT_BALL; moveId = MOVE_FLING; }
PARAMETRIZE { heldItem = ITEM_CHERI_BERRY; moveId = MOVE_NATURAL_GIFT; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(heldItem); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(heldItem); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); }
@@ -190,7 +190,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail")
SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target from activating")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_EMBARGO); }
@@ -211,7 +211,7 @@ SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIGHT_BALL); };
+ PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIGHT_BALL); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); }
@@ -236,8 +236,8 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug
u32 hp = 10;
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); }
TURN { MOVE(player, MOVE_PLUCK); }
@@ -260,7 +260,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J
PARAMETRIZE { heldItem = ITEM_NONE; }
PARAMETRIZE { heldItem = ITEM_PIXIE_PLATE; }
GIVEN {
- PLAYER(SPECIES_ARCEUS) { Item(heldItem); };
+ PLAYER(SPECIES_ARCEUS) { Item(heldItem); }
OPPONENT(SPECIES_DRAGONITE);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); }
@@ -281,7 +281,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T
PARAMETRIZE { heldItem = ITEM_NONE; }
PARAMETRIZE { heldItem = ITEM_SHOCK_DRIVE; }
GIVEN {
- PLAYER(SPECIES_GENESECT) { Item(heldItem); };
+ PLAYER(SPECIES_GENESECT) { Item(heldItem); }
OPPONENT(SPECIES_GYARADOS);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); }
@@ -302,7 +302,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move
PARAMETRIZE { heldItem = ITEM_NONE; }
PARAMETRIZE { heldItem = ITEM_FIRE_MEMORY; }
GIVEN {
- PLAYER(SPECIES_SILVALLY) { Item(heldItem); };
+ PLAYER(SPECIES_SILVALLY) { Item(heldItem); }
OPPONENT(SPECIES_VENUSAUR);
} WHEN {
TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); }
@@ -320,7 +320,7 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }
} WHEN {
TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_EMBARGO); }
TURN { MOVE(opponent, MOVE_FLING); }
@@ -342,7 +342,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_Y); };
+ OPPONENT(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_Y); }
} WHEN {
TURN { MOVE(player, MOVE_EMBARGO); }
TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); }
@@ -367,7 +367,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); };
+ OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
} WHEN {
TURN { MOVE(player, MOVE_EMBARGO); }
TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); }
diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c
index 094191f665..e98f00df3e 100644
--- a/test/battle/move_effect/encore.c
+++ b/test/battle/move_effect/encore.c
@@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary
- OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(player, MOVE_ARM_THRUST); }
@@ -126,6 +126,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after
TO_DO_BATTLE_TEST("Encore's effect ends if the encored move runs out of PP");
TO_DO_BATTLE_TEST("Encore lasts for 2-6 turns (Gen 2-3)");
-TO_DO_BATTLE_TEST("Encore lasts for 4-8 turns (Gen 4)");
+TO_DO_BATTLE_TEST("Encore lasts for 3-7 turns (Gen 4)");
TO_DO_BATTLE_TEST("Encore lasts for 3 turns (Gen 5+)");
TO_DO_BATTLE_TEST("Encore randomly chooses an opponent target");
diff --git a/test/battle/move_effect/entrainment.c b/test/battle/move_effect/entrainment.c
index ac6050bbe0..ead4ff3b60 100644
--- a/test/battle/move_effect/entrainment.c
+++ b/test/battle/move_effect/entrainment.c
@@ -5,8 +5,8 @@ AI_DOUBLE_BATTLE_TEST("AI prefers Entrainment'ing good abilities onto partner wi
{
GIVEN {
AI_FLAGS(AI_FLAG_SMART_TRAINER);
- PLAYER(SPECIES_QUAXWELL) { Level(18); Ability(ABILITY_TORRENT); Moves(MOVE_WATER_GUN); };
- PLAYER(SPECIES_CORPHISH) { Level(18); Moves(MOVE_WATER_GUN); };
+ PLAYER(SPECIES_QUAXWELL) { Level(18); Ability(ABILITY_TORRENT); Moves(MOVE_WATER_GUN); }
+ PLAYER(SPECIES_CORPHISH) { Level(18); Moves(MOVE_WATER_GUN); }
OPPONENT(SPECIES_SMEARGLE) { Level(17); Ability(ABILITY_TECHNICIAN); Moves(MOVE_AERIAL_ACE, MOVE_ENTRAINMENT, MOVE_FLAME_WHEEL, MOVE_MAGICAL_LEAF); }
OPPONENT(SPECIES_ARCHEN) { Level(17); Ability(ABILITY_DEFEATIST); Moves(MOVE_DUAL_WINGBEAT, MOVE_ROCK_TOMB); }
} WHEN {
diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c
index 8185171796..d54648e13a 100644
--- a/test/battle/move_effect/explosion.c
+++ b/test/battle/move_effect/explosion.c
@@ -111,10 +111,10 @@ SINGLE_BATTLE_TEST("Explosion is blocked by Ability Damp")
SINGLE_BATTLE_TEST("Explosion does not trigger Destiny Bond")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_EXPLOSION);}
+ TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_EXPLOSION); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player);
HP_BAR(opponent);
diff --git a/test/battle/move_effect/fillet_away.c b/test/battle/move_effect/fillet_away.c
index 70f180a700..0cd53e6848 100644
--- a/test/battle/move_effect/fillet_away.c
+++ b/test/battle/move_effect/fillet_away.c
@@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Fillet Away sharply raises Attack, Sp. Atk, and Speed")
SINGLE_BATTLE_TEST("Fillet Away fails if user's current HP is half or less than half its maximum")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50);}
+ PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_FILLET_AWAY); }
diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c
index 012485abe8..595938bef5 100644
--- a/test/battle/move_effect/fling.c
+++ b/test/battle/move_effect/fling.c
@@ -10,14 +10,14 @@ SINGLE_BATTLE_TEST("Fling fails if Pokémon holds no item")
{
u16 item;
- PARAMETRIZE {item = ITEM_NONE; }
- PARAMETRIZE {item = ITEM_RAZOR_CLAW; }
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_RAZOR_CLAW; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(item); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_FLING);}
+ TURN { MOVE(player, MOVE_FLING); }
} SCENE {
MESSAGE("Wobbuffet used Fling!");
if (item != ITEM_NONE) {
@@ -33,9 +33,9 @@ SINGLE_BATTLE_TEST("Fling fails if Pokémon is under the effects of Embargo or M
{
u16 move;
- PARAMETRIZE {move = MOVE_CELEBRATE; }
- PARAMETRIZE {move = MOVE_EMBARGO; }
- PARAMETRIZE {move = MOVE_MAGIC_ROOM; }
+ PARAMETRIZE { move = MOVE_CELEBRATE; }
+ PARAMETRIZE { move = MOVE_EMBARGO; }
+ PARAMETRIZE { move = MOVE_MAGIC_ROOM; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_EMBARGO) == EFFECT_EMBARGO);
@@ -116,12 +116,12 @@ SINGLE_BATTLE_TEST("Fling's thrown item can be regained with Recycle")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_RECYCLE) == EFFECT_RECYCLE);
- PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_FLING);}
- TURN { MOVE(player, MOVE_RECYCLE);}
- TURN { MOVE(player, MOVE_FLING);}
+ TURN { MOVE(player, MOVE_FLING); }
+ TURN { MOVE(player, MOVE_RECYCLE); }
+ TURN { MOVE(player, MOVE_FLING); }
} SCENE {
MESSAGE("Wobbuffet used Fling!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player);
@@ -139,9 +139,9 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_SELF_DESTRUCT) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); Speed(2); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(5); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(5); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); Speed(2); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
} WHEN {
TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); }
TURN { MOVE(player, MOVE_FLING); }
@@ -164,10 +164,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_PROTECT) == EFFECT_PROTECT);
- PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING);}
+ TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING); }
TURN { MOVE(player, MOVE_FLING); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Protect!");
@@ -204,15 +204,15 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if Pokémon is asleep/frozen/
u32 status;
u16 item;
- PARAMETRIZE {status = STATUS1_SLEEP_TURN(2); item = ITEM_RAZOR_CLAW; }
- PARAMETRIZE {status = STATUS1_PARALYSIS; item = ITEM_RAZOR_CLAW; }
- PARAMETRIZE {status = STATUS1_FREEZE; item = ITEM_RAZOR_CLAW; }
- PARAMETRIZE {status = STATUS1_SLEEP_TURN(2); item = ITEM_NONE; }
- PARAMETRIZE {status = STATUS1_PARALYSIS; item = ITEM_NONE; }
- PARAMETRIZE {status = STATUS1_FREEZE; item = ITEM_NONE; }
+ PARAMETRIZE { status = STATUS1_SLEEP_TURN(2); item = ITEM_RAZOR_CLAW; }
+ PARAMETRIZE { status = STATUS1_PARALYSIS; item = ITEM_RAZOR_CLAW; }
+ PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_RAZOR_CLAW; }
+ PARAMETRIZE { status = STATUS1_SLEEP_TURN(2); item = ITEM_NONE; }
+ PARAMETRIZE { status = STATUS1_PARALYSIS; item = ITEM_NONE; }
+ PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_NONE; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {Item(item); Status1(status); }
+ PLAYER(SPECIES_WOBBUFFET) { Item(item); Status1(status); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
if (status == STATUS1_FREEZE) {
@@ -254,12 +254,12 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items")
{
u16 item;
- PARAMETRIZE {item = ITEM_FLAME_ORB; }
- PARAMETRIZE {item = ITEM_LIGHT_BALL; }
- PARAMETRIZE {item = ITEM_POISON_BARB; }
- PARAMETRIZE {item = ITEM_TOXIC_ORB; }
- PARAMETRIZE {item = ITEM_RAZOR_FANG; }
- PARAMETRIZE {item = ITEM_KINGS_ROCK; }
+ PARAMETRIZE { item = ITEM_FLAME_ORB; }
+ PARAMETRIZE { item = ITEM_LIGHT_BALL; }
+ PARAMETRIZE { item = ITEM_POISON_BARB; }
+ PARAMETRIZE { item = ITEM_TOXIC_ORB; }
+ PARAMETRIZE { item = ITEM_RAZOR_FANG; }
+ PARAMETRIZE { item = ITEM_KINGS_ROCK; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(item); }
@@ -310,12 +310,12 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust")
{
u16 item;
- PARAMETRIZE {item = ITEM_FLAME_ORB; }
- PARAMETRIZE {item = ITEM_LIGHT_BALL; }
- PARAMETRIZE {item = ITEM_POISON_BARB; }
- PARAMETRIZE {item = ITEM_TOXIC_ORB; }
- PARAMETRIZE {item = ITEM_RAZOR_FANG; }
- PARAMETRIZE {item = ITEM_KINGS_ROCK; }
+ PARAMETRIZE { item = ITEM_FLAME_ORB; }
+ PARAMETRIZE { item = ITEM_LIGHT_BALL; }
+ PARAMETRIZE { item = ITEM_POISON_BARB; }
+ PARAMETRIZE { item = ITEM_TOXIC_ORB; }
+ PARAMETRIZE { item = ITEM_RAZOR_FANG; }
+ PARAMETRIZE { item = ITEM_KINGS_ROCK; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(item); }
diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c
index 4a72163855..b582f495ec 100644
--- a/test/battle/move_effect/flower_shield.c
+++ b/test/battle/move_effect/flower_shield.c
@@ -84,6 +84,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Flower Shield")
OPPONENT(SPECIES_TANGELA) { Moves(MOVE_FLOWER_SHIELD, MOVE_POUND); }
OPPONENT(SPECIES_TANGELA);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_FLOWER_SHIELD); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_FLOWER_SHIELD); }
}
}
diff --git a/test/battle/move_effect/focus_energy.c b/test/battle/move_effect/focus_energy.c
index 363e6bd563..ffc9370572 100644
--- a/test/battle/move_effect/focus_energy.c
+++ b/test/battle/move_effect/focus_energy.c
@@ -45,8 +45,8 @@ SINGLE_BATTLE_TEST("Focus Energy multiplies crit chance by 4 with gen 1 crit cha
bool32 useFocusEnergy = 0;
u32 genConfig = 0, chance = 0;
for (u32 j = GEN_1; j <= GEN_9; j++) {
- PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = 16;}
- PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; chance = 4;}
+ PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = 16; }
+ PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; chance = 4; }
}
PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT);
GIVEN {
diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c
index 35f26ae9ee..e29e27f94a 100644
--- a/test/battle/move_effect/focus_punch.c
+++ b/test/battle/move_effect/focus_punch.c
@@ -123,7 +123,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use status moves if the player's best attacking
ASSUME(GetSpeciesType(SPECIES_CLEFABLE, 1) == TYPE_FAIRY);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_SNORLAX) { Moves(MOVE_FOCUS_PUNCH, MOVE_POUND); }
- OPPONENT(SPECIES_CLEFABLE) { Moves(MOVE_PLAY_ROUGH, MOVE_SWORDS_DANCE); }
+ OPPONENT(SPECIES_CLEFABLE) { Moves(MOVE_PLAY_ROUGH, MOVE_SWORDS_DANCE); }
} WHEN {
TURN { MOVE(player, MOVE_FOCUS_PUNCH); EXPECT_MOVE(opponent, MOVE_PLAY_ROUGH); }
}
diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c
index ee424c9bd9..01a5bed349 100644
--- a/test/battle/move_effect/future_sight.c
+++ b/test/battle/move_effect/future_sight.c
@@ -34,8 +34,8 @@ SINGLE_BATTLE_TEST("Future Sight uses Sp. Atk stat of the original user without
TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); }
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { SWITCH(player, 1); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player);
HP_BAR(opponent, captureDamage: &seedFlareDmg);
@@ -60,8 +60,8 @@ SINGLE_BATTLE_TEST("Future Sight is not boosted by Life Orb is original user if
TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); }
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { SWITCH(player, 1); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player);
HP_BAR(opponent, captureDamage: &seedFlareDmg);
@@ -88,8 +88,8 @@ SINGLE_BATTLE_TEST("Future Sight receives STAB from party mon (Gen 5+)")
TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); }
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { SWITCH(player, 1); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player);
HP_BAR(opponent, captureDamage: &seedFlareDmg);
@@ -111,8 +111,8 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness (Gen 5+)")
TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); }
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { SWITCH(player, 1); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player);
HP_BAR(opponent);
@@ -136,7 +136,7 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints before it is
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { MOVE(player, MOVE_CELEBRATE); }
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_MEMENTO); SEND_OUT(opponent, 1); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
@@ -158,7 +158,7 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints by residual d
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
TURN { MOVE(player, MOVE_CELEBRATE); }
TURN { MOVE(player, MOVE_WRAP); SEND_OUT(opponent, 1); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
@@ -178,8 +178,8 @@ SINGLE_BATTLE_TEST("Future Sight breaks Focus Sash and doesn't make the holder e
OPPONENT(SPECIES_PIDGEY) { Level(1); Item(ITEM_FOCUS_SASH); }
} WHEN {
TURN { MOVE(player, MOVE_FUTURE_SIGHT); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
TURN { MOVE(player, MOVE_PSYCHIC); }
} SCENE {
MESSAGE("The opposing Pidgey hung on using its Focus Sash!");
diff --git a/test/battle/move_effect/gear_up.c b/test/battle/move_effect/gear_up.c
index 8689d6d268..9a9bdab79c 100644
--- a/test/battle/move_effect/gear_up.c
+++ b/test/battle/move_effect/gear_up.c
@@ -12,6 +12,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gear Up")
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); }
}
}
diff --git a/test/battle/move_effect/glaive_rush.c b/test/battle/move_effect/glaive_rush.c
index ff949a57cd..31e923443b 100644
--- a/test/battle/move_effect/glaive_rush.c
+++ b/test/battle/move_effect/glaive_rush.c
@@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("If Glaive Rush is successful, moves targeted at the user dea
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_GLAIVE_RUSH); }
- TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
HP_BAR(player, captureDamage: &normalDmg);
@@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("Glaive Rush doesn't affect the user if the effect is blocked
SINGLE_BATTLE_TEST("Glaive Rush status last until the the user's next turn")
{
- s16 normalDmgFristHit;
+ s16 normalDmgFirstHit;
s16 normalDmgSecondHit;
GIVEN {
@@ -133,11 +133,11 @@ SINGLE_BATTLE_TEST("Glaive Rush status last until the the user's next turn")
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
- HP_BAR(player, captureDamage: &normalDmgFristHit);
+ HP_BAR(player, captureDamage: &normalDmgFirstHit);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
HP_BAR(player, captureDamage: &normalDmgSecondHit);
} THEN {
- EXPECT_EQ(normalDmgFristHit, normalDmgSecondHit);
+ EXPECT_EQ(normalDmgFirstHit, normalDmgSecondHit);
}
}
diff --git a/test/battle/move_effect/grassy_terrain.c b/test/battle/move_effect/grassy_terrain.c
index 2b5e166bfd..063d5ae981 100644
--- a/test/battle/move_effect/grassy_terrain.c
+++ b/test/battle/move_effect/grassy_terrain.c
@@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
- OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_GRASSY_TERRAIN); }
TURN {}
@@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain heals the Pokémon on the field for the durat
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_GRASSY_TERRAIN); }
TURN {}
diff --git a/test/battle/move_effect/gravity.c b/test/battle/move_effect/gravity.c
index 001505bae0..7175f085f7 100644
--- a/test/battle/move_effect/gravity.c
+++ b/test/battle/move_effect/gravity.c
@@ -73,7 +73,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gravity")
PLAYER(SPECIES_WOBBUFFET) { Item(foeItem); }
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_GRAVITY, MOVE_HEADBUTT, MOVE_TAUNT); }
- OPPONENT(SPECIES_WOBBUFFET) { Moves(move, MOVE_EARTH_POWER); Item(friendItem); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(move, MOVE_EARTH_POWER); Item(friendItem); }
} WHEN {
if (move == MOVE_THUNDER || (foeItem == ITEM_AIR_BALLOON && friendItem != ITEM_AIR_BALLOON))
TURN { EXPECT_MOVE(opponentLeft, MOVE_GRAVITY); }
diff --git a/test/battle/move_effect/grudge.c b/test/battle/move_effect/grudge.c
index 2b74a3b05a..8da8b33fb8 100644
--- a/test/battle/move_effect/grudge.c
+++ b/test/battle/move_effect/grudge.c
@@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Grudge depletes all PP of the move that fainted the target")
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); };
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }
} WHEN {
TURN {
MOVE(player, MOVE_GRUDGE);
@@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move")
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }
} WHEN {
TURN {
MOVE(player, MOVE_GRUDGE);
@@ -50,12 +50,258 @@ SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move")
}
}
-TO_DO_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move")
-TO_DO_BATTLE_TEST("Grudge does not activate for Struggle")
-TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move");
-TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep");
-TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis");
-TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching");
-TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm");
-TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed");
-TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight");
+SINGLE_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); Item(ITEM_LAGGING_TAIL); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Grudge!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ MESSAGE("The opposing Wobbuffet used Max Strike!");
+ MESSAGE("Wobbuffet fainted!");
+ MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
+ } THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_EQ(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge does not activate for Struggle")
+{
+ GIVEN {
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_STRUGGLE, MOVE_POUND, MOVE_SURF); };
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STRUGGLE); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Struggle lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move")
+{
+ GIVEN {
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); };
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
+ ASSUME(gMovesInfo[SanitizeMoveId(MOVE_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_SLEEP);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_SPORE, MOVE_SURF); }
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SPORE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player);
+ MESSAGE("Wobbuffet fell asleep!");
+ STATUS_ICON(player, sleep: TRUE);
+ MESSAGE("Wobbuffet is fast asleep.");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis")
+{
+ PASSES_RANDOMLY(25, 100, RNG_PARALYSIS);
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS);
+ ASSUME(gMovesInfo[SanitizeMoveId(MOVE_STUN_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_PARALYSIS);
+ ASSUME(GetMovePriority(MOVE_VITAL_THROW) == -1);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1);}
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_STUN_SPORE, MOVE_SURF); };\
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STUN_SPORE); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent);
+ MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!");
+ STATUS_ICON(player, paralysis: TRUE);
+ MESSAGE("Wobbuffet couldn't move because it's paralyzed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching")
+{
+ PASSES_RANDOMLY(10, 100, RNG_HOLD_EFFECT_FLINCH);
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_FALSE_SWIPE) == EFFECT_FALSE_SWIPE);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FALSE_SWIPE, MOVE_SURF); Item(ITEM_KINGS_ROCK); }
+ }
+ WHEN {
+ TURN { SWITCH(opponent, 1); MOVE(player, MOVE_GRUDGE); }
+ TURN { MOVE(opponent, MOVE_FALSE_SWIPE); MOVE(player, MOVE_CELEBRATE); }
+ TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ SEND_IN_MESSAGE("Wobbuffet");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FALSE_SWIPE, opponent);
+ MESSAGE("Wobbuffet flinched and couldn't move!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_SANDSTORM, MOVE_SURF); }
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SANDSTORM); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SANDSTORM, opponent);
+ MESSAGE("The sandstorm is raging.");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES);
+ MESSAGE("Wobbuffet is buffeted by the sandstorm!");
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Sandstorm lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_LEECH_SEED, MOVE_SURF); }
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_LEECH_SEED); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponent);
+ MESSAGE("Wobbuffet was seeded!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, player);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Leech Seed lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
+SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
+ PLAYER (SPECIES_WOBBUFFET) { HP(1); }
+ PLAYER (SPECIES_WOBBUFFET);
+ OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FUTURE_SIGHT, MOVE_SURF); }
+ }
+ WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_FUTURE_SIGHT); }
+ TURN {}
+ TURN { MOVE(player, MOVE_GRUDGE); SEND_OUT(player, 1); }
+ }
+ SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponent);
+ MESSAGE("The opposing Wobbuffet foresaw an attack!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
+ MESSAGE("Wobbuffet took the Future Sight attack!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FUTURE_SIGHT_HIT);
+ MESSAGE("Wobbuffet fainted!");
+ NOT MESSAGE("The opposing Wobbuffet's Future Sight lost all its PP due to the grudge!");
+ }
+ THEN {
+ EXPECT_GT(opponent->pp[0], 0);
+ EXPECT_GT(opponent->pp[1], 0);
+ EXPECT_GT(opponent->pp[2], 0);
+ EXPECT_GT(opponent->pp[3], 0);
+ }
+}
+
diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c
index e2ca05206a..66a754df5c 100644
--- a/test/battle/move_effect/heal_bell.c
+++ b/test/battle/move_effect/heal_bell.c
@@ -179,7 +179,7 @@ DOUBLE_BATTLE_TEST("Aromatherapy cure Soundproof battlers regardless of config")
GIVEN {
ASSUME(!IsSoundMove(MOVE_AROMATHERAPY));
WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config);
- PLAYER(SPECIES_WOBBUFFET) { Ability(ability); Status1(STATUS1_POISON); };
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ability); Status1(STATUS1_POISON); }
PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); }
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_WYNAUT);
diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c
index f587d078a0..b4e3e2f4e5 100644
--- a/test/battle/move_effect/hit_escape.c
+++ b/test/battle/move_effect/hit_escape.c
@@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Hit Escape: U-turn switches the user out after Ice Face acti
SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon switched in by U-turn: player side")
{
GIVEN {
- PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
+ PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); }
OPPONENT(SPECIES_WYNAUT) { HP(1); }
OPPONENT(SPECIES_WYNAUT);
@@ -138,8 +138,8 @@ SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon
SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon switched in by U-turn: opposing side")
{
GIVEN {
- PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
- PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
+ PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
+ PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
OPPONENT(SPECIES_WYNAUT) { HP(1); }
OPPONENT(SPECIES_WYNAUT) { Item(ITEM_ELECTRIC_SEED); }
} WHEN {
@@ -160,7 +160,7 @@ SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon
SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right Pokémon after U-turn and Intimidate")
{
GIVEN {
- PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); };
+ PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); }
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_WYNAUT);
@@ -181,9 +181,9 @@ SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right Pok
SINGLE_BATTLE_TEST("Hit Escape: U-turn triggers before Eject Pack")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_GOODRA_HISUI) { Ability(ABILITY_GOOEY); };
+ OPPONENT(SPECIES_GOODRA_HISUI) { Ability(ABILITY_GOOEY); }
} WHEN {
TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); }
} SCENE {
diff --git a/test/battle/move_effect/hydro_steam.c b/test/battle/move_effect/hydro_steam.c
index cb19cc6ec1..781e083af4 100644
--- a/test/battle/move_effect/hydro_steam.c
+++ b/test/battle/move_effect/hydro_steam.c
@@ -35,8 +35,8 @@ SINGLE_BATTLE_TEST("Hydro Steam is affected by Utility Umbrella", s16 damage)
PARAMETRIZE { itemPlayer = ITEM_NONE; itemOpponent = ITEM_UTILITY_UMBRELLA; }
PARAMETRIZE { itemPlayer = ITEM_UTILITY_UMBRELLA; itemOpponent = ITEM_UTILITY_UMBRELLA; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayer); };
- OPPONENT(SPECIES_WOBBUFFET) {Item(itemOpponent); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayer); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(itemOpponent); }
} WHEN {
TURN { MOVE(player, MOVE_SUNNY_DAY); }
TURN { MOVE(player, MOVE_HYDRO_STEAM); }
diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c
index eb0874d7bf..fd7a9a8824 100644
--- a/test/battle/move_effect/knock_off.c
+++ b/test/battle/move_effect/knock_off.c
@@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Knock Off deals additional damage to opponents holding an it
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(item); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(item); }
} WHEN {
TURN { MOVE(player, MOVE_KNOCK_OFF); }
} SCENE {
@@ -115,7 +115,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
} WHEN {
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); }
} SCENE {
@@ -130,7 +130,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute even if i
{
GIVEN {
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_WOBBUFFET) { MaxHP(4); HP(4); Item(ITEM_LEFTOVERS); };
+ OPPONENT(SPECIES_WOBBUFFET) { MaxHP(4); HP(4); Item(ITEM_LEFTOVERS); }
} WHEN {
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); }
} SCENE {
@@ -146,7 +146,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Protect")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
} WHEN {
TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_KNOCK_OFF); }
} SCENE {
@@ -165,7 +165,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items if target is immune")
ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY);
ASSUME(GetSpeciesType(SPECIES_DONPHAN, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_DONPHAN, 1) == TYPE_GROUND);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_DONPHAN) { Item(ITEM_LEFTOVERS); };
+ OPPONENT(SPECIES_DONPHAN) { Item(ITEM_LEFTOVERS); }
} WHEN {
TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_KNOCK_OFF); }
} SCENE {
diff --git a/test/battle/move_effect/lash_out.c b/test/battle/move_effect/lash_out.c
index ed9465e915..52fca85758 100644
--- a/test/battle/move_effect/lash_out.c
+++ b/test/battle/move_effect/lash_out.c
@@ -161,7 +161,7 @@ DOUBLE_BATTLE_TEST("Lash Out damage is not boosted by Treasure of Ruin ability a
GIVEN {
PLAYER(SPECIES_GRIMMSNARL) { Moves(MOVE_LASH_OUT); }
- PLAYER(SPECIES_RATTATA);
+ PLAYER(SPECIES_RATTATA);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_GOLEM);
OPPONENT(species) { Ability(ability); }
diff --git a/test/battle/move_effect/magnetic_flux.c b/test/battle/move_effect/magnetic_flux.c
index 6a23d2082f..7bbcd52754 100644
--- a/test/battle/move_effect/magnetic_flux.c
+++ b/test/battle/move_effect/magnetic_flux.c
@@ -12,6 +12,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Magnetic Flux")
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); }
}
}
diff --git a/test/battle/move_effect/max_move.c b/test/battle/move_effect/max_move.c
deleted file mode 100644
index 38924f1d33..0000000000
--- a/test/battle/move_effect/max_move.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "global.h"
-#include "test/battle.h"
-
-// Tested in the dynamax.c test file
diff --git a/test/battle/move_effect/me_first.c b/test/battle/move_effect/me_first.c
index 51f673ae5f..8ccaa324ef 100644
--- a/test/battle/move_effect/me_first.c
+++ b/test/battle/move_effect/me_first.c
@@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Me First can be selected if users holds Assault Vest")
}
}
-SINGLE_BATTLE_TEST("Me Frist deducts power points from itself, not the copied move")
+SINGLE_BATTLE_TEST("Me First deducts power points from itself, not the copied move")
{
ASSUME(GetMovePP(MOVE_ME_FIRST) == 20);
ASSUME(GetMovePP(MOVE_POUND) == 35);
diff --git a/test/battle/move_effect/mirror_coat.c b/test/battle/move_effect/mirror_coat.c
index 6de1c03c29..301ba1ef26 100644
--- a/test/battle/move_effect/mirror_coat.c
+++ b/test/battle/move_effect/mirror_coat.c
@@ -97,7 +97,7 @@ DOUBLE_BATTLE_TEST("Mirror Coat fails if mon that damaged Mirror Coat user is no
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
- OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN {
diff --git a/test/battle/move_effect/misty_explosion.c b/test/battle/move_effect/misty_explosion.c
index b7e0ede902..edd0906ff6 100644
--- a/test/battle/move_effect/misty_explosion.c
+++ b/test/battle/move_effect/misty_explosion.c
@@ -79,10 +79,10 @@ DOUBLE_BATTLE_TEST("Misty Explosion causes everyone to faint in a double battle"
SINGLE_BATTLE_TEST("Misty Explosion does not trigger Destiny Bond")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_MISTY_EXPLOSION);}
+ TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_MISTY_EXPLOSION); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player);
HP_BAR(opponent);
diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c
index 594094385b..62f9556879 100644
--- a/test/battle/move_effect/multi_hit.c
+++ b/test/battle/move_effect/multi_hit.c
@@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link")
PASSES_RANDOMLY(100, 100, RNG_HITS);
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SKILL_LINK); };
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SKILL_LINK); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
diff --git a/test/battle/move_effect/nature_power.c b/test/battle/move_effect/nature_power.c
index 53aa68442d..dc50c3bff8 100644
--- a/test/battle/move_effect/nature_power.c
+++ b/test/battle/move_effect/nature_power.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Nature power plays a move correctly in any background")
u32 move = MOVE_TRI_ATTACK;
for (u32 j = 0; j < BATTLE_ENVIRONMENT_COUNT; j++)
{
- PARAMETRIZE {environment = i;}
+ PARAMETRIZE { environment = i; }
}
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c
index f2607b4ff7..3c6b04b17a 100644
--- a/test/battle/move_effect/pledge.c
+++ b/test/battle/move_effect/pledge.c
@@ -217,7 +217,7 @@ DOUBLE_BATTLE_TEST("Pledge moves can not be redirected by absorbing abilities")
OPPONENT(SPECIES_LILEEP) { Ability(ABILITY_STORM_DRAIN); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight);}
+ TURN { MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft);
HP_BAR(opponentRight);
diff --git a/test/battle/move_effect/powder.c b/test/battle/move_effect/powder.c
index 2bcfc58da8..3f0a3135d9 100644
--- a/test/battle/move_effect/powder.c
+++ b/test/battle/move_effect/powder.c
@@ -287,7 +287,7 @@ DOUBLE_BATTLE_TEST("Powder damages a target using Shell Trap even if it wasn't h
u32 move;
PARAMETRIZE { move = MOVE_SCRATCH; }
PARAMETRIZE { move = MOVE_EMBER; }
- PARAMETRIZE { move = MOVE_TICKLE;}
+ PARAMETRIZE { move = MOVE_TICKLE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_SHELL_TRAP) == EFFECT_SHELL_TRAP);
ASSUME(GetMoveType(MOVE_SHELL_TRAP) == TYPE_FIRE);
diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c
index 05b238fe0e..85546f2064 100644
--- a/test/battle/move_effect/protect.c
+++ b/test/battle/move_effect/protect.c
@@ -166,9 +166,9 @@ SINGLE_BATTLE_TEST("Protect: Baneful Bunker poisons Pokémon for moves making co
{
u16 usedMove = MOVE_NONE;
- PARAMETRIZE {usedMove = MOVE_SCRATCH; }
- PARAMETRIZE {usedMove = MOVE_LEER; }
- PARAMETRIZE {usedMove = MOVE_WATER_GUN; }
+ PARAMETRIZE { usedMove = MOVE_SCRATCH; }
+ PARAMETRIZE { usedMove = MOVE_LEER; }
+ PARAMETRIZE { usedMove = MOVE_WATER_GUN; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -218,9 +218,9 @@ SINGLE_BATTLE_TEST("Protect: Burning Bulwark burns Pokémon for moves making con
{
u16 usedMove = MOVE_NONE;
- PARAMETRIZE {usedMove = MOVE_SCRATCH; }
- PARAMETRIZE {usedMove = MOVE_LEER; }
- PARAMETRIZE {usedMove = MOVE_WATER_GUN; }
+ PARAMETRIZE { usedMove = MOVE_SCRATCH; }
+ PARAMETRIZE { usedMove = MOVE_LEER; }
+ PARAMETRIZE { usedMove = MOVE_WATER_GUN; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -269,8 +269,8 @@ SINGLE_BATTLE_TEST("Protect: Burning Bulwark can't burn Pokémon if they are alr
SINGLE_BATTLE_TEST("Protect: Recoil damage is not applied if target was protected")
{
u32 j, k;
- static const u16 protectMoves[] = { MOVE_PROTECT, MOVE_DETECT, MOVE_KINGS_SHIELD, MOVE_BANEFUL_BUNKER, MOVE_SILK_TRAP, MOVE_OBSTRUCT, MOVE_SPIKY_SHIELD };
- static const u16 recoilMoves[] = { MOVE_VOLT_TACKLE, MOVE_HEAD_SMASH, MOVE_TAKE_DOWN, MOVE_DOUBLE_EDGE };
+ static const u16 protectMoves[] = {MOVE_PROTECT, MOVE_DETECT, MOVE_KINGS_SHIELD, MOVE_BANEFUL_BUNKER, MOVE_SILK_TRAP, MOVE_OBSTRUCT, MOVE_SPIKY_SHIELD};
+ static const u16 recoilMoves[] = {MOVE_VOLT_TACKLE, MOVE_HEAD_SMASH, MOVE_TAKE_DOWN, MOVE_DOUBLE_EDGE};
u16 protectMove = MOVE_NONE;
u16 recoilMove = MOVE_NONE;
@@ -721,7 +721,7 @@ SINGLE_BATTLE_TEST("Protect: Protective Pads protects from secondary effects")
DOUBLE_BATTLE_TEST("Protect is not transferred to a mon that is switched in due to Eject Button")
{
GIVEN {
- PLAYER(SPECIES_URSHIFU) { Ability(ABILITY_UNSEEN_FIST); };
+ PLAYER(SPECIES_URSHIFU) { Ability(ABILITY_UNSEEN_FIST); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT) { Item(ITEM_EJECT_BUTTON); }
diff --git a/test/battle/move_effect/psychic_terrain.c b/test/battle/move_effect/psychic_terrain.c
index 36f4841ef1..c8fb061d9c 100644
--- a/test/battle/move_effect/psychic_terrain.c
+++ b/test/battle/move_effect/psychic_terrain.c
@@ -117,16 +117,16 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves")
SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves against semi-invulnerable targets")
{
u32 move = 0, shouldWork = 0;
- PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE;}
- PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE;}
+ PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE; }
+ PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE; }
GIVEN {
WITH_CONFIG(CONFIG_TOXIC_NEVER_MISS, GEN_6);
ASSUME(IsSpeciesOfType(SPECIES_SHROODLE, TYPE_POISON));
PLAYER(SPECIES_SHROODLE) { Ability(ABILITY_PRANKSTER); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); MOVE(opponent,move);}
- TURN { MOVE(player, MOVE_TOXIC); SKIP_TURN(opponent);}
+ TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); MOVE(opponent,move); }
+ TURN { MOVE(player, MOVE_TOXIC); SKIP_TURN(opponent); }
} SCENE {
if (shouldWork)
{
diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c
index 7f62f2065e..335120a5e5 100644
--- a/test/battle/move_effect/recoil_if_miss.c
+++ b/test/battle/move_effect/recoil_if_miss.c
@@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick's recoil happens after Spiky Shiel
} else {
TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(player, 1); }
}
- TURN { ; }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent);
MESSAGE("Wobbuffet used Jump Kick!");
@@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Disguise doesn't prevent crash damage from J
PARAMETRIZE { ability = ABILITY_SCRAPPY; }
GIVEN {
- PLAYER(SPECIES_KANGASKHAN) { Ability(ability); };
+ PLAYER(SPECIES_KANGASKHAN) { Ability(ability); }
OPPONENT(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); }
} WHEN {
TURN { MOVE(player, MOVE_JUMP_KICK); }
diff --git a/test/battle/move_effect/refresh.c b/test/battle/move_effect/refresh.c
index f11a8dfca1..727bd7c862 100644
--- a/test/battle/move_effect/refresh.c
+++ b/test/battle/move_effect/refresh.c
@@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Refresh cures the user of burn, frostbite, poison, and paral
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
PARAMETRIZE { status1 = STATUS1_FROSTBITE; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Status1(status1); };
+ PLAYER(SPECIES_WOBBUFFET) { Status1(status1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_REFRESH); }
@@ -35,9 +35,10 @@ SINGLE_BATTLE_TEST("Refresh does not cure the user of Freeze")
TURN { MOVE(player, MOVE_REFRESH); }
} SCENE {
MESSAGE("Wobbuffet used Refresh!");
- NONE_OF {
+ NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REFRESH, player);
- STATUS_ICON(player, none: TRUE); }
+ STATUS_ICON(player, none: TRUE);
+ }
MESSAGE("But it failed!");
}
}
@@ -61,9 +62,10 @@ SINGLE_BATTLE_TEST("Refresh does not cure sleep when used by Sleep Talk")
MESSAGE("The opposing Wobbuffet used Sleep Talk!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, opponent);
MESSAGE("The opposing Wobbuffet used Refresh!");
- NONE_OF {
+ NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REFRESH, player);
- STATUS_ICON(player, none: TRUE); }
+ STATUS_ICON(player, none: TRUE);
+ }
MESSAGE("But it failed!");
}
}
diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c
index eeb90d202d..add15a7c3d 100644
--- a/test/battle/move_effect/revival_blessing.c
+++ b/test/battle/move_effect/revival_blessing.c
@@ -61,13 +61,13 @@ AI_MULTI_BATTLE_TEST("Revival Blessing cannot revive a partner's party member")
MULTI_PLAYER(SPECIES_CLEFABLE);
MULTI_PLAYER(SPECIES_CLEFABLE) { HP(0); }
MULTI_PLAYER(SPECIES_CLEFABLE);
- MULTI_PARTNER(SPECIES_CLEFAIRY) { Moves(move2); }
+ MULTI_PARTNER(SPECIES_CLEFAIRY) { Moves(move2); }
MULTI_PARTNER(SPECIES_CLEFAIRY);
MULTI_PARTNER(SPECIES_CLEFAIRY);
- MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(move1); }
+ MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(move1); }
MULTI_OPPONENT_A(SPECIES_WOBBUFFET);
MULTI_OPPONENT_A(SPECIES_WOBBUFFET);
- MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(move3); }
+ MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(move3); }
MULTI_OPPONENT_B(SPECIES_WYNAUT) { HP(0); }
MULTI_OPPONENT_B(SPECIES_WYNAUT);
} WHEN {
diff --git a/test/battle/move_effect/rototiller.c b/test/battle/move_effect/rototiller.c
index b86228a3f1..c9c2cb7588 100644
--- a/test/battle/move_effect/rototiller.c
+++ b/test/battle/move_effect/rototiller.c
@@ -109,6 +109,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Rototiller")
OPPONENT(SPECIES_TANGELA) { Moves(MOVE_ROTOTILLER, MOVE_POUND); }
OPPONENT(SPECIES_TANGELA);
} WHEN {
- TURN { EXPECT_MOVE(opponentLeft, MOVE_ROTOTILLER); }
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_ROTOTILLER); }
}
}
diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c
index 6dc2a77427..ea78e08eeb 100644
--- a/test/battle/move_effect/spicy_extract.c
+++ b/test/battle/move_effect/spicy_extract.c
@@ -168,7 +168,7 @@ AI_DOUBLE_BATTLE_TEST("Spicy Extract user will use it if partner holds Clear Amu
u32 move;
PARAMETRIZE { move = MOVE_SCRATCH; }
- PARAMETRIZE { move = MOVE_SWIFT;}
+ PARAMETRIZE { move = MOVE_SWIFT; }
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
diff --git a/test/battle/move_effect/steal_item.c b/test/battle/move_effect/steal_item.c
index 1259cf4599..dffc1ecd6a 100644
--- a/test/battle/move_effect/steal_item.c
+++ b/test/battle/move_effect/steal_item.c
@@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Thief and Covet can't steal target's held item if user faint
PARAMETRIZE { move = MOVE_THIEF; }
PARAMETRIZE { move = MOVE_COVET; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { HP(1); };
+ PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ROCKY_HELMET); }
} WHEN {
TURN { MOVE(player, move); }
diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c
index ed0f6e5d93..cbcf39ad7b 100644
--- a/test/battle/move_effect/sticky_web.c
+++ b/test/battle/move_effect/sticky_web.c
@@ -50,13 +50,13 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION);
- PLAYER(SPECIES_WOBBUFFET) {Speed(5);}
- PLAYER(SPECIES_WOBBUFFET) {HP(1500); Speed(10);}
- PLAYER(SPECIES_WOBBUFFET) {Speed(10);}
- OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);}
- OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);}
- OPPONENT(SPECIES_WYNAUT) {Speed(10);}
- OPPONENT(SPECIES_ALAKAZAM) {Speed(100);}
+ PLAYER(SPECIES_WOBBUFFET) { Speed(5); }
+ PLAYER(SPECIES_WOBBUFFET) { HP(1500); Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(10); }
+ OPPONENT(SPECIES_ALAKAZAM) { Speed(100); }
} WHEN {
TURN { MOVE(playerRight, MOVE_STICKY_WEB); MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); }
TURN {}
@@ -102,10 +102,10 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the
{
u8 playerSetUpper, opponentSetUpper; // 0 left, 1 right
- PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 0; }
- PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 1; }
- PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 0; }
- PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 1; }
+ PARAMETRIZE { playerSetUpper = 0; opponentSetUpper = 0; }
+ PARAMETRIZE { playerSetUpper = 0; opponentSetUpper = 1; }
+ PARAMETRIZE { playerSetUpper = 1; opponentSetUpper = 0; }
+ PARAMETRIZE { playerSetUpper = 1; opponentSetUpper = 1; }
GIVEN {
PLAYER(SPECIES_SQUIRTLE);
@@ -193,18 +193,18 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o
bool8 hasReplacement;
// We need to make sure Sticky Web user saves for both sides, so it doesn't matter who sets it first.
- PARAMETRIZE {hasReplacement = TRUE;}
- PARAMETRIZE {hasReplacement = FALSE;}
+ PARAMETRIZE { hasReplacement = TRUE; }
+ PARAMETRIZE { hasReplacement = FALSE; }
GIVEN {
ASSUME(GetMoveEffect(MOVE_MEMENTO) == EFFECT_MEMENTO);
- PLAYER(SPECIES_SQUIRTLE) {Speed(5); }
- PLAYER(SPECIES_CHARMANDER) {Speed(5); }
- PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(5); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web.
- OPPONENT(SPECIES_CATERPIE) {Speed(7); }
- OPPONENT(SPECIES_WEEDLE) {Speed(7); }
+ PLAYER(SPECIES_SQUIRTLE) { Speed(5); }
+ PLAYER(SPECIES_CHARMANDER) { Speed(5); }
+ PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(5); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web.
+ OPPONENT(SPECIES_CATERPIE) { Speed(7); }
+ OPPONENT(SPECIES_WEEDLE) { Speed(7); }
if (hasReplacement) {
- OPPONENT(SPECIES_PIDGEY) {Speed(7); }
+ OPPONENT(SPECIES_PIDGEY) { Speed(7); }
}
} WHEN {
@@ -212,7 +212,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o
if (hasReplacement) {
TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft); SEND_OUT(opponentLeft, 2); }
} else {
- TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft);}
+ TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft); }
}
TURN { SWITCH(playerRight, 2); }
} SCENE {
@@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Explosion")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_EXPLOSION); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1);}
+ TURN { MOVE(player, MOVE_EXPLOSION); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1); }
} SCENE {
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c
index 06b29334d7..43580f6851 100644
--- a/test/battle/move_effect/stomping_tantrum.c
+++ b/test/battle/move_effect/stomping_tantrum.c
@@ -41,11 +41,11 @@ SINGLE_BATTLE_TEST("Stomping Tantrum will deal double damage if user failed to a
s16 damage[3];
PASSES_RANDOMLY(25, 100, RNG_PARALYSIS);
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); };
- OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_STOMPING_TANTRUM); MOVE(opponent, MOVE_THUNDER_WAVE); }
- TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); }
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); }
TURN { MOVE(player, MOVE_STOMPING_TANTRUM); }
TURN { MOVE(player, MOVE_STOMPING_TANTRUM); }
} SCENE {
@@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Stomping Tantrum will not deal double if it missed")
s16 damage[2];
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }
} WHEN {
TURN { MOVE(player, MOVE_STOMPING_TANTRUM); }
TURN { MOVE(player, MOVE_STOMPING_TANTRUM, hit: FALSE); }
diff --git a/test/battle/move_effect/take_heart.c b/test/battle/move_effect/take_heart.c
index 69560de74d..2377624b7d 100644
--- a/test/battle/move_effect/take_heart.c
+++ b/test/battle/move_effect/take_heart.c
@@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Take Heart cures the user of all status conditions")
PARAMETRIZE { status1 = STATUS1_PARALYSIS; }
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Status1(status1); };
+ PLAYER(SPECIES_WOBBUFFET) { Status1(status1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_TAKE_HEART); }
diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c
index 31390d9733..da3ee611ff 100644
--- a/test/battle/move_effect/telekinesis.c
+++ b/test/battle/move_effect/telekinesis.c
@@ -33,8 +33,8 @@ SINGLE_BATTLE_TEST("Telekinesis ends after 3 turns")
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(player, MOVE_TELEKINESIS); }
- TURN { }
- TURN { }
+ TURN {}
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Telekinesis!");
MESSAGE("The opposing Wynaut was hurled into the air!");
diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c
index 3d21c0693b..f74e1bddb4 100644
--- a/test/battle/move_effect/toxic_spikes.c
+++ b/test/battle/move_effect/toxic_spikes.c
@@ -208,10 +208,10 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_MEMENTO) == EFFECT_MEMENTO); // Faints the user.
- PLAYER(SPECIES_WOBBUFFET) {Speed(5); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(5); }
PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(1); }
- PLAYER(SPECIES_WYNAUT) {Speed(5); }
- OPPONENT(SPECIES_WOBBUFFET) {Speed(15); }
+ PLAYER(SPECIES_WYNAUT) { Speed(5); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(15); }
} WHEN {
TURN { MOVE(opponent, MOVE_TOXIC_SPIKES); }
TURN { SWITCH(player, 1); }
diff --git a/test/battle/move_effect/two_turns_attack.c b/test/battle/move_effect/two_turns_attack.c
index 661a45c110..94540f566e 100644
--- a/test/battle/move_effect/two_turns_attack.c
+++ b/test/battle/move_effect/two_turns_attack.c
@@ -305,7 +305,7 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in a Sandstorm", s16 damage)
PARAMETRIZE { move = MOVE_SANDSTORM; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
TURN { SKIP_TURN(player); }
@@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in a Sandstorm", s16 damage)
PARAMETRIZE { move = MOVE_SANDSTORM; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
TURN { SKIP_TURN(player); }
@@ -341,7 +341,7 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage)
PARAMETRIZE { move = MOVE_HAIL; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
TURN { SKIP_TURN(player); }
@@ -359,7 +359,7 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage)
PARAMETRIZE { move = MOVE_HAIL; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
TURN { SKIP_TURN(player); }
diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c
index 59d6057521..49dc21bf49 100644
--- a/test/battle/move_effect/upper_hand.c
+++ b/test/battle/move_effect/upper_hand.c
@@ -127,7 +127,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use Upper Hand unless it has seen a priority mov
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == 1);
- PLAYER(SPECIES_WOBBUFFET) {Moves(move); }
+ PLAYER(SPECIES_WOBBUFFET) { Moves(move); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_UPPER_HAND, MOVE_KARATE_CHOP); }
} WHEN {
TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_KARATE_CHOP); }
diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c
index 0474383483..3586b71a32 100644
--- a/test/battle/move_effect/weather_ball.c
+++ b/test/battle/move_effect/weather_ball.c
@@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Rock-type move
PARAMETRIZE { move = MOVE_SANDSTORM; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(player, move); }
TURN { MOVE(player, MOVE_WEATHER_BALL); }
@@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); };
+ OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); }
} WHEN {
TURN { MOVE(player, move); }
TURN { MOVE(player, MOVE_WEATHER_BALL); }
diff --git a/test/battle/move_effect/wish.c b/test/battle/move_effect/wish.c
index a901ce0bbf..6e9114bc09 100644
--- a/test/battle/move_effect/wish.c
+++ b/test/battle/move_effect/wish.c
@@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when not switching")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_WISH); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
@@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Wish heals the user at the end of the next turn")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_WISH); MOVE(opponent, MOVE_POUND); }
- TURN { }
+ TURN {}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent);
diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c
index e6df81dc70..c0b2bc2979 100644
--- a/test/battle/move_effect_secondary/bug_bite.c
+++ b/test/battle/move_effect_secondary/bug_bite.c
@@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite")
ASSUME(gItemsInfo[ITEM_TANGA_BERRY].holdEffect == HOLD_EFFECT_RESIST_BERRY);
ASSUME(gItemsInfo[ITEM_TANGA_BERRY].holdEffectParam == TYPE_BUG);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_TANGA_BERRY); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_TANGA_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_BUG_BITE); }
} SCENE {
diff --git a/test/battle/move_effect_secondary/ion_deluge.c b/test/battle/move_effect_secondary/ion_deluge.c
index 21d37de407..003bfc825f 100644
--- a/test/battle/move_effect_secondary/ion_deluge.c
+++ b/test/battle/move_effect_secondary/ion_deluge.c
@@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Plasma Fists does not set up Ion Deluge if it does not conne
SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate")
{
GIVEN {
- PLAYER(SPECIES_KRABBY) { Speed(300); };
+ PLAYER(SPECIES_KRABBY) { Speed(300); }
OPPONENT(SPECIES_SYLVEON) { Speed(1); Ability(ABILITY_PIXILATE); }
} WHEN {
TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_SCRATCH); }
diff --git a/test/battle/move_effect_secondary/order_up.c b/test/battle/move_effect_secondary/order_up.c
index bfabd6e3e3..b24b366c56 100644
--- a/test/battle/move_effect_secondary/order_up.c
+++ b/test/battle/move_effect_secondary/order_up.c
@@ -17,7 +17,7 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form")
PLAYER(species) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); };
+ OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
} WHEN {
TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); }
} SCENE {
@@ -65,9 +65,9 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form even if
PLAYER(species) { HP(1); Status1(STATUS1_POISON); Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); };
+ OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
} WHEN {
- TURN { }
+ TURN {}
TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
diff --git a/test/battle/move_effect_secondary/recharge.c b/test/battle/move_effect_secondary/recharge.c
index 9146083675..c4915f4b45 100644
--- a/test/battle/move_effect_secondary/recharge.c
+++ b/test/battle/move_effect_secondary/recharge.c
@@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Recharge moves make the user unable to attack for exactly on
PLAYER(SPECIES_WOBBUFFET) { }
OPPONENT(SPECIES_WOBBUFFET) { }
} WHEN {
- TURN { MOVE(player, MOVE_METEOR_ASSAULT);}
- TURN { SKIP_TURN(player);}
- TURN { MOVE(player, MOVE_TACKLE);}
+ TURN { MOVE(player, MOVE_METEOR_ASSAULT); }
+ TURN { SKIP_TURN(player); }
+ TURN { MOVE(player, MOVE_TACKLE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_METEOR_ASSAULT, player);
MESSAGE("Wobbuffet must recharge!");
@@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Recharge moves don't timeout when all battlers are rechargin
PLAYER(SPECIES_WOBBUFFET) { }
OPPONENT(SPECIES_WOBBUFFET) { }
} WHEN {
- TURN { MOVE(player, MOVE_METEOR_ASSAULT); MOVE(opponent, MOVE_METEOR_ASSAULT);}
+ TURN { MOVE(player, MOVE_METEOR_ASSAULT); MOVE(opponent, MOVE_METEOR_ASSAULT); }
}
}
diff --git a/test/battle/move_effect_secondary/remove_status.c b/test/battle/move_effect_secondary/remove_status.c
index f1219d7ed0..02389a50ed 100644
--- a/test/battle/move_effect_secondary/remove_status.c
+++ b/test/battle/move_effect_secondary/remove_status.c
@@ -19,8 +19,7 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst
if (ability == ABILITY_INNER_FOCUS)
{
MESSAGE("The substitute took damage for the opposing Seismitoad!");
- NONE_OF
- {
+ NONE_OF {
MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage.
MESSAGE("The opposing Seismitoad was cured of paralysis!");
STATUS_ICON(opponent, none: TRUE);
@@ -75,15 +74,17 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WAKE_UP_SLAP); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player);
- if (ability == ABILITY_INNER_FOCUS) {
+ if (ability == ABILITY_INNER_FOCUS)
+ {
MESSAGE("The substitute took damage for the opposing Seismitoad!");
- NONE_OF
- {
+ NONE_OF {
MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage.
MESSAGE("The opposing Seismitoad woke up!");
STATUS_ICON(opponent, none: TRUE);
}
- } else {
+ }
+ else
+ {
MESSAGE("The opposing Seismitoad woke up!");
STATUS_ICON(opponent, none: TRUE);
}
@@ -104,9 +105,12 @@ SINGLE_BATTLE_TEST("Wake-Up Slap gets increased power against sleeping targets")
TURN { MOVE(player, MOVE_WAKE_UP_SLAP); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player);
- if (status1 == STATUS1_SLEEP) {
+ if (status1 == STATUS1_SLEEP)
+ {
MESSAGE("The opposing Lotad fainted!");
- } else {
+ }
+ else
+ {
NOT MESSAGE("The opposing Lotad fainted!");
MESSAGE("The opposing Lotad used Celebrate!");
}
diff --git a/test/battle/move_effect_secondary/salt_cure.c b/test/battle/move_effect_secondary/salt_cure.c
index e304d2d447..70ba855b95 100644
--- a/test/battle/move_effect_secondary/salt_cure.c
+++ b/test/battle/move_effect_secondary/salt_cure.c
@@ -32,8 +32,8 @@ SINGLE_BATTLE_TEST("Salt Cure inflicts 1/4 to Water/Steel types of their maximum
{
u32 species;
- PARAMETRIZE { species = SPECIES_LAPRAS; };
- PARAMETRIZE { species = SPECIES_JIRACHI; };
+ PARAMETRIZE { species = SPECIES_LAPRAS; }
+ PARAMETRIZE { species = SPECIES_JIRACHI; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Salt Cure residual damage does not inflict any damage agains
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); };
+ OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); }
} WHEN {
TURN { MOVE(player, MOVE_SALT_CURE); }
} SCENE {
diff --git a/test/battle/move_effect_secondary/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c
index c2724a0f38..3d6438a4ba 100644
--- a/test/battle/move_effect_secondary/throat_chop.c
+++ b/test/battle/move_effect_secondary/throat_chop.c
@@ -9,8 +9,8 @@ ASSUMPTIONS
SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves")
{
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) { Speed(100); };
- OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(100); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }
} WHEN {
TURN { MOVE(player, MOVE_THROAT_CHOP); MOVE(opponent, MOVE_HYPER_VOICE); }
TURN {}
diff --git a/test/battle/move_effects_combined/infernal_parade.c b/test/battle/move_effects_combined/infernal_parade.c
index 266718d2e9..4310dc8876 100644
--- a/test/battle/move_effects_combined/infernal_parade.c
+++ b/test/battle/move_effects_combined/infernal_parade.c
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Infernal Parade's power doubles if the target has a status c
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); };
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
} WHEN {
TURN { MOVE(player, MOVE_INFERNAL_PARADE); }
} SCENE {
diff --git a/test/battle/move_flags/recoil.c b/test/battle/move_flags/recoil.c
index 7a71187c82..2593a0e1f6 100644
--- a/test/battle/move_flags/recoil.c
+++ b/test/battle/move_flags/recoil.c
@@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Recoil: Flare Blitz is absorbed by Flash Fire and no recoil
GIVEN {
ASSUME(GetMoveRecoil(MOVE_FLARE_BLITZ) > 0);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_VULPIX) { Ability(ABILITY_FLASH_FIRE); };
+ OPPONENT(SPECIES_VULPIX) { Ability(ABILITY_FLASH_FIRE); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_FLARE_BLITZ); }
} SCENE {
@@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Recoil: The correct amount of recoil damage is dealt after t
GIVEN {
ASSUME(GetMoveRecoil(MOVE_TAKE_DOWN) == 25);
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); };
+ OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); }
} WHEN {
TURN { MOVE(player, MOVE_TAKE_DOWN); }
} SCENE {
diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c
index 085bd05fda..ba14671b43 100644
--- a/test/battle/sleep_clause.c
+++ b/test/battle/sleep_clause.c
@@ -286,7 +286,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn will fail when sleep clause is active")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_YAWN); }
- TURN { }
+ TURN {}
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_YAWN); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent);
@@ -302,12 +302,12 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn will fail when sleep clause is active")
}
}
-SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with sleep clause active")
+SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the time with sleep clause active")
{
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
@@ -318,7 +318,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with
TURN { MOVE(opponent, MOVE_SPORE); }
TURN { SWITCH(player, 1); }
TURN { MOVE(player, MOVE_SCRATCH); }
- TURN { }
+ TURN {}
} SCENE {
ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player);
@@ -327,12 +327,12 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with
}
}
-DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with sleep clause active (Doubles)")
+DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the time with sleep clause active (Doubles)")
{
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
@@ -341,7 +341,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with
OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_SPORE, target:playerRight); MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft);}
+ TURN { MOVE(opponentLeft, MOVE_SPORE, target:playerRight); MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponentLeft);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, playerRight);
@@ -360,7 +360,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
@@ -388,7 +388,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
@@ -834,11 +834,14 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo
SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mon is woken up by Shed Skin")
{
- if (B_ABILITY_TRIGGER_CHANCE == GEN_4)
- PASSES_RANDOMLY(30, 100, RNG_SHED_SKIN);
- else
- PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN);
+ u32 config, passes;
+ PARAMETRIZE { config = GEN_3; passes = 33; }
+ PARAMETRIZE { config = GEN_4; passes = 30; }
+ PARAMETRIZE { config = GEN_5; passes = 33; }
+
+ PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN);
GIVEN {
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config);
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
@@ -1019,7 +1022,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo
OPPONENT(SPECIES_ZIGZAGOON);
} WHEN {
TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentLeft); MOVE(playerRight, MOVE_SCRATCH, target: opponentLeft); }
- TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentRight);}
+ TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentRight); }
} SCENE {
MESSAGE("Zigzagoon used Spore!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, playerLeft);
@@ -1216,7 +1219,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep caused by Effect Spore does not prevent
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL);
@@ -1253,7 +1256,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
ASSUME(MoveMakesContact(MOVE_SCRATCH));
@@ -1265,6 +1268,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat
TURN {}
TURN {}
TURN {}
+ TURN {}
+ TURN {}
TURN { MOVE(opponent, MOVE_SPORE); }
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SPORE); }
} SCENE {
@@ -1291,7 +1296,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
- ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL);
@@ -1468,6 +1473,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon slept due to Effect Spore befo
PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
GIVEN {
FLAG_SET(B_FLAG_SLEEP_CLAUSE);
+ WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5);
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP);
ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN);
@@ -1533,7 +1539,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: If both Pokémon on one side are Yawn'd at the
OPPONENT(SPECIES_ZIGZAGOON) { Speed(2); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_YAWN, target: opponentLeft); MOVE(playerRight, MOVE_YAWN, target: opponentRight); }
- TURN { }
+ TURN {}
} SCENE {
MESSAGE("The opposing Zigzagoon grew drowsy!");
MESSAGE("The opposing Zigzagoon grew drowsy!");
diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c
index 68b9f40273..477af564c8 100644
--- a/test/battle/spread_moves.c
+++ b/test/battle/spread_moves.c
@@ -6,7 +6,7 @@ DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly af
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); }
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); }
- OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(260); HP(131); };
+ OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(260); HP(131); }
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_PIKACHU);
diff --git a/test/battle/starting_status/terrain.c b/test/battle/starting_status/terrain.c
index 3d84dba000..7c4fd6d29e 100644
--- a/test/battle/starting_status/terrain.c
+++ b/test/battle/starting_status/terrain.c
@@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
// More than 5 turns
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
switch (terrain)
{
@@ -73,12 +73,12 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts
} WHEN {
// More than 5 turns
TURN { MOVE(player, viaMove == TRUE ? MOVE_GRASSY_TERRAIN : MOVE_CELEBRATE); }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
- TURN { ; }
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
} SCENE {
// Electric Terrain at battle's start
MESSAGE("An electric current is running across the battlefield!");
diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c
index 33eae7bd85..d283307590 100644
--- a/test/battle/status1/burn.c
+++ b/test/battle/status1/burn.c
@@ -7,7 +7,7 @@ ASSUMPTIONS
ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN);
}
-SINGLE_BATTLE_TEST("Burn deals 1/8th damage (Gen1-6) or 1/16th (Gen7+) per turn")
+SINGLE_BATTLE_TEST("Burn deals 1/8th damage (Gen2-6) or 1/16th (Gen1 and Gen7+) per turn")
{
u32 j, config, value;
PARAMETRIZE { config = GEN_7; value = 16; }
diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c
index 12104438ac..89f0b91100 100644
--- a/test/battle/status1/freeze.c
+++ b/test/battle/status1/freeze.c
@@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Freeze isn't thawed if opponent is asleep during thawing att
GIVEN {
ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); }
- OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); };
+ OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
} WHEN {
TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
diff --git a/test/battle/switch_in_abilities.c b/test/battle/switch_in_abilities.c
index 4d125ddce8..1fc5e8a935 100644
--- a/test/battle/switch_in_abilities.c
+++ b/test/battle/switch_in_abilities.c
@@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's s
PLAYER(SPECIES_EKANS) { Speed(spdPlayer); Ability(ABILITY_INTIMIDATE); }
OPPONENT(SPECIES_NINETALES) { Speed(spdOpponent); Ability(ABILITY_DROUGHT); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
if (spdPlayer > spdOpponent) {
ABILITY_POPUP(player, ABILITY_INTIMIDATE);
@@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's s
OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent1); Ability(ABILITY_DOWNLOAD); }
OPPONENT(SPECIES_PINSIR) { Speed(spdOpponent2); Ability(ABILITY_MOLD_BREAKER); }
} WHEN {
- TURN { ; }
+ TURN {}
} SCENE {
if (spdPlayer1 == 5) {
ABILITY_POPUP(playerLeft, ABILITY_DRIZZLE);
@@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swi
OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent); Ability(ABILITY_DOWNLOAD); }
} WHEN {
TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); }
- TURN { ; }
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Explosion!");
if (spdPlayer > spdOpponent) {
@@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swi
OPPONENT(SPECIES_VULPIX_ALOLA) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); }
- TURN { ; }
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Explosion!");
if (spdPlayer1 == 5) {
@@ -146,7 +146,7 @@ MULTI_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swit
MULTI_OPPONENT_B(SPECIES_VULPIX_ALOLA) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 1); SEND_OUT(opponentLeft, 1); SEND_OUT(playerRight, 4); SEND_OUT(opponentRight, 4); }
- TURN { ; }
+ TURN {}
} SCENE {
MESSAGE("Wobbuffet used Explosion!");
if (spdPlayer1 == 5) {
diff --git a/test/battle/test_runner_features.c b/test/battle/test_runner_features.c
index 25a75f9ce5..d76740a08e 100644
--- a/test/battle/test_runner_features.c
+++ b/test/battle/test_runner_features.c
@@ -13,11 +13,11 @@ SINGLE_BATTLE_TEST("Forced abilities activate on switch-in")
{
GIVEN {
PLAYER(SPECIES_ALAKAZAM);
- PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400);}
+ PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400); }
OPPONENT(SPECIES_ARON);
- OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); };
+ OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); }
} WHEN {
- TURN { SWITCH(player, 1); SWITCH(opponent, 1);}
+ TURN { SWITCH(player, 1); SWITCH(opponent, 1); }
} SCENE {
ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
@@ -30,15 +30,15 @@ SINGLE_BATTLE_TEST("Setting level doesn't overwrite set stats")
{
u32 level = 0;
- PARAMETRIZE{level = 1;}
- PARAMETRIZE{level = 10;}
- PARAMETRIZE{level = 50;}
- PARAMETRIZE{level = 99;}
+ PARAMETRIZE { level = 1; }
+ PARAMETRIZE { level = 10; }
+ PARAMETRIZE { level = 50; }
+ PARAMETRIZE { level = 99; }
GIVEN {
- PLAYER(SPECIES_WOBBUFFET) {HP(5); MaxHP(10); Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Level(level); };
- OPPONENT(SPECIES_WOBBUFFET) {Speed(1);}
+ PLAYER(SPECIES_WOBBUFFET) { HP(5); MaxHP(10); Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Level(level); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE);}
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
} THEN {
EXPECT_EQ(player->hp, 5);
EXPECT_EQ(player->maxHP, 10);
@@ -53,8 +53,8 @@ SINGLE_BATTLE_TEST("Setting level doesn't overwrite set stats")
SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (not HP)")
{
GIVEN {
- PLAYER(SPECIES_DIANCIE) {Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Item(ITEM_DIANCITE);}
- OPPONENT(SPECIES_WOBBUFFET) {Speed(1);}
+ PLAYER(SPECIES_DIANCIE) { Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Item(ITEM_DIANCITE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
@@ -71,10 +71,10 @@ SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (not HP)")
SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (HP)")
{
GIVEN {
- PLAYER(SPECIES_TERAPAGOS) {HP(5); MaxHP(10); TeraType(TYPE_STELLAR);}
- OPPONENT(SPECIES_WOBBUFFET) {}
+ PLAYER(SPECIES_TERAPAGOS) { HP(5); MaxHP(10); TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE);}
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE); }
} THEN {
EXPECT_EQ(player->hp, 5);
EXPECT_EQ(player->maxHP, 10);
diff --git a/test/battle/trainer_slides.c b/test/battle/trainer_slides.c
index 972e359f87..8f7bae9b09 100644
--- a/test/battle/trainer_slides.c
+++ b/test/battle/trainer_slides.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Before First Turn")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { }
+ TURN {}
} SCENE {
MESSAGE("This message plays before the first turn.{PAUSE_UNTIL_PRESS}");
}
@@ -157,8 +157,8 @@ SINGLE_BATTLE_TEST("Trainer Slide: Last Low Hp")
gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_LAST_LOW_HP;
GIVEN {
ASSUME(GetMoveEffect(MOVE_FALSE_SWIPE) == EFFECT_FALSE_SWIPE);
- PLAYER(SPECIES_WOBBUFFET) { Attack(999);}
- OPPONENT(SPECIES_WOBBUFFET) { Defense(1);}
+ PLAYER(SPECIES_WOBBUFFET) { Attack(999); }
+ OPPONENT(SPECIES_WOBBUFFET) { Defense(1); }
} WHEN {
TURN { MOVE(player, MOVE_FALSE_SWIPE); }
} SCENE {
@@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Mega Evolution")
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_LOPUNNY) {Item(ITEM_LOPUNNITE); };
+ OPPONENT(SPECIES_LOPUNNY) { Item(ITEM_LOPUNNITE); }
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
diff --git a/test/battle/volatiles/confusion.c b/test/battle/volatiles/confusion.c
index 540abbd5a6..b9a1237955 100644
--- a/test/battle/volatiles/confusion.c
+++ b/test/battle/volatiles/confusion.c
@@ -12,8 +12,8 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power")
GIVEN {
WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig);
ASSUME(GetMovePower(MOVE_SCRATCH) == 40);
- PLAYER(SPECIES_WOBBUFFET) { Speed(1); };
- OPPONENT(SPECIES_WOBBUFFET) { Speed(2); };
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH, WITH_RNG(RNG_DAMAGE_MODIFIER, 0)); MOVE(player, MOVE_CONFUSE_RAY); }
TURN;
@@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Confusion self hit does not consume Gems")
PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION);
GIVEN {
WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig);
- PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); };
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_SCRATCH); }
diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c
index 3a0dd53026..c38370a891 100644
--- a/test/battle/weather/hail.c
+++ b/test/battle/weather/hail.c
@@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn")
PLAYER(SPECIES_GLALIE);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {MOVE(player, MOVE_HAIL);}
+ TURN { MOVE(player, MOVE_HAIL); }
} SCENE {
MESSAGE("The opposing Wobbuffet is buffeted by the hail!");
HP_BAR(opponent, captureDamage: &hailDamage);
@@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_GLALIE);
} WHEN {
- TURN {MOVE(player, MOVE_HAIL);}
+ TURN { MOVE(player, MOVE_HAIL); }
} SCENE {
NOT MESSAGE("The opposing Glalie is buffeted by the hail!");
}
diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c
index 78dc0ecdce..55b5907ffb 100644
--- a/test/battle/weather/sandstorm.c
+++ b/test/battle/weather/sandstorm.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn")
PLAYER(SPECIES_SANDSLASH);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN {MOVE(player, MOVE_SANDSTORM);}
+ TURN { MOVE(player, MOVE_SANDSTORM); }
} SCENE {
MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!");
HP_BAR(opponent, captureDamage: &sandstormDamage);
diff --git a/test/battle/weather/strong_winds.c b/test/battle/weather/strong_winds.c
index 26b0a51d0d..f319a7a229 100644
--- a/test/battle/weather/strong_winds.c
+++ b/test/battle/weather/strong_winds.c
@@ -1,17 +1,249 @@
#include "global.h"
#include "test/battle.h"
-TO_DO_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers") // Electric, Ice, Rock
-TO_DO_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers - Inverse Battle") // Bug, Fighting, Grass
-TO_DO_BATTLE_TEST("Strong winds don't affect Stealth Rock's damage")
-TO_DO_BATTLE_TEST("Strong winds makes Sunny Day fail")
-TO_DO_BATTLE_TEST("Strong winds makes Rain Dance fail")
-TO_DO_BATTLE_TEST("Strong winds makes Sandstorm fail")
-TO_DO_BATTLE_TEST("Strong winds makes Hail fail")
-TO_DO_BATTLE_TEST("Strong winds makes Snowscape fail") // Extrapolation
-TO_DO_BATTLE_TEST("Strong winds makes Drought fail to activate")
-TO_DO_BATTLE_TEST("Strong winds makes Drizzle fail to activate")
-TO_DO_BATTLE_TEST("Strong winds makes Sand Stream fail to activate")
-TO_DO_BATTLE_TEST("Strong winds makes Snow Warning fail to activate")
-TO_DO_BATTLE_TEST("Strong winds can be replaced by Desolate Land")
-TO_DO_BATTLE_TEST("Strong winds can be replaced by Primordial Sea")
+DOUBLE_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers") // Electric, Ice, Rock
+{
+ u16 move;
+ bool32 targetPlayer;
+
+ PARAMETRIZE { move = MOVE_THUNDER_SHOCK; targetPlayer = TRUE; }
+ PARAMETRIZE { move = MOVE_ICE_BEAM; targetPlayer = TRUE; }
+ PARAMETRIZE { move = MOVE_ROCK_THROW; targetPlayer = TRUE; }
+ PARAMETRIZE { move = MOVE_THUNDER_SHOCK; targetPlayer = FALSE; }
+ PARAMETRIZE { move = MOVE_ICE_BEAM; targetPlayer = FALSE; }
+ PARAMETRIZE { move = MOVE_ROCK_THROW; targetPlayer = FALSE; }
+
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
+ ASSUME(GetMoveType(MOVE_ICE_BEAM) == TYPE_ICE);
+ ASSUME(GetMoveType(MOVE_ROCK_THROW) == TYPE_ROCK);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ PLAYER(SPECIES_PIDGEY);
+ OPPONENT(SPECIES_PIDGEY);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ if (targetPlayer)
+ TURN { MOVE(opponentLeft, move, target: playerRight); }
+ else
+ TURN { MOVE(playerRight, move, target: opponentLeft); }
+ } SCENE {
+ if (targetPlayer) {
+ if (move == MOVE_THUNDER_SHOCK)
+ MESSAGE("The opposing Pidgey used Thunder Shock!");
+ else if (move == MOVE_ICE_BEAM)
+ MESSAGE("The opposing Pidgey used Ice Beam!");
+ else
+ MESSAGE("The opposing Pidgey used Rock Throw!");
+ MESSAGE("The mysterious strong winds weakened the attack!");
+ ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft);
+ } else {
+ if (move == MOVE_THUNDER_SHOCK)
+ MESSAGE("Pidgey used Thunder Shock!");
+ else if (move == MOVE_ICE_BEAM)
+ MESSAGE("Pidgey used Ice Beam!");
+ else
+ MESSAGE("Pidgey used Rock Throw!");
+ MESSAGE("The mysterious strong winds weakened the attack!");
+ ANIMATION(ANIM_TYPE_MOVE, move, playerRight);
+ }
+ }
+}
+
+DOUBLE_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers - Inverse Battle", s16 damagePlayer, s16 damageOpponent) // Bug, Fighting, Grass
+{
+ u16 move;
+ bool32 strongWinds;
+
+ PARAMETRIZE { move = MOVE_BUG_BITE; strongWinds = FALSE; }
+ PARAMETRIZE { move = MOVE_BUG_BITE; strongWinds = TRUE; }
+ PARAMETRIZE { move = MOVE_KARATE_CHOP; strongWinds = FALSE; }
+ PARAMETRIZE { move = MOVE_KARATE_CHOP; strongWinds = TRUE; }
+ PARAMETRIZE { move = MOVE_VINE_WHIP; strongWinds = FALSE; }
+ PARAMETRIZE { move = MOVE_VINE_WHIP; strongWinds = TRUE; }
+
+ GIVEN {
+ FLAG_SET(B_FLAG_INVERSE_BATTLE);
+ ASSUME(GetMoveType(MOVE_BUG_BITE) == TYPE_BUG);
+ ASSUME(GetMoveType(MOVE_KARATE_CHOP) == TYPE_FIGHTING);
+ ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS);
+ ASSUME(GetSpeciesType(SPECIES_TORNADUS, 0) == TYPE_FLYING);
+ ASSUME(GetSpeciesType(SPECIES_TORNADUS, 1) == TYPE_FLYING);
+ if (strongWinds)
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ else
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_TORNADUS);
+ OPPONENT(SPECIES_TORNADUS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ MOVE(opponentLeft, move, target: playerRight);
+ MOVE(playerRight, move, target: opponentLeft);
+ }
+ } SCENE {
+ HP_BAR(playerRight, captureDamage: &results[i].damagePlayer);
+ HP_BAR(opponentLeft, captureDamage: &results[i].damageOpponent);
+ } FINALLY {
+ EXPECT_GT(results[0].damagePlayer, results[1].damagePlayer);
+ EXPECT_GT(results[0].damageOpponent, results[1].damageOpponent);
+ EXPECT_GT(results[2].damagePlayer, results[3].damagePlayer);
+ EXPECT_GT(results[2].damageOpponent, results[3].damageOpponent);
+ EXPECT_GT(results[4].damagePlayer, results[5].damagePlayer);
+ EXPECT_GT(results[4].damageOpponent, results[5].damageOpponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds prevent Weakness Policy from activating on Flying-type weaknesses")
+{
+ GIVEN {
+ ASSUME(GetItemHoldEffect(ITEM_WEAKNESS_POLICY) == HOLD_EFFECT_WEAKNESS_POLICY);
+ ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_THUNDER_SHOCK); }
+ OPPONENT(SPECIES_PIDGEY) { Item(ITEM_WEAKNESS_POLICY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_THUNDER_SHOCK); }
+ } SCENE {
+ MESSAGE("Rayquaza used Thunder Shock!");
+ MESSAGE("The mysterious strong winds weakened the attack!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, player);
+ HP_BAR(opponent);
+ NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("Anticipation still triggers with Strong Winds active")
+{
+ GIVEN {
+ ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_THUNDER_SHOCK, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_ANTICIPATION); Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_ANTICIPATION);
+ MESSAGE("Rayquaza used Celebrate!");
+ MESSAGE("The opposing Pidgey used Celebrate!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Anticipation still triggers with Strong Winds active in Inverse Battle")
+{
+ GIVEN {
+ FLAG_SET(B_FLAG_INVERSE_BATTLE);
+ ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS);
+ ASSUME(GetSpeciesType(SPECIES_TORNADUS, 0) == TYPE_FLYING);
+ ASSUME(GetSpeciesType(SPECIES_TORNADUS, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_VINE_WHIP, MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_TORNADUS) { Ability(ABILITY_ANTICIPATION); Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_ANTICIPATION);
+ MESSAGE("Rayquaza used Celebrate!");
+ MESSAGE("The opposing Tornadus used Celebrate!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds don't affect Stealth Rock's damage")
+{
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_STEALTH_ROCK) == EFFECT_STEALTH_ROCK);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL);
+ ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_PIDGEY);
+ OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_STEALTH_ROCK); }
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ s32 maxHP = GetMonData(&PLAYER_PARTY[1], MON_DATA_MAX_HP);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent);
+ HP_BAR(player, damage: maxHP / 4);
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds block weather-setting moves")
+{
+ u16 move;
+ PARAMETRIZE { move = MOVE_SUNNY_DAY; }
+ PARAMETRIZE { move = MOVE_RAIN_DANCE; }
+ PARAMETRIZE { move = MOVE_SANDSTORM; }
+ PARAMETRIZE { move = MOVE_HAIL; }
+ PARAMETRIZE { move = MOVE_SNOWSCAPE; }
+
+ GIVEN {
+ ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY);
+ ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE);
+ ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
+ ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL);
+ ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE);
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, move); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds prevent other weather abilities")
+{
+ u16 ability, species;
+ PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; }
+ PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; }
+ PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; }
+ PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; }
+
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ability);
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds can be replaced by Desolate Land")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_DESOLATE_LAND);
+ MESSAGE("The sunlight turned extremely harsh!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Strong winds can be replaced by Primordial Sea")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); }
+ } WHEN {
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA);
+ MESSAGE("A heavy rain began to fall!");
+ } THEN {
+ EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL);
+ }
+}
diff --git a/tools/wav2agb/Makefile b/tools/wav2agb/Makefile
index a121730e95..a38f71758f 100644
--- a/tools/wav2agb/Makefile
+++ b/tools/wav2agb/Makefile
@@ -1,33 +1,23 @@
-GIT_VERSION := $(shell git describe --abbrev=7 --dirty --always --tags)
+CXX ?= g++
+
+CXXFLAGS := -Wall -Werror -std=c++17 -O2
+
+SRCS := $(wildcard *.cpp)
+HEADERS := $(wildcard *.h)
-CXX = g++
-STRIP = strip
-CXXFLAGS = -Wall -Wextra -Wconversion -std=c++17 -O2 -g -DGIT_VERSION=\"$(GIT_VERSION)\"
EXE :=
ifeq ($(OS),Windows_NT)
EXE := .exe
endif
BINARY = wav2agb$(EXE)
-SRC_FILES = $(wildcard *.cpp)
-OBJ_FILES = $(SRC_FILES:.cpp=.o)
+.PHONY: all clean
-LDFLAGS :=
-
-ifneq (,$(RELEASE))
- LDFLAGS += -static
- CXXFLAGS += -flto
-endif
-
-.PHONY: clean clean
all: $(BINARY)
+ @:
+
+$(BINARY): $(SRCS) $(HEADERS)
+ $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS)
clean:
- rm -f $(OBJ_FILES) $(BINARY)
-
-$(BINARY): $(OBJ_FILES)
- $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^
- if [ $(RELEASE)x != x ]; then strip -s $@; fi
-
-%.o: %.cpp
- $(CXX) -c -o $@ $< $(CXXFLAGS)
+ $(RM) $(BINARY)
diff --git a/tools/wav2agb/README.md b/tools/wav2agb/README.md
index 86f2660231..3b8b32e9b8 100644
--- a/tools/wav2agb/README.md
+++ b/tools/wav2agb/README.md
@@ -6,9 +6,12 @@ This copy has been slightly modified from [ipatix's original implementation](htt
2. Support reading an override "pitch" value from a custom `agbp` RIFF chunk.
- This is needed to properly match some samples, due to float-point rounding errors when attempting to infer the pitch/sample rate from the .wav file's sample rate.
- If the custom `agbp` chunk isn't present, it will simply use the .wav's sample rate to calculate this "pitch" value.
-3. Optionally omits trailing padding from compressed output.
+3. Support reading an override "loop end" value from a custom `agbl` RIFF chunk.
+ - This is needed to properly match vanilla samples, due their their inherent off-by-one error (the last sample is mistakenly ignored).
+ - This `agbl` chunk can be added to existing .wav files with the `--set-agbl` option (described below).
+4. Optionally omits trailing padding from compressed output.
-Usage:
+Usage:
```
Usage: wav2agb [options] [