Merge pull request #505 from mid-kid/battlecommands

Battle command fixes
This commit is contained in:
yenatch
2018-04-04 21:18:15 -04:00
committed by GitHub
7 changed files with 325 additions and 211 deletions

View File

@@ -556,8 +556,8 @@ CheckEnemyTurn: ; 3421f
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
call z, PlayFXAnimID
ld c, $1
call EnemyHurtItself
ld c, TRUE
call DoEnemyDamage
call BattleCommand_RaiseSub
call CantMove
jp EndTurn
@@ -676,8 +676,8 @@ HitConfusion: ; 343a5
call CallBattleCore
ld a, $1
ld [hBGMapMode], a
ld c, $1
call PlayerHurtItself
ld c, TRUE
call DoPlayerDamage
jp BattleCommand_RaiseSub
; 343db
@@ -2081,16 +2081,16 @@ BattleCommand_LowerSub: ; 34eee
; 34f57
BattleCommand_HitTarget: ; 34f57
; hittarget
BattleCommand_MoveAnim: ; 34f57
; moveanim
call BattleCommand_LowerSub
call BattleCommand_HitTargetNoSub
call BattleCommand_MoveAnimNoSub
jp BattleCommand_RaiseSub
; 34f60
BattleCommand_HitTargetNoSub: ; 34f60
BattleCommand_MoveAnimNoSub: ; 34f60
ld a, [wAttackMissed]
and a
jp nz, BattleCommand_MoveDelay
@@ -2274,65 +2274,68 @@ BattleCommand_FailureText: ; 35023
; 3505e
BattleCommand_CheckFaint: ; 3505e
; checkfaint
BattleCommand_ApplyDamage: ; 3505e
; applydamage
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVar
bit SUBSTATUS_ENDURE, a
jr z, .not_enduring
call BattleCommand_FalseSwipe
ld b, $0
jr nc, .okay
ld b, $1
jr .okay
jr z, .focus_band
.not_enduring
call BattleCommand_FalseSwipe
ld b, 0
jr nc, .damage
ld b, 1
jr .damage
.focus_band
call GetOpponentItem
ld a, b
cp HELD_FOCUS_BAND
ld b, $0
jr nz, .okay
ld b, 0
jr nz, .damage
call BattleRandom
cp c
jr nc, .okay
jr nc, .damage
call BattleCommand_FalseSwipe
ld b, $0
jr nc, .okay
ld b, $2
.okay
ld b, 0
jr nc, .damage
ld b, 2
.damage
push bc
call .check_sub
ld c, $0
call .update_damage_taken
ld c, FALSE
ld a, [hBattleTurn]
and a
jr nz, .damage_player
call EnemyHurtItself
call DoEnemyDamage
jr .done_damage
.damage_player
call PlayerHurtItself
call DoPlayerDamage
.done_damage
pop bc
ld a, b
and a
ret z
dec a
jr nz, .not_enduring2
jr nz, .focus_band_text
ld hl, EnduredText
jp StdBattleTextBox
.not_enduring2
.focus_band_text
call GetOpponentItem
ld a, [hl]
ld [wNamedObjectIndexBuffer], a
call GetItemName
ld hl, HungOnText
jp StdBattleTextBox
.check_sub
.update_damage_taken
ld a, BATTLE_VARS_SUBSTATUS4_OPP
call GetBattleVar
bit SUBSTATUS_SUBSTITUTE, a
@@ -2341,10 +2344,10 @@ BattleCommand_CheckFaint: ; 3505e
ld de, wPlayerDamageTaken + 1
ld a, [hBattleTurn]
and a
jr nz, .damage_taken
jr nz, .got_damage_taken
ld de, wEnemyDamageTaken + 1
.damage_taken
.got_damage_taken
ld a, [wCurDamage + 1]
ld b, a
ld a, [de]
@@ -2418,11 +2421,11 @@ GetFailureResultText: ; 350e4
ld a, $1
ld [wKickCounter], a
call LoadMoveAnim
ld c, $1
ld c, TRUE
ld a, [hBattleTurn]
and a
jp nz, EnemyHurtItself
jp PlayerHurtItself
jp nz, DoEnemyDamage
jp DoPlayerDamage
FailText_CheckOpponentProtect: ; 35157
ld a, BATTLE_VARS_SUBSTATUS1_OPP
@@ -2437,7 +2440,7 @@ FailText_CheckOpponentProtect: ; 35157
; 35165
BattleCommanda5: ; 35165
BattleCommand_BideFailText: ; 35165
ld a, [wAttackMissed]
and a
ret z
@@ -3620,15 +3623,13 @@ PlayFXAnimID: ; 35d08
ld c, 3
call DelayFrames
callfar PlayBattleAnim
ret
; 35d1c
EnemyHurtItself: ; 35d1c
DoEnemyDamage: ; 35d1c
ld hl, wCurDamage
ld a, [hli]
ld b, a
@@ -3638,13 +3639,14 @@ EnemyHurtItself: ; 35d1c
ld a, c
and a
jr nz, .mimic_sub_check
jr nz, .ignore_substitute
ld a, [wEnemySubStatus4]
bit SUBSTATUS_SUBSTITUTE, a
jp nz, SelfInflictDamageToSubstitute
jp nz, DoSubstituteDamage
.mimic_sub_check
.ignore_substitute
; Substract wCurDamage from wEnemyMonHP.
; store original HP in little endian wBuffer3/4
ld a, [hld]
ld b, a
ld a, [wEnemyMonHP + 1]
@@ -3657,19 +3659,18 @@ EnemyHurtItself: ; 35d1c
ld [wBuffer4], a
sbc b
ld [wEnemyMonHP], a
jr nc, .mimic_faint
jr nc, .no_underflow
ld a, [wBuffer4]
ld [hli], a
ld a, [wBuffer3]
ld [hl], a
xor a
ld hl, wEnemyMonHP
ld [hli], a
ld [hl], a
.mimic_faint
.no_underflow
ld hl, wEnemyMonMaxHP
ld a, [hli]
ld [wBuffer2], a
@@ -3680,6 +3681,7 @@ EnemyHurtItself: ; 35d1c
ld [wBuffer6], a
ld a, [hl]
ld [wBuffer5], a
hlcoord 2, 2
xor a
ld [wWhichHPBar], a
@@ -3690,7 +3692,7 @@ EnemyHurtItself: ; 35d1c
; 35d7e
PlayerHurtItself: ; 35d7e
DoPlayerDamage: ; 35d7e
ld hl, wCurDamage
ld a, [hli]
ld b, a
@@ -3700,12 +3702,15 @@ PlayerHurtItself: ; 35d7e
ld a, c
and a
jr nz, .mimic_sub_check
jr nz, .ignore_substitute
ld a, [wPlayerSubStatus4]
bit SUBSTATUS_SUBSTITUTE, a
jp nz, SelfInflictDamageToSubstitute
.mimic_sub_check
jp nz, DoSubstituteDamage
.ignore_substitute
; Substract wCurDamage from wBattleMonHP.
; store original HP in little endian wBuffer3/4
; store new HP in little endian wBuffer5/6
ld a, [hld]
ld b, a
ld a, [wBattleMonHP + 1]
@@ -3719,14 +3724,13 @@ PlayerHurtItself: ; 35d7e
sbc b
ld [wBattleMonHP], a
ld [wBuffer6], a
jr nc, .mimic_faint
jr nc, .no_underflow
ld a, [wBuffer4]
ld [hli], a
ld a, [wBuffer3]
ld [hl], a
xor a
ld hl, wBattleMonHP
ld [hli], a
ld [hl], a
@@ -3734,14 +3738,15 @@ PlayerHurtItself: ; 35d7e
ld [hli], a
ld [hl], a
.mimic_faint
.no_underflow
ld hl, wBattleMonMaxHP
ld a, [hli]
ld [wBuffer2], a
ld a, [hl]
ld [wBuffer1], a
hlcoord 10, 9
ld a, $1
ld a, 1
ld [wWhichHPBar], a
predef AnimateHPBar
.did_no_damage
@@ -3750,8 +3755,7 @@ PlayerHurtItself: ; 35d7e
; 35de0
SelfInflictDamageToSubstitute: ; 35de0
DoSubstituteDamage: ; 35de0
ld hl, SubTookDamageText
call StdBattleTextBox
@@ -4136,6 +4140,7 @@ BattleCommand_EatDream: ; 36008
SapHealth: ; 36011
; Divide damage by 2, store it in hDividend
ld hl, wCurDamage
ld a, [hli]
srl a
@@ -4145,10 +4150,11 @@ SapHealth: ; 36011
rr a
ld [hDividend + 1], a
or b
jr nz, .ok1
ld a, $1
jr nz, .at_least_one
ld a, 1
ld [hDividend + 1], a
.ok1
.at_least_one
ld hl, wBattleMonHP
ld de, wBattleMonMaxHP
ld a, [hBattleTurn]
@@ -4157,12 +4163,16 @@ SapHealth: ; 36011
ld hl, wEnemyMonHP
ld de, wEnemyMonMaxHP
.battlemonhp
; Store current HP in little endian wBuffer3/4
ld bc, wBuffer4
ld a, [hli]
ld [bc], a
ld a, [hl]
dec bc
ld [bc], a
; Store max HP in little endian wBuffer1/2
ld a, [de]
dec bc
ld [bc], a
@@ -4170,6 +4180,8 @@ SapHealth: ; 36011
ld a, [de]
dec bc
ld [bc], a
; Add hDividend to current HP and copy it to little endian wBuffer5/6
ld a, [hDividend + 1]
ld b, [hl]
add b
@@ -4180,7 +4192,9 @@ SapHealth: ; 36011
adc b
ld [hli], a
ld [wBuffer6], a
jr c, .okay2
jr c, .max_hp
; Substract current HP from max HP (to see if we have more than max HP)
ld a, [hld]
ld b, a
ld a, [de]
@@ -4191,8 +4205,10 @@ SapHealth: ; 36011
ld a, [de]
inc de
sbc b
jr nc, .okay3
.okay2
jr nc, .finish
.max_hp
; Load max HP into current HP and copy it to little endian wBuffer5/6
ld a, [de]
ld [hld], a
ld [wBuffer5], a
@@ -4201,7 +4217,8 @@ SapHealth: ; 36011
ld [hli], a
ld [wBuffer6], a
inc de
.okay3
.finish
ld a, [hBattleTurn]
and a
hlcoord 10, 9
@@ -5638,7 +5655,7 @@ CheckPlayerHasMonToSwitchTo: ; 36994
BattleCommand_EndLoop: ; 369b6
; endloop
; Loop back to the command before 'critical'.
; Loop back to 'critical'.
ld de, wPlayerRolloutCount
ld bc, wPlayerDamageTaken
@@ -5701,7 +5718,7 @@ BattleCommand_EndLoop: ; 369b6
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarAddr
res SUBSTATUS_IN_LOOP, [hl]
call BattleCommanda8
call BattleCommand_BeatUpFailText
jp EndMoveEffect
.not_triple_kick
@@ -5753,7 +5770,6 @@ BattleCommand_EndLoop: ; 369b6
ld [bc], a
ret
; Loop back to the command before 'critical'.
.loop_back_to_critical
ld a, [wBattleScriptBufferAddress + 1]
ld h, a

