try battle tent and fail

This commit is contained in:
DizzyEggg 2018-08-26 15:27:06 +02:00
parent 2b7c138cbe
commit 78cad0dee5
12 changed files with 264 additions and 421 deletions

View File

@ -7,357 +7,6 @@
thumb_func_start sub_8195960
sub_8195960: @ 8195960
push {lr}
ldr r1, =gUnknown_0860DE50
ldr r0, =gSpecialVar_0x8004
ldrh r0, [r0]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
bl _call_via_r0
pop {r0}
bx r0
.pool
thumb_func_end sub_8195960
thumb_func_start sub_8195980
sub_8195980: @ 8195980
push {r4-r7,lr}
ldr r4, =gSaveBlock2Ptr
ldr r0, [r4]
ldr r1, =0x00000ca9
adds r0, r1
ldrb r0, [r0]
lsls r0, 30
lsrs r5, r0, 30
ldr r0, =0x000040ce
bl VarGet
lsls r0, 16
lsrs r7, r0, 16
ldr r0, [r4]
ldr r2, =0x00000ca8
adds r0, r2
movs r6, 0
strb r6, [r0]
ldr r1, [r4]
adds r2, 0xA
adds r0, r1, r2
strh r6, [r0]
ldr r0, =0x00000ca9
adds r1, r0
ldrb r2, [r1]
movs r0, 0x5
negs r0, r0
ands r0, r2
strb r0, [r1]
ldr r1, [r4]
ldr r2, =0x00000ca9
adds r1, r2
ldrb r2, [r1]
movs r0, 0x9
negs r0, r0
ands r0, r2
strb r0, [r1]
ldr r4, [r4]
ldr r0, =0x00000cdc
adds r3, r4, r0
ldr r2, =gUnknown_0860DE98
lsls r1, r5, 2
lsls r0, r7, 3
adds r1, r0
adds r1, r2
ldr r0, [r3]
ldr r1, [r1]
ands r0, r1
cmp r0, 0
bne _081959F2
lsls r0, r5, 1
lsls r1, r7, 2
adds r0, r1
ldr r2, =0x00000dc8
adds r1, r4, r2
adds r1, r0
strh r6, [r1]
_081959F2:
ldr r0, =gSaveBlock1Ptr
ldr r0, [r0]
movs r1, 0x4
ldrsb r1, [r0, r1]
movs r2, 0x5
ldrsb r2, [r0, r2]
movs r3, 0x1
negs r3, r3
movs r0, 0
bl saved_warp2_set
ldr r0, =gTrainerBattleOpponent_A
strh r6, [r0]
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_8195980
thumb_func_start sub_8195A38
sub_8195A38: @ 8195A38
push {r4-r7,lr}
ldr r5, =gSaveBlock2Ptr
ldr r0, [r5]
ldr r1, =0x00000ca9
adds r0, r1
ldrb r0, [r0]
lsls r0, 30
lsrs r7, r0, 30
ldr r0, =0x000040ce
bl VarGet
lsls r0, 16
lsrs r6, r0, 16
ldr r0, =gSpecialVar_0x8005
ldrh r0, [r0]
cmp r0, 0x1
beq _08195A90
cmp r0, 0x1
bgt _08195A74
cmp r0, 0
beq _08195A7A
b _08195AD0
.pool
_08195A74:
cmp r0, 0x2
beq _08195AB0
b _08195AD0
_08195A7A:
ldr r0, =gSpecialVar_Result
ldr r1, [r5]
ldr r2, =0x00000dc6
adds r1, r2
ldrh r1, [r1]
strh r1, [r0]
b _08195AD0
.pool
_08195A90:
ldr r3, =gSpecialVar_Result
ldr r0, [r5]
lsls r1, r7, 1
lsls r2, r6, 2
adds r1, r2
ldr r2, =0x00000dc8
adds r0, r2
adds r0, r1
ldrh r0, [r0]
strh r0, [r3]
b _08195AD0
.pool
_08195AB0:
ldr r4, =gSpecialVar_Result
ldr r2, [r5]
ldr r0, =0x00000cdc
adds r2, r0
ldr r3, =gUnknown_0860DE98
lsls r0, r7, 2
lsls r1, r6, 3
adds r0, r1
adds r0, r3
ldr r1, [r2]
ldr r0, [r0]
ands r1, r0
negs r0, r1
orrs r0, r1
lsrs r0, 31
strh r0, [r4]
_08195AD0:
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_8195A38
thumb_func_start sub_8195AE4
sub_8195AE4: @ 8195AE4
push {r4-r6,lr}
ldr r6, =gSaveBlock2Ptr
ldr r0, [r6]
ldr r1, =0x00000ca9
adds r0, r1
ldrb r0, [r0]
lsls r0, 30
lsrs r5, r0, 30
ldr r0, =0x000040ce
bl VarGet
lsls r0, 16
lsrs r4, r0, 16
ldr r0, =gSpecialVar_0x8005
ldrh r0, [r0]
cmp r0, 0x1
beq _08195B3C
cmp r0, 0x1
bgt _08195B20
cmp r0, 0
beq _08195B26
b _08195BA0
.pool
_08195B20:
cmp r0, 0x2
beq _08195B5C
b _08195BA0
_08195B26:
ldr r0, [r6]
ldr r1, =gSpecialVar_0x8006
ldrh r1, [r1]
ldr r2, =0x00000dc6
adds r0, r2
strh r1, [r0]
b _08195BA0
.pool
_08195B3C:
ldr r2, [r6]
lsls r0, r5, 1
lsls r1, r4, 2
adds r0, r1
ldr r1, =0x00000dc8
adds r2, r1
adds r2, r0
ldr r0, =gSpecialVar_0x8006
ldrh r0, [r0]
strh r0, [r2]
b _08195BA0
.pool
_08195B5C:
ldr r0, =gSpecialVar_0x8006
ldrh r0, [r0]
cmp r0, 0
beq _08195B88
ldr r2, [r6]
ldr r0, =0x00000cdc
adds r2, r0
ldr r3, =gUnknown_0860DE98
lsls r1, r5, 2
lsls r0, r4, 3
adds r1, r0
adds r1, r3
ldr r0, [r2]
ldr r1, [r1]
orrs r0, r1
b _08195B9E
.pool
_08195B88:
ldr r2, [r6]
ldr r1, =0x00000cdc
adds r2, r1
ldr r3, =gUnknown_0860DEA8
lsls r1, r5, 2
lsls r0, r4, 3
adds r1, r0
adds r1, r3
ldr r0, [r2]
ldr r1, [r1]
ands r0, r1
_08195B9E:
str r0, [r2]
_08195BA0:
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end sub_8195AE4
thumb_func_start sub_8195BB0
sub_8195BB0: @ 8195BB0
push {r4,lr}
ldr r0, =0x000040ce
bl VarGet
lsls r0, 16
ldr r1, =gSaveBlock2Ptr
ldr r2, [r1]
ldr r3, =0x00000ca9
adds r1, r2, r3
ldrb r1, [r1]
lsls r1, 30
lsrs r1, 29
lsrs r0, 14
adds r1, r0
ldr r0, =0x00000dc8
adds r2, r0
adds r2, r1
ldrh r0, [r2]
cmp r0, 0x31
bhi _08195C00
ldr r4, =gSpecialVar_Result
bl Random
lsls r0, 16
lsrs r0, 16
movs r1, 0x3
bl __umodsi3
strh r0, [r4]
b _08195C16
.pool
_08195C00:
cmp r0, 0x62
bhi _08195C10
ldr r1, =gSpecialVar_Result
movs r0, 0x3
b _08195C14
.pool
_08195C10:
ldr r1, =gSpecialVar_Result
movs r0, 0x4
_08195C14:
strh r0, [r1]
_08195C16:
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_8195BB0
thumb_func_start sub_8195C20
sub_8195C20: @ 8195C20
push {r4,lr}
ldr r4, =gTrainerBattleOpponent_A
bl Random
lsls r0, 16
lsrs r0, 16
movs r1, 0xFF
bl __umodsi3
lsls r0, 16
lsrs r0, 16
lsls r1, r0, 2
adds r1, r0
lsrs r1, 6
strh r1, [r4]
ldrh r0, [r4]
movs r1, 0
bl sub_8162614
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_8195C20
thumb_func_start sub_8195C50
sub_8195C50: @ 8195C50
push {lr}
ldr r3, =gTrainerBattleOpponent_A
ldrh r1, [r3]
ldr r0, =0x0000012b
cmp r1, r0
bhi _08195C6C
ldr r2, =gFacilityTrainers
movs r0, 0x34
muls r1, r0
ldr r0, [r2]
adds r0, r1
adds r0, 0xC
bl ConvertBattleFrontierTrainerSpeechToString
_08195C6C:
pop {r0}
bx r0
.pool
thumb_func_end sub_8195C50
thumb_func_start sub_8195C7C thumb_func_start sub_8195C7C
sub_8195C7C: @ 8195C7C sub_8195C7C: @ 8195C7C
push {r4-r7,lr} push {r4-r7,lr}

