Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion asm/include/battle_commands.inc
Original file line number Diff line number Diff line change
Expand Up @@ -1633,7 +1633,13 @@
.long (((\arg_2 - .) / 4) - 1)
.endm

.equ BASE_ENGINE_BTL_SCR_CMDS_MAX, 298
.macro TryActivateReceiver arg_0, arg_1
.long 299
.long \arg_0
.long (((\arg_1 - .) / 4) - 1)
.endm

.equ BASE_ENGINE_BTL_SCR_CMDS_MAX, 299

// .macro YourCustomCommand
// .long (BASE_ENGINE_BTL_SCR_CMDS_MAX + 1)
Expand Down
1 change: 1 addition & 0 deletions data/battle_scripts/subscripts/subscript_0006_FAINT_MON.s
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ _000:
Wait
WaitButtonABTime 30
Call BATTLE_SUBSCRIPT_TRY_CLEAR_PRIMAL_WEATHERS_FAINTING
Call BATTLE_SUBSCRIPT_RECEIVER
Call BATTLE_SUBSCRIPT_SOUL_HEART
CompareVarToValue OPCODE_FLAG_SET, BSCRIPT_VAR_BATTLE_STATUS_2, BATTLE_STATUS2_NO_EXP_GAINED, _025

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ _047:
WaitTime 72
HealthbarSlideIn BATTLER_CATEGORY_SWITCHED_MON
Wait
SetCurrentMoveSwitchingStatus CURRENT_MOVE_NO_SWITCH
Call BATTLE_SUBSCRIPT_HEALING_WISH
Call BATTLE_SUBSCRIPT_HAZARDS_CHECK
CompareVarToValue OPCODE_GT, BSCRIPT_VAR_BATTLER_FAINTED, BATTLER_ENEMY2, _081
Expand Down
24 changes: 24 additions & 0 deletions data/battle_scripts/subscripts/subscript_0523_RECEIVER.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include "constants/battle_constants.h"
.include "battle_commands.inc"

.data

_000:
CheckAbility CHECK_OPCODE_HAVE, BATTLER_RELATIVE_ALLY|BATTLER_CATEGORY_FAINTED_MON, ABILITY_RECEIVER, _tryReceiver
CheckAbility CHECK_OPCODE_HAVE, BATTLER_RELATIVE_ALLY|BATTLER_CATEGORY_FAINTED_MON, ABILITY_POWER_OF_ALCHEMY, _tryReceiver
Goto _end

_tryReceiver:
TryActivateReceiver BATTLER_CATEGORY_FAINTED_MON, _end
UpdateMonDataFromVar OPCODE_GET, BATTLER_CATEGORY_FAINTED_MON, BMON_DATA_ABILITY, BSCRIPT_VAR_CALC_TEMP
AbilityPopup BATTLER_CATEGORY_MSG_BATTLER_TEMP
UpdateMonDataFromVar OPCODE_SET, BATTLER_CATEGORY_MSG_BATTLER_TEMP, BMON_DATA_ABILITY, BSCRIPT_VAR_CALC_TEMP
AbilityPopup BATTLER_CATEGORY_MSG_BATTLER_TEMP
// {0}’s {1} was taken over!
PrintMessage 1795, TAG_NICKNAME_ABILITY, BATTLER_CATEGORY_FAINTED_MON, BATTLER_CATEGORY_FAINTED_MON
Wait
WaitButtonABTime 30
Call BATTLE_SUBSCRIPT_SWITCH_IN_ABILITY_CHECK

