ref: 6d7043c0c65161ad8ee97fa66b94beba86761d25
parent: 78a3951d4718ba0822d76b172366c0d6c129821f
parent: 9f7adeafcfe4aaafcf3900cf7a5381d65d29fe05
author: Bryan Bishop <[email protected]>
date: Sun Sep 8 16:24:26 EDT 2013
Merge pull request #197 from yenatch/master comment some move effects
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -9328,72 +9328,102 @@
ld a, [hBattleTurn]
and a
- jr nz, .asm_374ce ; 37495 $37
- call .asm_37501
+ jr nz, .enemy
+
+; The player needs to be able to steal an item.
+
+ call .playeritem
ld a, [hl]
and a
ret nz
- call .asm_3750c
+
+; The enemy needs to have an item to steal.
+
+ call .enemyitem
ld a, [hl]
and a
ret z
+
+; Can't steal mail.
+
ld [$d265], a
ld d, a
- ld a, $2e
- ld hl, $5e76
- rst FarCall
+ callba ItemIsMail
ret c
+
ld a, [EffectFailed]
and a
ret nz
+
ld a, [InLinkBattle]
and a
- jr z, .asm_374be ; 374b7 $5
+ jr z, .stealenemyitem
+
ld a, [IsInBattle]
dec a
ret z
-.asm_374be
- call .asm_3750c
+
+.stealenemyitem
+ call .enemyitem
xor a
ld [hl], a
ld [de], a
- call .asm_37501
+
+ call .playeritem
ld a, [$d265]
ld [hl], a
ld [de], a
- jr .asm_374f8 ; 374cc $2a
-.asm_374ce
- call .asm_3750c
+ jr .stole
+
+
+.enemy
+
+; The enemy can't already have an item.
+
+ call .enemyitem
ld a, [hl]
and a
ret nz
- call .asm_37501
+
+; The player must have an item to steal.
+
+ call .playeritem
ld a, [hl]
and a
ret z
+
+; Can't steal mail!
+
ld [$d265], a
ld d, a
- ld a, $2e
- ld hl, $5e76
- rst FarCall
+ callba ItemIsMail
ret c
+
ld a, [EffectFailed]
and a
ret nz
- call .asm_37501
+
+; If the enemy steals your item,
+; it's gone for good if you don't get it back.
+
+ call .playeritem
xor a
ld [hl], a
ld [de], a
- call .asm_3750c
+
+ call .enemyitem
ld a, [$d265]
ld [hl], a
ld [de], a
-.asm_374f8
+
+
+.stole
call GetItemName
ld hl, StoleText
jp StdBattleTextBox
-.asm_37501
+
+.playeritem
ld a, 1
call BattlePartyAttr
ld d, h
@@ -9401,9 +9431,9 @@
ld hl, BattleMonItem
ret
-.asm_3750c
+.enemyitem
ld a, 1
- call $396d ; GetOTStat_Battle
+ call OTPartyAttr
ld d, h
ld e, l
ld hl, EnemyMonItem
@@ -9413,17 +9443,27 @@
BattleCommand51: ; 37517
; arenatrap
+
+; Doesn't work on an absent opponent.
+
call CheckHiddenOpponent
- jr nz, .asm_37530 ; 3751a $14
+ jr nz, .failed
+
+; Don't trap if the opponent is already trapped.
+
ld a, BATTLE_VARS_SUBSTATUS5
call GetBattleVarPair
- bit 7, [hl]
- jr nz, .asm_37530 ; 37523 $b
- set 7, [hl]
+ bit SUBSTATUS_CANT_RUN, [hl]
+ jr nz, .failed
+
+; Otherwise trap the opponent.
+
+ set SUBSTATUS_CANT_RUN, [hl]
call Function0x37e01
ld hl, CantEscapeNowText
jp StdBattleTextBox
-.asm_37530
+
+.failed
call Function0x37e77
jp PrintButItFailed
; 37536
@@ -9432,23 +9472,38 @@
BattleCommand52: ; 37536
; nightmare
+; Can't hit an absent opponent.
+
call CheckHiddenOpponent
- jr nz, .asm_3755d ; 37539 $22
+ jr nz, .failed
+
+; Can't hit a substitute.
+
call CheckSubstituteOpp
- jr nz, .asm_3755d ; 3753e $1d
+ jr nz, .failed
+
+; Only works on a sleeping opponent.
+
ld a, BATTLE_VARS_STATUS_OPP
call GetBattleVarPair
- and $7
- jr z, .asm_3755d ; 37547 $14
+ and SLP
+ jr z, .failed
+
+; Bail if the opponent is already having a nightmare.
+
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVarPair
- bit 0, [hl]
- jr nz, .asm_3755d ; 37550 $b
- set 0, [hl]
+ bit SUBSTATUS_NIGHTMARE, [hl]
+ jr nz, .failed
+
+; Otherwise give the opponent a nightmare.
+
+ set SUBSTATUS_NIGHTMARE, [hl]
call Function0x37e01
ld hl, StartedNightmareText
jp StdBattleTextBox
-.asm_3755d
+
+.failed
call Function0x37e77
jp PrintButItFailed
; 37563
@@ -9457,22 +9512,30 @@
BattleCommand53: ; 37563
; defrost
+; Thaw the user.
+
ld a, BATTLE_VARS_STATUS
call GetBattleVarPair
- bit 5, [hl]
+ bit FRZ, [hl]
ret z
- res 5, [hl]
+ res FRZ, [hl]
+
+; Don't update the enemy's party struct in a wild battle.
+
ld a, [hBattleTurn]
and a
- jr z, .asm_37578 ; 37570 $6
+ jr z, .party
+
ld a, [IsInBattle]
dec a
- jr z, .asm_3757f ; 37576 $7
-.asm_37578
- ld a, $20
+ jr z, .done
+
+.party
+ ld a, PartyMon1Status - PartyMon1
call UserPartyAttr
- res 5, [hl]
-.asm_3757f
+ res FRZ, [hl]
+
+.done
call RefreshBattleHuds
ld hl, WasDefrostedText
jp StdBattleTextBox
@@ -9486,25 +9549,40 @@
ld bc, PlayerStatLevels
ld a, [hBattleTurn]
and a
- jr z, .asm_37599 ; 37591 $6
+ jr z, .go
ld de, EnemyMonType1
ld bc, EnemyStatLevels
-.asm_37599
+
+.go
+
+; Curse is different for Ghost-types.
+
ld a, [de]
- cp $8
- jr z, .asm_375d7 ; 3759c $39
+ cp GHOST
+ jr z, .ghost
inc de
ld a, [de]
- cp $8
- jr z, .asm_375d7 ; 375a2 $33
+ cp GHOST
+ jr z, .ghost
+
+
+; If no stats can be increased, don't.
+
+; Attack
ld a, [bc]
- cp $d
- jr c, .asm_375af ; 375a7 $6
+ cp 13 ; max
+ jr c, .raise
+
+; Defense
inc bc
ld a, [bc]
- cp $d
- jr nc, .asm_3760a ; 375ad $5b
-.asm_375af
+ cp 13 ; max
+ jr nc, .cantraise
+
+.raise
+
+; Raise Attack and Defense, and lower Speed.
+
ld a, $1
ld [$c689], a
call Function0x37e01
@@ -9519,29 +9597,43 @@
call ResetMiss
call BattleCommand71
jp BattleCommand8c
-.asm_375d7
+
+
+.ghost
+
+; Cut HP in half and put a curse on the opponent.
+
call CheckHiddenOpponent
- jr nz, .asm_37604 ; 375da $28
+ jr nz, .failed
+
call CheckSubstituteOpp
- jr nz, .asm_37604 ; 375df $23
+ jr nz, .failed
+
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVarPair
bit 1, [hl]
- jr nz, .asm_37604 ; 375e8 $1a
+ jr nz, .failed
+
set 1, [hl]
call Function0x37e01
- ld hl, $4c9f
+ ld hl, GetHalfMaxHP
call CallBankF
- ld hl, $4c3f
+ ld hl, Function3cc3f
call CallBankF
call UpdateUserInParty
ld hl, PutACurseText
jp StdBattleTextBox
-.asm_37604
+
+.failed
call Function0x37e77
jp PrintButItFailed
-.asm_3760a
- ld b, $8
+
+
+.cantraise
+
+; Can't raise either stat.
+
+ ld b, $8 ; ABILITY
call GetStatName
call Function0x37e77
ld hl, WontRiseAnymoreText
--- a/main.asm
+++ b/main.asm
@@ -30935,7 +30935,7 @@
ld a, [CurPartyMon]
call AddNTimes
ld d, [hl]
- callba Functionb9e76
+ callba ItemIsMail
jr c, .asm_167ed
ld hl, PartyMon1Nickname
ld a, [CurPartyMon]
@@ -34050,7 +34050,7 @@
ld a, $1
call GetPartyParamLocation
ld d, [hl]
- callba Functionb9e76
+ callba ItemIsMail
pop hl
ld a, $14
jr c, .asm_24e2c
@@ -37666,7 +37666,7 @@
push hl
push bc
ld d, [hl]
- callba Functionb9e76
+ callba ItemIsMail
pop bc
pop hl
jr c, .asm_29c5e
@@ -72826,14 +72826,26 @@
INCBIN "baserom.gbc", $b92f7, $b9e76 - $b92f7
-Functionb9e76: ; b9e76
+ItemIsMail: ; b9e76
ld a, d
- ld hl, $5e80
- ld de, $0001
+ ld hl, .items
+ ld de, 1
jp IsInArray
; b9e80
-INCBIN "baserom.gbc", $b9e80, $b9e8b - $b9e80
+.items
+ db FLOWER_MAIL
+ db SURF_MAIL
+ db LITEBLUEMAIL
+ db PORTRAITMAIL
+ db LOVELY_MAIL
+ db EON_MAIL
+ db MORPH_MAIL
+ db BLUESKY_MAIL
+ db MUSIC_MAIL
+ db MIRAGE_MAIL
+ db $ff
+; b9e8b
SECTION "bank2F",ROMX,BANK[$2F]