diff options
Diffstat (limited to 'asm/berry.s')
-rw-r--r-- | asm/berry.s | 1089 |
1 files changed, 1089 insertions, 0 deletions
diff --git a/asm/berry.s b/asm/berry.s new file mode 100644 index 000000000..e7d9d241a --- /dev/null +++ b/asm/berry.s @@ -0,0 +1,1089 @@ + .include "constants/gba_constants.s" + .include "constants/species_constants.s" + .include "asm/macros.s" + + .syntax unified + + .text + + thumb_func_start unref_sub_80B4884 +unref_sub_80B4884: @ 80B4884 + push {lr} + sub sp, 0x4 + mov r1, sp + movs r0, 0 + strh r0, [r1] + ldr r1, _080B48A0 + ldr r2, _080B48A4 + mov r0, sp + bl CpuSet + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 +_080B48A0: .4byte gSaveBlock1 + 0x3160 +_080B48A4: .4byte 0x01000298 + thumb_func_end unref_sub_80B4884 + + thumb_func_start sub_80B48A8 +sub_80B48A8: @ 80B48A8 + push {r4-r6,lr} + adds r5, r0, 0 + ldr r3, _080B48E0 + movs r2, 0 + ldr r6, _080B48E4 + ldr r0, _080B48E8 + adds r4, r3, r0 +_080B48B6: + adds r0, r3, r2 + adds r1, r5, r2 + ldrb r1, [r1] + strb r1, [r0] + adds r2, 0x1 + cmp r2, r6 + bls _080B48B6 + ldr r2, _080B48EC + adds r1, r4, r2 + ldr r2, _080B48F0 + adds r0, r4, r2 + str r0, [r1] + ldr r0, _080B48F4 + adds r1, r4, r0 + adds r2, 0x2D + adds r0, r4, r2 + str r0, [r1] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080B48E0: .4byte gSaveBlock1 + 0x3160 +_080B48E4: .4byte 0x0000052f +_080B48E8: .4byte 0xffffcea0 +_080B48EC: .4byte 0x0000316c +_080B48F0: .4byte 0x0000361c +_080B48F4: .4byte 0x00003170 + thumb_func_end sub_80B48A8 + + thumb_func_start sub_80B48F8 +sub_80B48F8: @ 80B48F8 + push {r4-r7,lr} + ldr r3, _080B4934 + ldr r1, _080B4938 + adds r4, r3, r1 + ldr r6, [r4] + adds r1, 0x4 + adds r2, r3, r1 + ldr r7, [r2] + movs r1, 0 + str r1, [r4] + str r1, [r2] + adds r4, r0, 0 + movs r2, 0 + ldr r5, _080B493C +_080B4914: + adds r0, r4, r1 + ldrb r0, [r0] + adds r2, r0 + adds r1, 0x1 + cmp r1, r5 + bls _080B4914 + ldr r1, _080B4938 + adds r0, r3, r1 + str r6, [r0] + adds r1, 0x4 + adds r0, r3, r1 + str r7, [r0] + adds r0, r2, 0 + pop {r4-r7} + pop {r1} + bx r1 + .align 2, 0 +_080B4934: .4byte gSaveBlock1 +_080B4938: .4byte 0x0000316c +_080B493C: .4byte 0x0000052b + thumb_func_end sub_80B48F8 + + thumb_func_start sub_80B4940 +sub_80B4940: @ 80B4940 + push {r4,lr} + ldr r4, _080B4970 + ldr r1, _080B4974 + adds r0, r4, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _080B4984 + ldr r2, _080B4978 + adds r0, r4, r2 + ldrb r0, [r0] + cmp r0, 0 + beq _080B4984 + ldr r1, _080B497C + adds r0, r4, r1 + bl sub_80B48F8 + ldr r2, _080B4980 + adds r1, r4, r2 + ldr r1, [r1] + cmp r0, r1 + bne _080B4984 + movs r0, 0x1 + b _080B4986 + .align 2, 0 +_080B4970: .4byte gSaveBlock1 +_080B4974: .4byte 0x00003174 +_080B4978: .4byte 0x0000316a +_080B497C: .4byte 0x00003160 +_080B4980: .4byte 0x0000368c +_080B4984: + movs r0, 0 +_080B4986: + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80B4940 + + thumb_func_start GetBerryInfo +GetBerryInfo: @ 80B498C + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + cmp r4, 0x2B + bne _080B49A8 + bl sub_80B4940 + cmp r0, 0 + beq _080B49A8 + ldr r0, _080B49A4 + b _080B49BE + .align 2, 0 +_080B49A4: .4byte gSaveBlock1 + 0x3160 +_080B49A8: + subs r0, r4, 0x1 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x2A + bls _080B49B4 + movs r4, 0x1 +_080B49B4: + lsls r0, r4, 3 + subs r0, r4 + lsls r0, 2 + ldr r1, _080B49C4 + adds r0, r1 +_080B49BE: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080B49C4: .4byte gBerries - 0x1C + thumb_func_end GetBerryInfo + + thumb_func_start GetBerryTreeInfo +GetBerryTreeInfo: @ 80B49C8 + lsls r0, 24 + lsrs r0, 21 + ldr r1, _080B49D4 + adds r0, r1 + bx lr + .align 2, 0 +_080B49D4: .4byte gSaveBlock1 + 0x1608 + thumb_func_end GetBerryTreeInfo + + thumb_func_start FieldObjectInteractionWaterBerryTree +FieldObjectInteractionWaterBerryTree: @ 80B49D8 + push {lr} + ldr r0, _080B4A00 + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + lsls r0, 24 + lsrs r0, 24 + bl GetBerryTreeInfo + adds r2, r0, 0 + ldrb r0, [r2, 0x1] + lsls r0, 25 + lsrs r0, 25 + cmp r0, 0x2 + beq _080B4A14 + cmp r0, 0x2 + bgt _080B4A04 + cmp r0, 0x1 + beq _080B4A0E + b _080B4A2A + .align 2, 0 +_080B4A00: .4byte gSelectedMapObject +_080B4A04: + cmp r0, 0x3 + beq _080B4A1A + cmp r0, 0x4 + beq _080B4A20 + b _080B4A2A +_080B4A0E: + ldrb r0, [r2, 0x5] + movs r1, 0x10 + b _080B4A24 +_080B4A14: + ldrb r0, [r2, 0x5] + movs r1, 0x20 + b _080B4A24 +_080B4A1A: + ldrb r0, [r2, 0x5] + movs r1, 0x40 + b _080B4A24 +_080B4A20: + ldrb r0, [r2, 0x5] + movs r1, 0x80 +_080B4A24: + orrs r0, r1 + strb r0, [r2, 0x5] + b _080B4A2E +_080B4A2A: + movs r0, 0 + b _080B4A30 +_080B4A2E: + movs r0, 0x1 +_080B4A30: + pop {r1} + bx r1 + thumb_func_end FieldObjectInteractionWaterBerryTree + + thumb_func_start IsPlayerFacingPlantedBerryTree +IsPlayerFacingPlantedBerryTree: @ 80B4A34 + push {lr} + bl GetFieldObjectScriptPointerForComparison + ldr r1, _080B4A5C + cmp r0, r1 + bne _080B4A64 + ldr r0, _080B4A60 + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + lsls r0, 24 + lsrs r0, 24 + bl GetStageByBerryTreeId + lsls r0, 24 + cmp r0, 0 + bne _080B4A64 + movs r0, 0x1 + b _080B4A66 + .align 2, 0 +_080B4A5C: .4byte BerryTreeScript +_080B4A60: .4byte gSelectedMapObject +_080B4A64: + movs r0, 0 +_080B4A66: + pop {r1} + bx r1 + thumb_func_end IsPlayerFacingPlantedBerryTree + + thumb_func_start WaterBerryTree +WaterBerryTree: @ 80B4A6C + push {lr} + bl GetFieldObjectScriptPointerForComparison + ldr r1, _080B4A84 + cmp r0, r1 + bne _080B4A88 + bl FieldObjectInteractionWaterBerryTree + lsls r0, 24 + lsrs r0, 24 + b _080B4A8A + .align 2, 0 +_080B4A84: .4byte BerryTreeScript +_080B4A88: + movs r0, 0 +_080B4A8A: + pop {r1} + bx r1 + thumb_func_end WaterBerryTree + + thumb_func_start sub_80B4A90 +sub_80B4A90: @ 80B4A90 + push {r4,lr} + ldr r1, _080B4AB4 + ldr r0, _080B4AB8 + ldr r3, [r0] + ldr r4, [r0, 0x4] + movs r2, 0x7F + movs r0, 0xD0 + lsls r0, 5 + adds r1, r0 +_080B4AA2: + str r3, [r1] + str r4, [r1, 0x4] + subs r1, 0x8 + subs r2, 0x1 + cmp r2, 0 + bge _080B4AA2 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080B4AB4: .4byte gSaveBlock1 +_080B4AB8: .4byte gUnknown_083CD780 + thumb_func_end sub_80B4A90 + + thumb_func_start BerryTreeGrow +BerryTreeGrow: @ 80B4ABC + push {r4,lr} + adds r4, r0, 0 + ldrb r1, [r4, 0x1] + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + beq _080B4ACE +_080B4ACA: + movs r0, 0 + b _080B4B5A +_080B4ACE: + lsls r0, r1, 25 + lsrs r0, 25 + cmp r0, 0x5 + bhi _080B4B58 + lsls r0, 2 + ldr r1, _080B4AE0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080B4AE0: .4byte _080B4AE4 + .align 2, 0 +_080B4AE4: + .4byte _080B4ACA + .4byte _080B4B04 + .4byte _080B4B04 + .4byte _080B4B04 + .4byte _080B4AFC + .4byte _080B4B1C +_080B4AFC: + adds r0, r4, 0 + bl CalcBerryYield + strb r0, [r4, 0x4] +_080B4B04: + ldrb r2, [r4, 0x1] + lsls r1, r2, 25 + lsrs r1, 25 + adds r1, 0x1 + movs r0, 0x7F + ands r1, r0 + movs r0, 0x80 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r4, 0x1] + b _080B4B58 +_080B4B1C: + ldrb r0, [r4, 0x5] + movs r1, 0x11 + negs r1, r1 + ands r1, r0 + movs r0, 0x21 + negs r0, r0 + ands r1, r0 + subs r0, 0x20 + ands r1, r0 + movs r0, 0x7F + ands r1, r0 + movs r0, 0 + strb r0, [r4, 0x4] + ldrb r2, [r4, 0x1] + subs r0, 0x80 + ands r0, r2 + movs r2, 0x2 + orrs r0, r2 + strb r0, [r4, 0x1] + adds r1, 0x1 + movs r0, 0xF + ands r1, r0 + strb r1, [r4, 0x5] + cmp r1, 0xA + bne _080B4B58 + ldr r0, _080B4B60 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [r4] + str r1, [r4, 0x4] +_080B4B58: + movs r0, 0x1 +_080B4B5A: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080B4B60: .4byte gUnknown_083CD780 + thumb_func_end BerryTreeGrow + + thumb_func_start BerryTreeTimeUpdate +BerryTreeTimeUpdate: @ 80B4B64 + push {r4-r7,lr} + adds r6, r0, 0 + movs r2, 0 +_080B4B6A: + lsls r0, r2, 3 + ldr r1, _080B4BAC + adds r4, r0, r1 + ldrb r0, [r4] + adds r7, r2, 0x1 + cmp r0, 0 + beq _080B4BF8 + ldrb r1, [r4, 0x1] + movs r0, 0x7F + ands r0, r1 + cmp r0, 0 + beq _080B4BF8 + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _080B4BF8 + ldrb r0, [r4] + bl GetStageDurationByBerryType + lsls r0, 16 + lsrs r0, 16 + lsls r1, r0, 3 + adds r1, r0 + lsls r1, 3 + subs r1, r0 + cmp r6, r1 + blt _080B4BB4 + ldr r0, _080B4BB0 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [r4] + str r1, [r4, 0x4] + b _080B4BF8 + .align 2, 0 +_080B4BAC: .4byte gSaveBlock1 + 0x1608 +_080B4BB0: .4byte gUnknown_083CD780 +_080B4BB4: + adds r5, r6, 0 + cmp r5, 0 + beq _080B4BF8 + ldrh r1, [r4, 0x2] + cmp r1, r5 + ble _080B4BC4 + subs r0, r1, r5 + b _080B4BF6 +_080B4BC4: + subs r5, r1 + ldrb r0, [r4] + bl GetStageDurationByBerryType + strh r0, [r4, 0x2] + adds r0, r4, 0 + bl BerryTreeGrow + cmp r0, 0 + beq _080B4BF8 + ldrb r1, [r4, 0x1] + movs r0, 0x7F + ands r0, r1 + cmp r0, 0x5 + bne _080B4BE8 + ldrh r0, [r4, 0x2] + lsls r0, 2 + strh r0, [r4, 0x2] +_080B4BE8: + cmp r5, 0 + beq _080B4BF8 + ldrh r0, [r4, 0x2] + adds r1, r0, 0 + cmp r0, r5 + ble _080B4BC4 + subs r0, r5 +_080B4BF6: + strh r0, [r4, 0x2] +_080B4BF8: + adds r2, r7, 0 + cmp r2, 0x7F + ble _080B4B6A + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end BerryTreeTimeUpdate + + thumb_func_start PlantBerryTree +PlantBerryTree: @ 80B4C04 + push {r4-r7,lr} + adds r4, r1, 0 + adds r5, r2, 0 + lsls r0, 24 + lsrs r0, 24 + lsls r4, 24 + lsrs r4, 24 + lsls r5, 24 + lsrs r5, 24 + lsls r3, 24 + lsrs r7, r3, 24 + bl GetBerryTreeInfo + adds r6, r0, 0 + ldr r0, _080B4C68 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [r6] + str r1, [r6, 0x4] + strb r4, [r6] + adds r0, r4, 0 + bl GetStageDurationByBerryType + strh r0, [r6, 0x2] + movs r1, 0x7F + ands r1, r5 + ldrb r2, [r6, 0x1] + movs r0, 0x80 + negs r0, r0 + ands r0, r2 + orrs r0, r1 + strb r0, [r6, 0x1] + cmp r5, 0x5 + bne _080B4C56 + adds r0, r6, 0 + bl CalcBerryYield + strb r0, [r6, 0x4] + ldrh r0, [r6, 0x2] + lsls r0, 2 + strh r0, [r6, 0x2] +_080B4C56: + cmp r7, 0 + bne _080B4C62 + ldrb r0, [r6, 0x1] + movs r1, 0x80 + orrs r0, r1 + strb r0, [r6, 0x1] +_080B4C62: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080B4C68: .4byte gUnknown_083CD780 + thumb_func_end PlantBerryTree + + thumb_func_start RemoveBerryTree +RemoveBerryTree: @ 80B4C6C + lsls r0, 24 + ldr r1, _080B4C84 + lsrs r0, 21 + ldr r2, _080B4C88 + adds r1, r2 + adds r0, r1 + ldr r1, _080B4C8C + ldr r2, [r1, 0x4] + ldr r1, [r1] + str r1, [r0] + str r2, [r0, 0x4] + bx lr + .align 2, 0 +_080B4C84: .4byte gSaveBlock1 +_080B4C88: .4byte 0x00001608 +_080B4C8C: .4byte gUnknown_083CD780 + thumb_func_end RemoveBerryTree + + thumb_func_start GetBerryTypeByBerryTreeId +GetBerryTypeByBerryTreeId: @ 80B4C90 + lsls r0, 24 + ldr r1, _080B4CA0 + lsrs r0, 21 + adds r0, r1 + ldr r1, _080B4CA4 + adds r0, r1 + ldrb r0, [r0] + bx lr + .align 2, 0 +_080B4CA0: .4byte gSaveBlock1 +_080B4CA4: .4byte 0x00001608 + thumb_func_end GetBerryTypeByBerryTreeId + + thumb_func_start GetStageByBerryTreeId +GetStageByBerryTreeId: @ 80B4CA8 + lsls r0, 24 + ldr r1, _080B4CBC + lsrs r0, 21 + adds r0, r1 + ldr r1, _080B4CC0 + adds r0, r1 + ldrb r0, [r0] + lsls r0, 25 + lsrs r0, 25 + bx lr + .align 2, 0 +_080B4CBC: .4byte gSaveBlock1 +_080B4CC0: .4byte 0x00001609 + thumb_func_end GetStageByBerryTreeId + + thumb_func_start ItemIdToBerryType +ItemIdToBerryType: @ 80B4CC4 + push {lr} + lsls r0, 16 + lsrs r1, r0, 16 + ldr r2, _080B4CE0 + adds r0, r2 + lsrs r0, 16 + cmp r0, 0x2A + bhi _080B4CE4 + adds r0, r1, 0 + adds r0, 0x7C + lsls r0, 24 + lsrs r0, 24 + b _080B4CE6 + .align 2, 0 +_080B4CE0: .4byte 0xff7b0000 +_080B4CE4: + movs r0, 0x1 +_080B4CE6: + pop {r1} + bx r1 + thumb_func_end ItemIdToBerryType + + thumb_func_start BerryTypeToItemId +BerryTypeToItemId: @ 80B4CEC + push {lr} + lsls r0, 16 + lsrs r1, r0, 16 + ldr r2, _080B4D08 + adds r0, r2 + lsrs r0, 16 + cmp r0, 0x2A + bhi _080B4D0C + adds r0, r1, 0 + adds r0, 0x84 + lsls r0, 16 + lsrs r0, 16 + b _080B4D0E + .align 2, 0 +_080B4D08: .4byte 0xffff0000 +_080B4D0C: + movs r0, 0x85 +_080B4D0E: + pop {r1} + bx r1 + thumb_func_end BerryTypeToItemId + + thumb_func_start GetBerryNameByBerryType +GetBerryNameByBerryType: @ 80B4D14 + push {r4,lr} + adds r4, r1, 0 + lsls r0, 24 + lsrs r0, 24 + bl GetBerryInfo + adds r1, r0, 0 + adds r0, r4, 0 + movs r2, 0x6 + bl memcpy + movs r0, 0xFF + strb r0, [r4, 0x6] + pop {r4} + pop {r0} + bx r0 + thumb_func_end GetBerryNameByBerryType + + thumb_func_start ResetBerryTreeSparkleFlag +ResetBerryTreeSparkleFlag: @ 80B4D34 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetBerryTreeInfo + ldrb r2, [r0, 0x1] + movs r1, 0x7F + ands r1, r2 + strb r1, [r0, 0x1] + pop {r0} + bx r0 + thumb_func_end ResetBerryTreeSparkleFlag + + thumb_func_start BerryTreeGetNumStagesWatered +BerryTreeGetNumStagesWatered: @ 80B4D4C + push {lr} + ldrb r2, [r0, 0x5] + movs r0, 0x10 + ands r0, r2 + lsls r0, 24 + lsrs r0, 24 + negs r0, r0 + lsrs r1, r0, 31 + movs r0, 0x20 + ands r0, r2 + cmp r0, 0 + beq _080B4D66 + adds r1, 0x1 +_080B4D66: + movs r0, 0x40 + ands r0, r2 + cmp r0, 0 + beq _080B4D74 + adds r0, r1, 0x1 + lsls r0, 24 + lsrs r1, r0, 24 +_080B4D74: + movs r0, 0x80 + ands r0, r2 + cmp r0, 0 + beq _080B4D82 + adds r0, r1, 0x1 + lsls r0, 24 + lsrs r1, r0, 24 +_080B4D82: + adds r0, r1, 0 + pop {r1} + bx r1 + thumb_func_end BerryTreeGetNumStagesWatered + + thumb_func_start GetNumStagesWateredByBerryTreeId +GetNumStagesWateredByBerryTreeId: @ 80B4D88 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetBerryTreeInfo + bl BerryTreeGetNumStagesWatered + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + thumb_func_end GetNumStagesWateredByBerryTreeId + + thumb_func_start CalcBerryYieldInternal +CalcBerryYieldInternal: @ 80B4DA0 + push {r4-r6,lr} + lsls r0, 16 + lsrs r0, 16 + lsls r1, 16 + lsrs r6, r1, 16 + lsls r2, 24 + lsrs r2, 24 + cmp r2, 0 + bne _080B4DB6 + lsls r0, r6, 24 + b _080B4DEA +_080B4DB6: + subs r1, r0, r6 + subs r0, r2, 0x1 + adds r5, r1, 0 + muls r5, r0 + adds r4, r1, 0 + muls r4, r2 + bl Random + lsls r0, 16 + lsrs r0, 16 + subs r4, r5 + adds r4, 0x1 + adds r1, r4, 0 + bl __umodsi3 + adds r5, r0 + movs r0, 0x3 + ands r0, r5 + cmp r0, 0x1 + bls _080B4DE4 + lsrs r0, r5, 2 + adds r0, 0x1 + b _080B4DE6 +_080B4DE4: + lsrs r0, r5, 2 +_080B4DE6: + adds r0, r6 + lsls r0, 24 +_080B4DEA: + lsrs r0, 24 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end CalcBerryYieldInternal + + thumb_func_start CalcBerryYield +CalcBerryYield: @ 80B4DF4 + push {r4-r6,lr} + adds r4, r0, 0 + ldrb r0, [r4] + bl GetBerryInfo + ldrb r6, [r0, 0xB] + ldrb r5, [r0, 0xA] + adds r0, r4, 0 + bl BerryTreeGetNumStagesWatered + adds r2, r0, 0 + lsls r2, 24 + lsrs r2, 24 + adds r0, r5, 0 + adds r1, r6, 0 + bl CalcBerryYieldInternal + lsls r0, 24 + lsrs r0, 24 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end CalcBerryYield + + thumb_func_start GetBerryCountByBerryTreeId +GetBerryCountByBerryTreeId: @ 80B4E20 + lsls r0, 24 + ldr r1, _080B4E30 + lsrs r0, 21 + adds r0, r1 + ldr r1, _080B4E34 + adds r0, r1 + ldrb r0, [r0] + bx lr + .align 2, 0 +_080B4E30: .4byte gSaveBlock1 +_080B4E34: .4byte 0x0000160c + thumb_func_end GetBerryCountByBerryTreeId + + thumb_func_start GetStageDurationByBerryType +GetStageDurationByBerryType: @ 80B4E38 + push {lr} + lsls r0, 24 + lsrs r0, 24 + bl GetBerryInfo + ldrb r1, [r0, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 18 + lsrs r0, 16 + pop {r1} + bx r1 + thumb_func_end GetStageDurationByBerryType + + thumb_func_start FieldObjectInteractionGetBerryTreeData +FieldObjectInteractionGetBerryTreeData: @ 80B4E50 + push {r4-r6,lr} + ldr r0, _080B4E8C + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + lsls r0, 24 + lsrs r5, r0, 24 + adds r0, r5, 0 + bl GetBerryTypeByBerryTreeId + lsls r0, 24 + lsrs r6, r0, 24 + adds r0, r5, 0 + bl ResetBerryTreeSparkleFlag + ldr r0, _080B4E90 + ldrb r0, [r0] + ldr r2, _080B4E94 + ldrb r1, [r2, 0x5] + ldrb r2, [r2, 0x4] + bl sub_8060234 + lsls r0, 24 + cmp r0, 0 + beq _080B4E9C + ldr r1, _080B4E98 + movs r0, 0xFF + strh r0, [r1] + b _080B4EAA + .align 2, 0 +_080B4E8C: .4byte gSelectedMapObject +_080B4E90: .4byte gUnknown_0202E8DE +_080B4E94: .4byte gSaveBlock1 +_080B4E98: .4byte gUnknown_0202E8CC +_080B4E9C: + ldr r4, _080B4ED4 + adds r0, r5, 0 + bl GetStageByBerryTreeId + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4] +_080B4EAA: + ldr r4, _080B4ED8 + adds r0, r5, 0 + bl GetNumStagesWateredByBerryTreeId + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4] + ldr r4, _080B4EDC + adds r0, r5, 0 + bl GetBerryCountByBerryTreeId + lsls r0, 24 + lsrs r0, 24 + strh r0, [r4] + ldr r1, _080B4EE0 + adds r0, r6, 0 + bl GetBerryNameByBerryType + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080B4ED4: .4byte gUnknown_0202E8CC +_080B4ED8: .4byte gUnknown_0202E8CE +_080B4EDC: .4byte gUnknown_0202E8D0 +_080B4EE0: .4byte gStringVar1 + thumb_func_end FieldObjectInteractionGetBerryTreeData + + thumb_func_start sub_80B4EE4 +sub_80B4EE4: @ 80B4EE4 + push {lr} + ldr r0, _080B4EF0 + bl SetMainCallback2 + pop {r0} + bx r0 + .align 2, 0 +_080B4EF0: .4byte sub_80A68CC + thumb_func_end sub_80B4EE4 + + thumb_func_start FieldObjectInteractionPlantBerryTree +FieldObjectInteractionPlantBerryTree: @ 80B4EF4 + push {r4,lr} + ldr r0, _080B4F24 + ldrh r0, [r0] + bl ItemIdToBerryType + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + ldr r0, _080B4F28 + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + lsls r0, 24 + lsrs r0, 24 + adds r1, r4, 0 + movs r2, 0x1 + movs r3, 0x1 + bl PlantBerryTree + bl FieldObjectInteractionGetBerryTreeData + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080B4F24: .4byte word_203855E +_080B4F28: .4byte gSelectedMapObject + thumb_func_end FieldObjectInteractionPlantBerryTree + + thumb_func_start FieldObjectInteractionPickBerryTree +FieldObjectInteractionPickBerryTree: @ 80B4F2C + push {r4-r6,lr} + ldr r0, _080B4F70 + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + adds r5, r0, 0 + lsls r5, 24 + lsrs r5, 24 + adds r0, r5, 0 + bl GetBerryTypeByBerryTreeId + lsls r0, 24 + lsrs r0, 24 + ldr r6, _080B4F74 + bl BerryTypeToItemId + adds r4, r0, 0 + lsls r4, 16 + lsrs r4, 16 + adds r0, r5, 0 + bl GetBerryCountByBerryTreeId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl sub_80A9424 + lsls r0, 24 + lsrs r0, 24 + strh r0, [r6] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080B4F70: .4byte gSelectedMapObject +_080B4F74: .4byte gUnknown_0202E8CC + thumb_func_end FieldObjectInteractionPickBerryTree + + thumb_func_start FieldObjectInteractionRemoveBerryTree +FieldObjectInteractionRemoveBerryTree: @ 80B4F78 + push {lr} + ldr r0, _080B4F9C + ldrb r0, [r0] + bl FieldObjectGetBerryTreeId + lsls r0, 24 + lsrs r0, 24 + bl RemoveBerryTree + ldr r0, _080B4FA0 + ldrb r0, [r0] + ldr r2, _080B4FA4 + ldrb r1, [r2, 0x5] + ldrb r2, [r2, 0x4] + bl sub_8060288 + pop {r0} + bx r0 + .align 2, 0 +_080B4F9C: .4byte gSelectedMapObject +_080B4FA0: .4byte gUnknown_0202E8DE +_080B4FA4: .4byte gSaveBlock1 + thumb_func_end FieldObjectInteractionRemoveBerryTree + + thumb_func_start PlayerHasBerries +PlayerHasBerries: @ 80B4FA8 + push {lr} + movs r0, 0x4 + bl IsBagPocketNonEmpty + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + thumb_func_end PlayerHasBerries + + thumb_func_start ResetBerryTreeSparkleFlags +ResetBerryTreeSparkleFlags: @ 80B4FB8 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetCameraCoords + mov r0, sp + ldrh r2, [r0] + ldrh r1, [r4] + adds r1, 0x3 + adds r3, r2, 0 + adds r3, 0xE + lsls r1, 16 + movs r5, 0x80 + lsls r5, 12 + adds r0, r1, r5 + lsrs r0, 16 + mov r10, r0 + mov r5, sp + lsls r2, 16 + asrs r2, 16 + mov r9, r2 + ldr r4, _080B5050 + lsls r3, 16 + asrs r3, 16 + mov r8, r3 + asrs r7, r1, 16 + movs r6, 0xF +_080B4FFC: + ldrb r0, [r4] + lsls r0, 31 + cmp r0, 0 + beq _080B5038 + ldrb r0, [r4, 0x6] + cmp r0, 0xC + bne _080B5038 + ldrh r0, [r4, 0x10] + strh r0, [r5] + ldrh r0, [r4, 0x12] + mov r1, sp + strh r0, [r1, 0x2] + movs r2, 0 + ldrsh r1, [r5, r2] + cmp r9, r1 + bgt _080B5038 + cmp r1, r8 + bgt _080B5038 + lsls r0, 16 + asrs r1, r0, 16 + cmp r7, r1 + bgt _080B5038 + mov r2, r10 + lsls r0, r2, 16 + asrs r0, 16 + cmp r1, r0 + bgt _080B5038 + ldrb r0, [r4, 0x1D] + bl ResetBerryTreeSparkleFlag +_080B5038: + adds r4, 0x24 + subs r6, 0x1 + cmp r6, 0 + bge _080B4FFC + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080B5050: .4byte gMapObjects + thumb_func_end ResetBerryTreeSparkleFlags + + .align 2, 0 @ Don't pad with nop. |