View File

@ -20059,7 +20059,7 @@ _081A4E46:
bl ZeroEnemyPartyMons bl ZeroEnemyPartyMons
movs r1, 0 movs r1, 0
str r1, [sp, 0x18] str r1, [sp, 0x18]
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x1C] str r0, [sp, 0x1C]
@ -23702,7 +23702,7 @@ sub_81A6CD0: @ 81A6CD0
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x24] str r0, [sp, 0x24]
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x20] str r0, [sp, 0x20]
@ -29517,7 +29517,7 @@ _081A9C56:
bl SetMonData bl SetMonData
cmp r5, 0 cmp r5, 0
beq _081A9CD4 beq _081A9CD4
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r5, r0, 24 lsrs r5, r0, 24
ldr r1, [sp, 0x10] ldr r1, [sp, 0x10]

View File

@ -391,7 +391,7 @@ _081622B2:
adds r4, r1, r0 adds r4, r1, r0
mov r0, r10 mov r0, r10
str r2, [sp, 0x38] str r2, [sp, 0x38]
bl BattleFrontierGetOpponentLvl bl GetFrontierEnemyMonLevel
ldrb r1, [r4] ldrb r1, [r4]
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
@ -551,7 +551,7 @@ _08162414:
bl __udivsi3 bl __udivsi3
lsls r0, 16 lsls r0, 16
lsrs r5, r0, 16 lsrs r5, r0, 16
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
subs r4, 0x2 subs r4, 0x2
cmp r4, 0x1 cmp r4, 0x1
bhi _08162488 bhi _08162488
@ -784,7 +784,7 @@ sub_8162614: @ 8162614
adds r6, r4, 0 adds r6, r4, 0
lsls r1, 24 lsls r1, 24
lsrs r5, r1, 24 lsrs r5, r1, 24
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -962,7 +962,7 @@ sub_81627A4: @ 81627A4
lsls r0, 16 lsls r0, 16
lsrs r4, r0, 16 lsrs r4, r0, 16
adds r5, r4, 0 adds r5, r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -1335,7 +1335,7 @@ GetFrontierTrainerFrontSpriteId: @ 8162AA0
lsls r0, 16 lsls r0, 16
lsrs r4, r0, 16 lsrs r4, r0, 16
adds r5, r4, 0 adds r5, r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -1462,7 +1462,7 @@ GetFrontierOpponentClass: @ 8162BD8
lsls r0, 16 lsls r0, 16
lsrs r4, r0, 16 lsrs r4, r0, 16
adds r5, r4, 0 adds r5, r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -1602,7 +1602,7 @@ sub_8162D34: @ 8162D34
lsls r0, 16 lsls r0, 16
lsrs r4, r0, 16 lsrs r4, r0, 16
adds r5, r4, 0 adds r5, r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -1704,7 +1704,7 @@ GetFrontierTrainerName: @ 8162E20
lsls r1, 16 lsls r1, 16
lsrs r5, r1, 16 lsrs r5, r1, 16
movs r4, 0 movs r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r5, r0 cmp r5, r0
@ -1854,7 +1854,7 @@ sub_8162F68: @ 8162F68
lsls r0, 16 lsls r0, 16
lsrs r4, r0, 16 lsrs r4, r0, 16
adds r5, r4, 0 adds r5, r4, 0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r4, r0 cmp r4, r0
@ -2025,7 +2025,7 @@ sub_81630C4: @ 81630C4
add r4, sp, 0x14 add r4, sp, 0x14
movs r0, 0xFF movs r0, 0xFF
strb r0, [r4] strb r0, [r4]
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x20] str r0, [sp, 0x20]
@ -2551,7 +2551,7 @@ RandomizeFacilityTrainerMonId: @ 8163524
adds r4, r0, 0 adds r4, r0, 0
lsls r4, 16 lsls r4, 16
lsrs r4, 16 lsrs r4, 16
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r6, r0, 24 lsrs r6, r0, 24
ldr r0, =gFacilityTrainers ldr r0, =gFacilityTrainers
@ -2728,7 +2728,7 @@ _081636A4:
movs r0, 0x1F movs r0, 0x1F
_081636A6: _081636A6:
str r0, [sp, 0x18] str r0, [sp, 0x18]
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x14] str r0, [sp, 0x14]
@ -3029,7 +3029,7 @@ _0816390A:
thumb_func_start sub_8163914 thumb_func_start sub_8163914
sub_8163914: @ 8163914 sub_8163914: @ 8163914
push {lr} push {lr}
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
ldr r0, =gSpecialVar_0x8005 ldr r0, =gSpecialVar_0x8005
ldrh r0, [r0] ldrh r0, [r0]
cmp r0, 0 cmp r0, 0
@ -3979,7 +3979,7 @@ _081641E6:
lsls r0, r1, 24 lsls r0, r1, 24
lsrs r0, 24 lsrs r0, 24
str r2, [sp, 0x18] str r2, [sp, 0x18]
bl BattleFrontierGetOpponentLvl bl GetFrontierEnemyMonLevel
ldrb r1, [r4] ldrb r1, [r4]
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
@ -4091,7 +4091,7 @@ sub_81642A0: @ 81642A0
movs r2, 0 movs r2, 0
bl GetMonData bl GetMonData
str r0, [sp, 0x20] str r0, [sp, 0x20]
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r7, 0 movs r7, 0
ldr r0, [sp, 0x18] ldr r0, [sp, 0x18]
lsls r0, 24 lsls r0, 24
@ -4464,7 +4464,7 @@ _081645B8:
lsls r0, r1, 24 lsls r0, r1, 24
lsrs r0, 24 lsrs r0, 24
str r3, [sp, 0x48] str r3, [sp, 0x48]
bl BattleFrontierGetOpponentLvl bl GetFrontierEnemyMonLevel
ldrb r1, [r4] ldrb r1, [r4]
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
@ -4556,7 +4556,7 @@ sub_81646BC: @ 81646BC
movs r0, 0 movs r0, 0
mov r9, r0 mov r9, r0
mov r10, r0 mov r10, r0
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
movs r0, 0xFA movs r0, 0xFA
lsls r0, 1 lsls r0, 1
cmp r5, r0 cmp r5, r0
@ -4705,7 +4705,7 @@ sub_8164828: @ 8164828
mov r5, r8 mov r5, r8
push {r5-r7} push {r5-r7}
sub sp, 0x8 sub sp, 0x8
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
bl sub_81A39C4 bl sub_81A39C4
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
@ -6073,7 +6073,7 @@ sub_8165404: @ 8165404
sub sp, 0x70 sub sp, 0x70
lsls r0, 16 lsls r0, 16
lsrs r7, r0, 16 lsrs r7, r0, 16
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
ldr r0, =0x00000c03 ldr r0, =0x00000c03
cmp r7, r0 cmp r7, r0
beq _08165420 beq _08165420
@ -6228,7 +6228,7 @@ _08165564:
bls _0816556C bls _0816556C
b _081656E8 b _081656E8
_0816556C: _0816556C:
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x50] str r0, [sp, 0x50]
@ -7083,8 +7083,8 @@ _08165C2A:
.pool .pool
thumb_func_end sub_8165B88 thumb_func_end sub_8165B88
thumb_func_start GetFrontierEnemyMonLevel thumb_func_start GetFacilityEnemyMonLevel
GetFrontierEnemyMonLevel: @ 8165C40 GetFacilityEnemyMonLevel: @ 8165C40
push {lr} push {lr}
ldr r0, =gSaveBlock2Ptr ldr r0, =gSaveBlock2Ptr
ldr r0, [r0] ldr r0, [r0]
@ -7104,20 +7104,20 @@ GetFrontierEnemyMonLevel: @ 8165C40
ldrb r0, [r2] ldrb r0, [r2]
lsls r0, 30 lsls r0, 30
lsrs r0, 30 lsrs r0, 30
bl BattleFrontierGetOpponentLvl bl GetFrontierEnemyMonLevel
b _08165C88 b _08165C88
.pool .pool
_08165C84: _08165C84:
bl sub_8165D78 bl GetTentEnemyMonLevel
_08165C88: _08165C88:
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
pop {r1} pop {r1}
bx r1 bx r1
thumb_func_end GetFrontierEnemyMonLevel thumb_func_end GetFacilityEnemyMonLevel
thumb_func_start BattleFrontierGetOpponentLvl thumb_func_start GetFrontierEnemyMonLevel
BattleFrontierGetOpponentLvl: @ 8165C90 GetFrontierEnemyMonLevel: @ 8165C90
push {lr} push {lr}
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
@ -7138,7 +7138,7 @@ _08165CA2:
_08165CB0: _08165CB0:
pop {r1} pop {r1}
bx r1 bx r1
thumb_func_end BattleFrontierGetOpponentLvl thumb_func_end GetFrontierEnemyMonLevel
thumb_func_start sub_8165CB4 thumb_func_start sub_8165CB4
sub_8165CB4: @ 8165CB4 sub_8165CB4: @ 8165CB4
@ -7246,8 +7246,8 @@ _08165D72:
bx r1 bx r1
thumb_func_end sub_8165D40 thumb_func_end sub_8165D40
thumb_func_start sub_8165D78 thumb_func_start GetTentEnemyMonLevel
sub_8165D78: @ 8165D78 GetTentEnemyMonLevel: @ 8165D78
push {lr} push {lr}
ldr r0, =0x000040cf ldr r0, =0x000040cf
bl VarGet bl VarGet
@ -7300,7 +7300,7 @@ _08165E02:
pop {r1} pop {r1}
bx r1 bx r1
.pool .pool
thumb_func_end sub_8165D78 thumb_func_end GetTentEnemyMonLevel
thumb_func_start sub_8165E18 thumb_func_start sub_8165E18
sub_8165E18: @ 8165E18 sub_8165E18: @ 8165E18
@ -7384,7 +7384,7 @@ sub_8165EA4: @ 8165EA4
lsls r2, 24 lsls r2, 24
lsrs r2, 24 lsrs r2, 24
str r2, [sp, 0x1C] str r2, [sp, 0x1C]
bl sub_8165D78 bl GetTentEnemyMonLevel
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
str r0, [sp, 0x20] str r0, [sp, 0x20]
@ -7756,7 +7756,7 @@ sub_8166188: @ 8166188
ands r0, r1 ands r0, r1
cmp r0, 0 cmp r0, 0
beq _081661E8 beq _081661E8
bl GetFrontierEnemyMonLevel bl GetFacilityEnemyMonLevel
lsls r0, 24 lsls r0, 24
movs r5, 0 movs r5, 0
ldr r7, =gBaseStats ldr r7, =gBaseStats

