summaryrefslogtreecommitdiff
path: root/asm/field_poison.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/field_poison.s')
-rw-r--r--asm/field_poison.s317
1 files changed, 317 insertions, 0 deletions
diff --git a/asm/field_poison.s b/asm/field_poison.s
new file mode 100644
index 000000000..36b10b747
--- /dev/null
+++ b/asm/field_poison.s
@@ -0,0 +1,317 @@
+ .include "constants/gba_constants.s"
+ .include "constants/species_constants.s"
+ .include "asm/macros.s"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_80C5684
+sub_80C5684: @ 80C5684
+ push {lr}
+ movs r1, 0x41
+ bl GetMonData
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0
+ beq _080C569C
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r1, r0
+ bne _080C56A0
+_080C569C:
+ movs r0, 0
+ b _080C56A2
+_080C56A0:
+ movs r0, 0x1
+_080C56A2:
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80C5684
+
+ thumb_func_start sub_80C56A8
+sub_80C56A8: @ 80C56A8
+ push {r4,r5,lr}
+ ldr r4, _080C56C8 @ =gPlayerParty
+ movs r5, 0
+_080C56AE:
+ adds r0, r4, 0
+ bl sub_80C5684
+ cmp r0, 0
+ beq _080C56CC
+ adds r0, r4, 0
+ movs r1, 0x39
+ bl GetMonData
+ cmp r0, 0
+ beq _080C56CC
+ movs r0, 0
+ b _080C56D6
+ .align 2, 0
+_080C56C8: .4byte gPlayerParty
+_080C56CC:
+ adds r5, 0x1
+ adds r4, 0x64
+ cmp r5, 0x5
+ ble _080C56AE
+ movs r0, 0x1
+_080C56D6:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80C56A8
+
+ thumb_func_start sub_80C56DC
+sub_80C56DC: @ 80C56DC
+ push {r4,r5,lr}
+ sub sp, 0x4
+ lsls r0, 24
+ lsrs r0, 24
+ movs r1, 0x64
+ adds r4, r0, 0
+ muls r4, r1
+ ldr r0, _080C5720 @ =gPlayerParty
+ adds r4, r0
+ movs r0, 0
+ str r0, [sp]
+ adds r0, r4, 0
+ movs r1, 0x7
+ bl AdjustFriendship
+ adds r0, r4, 0
+ movs r1, 0x37
+ mov r2, sp
+ bl SetMonData
+ ldr r5, _080C5724 @ =gStringVar1
+ adds r0, r4, 0
+ movs r1, 0x2
+ adds r2, r5, 0
+ bl GetMonData
+ adds r0, r5, 0
+ bl StringGetEnd10
+ add sp, 0x4
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_080C5720: .4byte gPlayerParty
+_080C5724: .4byte gStringVar1
+ thumb_func_end sub_80C56DC
+
+ thumb_func_start sub_80C5728
+sub_80C5728: @ 80C5728
+ push {r4,lr}
+ lsls r0, 24
+ lsrs r0, 24
+ movs r1, 0x64
+ muls r1, r0
+ ldr r0, _080C5764 @ =gPlayerParty
+ adds r4, r1, r0
+ adds r0, r4, 0
+ bl sub_80C5684
+ cmp r0, 0
+ beq _080C5768
+ adds r0, r4, 0
+ movs r1, 0x39
+ bl GetMonData
+ cmp r0, 0
+ bne _080C5768
+ adds r0, r4, 0
+ movs r1, 0x37
+ bl GetMonData
+ bl pokemon_ailments_get_primary
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _080C5768
+ movs r0, 0x1
+ b _080C576A
+ .align 2, 0
+_080C5764: .4byte gPlayerParty
+_080C5768:
+ movs r0, 0
+_080C576A:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80C5728
+
+ thumb_func_start sub_80C5770
+sub_80C5770: @ 80C5770
+ push {r4,r5,lr}
+ lsls r0, 24
+ lsrs r5, r0, 24
+ lsls r0, r5, 2
+ adds r0, r5
+ lsls r0, 3
+ ldr r1, _080C5794 @ =gTasks + 0x8
+ adds r4, r0, r1
+ movs r1, 0
+ ldrsh r0, [r4, r1]
+ cmp r0, 0x1
+ beq _080C57CA
+ cmp r0, 0x1
+ bgt _080C5798
+ cmp r0, 0
+ beq _080C579E
+ b _080C581A
+ .align 2, 0
+_080C5794: .4byte gTasks + 0x8
+_080C5798:
+ cmp r0, 0x2
+ beq _080C57DC
+ b _080C581A
+_080C579E:
+ ldrh r1, [r4, 0x2]
+ movs r2, 0x2
+ ldrsh r0, [r4, r2]
+ cmp r0, 0x5
+ bgt _080C57C4
+_080C57A8:
+ lsls r0, r1, 24
+ lsrs r0, 24
+ bl sub_80C5728
+ cmp r0, 0
+ bne _080C57F4
+ ldrh r0, [r4, 0x2]
+ adds r0, 0x1
+ strh r0, [r4, 0x2]
+ adds r1, r0, 0
+ lsls r0, 16
+ asrs r0, 16
+ cmp r0, 0x5
+ ble _080C57A8
+_080C57C4:
+ movs r0, 0x2
+ strh r0, [r4]
+ b _080C581A
+_080C57CA:
+ bl IsFieldMessageBoxHidden
+ lsls r0, 24
+ cmp r0, 0
+ beq _080C581A
+ ldrh r0, [r4]
+ subs r0, 0x1
+ strh r0, [r4]
+ b _080C581A
+_080C57DC:
+ bl sub_80C56A8
+ adds r1, r0, 0
+ cmp r1, 0
+ beq _080C580C
+ ldr r1, _080C57F0 @ =gScriptResult
+ movs r0, 0x1
+ strh r0, [r1]
+ b _080C5810
+ .align 2, 0
+_080C57F0: .4byte gScriptResult
+_080C57F4:
+ ldrb r0, [r4, 0x2]
+ bl sub_80C56DC
+ ldr r0, _080C5808 @ =UnknownString_81A1132
+ bl ShowFieldMessage
+ ldrh r0, [r4]
+ adds r0, 0x1
+ strh r0, [r4]
+ b _080C581A
+ .align 2, 0
+_080C5808: .4byte UnknownString_81A1132
+_080C580C:
+ ldr r0, _080C5820 @ =gScriptResult
+ strh r1, [r0]
+_080C5810:
+ bl EnableBothScriptContexts
+ adds r0, r5, 0
+ bl DestroyTask
+_080C581A:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_080C5820: .4byte gScriptResult
+ thumb_func_end sub_80C5770
+
+ thumb_func_start sub_80C5824
+sub_80C5824: @ 80C5824
+ push {lr}
+ ldr r0, _080C5838 @ =sub_80C5770
+ movs r1, 0x50
+ bl CreateTask
+ bl ScriptContext1_Stop
+ pop {r0}
+ bx r0
+ .align 2, 0
+_080C5838: .4byte sub_80C5770
+ thumb_func_end sub_80C5824
+
+ thumb_func_start overworld_poison
+overworld_poison: @ 80C583C
+ push {r4-r7,lr}
+ sub sp, 0x4
+ ldr r4, _080C58A8 @ =gPlayerParty
+ movs r7, 0
+ movs r6, 0
+ movs r5, 0x5
+_080C5848:
+ adds r0, r4, 0
+ movs r1, 0x5
+ bl GetMonData
+ cmp r0, 0
+ beq _080C588C
+ adds r0, r4, 0
+ movs r1, 0x37
+ bl GetMonData
+ bl pokemon_ailments_get_primary
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bne _080C588C
+ adds r0, r4, 0
+ movs r1, 0x39
+ bl GetMonData
+ str r0, [sp]
+ cmp r0, 0
+ beq _080C587E
+ subs r0, 0x1
+ str r0, [sp]
+ cmp r0, 0
+ bne _080C5880
+_080C587E:
+ adds r6, 0x1
+_080C5880:
+ adds r0, r4, 0
+ movs r1, 0x39
+ mov r2, sp
+ bl SetMonData
+ adds r7, 0x1
+_080C588C:
+ adds r4, 0x64
+ subs r5, 0x1
+ cmp r5, 0
+ bge _080C5848
+ cmp r6, 0
+ bne _080C589C
+ cmp r7, 0
+ beq _080C58A0
+_080C589C:
+ bl overworld_posion_effect
+_080C58A0:
+ cmp r6, 0
+ beq _080C58AC
+ movs r0, 0x2
+ b _080C58B6
+ .align 2, 0
+_080C58A8: .4byte gPlayerParty
+_080C58AC:
+ cmp r7, 0
+ bne _080C58B4
+ movs r0, 0
+ b _080C58B6
+_080C58B4:
+ movs r0, 0x1
+_080C58B6:
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end overworld_poison
+
+ .align 2, 0 @ Don't pad with nop.