View File

@@ -5,9 +5,11 @@ BattleCommand_BeatUp: ; 35461
ld a, [hBattleTurn]
and a
jp nz, .enemy_beats_up
ld a, [wPlayerSubStatus3]
bit SUBSTATUS_IN_LOOP, a
jr nz, .next_mon
ld c, 20
call DelayFrames
xor a
@@ -51,11 +53,13 @@ BattleCommand_BeatUp: ; 35461
ld [wBeatUpHitAtLeastOnce], a
ld hl, BeatUpAttackText
call StdBattleTextBox
ld a, [wEnemyMonSpecies]
ld [wCurSpecies], a
call GetBaseData
ld a, [wBaseDefense]
ld c, a
push bc
ld a, MON_SPECIES
call GetBeatupMonLocation
@@ -65,12 +69,14 @@ BattleCommand_BeatUp: ; 35461
ld a, [wBaseAttack]
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
@@ -78,21 +84,22 @@ BattleCommand_BeatUp: ; 35461
.enemy_beats_up
ld a, [wEnemySubStatus3]
bit SUBSTATUS_IN_LOOP, a
jr nz, .not_first_enemy_beatup
jr nz, .enemy_next_mon
xor a
ld [wEnemyRolloutCount], a
ld [wd002], a
ld [wBeatUpHitAtLeastOnce], a
jr .enemy_continue
jr .enemy_got_mon
.not_first_enemy_beatup
.enemy_next_mon
ld a, [wEnemyRolloutCount]
ld b, a
ld a, [wOTPartyCount]
sub b
ld [wd002], a
.enemy_continue
.enemy_got_mon
ld a, [wBattleMode]
dec a
jr z, .wild
@@ -122,19 +129,20 @@ BattleCommand_BeatUp: ; 35461
call AddNTimes
ld de, wStringBuffer1
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, [wCurOTMon]
cp b
ld hl, wEnemyMonStatus
jr z, .active_enemy
ld a, MON_STATUS
call GetBeatupMonLocation
.active_enemy
@@ -157,11 +165,13 @@ BattleCommand_BeatUp: ; 35461
.finish_beatup
ld hl, BeatUpAttackText
call StdBattleTextBox
ld a, [wBattleMonSpecies]
ld [wCurSpecies], a
call GetBaseData
ld a, [wBaseDefense]
ld c, a
push bc
ld a, MON_SPECIES
call GetBeatupMonLocation
@@ -171,12 +181,14 @@ BattleCommand_BeatUp: ; 35461
ld a, [wBaseAttack]
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
@@ -191,7 +203,9 @@ BattleCommand_BeatUp: ; 35461
; 355b5
BattleCommanda8: ; 355b5
BattleCommand_BeatUpFailText: ; 355b5
; beatupfailtext
ld a, [wBeatUpHitAtLeastOnce]
and a
ret nz

View File

@@ -1,6 +1,8 @@
BattleCommand_FalseSwipe: ; 35c94
; falseswipe
; Makes sure wCurDamage < MonHP
ld hl, wEnemyMonHP
ld a, [hBattleTurn]
and a
@@ -15,12 +17,14 @@ BattleCommand_FalseSwipe: ; 35c94
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
@@ -28,11 +32,13 @@ BattleCommand_FalseSwipe: ; 35c94
dec a
ld [de], a
.okay
ld a, [wCriticalHit]
cp 2
jr nz, .carry
xor a
ld [wCriticalHit], a
.carry
scf
ret