View File

@ -32,7 +32,17 @@ struct BattleFrontierTrainer
u16 *btMonPool; u16 *btMonPool;
}; };
struct FacilityMon
{
u16 species;
u16 moves[4];
u8 itemTableId;
u8 evSpread;
u8 nature;
};
extern const struct BattleFrontierTrainer *gFacilityTrainers; extern const struct BattleFrontierTrainer *gFacilityTrainers;
extern const struct FacilityMon *gFacilityTrainerMons;
u16 sub_8164FCC(u8, u8); u16 sub_8164FCC(u8, u8);
void sub_81659DC(struct RSBattleTowerRecord *a0, struct RSBattleTowerRecord *a1); void sub_81659DC(struct RSBattleTowerRecord *a0, struct RSBattleTowerRecord *a1);

View File

@ -337,6 +337,12 @@ struct FrontierMonData
u8 nature; u8 nature;
}; };
struct Struct_field_E70
{
u16 monId;
u8 unk2[9];
};
struct BattleDomeTrainer struct BattleDomeTrainer
{ {
u16 trainerId:10; u16 trainerId:10;
@ -398,10 +404,8 @@ struct BattleFrontier
/*0xD24*/ struct BattleDomeTrainer domeTrainers[DOME_TOURNAMENT_TRAINERS_COUNT]; /*0xD24*/ struct BattleDomeTrainer domeTrainers[DOME_TOURNAMENT_TRAINERS_COUNT];
/*0xD64*/ u16 domeMonId[DOME_TOURNAMENT_TRAINERS_COUNT][3]; /*0xD64*/ u16 domeMonId[DOME_TOURNAMENT_TRAINERS_COUNT][3];
/*0xD64*/ u16 field_DC4[2]; /*0xD64*/ u16 field_DC4[2];
/*0xDC8*/ u16 field_DC8[2]; /*0xDC8*/ u16 field_DC8[2][2];
/*0xDCC*/ u8 filler_DCC[4]; /*0xDD0*/ u16 field_DD0[2][2];
/*0xDD0*/ u16 field_DD0[2];
/*0xDD4*/ u16 field_DD4[2];
/*0xDD8*/ u16 field_DD8; /*0xDD8*/ u16 field_DD8;
/*0xDDA*/ u16 field_DDA[2]; /*0xDDA*/ u16 field_DDA[2];
/*0xDDE*/ u16 field_DDE[2]; /*0xDDE*/ u16 field_DDE[2];
@ -429,7 +433,7 @@ struct BattleFrontier
/*0xE6A*/ u16 field_E6A; /*0xE6A*/ u16 field_E6A;
/*0xE6C*/ u16 field_E6C; /*0xE6C*/ u16 field_E6C;
/*0xE6E*/ u16 field_E6E; /*0xE6E*/ u16 field_E6E;
/*0xE70*/ u8 field_E70[72]; /*0xE70*/ struct Struct_field_E70 field_E70[6];
/*0xEB8*/ u16 frontierBattlePoints; /*0xEB8*/ u16 frontierBattlePoints;
/*0xEBA*/ u8 field_EBA; /*0xEBA*/ u8 field_EBA;
/*0xEBB*/ u8 field_EBB; /*0xEBB*/ u8 field_EBB;

View File

@ -243,6 +243,7 @@ SECTIONS {
src/trainer_pokemon_sprites.o(.text); src/trainer_pokemon_sprites.o(.text);
src/lilycove_lady.o(.text); src/lilycove_lady.o(.text);
src/battle_dome.o(.text); src/battle_dome.o(.text);
src/battle_frontier_1.o(.text);
asm/battle_frontier_1.o(.text); asm/battle_frontier_1.o(.text);
src/menu.o(.text); src/menu.o(.text);
asm/battle_frontier_2.o(.text); asm/battle_frontier_2.o(.text);

View File

@ -39,15 +39,6 @@
#define DOME_FINAL 3 #define DOME_FINAL 3
#define DOME_ROUNDS_COUNT 4 #define DOME_ROUNDS_COUNT 4
struct FacilityMon
{
u16 species;
u16 moves[4];
u8 itemTableId;
u8 evSpread;
u8 nature;
};
struct BattleDomeStruct struct BattleDomeStruct
{ {
u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT]; u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT];
@ -66,7 +57,7 @@ extern void sub_81B8558(void);
extern u32 sub_81A39C4(void); extern u32 sub_81A39C4(void);
extern u16 sub_8162548(u8, u8); extern u16 sub_8162548(u8, u8);
extern u16 RandomizeFacilityTrainerMonId(u16); extern u16 RandomizeFacilityTrainerMonId(u16);
extern u8 GetFrontierEnemyMonLevel(void); extern u8 GetFacilityEnemyMonLevel(void);
extern u16 sub_81A5060(u8 monId, u8 moveSlotId); extern u16 sub_81A5060(u8 monId, u8 moveSlotId);
extern u8 sub_81A50F0(u8, u8); extern u8 sub_81A50F0(u8, u8);
extern u8 sub_81A50B0(u8); extern u8 sub_81A50B0(u8);
@ -87,7 +78,6 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y; extern u16 gBattle_BG3_Y;
extern const struct FacilityMon *gFacilityTrainerMons;
extern void (* const gUnknown_0860D090[])(void); extern void (* const gUnknown_0860D090[])(void);
extern const u32 gUnknown_0860D0EC[][2]; extern const u32 gUnknown_0860D0EC[][2];
@ -822,7 +812,7 @@ void InitDomeTrainers(void)
monTypesBits >>= 1; monTypesBits >>= 1;
} }
monLevel = GetFrontierEnemyMonLevel(); monLevel = GetFacilityEnemyMonLevel();
statSums[0] += (monTypesCount * monLevel) / 20; statSums[0] += (monTypesCount * monLevel) / 20;
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
@ -995,7 +985,7 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM
s32 i; s32 i;
u8 happiness = 0xFF; u8 happiness = 0xFF;
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3.
u8 level = GetFrontierEnemyMonLevel(); u8 level = GetFacilityEnemyMonLevel();
CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId],
gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species,
level, level,
@ -3716,7 +3706,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
u16 bestScore = 0; u16 bestScore = 0;
u16 bestId = 0; u16 bestId = 0;
s32 movePower = 0; s32 movePower = 0;
GetFrontierEnemyMonLevel(); // Unused return variable. GetFacilityEnemyMonLevel(); // Unused return variable.
// Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons.
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
@ -4580,7 +4570,7 @@ static void DecideRoundWinners(u8 roundId)
static void CopyDomeTrainerName(u8 *dst, u16 trainerId) static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
{ {
s32 i = 0; s32 i = 0;
GetFrontierEnemyMonLevel(); // Unused return value. GetFacilityEnemyMonLevel(); // Unused return value.
if (trainerId == TRAINER_FRONTIER_BRAIN) if (trainerId == TRAINER_FRONTIER_BRAIN)
{ {

118
src/battle_frontier_1.c Normal file
View File

@ -0,0 +1,118 @@
#include "global.h"
#include "event_data.h"
#include "battle_setup.h"
#include "overworld.h"
#include "random.h"
#include "battle_tower.h"
extern void sub_8162614(u16, u8);
extern void (* const gUnknown_0860DE50[])(void);
extern const u32 gUnknown_0860DE98[][2];
extern const u32 gUnknown_0860DEA8[][2];
// code
void sub_8195960(void)
{
gUnknown_0860DE50[gSpecialVar_0x8004]();
}
void sub_8195980(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
gSaveBlock2Ptr->frontier.field_CA8 = 0;
gSaveBlock2Ptr->frontier.field_CB2 = 0;
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = 0;
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
void sub_8195A38(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1];
break;
case 1:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
break;
case 2:
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0);
break;
}
}
void sub_8195AE4(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
case 0:
gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006;
break;
case 1:
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
case 2:
if (gSpecialVar_0x8006)
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode];
else
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode];
break;
}
}
void sub_8195BB0(void)
{
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 50)
gSpecialVar_Result = Random() % 3;
else if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 99)
gSpecialVar_Result = 3;
else
gSpecialVar_Result = 4;
}
void sub_8195C20(void)
{
gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u;
sub_8162614(gTrainerBattleOpponent_A, 0);
}
void sub_8195C50(void)
{
if (gTrainerBattleOpponent_A < 300)
ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
/*
void sub_8195C7C(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 9999)
{
u16 wat = 0;
gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]++;
if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode])
wat = 1;
if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][wat] != 0)
gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode];
}
}
*/

View File

@ -11,6 +11,10 @@
#include "constants/items.h" #include "constants/items.h"
#include "constants/region_map_sections.h" #include "constants/region_map_sections.h"
extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
extern const struct FacilityMon gSlateportBattleTentMons[];
extern const u16 gBattleFrontierHeldItems[];
// This file's functions. // This file's functions.
void sub_81B99D4(void); void sub_81B99D4(void);
void sub_81B9A28(void); void sub_81B9A28(void);
@ -51,7 +55,7 @@ void (*const gUnknown_086160B4[])(void) =
sub_81B9B28 sub_81B9B28
}; };
const u16 gUnknown_086160D4[] = {ITEM_NEST_BALL, ITEM_NONE}; static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL};
void (*const gUnknown_086160D8[])(void) = void (*const gUnknown_086160D8[])(void) =
{ {
@ -64,7 +68,7 @@ void (*const gUnknown_086160D8[])(void) =
sub_81B9CF0 sub_81B9CF0
}; };
const u16 gUnknown_086160F4[] = {ITEM_HYPER_POTION, ITEM_NONE}; static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION};
void (*const gUnknown_086160F8[])(void) = void (*const gUnknown_086160F8[])(void) =
{ {
@ -80,7 +84,7 @@ void (*const gUnknown_086160F8[])(void) =
sub_81B9EC0 sub_81B9EC0
}; };
const u16 gUnknown_08616120[] = {ITEM_FULL_HEAL, ITEM_NONE}; static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL};
// code // code
void sub_81B99B4(void) void sub_81B99B4(void)
@ -128,7 +132,7 @@ void sub_81B9ABC(void)
void sub_81B9B00(void) void sub_81B9B00(void)
{ {
gSaveBlock2Ptr->frontier.field_E6A = gUnknown_086160D4[Random() % 1]; gSaveBlock2Ptr->frontier.field_E6A = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)];
} }
void sub_81B9B28(void) void sub_81B9B28(void)
@ -178,7 +182,7 @@ void sub_81B9C2C(void)
void sub_81B9C70(void) void sub_81B9C70(void)
{ {
gSaveBlock2Ptr->frontier.field_E6C = gUnknown_086160F4[Random() % 1]; gSaveBlock2Ptr->frontier.field_E6C = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)];
} }
void sub_81B9C98(void) void sub_81B9C98(void)
@ -233,7 +237,7 @@ void sub_81B9DB4(void)
void sub_81B9DF8(void) void sub_81B9DF8(void)
{ {
gSaveBlock2Ptr->frontier.field_E6E = gUnknown_08616120[Random() % 1]; gSaveBlock2Ptr->frontier.field_E6E = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)];
} }
void sub_81B9E20(void) void sub_81B9E20(void)
@ -266,3 +270,70 @@ bool8 sub_81B9E94(void)
return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY
&& ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386))); && ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386)));
} }
// This function was written very...oddly.
/*
void sub_81B9EC0(void)
{
s32 i, j;
u16 currMonId, currSpecies;
u16 species[PARTY_SIZE];
u16 monIds[PARTY_SIZE];
u16 heldItems[PARTY_SIZE];
s32 var;
gFacilityTrainers = gSlateportBattleTentTrainers;
for (i = 0; i < PARTY_SIZE; i++)
{
species[i] = 0;
monIds[i] = 0;
heldItems[i] = 0;
}
gFacilityTrainerMons = gSlateportBattleTentMons;
currSpecies = 0;
i = 0;
while (i != PARTY_SIZE)
{
// Cannot have two pokemon of the same species.
currMonId = Random() % 70;
j = 0;
var = 0 + i;
while (j < var && monIds[j] != currMonId)
{
if (species[j] == gFacilityTrainerMons[currMonId].species)
{
if (currSpecies == 0)
currSpecies = gFacilityTrainerMons[currMonId].species;
else
break;
}
j++;
}
if (j != var)
continue;
// Cannot have two same held items.
for (j = 0; j < var; j++)
{
if (heldItems[j] == 0)
continue;
if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId])
{
if (gFacilityTrainerMons[currMonId].species == currSpecies)
currSpecies = 0;
else
break;
}
}
if (j != var)
continue;
gSaveBlock2Ptr->frontier.field_E70[var].monId = currMonId;
species[var] = gFacilityTrainerMons[currMonId].species;
heldItems[var] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId];
monIds[var] = currMonId;
i++;
}
}
*/

