More battle commentary/labels/constans and fix some spacing issues

Conflicts:
	engine/battle/core.asm
This commit is contained in:
xCrystal 2015-01-31 18:26:05 +01:00 committed by yenatch
parent 01e314f4f5
commit 97637e7ce7
2 changed files with 160 additions and 149 deletions

View File

@ -2,6 +2,7 @@ BattleCore:
; These are move effects (second value from the Moves table in bank $E).
ResidualEffects1: ; 3c000 (f:4000)
; most non-side effects
db CONVERSION_EFFECT
db HAZE_EFFECT
db SWITCH_AND_TELEPORT_EFFECT
@ -26,6 +27,7 @@ SetDamageEffects: ; 3c011 (f:4011)
db SPECIAL_DAMAGE_EFFECT
db -1
ResidualEffects2: ; 3c014 (f:4014)
; non-side effects not included in ResidualEffects1
; stat-affecting moves, sleep-inflicting moves, and Bide
; e.g., Meditate, Bide, Hypnosis
db $01
@ -846,7 +848,7 @@ FaintEnemyPokemon ; 0x3c567
ld [W_ENEMYDISABLEDMOVE], a
ld [wccef], a
ld [wccf3], a
ld hl, wccf1
ld hl, wPlayerUsedMove
ld [hli], a
ld [hl], a
hlCoord 12, 5
@ -1371,7 +1373,7 @@ EnemySendOutFirstMon: ; 3c92a (f:492a)
ld [W_ENEMYDISABLEDMOVE],a
ld [wccef],a
ld [wccf3],a
ld hl,wccf1
ld hl,wPlayerUsedMove
ld [hli],a
ld [hl],a
dec a
@ -1808,7 +1810,7 @@ SendOutMon: ; 3cc91 (f:4c91)
ld [wcc5b], a
ld [wd05b], a
ld [W_PLAYERMOVENUM], a
ld hl, wccf1
ld hl, wPlayerUsedMove
ld [hli], a
ld [hl], a
ld hl, wd060
@ -2547,7 +2549,7 @@ MoveSelectionMenu: ; 3d219 (f:5219)
ret
.regularmenu
call Func_3d3f5
call AnyMoveToSelect
ret z
ld hl, wBattleMonMoves
call .loadmoves
@ -2636,8 +2638,9 @@ MoveSelectionMenu: ; 3d219 (f:5219)
inc a
.movelistindex1
ld [hl], a
; fallthrough
Func_3d2fe: ; 3d2fe (f:52fe)
SelectMenuItem: ; 3d2fe (f:52fe)
ld a, [wMoveMenuType]
and a
jr z, .battleselect
@ -2651,7 +2654,7 @@ Func_3d2fe: ; 3d2fe (f:52fe)
ld a, [W_FLAGS_D733]
bit 0, a
jr nz, .select
call Func_3d4b6
call PrintMenuItem
ld a, [wMenuItemToSwap]
and a
jr z, .select
@ -2667,9 +2670,9 @@ Func_3d2fe: ; 3d2fe (f:52fe)
ld hl, $fff6
res 1, [hl]
bit 6, a
jp nz, Func_3d3c9 ; up
jp nz, CursorUp ; up
bit 7, a
jp nz, Func_3d3dd ; down
jp nz, CursorDown ; down
bit 2, a
jp nz, SwapMovesInMenu ; select
bit 1, a ; B, but was it reset above?
@ -2743,30 +2746,32 @@ MoveDisabledText: ; 3d3b3 (f:53b3)
WhichTechniqueString: ; 3d3b8 (f:53b8)
db "WHICH TECHNIQUE?@"
Func_3d3c9: ; 3d3c9 (f:53c9)
CursorUp: ; 3d3c9 (f:53c9)
ld a, [wCurrentMenuItem]
and a
jp nz, Func_3d2fe
jp nz, SelectMenuItem
call EraseMenuCursor
ld a, [wcd6c]
inc a
ld [wCurrentMenuItem], a
jp Func_3d2fe
jp SelectMenuItem
Func_3d3dd: ; 3d3dd (f:53dd)
CursorDown: ; 3d3dd (f:53dd)
ld a, [wCurrentMenuItem]
ld b, a
ld a, [wcd6c]
inc a
inc a
cp b
jp nz, Func_3d2fe
jp nz, SelectMenuItem
call EraseMenuCursor
ld a, $1
ld [wCurrentMenuItem], a
jp Func_3d2fe
jp SelectMenuItem
AnyMoveToSelect: ; 3d3f5 (f:53f5)
; return z and Struggle as the selected move if all moves have 0 PP and/or are disabled
Func_3d3f5: ; 3d3f5 (f:53f5)
ld a, STRUGGLE
ld [wPlayerSelectedMove], a
ld a, [W_PLAYERDISABLEDMOVE]
@ -2888,7 +2893,7 @@ SwapMovesInMenu: ; 3d435 (f:5435)
ld [wMenuItemToSwap], a ; select the current menu item for swapping
jp MoveSelectionMenu
Func_3d4b6: ; 3d4b6 (f:54b6)
PrintMenuItem: ; 3d4b6 (f:54b6)
xor a
ld [H_AUTOBGTRANSFERENABLED], a
hlCoord 0, 8
@ -2897,18 +2902,18 @@ Func_3d4b6: ; 3d4b6 (f:54b6)
call TextBoxBorder
ld a, [W_PLAYERDISABLEDMOVE]
and a
jr z, .asm_3d4df
jr z, .notDisabled
swap a
and $f
ld b, a
ld a, [wCurrentMenuItem]
cp b
jr nz, .asm_3d4df
jr nz, .notDisabled
hlCoord 1, 10
ld de, DisabledText
call PlaceString
jr .asm_3d54e
.asm_3d4df
jr .moveDisabled
.notDisabled
ld hl, wCurrentMenuItem
dec [hl]
xor a
@ -2916,10 +2921,11 @@ Func_3d4b6: ; 3d4b6 (f:54b6)
ld hl, wBattleMonMoves
ld a, [wCurrentMenuItem]
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
ld [wPlayerSelectedMove], a
ld b, $0 ; which item in the menu is the cursor pointing to? (0-3)
add hl, bc ; point to the item (move) in memory
ld a, [hl]
ld [wPlayerSelectedMove], a ; update wPlayerSelectedMove even if the move
; isn't actually selected (just pointed to by the cursor)
ld a, [wPlayerMonNumber]
ld [wWhichPokemon], a
ld a, $4
@ -2934,6 +2940,7 @@ Func_3d4b6: ; 3d4b6 (f:54b6)
ld a, [hl]
and $3f
ld [wcd6d], a
; print TYPE/<type> and <curPP>/<maxPP>
hlCoord 1, 9
ld de, TypeText
call PlaceString
@ -2949,10 +2956,10 @@ Func_3d4b6: ; 3d4b6 (f:54b6)
ld de, wd11e
ld bc, $102
call PrintNumber
call GetCurrentMove
call GetCurrentMove
hlCoord 2, 10
predef Func_27d98
.asm_3d54e
.moveDisabled
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
jp Delay3
@ -3125,9 +3132,9 @@ ExecutePlayerMove: ; 3d65e (f:565e)
call PrintGhostText
jp z, ExecutePlayerMoveDone
call CheckPlayerStatusConditions
jr nz, .asm_3d68a
jr nz, .playerHasNoSpecialCondition
jp [hl]
.asm_3d68a
.playerHasNoSpecialCondition
call GetCurrentMove
ld hl, W_PLAYERBATTSTATUS1
bit 4, [hl] ; charging up for attack
@ -3147,8 +3154,8 @@ Func_3d69a: ; 3d69a (f:569a)
PlayerCanExecuteChargingMove: ; 3d6a9 (f:56a9)
ld hl,W_PLAYERBATTSTATUS1
res 4,[hl] ; reset charging up and invulnerability statuses if mon was charging up for an attack
; being fully paralyzed or hurting oneself in confusion removes charging up status
; resulting in the Pokemon being invulnerable for the whole battle
; being fully paralyzed or hurting oneself in confusion removes charging up status
; resulting in the Pokemon being invulnerable for the whole battle
res 6,[hl]
PlayerCanExecuteMove: ; 3d6b0 (f:56b0)
call PrintMonName1Text
@ -3160,14 +3167,14 @@ PlayerCanExecuteMove: ; 3d6b0 (f:56b0)
ld hl,ResidualEffects1
ld de,1
call IsInArray
jp c,JumpMoveEffect ; ResidualEffects1 moves skip damage calculation and accuracy tests
; unless executed as part of their exclusive effect functions
jp c,JumpMoveEffect ; ResidualEffects1 moves skip damage calculation and accuracy tests
; unless executed as part of their exclusive effect functions
ld a,[W_PLAYERMOVEEFFECT]
ld hl,SpecialEffectsCont
ld de,1
call IsInArray
call c,JumpMoveEffect ; execute the effects of SpecialEffectsCont moves (e.g. Wrap, Thrash) but don't skip anything
CalcMoveDamage: ; 3d6dc (f:56dc)
call c,JumpMoveEffect ; execute the effects of SpecialEffectsCont moves (e.g. Wrap, Thrash) but don't skip anything
PlayerCalcMoveDamage: ; 3d6dc (f:56dc)
ld a,[W_PLAYERMOVEEFFECT]
ld hl,SetDamageEffects
ld de,1
@ -3179,7 +3186,7 @@ CalcMoveDamage: ; 3d6dc (f:56dc)
call GetDamageVarsForPlayerAttack
call CalculateDamage
jp z,asm_3d74b ; for moves with 0 BP, skip any further damage calculation and, for now, skip MoveHitTest
; for these moves, accuracy tests will only occur if they are called as part of the effect itself
; for these moves, accuracy tests will only occur if they are called as part of the effect itself
call AdjustDamageForMoveType
call RandomizeDamage
.moveHitTest
@ -3189,7 +3196,7 @@ asm_3d705
and a
jr z,asm_3d714
ld a,[W_PLAYERMOVEEFFECT]
sub a,7 ; Explosion effect
sub a,EXPLODE_EFFECT
jr z,asm_3d71e ; don't play any animation if the move missed, unless it was EXPLODE_EFFECT
jr asm_3d74b
asm_3d714
@ -3284,8 +3291,8 @@ MirrorMoveCheck
ld a,[wPlayerNumAttacksLeft]
dec a
ld [wPlayerNumAttacksLeft],a
jp nz,asm_3d714 ; for multi-hit moves, apply attack until PlayerNumAttacksLeft hits 0 or the enemy faints.
; damage calculation and accuracy tests only happen for the first hit
jp nz,asm_3d714 ; for multi-hit moves, apply attack until PlayerNumAttacksLeft hits 0 or the enemy faints.
; damage calculation and accuracy tests only happen for the first hit
res 2,[hl]
ld hl,MultiHitText
call PrintText
@ -3298,10 +3305,10 @@ MirrorMoveCheck
ld hl,SpecialEffects
ld de,1
call IsInArray
call nc,JumpMoveEffect ; move effects not included in SpecialEffects, which are the effects not covered yet.
; the only exception is Rage, whose effect will be executed for a second time (although it's irrelevant)
; includes some side effects and all non-volatile status effects but sleep.
; responsible for executing Twineedle's second effect (poison)
call nc,JumpMoveEffect ; move effects not included in SpecialEffects or in either of the ResidualEffect arrays,
; which are the effects not covered yet. Rage's effect will be executed for a second time (although it's irrelevant).
; Includes side effects that only need to be called if the target didn't faint.
; Responsible for executing Twineedle's second effect (poison)
jp ExecutePlayerMoveDone
MultiHitText: ; 3d805 (f:5805)
@ -3385,7 +3392,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
call PrintText
.sleepDone
xor a
ld [wccf1],a
ld [wPlayerUsedMove],a
ld hl,ExecutePlayerMoveDone ; player can't move this turn
jp .returnToHL
@ -3395,7 +3402,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
ld hl,IsFrozenText
call PrintText
xor a
ld [wccf1],a
ld [wPlayerUsedMove],a
ld hl,ExecutePlayerMoveDone ; player can't move this turn
jp .returnToHL
@ -3446,7 +3453,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
ld a,[W_PLAYERBATTSTATUS1]
add a ; is player confused?
jr nc,.TriedToUseDisabledMoveCheck
ld hl,wd06b
ld hl,W_PLAYERCONFUSEDCOUNTER
dec [hl]
jr nz,.IsConfused
ld hl,W_PLAYERBATTSTATUS1
@ -3572,8 +3579,8 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
call PrintText
ld hl,wPlayerNumAttacksLeft
dec [hl] ; did Trashing About counter hit 0?
ld hl,CalcMoveDamage ; skip DecrementPP
jp nz,.returnToHL
ld hl,PlayerCalcMoveDamage ; skip DecrementPP
jp nz,.returnToHL
push hl
ld hl,W_PLAYERBATTSTATUS1
res 1,[hl] ; no longer trashing about
@ -3582,7 +3589,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
and a,3
inc a
inc a ; confused for 2-5 turns
ld [wd06b],a
ld [W_PLAYERCONFUSEDCOUNTER],a
pop hl ; skip DecrementPP
jp .returnToHL
@ -3601,7 +3608,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
.RageCheck
ld a, [W_PLAYERBATTSTATUS2]
bit 6, a ; is mon using rage?
jp z, .CanUseMove ; if we made it this far, mon can move normally this turn
jp z, .checkPlayerStatusConditionsDone ; if we made it this far, mon can move normally this turn
ld a, RAGE
ld [wd11e], a
call GetMoveName
@ -3615,7 +3622,7 @@ CheckPlayerStatusConditions: ; 3d854 (f:5854)
xor a
ret
.CanUseMove
.checkPlayerStatusConditionsDone
ld a, $1
and a
ret
@ -3755,10 +3762,10 @@ MonName1Text: ; 3dafb (f:5afb)
ld a, [H_WHOSETURN]
and a
ld a, [W_PLAYERMOVENUM]
ld hl, wccf1
ld hl, wPlayerUsedMove
jr z, .asm_3db11
ld a, [W_ENEMYMOVENUM]
ld hl, wccf2
ld hl, wEnemyUsedMove
.asm_3db11
ld [hl], a
ld [wd11e], a
@ -3906,7 +3913,7 @@ PrintMoveFailureText: ; 3dbe2 (f:5be2)
; if you get here, the mon used jump kick or hi jump kick and missed
ld hl, W_DAMAGE ; since the move missed, W_DAMAGE will always contain 0 at this point.
; Thus, recoil damage will always be equal to 1 even if it was intended to be potential damage/8.
; Thus, recoil damage will always be equal to 1 even if it was intended to be potential damage/8.
ld a, [hli]
ld b, [hl]
srl a
@ -4756,8 +4763,8 @@ HandleCounterMove: ; 3e093 (f:6093)
ld a,[hli]
or [hl]
ret z ; If we made it here, Counter still misses if the last move used in battle did no damage to its target.
; W_DAMAGE is shared by both players, so Counter may strike back damage dealt by the Counter user itself
; if the conditions meet, even though 99% of the times damage will come from the target.
; W_DAMAGE is shared by both players, so Counter may strike back damage dealt by the Counter user itself
; if the conditions meet, even though 99% of the times damage will come from the target.
; if it did damage, double it
ld a,[hl]
add a
@ -5124,7 +5131,8 @@ BuildingRageText: ; 3e2f8 (f:62f8)
; copy last move for Mirror Move
; sets zero flag on failure and unsets zero flag on success
MirrorMoveCopyMove: ; 3e2fd (f:62fd)
; Mirror Move makes use of ccf1 and ccf2 addresses, which are mainly used to print the "[Pokemon] used [Move]" text.
; Mirror Move makes use of ccf1 (wPlayerUsedMove) and ccf2 (wEnemyUsedMove) addresses,
; which are mainly used to print the "[Pokemon] used [Move]" text.
; Both are set to 0 whenever a new Pokemon is sent out
; ccf1 is also set to 0 whenever the player is fast asleep or frozen solid.
; ccf2 is also set to 0 whenever the enemy is fast asleep or frozen solid.
@ -5132,19 +5140,19 @@ MirrorMoveCopyMove: ; 3e2fd (f:62fd)
ld a,[H_WHOSETURN]
and a
; values for player turn
ld a,[wccf2]
ld a,[wEnemyUsedMove]
ld hl,wPlayerSelectedMove
ld de,W_PLAYERMOVENUM
jr z,.next
; values for enemy turn
ld a,[wccf1]
ld a,[wPlayerUsedMove]
ld de,W_ENEMYMOVENUM
ld hl,wEnemySelectedMove
.next
ld [hl],a
cp a,MIRROR_MOVE ; did the target Pokemon last use Mirror Move, and miss?
jr z,.mirrorMoveFailed
and a ; null move?
and a ; has the target selected any move yet?
jr nz,ReloadMoveData
.mirrorMoveFailed
ld hl,MirrorMoveFailedText
@ -5618,9 +5626,9 @@ RandomizeDamage: ; 3e687 (f:6687)
ExecuteEnemyMove: ; 3e6bc (f:66bc)
ld a, [wEnemySelectedMove]
inc a
jp z, Func_3e88c
jp z, ExecuteEnemyMoveDone
call PrintGhostText
jp z, Func_3e88c
jp z, ExecuteEnemyMoveDone
ld a, [W_ISLINKBATTLE]
cp $4
jr nz, .asm_3e6dc
@ -5639,12 +5647,12 @@ ExecuteEnemyMove: ; 3e6bc (f:66bc)
ld a, $a
ld [wd05b], a
call CheckEnemyStatusConditions
jr nz, .canUseMove
jr nz, .enemyHasNoSpecialConditions
jp [hl]
.canUseMove
.enemyHasNoSpecialConditions
ld hl, W_ENEMYBATTSTATUS1
bit 4, [hl] ; is the enemy charging up for attack?
jr nz, asm_3e70b ; if so, jump
jr nz, enemyCanExecuteChargingMove ; if so, jump
call GetCurrentMove
Func_3e6fc: ; 3e6fc (f:66fc)
@ -5653,8 +5661,8 @@ Func_3e6fc: ; 3e6fc (f:66fc)
jp z, JumpMoveEffect
cp FLY_EFFECT
jp z, JumpMoveEffect
jr asm_3e72b
asm_3e70b: ; 3e70b (f:670b)
jr enemyCanExecuteMove
enemyCanExecuteChargingMove: ; 3e70b (f:670b)
ld hl, W_ENEMYBATTSTATUS1
res 4, [hl] ; no longer charging up for attack
res 6, [hl] ; no longer invulnerable to typical attacks
@ -5667,7 +5675,7 @@ asm_3e70b: ; 3e70b (f:670b)
call GetName
ld de, wcd6d
call CopyStringToCF4B
asm_3e72b: ; 3e72b (f:672b)
enemyCanExecuteMove: ; 3e72b (f:672b)
xor a
ld [wcced], a
call PrintMonName1Text
@ -5681,7 +5689,7 @@ asm_3e72b: ; 3e72b (f:672b)
ld de, $1
call IsInArray
call c, JumpMoveEffect
asm_3e750: ; 3e750 (f:6750)
EnemyCalcMoveDamage: ; 3e750 (f:6750)
call SwapPlayerAndEnemyLevels
ld a, [W_ENEMYMOVEEFFECT]
ld hl, SetDamageEffects
@ -5762,7 +5770,7 @@ asm_3e7ef: ; 3e7ef (f:67ef)
cp MIRROR_MOVE_EFFECT
jr nz, .notMirrorMoveEffect
call MirrorMoveCopyMove
jp z, Func_3e88c
jp z, ExecuteEnemyMoveDone
jp Func_3e6fc
.notMirrorMoveEffect
cp METRONOME_EFFECT
@ -5782,7 +5790,7 @@ asm_3e7ef: ; 3e7ef (f:67ef)
ld a, [W_ENEMYMOVEEFFECT]
cp EXPLODE_EFFECT
jr z, .asm_3e83e
jp Func_3e88c
jp ExecuteEnemyMoveDone
.asm_3e82b
call ApplyAttackToPlayerPokemon
call PrintCriticalOHKOText
@ -5817,18 +5825,18 @@ asm_3e7ef: ; 3e7ef (f:67ef)
.asm_3e873
ld a, [W_ENEMYMOVEEFFECT]
and a
jr z, Func_3e88c
jr z, ExecuteEnemyMoveDone
ld hl, SpecialEffects
ld de, $1
call IsInArray
call nc, JumpMoveEffect
jr Func_3e88c
jr ExecuteEnemyMoveDone
HitXTimesText: ; 3e887 (f:6887)
TX_FAR _HitXTimesText
db "@"
Func_3e88c: ; 3e88c (f:688c)
ExecuteEnemyMoveDone: ; 3e88c (f:688c)
ld b, $1
ret
@ -5855,26 +5863,26 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
call PrintText
.next1
xor a
ld [wccf2], a
ld hl, Func_3e88c
jp .cannotUseMove
ld [wEnemyUsedMove], a
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfFrozen
bit FRZ, [hl]
jr z, .checkIfTrapped
ld hl, IsFrozenText
call PrintText
xor a
ld [wccf2], a
ld hl, Func_3e88c
jp .cannotUseMove
ld [wEnemyUsedMove], a
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfTrapped
ld a, [W_PLAYERBATTSTATUS1]
bit 5, a ; is the player using a multi-turn attack like warp
jp z, .checkIfFlinched
ld hl, CantMoveText
call PrintText
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfFlinched
ld hl, W_ENEMYBATTSTATUS1
bit 3, [hl] ; check if enemy mon flinched
@ -5882,8 +5890,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
res 3, [hl]
ld hl, FlinchedText
call PrintText
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfMustRecharge
ld hl, W_ENEMYBATTSTATUS2
bit 5, [hl] ; check if enemy mon has to recharge after using a move
@ -5891,8 +5899,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
res 5, [hl]
ld hl, MustRechargeText
call PrintText
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfAnyMoveDisabled
ld hl, W_ENEMYDISABLEDMOVE
ld a, [hl]
@ -5910,7 +5918,7 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld a, [W_ENEMYBATTSTATUS1]
add a ; check if enemy mon is confused
jp nc, .checkIfTriedToUseDisabledMove
ld hl, wd070
ld hl, W_ENEMYCONFUSEDCOUNTER
dec [hl]
jr nz, .isConfused
ld hl, W_ENEMYBATTSTATUS1
@ -5981,8 +5989,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
cp [hl]
jr nz, .checkIfParalysed
call PrintMoveIsDisabledText
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfParalysed
ld hl, wEnemyMonStatus
bit PAR, [hl]
@ -6009,8 +6017,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld a, STATUS_AFFECTED_ANIM
call PlayMoveAnimation
.notFlyOrChargeEffect
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.checkIfUsingBide
ld hl, W_ENEMYBATTSTATUS1
bit 0, [hl] ; is mon using bide?
@ -6031,8 +6039,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld hl, wEnemyNumAttacksLeft
dec [hl]
jr z, .unleashEnergy
ld hl, Func_3e88c
jp .cannotUseMove
ld hl, ExecuteEnemyMoveDone
jp .enemyReturnToHL
.unleashEnergy
ld hl, W_ENEMYBATTSTATUS1
res 0, [hl] ; not using bide any more
@ -6060,7 +6068,7 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld [W_ENEMYMOVENUM], a
call SwapPlayerAndEnemyLevels
ld hl, asm_3e782
jp .cannotUseMove
jp .enemyReturnToHL
.checkIfThrashingAbout
bit 1, [hl] ; is mon using thrash or petal dance?
jr z, .checkIfUsingMultiturnMove
@ -6070,8 +6078,8 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
call PrintText
ld hl, wEnemyNumAttacksLeft
dec [hl]
ld hl, asm_3e750
jp nz, .cannotUseMove
ld hl, EnemyCalcMoveDamage
jp nz, .enemyReturnToHL
push hl
ld hl, W_ENEMYBATTSTATUS1
res 1, [hl] ; mon is no longer using thrash or petal dance
@ -6080,9 +6088,9 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
and $3
inc a
inc a
ld [wd070], a
ld [W_ENEMYCONFUSEDCOUNTER], a
pop hl
jp .cannotUseMove
jp .enemyReturnToHL
.checkIfUsingMultiturnMove
bit 5, [hl] ; is mon using multi-turn move?
jp z, .checkIfUsingRage
@ -6091,24 +6099,24 @@ CheckEnemyStatusConditions: ; 3e88f (f:688f)
ld hl, wEnemyNumAttacksLeft
dec [hl]
ld hl, Func_3e794
jp nz, .cannotUseMove
jp .cannotUseMove
jp nz, .enemyReturnToHL
jp .enemyReturnToHL
.checkIfUsingRage
ld a, [W_ENEMYBATTSTATUS2]
bit 6, a ; is mon using rage?
jp z, .canUseMove
jp z, .checkEnemyStatusConditionsDone
ld a, RAGE
ld [wd11e], a
call GetMoveName
call CopyStringToCF4B
xor a
ld [W_ENEMYMOVEEFFECT], a
ld hl, asm_3e72b
jp .cannotUseMove
.cannotUseMove
ld hl, enemyCanExecuteMove
jp .enemyReturnToHL
.enemyReturnToHL
xor a ; set Z flag
ret
.canUseMove
.checkEnemyStatusConditionsDone
ld a, $1
and a ; clear Z flag
ret
@ -7114,13 +7122,13 @@ MoveEffectPointerTable: ; 3f150 (f:7150)
dw SwitchAndTeleportEffect ; SWITCH_AND_TELEPORT_EFFECT
dw TwoToFiveAttacksEffect ; TWO_TO_FIVE_ATTACKS_EFFECT
dw TwoToFiveAttacksEffect ; unused effect
dw FlichSideEffect ; FLINCH_SIDE_EFFECT1
dw FlinchSideEffect ; FLINCH_SIDE_EFFECT1
dw SleepEffect ; SLEEP_EFFECT
dw PoisonEffect ; POISON_SIDE_EFFECT2
dw FreezeBurnParalyzeEffect ; BURN_SIDE_EFFECT2
dw FreezeBurnParalyzeEffect ; unused effect
dw FreezeBurnParalyzeEffect ; PARALYZE_SIDE_EFFECT2
dw FlichSideEffect ; FLINCH_SIDE_EFFECT2
dw FlinchSideEffect ; FLINCH_SIDE_EFFECT2
dw OneHitKOEffect ; OHKO_EFFECT
dw ChargeEffect ; CHARGE_EFFECT
dw $0000 ; SUPER_FANG_EFFECT
@ -7186,7 +7194,7 @@ SleepEffect: ; 3f1fc (f:71fc)
res 5, a ; target no longer needs to recharge
ld [bc], a
jr nz, .setSleepCounter ; if the target had to recharge, all hit tests will be skipped
; including the event where the target already has another status
; including the event where the target already has another status
ld a, [de]
ld b, a
and $7
@ -7393,7 +7401,7 @@ FreezeBurnParalyzeEffect: ; 3f30c (f:730c)
ld hl, BurnedText
jp PrintText
.freeze
call ClearHyperBeam ; resets hyper beam (recharge) condition from both players
call ClearHyperBeam ; resets hyper beam (recharge) condition from target
ld a, 1 << FRZ
ld [wEnemyMonStatus], a
ld a, ANIM_A9
@ -7556,7 +7564,7 @@ StatModifierUpEffect: ; 3f428 (f:7428)
sbc $3
jp z, Func_3f520
.recalculateStat ; recalculate affected stat
; paralysis and burn penalties, as well as badge boosts are ignored
; paralysis and burn penalties, as well as badge boosts are ignored
push hl
push bc
ld hl, StatModifierRatios
@ -7639,7 +7647,7 @@ UpdateStatDone: ; 3f4ca (f:74ca)
ld a, [H_WHOSETURN]
and a
call z, ApplyBadgeStatBoosts ; whenever the player uses a stat-up move, badge boosts get reapplied again to every stat,
; even to those not affected by the stat-up move (will be boosted further)
; even to those not affected by the stat-up move (will be boosted further)
ld hl, MonsStatsRoseText
call PrintText
@ -7829,7 +7837,7 @@ UpdateStat2Done: ; 3f62c (f:762c)
ld a, [H_WHOSETURN]
and a
call nz, ApplyBadgeStatBoosts ; whenever the player uses a stat-down move, badge boosts get reapplied again to every stat,
; even to those not affected by the stat-up move (will be boosted further)
; even to those not affected by the stat-up move (will be boosted further)
ld hl, MonsStatsFellText
call PrintText
@ -8128,23 +8136,23 @@ TwoToFiveAttacksEffect: ; 3f811 (f:7811)
ld [hl], a ; set Twineedle's effect to poison effect
jr .saveNumberOfHits
FlichSideEffect: ; 3f85b (f:785b)
FlinchSideEffect: ; 3f85b (f:785b)
call CheckTargetSubstitute
ret nz
ld hl, W_ENEMYBATTSTATUS1
ld de, W_PLAYERMOVEEFFECT
ld a, [H_WHOSETURN]
and a
jr z, .asm_3f870
jr z, .flinchSideEffect
ld hl, W_PLAYERBATTSTATUS1
ld de, W_ENEMYMOVEEFFECT
.asm_3f870
.flinchSideEffect
ld a, [de]
cp FLINCH_SIDE_EFFECT1
ld b, $1a ; ~10% chance of flinch
jr z, .asm_3f879
jr z, .gotEffectChance
ld b, $4d ; ~30% chance of flinch
.asm_3f879
.gotEffectChance
call BattleRandom
cp b
ret nc
@ -8163,25 +8171,25 @@ ChargeEffect: ; 3f88c (f:788c)
ld a, [H_WHOSETURN]
and a
ld b, XSTATITEM_ANIM
jr z, .asm_3f8a1
jr z, .chargeEffect
ld hl, W_ENEMYBATTSTATUS1
ld de, W_ENEMYMOVEEFFECT
ld b, ANIM_AF
.asm_3f8a1
.chargeEffect
set 4, [hl]
ld a, [de]
dec de ; de contains enemy or player MOVENUM
cp FLY_EFFECT
jr nz, .asm_3f8ad
jr nz, .notFly
set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
ld b, TELEPORT
.asm_3f8ad
ld b, TELEPORT ; load Teleport's animation
.notFly
ld a, [de]
cp DIG
jr nz, .asm_3f8b6
jr nz, .notDigOrFly
set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
ld b, ANIM_C0
.asm_3f8b6
.notDigOrFly
xor a
ld [wcc5b], a
ld a, b
@ -8244,21 +8252,22 @@ TrappingEffect: ; 3f917 (f:7917)
ld de, wPlayerNumAttacksLeft
ld a, [H_WHOSETURN]
and a
jr z, .asm_3f928
jr z, .trappingEffect
ld hl, W_ENEMYBATTSTATUS1
ld de, wEnemyNumAttacksLeft
.asm_3f928
.trappingEffect
bit 5, [hl]
ret nz
call ClearHyperBeam
set 5, [hl]
call BattleRandom
call ClearHyperBeam ; since this effect is called before testing whether the move will hit,
; the target won't need to recharge even if the trapping move missed
set 5, [hl] ; mon is now using a trapping move
call BattleRandom ; 3/8 chance for 2 and 3 attacks, and 1/8 chance for 4 and 5 attacks
and $3
cp $2
jr c, .asm_3f93e
jr c, .setTrappingCounter
call BattleRandom
and $3
.asm_3f93e
.setTrappingCounter
inc a
ld [de], a
ret
@ -8282,36 +8291,36 @@ ConfusionSideEffect: ; 3f959 (f:7959)
call BattleRandom
cp $19
ret nc
jr Func_3f96f
jr ConfusionSideEffectSuccess
ConfusionEffect: ; 3f961 (f:7961)
call CheckTargetSubstitute
jr nz, Func_3f9a6
jr nz, ConfusionEffectFailed
call MoveHitTest
ld a, [W_MOVEMISSED]
and a
jr nz, Func_3f9a6
jr nz, ConfusionEffectFailed
Func_3f96f: ; 3f96f (f:796f)
ConfusionSideEffectSuccess: ; 3f96f (f:796f)
ld a, [H_WHOSETURN]
and a
ld hl, W_ENEMYBATTSTATUS1
ld bc, wd070
ld bc, W_ENEMYCONFUSEDCOUNTER
ld a, [W_PLAYERMOVEEFFECT]
jr z, .asm_3f986
jr z, .confuseTarget
ld hl, W_PLAYERBATTSTATUS1
ld bc, wd06b
ld bc, W_PLAYERCONFUSEDCOUNTER
ld a, [W_ENEMYMOVEEFFECT]
.asm_3f986
.confuseTarget
bit 7, [hl] ; is mon confused?
jr nz, Func_3f9a6
jr nz, ConfusionEffectFailed
set 7, [hl] ; mon is now confused
push af
call BattleRandom
and $3
and $3
inc a
inc a
ld [bc], a
ld [bc], a ; confusion status will last 2-5 turns
pop af
cp CONFUSION_SIDE_EFFECT
call nz, Func_3fb89
@ -8322,7 +8331,7 @@ BecameConfusedText: ; 3f9a1 (f:79a1)
TX_FAR _BecameConfusedText
db "@"
Func_3f9a6: ; 3f9a6 (f:79a6)
ConfusionEffectFailed: ; 3f9a6 (f:79a6)
cp CONFUSION_SIDE_EFFECT
ret z
ld c, $32
@ -8343,9 +8352,9 @@ HyperBeamEffect: ; 3f9c1 (f:79c1)
ld hl, W_PLAYERBATTSTATUS2
ld a, [H_WHOSETURN]
and a
jr z, .asm_3f9cc
jr z, .hyperBeamEffect
ld hl, W_ENEMYBATTSTATUS2
.asm_3f9cc
.hyperBeamEffect
set 5, [hl] ; mon now needs to recharge
ret

View File

@ -379,8 +379,8 @@ wcced:: ds 1
wccee:: ds 1
wccef:: ds 1
wccf0:: ds 1
wccf1:: ds 1
wccf2:: ds 1
wPlayerUsedMove:: ds 1
wEnemyUsedMove:: ds 1
wccf3:: ds 1
wccf4:: ds 1
@ -935,7 +935,8 @@ wPlayerNumAttacksLeft::
; when the player is attacking multiple times, the number of attacks left
ds 1
wd06b:: ds 1
W_PLAYERCONFUSEDCOUNTER:: ; wd06b
ds 1
W_PLAYERTOXICCOUNTER:: ; d06c
ds 1
@ -945,10 +946,11 @@ W_PLAYERDISABLEDMOVE:: ; d06d
ds 1
wEnemyNumAttacksLeft::
; when the player is attacking multiple times, the number of attacks left
; when the enemy is attacking multiple times, the number of attacks left
ds 1
wd070:: ds 1
W_ENEMYCONFUSEDCOUNTER:: ; wd070
ds 1
W_ENEMYTOXICCOUNTER:: ; d071
ds 1