diff options
Diffstat (limited to 'asm/field_poison.s')
-rw-r--r-- | asm/field_poison.s | 317 |
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. |