mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-01-23 09:16:20 -08:00
Move-unique effect commands consistently go in engine/battle/move_effects/
This commit is contained in:
parent
a0cc4a3392
commit
0cf4eb6895
@ -155,7 +155,7 @@ This is a bug with `DittoMetalPowder` in [engine/battle/effect_commands.asm](/en
|
||||
|
||||
([Video](https://www.youtube.com/watch?v=zuCLMikWo4Y))
|
||||
|
||||
This is a bug with `BattleCommand_BellyDrum` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm):
|
||||
This is a bug with `BattleCommand_BellyDrum` in [engine/battle/move_effects/belly_drum.asm](/engine/battle/move_effects/belly_drum.asm):
|
||||
|
||||
```asm
|
||||
BattleCommand_BellyDrum: ; 37c1a
|
||||
@ -307,7 +307,7 @@ CheckHiddenOpponent: ; 37daa
|
||||
|
||||
([Video](https://www.youtube.com/watch?v=202-iAsrIa8))
|
||||
|
||||
This is a bug with `BattleCommand_BeatUp` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm):
|
||||
This is a bug with `BattleCommand_BeatUp` in [engine/battle/move_effects/beat_up.asm](/engine/battle/move_effects/beat_up.asm):
|
||||
|
||||
```asm
|
||||
.got_mon
|
||||
@ -346,7 +346,7 @@ This is a bug with `BattleCommand_BeatUp` in [engine/battle/effect_commands.asm]
|
||||
|
||||
This bug existed for all battles in Gold and Silver, and was only fixed for single-player battles in Crystal to preserve link compatibility.
|
||||
|
||||
This is a bug with `BattleCommand_Present` in [engine/battle/effect_commands/present.asm](/engine/battle/effect_commands/present.asm):
|
||||
This is a bug with `BattleCommand_Present` in [engine/battle/move_effects/present.asm](/engine/battle/move_effects/present.asm):
|
||||
|
||||
```asm
|
||||
BattleCommand_Present: ; 37874
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,7 @@ BattleCommand_Attract: ; 377ce
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp FailAttract
|
||||
jp FailMove
|
||||
; 377f5
|
||||
|
||||
|
241
engine/battle/move_effects/baton_pass.asm
Normal file
241
engine/battle/move_effects/baton_pass.asm
Normal file
@ -0,0 +1,241 @@
|
||||
BattleCommand_BatonPass: ; 379c9
|
||||
; batonpass
|
||||
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jp nz, .Enemy
|
||||
|
||||
|
||||
; Need something to switch to
|
||||
call CheckAnyOtherAlivePartyMons
|
||||
jp z, FailedBatonPass
|
||||
|
||||
call UpdateBattleMonInParty
|
||||
call AnimateCurrentMove
|
||||
|
||||
ld c, 50
|
||||
call DelayFrames
|
||||
|
||||
; Transition into switchmon menu
|
||||
call LoadStandardMenuHeader
|
||||
farcall SetUpBattlePartyMenu_NoLoop
|
||||
|
||||
farcall ForcePickSwitchMonInBattle
|
||||
|
||||
; Return to battle scene
|
||||
call ClearPalettes
|
||||
farcall _LoadBattleFontsHPBar
|
||||
call CloseWindow
|
||||
call ClearSprites
|
||||
hlcoord 1, 0
|
||||
lb bc, 4, 10
|
||||
call ClearBox
|
||||
ld b, SCGB_BATTLE_COLORS
|
||||
call GetSGBLayout
|
||||
call SetPalettes
|
||||
call BatonPass_LinkPlayerSwitch
|
||||
|
||||
; Mobile link battles handle entrances differently
|
||||
farcall CheckMobileBattleError
|
||||
jp c, EndMoveEffect
|
||||
|
||||
ld hl, PassedBattleMonEntrance
|
||||
call CallBattleCore
|
||||
|
||||
call ResetBatonPassStatus
|
||||
ret
|
||||
|
||||
|
||||
.Enemy:
|
||||
|
||||
; Wildmons don't have anything to switch to
|
||||
ld a, [wBattleMode]
|
||||
dec a ; WILDMON
|
||||
jp z, FailedBatonPass
|
||||
|
||||
call CheckAnyOtherAliveEnemyMons
|
||||
jp z, FailedBatonPass
|
||||
|
||||
call UpdateEnemyMonInParty
|
||||
call AnimateCurrentMove
|
||||
call BatonPass_LinkEnemySwitch
|
||||
|
||||
; Mobile link battles handle entrances differently
|
||||
farcall CheckMobileBattleError
|
||||
jp c, EndMoveEffect
|
||||
|
||||
; Passed enemy PartyMon entrance
|
||||
xor a
|
||||
ld [wEnemySwitchMonIndex], a
|
||||
ld hl, EnemySwitch_SetMode
|
||||
call CallBattleCore
|
||||
ld hl, ResetBattleParticipants
|
||||
call CallBattleCore
|
||||
ld a, 1
|
||||
ld [wTypeMatchup], a
|
||||
ld hl, ApplyStatLevelMultiplierOnAllStats
|
||||
call CallBattleCore
|
||||
|
||||
ld hl, SpikesDamage
|
||||
call CallBattleCore
|
||||
|
||||
jr ResetBatonPassStatus
|
||||
|
||||
; 37a67
|
||||
|
||||
|
||||
BatonPass_LinkPlayerSwitch: ; 37a67
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, 1
|
||||
ld [wPlayerAction], a
|
||||
|
||||
call LoadStandardMenuHeader
|
||||
ld hl, LinkBattleSendReceiveAction
|
||||
call CallBattleCore
|
||||
call CloseWindow
|
||||
|
||||
xor a
|
||||
ld [wPlayerAction], a
|
||||
ret
|
||||
|
||||
; 37a82
|
||||
|
||||
|
||||
BatonPass_LinkEnemySwitch: ; 37a82
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
ret z
|
||||
|
||||
call LoadStandardMenuHeader
|
||||
ld hl, LinkBattleSendReceiveAction
|
||||
call CallBattleCore
|
||||
|
||||
ld a, [OTPartyCount]
|
||||
add BATTLEACTION_SWITCH1
|
||||
ld b, a
|
||||
ld a, [wBattleAction]
|
||||
cp BATTLEACTION_SWITCH1
|
||||
jr c, .baton_pass
|
||||
cp b
|
||||
jr c, .switch
|
||||
|
||||
.baton_pass
|
||||
ld a, [CurOTMon]
|
||||
add BATTLEACTION_SWITCH1
|
||||
ld [wBattleAction], a
|
||||
.switch
|
||||
jp CloseWindow
|
||||
|
||||
; 37aab
|
||||
|
||||
|
||||
FailedBatonPass: ; 37aab
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
; 37ab1
|
||||
|
||||
|
||||
ResetBatonPassStatus: ; 37ab1
|
||||
; Reset status changes that aren't passed by Baton Pass.
|
||||
|
||||
; Nightmare isn't passed.
|
||||
ld a, BATTLE_VARS_STATUS
|
||||
call GetBattleVar
|
||||
and SLP
|
||||
jr nz, .ok
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS1
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_NIGHTMARE, [hl]
|
||||
.ok
|
||||
|
||||
; Disable isn't passed.
|
||||
call ResetActorDisable
|
||||
|
||||
; Attraction isn't passed.
|
||||
ld hl, PlayerSubStatus1
|
||||
res SUBSTATUS_IN_LOVE, [hl]
|
||||
ld hl, EnemySubStatus1
|
||||
res SUBSTATUS_IN_LOVE, [hl]
|
||||
ld hl, PlayerSubStatus5
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS5
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_TRANSFORMED, [hl]
|
||||
res SUBSTATUS_ENCORED, [hl]
|
||||
|
||||
; New mon hasn't used a move yet.
|
||||
ld a, BATTLE_VARS_LAST_MOVE
|
||||
call GetBattleVarAddr
|
||||
ld [hl], 0
|
||||
|
||||
xor a
|
||||
ld [wPlayerWrapCount], a
|
||||
ld [wEnemyWrapCount], a
|
||||
ret
|
||||
|
||||
; 37ae9
|
||||
|
||||
|
||||
CheckAnyOtherAlivePartyMons: ; 37ae9
|
||||
ld hl, PartyMon1HP
|
||||
ld a, [PartyCount]
|
||||
ld d, a
|
||||
ld a, [CurBattleMon]
|
||||
ld e, a
|
||||
jr CheckAnyOtherAliveMons
|
||||
|
||||
; 37af6
|
||||
|
||||
|
||||
CheckAnyOtherAliveEnemyMons: ; 37af6
|
||||
ld hl, OTPartyMon1HP
|
||||
ld a, [OTPartyCount]
|
||||
ld d, a
|
||||
ld a, [CurOTMon]
|
||||
ld e, a
|
||||
|
||||
; fallthrough
|
||||
; 37b01
|
||||
|
||||
CheckAnyOtherAliveMons: ; 37b01
|
||||
; Check for nonzero HP starting from partymon
|
||||
; HP at hl for d partymons, besides current mon e.
|
||||
|
||||
; Return nz if any are alive.
|
||||
|
||||
xor a
|
||||
ld b, a
|
||||
ld c, a
|
||||
.loop
|
||||
ld a, c
|
||||
cp d
|
||||
jr z, .done
|
||||
cp e
|
||||
jr z, .next
|
||||
|
||||
ld a, [hli]
|
||||
or b
|
||||
ld b, a
|
||||
ld a, [hld]
|
||||
or b
|
||||
ld b, a
|
||||
|
||||
.next
|
||||
push bc
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
add hl, bc
|
||||
pop bc
|
||||
inc c
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ld a, b
|
||||
and a
|
||||
ret
|
||||
|
||||
; 37b1d
|
219
engine/battle/move_effects/beat_up.asm
Normal file
219
engine/battle/move_effects/beat_up.asm
Normal file
@ -0,0 +1,219 @@
|
||||
BattleCommand_BeatUp: ; 35461
|
||||
; beatup
|
||||
|
||||
call ResetDamage
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jp nz, .enemy_beats_up
|
||||
ld a, [PlayerSubStatus3]
|
||||
bit SUBSTATUS_IN_LOOP, a
|
||||
jr nz, .next_mon
|
||||
ld c, 20
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [PlayerRolloutCount], a
|
||||
ld [wd002], a
|
||||
ld [wBeatUpHitAtLeastOnce], a
|
||||
jr .got_mon
|
||||
|
||||
.next_mon
|
||||
ld a, [PlayerRolloutCount]
|
||||
ld b, a
|
||||
ld a, [PartyCount]
|
||||
sub b
|
||||
ld [wd002], a
|
||||
|
||||
.got_mon
|
||||
ld a, [wd002]
|
||||
ld hl, PartyMonNicknames
|
||||
call GetNick
|
||||
ld a, MON_HP
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jp z, .beatup_fail ; fainted
|
||||
ld a, [wd002]
|
||||
ld c, a
|
||||
ld a, [CurBattleMon]
|
||||
; BUG: this can desynchronize link battles
|
||||
; Change "cp [hl]" to "cp c" to fix
|
||||
cp [hl]
|
||||
ld hl, BattleMonStatus
|
||||
jr z, .active_mon
|
||||
ld a, MON_STATUS
|
||||
call GetBeatupMonLocation
|
||||
.active_mon
|
||||
ld a, [hl]
|
||||
and a
|
||||
jp nz, .beatup_fail
|
||||
|
||||
ld a, $1
|
||||
ld [wBeatUpHitAtLeastOnce], a
|
||||
ld hl, BeatUpAttackText
|
||||
call StdBattleTextBox
|
||||
ld a, [EnemyMonSpecies]
|
||||
ld [CurSpecies], a
|
||||
call GetBaseData
|
||||
ld a, [BaseDefense]
|
||||
ld c, a
|
||||
push bc
|
||||
ld a, MON_SPECIES
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hl]
|
||||
ld [CurSpecies], a
|
||||
call GetBaseData
|
||||
ld a, [BaseAttack]
|
||||
pop bc
|
||||
ld b, a
|
||||
push bc
|
||||
ld a, MON_LEVEL
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hl]
|
||||
ld e, a
|
||||
pop bc
|
||||
ld a, [wPlayerMoveStructPower]
|
||||
ld d, a
|
||||
ret
|
||||
|
||||
.enemy_beats_up
|
||||
ld a, [EnemySubStatus3]
|
||||
bit SUBSTATUS_IN_LOOP, a
|
||||
jr nz, .not_first_enemy_beatup
|
||||
|
||||
xor a
|
||||
ld [EnemyRolloutCount], a
|
||||
ld [wd002], a
|
||||
ld [wBeatUpHitAtLeastOnce], a
|
||||
jr .enemy_continue
|
||||
|
||||
.not_first_enemy_beatup
|
||||
ld a, [EnemyRolloutCount]
|
||||
ld b, a
|
||||
ld a, [OTPartyCount]
|
||||
sub b
|
||||
ld [wd002], a
|
||||
.enemy_continue
|
||||
ld a, [wBattleMode]
|
||||
dec a
|
||||
jr z, .wild
|
||||
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
jr nz, .link_or_tower
|
||||
|
||||
ld a, [InBattleTowerBattle]
|
||||
and a
|
||||
jr nz, .link_or_tower
|
||||
|
||||
ld a, [wd002]
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, OTPartySpecies
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
call GetPokemonName
|
||||
jr .got_enemy_nick
|
||||
|
||||
.link_or_tower
|
||||
ld a, [wd002]
|
||||
ld hl, OTPartyMonNicknames
|
||||
ld bc, NAME_LENGTH
|
||||
call AddNTimes
|
||||
ld de, StringBuffer1
|
||||
call CopyBytes
|
||||
.got_enemy_nick
|
||||
ld a, MON_HP
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jp z, .beatup_fail
|
||||
ld a, [wd002]
|
||||
ld b, a
|
||||
ld a, [CurOTMon]
|
||||
cp b
|
||||
ld hl, EnemyMonStatus
|
||||
jr z, .active_enemy
|
||||
|
||||
ld a, MON_STATUS
|
||||
call GetBeatupMonLocation
|
||||
.active_enemy
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .beatup_fail
|
||||
|
||||
ld a, $1
|
||||
ld [wBeatUpHitAtLeastOnce], a
|
||||
jr .finish_beatup
|
||||
|
||||
.wild
|
||||
ld a, [EnemyMonSpecies]
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
call GetPokemonName
|
||||
ld hl, BeatUpAttackText
|
||||
call StdBattleTextBox
|
||||
jp EnemyAttackDamage
|
||||
|
||||
.finish_beatup
|
||||
ld hl, BeatUpAttackText
|
||||
call StdBattleTextBox
|
||||
ld a, [BattleMonSpecies]
|
||||
ld [CurSpecies], a
|
||||
call GetBaseData
|
||||
ld a, [BaseDefense]
|
||||
ld c, a
|
||||
push bc
|
||||
ld a, MON_SPECIES
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hl]
|
||||
ld [CurSpecies], a
|
||||
call GetBaseData
|
||||
ld a, [BaseAttack]
|
||||
pop bc
|
||||
ld b, a
|
||||
push bc
|
||||
ld a, MON_LEVEL
|
||||
call GetBeatupMonLocation
|
||||
ld a, [hl]
|
||||
ld e, a
|
||||
pop bc
|
||||
ld a, [wEnemyMoveStructPower]
|
||||
ld d, a
|
||||
ret
|
||||
|
||||
; 355b0
|
||||
|
||||
|
||||
.beatup_fail ; 355b0
|
||||
ld b, buildopponentrage_command
|
||||
jp SkipToBattleCommand
|
||||
|
||||
; 355b5
|
||||
|
||||
|
||||
BattleCommanda8: ; 355b5
|
||||
ld a, [wBeatUpHitAtLeastOnce]
|
||||
and a
|
||||
ret nz
|
||||
|
||||
jp PrintButItFailed
|
||||
|
||||
; 355bd
|
||||
|
||||
|
||||
GetBeatupMonLocation: ; 355bd
|
||||
push bc
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
ld hl, PartyMon1Species
|
||||
jr z, .got_species
|
||||
ld hl, OTPartyMon1Species
|
||||
|
||||
.got_species
|
||||
ld a, [wd002]
|
||||
add hl, bc
|
||||
call GetPartyLocation
|
||||
pop bc
|
||||
ret
|
36
engine/battle/move_effects/belly_drum.asm
Normal file
36
engine/battle/move_effects/belly_drum.asm
Normal file
@ -0,0 +1,36 @@
|
||||
BattleCommand_BellyDrum: ; 37c1a
|
||||
; bellydrum
|
||||
; This command is buggy because it raises the user's attack
|
||||
; before checking that it has enough HP to use the move.
|
||||
; Swap the order of these two blocks to fix.
|
||||
call BattleCommand_AttackUp2
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .failed
|
||||
|
||||
callfar GetHalfMaxHP
|
||||
callfar CheckUserHasEnoughHP
|
||||
jr nc, .failed
|
||||
|
||||
push bc
|
||||
call AnimateCurrentMove
|
||||
pop bc
|
||||
callfar SubtractHPFromUser
|
||||
call UpdateUserInParty
|
||||
ld a, 5
|
||||
|
||||
.max_attack_loop
|
||||
push af
|
||||
call BattleCommand_AttackUp2
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .max_attack_loop
|
||||
|
||||
ld hl, BellyDrumText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
; 37c55
|
105
engine/battle/move_effects/bide.asm
Normal file
105
engine/battle/move_effects/bide.asm
Normal file
@ -0,0 +1,105 @@
|
||||
BattleCommand_StoreEnergy: ; 36671
|
||||
; storeenergy
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS3
|
||||
call GetBattleVar
|
||||
bit SUBSTATUS_BIDE, a
|
||||
ret z
|
||||
|
||||
ld hl, PlayerRolloutCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .check_still_storing_energy
|
||||
ld hl, EnemyRolloutCount
|
||||
.check_still_storing_energy
|
||||
dec [hl]
|
||||
jr nz, .still_storing
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS3
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_BIDE, [hl]
|
||||
|
||||
ld hl, UnleashedEnergyText
|
||||
call StdBattleTextBox
|
||||
|
||||
ld a, BATTLE_VARS_MOVE_POWER
|
||||
call GetBattleVarAddr
|
||||
ld a, 1
|
||||
ld [hl], a
|
||||
ld hl, PlayerDamageTaken + 1
|
||||
ld de, wPlayerCharging ; player
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .player
|
||||
ld hl, EnemyDamageTaken + 1
|
||||
ld de, wEnemyCharging ; enemy
|
||||
.player
|
||||
ld a, [hld]
|
||||
add a
|
||||
ld b, a
|
||||
ld [CurDamage + 1], a
|
||||
ld a, [hl]
|
||||
rl a
|
||||
ld [CurDamage], a
|
||||
jr nc, .not_maxed
|
||||
ld a, $ff
|
||||
ld [CurDamage], a
|
||||
ld [CurDamage + 1], a
|
||||
.not_maxed
|
||||
or b
|
||||
jr nz, .built_up_something
|
||||
ld a, 1
|
||||
ld [AttackMissed], a
|
||||
.built_up_something
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld [de], a
|
||||
|
||||
ld a, BATTLE_VARS_MOVE_ANIM
|
||||
call GetBattleVarAddr
|
||||
ld a, BIDE
|
||||
ld [hl], a
|
||||
|
||||
ld b, unleashenergy_command
|
||||
jp SkipToBattleCommand
|
||||
|
||||
.still_storing
|
||||
ld hl, StoringEnergyText
|
||||
call StdBattleTextBox
|
||||
jp EndMoveEffect
|
||||
|
||||
; 366e5
|
||||
|
||||
|
||||
BattleCommand_UnleashEnergy: ; 366e5
|
||||
; unleashenergy
|
||||
|
||||
ld de, PlayerDamageTaken
|
||||
ld bc, PlayerRolloutCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_damage
|
||||
ld de, EnemyDamageTaken
|
||||
ld bc, EnemyRolloutCount
|
||||
.got_damage
|
||||
ld a, BATTLE_VARS_SUBSTATUS3
|
||||
call GetBattleVarAddr
|
||||
set SUBSTATUS_BIDE, [hl]
|
||||
xor a
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [de], a
|
||||
ld [wPlayerMoveStructEffect], a
|
||||
ld [wEnemyMoveStructEffect], a
|
||||
call BattleRandom
|
||||
and 1
|
||||
inc a
|
||||
inc a
|
||||
ld [bc], a
|
||||
ld a, 1
|
||||
ld [wKickCounter], a
|
||||
call AnimateCurrentMove
|
||||
jp EndMoveEffect
|
||||
|
||||
; 3671a
|
98
engine/battle/move_effects/conversion.asm
Normal file
98
engine/battle/move_effects/conversion.asm
Normal file
@ -0,0 +1,98 @@
|
||||
BattleCommand_Conversion: ; 3707f
|
||||
; conversion
|
||||
|
||||
ld hl, BattleMonMoves
|
||||
ld de, BattleMonType1
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_moves
|
||||
ld hl, EnemyMonMoves
|
||||
ld de, EnemyMonType1
|
||||
.got_moves
|
||||
push de
|
||||
ld c, 0
|
||||
ld de, StringBuffer1
|
||||
.loop
|
||||
push hl
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
and a
|
||||
jr z, .okay
|
||||
push hl
|
||||
push bc
|
||||
dec a
|
||||
ld hl, Moves + MOVE_TYPE
|
||||
call GetMoveAttr
|
||||
ld [de], a
|
||||
inc de
|
||||
pop bc
|
||||
pop hl
|
||||
inc c
|
||||
ld a, c
|
||||
cp NUM_MOVES
|
||||
jr c, .loop
|
||||
.okay
|
||||
ld a, $ff
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [de], a
|
||||
pop de
|
||||
ld hl, StringBuffer1
|
||||
.loop2
|
||||
ld a, [hl]
|
||||
cp -1
|
||||
jr z, .fail
|
||||
cp CURSE_T
|
||||
jr z, .next
|
||||
ld a, [de]
|
||||
cp [hl]
|
||||
jr z, .next
|
||||
inc de
|
||||
ld a, [de]
|
||||
dec de
|
||||
cp [hl]
|
||||
jr nz, .done
|
||||
.next
|
||||
inc hl
|
||||
jr .loop2
|
||||
|
||||
.fail
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
.done
|
||||
.loop3
|
||||
call BattleRandom
|
||||
maskbits NUM_MOVES
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, StringBuffer1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp -1
|
||||
jr z, .loop3
|
||||
cp CURSE_T
|
||||
jr z, .loop3
|
||||
ld a, [de]
|
||||
cp [hl]
|
||||
jr z, .loop3
|
||||
inc de
|
||||
ld a, [de]
|
||||
dec de
|
||||
cp [hl]
|
||||
jr z, .loop3
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [de], a
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
farcall GetTypeName
|
||||
call AnimateCurrentMove
|
||||
ld hl, TransformedTypeText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 3710e
|
66
engine/battle/move_effects/conversion2.asm
Normal file
66
engine/battle/move_effects/conversion2.asm
Normal file
@ -0,0 +1,66 @@
|
||||
BattleCommand_Conversion2: ; 359e6
|
||||
; conversion2
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .failed
|
||||
ld hl, BattleMonType1
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_type
|
||||
ld hl, EnemyMonType1
|
||||
.got_type
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
jr z, .failed
|
||||
push hl
|
||||
dec a
|
||||
ld hl, Moves + MOVE_TYPE
|
||||
call GetMoveAttr
|
||||
ld d, a
|
||||
pop hl
|
||||
cp CURSE_T
|
||||
jr z, .failed
|
||||
call AnimateCurrentMove
|
||||
call BattleCommand_SwitchTurn
|
||||
|
||||
.loop
|
||||
call BattleRandom
|
||||
and $1f
|
||||
cp UNUSED_TYPES
|
||||
jr c, .okay
|
||||
cp UNUSED_TYPES_END
|
||||
jr c, .loop
|
||||
cp TYPES_END
|
||||
jr nc, .loop
|
||||
.okay
|
||||
ld [hli], a
|
||||
ld [hld], a
|
||||
push hl
|
||||
ld a, BATTLE_VARS_MOVE_TYPE
|
||||
call GetBattleVarAddr
|
||||
push af
|
||||
push hl
|
||||
ld a, d
|
||||
ld [hl], a
|
||||
call BattleCheckTypeMatchup
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
pop hl
|
||||
ld a, [wTypeMatchup]
|
||||
cp 10
|
||||
jr nc, .loop
|
||||
call BattleCommand_SwitchTurn
|
||||
|
||||
ld a, [hl]
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
predef GetTypeName
|
||||
ld hl, TransformedTypeText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp FailMove
|
||||
|
||||
; 35a53
|
60
engine/battle/move_effects/counter.asm
Normal file
60
engine/battle/move_effects/counter.asm
Normal file
@ -0,0 +1,60 @@
|
||||
BattleCommand_Counter: ; 35813
|
||||
; counter
|
||||
|
||||
ld a, 1
|
||||
ld [AttackMissed], a
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld b, a
|
||||
callfar GetMoveEffect
|
||||
ld a, b
|
||||
cp EFFECT_COUNTER
|
||||
ret z
|
||||
|
||||
call BattleCommand_ResetTypeMatchup
|
||||
ld a, [wTypeMatchup]
|
||||
and a
|
||||
ret z
|
||||
|
||||
call CheckOpponentWentFirst
|
||||
ret z
|
||||
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
dec a
|
||||
ld de, StringBuffer1
|
||||
call GetMoveData
|
||||
|
||||
ld a, [StringBuffer1 + MOVE_POWER]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, [StringBuffer1 + MOVE_TYPE]
|
||||
cp SPECIAL
|
||||
ret nc
|
||||
|
||||
ld hl, CurDamage
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
ret z
|
||||
|
||||
ld a, [hl]
|
||||
add a
|
||||
ld [hld], a
|
||||
ld a, [hl]
|
||||
adc a
|
||||
ld [hl], a
|
||||
jr nc, .capped
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
.capped
|
||||
|
||||
xor a
|
||||
ld [AttackMissed], a
|
||||
ret
|
||||
|
||||
; 35864
|
11
engine/battle/move_effects/destiny_bond.asm
Normal file
11
engine/battle/move_effects/destiny_bond.asm
Normal file
@ -0,0 +1,11 @@
|
||||
BattleCommand_DestinyBond: ; 35bff
|
||||
; destinybond
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS5
|
||||
call GetBattleVarAddr
|
||||
set SUBSTATUS_DESTINY_BOND, [hl]
|
||||
call AnimateCurrentMove
|
||||
ld hl, DestinyBondEffectText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 35c0f
|
74
engine/battle/move_effects/disable.asm
Normal file
74
engine/battle/move_effects/disable.asm
Normal file
@ -0,0 +1,74 @@
|
||||
BattleCommand_Disable: ; 36fed
|
||||
; disable
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .failed
|
||||
|
||||
ld de, EnemyDisableCount
|
||||
ld hl, EnemyMonMoves
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_moves
|
||||
ld de, PlayerDisableCount
|
||||
ld hl, BattleMonMoves
|
||||
.got_moves
|
||||
|
||||
ld a, [de]
|
||||
and a
|
||||
jr nz, .failed
|
||||
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
jr z, .failed
|
||||
cp STRUGGLE
|
||||
jr z, .failed
|
||||
|
||||
ld b, a
|
||||
ld c, $ff
|
||||
.loop
|
||||
inc c
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nz, .loop
|
||||
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
ld hl, EnemyMonPP
|
||||
jr z, .got_pp
|
||||
ld hl, BattleMonPP
|
||||
.got_pp
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .failed
|
||||
.loop2
|
||||
call BattleRandom
|
||||
and 7
|
||||
jr z, .loop2
|
||||
inc a
|
||||
inc c
|
||||
swap c
|
||||
add c
|
||||
ld [de], a
|
||||
call AnimateCurrentMove
|
||||
ld hl, DisabledMove
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr nz, .got_disabled_move_pointer
|
||||
inc hl
|
||||
.got_disabled_move_pointer
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
ld [hl], a
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
call GetMoveName
|
||||
ld hl, WasDisabledText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp FailMove
|
||||
|
||||
; 3705c
|
122
engine/battle/move_effects/encore.asm
Normal file
122
engine/battle/move_effects/encore.asm
Normal file
@ -0,0 +1,122 @@
|
||||
BattleCommand_Encore: ; 35864
|
||||
; encore
|
||||
|
||||
ld hl, EnemyMonMoves
|
||||
ld de, EnemyEncoreCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld hl, BattleMonMoves
|
||||
ld de, PlayerEncoreCount
|
||||
.ok
|
||||
ld a, BATTLE_VARS_LAST_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
jp z, .failed
|
||||
cp STRUGGLE
|
||||
jp z, .failed
|
||||
cp ENCORE
|
||||
jp z, .failed
|
||||
cp MIRROR_MOVE
|
||||
jp z, .failed
|
||||
ld b, a
|
||||
|
||||
.got_move
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nz, .got_move
|
||||
|
||||
ld bc, BattleMonPP - BattleMonMoves - 1
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and PP_MASK
|
||||
jp z, .failed
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jp nz, .failed
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_ENCORED, [hl]
|
||||
jp nz, .failed
|
||||
set SUBSTATUS_ENCORED, [hl]
|
||||
call BattleRandom
|
||||
and $3
|
||||
inc a
|
||||
inc a
|
||||
inc a
|
||||
ld [de], a
|
||||
call CheckOpponentWentFirst
|
||||
jr nz, .finish_move
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .force_last_enemy_move
|
||||
|
||||
push hl
|
||||
ld a, [LastPlayerMove]
|
||||
ld b, a
|
||||
ld c, 0
|
||||
ld hl, BattleMonMoves
|
||||
.find_player_move
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .got_player_move
|
||||
inc c
|
||||
ld a, c
|
||||
cp NUM_MOVES
|
||||
jr c, .find_player_move
|
||||
pop hl
|
||||
res SUBSTATUS_ENCORED, [hl]
|
||||
xor a
|
||||
ld [de], a
|
||||
jr .failed
|
||||
|
||||
.got_player_move
|
||||
pop hl
|
||||
ld a, c
|
||||
ld [CurMoveNum], a
|
||||
ld a, b
|
||||
ld [CurPlayerMove], a
|
||||
dec a
|
||||
ld de, wPlayerMoveStruct
|
||||
call GetMoveData
|
||||
jr .finish_move
|
||||
|
||||
.force_last_enemy_move
|
||||
push hl
|
||||
ld a, [LastEnemyMove]
|
||||
ld b, a
|
||||
ld c, 0
|
||||
ld hl, EnemyMonMoves
|
||||
.find_enemy_move
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .got_enemy_move
|
||||
inc c
|
||||
ld a, c
|
||||
cp NUM_MOVES
|
||||
jr c, .find_enemy_move
|
||||
pop hl
|
||||
res SUBSTATUS_ENCORED, [hl]
|
||||
xor a
|
||||
ld [de], a
|
||||
jr .failed
|
||||
|
||||
.got_enemy_move
|
||||
pop hl
|
||||
ld a, c
|
||||
ld [CurEnemyMoveNum], a
|
||||
ld a, b
|
||||
ld [CurEnemyMove], a
|
||||
dec a
|
||||
ld de, wEnemyMoveStruct
|
||||
call GetMoveData
|
||||
|
||||
.finish_move
|
||||
call AnimateCurrentMove
|
||||
ld hl, GotAnEncoreText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp PrintDidntAffect2
|
||||
|
||||
; 35926
|
44
engine/battle/move_effects/false_swipe.asm
Normal file
44
engine/battle/move_effects/false_swipe.asm
Normal file
@ -0,0 +1,44 @@
|
||||
BattleCommand_FalseSwipe: ; 35c94
|
||||
; falseswipe
|
||||
|
||||
ld hl, EnemyMonHP
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_hp
|
||||
ld hl, BattleMonHP
|
||||
.got_hp
|
||||
ld de, CurDamage
|
||||
ld c, 2
|
||||
push hl
|
||||
push de
|
||||
call StringCmp
|
||||
pop de
|
||||
pop hl
|
||||
jr c, .done
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hl]
|
||||
dec a
|
||||
ld [de], a
|
||||
inc a
|
||||
jr nz, .okay
|
||||
dec de
|
||||
ld a, [de]
|
||||
dec a
|
||||
ld [de], a
|
||||
.okay
|
||||
ld a, [CriticalHit]
|
||||
cp 2
|
||||
jr nz, .carry
|
||||
xor a
|
||||
ld [CriticalHit], a
|
||||
.carry
|
||||
scf
|
||||
ret
|
||||
|
||||
.done
|
||||
and a
|
||||
ret
|
||||
|
||||
; 35cc9
|
17
engine/battle/move_effects/focus_energy.asm
Normal file
17
engine/battle/move_effects/focus_energy.asm
Normal file
@ -0,0 +1,17 @@
|
||||
BattleCommand_FocusEnergy: ; 36c98
|
||||
; focusenergy
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_FOCUS_ENERGY, [hl]
|
||||
jr nz, .already_pumped
|
||||
set SUBSTATUS_FOCUS_ENERGY, [hl]
|
||||
call AnimateCurrentMove
|
||||
ld hl, GettingPumpedText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.already_pumped
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
; 36cb2
|
@ -19,5 +19,5 @@ BattleCommand_Foresight: ; 376a0
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp FailForesight
|
||||
jp FailMove
|
||||
; 376c2
|
29
engine/battle/move_effects/frustration.asm
Normal file
29
engine/battle/move_effects/frustration.asm
Normal file
@ -0,0 +1,29 @@
|
||||
BattleCommand_FrustrationPower: ; 3790e
|
||||
; frustrationpower
|
||||
|
||||
push bc
|
||||
ld hl, BattleMonHappiness
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_happiness
|
||||
ld hl, EnemyMonHappiness
|
||||
.got_happiness
|
||||
ld a, $ff
|
||||
sub [hl]
|
||||
ld [hMultiplicand + 2], a
|
||||
xor a
|
||||
ld [hMultiplicand + 0], a
|
||||
ld [hMultiplicand + 1], a
|
||||
ld a, 10
|
||||
ld [hMultiplier], a
|
||||
call Multiply
|
||||
ld a, 25
|
||||
ld [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
ld a, [hQuotient + 2]
|
||||
ld d, a
|
||||
pop bc
|
||||
ret
|
||||
|
||||
; 37939
|
61
engine/battle/move_effects/fury_cutter.asm
Normal file
61
engine/battle/move_effects/fury_cutter.asm
Normal file
@ -0,0 +1,61 @@
|
||||
BattleCommand_FuryCutter: ; 37792
|
||||
; furycutter
|
||||
|
||||
ld hl, PlayerFuryCutterCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .go
|
||||
ld hl, EnemyFuryCutterCount
|
||||
|
||||
.go
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jp nz, ResetFuryCutterCount
|
||||
|
||||
inc [hl]
|
||||
|
||||
; Damage capped at 5 turns' worth (16x).
|
||||
ld a, [hl]
|
||||
ld b, a
|
||||
cp 6
|
||||
jr c, .checkdouble
|
||||
ld b, 5
|
||||
|
||||
.checkdouble
|
||||
dec b
|
||||
ret z
|
||||
|
||||
; Double the damage
|
||||
ld hl, CurDamage + 1
|
||||
sla [hl]
|
||||
dec hl
|
||||
rl [hl]
|
||||
jr nc, .checkdouble
|
||||
|
||||
; No overflow
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
; 377be
|
||||
|
||||
|
||||
ResetFuryCutterCount: ; 377be
|
||||
|
||||
push hl
|
||||
|
||||
ld hl, PlayerFuryCutterCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .reset
|
||||
ld hl, EnemyFuryCutterCount
|
||||
|
||||
.reset
|
||||
xor a
|
||||
ld [hl], a
|
||||
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; 377ce
|
85
engine/battle/move_effects/future_sight.asm
Normal file
85
engine/battle/move_effects/future_sight.asm
Normal file
@ -0,0 +1,85 @@
|
||||
BattleCommand_CheckFutureSight: ; 37d0d
|
||||
; checkfuturesight
|
||||
|
||||
ld hl, wPlayerFutureSightCount
|
||||
ld de, wPlayerFutureSightDamage
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld hl, wEnemyFutureSightCount
|
||||
ld de, wEnemyFutureSightDamage
|
||||
.ok
|
||||
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret z
|
||||
cp 1
|
||||
ret nz
|
||||
|
||||
ld [hl], 0
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [CurDamage], a
|
||||
ld a, [de]
|
||||
ld [CurDamage + 1], a
|
||||
ld b, futuresight_command
|
||||
jp SkipToBattleCommand
|
||||
|
||||
; 37d34
|
||||
|
||||
BattleCommand_FutureSight: ; 37d34
|
||||
; futuresight
|
||||
|
||||
call CheckUserIsCharging
|
||||
jr nz, .AlreadyChargingFutureSight
|
||||
ld a, BATTLE_VARS_MOVE_ANIM
|
||||
call GetBattleVar
|
||||
ld b, a
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE
|
||||
call GetBattleVarAddr
|
||||
ld [hl], b
|
||||
ld a, BATTLE_VARS_LAST_MOVE
|
||||
call GetBattleVarAddr
|
||||
ld [hl], b
|
||||
.AlreadyChargingFutureSight:
|
||||
ld hl, wPlayerFutureSightCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .GotFutureSightCount
|
||||
ld hl, wEnemyFutureSightCount
|
||||
.GotFutureSightCount:
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .failed
|
||||
ld a, 4
|
||||
ld [hl], a
|
||||
call BattleCommand_LowerSub
|
||||
call BattleCommand_MoveDelay
|
||||
ld hl, ForesawAttackText
|
||||
call StdBattleTextBox
|
||||
call BattleCommand_RaiseSub
|
||||
ld de, wPlayerFutureSightDamage
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .StoreDamage
|
||||
ld de, wEnemyFutureSightDamage
|
||||
.StoreDamage:
|
||||
ld hl, CurDamage
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld [hl], 0
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld [hl], 0
|
||||
jp EndMoveEffect
|
||||
|
||||
.failed
|
||||
pop bc
|
||||
call ResetDamage
|
||||
call AnimateFailedMove
|
||||
call PrintButItFailed
|
||||
jp EndMoveEffect
|
||||
|
||||
; 37d94
|
36
engine/battle/move_effects/heal_bell.asm
Normal file
36
engine/battle/move_effects/heal_bell.asm
Normal file
@ -0,0 +1,36 @@
|
||||
BattleCommand_HealBell: ; 35cc9
|
||||
; healbell
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS1
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_NIGHTMARE, [hl]
|
||||
ld de, PartyMon1Status
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_status
|
||||
ld de, OTPartyMon1Status
|
||||
.got_status
|
||||
ld a, BATTLE_VARS_STATUS
|
||||
call GetBattleVarAddr
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld h, d
|
||||
ld l, e
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld d, PARTY_LENGTH
|
||||
.loop
|
||||
ld [hl], a
|
||||
add hl, bc
|
||||
dec d
|
||||
jr nz, .loop
|
||||
call AnimateCurrentMove
|
||||
|
||||
ld hl, BellChimedText
|
||||
call StdBattleTextBox
|
||||
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jp z, CalcPlayerStats
|
||||
jp CalcEnemyStats
|
||||
|
||||
; 35d00
|
10
engine/battle/move_effects/hidden_power.asm
Normal file
10
engine/battle/move_effects/hidden_power.asm
Normal file
@ -0,0 +1,10 @@
|
||||
BattleCommand_HiddenPower: ; 37be8
|
||||
; hiddenpower
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
ret nz
|
||||
farcall HiddenPowerDamage
|
||||
ret
|
||||
|
||||
; 37bf4
|
42
engine/battle/move_effects/leech_seed.asm
Normal file
42
engine/battle/move_effects/leech_seed.asm
Normal file
@ -0,0 +1,42 @@
|
||||
BattleCommand_LeechSeed: ; 36f9d
|
||||
; leechseed
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .evaded
|
||||
call CheckSubstituteOpp
|
||||
jr nz, .evaded
|
||||
|
||||
ld de, EnemyMonType1
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld de, BattleMonType1
|
||||
.ok
|
||||
|
||||
ld a, [de]
|
||||
cp GRASS
|
||||
jr z, .grass
|
||||
inc de
|
||||
ld a, [de]
|
||||
cp GRASS
|
||||
jr z, .grass
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4_OPP
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_LEECH_SEED, [hl]
|
||||
jr nz, .evaded
|
||||
set SUBSTATUS_LEECH_SEED, [hl]
|
||||
call AnimateCurrentMove
|
||||
ld hl, WasSeededText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.grass
|
||||
call AnimateFailedMove
|
||||
jp PrintDoesntAffect
|
||||
|
||||
.evaded
|
||||
call AnimateFailedMove
|
||||
ld hl, EvadedText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 36fe1
|
23
engine/battle/move_effects/lock_on.asm
Normal file
23
engine/battle/move_effects/lock_on.asm
Normal file
@ -0,0 +1,23 @@
|
||||
BattleCommand_LockOn: ; 35a53
|
||||
; lockon
|
||||
|
||||
call CheckSubstituteOpp
|
||||
jr nz, .fail
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .fail
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVarAddr
|
||||
set SUBSTATUS_LOCK_ON, [hl]
|
||||
call AnimateCurrentMove
|
||||
|
||||
ld hl, TookAimText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.fail
|
||||
call AnimateFailedMove
|
||||
jp PrintDidntAffect
|
||||
|
||||
; 35a74
|
29
engine/battle/move_effects/magnitude.asm
Normal file
29
engine/battle/move_effects/magnitude.asm
Normal file
@ -0,0 +1,29 @@
|
||||
BattleCommand_GetMagnitude: ; 37991
|
||||
; getmagnitude
|
||||
|
||||
push bc
|
||||
call BattleRandom
|
||||
ld b, a
|
||||
ld hl, MagnitudePower
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nc, .ok
|
||||
inc hl
|
||||
inc hl
|
||||
jr .loop
|
||||
|
||||
.ok
|
||||
ld d, [hl]
|
||||
push de
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [wTypeMatchup], a
|
||||
call BattleCommand_MoveDelay
|
||||
ld hl, MagnitudeText
|
||||
call StdBattleTextBox
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
INCLUDE "data/moves/magnitude_power.asm"
|
52
engine/battle/move_effects/mimic.asm
Normal file
52
engine/battle/move_effects/mimic.asm
Normal file
@ -0,0 +1,52 @@
|
||||
BattleCommand_Mimic: ; 36f46
|
||||
; mimic
|
||||
|
||||
call ClearLastMove
|
||||
call BattleCommand_MoveDelay
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .fail
|
||||
ld hl, BattleMonMoves
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .player_turn
|
||||
ld hl, EnemyMonMoves
|
||||
.player_turn
|
||||
call CheckHiddenOpponent
|
||||
jr nz, .fail
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
jr z, .fail
|
||||
cp STRUGGLE
|
||||
jr z, .fail
|
||||
ld b, a
|
||||
ld c, NUM_MOVES
|
||||
.check_already_knows_move
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .fail
|
||||
dec c
|
||||
jr nz, .check_already_knows_move
|
||||
dec hl
|
||||
.find_mimic
|
||||
ld a, [hld]
|
||||
cp MIMIC
|
||||
jr nz, .find_mimic
|
||||
inc hl
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
ld [hl], a
|
||||
ld [wNamedObjectIndexBuffer], a
|
||||
ld bc, BattleMonPP - BattleMonMoves
|
||||
add hl, bc
|
||||
ld [hl], 5
|
||||
call GetMoveName
|
||||
call AnimateCurrentMove
|
||||
ld hl, LearnedMoveText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.fail
|
||||
jp FailMimic
|
||||
|
||||
; 36f9d
|
61
engine/battle/move_effects/mirror_coat.asm
Normal file
61
engine/battle/move_effects/mirror_coat.asm
Normal file
@ -0,0 +1,61 @@
|
||||
BattleCommand_MirrorCoat: ; 37c95
|
||||
; mirrorcoat
|
||||
|
||||
ld a, 1
|
||||
ld [AttackMissed], a
|
||||
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld b, a
|
||||
callfar GetMoveEffect
|
||||
ld a, b
|
||||
cp EFFECT_MIRROR_COAT
|
||||
ret z
|
||||
|
||||
call BattleCommand_ResetTypeMatchup
|
||||
ld a, [wTypeMatchup]
|
||||
and a
|
||||
ret z
|
||||
|
||||
call CheckOpponentWentFirst
|
||||
ret z
|
||||
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
dec a
|
||||
ld de, StringBuffer1
|
||||
call GetMoveData
|
||||
|
||||
ld a, [StringBuffer1 + 2]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, [StringBuffer1 + 3]
|
||||
cp SPECIAL
|
||||
ret c
|
||||
|
||||
ld hl, CurDamage
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
ret z
|
||||
|
||||
ld a, [hl]
|
||||
add a
|
||||
ld [hld], a
|
||||
ld a, [hl]
|
||||
adc a
|
||||
ld [hl], a
|
||||
jr nc, .capped
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
.capped
|
||||
|
||||
xor a
|
||||
ld [AttackMissed], a
|
||||
ret
|
||||
|
||||
; 37ce6
|
17
engine/battle/move_effects/mist.asm
Normal file
17
engine/battle/move_effects/mist.asm
Normal file
@ -0,0 +1,17 @@
|
||||
BattleCommand_Mist: ; 36c7e
|
||||
; mist
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_MIST, [hl]
|
||||
jr nz, .already_mist
|
||||
set SUBSTATUS_MIST, [hl]
|
||||
call AnimateCurrentMove
|
||||
ld hl, MistText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.already_mist
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
; 36c98
|
97
engine/battle/move_effects/pain_split.asm
Normal file
97
engine/battle/move_effects/pain_split.asm
Normal file
@ -0,0 +1,97 @@
|
||||
BattleCommand_PainSplit: ; 35926
|
||||
; painsplit
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jp nz, .ButItFailed
|
||||
call CheckSubstituteOpp
|
||||
jp nz, .ButItFailed
|
||||
call AnimateCurrentMove
|
||||
ld hl, BattleMonMaxHP + 1
|
||||
ld de, EnemyMonMaxHP + 1
|
||||
call .PlayerShareHP
|
||||
ld a, $1
|
||||
ld [wWhichHPBar], a
|
||||
hlcoord 10, 9
|
||||
predef AnimateHPBar
|
||||
ld hl, EnemyMonHP
|
||||
ld a, [hli]
|
||||
ld [Buffer4], a
|
||||
ld a, [hli]
|
||||
ld [Buffer3], a
|
||||
ld a, [hli]
|
||||
ld [Buffer2], a
|
||||
ld a, [hl]
|
||||
ld [Buffer1], a
|
||||
call .EnemyShareHP
|
||||
xor a
|
||||
ld [wWhichHPBar], a
|
||||
call ResetDamage
|
||||
hlcoord 2, 2
|
||||
predef AnimateHPBar
|
||||
farcall _UpdateBattleHUDs
|
||||
|
||||
ld hl, SharedPainText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.PlayerShareHP:
|
||||
ld a, [hld]
|
||||
ld [Buffer1], a
|
||||
ld a, [hld]
|
||||
ld [Buffer2], a
|
||||
ld a, [hld]
|
||||
ld b, a
|
||||
ld [Buffer3], a
|
||||
ld a, [hl]
|
||||
ld [Buffer4], a
|
||||
dec de
|
||||
dec de
|
||||
ld a, [de]
|
||||
dec de
|
||||
add b
|
||||
ld [CurDamage + 1], a
|
||||
ld b, [hl]
|
||||
ld a, [de]
|
||||
adc b
|
||||
srl a
|
||||
ld [CurDamage], a
|
||||
ld a, [CurDamage + 1]
|
||||
rr a
|
||||
ld [CurDamage + 1], a
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
inc de
|
||||
inc de
|
||||
inc de
|
||||
|
||||
.EnemyShareHP: ; 359ac
|
||||
ld c, [hl]
|
||||
dec hl
|
||||
ld a, [CurDamage + 1]
|
||||
sub c
|
||||
ld b, [hl]
|
||||
dec hl
|
||||
ld a, [CurDamage]
|
||||
sbc b
|
||||
jr nc, .skip
|
||||
|
||||
ld a, [CurDamage]
|
||||
ld b, a
|
||||
ld a, [CurDamage + 1]
|
||||
ld c, a
|
||||
.skip
|
||||
ld a, c
|
||||
ld [hld], a
|
||||
ld [Buffer5], a
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
ld [Buffer6], a
|
||||
ret
|
||||
|
||||
; 359cd
|
||||
|
||||
.ButItFailed:
|
||||
jp PrintDidntAffect2
|
||||
|
||||
; 359d0
|
28
engine/battle/move_effects/pay_day.asm
Normal file
28
engine/battle/move_effects/pay_day.asm
Normal file
@ -0,0 +1,28 @@
|
||||
BattleCommand_PayDay: ; 3705c
|
||||
; payday
|
||||
|
||||
xor a
|
||||
ld hl, StringBuffer1
|
||||
ld [hli], a
|
||||
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
ld a, [BattleMonLevel]
|
||||
jr z, .ok
|
||||
ld a, [EnemyMonLevel]
|
||||
.ok
|
||||
|
||||
add a
|
||||
ld hl, wPayDayMoney + 2
|
||||
add [hl]
|
||||
ld [hld], a
|
||||
jr nc, .done
|
||||
inc [hl]
|
||||
dec hl
|
||||
jr nz, .done
|
||||
inc [hl]
|
||||
.done
|
||||
ld hl, CoinsScatteredText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 3707f
|
51
engine/battle/move_effects/psych_up.asm
Normal file
51
engine/battle/move_effects/psych_up.asm
Normal file
@ -0,0 +1,51 @@
|
||||
BattleCommand_PsychUp: ; 37c55
|
||||
; psychup
|
||||
|
||||
ld hl, EnemyStatLevels
|
||||
ld de, PlayerStatLevels
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .pointers_correct
|
||||
; It's the enemy's turn, so swap the pointers.
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
pop de
|
||||
.pointers_correct
|
||||
push hl
|
||||
ld b, NUM_LEVEL_STATS
|
||||
; If any of the enemy's stats is modified from its base level,
|
||||
; the move succeeds. Otherwise, it fails.
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp BASE_STAT_LEVEL
|
||||
jr nz, .break
|
||||
dec b
|
||||
jr nz, .loop
|
||||
pop hl
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
.break
|
||||
pop hl
|
||||
ld b, NUM_LEVEL_STATS
|
||||
.loop2
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .loop2
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr nz, .calc_enemy_stats
|
||||
call CalcPlayerStats
|
||||
jr .merge
|
||||
|
||||
.calc_enemy_stats
|
||||
call CalcEnemyStats
|
||||
.merge
|
||||
call AnimateCurrentMove
|
||||
ld hl, CopiedStatsText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 37c95
|
26
engine/battle/move_effects/pursuit.asm
Normal file
26
engine/battle/move_effects/pursuit.asm
Normal file
@ -0,0 +1,26 @@
|
||||
BattleCommand_Pursuit: ; 37b1d
|
||||
; pursuit
|
||||
; Double damage if the opponent is switching.
|
||||
|
||||
ld hl, wEnemyIsSwitching
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld hl, wPlayerIsSwitching
|
||||
.ok
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld hl, CurDamage + 1
|
||||
sla [hl]
|
||||
dec hl
|
||||
rl [hl]
|
||||
ret nc
|
||||
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
; 37b39
|
8
engine/battle/move_effects/rage.asm
Normal file
8
engine/battle/move_effects/rage.asm
Normal file
@ -0,0 +1,8 @@
|
||||
BattleCommand_Rage: ; 36f1d
|
||||
; rage
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
set SUBSTATUS_RAGE, [hl]
|
||||
ret
|
||||
|
||||
; 36f25
|
11
engine/battle/move_effects/rain_dance.asm
Normal file
11
engine/battle/move_effects/rain_dance.asm
Normal file
@ -0,0 +1,11 @@
|
||||
BattleCommand_StartRain: ; 37bf4
|
||||
; startrain
|
||||
ld a, WEATHER_RAIN
|
||||
ld [Weather], a
|
||||
ld a, 5
|
||||
ld [WeatherCount], a
|
||||
call AnimateCurrentMove
|
||||
ld hl, DownpourText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 37c07
|
38
engine/battle/move_effects/rapid_spin.asm
Normal file
38
engine/battle/move_effects/rapid_spin.asm
Normal file
@ -0,0 +1,38 @@
|
||||
BattleCommand_ClearHazards: ; 37b39
|
||||
; clearhazards
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_LEECH_SEED, [hl]
|
||||
jr z, .not_leeched
|
||||
res SUBSTATUS_LEECH_SEED, [hl]
|
||||
ld hl, ShedLeechSeedText
|
||||
call StdBattleTextBox
|
||||
.not_leeched
|
||||
|
||||
ld hl, PlayerScreens
|
||||
ld de, wPlayerWrapCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_screens_wrap
|
||||
ld hl, EnemyScreens
|
||||
ld de, wEnemyWrapCount
|
||||
.got_screens_wrap
|
||||
bit SCREENS_SPIKES, [hl]
|
||||
jr z, .no_spikes
|
||||
res SCREENS_SPIKES, [hl]
|
||||
ld hl, BlewSpikesText
|
||||
push de
|
||||
call StdBattleTextBox
|
||||
pop de
|
||||
.no_spikes
|
||||
|
||||
ld a, [de]
|
||||
and a
|
||||
ret z
|
||||
xor a
|
||||
ld [de], a
|
||||
ld hl, ReleasedByText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 37b74
|
27
engine/battle/move_effects/return.asm
Normal file
27
engine/battle/move_effects/return.asm
Normal file
@ -0,0 +1,27 @@
|
||||
BattleCommand_HappinessPower: ; 3784b
|
||||
; happinesspower
|
||||
push bc
|
||||
ld hl, BattleMonHappiness
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld hl, EnemyMonHappiness
|
||||
.ok
|
||||
xor a
|
||||
ld [hMultiplicand + 0], a
|
||||
ld [hMultiplicand + 1], a
|
||||
ld a, [hl]
|
||||
ld [hMultiplicand + 2], a
|
||||
ld a, 10
|
||||
ld [hMultiplier], a
|
||||
call Multiply
|
||||
ld a, 25
|
||||
ld [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
ld a, [hQuotient + 2]
|
||||
ld d, a
|
||||
pop bc
|
||||
ret
|
||||
|
||||
; 37874
|
25
engine/battle/move_effects/safeguard.asm
Normal file
25
engine/battle/move_effects/safeguard.asm
Normal file
@ -0,0 +1,25 @@
|
||||
BattleCommand_Safeguard: ; 37939
|
||||
; safeguard
|
||||
|
||||
ld hl, PlayerScreens
|
||||
ld de, PlayerSafeguardCount
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .ok
|
||||
ld hl, EnemyScreens
|
||||
ld de, EnemySafeguardCount
|
||||
.ok
|
||||
bit SCREENS_SAFEGUARD, [hl]
|
||||
jr nz, .failed
|
||||
set SCREENS_SAFEGUARD, [hl]
|
||||
ld a, 5
|
||||
ld [de], a
|
||||
call AnimateCurrentMove
|
||||
ld hl, CoveredByVeilText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
; 37962
|
31
engine/battle/move_effects/selfdestruct.asm
Normal file
31
engine/battle/move_effects/selfdestruct.asm
Normal file
@ -0,0 +1,31 @@
|
||||
BattleCommand_Selfdestruct: ; 37380
|
||||
farcall StubbedTrainerRankings_Selfdestruct
|
||||
ld a, BATTLEANIM_PLAYER_DAMAGE
|
||||
ld [wNumHits], a
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
ld a, BATTLE_VARS_STATUS
|
||||
call GetBattleVarAddr
|
||||
xor a
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld a, $1
|
||||
ld [wKickCounter], a
|
||||
call BattleCommand_LowerSub
|
||||
call LoadMoveAnim
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_LEECH_SEED, [hl]
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVarAddr
|
||||
res SUBSTATUS_DESTINY_BOND, [hl]
|
||||
call _CheckBattleScene
|
||||
ret nc
|
||||
farcall DrawPlayerHUD
|
||||
farcall DrawEnemyHUD
|
||||
call WaitBGMap
|
||||
jp RefreshBattleHuds
|
||||
|
||||
; 373c9
|
119
engine/battle/move_effects/sketch.asm
Normal file
119
engine/battle/move_effects/sketch.asm
Normal file
@ -0,0 +1,119 @@
|
||||
BattleCommand_Sketch: ; 35a74
|
||||
; sketch
|
||||
|
||||
call ClearLastMove
|
||||
; Don't sketch during a link battle
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
jr z, .not_linked
|
||||
call AnimateFailedMove
|
||||
jp PrintNothingHappened
|
||||
|
||||
.not_linked
|
||||
; If the opponent has a substitute up, fail.
|
||||
call CheckSubstituteOpp
|
||||
jp nz, .fail
|
||||
; If the opponent is transformed, fail.
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVarAddr
|
||||
bit SUBSTATUS_TRANSFORMED, [hl]
|
||||
jp nz, .fail
|
||||
; Get the user's moveset in its party struct.
|
||||
; This move replacement shall be permanent.
|
||||
; Pointer will be in de.
|
||||
ld a, MON_MOVES
|
||||
call UserPartyAttr
|
||||
ld d, h
|
||||
ld e, l
|
||||
; Get the battle move structs.
|
||||
ld hl, BattleMonMoves
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .get_last_move
|
||||
ld hl, EnemyMonMoves
|
||||
.get_last_move
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
ld [wTypeMatchup], a
|
||||
ld b, a
|
||||
; Fail if move is invalid or is Struggle.
|
||||
and a
|
||||
jr z, .fail
|
||||
cp STRUGGLE
|
||||
jr z, .fail
|
||||
; Fail if user already knows that move
|
||||
ld c, NUM_MOVES
|
||||
.does_user_already_know_move
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .fail
|
||||
dec c
|
||||
jr nz, .does_user_already_know_move
|
||||
; Find Sketch in the user's moveset.
|
||||
; Pointer in hl, and index in c.
|
||||
dec hl
|
||||
ld c, NUM_MOVES
|
||||
.find_sketch
|
||||
dec c
|
||||
ld a, [hld]
|
||||
cp SKETCH
|
||||
jr nz, .find_sketch
|
||||
inc hl
|
||||
; The Sketched move is loaded to that slot.
|
||||
ld a, b
|
||||
ld [hl], a
|
||||
; Copy the base PP from that move.
|
||||
push bc
|
||||
push hl
|
||||
dec a
|
||||
ld hl, Moves + MOVE_PP
|
||||
call GetMoveAttr
|
||||
pop hl
|
||||
ld bc, BattleMonPP - BattleMonMoves
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
pop bc
|
||||
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .user_trainer
|
||||
ld a, [wBattleMode]
|
||||
dec a
|
||||
jr nz, .user_trainer
|
||||
; wildmon
|
||||
ld a, [hl]
|
||||
push bc
|
||||
ld hl, wWildMonPP
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld [hl], a
|
||||
ld hl, wWildMonMoves
|
||||
add hl, bc
|
||||
pop bc
|
||||
ld [hl], b
|
||||
jr .done_copy
|
||||
|
||||
.user_trainer
|
||||
ld a, [hl]
|
||||
push af
|
||||
ld l, c
|
||||
ld h, 0
|
||||
add hl, de
|
||||
ld a, b
|
||||
ld [hl], a
|
||||
pop af
|
||||
ld de, MON_PP - MON_MOVES
|
||||
add hl, de
|
||||
ld [hl], a
|
||||
.done_copy
|
||||
call GetMoveName
|
||||
call AnimateCurrentMove
|
||||
|
||||
ld hl, SketchedText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.fail
|
||||
call AnimateFailedMove
|
||||
jp PrintDidntAffect
|
||||
|
||||
; 35b16
|
145
engine/battle/move_effects/sleep_talk.asm
Normal file
145
engine/battle/move_effects/sleep_talk.asm
Normal file
@ -0,0 +1,145 @@
|
||||
BattleCommand_SleepTalk: ; 35b33
|
||||
; sleeptalk
|
||||
|
||||
call ClearLastMove
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jr nz, .fail
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
ld hl, BattleMonMoves + 1
|
||||
ld a, [DisabledMove]
|
||||
ld d, a
|
||||
jr z, .got_moves
|
||||
ld hl, EnemyMonMoves + 1
|
||||
ld a, [EnemyDisabledMove]
|
||||
ld d, a
|
||||
.got_moves
|
||||
ld a, BATTLE_VARS_STATUS
|
||||
call GetBattleVar
|
||||
and SLP
|
||||
jr z, .fail
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .fail
|
||||
call .safely_check_has_usable_move
|
||||
jr c, .fail
|
||||
dec hl
|
||||
.sample_move
|
||||
push hl
|
||||
call BattleRandom
|
||||
maskbits NUM_MOVES
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
and a
|
||||
jr z, .sample_move
|
||||
ld e, a
|
||||
ld a, BATTLE_VARS_MOVE_ANIM
|
||||
call GetBattleVar
|
||||
cp e
|
||||
jr z, .sample_move
|
||||
ld a, e
|
||||
cp d
|
||||
jr z, .sample_move
|
||||
call .check_two_turn_move
|
||||
jr z, .sample_move
|
||||
ld a, BATTLE_VARS_MOVE
|
||||
call GetBattleVarAddr
|
||||
ld a, e
|
||||
ld [hl], a
|
||||
call CheckUserIsCharging
|
||||
jr nz, .charging
|
||||
ld a, [wKickCounter]
|
||||
push af
|
||||
call BattleCommand_LowerSub
|
||||
pop af
|
||||
ld [wKickCounter], a
|
||||
.charging
|
||||
call LoadMoveAnim
|
||||
call UpdateMoveData
|
||||
jp ResetTurn
|
||||
|
||||
.fail
|
||||
call AnimateFailedMove
|
||||
jp TryPrintButItFailed
|
||||
|
||||
.safely_check_has_usable_move
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
call .check_has_usable_move
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
.check_has_usable_move
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
ld a, [DisabledMove]
|
||||
jr z, .got_move_2
|
||||
|
||||
ld a, [EnemyDisabledMove]
|
||||
.got_move_2
|
||||
ld b, a
|
||||
ld a, BATTLE_VARS_MOVE
|
||||
call GetBattleVar
|
||||
ld c, a
|
||||
dec hl
|
||||
ld d, NUM_MOVES
|
||||
.loop2
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .carry
|
||||
|
||||
cp c
|
||||
jr z, .nope
|
||||
cp b
|
||||
jr z, .nope
|
||||
|
||||
call .check_two_turn_move
|
||||
jr nz, .no_carry
|
||||
|
||||
.nope
|
||||
inc hl
|
||||
dec d
|
||||
jr nz, .loop2
|
||||
|
||||
.carry
|
||||
scf
|
||||
ret
|
||||
|
||||
.no_carry
|
||||
and a
|
||||
ret
|
||||
|
||||
.check_two_turn_move
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
|
||||
ld b, a
|
||||
callfar GetMoveEffect
|
||||
ld a, b
|
||||
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
|
||||
cp EFFECT_SKULL_BASH
|
||||
ret z
|
||||
cp EFFECT_RAZOR_WIND
|
||||
ret z
|
||||
cp EFFECT_SKY_ATTACK
|
||||
ret z
|
||||
cp EFFECT_SOLARBEAM
|
||||
ret z
|
||||
cp EFFECT_FLY
|
||||
ret z
|
||||
cp EFFECT_BIDE
|
||||
ret
|
||||
|
||||
; 35bff
|
13
engine/battle/move_effects/snore.asm
Normal file
13
engine/battle/move_effects/snore.asm
Normal file
@ -0,0 +1,13 @@
|
||||
BattleCommand_Snore: ; 359d0
|
||||
; snore
|
||||
ld a, BATTLE_VARS_STATUS
|
||||
call GetBattleVar
|
||||
and SLP
|
||||
ret nz
|
||||
call ResetDamage
|
||||
ld a, $1
|
||||
ld [AttackMissed], a
|
||||
call FailMove
|
||||
jp EndMoveEffect
|
||||
|
||||
; 359e6
|
@ -23,5 +23,5 @@ BattleCommand_Spikes: ; 37683
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp FailSpikes
|
||||
jp FailMove
|
||||
; 376a0
|
88
engine/battle/move_effects/spite.asm
Normal file
88
engine/battle/move_effects/spite.asm
Normal file
@ -0,0 +1,88 @@
|
||||
BattleCommand_Spite: ; 35c0f
|
||||
; spite
|
||||
|
||||
ld a, [AttackMissed]
|
||||
and a
|
||||
jp nz, .failed
|
||||
ld bc, PARTYMON_STRUCT_LENGTH ; ????
|
||||
ld hl, EnemyMonMoves
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_moves
|
||||
ld hl, BattleMonMoves
|
||||
.got_moves
|
||||
ld a, BATTLE_VARS_LAST_COUNTER_MOVE_OPP
|
||||
call GetBattleVar
|
||||
and a
|
||||
jr z, .failed
|
||||
cp STRUGGLE
|
||||
jr z, .failed
|
||||
ld b, a
|
||||
ld c, -1
|
||||
.loop
|
||||
inc c
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nz, .loop
|
||||
ld [wTypeMatchup], a
|
||||
dec hl
|
||||
ld b, 0
|
||||
push bc
|
||||
ld c, BattleMonPP - BattleMonMoves
|
||||
add hl, bc
|
||||
pop bc
|
||||
ld a, [hl]
|
||||
and PP_MASK
|
||||
jr z, .failed
|
||||
push bc
|
||||
call GetMoveName
|
||||
; lose 2-5 PP
|
||||
call BattleRandom
|
||||
and %11
|
||||
inc a
|
||||
inc a
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
and PP_MASK
|
||||
cp b
|
||||
jr nc, .deplete_pp
|
||||
ld b, a
|
||||
.deplete_pp
|
||||
ld a, [hl]
|
||||
sub b
|
||||
ld [hl], a
|
||||
push af
|
||||
ld a, MON_PP
|
||||
call OpponentPartyAttr
|
||||
ld d, b
|
||||
pop af
|
||||
pop bc
|
||||
add hl, bc
|
||||
ld e, a
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVar
|
||||
bit SUBSTATUS_TRANSFORMED, a
|
||||
jr nz, .transformed
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr nz, .not_wildmon
|
||||
ld a, [wBattleMode]
|
||||
dec a
|
||||
jr nz, .not_wildmon
|
||||
ld hl, wWildMonPP
|
||||
add hl, bc
|
||||
.not_wildmon
|
||||
ld [hl], e
|
||||
.transformed
|
||||
push de
|
||||
call AnimateCurrentMove
|
||||
pop de
|
||||
ld a, d
|
||||
ld [wTypeMatchup], a
|
||||
ld hl, SpiteEffectText
|
||||
jp StdBattleTextBox
|
||||
|
||||
.failed
|
||||
jp PrintDidntAffect2
|
||||
|
||||
; 35c94
|
6
engine/battle/move_effects/splash.asm
Normal file
6
engine/battle/move_effects/splash.asm
Normal file
@ -0,0 +1,6 @@
|
||||
BattleCommand_Splash: ; 36fe1
|
||||
call AnimateCurrentMove
|
||||
farcall StubbedTrainerRankings_Splash
|
||||
jp PrintNothingHappened
|
||||
|
||||
; 36fed
|
90
engine/battle/move_effects/substitute.asm
Normal file
90
engine/battle/move_effects/substitute.asm
Normal file
@ -0,0 +1,90 @@
|
||||
BattleCommand_Substitute: ; 36e7c
|
||||
; substitute
|
||||
|
||||
call BattleCommand_MoveDelay
|
||||
ld hl, BattleMonMaxHP
|
||||
ld de, PlayerSubstituteHP
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .got_hp
|
||||
ld hl, EnemyMonMaxHP
|
||||
ld de, EnemySubstituteHP
|
||||
.got_hp
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVar
|
||||
bit SUBSTATUS_SUBSTITUTE, a
|
||||
jr nz, .already_has_sub
|
||||
|
||||
ld a, [hli]
|
||||
ld b, [hl]
|
||||
srl a
|
||||
rr b
|
||||
srl a
|
||||
rr b
|
||||
dec hl
|
||||
dec hl
|
||||
ld a, b
|
||||
ld [de], a
|
||||
ld a, [hld]
|
||||
sub b
|
||||
ld e, a
|
||||
ld a, [hl]
|
||||
sbc 0
|
||||
ld d, a
|
||||
jr c, .too_weak_to_sub
|
||||
ld a, d
|
||||
or e
|
||||
jr z, .too_weak_to_sub
|
||||
ld [hl], d
|
||||
inc hl
|
||||
ld [hl], e
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS4
|
||||
call GetBattleVarAddr
|
||||
set SUBSTATUS_SUBSTITUTE, [hl]
|
||||
|
||||
ld hl, wPlayerWrapCount
|
||||
ld de, wPlayerTrappingMove
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr z, .player
|
||||
ld hl, wEnemyWrapCount
|
||||
ld de, wEnemyTrappingMove
|
||||
.player
|
||||
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [de], a
|
||||
call _CheckBattleScene
|
||||
jr c, .no_anim
|
||||
|
||||
xor a
|
||||
ld [wNumHits], a
|
||||
ld [FXAnimID + 1], a
|
||||
ld [wKickCounter], a
|
||||
ld a, SUBSTITUTE
|
||||
call LoadAnim
|
||||
jr .finish
|
||||
|
||||
.no_anim
|
||||
call BattleCommand_RaiseSubNoAnim
|
||||
.finish
|
||||
ld hl, MadeSubstituteText
|
||||
call StdBattleTextBox
|
||||
jp RefreshBattleHuds
|
||||
|
||||
.already_has_sub
|
||||
call CheckUserIsCharging
|
||||
call nz, BattleCommand_RaiseSub
|
||||
ld hl, HasSubstituteText
|
||||
jr .jp_stdbattletextbox
|
||||
|
||||
.too_weak_to_sub
|
||||
call CheckUserIsCharging
|
||||
call nz, BattleCommand_RaiseSub
|
||||
ld hl, TooWeakSubText
|
||||
.jp_stdbattletextbox
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 36f0b
|
11
engine/battle/move_effects/sunny_day.asm
Normal file
11
engine/battle/move_effects/sunny_day.asm
Normal file
@ -0,0 +1,11 @@
|
||||
BattleCommand_StartSun: ; 37c07
|
||||
; startsun
|
||||
ld a, WEATHER_SUN
|
||||
ld [Weather], a
|
||||
ld a, 5
|
||||
ld [WeatherCount], a
|
||||
call AnimateCurrentMove
|
||||
ld hl, SunGotBrightText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 37c1a
|
91
engine/battle/move_effects/teleport.asm
Normal file
91
engine/battle/move_effects/teleport.asm
Normal file
@ -0,0 +1,91 @@
|
||||
BattleCommand_Teleport: ; 36778
|
||||
; teleport
|
||||
|
||||
ld a, [BattleType]
|
||||
cp BATTLETYPE_SHINY
|
||||
jr z, .failed
|
||||
cp BATTLETYPE_TRAP
|
||||
jr z, .failed
|
||||
cp BATTLETYPE_CELEBI
|
||||
jr z, .failed
|
||||
cp BATTLETYPE_SUICUNE
|
||||
jr z, .failed
|
||||
|
||||
ld a, BATTLE_VARS_SUBSTATUS5_OPP
|
||||
call GetBattleVar
|
||||
bit SUBSTATUS_CANT_RUN, a
|
||||
jr nz, .failed
|
||||
; Only need to check these next things if it's your turn
|
||||
ld a, [hBattleTurn]
|
||||
and a
|
||||
jr nz, .enemy_turn
|
||||
; Can't teleport from a trainer battle
|
||||
ld a, [wBattleMode]
|
||||
dec a
|
||||
jr nz, .failed
|
||||
; If your level is greater than the opponent's, you run without fail.
|
||||
ld a, [CurPartyLevel]
|
||||
ld b, a
|
||||
ld a, [BattleMonLevel]
|
||||
cp b
|
||||
jr nc, .run_away
|
||||
; Generate a number between 0 and (YourLevel + TheirLevel).
|
||||
add b
|
||||
ld c, a
|
||||
inc c
|
||||
.loop_player
|
||||
call BattleRandom
|
||||
cp c
|
||||
jr nc, .loop_player
|
||||
; If that number is greater than 4 times your level, run away.
|
||||
srl b
|
||||
srl b
|
||||
cp b
|
||||
jr nc, .run_away
|
||||
|
||||
.failed
|
||||
call AnimateFailedMove
|
||||
jp PrintButItFailed
|
||||
|
||||
.enemy_turn
|
||||
ld a, [wBattleMode]
|
||||
dec a
|
||||
jr nz, .failed
|
||||
ld a, [BattleMonLevel]
|
||||
ld b, a
|
||||
ld a, [CurPartyLevel]
|
||||
cp b
|
||||
jr nc, .run_away
|
||||
add b
|
||||
ld c, a
|
||||
inc c
|
||||
.loop_enemy
|
||||
call BattleRandom
|
||||
cp c
|
||||
jr nc, .loop_enemy
|
||||
srl b
|
||||
srl b
|
||||
cp b
|
||||
; This does the wrong thing. What was
|
||||
; probably intended was jr c, .failed
|
||||
; The way this is made makes enemy use
|
||||
; of Teleport always succeed if able
|
||||
jr nc, .run_away
|
||||
.run_away
|
||||
call UpdateBattleMonInParty
|
||||
xor a
|
||||
ld [wNumHits], a
|
||||
inc a
|
||||
ld [wForcedSwitch], a
|
||||
ld [wKickCounter], a
|
||||
call SetBattleDraw
|
||||
call BattleCommand_LowerSub
|
||||
call LoadMoveAnim
|
||||
ld c, 20
|
||||
call DelayFrames
|
||||
call SetBattleDraw
|
||||
|
||||
ld hl, FledFromBattleText
|
||||
jp StdBattleTextBox
|
||||
|
||||
; 36804
|
20
engine/battle/move_effects/thunder.asm
Normal file
20
engine/battle/move_effects/thunder.asm
Normal file
@ -0,0 +1,20 @@
|
||||
BattleCommand_ThunderAccuracy: ; 37d94
|
||||
; thunderaccuracy
|
||||
|
||||
ld a, BATTLE_VARS_MOVE_TYPE
|
||||
call GetBattleVarAddr
|
||||
inc hl
|
||||
ld a, [Weather]
|
||||
cp WEATHER_RAIN
|
||||
jr z, .rain
|
||||
cp WEATHER_SUN
|
||||
ret nz
|
||||
ld [hl], 50 percent + 1
|
||||
ret
|
||||
|
||||
.rain
|
||||
; Redundant with CheckHit guranteeing hit
|
||||
ld [hl], 100 percent
|
||||
ret
|
||||
|
||||
; 37daa
|
39
engine/battle/move_effects/triple_kick.asm
Normal file
39
engine/battle/move_effects/triple_kick.asm
Normal file
@ -0,0 +1,39 @@
|
||||
BattleCommand_TripleKick: ; 346b2
|
||||
; triplekick
|
||||
|
||||
ld a, [wKickCounter]
|
||||
ld b, a
|
||||
inc b
|
||||
ld hl, CurDamage + 1
|
||||
ld a, [hld]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
.next_kick
|
||||
dec b
|
||||
ret z
|
||||
ld a, [hl]
|
||||
add e
|
||||
ld [hld], a
|
||||
ld a, [hl]
|
||||
adc d
|
||||
ld [hli], a
|
||||
|
||||
; No overflow.
|
||||
jr nc, .next_kick
|
||||
ld a, $ff
|
||||
ld [hld], a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
; 346cd
|
||||
|
||||
|
||||
BattleCommand_KickCounter: ; 346cd
|
||||
; kickcounter
|
||||
|
||||
ld hl, wKickCounter
|
||||
inc [hl]
|
||||
ret
|
||||
|
||||
; 346d2
|
Loading…
x
Reference in New Issue
Block a user