View File

@ -2188,13 +2188,13 @@ void sub_8139F20(void)
} }
break; break;
case 6: case 6:
if (gSaveBlock2Ptr->frontier.field_DC8[0] >= gSaveBlock2Ptr->frontier.field_DC8[1]) if (gSaveBlock2Ptr->frontier.field_DC8[0][0] >= gSaveBlock2Ptr->frontier.field_DC8[0][1])
{ {
unk = gSaveBlock2Ptr->frontier.field_DC8[0]; unk = gSaveBlock2Ptr->frontier.field_DC8[0][0];
} }
else else
{ {
unk = gSaveBlock2Ptr->frontier.field_DC8[1]; unk = gSaveBlock2Ptr->frontier.field_DC8[0][1];
} }
break; break;
case 7: case 7:

View File

@ -81,8 +81,7 @@ extern void set_unknown_box_id(u8);
extern void sub_803FA70(u8 battlerId); extern void sub_803FA70(u8 battlerId);
extern u8 sav1_map_get_name(void); extern u8 sav1_map_get_name(void);
extern const u8 *sub_81A1650(u8, u8 language); extern const u8 *sub_81A1650(u8, u8 language);
extern u8 BattleFrontierGetOpponentLvl(u8); extern u8 GetFrontierEnemyMonLevel(u8);
extern u16 FacilityClassToPicIndex(u16);
extern bool8 InBattlePyramid(void); extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void); extern bool8 InBattlePike(void);
extern bool8 sub_806F104(void); extern bool8 sub_806F104(void);
@ -956,7 +955,7 @@ const u16 gHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using Nationa
NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN
NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP
NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP
NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA
NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA
NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON
@ -2821,7 +2820,7 @@ void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lv
u8 value; u8 value;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50)
level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.lvlMode); level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode);
else if (lvl50) else if (lvl50)
level = 50; level = 50;
else else
@ -2885,7 +2884,7 @@ void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u
CreateMon(mon, CreateMon(mon,
src->mons[monId].species, src->mons[monId].species,
BattleFrontierGetOpponentLvl(src->field_0_1 - 1), GetFrontierEnemyMonLevel(src->field_0_1 - 1),
0x1F, 0x1F,
TRUE, TRUE,
personality, personality,

View File

@ -4,6 +4,7 @@
#include "text.h" #include "text.h"
#include "sound.h" #include "sound.h"
ALIGNED(4)
static const u8 sUnknown_08616124[] = {1, 2, 4}; static const u8 sUnknown_08616124[] = {1, 2, 4};
static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont"); static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont");