pokeemerald/asm/wild_encounter.s

518 lines
8.0 KiB
ArmAsm
Raw Normal View History

2016-11-01 10:08:48 -07:00
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80B5734
sub_80B5734: @ 80B5734
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
2017-11-16 20:38:10 +01:00
bl CheckFeebas
2016-11-01 10:08:48 -07:00
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080B5764
ldr r4, =gUnknown_08553A78
adds r0, r4, 0
2017-11-16 20:38:10 +01:00
bl ChooseWildMonLevel
2016-11-01 10:08:48 -07:00
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldrh r4, [r4, 0x2]
adds r0, r4, 0
2017-11-16 20:38:10 +01:00
bl CreateWildMon
2016-11-01 10:08:48 -07:00
b _080B5784
.pool
_080B5764:
ldr r4, =gWildMonHeaders
2017-11-16 20:38:10 +01:00
bl GetCurrentMapWildMonHeaderId
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r0, 16
lsls r1, r0, 2
adds r1, r0
lsls r1, 2
adds r4, 0x10
adds r1, r4
ldr r0, [r1]
adds r1, r5, 0
2017-11-16 20:38:10 +01:00
bl GenerateFishingWildMon
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r4, r0, 16
_080B5784:
movs r0, 0xC
2017-09-03 14:13:01 +02:00
bl IncrementGameStat
2016-11-01 10:08:48 -07:00
adds r0, r4, 0
bl sub_80EDA3C
2017-11-17 17:50:07 +01:00
bl BattleSetup_StartWildBattle
2016-11-01 10:08:48 -07:00
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_80B5734
thumb_func_start wild_pokemon_rand_for_map
wild_pokemon_rand_for_map: @ 80B57A0
push {r4-r6,lr}
adds r6, r0, 0
movs r0, 0
strb r0, [r6]
2017-11-16 20:38:10 +01:00
bl GetCurrentMapWildMonHeaderId
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r3, r0, 16
ldr r0, =0x0000ffff
cmp r3, r0
beq _080B57D2
ldr r2, =gWildMonHeaders
lsls r1, r3, 2
adds r1, r3
lsls r1, 2
adds r0, r2, 0x4
adds r0, r1, r0
ldr r5, [r0]
adds r2, 0x8
adds r1, r2
ldr r4, [r1]
cmp r5, 0
bne _080B57E0
cmp r4, 0
bne _080B57E6
_080B57D2:
movs r0, 0
b _080B5826
.pool
_080B57E0:
cmp r4, 0
bne _080B57F4
b _080B5818
_080B57E6:
movs r0, 0x1
strb r0, [r6]
2017-11-16 20:38:10 +01:00
bl ChooseWildMonIndex_WaterRock
2016-11-01 10:08:48 -07:00
lsls r0, 24
ldr r1, [r4, 0x4]
b _080B5820
_080B57F4:
bl Random
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r0, 16
movs r1, 0x64
bl __umodsi3
lsls r0, 16
lsrs r0, 16
cmp r0, 0x4F
bls _080B5818
movs r0, 0x1
strb r0, [r6]
2017-11-16 20:38:10 +01:00
bl ChooseWildMonIndex_WaterRock
2016-11-01 10:08:48 -07:00
lsls r0, 24
ldr r1, [r4, 0x4]
b _080B5820
_080B5818:
2017-11-16 20:38:10 +01:00
bl ChooseWildMonIndex_Land
2016-11-01 10:08:48 -07:00
lsls r0, 24
ldr r1, [r5, 0x4]
_080B5820:
lsrs r0, 22
adds r0, r1
ldrh r0, [r0, 0x2]
_080B5826:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end wild_pokemon_rand_for_map
thumb_func_start sub_80B582C
sub_80B582C: @ 80B582C
push {r4,lr}
2017-11-16 20:38:10 +01:00
bl GetCurrentMapWildMonHeaderId
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r2, r0, 16
ldr r0, =0x0000ffff
cmp r2, r0
beq _080B5868
ldr r1, =gWildMonHeaders
lsls r0, r2, 2
adds r0, r2
lsls r0, 2
adds r1, 0x8
adds r0, r1
ldr r4, [r0]
cmp r4, 0
beq _080B5868
2017-11-16 20:38:10 +01:00
bl ChooseWildMonIndex_WaterRock
2016-11-01 10:08:48 -07:00
lsls r0, 24
ldr r1, [r4, 0x4]
lsrs r0, 22
adds r0, r1
ldrh r0, [r0, 0x2]
b _080B586A
.pool
_080B5868:
movs r0, 0
_080B586A:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80B582C
thumb_func_start sub_80B5870
sub_80B5870: @ 80B5870
push {r4,r5,lr}
bl InBattlePike
lsls r0, 24
cmp r0, 0
bne _080B58C4
bl InBattlePyramid
lsls r0, 24
cmp r0, 0
bne _080B58C4
bl InUnionRoom
cmp r0, 0x1
beq _080B58C4
ldr r5, =0x00004021
adds r0, r5, 0
bl VarGet
lsls r0, 16
lsrs r0, 16
cmp r0, 0
beq _080B58C4
subs r4, r0, 0x1
lsls r4, 16
lsrs r4, 16
adds r0, r5, 0
adds r1, r4, 0
bl VarSet
cmp r4, 0
bne _080B58C4
ldr r0, =EventScript_RepelWoreOff
2017-09-04 12:22:04 +02:00
bl ScriptContext1_SetupScript
2016-11-01 10:08:48 -07:00
movs r0, 0x1
b _080B58C6
.pool
_080B58C4:
movs r0, 0
_080B58C6:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_80B5870
2017-11-16 20:38:10 +01:00
thumb_func_start IsWildLevelAllowedByRepel
IsWildLevelAllowedByRepel: @ 80B58CC
2016-11-01 10:08:48 -07:00
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
ldr r0, =0x00004021
bl VarGet
lsls r0, 16
cmp r0, 0
beq _080B5912
movs r5, 0
_080B58E0:
movs r0, 0x64
adds r1, r5, 0
muls r1, r0
ldr r0, =gPlayerParty
2016-11-01 10:08:48 -07:00
adds r4, r1, r0
adds r0, r4, 0
movs r1, 0x39
bl GetMonData
2016-11-01 10:08:48 -07:00
cmp r0, 0
beq _080B5920
adds r0, r4, 0
movs r1, 0x2D
bl GetMonData
2016-11-01 10:08:48 -07:00
cmp r0, 0
bne _080B5920
adds r0, r4, 0
movs r1, 0x38
bl GetMonData
2016-11-01 10:08:48 -07:00
lsls r0, 24
lsrs r0, 24
cmp r6, r0
bcc _080B592A
_080B5912:
movs r0, 0x1
b _080B592C
.pool
_080B5920:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x5
bls _080B58E0
_080B592A:
movs r0, 0
_080B592C:
pop {r4-r6}
pop {r1}
bx r1
2017-11-16 20:38:10 +01:00
thumb_func_end IsWildLevelAllowedByRepel
2016-11-01 10:08:48 -07:00
2017-11-16 20:38:10 +01:00
thumb_func_start IsAbilityAllowingEncounter
@ _BOOL1 IsAbilityAllowingEncounter(u8 wildMonLevel)
IsAbilityAllowingEncounter: @ 80B5934
2016-11-01 10:08:48 -07:00
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
ldr r4, =gPlayerParty
2016-11-01 10:08:48 -07:00
adds r0, r4, 0
movs r1, 0x6
bl GetMonData
2016-11-01 10:08:48 -07:00
cmp r0, 0
bne _080B5988
adds r0, r4, 0
bl GetMonAbility
lsls r0, 24
lsrs r0, 24
cmp r0, 0x33
beq _080B595A
cmp r0, 0x16
bne _080B5988
_080B595A:
adds r0, r4, 0
movs r1, 0x38
bl GetMonData
2016-11-01 10:08:48 -07:00
lsls r0, 24
lsrs r0, 24
cmp r0, 0x5
bls _080B5988
subs r0, 0x5
cmp r5, r0
bgt _080B5988
bl Random
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
ands r0, r1
cmp r0, 0
bne _080B5988
movs r0, 0
b _080B598A
.pool
_080B5988:
movs r0, 0x1
_080B598A:
pop {r4,r5}
pop {r1}
bx r1
2017-11-16 20:38:10 +01:00
thumb_func_end IsAbilityAllowingEncounter
2016-11-01 10:08:48 -07:00
thumb_func_start TryGetRandomWildMonIndexByType
@ _BOOL1 TryGetRandomWildMonIndexByType(WildMonEntry *mons, u8 type, u8 numMons, u8 *monIndex)
TryGetRandomWildMonIndexByType: @ 80B5990
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
mov r7, sp
mov r12, r0
mov r8, r3
lsls r1, 24
lsrs r1, 24
str r1, [r7]
lsls r2, 24
lsrs r2, 24
mov r9, sp
adds r0, r2, 0x3
lsrs r0, 2
lsls r0, 2
mov r1, sp
subs r1, r0
mov sp, r1
mov r5, sp
movs r3, 0
cmp r3, r2
bcs _080B59D2
movs r1, 0
_080B59C4:
adds r0, r5, r3
strb r1, [r0]
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, r2
bcc _080B59C4
_080B59D2:
movs r4, 0
movs r3, 0
cmp r4, r2
bcs _080B5A12
ldr r6, =gBaseStats
mov r10, r6
_080B59DE:
lsls r0, r3, 2
add r0, r12
ldrh r1, [r0, 0x2]
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
mov r6, r10
adds r1, r0, r6
ldrb r0, [r1, 0x6]
ldr r6, [r7]
cmp r0, r6
beq _080B59FC
ldrb r0, [r1, 0x7]
cmp r0, r6
bne _080B5A08
_080B59FC:
adds r1, r4, 0
adds r0, r1, 0x1
lsls r0, 24
lsrs r4, r0, 24
adds r1, r5, r1
strb r3, [r1]
_080B5A08:
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, r2
bcc _080B59DE
_080B5A12:
cmp r4, 0
beq _080B5A1A
cmp r4, r2
bne _080B5A24
_080B5A1A:
movs r0, 0
b _080B5A3C
.pool
_080B5A24:
bl Random
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r0, 16
adds r1, r4, 0
bl __modsi3
adds r0, r5, r0
ldrb r0, [r0]
mov r1, r8
strb r0, [r1]
movs r0, 0x1
_080B5A3C:
mov sp, r9
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end TryGetRandomWildMonIndexByType
thumb_func_start TryGetAbilityInfluencedWildMonIndex
@ _BOOL1 TryGetAbilityInfluencedWildMonIndex(WildMonEntry *mons, u8 type, u8 abilityId, u8 *monIndex)
TryGetAbilityInfluencedWildMonIndex: @ 80B5A50
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r7, r0, 0
mov r8, r3
lsls r1, 24
lsrs r6, r1, 24
lsls r2, 24
lsrs r5, r2, 24
ldr r4, =gPlayerParty
2016-11-01 10:08:48 -07:00
adds r0, r4, 0
movs r1, 0x6
bl GetMonData
2016-11-01 10:08:48 -07:00
cmp r0, 0
bne _080B5AA4
adds r0, r4, 0
bl GetMonAbility
lsls r0, 24
lsrs r0, 24
cmp r0, r5
bne _080B5AA4
bl Random
2016-11-01 10:08:48 -07:00
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
ands r0, r1
cmp r0, 0
bne _080B5AA4
adds r0, r7, 0
adds r1, r6, 0
movs r2, 0xC
mov r3, r8
bl TryGetRandomWildMonIndexByType
lsls r0, 24
lsrs r0, 24
b _080B5AA6
.pool
_080B5AA4:
movs r0, 0
_080B5AA6:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end TryGetAbilityInfluencedWildMonIndex
2017-11-16 20:38:10 +01:00
thumb_func_start ApplyFluteEncounterRateMod
@ void ApplyFluteEncounterRateMod(u32 *val)
ApplyFluteEncounterRateMod: @ 80B5AB0
2016-11-01 10:08:48 -07:00
push {r4,lr}
adds r4, r0, 0
ldr r0, =0x000008ad
bl FlagGet
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080B5AD0
ldr r0, [r4]
lsrs r1, r0, 1
adds r0, r1
b _080B5AE2
.pool
_080B5AD0:
ldr r0, =0x000008ae
bl FlagGet
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080B5AE4
ldr r0, [r4]
lsrs r0, 1
_080B5AE2:
str r0, [r4]
_080B5AE4:
pop {r4}
pop {r0}
bx r0
.pool
2017-11-16 20:38:10 +01:00
thumb_func_end ApplyFluteEncounterRateMod
2016-11-01 10:08:48 -07:00
2017-11-16 20:38:10 +01:00
thumb_func_start ApplyCleanseTagEncounterRateMod
ApplyCleanseTagEncounterRateMod: @ 80B5AF0
2016-11-01 10:08:48 -07:00
push {r4,lr}
adds r4, r0, 0
ldr r0, =gPlayerParty
2016-11-01 10:08:48 -07:00
movs r1, 0xC
bl GetMonData
2016-11-01 10:08:48 -07:00
cmp r0, 0xBE
bne _080B5B0C
ldr r0, [r4]
lsls r0, 1
movs r1, 0x3
bl __udivsi3
str r0, [r4]
_080B5B0C:
pop {r4}
pop {r0}
bx r0
.pool
2017-11-16 20:38:10 +01:00
thumb_func_end ApplyCleanseTagEncounterRateMod
2016-11-01 10:08:48 -07:00
.align 2, 0 @ Don't pad with nop.