wild_encounter through sub_8082C98
This commit is contained in:
+6
-772
@@ -5,772 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8082740
|
||||
sub_8082740: @ 8082740
|
||||
ldr r1, _08082748 @ =gUnknown_20386DC
|
||||
strb r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_08082748: .4byte gUnknown_20386DC
|
||||
thumb_func_end sub_8082740
|
||||
|
||||
thumb_func_start ChooseWildMonIndex_Land
|
||||
ChooseWildMonIndex_Land: @ 808274C
|
||||
push {lr}
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x64
|
||||
bl __umodsi3
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r1, 0x13
|
||||
bhi _08082768
|
||||
movs r0, 0
|
||||
b _08082802
|
||||
_08082768:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x14
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x13
|
||||
bhi _08082778
|
||||
movs r0, 0x1
|
||||
b _08082802
|
||||
_08082778:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x28
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x9
|
||||
bhi _08082788
|
||||
movs r0, 0x2
|
||||
b _08082802
|
||||
_08082788:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x32
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x9
|
||||
bhi _08082798
|
||||
movs r0, 0x3
|
||||
b _08082802
|
||||
_08082798:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x3C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x9
|
||||
bhi _080827A8
|
||||
movs r0, 0x4
|
||||
b _08082802
|
||||
_080827A8:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x46
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x9
|
||||
bhi _080827B8
|
||||
movs r0, 0x5
|
||||
b _08082802
|
||||
_080827B8:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x50
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
bhi _080827C8
|
||||
movs r0, 0x6
|
||||
b _08082802
|
||||
_080827C8:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x55
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
bhi _080827D8
|
||||
movs r0, 0x7
|
||||
b _08082802
|
||||
_080827D8:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x5A
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
bhi _080827E8
|
||||
movs r0, 0x8
|
||||
b _08082802
|
||||
_080827E8:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x5E
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
bhi _080827F8
|
||||
movs r0, 0x9
|
||||
b _08082802
|
||||
_080827F8:
|
||||
cmp r1, 0x62
|
||||
beq _08082800
|
||||
movs r0, 0xB
|
||||
b _08082802
|
||||
_08082800:
|
||||
movs r0, 0xA
|
||||
_08082802:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end ChooseWildMonIndex_Land
|
||||
|
||||
thumb_func_start ChooseWildMonIndex_WaterRock
|
||||
ChooseWildMonIndex_WaterRock: @ 8082808
|
||||
push {lr}
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x64
|
||||
bl __umodsi3
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
adds r2, r1, 0
|
||||
cmp r1, 0x3B
|
||||
bhi _08082826
|
||||
movs r0, 0
|
||||
b _08082858
|
||||
_08082826:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x3C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1D
|
||||
bhi _08082836
|
||||
movs r0, 0x1
|
||||
b _08082858
|
||||
_08082836:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x5A
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x4
|
||||
bhi _08082846
|
||||
movs r0, 0x2
|
||||
b _08082858
|
||||
_08082846:
|
||||
adds r0, r2, 0
|
||||
subs r0, 0x5F
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
bls _08082856
|
||||
movs r0, 0x4
|
||||
b _08082858
|
||||
_08082856:
|
||||
movs r0, 0x3
|
||||
_08082858:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end ChooseWildMonIndex_WaterRock
|
||||
|
||||
thumb_func_start ChooseWildMonIndex_Fishing
|
||||
ChooseWildMonIndex_Fishing: @ 808285C
|
||||
push {r4-r6,lr}
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
adds r6, r4, 0
|
||||
movs r5, 0
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x64
|
||||
bl __umodsi3
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r4, 0x1
|
||||
beq _08082896
|
||||
cmp r4, 0x1
|
||||
bgt _08082886
|
||||
cmp r4, 0
|
||||
beq _0808288C
|
||||
b _080828F0
|
||||
_08082886:
|
||||
cmp r6, 0x2
|
||||
beq _080828BA
|
||||
b _080828F0
|
||||
_0808288C:
|
||||
movs r5, 0x1
|
||||
cmp r1, 0x45
|
||||
bhi _080828F0
|
||||
movs r5, 0
|
||||
b _080828F0
|
||||
_08082896:
|
||||
cmp r1, 0x3B
|
||||
bhi _0808289C
|
||||
movs r5, 0x2
|
||||
_0808289C:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x3C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x13
|
||||
bhi _080828AA
|
||||
movs r5, 0x3
|
||||
_080828AA:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x50
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x13
|
||||
bhi _080828F0
|
||||
movs r5, 0x4
|
||||
b _080828F0
|
||||
_080828BA:
|
||||
cmp r1, 0x27
|
||||
bhi _080828C0
|
||||
movs r5, 0x5
|
||||
_080828C0:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x28
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x27
|
||||
bhi _080828CE
|
||||
movs r5, 0x6
|
||||
_080828CE:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x50
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0xE
|
||||
bhi _080828DC
|
||||
movs r5, 0x7
|
||||
_080828DC:
|
||||
adds r0, r1, 0
|
||||
subs r0, 0x5F
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x3
|
||||
bhi _080828EA
|
||||
movs r5, 0x8
|
||||
_080828EA:
|
||||
cmp r1, 0x63
|
||||
bne _080828F0
|
||||
movs r5, 0x9
|
||||
_080828F0:
|
||||
adds r0, r5, 0
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end ChooseWildMonIndex_Fishing
|
||||
|
||||
thumb_func_start ChooseWildMonLevel
|
||||
ChooseWildMonLevel: @ 80828F8
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
ldrb r0, [r4, 0x1]
|
||||
ldrb r1, [r4]
|
||||
cmp r0, r1
|
||||
bcc _08082908
|
||||
ldrb r5, [r4]
|
||||
b _0808290C
|
||||
_08082908:
|
||||
ldrb r5, [r4, 0x1]
|
||||
ldrb r0, [r4]
|
||||
_0808290C:
|
||||
subs r4, r0, r5
|
||||
adds r4, 0x1
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
adds r1, r4, 0
|
||||
bl __modsi3
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
adds r0, r5, r0
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end ChooseWildMonLevel
|
||||
|
||||
thumb_func_start sub_8082934
|
||||
sub_8082934: @ 8082934
|
||||
push {r4-r6,lr}
|
||||
movs r4, 0
|
||||
ldr r0, _08082990 @ =gWildMonHeaders
|
||||
ldrb r1, [r0]
|
||||
adds r5, r0, 0
|
||||
cmp r1, 0xFF
|
||||
beq _080829B4
|
||||
ldr r6, _08082994 @ =0x00007a01
|
||||
_08082944:
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
lsls r0, 2
|
||||
adds r3, r0, r5
|
||||
ldrb r1, [r3]
|
||||
ldr r0, _08082998 @ =gSaveBlock1Ptr
|
||||
ldr r2, [r0]
|
||||
movs r0, 0x4
|
||||
ldrsb r0, [r2, r0]
|
||||
cmp r1, r0
|
||||
bne _080829A0
|
||||
ldrb r1, [r3, 0x1]
|
||||
movs r0, 0x5
|
||||
ldrsb r0, [r2, r0]
|
||||
cmp r1, r0
|
||||
bne _080829A0
|
||||
ldrh r0, [r2, 0x4]
|
||||
cmp r0, r6
|
||||
bne _08082980
|
||||
ldr r0, _0808299C @ =0x00004024
|
||||
bl VarGet
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x8
|
||||
bls _0808297A
|
||||
movs r0, 0
|
||||
_0808297A:
|
||||
adds r0, r4, r0
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
_08082980:
|
||||
bl sub_80829C0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080829B4
|
||||
adds r0, r4, 0
|
||||
b _080829B6
|
||||
.align 2, 0
|
||||
_08082990: .4byte gWildMonHeaders
|
||||
_08082994: .4byte 0x00007a01
|
||||
_08082998: .4byte gSaveBlock1Ptr
|
||||
_0808299C: .4byte 0x00004024
|
||||
_080829A0:
|
||||
adds r0, r4, 0x1
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
lsls r0, 2
|
||||
adds r0, r5
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0xFF
|
||||
bne _08082944
|
||||
_080829B4:
|
||||
ldr r0, _080829BC @ =0x0000ffff
|
||||
_080829B6:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080829BC: .4byte 0x0000ffff
|
||||
thumb_func_end sub_8082934
|
||||
|
||||
thumb_func_start sub_80829C0
|
||||
sub_80829C0: @ 80829C0
|
||||
push {lr}
|
||||
ldr r0, _080829EC @ =0x00000849
|
||||
bl FlagGet
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080829F4
|
||||
ldr r0, _080829F0 @ =gSaveBlock1Ptr
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x4
|
||||
ldrsb r0, [r1, r0]
|
||||
cmp r0, 0x2
|
||||
bne _080829F4
|
||||
ldrb r0, [r1, 0x5]
|
||||
subs r0, 0x1B
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x6
|
||||
bhi _080829F4
|
||||
movs r0, 0
|
||||
b _080829F6
|
||||
.align 2, 0
|
||||
_080829EC: .4byte 0x00000849
|
||||
_080829F0: .4byte gSaveBlock1Ptr
|
||||
_080829F4:
|
||||
movs r0, 0x1
|
||||
_080829F6:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80829C0
|
||||
|
||||
thumb_func_start sub_80829FC
|
||||
sub_80829FC: @ 80829FC
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x10
|
||||
lsls r0, 16
|
||||
lsrs r4, r0, 16
|
||||
lsls r1, 24
|
||||
lsrs r6, r1, 24
|
||||
lsls r2, 24
|
||||
lsrs r5, r2, 24
|
||||
bl ZeroEnemyPartyMons
|
||||
cmp r4, 0xC9
|
||||
beq _08082A3C
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x19
|
||||
bl __umodsi3
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r1, _08082A38 @ =gEnemyParty
|
||||
str r0, [sp]
|
||||
adds r0, r1, 0
|
||||
adds r1, r4, 0
|
||||
adds r2, r6, 0
|
||||
movs r3, 0x20
|
||||
bl CreateMonWithNature
|
||||
b _08082A74
|
||||
.align 2, 0
|
||||
_08082A38: .4byte gEnemyParty
|
||||
_08082A3C:
|
||||
ldr r0, _08082A7C @ =gSaveBlock1Ptr
|
||||
ldr r0, [r0]
|
||||
ldrb r1, [r0, 0x5]
|
||||
subs r1, 0x1B
|
||||
ldr r2, _08082A80 @ =gUnknown_83CA71C
|
||||
lsls r1, 24
|
||||
asrs r1, 24
|
||||
lsls r0, r1, 1
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r5, r0
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
bl sub_8082A88
|
||||
ldr r2, _08082A84 @ =gEnemyParty
|
||||
movs r1, 0x1
|
||||
str r1, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x8]
|
||||
str r0, [sp, 0xC]
|
||||
adds r0, r2, 0
|
||||
movs r1, 0xC9
|
||||
adds r2, r6, 0
|
||||
movs r3, 0x20
|
||||
bl CreateMon
|
||||
_08082A74:
|
||||
add sp, 0x10
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08082A7C: .4byte gSaveBlock1Ptr
|
||||
_08082A80: .4byte gUnknown_83CA71C
|
||||
_08082A84: .4byte gEnemyParty
|
||||
thumb_func_end sub_80829FC
|
||||
|
||||
thumb_func_start sub_8082A88
|
||||
sub_8082A88: @ 8082A88
|
||||
push {r4,r5,lr}
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
_08082A8E:
|
||||
bl Random
|
||||
adds r4, r0, 0
|
||||
bl Random
|
||||
lsls r4, 16
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
orrs r4, r0
|
||||
adds r0, r4, 0
|
||||
bl GetUnownLetterByPersonalityLoByte
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, r5
|
||||
bne _08082A8E
|
||||
adds r0, r4, 0
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082A88
|
||||
|
||||
thumb_func_start GetUnownLetterByPersonalityLoByte
|
||||
GetUnownLetterByPersonalityLoByte: @ 8082AB8
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
movs r0, 0xC0
|
||||
lsls r0, 18
|
||||
ands r0, r2
|
||||
lsrs r0, 18
|
||||
movs r1, 0xC0
|
||||
lsls r1, 10
|
||||
ands r1, r2
|
||||
lsrs r1, 12
|
||||
orrs r0, r1
|
||||
movs r1, 0xC0
|
||||
lsls r1, 2
|
||||
ands r1, r2
|
||||
lsrs r1, 6
|
||||
orrs r0, r1
|
||||
movs r1, 0x3
|
||||
ands r1, r2
|
||||
orrs r0, r1
|
||||
movs r1, 0x1C
|
||||
bl __umodsi3
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetUnownLetterByPersonalityLoByte
|
||||
|
||||
thumb_func_start sub_8082AEC
|
||||
sub_8082AEC: @ 8082AEC
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r7, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
adds r0, r1, 0
|
||||
lsls r2, 24
|
||||
lsrs r2, 24
|
||||
mov r8, r2
|
||||
movs r6, 0
|
||||
cmp r1, 0x1
|
||||
beq _08082B1C
|
||||
cmp r1, 0x1
|
||||
bgt _08082B10
|
||||
cmp r1, 0
|
||||
beq _08082B16
|
||||
b _08082B24
|
||||
_08082B10:
|
||||
cmp r0, 0x2
|
||||
beq _08082B1C
|
||||
b _08082B24
|
||||
_08082B16:
|
||||
bl ChooseWildMonIndex_Land
|
||||
b _08082B20
|
||||
_08082B1C:
|
||||
bl ChooseWildMonIndex_WaterRock
|
||||
_08082B20:
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
_08082B24:
|
||||
lsls r4, r6, 2
|
||||
ldr r0, [r7, 0x4]
|
||||
adds r0, r4
|
||||
bl ChooseWildMonLevel
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
mov r0, r8
|
||||
cmp r0, 0x1
|
||||
bne _08082B48
|
||||
adds r0, r5, 0
|
||||
bl sub_808310C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08082B48
|
||||
movs r0, 0
|
||||
b _08082B58
|
||||
_08082B48:
|
||||
ldr r0, [r7, 0x4]
|
||||
adds r0, r4, r0
|
||||
ldrh r0, [r0, 0x2]
|
||||
adds r1, r5, 0
|
||||
adds r2, r6, 0
|
||||
bl sub_80829FC
|
||||
movs r0, 0x1
|
||||
_08082B58:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082AEC
|
||||
|
||||
thumb_func_start sub_8082B64
|
||||
sub_8082B64: @ 8082B64
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
lsls r0, r1, 24
|
||||
lsrs r0, 24
|
||||
bl ChooseWildMonIndex_Fishing
|
||||
adds r4, r0, 0
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
lsls r5, r4, 2
|
||||
ldr r0, [r6, 0x4]
|
||||
adds r0, r5
|
||||
bl ChooseWildMonLevel
|
||||
adds r1, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
ldr r0, [r6, 0x4]
|
||||
adds r0, r5, r0
|
||||
ldrh r0, [r0, 0x2]
|
||||
adds r2, r4, 0
|
||||
bl sub_80829FC
|
||||
ldr r0, [r6, 0x4]
|
||||
adds r5, r0
|
||||
ldrh r0, [r5, 0x2]
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082B64
|
||||
|
||||
thumb_func_start sub_8082BA0
|
||||
sub_8082BA0: @ 8082BA0
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
bl sub_808322C
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0xC8
|
||||
lsls r1, 3
|
||||
bl __umodsi3
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, r4
|
||||
bcc _08082BC4
|
||||
movs r0, 0
|
||||
b _08082BC6
|
||||
_08082BC4:
|
||||
movs r0, 0x1
|
||||
_08082BC6:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082BA0
|
||||
|
||||
thumb_func_start sub_8082BCC
|
||||
sub_8082BCC: @ 8082BCC
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x4
|
||||
str r0, [sp]
|
||||
lsls r1, 24
|
||||
lsrs r5, r1, 24
|
||||
lsls r0, 4
|
||||
str r0, [sp]
|
||||
movs r0, 0x6
|
||||
bl TestPlayerAvatarFlags
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08082BF6
|
||||
ldr r1, [sp]
|
||||
lsls r0, r1, 2
|
||||
adds r0, r1
|
||||
lsls r0, 4
|
||||
movs r1, 0x64
|
||||
bl __udivsi3
|
||||
str r0, [sp]
|
||||
_08082BF6:
|
||||
ldr r4, _08082C24 @ =gUnknown_20386D0
|
||||
ldrh r0, [r4, 0x6]
|
||||
lsls r0, 4
|
||||
movs r1, 0xC8
|
||||
bl __divsi3
|
||||
ldr r1, [sp]
|
||||
adds r1, r0
|
||||
str r1, [sp]
|
||||
mov r0, sp
|
||||
bl sub_8083174
|
||||
mov r0, sp
|
||||
bl sub_80831D8
|
||||
cmp r5, 0
|
||||
bne _08082C34
|
||||
ldrb r0, [r4, 0x9]
|
||||
cmp r0, 0x1
|
||||
beq _08082C28
|
||||
cmp r0, 0x2
|
||||
beq _08082C2E
|
||||
b _08082C34
|
||||
.align 2, 0
|
||||
_08082C24: .4byte gUnknown_20386D0
|
||||
_08082C28:
|
||||
ldr r0, [sp]
|
||||
lsrs r0, 1
|
||||
b _08082C32
|
||||
_08082C2E:
|
||||
ldr r0, [sp]
|
||||
lsls r0, 1
|
||||
_08082C32:
|
||||
str r0, [sp]
|
||||
_08082C34:
|
||||
ldr r0, [sp]
|
||||
movs r1, 0xC8
|
||||
lsls r1, 3
|
||||
cmp r0, r1
|
||||
bls _08082C40
|
||||
str r1, [sp]
|
||||
_08082C40:
|
||||
ldr r0, [sp]
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
bl sub_8082BA0
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
add sp, 0x4
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082BCC
|
||||
|
||||
thumb_func_start sub_8082C58
|
||||
sub_8082C58: @ 8082C58
|
||||
push {r4,r5,lr}
|
||||
ldr r5, _08082C90 @ =gUnknown_20386D0
|
||||
movs r0, 0
|
||||
strb r0, [r5, 0x9]
|
||||
ldr r4, _08082C94 @ =gPlayerParty
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x6
|
||||
bl GetMonData
|
||||
cmp r0, 0
|
||||
bne _08082C84
|
||||
adds r0, r4, 0
|
||||
bl GetMonAbility
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
beq _08082C82
|
||||
cmp r0, 0x23
|
||||
bne _08082C84
|
||||
movs r0, 0x2
|
||||
_08082C82:
|
||||
strb r0, [r5, 0x9]
|
||||
_08082C84:
|
||||
ldr r0, _08082C90 @ =gUnknown_20386D0
|
||||
ldrb r0, [r0, 0x9]
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08082C90: .4byte gUnknown_20386D0
|
||||
_08082C94: .4byte gPlayerParty
|
||||
thumb_func_end sub_8082C58
|
||||
|
||||
thumb_func_start sub_8082C98
|
||||
sub_8082C98: @ 8082C98
|
||||
push {lr}
|
||||
bl Random
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x64
|
||||
bl __umodsi3
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x3B
|
||||
bhi _08082CB4
|
||||
movs r0, 0x1
|
||||
b _08082CB6
|
||||
_08082CB4:
|
||||
movs r0, 0
|
||||
_08082CB6:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8082C98
|
||||
|
||||
thumb_func_start sub_8082CBC
|
||||
sub_8082CBC: @ 8082CBC
|
||||
push {r4-r7,lr}
|
||||
@@ -1372,8 +606,8 @@ _0808316C:
|
||||
bx r1
|
||||
thumb_func_end sub_808310C
|
||||
|
||||
thumb_func_start sub_8083174
|
||||
sub_8083174: @ 8083174
|
||||
thumb_func_start ApplyFluteEncounterRateMod
|
||||
ApplyFluteEncounterRateMod: @ 8083174
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl sub_80831A0
|
||||
@@ -1398,7 +632,7 @@ _08083198:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8083174
|
||||
thumb_func_end ApplyFluteEncounterRateMod
|
||||
|
||||
thumb_func_start sub_80831A0
|
||||
sub_80831A0: @ 80831A0
|
||||
@@ -1431,8 +665,8 @@ _080831D2:
|
||||
bx r1
|
||||
thumb_func_end sub_80831A0
|
||||
|
||||
thumb_func_start sub_80831D8
|
||||
sub_80831D8: @ 80831D8
|
||||
thumb_func_start ApplyCleanseTagEncounterRateMod
|
||||
ApplyCleanseTagEncounterRateMod: @ 80831D8
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl sub_80831F8
|
||||
@@ -1448,7 +682,7 @@ _080831F2:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80831D8
|
||||
thumb_func_end ApplyCleanseTagEncounterRateMod
|
||||
|
||||
thumb_func_start sub_80831F8
|
||||
sub_80831F8: @ 80831F8
|
||||
|
||||
+9
-1
@@ -9,7 +9,15 @@
|
||||
.include "data/wild_encounters.inc"
|
||||
|
||||
gUnknown_83CA71C:: @ 83CA71C
|
||||
.incbin "baserom.gba", 0x3CA71C, 0xED4
|
||||
.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27
|
||||
.byte 2, 2, 2, 3, 3, 3, 7, 7, 7, 20, 20, 14
|
||||
.byte 13, 13, 13, 13, 18, 18, 18, 18, 8, 8, 4, 4
|
||||
.byte 15, 15, 11, 11, 9, 9, 17, 17, 17, 16, 16, 16
|
||||
.byte 24, 24, 19, 19, 6, 6, 6, 5, 5, 5, 10, 10
|
||||
.byte 21, 21, 21, 22, 22, 22, 23, 23, 12, 12, 1, 1
|
||||
.byte 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26
|
||||
|
||||
.incbin "baserom.gba", 0x3CA770, 0xE80
|
||||
|
||||
gUnknown_83CB5F0:: @ 83CB5F0
|
||||
.incbin "baserom.gba", 0x3CB5F0, 0x200
|
||||
|
||||
@@ -42,7 +42,7 @@ void FishingWildEncounter(u8 rod);
|
||||
u16 GetLocalWildMon(bool8 *isWaterMon);
|
||||
u16 GetLocalWaterMon(void);
|
||||
bool8 UpdateRepelCounter(void);
|
||||
void sub_8082740(u8);
|
||||
void sub_8082740(bool8 state);
|
||||
u8 GetUnownLetterByPersonalityLoByte(u32 personality);
|
||||
bool8 SweetScentWildEncounter(void);
|
||||
void sub_8083214(u16 randVal);
|
||||
|
||||
@@ -125,6 +125,7 @@ SECTIONS {
|
||||
src/battle_setup.o(.text);
|
||||
asm/cable_club.o(.text);
|
||||
asm/trainer_see.o(.text);
|
||||
src/wild_encounter.o(.text);
|
||||
asm/wild_encounter.o(.text);
|
||||
asm/field_effect.o(.text);
|
||||
src/scanline_effect.o(.text);
|
||||
@@ -430,6 +431,7 @@ SECTIONS {
|
||||
src/battle_setup.o(.rodata);
|
||||
data/cable_club.o(.rodata);
|
||||
data/trainer_see.o(.rodata);
|
||||
src/wild_encounter.o(.rodata);
|
||||
data/data_835B488.o(.rodata);
|
||||
src/pokemon_icon.o(.rodata);
|
||||
data/data_835B488.o(.rodata.83D4100);
|
||||
|
||||
@@ -0,0 +1,301 @@
|
||||
#include "global.h"
|
||||
#include "random.h"
|
||||
#include "wild_encounter.h"
|
||||
#include "event_data.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/vars.h"
|
||||
#include "constants/abilities.h"
|
||||
|
||||
struct UnkStruct_20386D0
|
||||
{
|
||||
u8 filler_0[6];
|
||||
u16 unk_6;
|
||||
u8 unk_8;
|
||||
u8 unk_9;
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_20386D0 gUnknown_20386D0 = {};
|
||||
EWRAM_DATA bool8 gUnknown_20386DC = FALSE;
|
||||
|
||||
extern const u8 gUnknown_83CA71C[][12];
|
||||
|
||||
bool8 UnlockedTanobyOrAreNotInTanoby(void);
|
||||
u32 GenerateUnownPersonalityByLetter(u8 letter);
|
||||
bool8 sub_808310C(u8 level);
|
||||
u16 sub_808322C(void);
|
||||
void ApplyFluteEncounterRateMod(u32 *rate);
|
||||
void ApplyCleanseTagEncounterRateMod(u32 *rate);
|
||||
|
||||
void sub_8082740(bool8 state)
|
||||
{
|
||||
gUnknown_20386DC = state;
|
||||
}
|
||||
|
||||
u8 ChooseWildMonIndex_Land(void)
|
||||
{
|
||||
u8 pct = Random() % 100;
|
||||
if (pct < 20)
|
||||
return 0;
|
||||
if (pct >= 20 && pct < 40)
|
||||
return 1;
|
||||
if (pct >= 40 && pct < 50)
|
||||
return 2;
|
||||
if (pct >= 50 && pct < 60)
|
||||
return 3;
|
||||
if (pct >= 60 && pct < 70)
|
||||
return 4;
|
||||
if (pct >= 70 && pct < 80)
|
||||
return 5;
|
||||
if (pct >= 80 && pct < 85)
|
||||
return 6;
|
||||
if (pct >= 85 && pct < 90)
|
||||
return 7;
|
||||
if (pct >= 90 && pct < 94)
|
||||
return 8;
|
||||
if (pct >= 94 && pct < 98)
|
||||
return 9;
|
||||
if (pct == 98)
|
||||
return 10;
|
||||
return 11;
|
||||
}
|
||||
|
||||
u8 ChooseWildMonIndex_WaterRock(void)
|
||||
{
|
||||
u8 pct = Random() % 100;
|
||||
if (pct < 60)
|
||||
return 0;
|
||||
if (pct >= 60 && pct < 90)
|
||||
return 1;
|
||||
if (pct >= 90 && pct < 95)
|
||||
return 2;
|
||||
if (pct >= 95 && pct < 99)
|
||||
return 3;
|
||||
return 4;
|
||||
}
|
||||
|
||||
u8 ChooseWildMonIndex_Fishing(u8 rod)
|
||||
{
|
||||
u8 slot = 0;
|
||||
u8 pct = Random() % 100;
|
||||
switch (rod)
|
||||
{
|
||||
case 0: // old
|
||||
if (pct < 70)
|
||||
slot = 0;
|
||||
else
|
||||
slot = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (pct < 60)
|
||||
slot = 2;
|
||||
if (pct >= 60 && pct < 80)
|
||||
slot = 3;
|
||||
if (pct >= 80 && pct < 100)
|
||||
slot = 4;
|
||||
break;
|
||||
case 2:
|
||||
if (pct < 40)
|
||||
slot = 5;
|
||||
if (pct >= 40 && pct < 80)
|
||||
slot = 6;
|
||||
if (pct >= 80 && pct < 95)
|
||||
slot = 7;
|
||||
if (pct >= 95 && pct < 99)
|
||||
slot = 8;
|
||||
if (pct == 99)
|
||||
slot = 9;
|
||||
break;
|
||||
}
|
||||
return slot;
|
||||
}
|
||||
|
||||
u8 ChooseWildMonLevel(const struct WildPokemon * info)
|
||||
{
|
||||
u8 lo;
|
||||
u8 hi;
|
||||
u8 mod;
|
||||
u8 res;
|
||||
if (info->maxLevel >= info->minLevel)
|
||||
{
|
||||
lo = info->minLevel;
|
||||
hi = info->maxLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
lo = info->maxLevel;
|
||||
hi = info->minLevel;
|
||||
}
|
||||
mod = hi - lo + 1;
|
||||
res = Random() % mod;
|
||||
return lo + res;
|
||||
}
|
||||
|
||||
u16 sub_8082934(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
const struct WildPokemonHeader *wildHeader = &gWildMonHeaders[i];
|
||||
if (wildHeader->mapGroup == 0xFF)
|
||||
break;
|
||||
|
||||
if (gWildMonHeaders[i].mapGroup == gSaveBlock1Ptr->location.mapGroup &&
|
||||
gWildMonHeaders[i].mapNum == gSaveBlock1Ptr->location.mapNum)
|
||||
{
|
||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SIX_ISLAND_ALTERING_CAVE) &&
|
||||
gSaveBlock1Ptr->location.mapNum == MAP_NUM(SIX_ISLAND_ALTERING_CAVE))
|
||||
{
|
||||
u16 alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET);
|
||||
if (alteringCaveId > 8)
|
||||
alteringCaveId = 0;
|
||||
|
||||
i += alteringCaveId;
|
||||
}
|
||||
|
||||
if (!UnlockedTanobyOrAreNotInTanoby())
|
||||
break;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool8 UnlockedTanobyOrAreNotInTanoby(void)
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_UNLOCKED_TANOBY_RUINS))
|
||||
return TRUE;
|
||||
if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_DILFORD_CHAMBER))
|
||||
return TRUE;
|
||||
if (!(gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_LIPTOO_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_WEEPTH_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_DILFORD_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_SCUFIB_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_RIXY_CHAMBER)
|
||||
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_VIAPOIS_CHAMBER)
|
||||
))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void GenerateWildMon(u16 species, u8 level, u8 slot)
|
||||
{
|
||||
u32 personality;
|
||||
s8 chamber;
|
||||
ZeroEnemyPartyMons();
|
||||
if (species != SPECIES_UNOWN)
|
||||
{
|
||||
CreateMonWithNature(&gEnemyParty[0], species, level, 32, Random() % 25);
|
||||
}
|
||||
else
|
||||
{
|
||||
chamber = gSaveBlock1Ptr->location.mapNum - MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER);
|
||||
personality = GenerateUnownPersonalityByLetter(gUnknown_83CA71C[chamber][slot]);
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, TRUE, personality, FALSE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
u32 GenerateUnownPersonalityByLetter(u8 letter)
|
||||
{
|
||||
u32 personality;
|
||||
do
|
||||
{
|
||||
personality = (Random() << 16) | Random();
|
||||
} while (GetUnownLetterByPersonalityLoByte(personality) != letter);
|
||||
return personality;
|
||||
}
|
||||
|
||||
u8 GetUnownLetterByPersonalityLoByte(u32 personality)
|
||||
{
|
||||
return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
|
||||
}
|
||||
|
||||
bool8 sub_8082AEC(const struct WildPokemonInfo * info, u8 tableIdx, u8 a2)
|
||||
{
|
||||
u8 slot = 0;
|
||||
u8 level;
|
||||
switch (tableIdx)
|
||||
{
|
||||
case 0:
|
||||
slot = ChooseWildMonIndex_Land();
|
||||
break;
|
||||
case 1:
|
||||
slot = ChooseWildMonIndex_WaterRock();
|
||||
break;
|
||||
case 2:
|
||||
slot = ChooseWildMonIndex_WaterRock();
|
||||
break;
|
||||
}
|
||||
level = ChooseWildMonLevel(&info->wildPokemon[slot]);
|
||||
if (a2 == 1 && !sub_808310C(level))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
GenerateWildMon(info->wildPokemon[slot].species, level, slot);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u16 sub_8082B64(const struct WildPokemonInfo * info, u8 rod)
|
||||
{
|
||||
u8 slot = ChooseWildMonIndex_Fishing(rod);
|
||||
u8 level = ChooseWildMonLevel(&info->wildPokemon[slot]);
|
||||
GenerateWildMon(info->wildPokemon[slot].species, level, slot);
|
||||
return info->wildPokemon[slot].species;
|
||||
}
|
||||
|
||||
bool8 DoWildEncounterRateDiceRoll(u16 a0)
|
||||
{
|
||||
if (sub_808322C() % 1600 < a0)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_8082BCC(u32 encounterRate, bool8 ignoreAbility)
|
||||
{
|
||||
encounterRate *= 16;
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
|
||||
encounterRate = encounterRate * 80 / 100;
|
||||
encounterRate += gUnknown_20386D0.unk_6 * 16 / 200;
|
||||
ApplyFluteEncounterRateMod(&encounterRate);
|
||||
ApplyCleanseTagEncounterRateMod(&encounterRate);
|
||||
if (!ignoreAbility)
|
||||
{
|
||||
switch (gUnknown_20386D0.unk_9)
|
||||
{
|
||||
case 1:
|
||||
encounterRate /= 2;
|
||||
break;
|
||||
case 2:
|
||||
encounterRate *= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (encounterRate > 1600)
|
||||
encounterRate = 1600;
|
||||
return DoWildEncounterRateDiceRoll(encounterRate);
|
||||
}
|
||||
|
||||
u8 sub_8082C58(void)
|
||||
{
|
||||
gUnknown_20386D0.unk_9 = 0;
|
||||
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
|
||||
{
|
||||
u8 ability = GetMonAbility(&gPlayerParty[0]);
|
||||
if (ability == ABILITY_STENCH)
|
||||
gUnknown_20386D0.unk_9 = 1;
|
||||
else if (ability == ABILITY_ILLUMINATE)
|
||||
gUnknown_20386D0.unk_9 = 2;
|
||||
}
|
||||
return gUnknown_20386D0.unk_9;
|
||||
}
|
||||
|
||||
bool8 sub_8082C98(void)
|
||||
{
|
||||
if ((Random() % 100) >= 60)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
Reference in New Issue
Block a user