summaryrefslogtreecommitdiff
path: root/battle/effects/thief.asm
diff options
context:
space:
mode:
Diffstat (limited to 'battle/effects/thief.asm')
-rw-r--r--battle/effects/thief.asm117
1 files changed, 117 insertions, 0 deletions
diff --git a/battle/effects/thief.asm b/battle/effects/thief.asm
new file mode 100644
index 000000000..617e73e37
--- /dev/null
+++ b/battle/effects/thief.asm
@@ -0,0 +1,117 @@
+BattleCommand50: ; 37492
+; thief
+
+ ld a, [hBattleTurn]
+ and a
+ jr nz, .enemy
+
+; The player needs to be able to steal an item.
+
+ call .playeritem
+ ld a, [hl]
+ and a
+ ret nz
+
+; 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
+ callba ItemIsMail
+ ret c
+
+ ld a, [EffectFailed]
+ and a
+ ret nz
+
+ ld a, [InLinkBattle]
+ and a
+ jr z, .stealenemyitem
+
+ ld a, [IsInBattle]
+ dec a
+ ret z
+
+.stealenemyitem
+ call .enemyitem
+ xor a
+ ld [hl], a
+ ld [de], a
+
+ call .playeritem
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+ jr .stole
+
+
+.enemy
+
+; The enemy can't already have an item.
+
+ call .enemyitem
+ ld a, [hl]
+ and a
+ ret nz
+
+; 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
+ callba ItemIsMail
+ ret c
+
+ ld a, [EffectFailed]
+ and a
+ ret nz
+
+; 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 .enemyitem
+ ld a, [$d265]
+ ld [hl], a
+ ld [de], a
+
+
+.stole
+ call GetItemName
+ ld hl, StoleText
+ jp StdBattleTextBox
+
+
+.playeritem
+ ld a, 1
+ call BattlePartyAttr
+ ld d, h
+ ld e, l
+ ld hl, BattleMonItem
+ ret
+
+.enemyitem
+ ld a, 1
+ call OTPartyAttr
+ ld d, h
+ ld e, l
+ ld hl, EnemyMonItem
+ ret
+; 37517
+