pokeemerald/asm/berry.s
2017-09-03 13:33:13 +02:00

1121 lines
19 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80E15B8
sub_80E15B8: @ 80E15B8
push {lr}
sub sp, 0x4
mov r1, sp
movs r0, 0
strh r0, [r1]
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
ldr r0, =0x000031f8
adds r1, r0
ldr r2, =0x0100001a
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.pool
thumb_func_end sub_80E15B8
thumb_func_start sub_80E15E4
sub_80E15E4: @ 80E15E4
push {r4,lr}
adds r4, r0, 0
ldr r0, =gSaveBlock1Ptr
ldr r0, [r0]
ldr r1, =0x000031f8
adds r3, r0, r1
movs r2, 0
_080E15F2:
adds r0, r3, r2
adds r1, r4, r2
ldrb r1, [r1]
strb r1, [r0]
adds r2, 0x1
cmp r2, 0x33
bls _080E15F2
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_80E15E4
thumb_func_start sub_80E1610
sub_80E1610: @ 80E1610
push {lr}
adds r3, r0, 0
movs r2, 0
movs r1, 0
_080E1618:
adds r0, r3, r1
ldrb r0, [r0]
adds r2, r0
adds r1, 0x1
cmp r1, 0x2F
bls _080E1618
adds r0, r2, 0
pop {r1}
bx r1
thumb_func_end sub_80E1610
thumb_func_start sub_80E162C
sub_80E162C: @ 80E162C
push {r4,lr}
ldr r4, =gSaveBlock1Ptr
ldr r1, [r4]
ldr r2, =0x0000320c
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _080E1674
ldr r2, =0x00003202
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _080E1674
ldr r2, =0x000031f8
adds r0, r1, r2
bl sub_80E1610
ldr r1, [r4]
ldr r2, =0x00003228
adds r1, r2
ldr r1, [r1]
cmp r0, r1
bne _080E1674
movs r0, 0x1
b _080E1676
.pool
_080E1674:
movs r0, 0
_080E1676:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80E162C
thumb_func_start GetBerryInfo
@ struct berry_info *GetBerryInfo(u8 berryType)
GetBerryInfo: @ 80E167C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x2B
bne _080E16A0
bl sub_80E162C
cmp r0, 0
beq _080E16A0
ldr r0, =gSaveBlock1Ptr
ldr r0, [r0]
ldr r1, =0x000031f8
b _080E16B4
.pool
_080E16A0:
subs r0, r4, 0x1
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2A
bls _080E16AC
movs r4, 0x1
_080E16AC:
lsls r0, r4, 3
subs r0, r4
lsls r0, 2
ldr r1, =gBerries - 0x1c @ 1-based array
_080E16B4:
adds r0, r1
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end GetBerryInfo
thumb_func_start GetBerryTreeInfo
@ struct BerryTreeInfo *GetBerryTreeInfo(u8 berryTreeId)
GetBerryTreeInfo: @ 80E16C0
lsls r0, 24
ldr r1, =gSaveBlock1Ptr
lsrs r0, 21
ldr r2, =0x0000169c
adds r0, r2
ldr r1, [r1]
adds r1, r0
adds r0, r1, 0
bx lr
.pool
thumb_func_end GetBerryTreeInfo
thumb_func_start FieldObjectInteractionWaterBerryTree
@ bool8 FieldObjectInteractionWaterBerryTree()
FieldObjectInteractionWaterBerryTree: @ 80E16DC
push {lr}
ldr r0, =gUnknown_03005DF0
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 _080E1718
cmp r0, 0x2
bgt _080E1708
cmp r0, 0x1
beq _080E1712
b _080E172E
.pool
_080E1708:
cmp r0, 0x3
beq _080E171E
cmp r0, 0x4
beq _080E1724
b _080E172E
_080E1712:
ldrb r0, [r2, 0x5]
movs r1, 0x10
b _080E1728
_080E1718:
ldrb r0, [r2, 0x5]
movs r1, 0x20
b _080E1728
_080E171E:
ldrb r0, [r2, 0x5]
movs r1, 0x40
b _080E1728
_080E1724:
ldrb r0, [r2, 0x5]
movs r1, 0x80
_080E1728:
orrs r0, r1
strb r0, [r2, 0x5]
b _080E1732
_080E172E:
movs r0, 0
b _080E1734
_080E1732:
movs r0, 0x1
_080E1734:
pop {r1}
bx r1
thumb_func_end FieldObjectInteractionWaterBerryTree
thumb_func_start IsPlayerFacingPlantedBerryTree
@ bool8 IsPlayerFacingPlantedBerryTree()
IsPlayerFacingPlantedBerryTree: @ 80E1738
push {lr}
bl GetFieldObjectScriptPointerForComparison
ldr r1, =gUnknown_082742F9
cmp r0, r1
bne _080E1768
ldr r0, =gUnknown_03005DF0
ldrb r0, [r0]
bl FieldObjectGetBerryTreeId
lsls r0, 24
lsrs r0, 24
bl GetStageByBerryTreeId
lsls r0, 24
cmp r0, 0
bne _080E1768
movs r0, 0x1
b _080E176A
.pool
_080E1768:
movs r0, 0
_080E176A:
pop {r1}
bx r1
thumb_func_end IsPlayerFacingPlantedBerryTree
thumb_func_start WaterBerryTree
@ bool8 WaterBerryTree()
WaterBerryTree: @ 80E1770
push {lr}
bl GetFieldObjectScriptPointerForComparison
ldr r1, =gUnknown_082742F9
cmp r0, r1
bne _080E178C
bl FieldObjectInteractionWaterBerryTree
lsls r0, 24
lsrs r0, 24
b _080E178E
.pool
_080E178C:
movs r0, 0
_080E178E:
pop {r1}
bx r1
thumb_func_end WaterBerryTree
thumb_func_start RemoveAllBerryTrees
@ void RemoveAllBerryTrees()
RemoveAllBerryTrees: @ 80E1794
push {r4-r6,lr}
movs r2, 0
ldr r6, =gSaveBlock1Ptr
ldr r5, =0x0000169c
ldr r0, =gUnknown_0858ABD0
ldr r3, [r0]
ldr r4, [r0, 0x4]
_080E17A2:
ldr r0, [r6]
lsls r1, r2, 3
adds r0, r1
adds r0, r5
str r3, [r0]
str r4, [r0, 0x4]
adds r2, 0x1
cmp r2, 0x7F
ble _080E17A2
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end RemoveAllBerryTrees
thumb_func_start BerryTreeGrow
@ bool8 BerryTreeGrow(struct BerryTreeInfo *berryTree)
BerryTreeGrow: @ 80E17C8
push {r4,lr}
adds r4, r0, 0
ldrb r1, [r4, 0x1]
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _080E17DA
_080E17D6:
movs r0, 0
b _080E1866
_080E17DA:
lsls r0, r1, 25
lsrs r0, 25
cmp r0, 0x5
bhi _080E1864
lsls r0, 2
ldr r1, =_080E17F0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_080E17F0:
.4byte _080E17D6
.4byte _080E1810
.4byte _080E1810
.4byte _080E1810
.4byte _080E1808
.4byte _080E1828
_080E1808:
adds r0, r4, 0
bl CalcBerryYield
strb r0, [r4, 0x4]
_080E1810:
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 _080E1864
_080E1828:
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 _080E1864
ldr r0, =gUnknown_0858ABD0
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [r4]
str r1, [r4, 0x4]
_080E1864:
movs r0, 0x1
_080E1866:
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end BerryTreeGrow
thumb_func_start BerryTreeTimeUpdate
@ void BerryTreeTimeUpdate(s32 deltaSeconds)
BerryTreeTimeUpdate: @ 80E1870
push {r4-r7,lr}
adds r6, r0, 0
movs r2, 0
_080E1876:
ldr r1, =gSaveBlock1Ptr
lsls r0, r2, 3
ldr r3, =0x0000169c
adds r0, r3
ldr r1, [r1]
adds r4, r1, r0
ldrb r0, [r4]
adds r7, r2, 0x1
cmp r0, 0
beq _080E1910
ldrb r1, [r4, 0x1]
movs r0, 0x7F
ands r0, r1
cmp r0, 0
beq _080E1910
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _080E1910
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 _080E18CC
ldr r0, =gUnknown_0858ABD0
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [r4]
str r1, [r4, 0x4]
b _080E1910
.pool
_080E18CC:
adds r5, r6, 0
cmp r5, 0
beq _080E1910
ldrh r1, [r4, 0x2]
cmp r1, r5
ble _080E18DC
subs r0, r1, r5
b _080E190E
_080E18DC:
subs r5, r1
ldrb r0, [r4]
bl GetStageDurationByBerryType
strh r0, [r4, 0x2]
adds r0, r4, 0
bl BerryTreeGrow
cmp r0, 0
beq _080E1910
ldrb r1, [r4, 0x1]
movs r0, 0x7F
ands r0, r1
cmp r0, 0x5
bne _080E1900
ldrh r0, [r4, 0x2]
lsls r0, 2
strh r0, [r4, 0x2]
_080E1900:
cmp r5, 0
beq _080E1910
ldrh r0, [r4, 0x2]
adds r1, r0, 0
cmp r0, r5
ble _080E18DC
subs r0, r5
_080E190E:
strh r0, [r4, 0x2]
_080E1910:
adds r2, r7, 0
cmp r2, 0x7F
ble _080E1876
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end BerryTreeTimeUpdate
thumb_func_start PlantBerryTree
@ void PlantBerryTree(u8 berryTreeId, u8 berryType, u8 stage, u8 a4)
PlantBerryTree: @ 80E191C
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, =gUnknown_0858ABD0
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 _080E196E
adds r0, r6, 0
bl CalcBerryYield
strb r0, [r6, 0x4]
ldrh r0, [r6, 0x2]
lsls r0, 2
strh r0, [r6, 0x2]
_080E196E:
cmp r7, 0
bne _080E197A
ldrb r0, [r6, 0x1]
movs r1, 0x80
orrs r0, r1
strb r0, [r6, 0x1]
_080E197A:
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end PlantBerryTree
thumb_func_start RemoveBerryTree
@ void RemoveBerryTree(u8 berryTreeId)
RemoveBerryTree: @ 80E1984
lsls r0, 24
ldr r1, =gSaveBlock1Ptr
ldr r2, [r1]
lsrs r0, 21
adds r2, r0
ldr r0, =0x0000169c
adds r2, r0
ldr r0, =gUnknown_0858ABD0
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [r2]
str r1, [r2, 0x4]
bx lr
.pool
thumb_func_end RemoveBerryTree
thumb_func_start GetBerryTypeByBerryTreeId
@ u8 GetBerryTypeByBerryTreeId(u8 berryTreeId)
GetBerryTypeByBerryTreeId: @ 80E19AC
lsls r0, 24
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
lsrs r0, 21
adds r1, r0
ldr r0, =0x0000169c
adds r1, r0
ldrb r0, [r1]
bx lr
.pool
thumb_func_end GetBerryTypeByBerryTreeId
thumb_func_start GetStageByBerryTreeId
@ u8 GetStageByBerryTreeId(u8 berryTreeId)
GetStageByBerryTreeId: @ 80E19C8
lsls r0, 24
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
lsrs r0, 21
adds r1, r0
ldr r0, =0x0000169d
adds r1, r0
ldrb r0, [r1]
lsls r0, 25
lsrs r0, 25
bx lr
.pool
thumb_func_end GetStageByBerryTreeId
thumb_func_start ItemIdToBerryType
@ u8 ItemIdToBerryType(u16 itemId)
ItemIdToBerryType: @ 80E19E8
push {lr}
lsls r0, 16
lsrs r1, r0, 16
ldr r2, =0xff7b0000
adds r0, r2
lsrs r0, 16
cmp r0, 0x2A
bhi _080E1A08
adds r0, r1, 0
adds r0, 0x7C
lsls r0, 24
lsrs r0, 24
b _080E1A0A
.pool
_080E1A08:
movs r0, 0x1
_080E1A0A:
pop {r1}
bx r1
thumb_func_end ItemIdToBerryType
thumb_func_start BerryTypeToItemId
@ u16 BerryTypeToItemId(u16 berryType)
BerryTypeToItemId: @ 80E1A10
push {lr}
lsls r0, 16
lsrs r1, r0, 16
ldr r2, =0xffff0000
adds r0, r2
lsrs r0, 16
cmp r0, 0x2A
bhi _080E1A30
adds r0, r1, 0
adds r0, 0x84
lsls r0, 16
lsrs r0, 16
b _080E1A32
.pool
_080E1A30:
movs r0, 0x85
_080E1A32:
pop {r1}
bx r1
thumb_func_end BerryTypeToItemId
thumb_func_start GetBerryNameByBerryType
@ void GetBerryNameByBerryType(u8 berryType, u8 *dest)
GetBerryNameByBerryType: @ 80E1A38
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 GetBerryCountStringByBerryType
@ void GetBerryCountStringByBerryType(u8 berryType, u8 *dest, u32 berryCount)
GetBerryCountStringByBerryType: @ 80E1A58
push {r4,r5,lr}
adds r4, r1, 0
adds r5, r2, 0
lsls r0, 24
lsrs r0, 24
bl GetBerryInfo
adds r1, r0, 0
adds r0, r4, 0
adds r2, r5, 0
bl GetBerryCountString
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end GetBerryCountStringByBerryType
thumb_func_start ResetBerryTreeSparkleFlag
@ void ResetBerryTreeSparkleFlag(u8 berryTreeId)
ResetBerryTreeSparkleFlag: @ 80E1A78
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
@ u8 BerryTreeGetNumStagesWatered(struct BerryTreeInfo *berryTree)
BerryTreeGetNumStagesWatered: @ 80E1A90
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 _080E1AAA
adds r1, 0x1
_080E1AAA:
movs r0, 0x40
ands r0, r2
cmp r0, 0
beq _080E1AB8
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
_080E1AB8:
movs r0, 0x80
ands r0, r2
cmp r0, 0
beq _080E1AC6
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
_080E1AC6:
adds r0, r1, 0
pop {r1}
bx r1
thumb_func_end BerryTreeGetNumStagesWatered
thumb_func_start GetNumStagesWateredByBerryTreeId
@ u8 GetNumStagesWateredByBerryTreeId(u8 berryTreeId)
GetNumStagesWateredByBerryTreeId: @ 80E1ACC
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
@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 numStagesWatered)
CalcBerryYieldInternal: @ 80E1AE4
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 _080E1AFA
lsls r0, r6, 24
b _080E1B2E
_080E1AFA:
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 _080E1B28
lsrs r0, r5, 2
adds r0, 0x1
b _080E1B2A
_080E1B28:
lsrs r0, r5, 2
_080E1B2A:
adds r0, r6
lsls r0, 24
_080E1B2E:
lsrs r0, 24
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end CalcBerryYieldInternal
thumb_func_start CalcBerryYield
@ u8 CalcBerryYield(struct BerryTreeInfo *berryTree)
CalcBerryYield: @ 80E1B38
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
@ u8 GetBerryCountByBerryTreeId(u8 berryTreeId)
GetBerryCountByBerryTreeId: @ 80E1B64
lsls r0, 24
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
lsrs r0, 21
adds r1, r0
movs r0, 0xB5
lsls r0, 5
adds r1, r0
ldrb r0, [r1]
bx lr
.pool
thumb_func_end GetBerryCountByBerryTreeId
thumb_func_start GetStageDurationByBerryType
@ u16 GetStageDurationByBerryType(u8 berryType)
GetStageDurationByBerryType: @ 80E1B7C
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
@ void FieldObjectInteractionGetBerryTreeData()
FieldObjectInteractionGetBerryTreeData: @ 80E1B94
push {r4-r6,lr}
ldr r0, =gUnknown_03005DF0
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, =gScriptLastTalked
ldrb r0, [r0]
ldr r1, =gSaveBlock1Ptr
ldr r2, [r1]
ldrb r1, [r2, 0x5]
ldrb r2, [r2, 0x4]
bl sub_8092E9C
lsls r0, 24
cmp r0, 0
beq _080E1BE0
ldr r1, =gSpecialVar_0x8004
movs r0, 0xFF
strh r0, [r1]
b _080E1BEE
.pool
_080E1BE0:
ldr r4, =gSpecialVar_0x8004
adds r0, r5, 0
bl GetStageByBerryTreeId
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
_080E1BEE:
ldr r4, =gSpecialVar_0x8005
adds r0, r5, 0
bl GetNumStagesWateredByBerryTreeId
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
ldr r4, =gSpecialVar_0x8006
adds r0, r5, 0
bl GetBerryCountByBerryTreeId
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
ldr r1, =gStringVar1
ldrh r2, [r4]
adds r0, r6, 0
bl GetBerryCountStringByBerryType
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectInteractionGetBerryTreeData
thumb_func_start FieldObjectInteractionGetBerryName
@ void FieldObjectInteractionGetBerryName()
FieldObjectInteractionGetBerryName: @ 80E1C2C
push {lr}
ldr r0, =gUnknown_03005DF0
ldrb r0, [r0]
bl FieldObjectGetBerryTreeId
lsls r0, 24
lsrs r0, 24
bl GetBerryTypeByBerryTreeId
lsls r0, 24
lsrs r0, 24
ldr r1, =gStringVar1
bl GetBerryNameByBerryType
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectInteractionGetBerryName
thumb_func_start FieldObjectInteractionGetBerryCountString
@ void FieldObjectInteractionGetBerryCountString()
FieldObjectInteractionGetBerryCountString: @ 80E1C54
push {r4,r5,lr}
ldr r0, =gUnknown_03005DF0
ldrb r0, [r0]
bl FieldObjectGetBerryTreeId
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r4, 0
bl GetBerryTypeByBerryTreeId
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
adds r0, r4, 0
bl GetBerryCountByBerryTreeId
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
ldr r1, =gStringVar1
adds r0, r5, 0
bl GetBerryCountStringByBerryType
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectInteractionGetBerryCountString
thumb_func_start ChooseBerry
@ void ChooseBerry()
ChooseBerry: @ 80E1C94
push {lr}
ldr r0, =CB2_ChooseBerry
bl SetMainCallback2
pop {r0}
bx r0
.pool
thumb_func_end ChooseBerry
thumb_func_start FieldObjectInteractionPlantBerryTree
@ void FieldObjectInteractionPlantBerryTree()
FieldObjectInteractionPlantBerryTree: @ 80E1CA4
push {r4,lr}
ldr r0, =gUnknown_0203CE7C
ldrh r0, [r0]
bl ItemIdToBerryType
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldr r0, =gUnknown_03005DF0
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
.pool
thumb_func_end FieldObjectInteractionPlantBerryTree
thumb_func_start FieldObjectInteractionPickBerryTree
@ void FieldObjectInteractionPickBerryTree()
FieldObjectInteractionPickBerryTree: @ 80E1CDC
push {r4-r6,lr}
ldr r0, =gUnknown_03005DF0
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, =gSpecialVar_0x8004
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 AddBagItem
lsls r0, 24
lsrs r0, 24
strh r0, [r6]
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectInteractionPickBerryTree
thumb_func_start FieldObjectInteractionRemoveBerryTree
@ void FieldObjectInteractionRemoveBerryTree()
FieldObjectInteractionRemoveBerryTree: @ 80E1D28
push {lr}
ldr r0, =gUnknown_03005DF0
ldrb r0, [r0]
bl FieldObjectGetBerryTreeId
lsls r0, 24
lsrs r0, 24
bl RemoveBerryTree
ldr r0, =gScriptLastTalked
ldrb r0, [r0]
ldr r1, =gSaveBlock1Ptr
ldr r2, [r1]
ldrb r1, [r2, 0x5]
ldrb r2, [r2, 0x4]
bl sub_8092EF0
pop {r0}
bx r0
.pool
thumb_func_end FieldObjectInteractionRemoveBerryTree
thumb_func_start PlayerHasBerries
@ bool8 PlayerHasBerries()
PlayerHasBerries: @ 80E1D5C
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
@ void ResetBerryTreeSparkleFlags()
ResetBerryTreeSparkleFlags: @ 80E1D6C
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, =gUnknown_02037350
lsls r3, 16
asrs r3, 16
mov r8, r3
asrs r7, r1, 16
movs r6, 0xF
_080E1DB0:
ldrb r0, [r4]
lsls r0, 31
cmp r0, 0
beq _080E1DEC
ldrb r0, [r4, 0x6]
cmp r0, 0xC
bne _080E1DEC
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 _080E1DEC
cmp r1, r8
bgt _080E1DEC
lsls r0, 16
asrs r1, r0, 16
cmp r7, r1
bgt _080E1DEC
mov r2, r10
lsls r0, r2, 16
asrs r0, 16
cmp r1, r0
bgt _080E1DEC
ldrb r0, [r4, 0x1D]
bl ResetBerryTreeSparkleFlag
_080E1DEC:
adds r4, 0x24
subs r6, 0x1
cmp r6, 0
bge _080E1DB0
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end ResetBerryTreeSparkleFlags
.align 2, 0 @ Don't pad with nop.