_end:
End
12 changes: 8 additions & 4 deletions data/battle_tests/abilities/good_as_gold/block_targeted_status.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ BEGIN_TEST
{ .species = SPECIES_NONE } },
.playerScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
Expand All @@ -76,7 +76,7 @@ BEGIN_TEST
},
{
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
Expand All @@ -86,7 +86,7 @@ BEGIN_TEST
} },
.enemyScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_PLAYER_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_MOVE_SLOT_1, BATTLER_PLAYER_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
Expand All @@ -96,7 +96,7 @@ BEGIN_TEST
},
{
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_MOVE_SLOT_2, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
Expand All @@ -112,6 +112,10 @@ BEGIN_TEST
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "It doesn't affect the opposing Gholdengo..." },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Primarina's HP is full!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Gholdengo's Sp. Atk rose sharply!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Primarina used Helping Hand!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Gholdengo's Good as Gold" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "It doesn't affect the opposing Gholdengo..." },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Gholdengo's Good as Gold" },
}
}
END_TEST
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
// Test: Receiver - Copy valid ability in doubles
// https://www.youtube.com/watch?v=ibfSvdIW3IE
#include "../../battle_tests.h"
BEGIN_TEST
{
.battleType = BATTLE_TYPE_DOUBLES,
.weather = FIELD_CONDITION_NONE,
.fieldCondition = 0,
.terrain = TERRAIN_NONE,
.playerParty = {
{
.species = SPECIES_PASSIMIAN,
.level = 50,
.form = 0,
.ability = ABILITY_RECEIVER,
.item = ITEM_NONE,
.moves = { MOVE_CLOSE_COMBAT, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{
.species = SPECIES_MAGEARNA,
.level = 15,
.form = 0,
.ability = ABILITY_SOUL_HEART,
.item = ITEM_NONE,
.moves = { MOVE_SLEEP_TALK, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE }
},
.enemyParty = { {
.species = SPECIES_KOMALA,
.level = 5,
.form = 0,
.ability = ABILITY_COMATOSE,
.item = ITEM_NONE,
.moves = { MOVE_SLEEP_TALK, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{
.species = SPECIES_MUK,
.level = 60,
.form = 0,
.ability = ABILITY_POWER_OF_ALCHEMY,
.item = ITEM_CHOICE_BAND,
.moves = { MOVE_CRUNCH, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE } },
.playerScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
},
{
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
} },
.enemyScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_PLAYER_SECOND },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
},
{
{ ACTION_MOVE_SLOT_1, BATTLER_PLAYER_SECOND },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
} },
.expectations = {
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Komala fainted!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE_DOES_NOT_CONTAIN, .expectationValue.message = "Muk's Power Of Alchemy" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Magearna's Sp. Atk rose!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Magearna fainted!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Passimian's Receiver" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Passimian's Soul-Heart" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Magearna's Soul-Heart was taken over!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Passimian's Soul-Heart" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Passimian's Sp. Atk rose!" },
}
}
END_TEST
101 changes: 101 additions & 0 deletions data/battle_tests/abilities/receiver/singles.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Test: Receiver - no activation in singles
#include "../../battle_tests.h"
BEGIN_TEST
{
.battleType = BATTLE_TYPE_TRAINER,
.weather = FIELD_CONDITION_NONE,
.fieldCondition = 0,
.terrain = TERRAIN_NONE,
.playerParty = {
{
.species = SPECIES_PASSIMIAN,
.level = 50,
.form = 0,
.ability = ABILITY_NO_GUARD,
.item = ITEM_NONE,
.moves = { MOVE_CLOSE_COMBAT, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE }
},
.enemyParty = { {
.species = SPECIES_STUNKY,
.level = 5,
.form = 0,
.ability = ABILITY_STENCH,
.item = ITEM_NONE,
.moves = { MOVE_SLEEP_TALK, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{
.species = SPECIES_GYARADOS,
.level = 50,
.form = 0,
.ability = ABILITY_INTIMIDATE,
.item = ITEM_NONE,
.moves = { MOVE_SLEEP_TALK, MOVE_NONE, MOVE_NONE, MOVE_NONE },
.hp = FULL_HP,
.status = 0,
.condition2 = 0,
.moveEffectFlags = 0,
},
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE },
{ .species = SPECIES_NONE } },
.playerScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
},
{
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
} },
.enemyScript = { {
{ ACTION_MOVE_SLOT_1, BATTLER_ENEMY_FIRST },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
},
{
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
{ ACTION_NONE, 0 },
} },
.expectations = {
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Stunky fainted!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Gyarados's Intimidate" },
}
}
END_TEST
2 changes: 1 addition & 1 deletion data/battle_tests/moves/copycat/call_last_success_move.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ BEGIN_TEST
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Palossand's HP is full!" },//failed move does not overwrite lastMove
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Meowstic used Copycat!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Meowstic used Thunder Wave!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE_CONTAINS, .expectationValue.message = "It doesn’t affect the opposing" }, //random target
{ .expectationType = EXPECTATION_TYPE_MESSAGE_CONTAINS, .expectationValue.message = "It doesn't affect the opposing" }, //random target
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "Infernape used Ember!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Dedenne used Copycat!" },
{ .expectationType = EXPECTATION_TYPE_MESSAGE, .expectationValue.message = "The opposing Dedenne used Ember!" },
Expand Down
2 changes: 1 addition & 1 deletion data/battle_tests/moves/flip_turn/doubles.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Test: Feint - hit through Protect
// Test: Flip Turn - no switch on move failure
#include "../../battle_tests.h"
BEGIN_TEST
{
Expand Down
Loading
Loading