mirror of
https://github.com/pret/pmd-red.git
synced 2025-03-01 17:46:51 +00:00
Merge pull request #286 from SethBarberee/dec_2024
Some checks are pending
GithubCI / build (push) Waiting to run
Some checks are pending
GithubCI / build (push) Waiting to run
Pokemon.s
This commit is contained in:
commit
47339753e1
554
asm/code_2.s
554
asm/code_2.s
@ -1059,556 +1059,4 @@ _08000EC6:
|
||||
bx r1
|
||||
thumb_func_end sub_80009D0
|
||||
|
||||
thumb_func_start SaveLoadRelated_8000EDC
|
||||
SaveLoadRelated_8000EDC:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x8
|
||||
adds r4, r0, 0
|
||||
movs r5, 0x1
|
||||
ldr r0, _08000F24
|
||||
str r5, [r0]
|
||||
movs r0, 0x3
|
||||
bl sub_800A8F8
|
||||
bl sub_8014144
|
||||
add r1, sp, 0x4
|
||||
mov r0, sp
|
||||
bl sub_8043D50
|
||||
ldr r0, [sp]
|
||||
movs r1, 0x7
|
||||
bl MemoryAlloc
|
||||
str r0, [r4, 0x74]
|
||||
ldr r0, [sp, 0x4]
|
||||
movs r1, 0x7
|
||||
bl MemoryAlloc
|
||||
str r0, [r4, 0x78]
|
||||
ldrb r0, [r4, 0x8]
|
||||
cmp r0, 0
|
||||
beq _08000F68
|
||||
ldr r0, [r4, 0x74]
|
||||
ldr r1, [sp]
|
||||
bl PrepareQuickSaveRead
|
||||
adds r7, r4, 0
|
||||
adds r7, 0x7C
|
||||
b _08000F2E
|
||||
.align 2, 0
|
||||
_08000F24: .4byte gUnknown_203B03C
|
||||
_08000F28:
|
||||
movs r0, 0
|
||||
bl xxx_update_stuff
|
||||
_08000F2E:
|
||||
bl ReadQuickSave
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08000F28
|
||||
bl IsQuickSaveValid
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
bl FinishQuickSaveRead
|
||||
bl sub_8011830
|
||||
cmp r5, 0
|
||||
beq _08000F58
|
||||
ldr r0, _08000F54
|
||||
bl sub_80121E0
|
||||
b _08000F5E
|
||||
.align 2, 0
|
||||
_08000F54: .4byte 0x000f1208
|
||||
_08000F58:
|
||||
ldr r0, _08000F64
|
||||
bl sub_80121E0
|
||||
_08000F5E:
|
||||
bl xxx_call_start_bg_music
|
||||
b _08000F78
|
||||
.align 2, 0
|
||||
_08000F64: .4byte 0x000f1209
|
||||
_08000F68:
|
||||
bl GeneratePelipperJobs
|
||||
bl sub_80961B4
|
||||
bl sub_808ED00
|
||||
adds r7, r4, 0
|
||||
adds r7, 0x7C
|
||||
_08000F78:
|
||||
cmp r5, 0
|
||||
beq _08000F92
|
||||
adds r0, r4, 0
|
||||
bl xxx_dungeon_8001340
|
||||
bl sub_8099648
|
||||
bl SetWindowBGColor
|
||||
movs r0, 0
|
||||
bl sub_8099690
|
||||
b _08000F96
|
||||
_08000F92:
|
||||
movs r0, 0x5
|
||||
strh r0, [r7]
|
||||
_08000F96:
|
||||
adds r5, r7, 0
|
||||
movs r1, 0
|
||||
ldrsh r0, [r5, r1]
|
||||
movs r6, 0x2
|
||||
negs r6, r6
|
||||
cmp r0, r6
|
||||
bne _08000FAC
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x84
|
||||
bl sub_809542C
|
||||
_08000FAC:
|
||||
movs r1, 0
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, 0x3
|
||||
beq _08000FB8
|
||||
cmp r0, r6
|
||||
bne _0800100C
|
||||
_08000FB8:
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x80
|
||||
bl SetDungeonLocationInfo
|
||||
bl xxx_call_stop_bgm
|
||||
movs r1, 0
|
||||
ldrsh r0, [r7, r1]
|
||||
cmp r0, r6
|
||||
bne _08000FD8
|
||||
ldr r0, [r4, 0x74]
|
||||
ldr r1, [sp]
|
||||
movs r2, 0x1
|
||||
bl PrepareQuickSaveWrite
|
||||
b _08000FFA
|
||||
_08000FD8:
|
||||
ldr r0, [r4, 0x74]
|
||||
ldr r1, [sp]
|
||||
movs r2, 0
|
||||
bl PrepareQuickSaveWrite
|
||||
b _08000FFA
|
||||
_08000FE4:
|
||||
cmp r0, 0x1
|
||||
bne _08000FF4
|
||||
ldr r0, [r4, 0x78]
|
||||
bl MemoryFree
|
||||
ldr r0, [r4, 0x74]
|
||||
bl MemoryFree
|
||||
_08000FF4:
|
||||
movs r0, 0
|
||||
bl xxx_update_stuff
|
||||
_08000FFA:
|
||||
bl WriteQuickSave
|
||||
cmp r0, 0x2
|
||||
beq _08001006
|
||||
cmp r0, 0x3
|
||||
bne _08000FE4
|
||||
_08001006:
|
||||
bl FinishQuickSaveWrite
|
||||
b _0800101C
|
||||
_0800100C:
|
||||
bl sub_808ED00
|
||||
ldr r0, [r4, 0x78]
|
||||
bl MemoryFree
|
||||
ldr r0, [r4, 0x74]
|
||||
bl MemoryFree
|
||||
_0800101C:
|
||||
add sp, 0x8
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end SaveLoadRelated_8000EDC
|
||||
|
||||
thumb_func_start sub_8001024
|
||||
sub_8001024:
|
||||
push {r4,lr}
|
||||
ldr r1, _08001040
|
||||
ldm r1!, {r2-r4}
|
||||
stm r0!, {r2-r4}
|
||||
ldm r1!, {r2-r4}
|
||||
stm r0!, {r2-r4}
|
||||
ldm r1!, {r2-r4}
|
||||
stm r0!, {r2-r4}
|
||||
ldm r1!, {r2-r4}
|
||||
stm r0!, {r2-r4}
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08001040: .4byte gPersonalityRelated_203B040
|
||||
thumb_func_end sub_8001024
|
||||
|
||||
thumb_func_start sub_8001044
|
||||
sub_8001044:
|
||||
push {r4,lr}
|
||||
ldr r1, _08001060
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
ldm r0!, {r2-r4}
|
||||
stm r1!, {r2-r4}
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08001060: .4byte gPersonalityRelated_203B040
|
||||
thumb_func_end sub_8001044
|
||||
|
||||
thumb_func_start sub_8001064
|
||||
sub_8001064:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x28
|
||||
bl GetPlayerPokemonStruct
|
||||
cmp r0, 0
|
||||
bne _080010AE
|
||||
ldr r5, _0800109C
|
||||
ldrb r0, [r5, 0x8]
|
||||
cmp r0, 0
|
||||
bne _080010A0
|
||||
add r4, sp, 0x14
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r5, r0]
|
||||
adds r0, r4, 0
|
||||
bl CopyMonsterNameToBuffer
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl CopyStringtoBuffer
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r5, r1]
|
||||
movs r1, 0x1
|
||||
mov r2, sp
|
||||
bl sub_808CE74
|
||||
b _080010AE
|
||||
.align 2, 0
|
||||
_0800109C: .4byte gPersonalityRelated_203B040
|
||||
_080010A0:
|
||||
movs r4, 0x4
|
||||
ldrsh r0, [r5, r4]
|
||||
adds r2, r5, 0
|
||||
adds r2, 0x8
|
||||
movs r1, 0x1
|
||||
bl sub_808CE74
|
||||
_080010AE:
|
||||
bl sub_808D378
|
||||
cmp r0, 0
|
||||
bne _080010F2
|
||||
ldr r5, _080010E0
|
||||
ldrb r0, [r5, 0x1C]
|
||||
cmp r0, 0
|
||||
bne _080010E4
|
||||
add r4, sp, 0x14
|
||||
movs r0, 0x6
|
||||
ldrsh r1, [r5, r0]
|
||||
adds r0, r4, 0
|
||||
bl CopyMonsterNameToBuffer
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl CopyStringtoBuffer
|
||||
movs r1, 0x6
|
||||
ldrsh r0, [r5, r1]
|
||||
movs r1, 0
|
||||
mov r2, sp
|
||||
bl sub_808CE74
|
||||
b _080010F2
|
||||
.align 2, 0
|
||||
_080010E0: .4byte gPersonalityRelated_203B040
|
||||
_080010E4:
|
||||
movs r4, 0x6
|
||||
ldrsh r0, [r5, r4]
|
||||
adds r2, r5, 0
|
||||
adds r2, 0x1C
|
||||
movs r1, 0
|
||||
bl sub_808CE74
|
||||
_080010F2:
|
||||
ldr r3, _08001164
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r3, r0]
|
||||
cmp r1, 0
|
||||
beq _08001126
|
||||
ldr r2, _08001168
|
||||
movs r4, 0x4
|
||||
ldrsh r0, [r2, r4]
|
||||
cmp r0, 0
|
||||
beq _0800111C
|
||||
cmp r1, r0
|
||||
beq _0800111C
|
||||
_0800110A:
|
||||
adds r2, 0x8
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r2, r0]
|
||||
cmp r1, 0
|
||||
beq _0800111C
|
||||
movs r4, 0x4
|
||||
ldrsh r0, [r3, r4]
|
||||
cmp r0, r1
|
||||
bne _0800110A
|
||||
_0800111C:
|
||||
ldr r2, [r2]
|
||||
movs r0, 0
|
||||
movs r1, 0x27
|
||||
bl SetScriptVarValue
|
||||
_08001126:
|
||||
ldr r3, _08001164
|
||||
movs r0, 0x6
|
||||
ldrsh r1, [r3, r0]
|
||||
cmp r1, 0
|
||||
beq _0800115A
|
||||
ldr r2, _0800116C
|
||||
movs r4, 0x4
|
||||
ldrsh r0, [r2, r4]
|
||||
cmp r0, 0
|
||||
beq _08001150
|
||||
cmp r1, r0
|
||||
beq _08001150
|
||||
_0800113E:
|
||||
adds r2, 0x8
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r2, r0]
|
||||
cmp r1, 0
|
||||
beq _08001150
|
||||
movs r4, 0x6
|
||||
ldrsh r0, [r3, r4]
|
||||
cmp r0, r1
|
||||
bne _0800113E
|
||||
_08001150:
|
||||
ldr r2, [r2]
|
||||
movs r0, 0
|
||||
movs r1, 0x26
|
||||
bl SetScriptVarValue
|
||||
_0800115A:
|
||||
add sp, 0x28
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08001164: .4byte gPersonalityRelated_203B040
|
||||
_08001168: .4byte gBaseKindTable
|
||||
_0800116C: .4byte gTalkKindTable
|
||||
thumb_func_end sub_8001064
|
||||
|
||||
thumb_func_start sub_8001170
|
||||
sub_8001170:
|
||||
push {r4,lr}
|
||||
sub sp, 0x8
|
||||
add r4, sp, 0x4
|
||||
movs r0, 0x63
|
||||
strb r0, [r4]
|
||||
mov r1, sp
|
||||
adds r1, 0x2
|
||||
mov r0, sp
|
||||
bl sub_80992E0
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08001196
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
bl sub_80A2740
|
||||
b _080011BE
|
||||
_08001196:
|
||||
adds r0, r4, 0
|
||||
bl sub_8099328
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080011C0
|
||||
adds r0, r4, 0
|
||||
bl sub_8099360
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080011C0
|
||||
mov r0, sp
|
||||
adds r0, 0x5
|
||||
bl sub_8099394
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080011C0
|
||||
movs r0, 0x3F
|
||||
_080011BE:
|
||||
strb r0, [r4]
|
||||
_080011C0:
|
||||
ldrb r0, [r4]
|
||||
add sp, 0x8
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8001170
|
||||
|
||||
thumb_func_start sub_80011CC
|
||||
sub_80011CC:
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
movs r5, 0
|
||||
strb r1, [r4]
|
||||
strb r5, [r4, 0x1]
|
||||
bl sub_80011E8
|
||||
strb r5, [r4, 0xB]
|
||||
strb r5, [r4, 0x4]
|
||||
strb r5, [r4, 0xC]
|
||||
strb r5, [r4, 0xD]
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80011CC
|
||||
|
||||
thumb_func_start sub_80011E8
|
||||
sub_80011E8:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
movs r0, 0x8
|
||||
bl sub_80023E4
|
||||
strb r0, [r4, 0x5]
|
||||
movs r0, 0x3
|
||||
bl sub_80023E4
|
||||
strb r0, [r4, 0x6]
|
||||
movs r0, 0x7
|
||||
bl sub_80023E4
|
||||
strb r0, [r4, 0x8]
|
||||
movs r0, 0
|
||||
bl sub_80023E4
|
||||
strb r0, [r4, 0x9]
|
||||
movs r0, 0x5
|
||||
bl sub_80023E4
|
||||
strb r0, [r4, 0xA]
|
||||
movs r0, 0x18
|
||||
bl sub_80023E4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800123C
|
||||
movs r0, 0x19
|
||||
bl sub_80023E4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800123C
|
||||
movs r0, 0x1A
|
||||
bl sub_80023E4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0800123C
|
||||
movs r0, 0x1
|
||||
b _0800123E
|
||||
_0800123C:
|
||||
movs r0, 0
|
||||
_0800123E:
|
||||
strb r0, [r4, 0x7]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80011E8
|
||||
|
||||
thumb_func_start sub_8001248
|
||||
sub_8001248:
|
||||
push {r4,r5,lr}
|
||||
movs r4, 0
|
||||
movs r5, 0
|
||||
_0800124E:
|
||||
movs r0, 0x64
|
||||
bl RandInt
|
||||
cmp r0, 0x31
|
||||
bgt _08001266
|
||||
lsls r0, r4, 2
|
||||
ldr r1, _080012B8
|
||||
ldr r1, [r1]
|
||||
adds r0, r1
|
||||
strb r5, [r0, 0x2]
|
||||
strb r5, [r0, 0x1]
|
||||
strb r5, [r0]
|
||||
_08001266:
|
||||
adds r4, 0x1
|
||||
cmp r4, 0x13
|
||||
ble _0800124E
|
||||
bl FillInventoryGaps
|
||||
movs r4, 0
|
||||
ldr r5, _080012BC
|
||||
movs r3, 0x1
|
||||
_08001276:
|
||||
movs r0, 0x58
|
||||
adds r1, r4, 0
|
||||
muls r1, r0
|
||||
ldr r0, [r5]
|
||||
adds r1, r0, r1
|
||||
ldrh r2, [r1]
|
||||
adds r0, r3, 0
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _08001298
|
||||
lsrs r0, r2, 1
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _08001298
|
||||
adds r1, 0x28
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
_08001298:
|
||||
adds r4, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _08001276
|
||||
ldr r0, _080012B8
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x98
|
||||
lsls r1, 2
|
||||
adds r0, r1
|
||||
movs r1, 0
|
||||
str r1, [r0]
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080012B8: .4byte gTeamInventoryRef
|
||||
_080012BC: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end sub_8001248
|
||||
|
||||
thumb_func_start sub_80012C0
|
||||
sub_80012C0:
|
||||
push {r4,r5,lr}
|
||||
movs r3, 0
|
||||
ldr r4, _08001324
|
||||
movs r2, 0
|
||||
_080012C8:
|
||||
lsls r1, r3, 2
|
||||
ldr r0, [r4]
|
||||
adds r1, r0
|
||||
strb r2, [r1, 0x2]
|
||||
strb r2, [r1, 0x1]
|
||||
strb r2, [r1]
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x13
|
||||
ble _080012C8
|
||||
bl FillInventoryGaps
|
||||
movs r3, 0
|
||||
ldr r5, _08001328
|
||||
movs r4, 0x1
|
||||
_080012E4:
|
||||
movs r0, 0x58
|
||||
adds r1, r3, 0
|
||||
muls r1, r0
|
||||
ldr r0, [r5]
|
||||
adds r1, r0, r1
|
||||
ldrh r2, [r1]
|
||||
adds r0, r4, 0
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _08001306
|
||||
lsrs r0, r2, 1
|
||||
ands r0, r4
|
||||
cmp r0, 0
|
||||
beq _08001306
|
||||
adds r1, 0x28
|
||||
movs r0, 0
|
||||
strb r0, [r1]
|
||||
_08001306:
|
||||
adds r3, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r3, r0
|
||||
ble _080012E4
|
||||
ldr r0, _08001324
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x98
|
||||
lsls r1, 2
|
||||
adds r0, r1
|
||||
movs r1, 0
|
||||
str r1, [r0]
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08001324: .4byte gTeamInventoryRef
|
||||
_08001328: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end sub_80012C0
|
||||
|
||||
.align 2,0
|
||||
.align 2,0
|
||||
|
662
asm/pokemon.s
662
asm/pokemon.s
@ -1,662 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_808D1DC
|
||||
sub_808D1DC:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
mov r8, r0
|
||||
movs r2, 0x8
|
||||
ldrsh r1, [r0, r2]
|
||||
ldr r0, _0808D204
|
||||
ldr r2, [r0]
|
||||
lsls r0, r1, 3
|
||||
adds r0, r1
|
||||
lsls r0, 3
|
||||
adds r0, r2
|
||||
ldrb r6, [r0, 0x16]
|
||||
ldr r0, _0808D208
|
||||
ldr r0, [r0]
|
||||
adds r0, r6
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0808D238
|
||||
b _0808D268
|
||||
.align 2, 0
|
||||
_0808D204: .4byte gMonsterParameters
|
||||
_0808D208: .4byte gFriendAreas
|
||||
_0808D20C:
|
||||
ldr r0, [r7]
|
||||
adds r0, r5
|
||||
mov r1, r8
|
||||
movs r2, 0x58
|
||||
bl memcpy
|
||||
ldr r1, [r7]
|
||||
adds r1, r5
|
||||
ldrh r2, [r1]
|
||||
ldr r0, _0808D234
|
||||
ands r0, r2
|
||||
strh r0, [r1]
|
||||
mov r1, r8
|
||||
movs r2, 0x8
|
||||
ldrsh r0, [r1, r2]
|
||||
bl sub_80980B4
|
||||
ldr r0, [r7]
|
||||
adds r0, r5
|
||||
b _0808D26A
|
||||
.align 2, 0
|
||||
_0808D234: .4byte 0x0000bfff
|
||||
_0808D238:
|
||||
movs r4, 0
|
||||
ldr r7, _0808D274
|
||||
_0808D23C:
|
||||
movs r0, 0x58
|
||||
adds r5, r4, 0
|
||||
muls r5, r0
|
||||
ldr r0, [r7]
|
||||
adds r0, r5, r0
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0808D25E
|
||||
adds r0, r4, 0
|
||||
bl sub_80923D4
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, r6
|
||||
beq _0808D20C
|
||||
_0808D25E:
|
||||
adds r4, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D23C
|
||||
_0808D268:
|
||||
movs r0, 0
|
||||
_0808D26A:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D274: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end sub_808D1DC
|
||||
|
||||
thumb_func_start sub_808D278
|
||||
sub_808D278:
|
||||
push {r4-r7,lr}
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
ldr r1, _0808D29C
|
||||
ldr r2, [r1]
|
||||
lsls r1, r0, 3
|
||||
adds r1, r0
|
||||
lsls r1, 3
|
||||
adds r1, r2
|
||||
ldrb r6, [r1, 0x16]
|
||||
ldr r0, _0808D2A0
|
||||
ldr r0, [r0]
|
||||
adds r0, r6
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _0808D2AA
|
||||
b _0808D2DA
|
||||
.align 2, 0
|
||||
_0808D29C: .4byte gMonsterParameters
|
||||
_0808D2A0: .4byte gFriendAreas
|
||||
_0808D2A4:
|
||||
ldr r0, [r7]
|
||||
adds r0, r5
|
||||
b _0808D2DC
|
||||
_0808D2AA:
|
||||
movs r4, 0
|
||||
ldr r7, _0808D2E4
|
||||
_0808D2AE:
|
||||
movs r0, 0x58
|
||||
adds r5, r4, 0
|
||||
muls r5, r0
|
||||
ldr r0, [r7]
|
||||
adds r0, r5, r0
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0808D2D0
|
||||
adds r0, r4, 0
|
||||
bl sub_80923D4
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, r6
|
||||
beq _0808D2A4
|
||||
_0808D2D0:
|
||||
adds r4, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D2AE
|
||||
_0808D2DA:
|
||||
movs r0, 0
|
||||
_0808D2DC:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D2E4: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end sub_808D278
|
||||
|
||||
thumb_func_start sub_808D2E8
|
||||
sub_808D2E8:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x60
|
||||
adds r4, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r5, r2, 0
|
||||
ldr r0, [sp, 0x70]
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
lsls r5, 24
|
||||
lsrs r5, 24
|
||||
str r3, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
add r0, sp, 0x8
|
||||
adds r1, r4, 0
|
||||
adds r2, r6, 0
|
||||
adds r3, r5, 0
|
||||
bl sub_808CFD0
|
||||
add r0, sp, 0x8
|
||||
bl sub_808D1DC
|
||||
add sp, 0x60
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D2E8
|
||||
|
||||
thumb_func_start sub_808D31C
|
||||
sub_808D31C:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808D338
|
||||
movs r2, 0
|
||||
ldrb r0, [r1, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D330
|
||||
movs r2, 0x1
|
||||
_0808D330:
|
||||
adds r0, r2, 0
|
||||
cmp r0, 0
|
||||
bne _0808D338
|
||||
strh r0, [r1]
|
||||
_0808D338:
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_808D31C
|
||||
|
||||
thumb_func_start GetPlayerPokemonStruct
|
||||
GetPlayerPokemonStruct:
|
||||
push {r4,lr}
|
||||
movs r3, 0
|
||||
ldr r0, _0808D360
|
||||
ldr r4, [r0]
|
||||
_0808D344:
|
||||
movs r0, 0x58
|
||||
muls r0, r3
|
||||
adds r2, r0, r4
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D364
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
beq _0808D364
|
||||
adds r0, r2, 0
|
||||
b _0808D370
|
||||
.align 2, 0
|
||||
_0808D360: .4byte gRecruitedPokemonRef
|
||||
_0808D364:
|
||||
adds r3, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r3, r0
|
||||
ble _0808D344
|
||||
movs r0, 0
|
||||
_0808D370:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetPlayerPokemonStruct
|
||||
|
||||
thumb_func_start sub_808D378
|
||||
sub_808D378:
|
||||
push {r4,lr}
|
||||
movs r3, 0
|
||||
ldr r0, _0808D3A4
|
||||
ldr r4, [r0]
|
||||
_0808D380:
|
||||
movs r0, 0x58
|
||||
muls r0, r3
|
||||
adds r2, r0, r4
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D3A8
|
||||
movs r1, 0
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D39A
|
||||
movs r1, 0x1
|
||||
_0808D39A:
|
||||
cmp r1, 0
|
||||
beq _0808D3A8
|
||||
adds r0, r2, 0
|
||||
b _0808D3B4
|
||||
.align 2, 0
|
||||
_0808D3A4: .4byte gRecruitedPokemonRef
|
||||
_0808D3A8:
|
||||
adds r3, 0x1
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r3, r0
|
||||
ble _0808D380
|
||||
movs r0, 0
|
||||
_0808D3B4:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D378
|
||||
|
||||
thumb_func_start sub_808D3BC
|
||||
sub_808D3BC:
|
||||
push {r4-r6,lr}
|
||||
movs r4, 0
|
||||
ldr r0, _0808D3E0
|
||||
ldr r2, [r0]
|
||||
adds r3, r2, 0
|
||||
movs r6, 0x1
|
||||
movs r5, 0xCE
|
||||
lsls r5, 1
|
||||
_0808D3CC:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r6, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D3E4
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x40
|
||||
bne _0808D3E4
|
||||
adds r0, r3, 0
|
||||
b _0808D3F0
|
||||
.align 2, 0
|
||||
_0808D3E0: .4byte gRecruitedPokemonRef
|
||||
_0808D3E4:
|
||||
adds r2, 0x58
|
||||
adds r3, 0x58
|
||||
adds r4, 0x1
|
||||
cmp r4, r5
|
||||
ble _0808D3CC
|
||||
movs r0, 0
|
||||
_0808D3F0:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D3BC
|
||||
|
||||
thumb_func_start sub_808D3F8
|
||||
sub_808D3F8:
|
||||
push {r4-r6,lr}
|
||||
movs r4, 0
|
||||
ldr r0, _0808D41C
|
||||
ldr r2, [r0]
|
||||
adds r3, r2, 0
|
||||
movs r6, 0x1
|
||||
movs r5, 0xCE
|
||||
lsls r5, 1
|
||||
_0808D408:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r6, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D420
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D420
|
||||
adds r0, r3, 0
|
||||
b _0808D42C
|
||||
.align 2, 0
|
||||
_0808D41C: .4byte gRecruitedPokemonRef
|
||||
_0808D420:
|
||||
adds r2, 0x58
|
||||
adds r3, 0x58
|
||||
adds r4, 0x1
|
||||
cmp r4, r5
|
||||
ble _0808D408
|
||||
movs r0, 0
|
||||
_0808D42C:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D3F8
|
||||
|
||||
thumb_func_start sub_808D434
|
||||
sub_808D434:
|
||||
push {r4-r7,lr}
|
||||
adds r6, r1, 0
|
||||
lsls r0, 16
|
||||
asrs r5, r0, 16
|
||||
ldr r0, _0808D468
|
||||
ldr r2, [r0]
|
||||
movs r4, 0
|
||||
movs r3, 0
|
||||
movs r0, 0x1
|
||||
mov r12, r0
|
||||
movs r7, 0xCE
|
||||
lsls r7, 1
|
||||
_0808D44C:
|
||||
ldrb r1, [r2]
|
||||
mov r0, r12
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D46E
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r2, r1]
|
||||
cmp r0, r5
|
||||
bne _0808D46E
|
||||
cmp r4, r6
|
||||
bne _0808D46C
|
||||
adds r0, r2, 0
|
||||
b _0808D478
|
||||
.align 2, 0
|
||||
_0808D468: .4byte gRecruitedPokemonRef
|
||||
_0808D46C:
|
||||
adds r4, 0x1
|
||||
_0808D46E:
|
||||
adds r3, 0x1
|
||||
adds r2, 0x58
|
||||
cmp r3, r7
|
||||
ble _0808D44C
|
||||
movs r0, 0
|
||||
_0808D478:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D434
|
||||
|
||||
thumb_func_start GetFriendSum_808D480
|
||||
GetFriendSum_808D480:
|
||||
push {r4,r5,lr}
|
||||
ldr r0, _0808D4A8
|
||||
ldr r2, [r0]
|
||||
movs r4, 0
|
||||
movs r5, 0x1
|
||||
ldr r3, _0808D4AC
|
||||
_0808D48C:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r5, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D498
|
||||
adds r4, 0x1
|
||||
_0808D498:
|
||||
subs r3, 0x1
|
||||
adds r2, 0x58
|
||||
cmp r3, 0
|
||||
bne _0808D48C
|
||||
adds r0, r4, 0
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D4A8: .4byte gRecruitedPokemonRef
|
||||
_0808D4AC: .4byte 0x0000019d
|
||||
thumb_func_end GetFriendSum_808D480
|
||||
|
||||
thumb_func_start sub_808D4B0
|
||||
sub_808D4B0:
|
||||
push {r4-r6,lr}
|
||||
ldr r0, _0808D4F8
|
||||
ldr r2, [r0]
|
||||
movs r5, 0
|
||||
movs r4, 0
|
||||
ldr r6, _0808D4FC
|
||||
_0808D4BC:
|
||||
ldrh r3, [r2]
|
||||
lsrs r0, r3, 1
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D4E4
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808D4E4
|
||||
movs r1, 0
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D4D8
|
||||
movs r1, 0x1
|
||||
_0808D4D8:
|
||||
cmp r1, 0
|
||||
bne _0808D4E4
|
||||
movs r5, 0x1
|
||||
adds r0, r6, 0
|
||||
ands r0, r3
|
||||
strh r0, [r2]
|
||||
_0808D4E4:
|
||||
adds r4, 0x1
|
||||
adds r2, 0x58
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D4BC
|
||||
adds r0, r5, 0
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D4F8: .4byte gRecruitedPokemonRef
|
||||
_0808D4FC: .4byte 0x0000fffd
|
||||
thumb_func_end sub_808D4B0
|
||||
|
||||
thumb_func_start sub_808D500
|
||||
sub_808D500:
|
||||
push {r4-r6,lr}
|
||||
ldr r0, _0808D53C
|
||||
ldr r2, [r0]
|
||||
movs r5, 0
|
||||
movs r4, 0
|
||||
ldr r6, _0808D540
|
||||
_0808D50C:
|
||||
ldrh r3, [r2]
|
||||
lsrs r0, r3, 1
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D526
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808D526
|
||||
movs r5, 0x1
|
||||
adds r0, r6, 0
|
||||
ands r0, r3
|
||||
strh r0, [r2]
|
||||
_0808D526:
|
||||
adds r4, 0x1
|
||||
adds r2, 0x58
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D50C
|
||||
adds r0, r5, 0
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D53C: .4byte gRecruitedPokemonRef
|
||||
_0808D540: .4byte 0x0000fffd
|
||||
thumb_func_end sub_808D500
|
||||
|
||||
thumb_func_start GetUnitSum_808D544
|
||||
GetUnitSum_808D544:
|
||||
push {r4-r7,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r0, _0808D57C
|
||||
ldr r3, [r0]
|
||||
movs r5, 0
|
||||
movs r2, 0
|
||||
movs r7, 0x1
|
||||
movs r6, 0xCE
|
||||
lsls r6, 1
|
||||
adds r1, r4, 0
|
||||
_0808D558:
|
||||
ldrh r0, [r3]
|
||||
lsrs r0, 1
|
||||
ands r0, r7
|
||||
cmp r0, 0
|
||||
beq _0808D56C
|
||||
cmp r4, 0
|
||||
beq _0808D568
|
||||
str r2, [r1]
|
||||
_0808D568:
|
||||
adds r1, 0x4
|
||||
adds r5, 0x1
|
||||
_0808D56C:
|
||||
adds r2, 0x1
|
||||
adds r3, 0x58
|
||||
cmp r2, r6
|
||||
ble _0808D558
|
||||
adds r0, r5, 0
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0808D57C: .4byte gRecruitedPokemonRef
|
||||
thumb_func_end GetUnitSum_808D544
|
||||
|
||||
thumb_func_start sub_808D580
|
||||
sub_808D580:
|
||||
push {r4-r7,lr}
|
||||
adds r6, r0, 0
|
||||
ldr r0, _0808D5AC
|
||||
ldr r2, [r0]
|
||||
movs r5, 0
|
||||
movs r4, 0
|
||||
mov r12, r0
|
||||
adds r3, r6, 0
|
||||
_0808D590:
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
beq _0808D5B0
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D5B0
|
||||
cmp r6, 0
|
||||
beq _0808D5B0
|
||||
str r4, [r3]
|
||||
adds r5, 0x1
|
||||
b _0808D5BC
|
||||
.align 2, 0
|
||||
_0808D5AC: .4byte gRecruitedPokemonRef
|
||||
_0808D5B0:
|
||||
adds r4, 0x1
|
||||
adds r2, 0x58
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D590
|
||||
_0808D5BC:
|
||||
mov r0, r12
|
||||
ldr r2, [r0]
|
||||
movs r4, 0
|
||||
lsls r0, r5, 2
|
||||
adds r7, r0, r6
|
||||
_0808D5C6:
|
||||
movs r1, 0
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D5D0
|
||||
movs r1, 0x1
|
||||
_0808D5D0:
|
||||
cmp r1, 0
|
||||
beq _0808D5F8
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808D5F8
|
||||
ldrh r1, [r2]
|
||||
lsrs r0, r1, 1
|
||||
movs r3, 0x1
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _0808D5F8
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D5F8
|
||||
cmp r6, 0
|
||||
beq _0808D5F8
|
||||
str r4, [r7]
|
||||
adds r5, 0x1
|
||||
b _0808D604
|
||||
_0808D5F8:
|
||||
adds r4, 0x1
|
||||
adds r2, 0x58
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D5C6
|
||||
_0808D604:
|
||||
mov r0, r12
|
||||
ldr r2, [r0]
|
||||
movs r4, 0
|
||||
movs r3, 0x1
|
||||
lsls r0, r5, 2
|
||||
adds r7, r0, r6
|
||||
_0808D610:
|
||||
ldrh r1, [r2]
|
||||
lsrs r0, r1, 1
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _0808D63E
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0808D63E
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0
|
||||
bne _0808D63E
|
||||
movs r1, 0
|
||||
ldrb r0, [r2, 0x4]
|
||||
cmp r0, 0x41
|
||||
bne _0808D632
|
||||
movs r1, 0x1
|
||||
_0808D632:
|
||||
cmp r1, 0
|
||||
bne _0808D63E
|
||||
cmp r6, 0
|
||||
beq _0808D63E
|
||||
stm r7!, {r4}
|
||||
adds r5, 0x1
|
||||
_0808D63E:
|
||||
adds r4, 0x1
|
||||
adds r2, 0x58
|
||||
movs r0, 0xCE
|
||||
lsls r0, 1
|
||||
cmp r4, r0
|
||||
ble _0808D610
|
||||
adds r0, r5, 0
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_808D580
|
||||
|
||||
.align 2,0
|
1093
asm/pokemon_3.s
1093
asm/pokemon_3.s
File diff suppressed because it is too large
Load Diff
@ -3,61 +3,9 @@
|
||||
@ START code_80130A8
|
||||
|
||||
|
||||
.global gUnknown_80D48A0
|
||||
gUnknown_80D48A0: @ 80D48A0
|
||||
.byte 0x07, 0x00, 0x00, 0x00
|
||||
.byte 0x02, 0x00, 0x00, 0x00
|
||||
.byte 0x02, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80D48AC
|
||||
gUnknown_80D48AC: @ 80D48AC
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x03, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80D48C4
|
||||
gUnknown_80D48C4: @ 80D48C4
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x02, 0x00, 0x0f, 0x00
|
||||
.byte 0x1a, 0x00, 0x05, 0x00
|
||||
.byte 0x07, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80D48DC
|
||||
gUnknown_80D48DC: @ 80D48DC
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x02, 0x00, 0x00, 0x00
|
||||
.byte 0x02, 0x00, 0x08, 0x00
|
||||
.byte 0x1a, 0x00, 0x05, 0x00
|
||||
.byte 0x07, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.global gSpeakerNameSeparator
|
||||
gSpeakerNameSeparator: @ 80D48F4
|
||||
.byte 0x3A, 0x20, 0x00, 0x00 @ maybe just a colon and space
|
||||
|
||||
.global gUnknown_80D48F8
|
||||
gUnknown_80D48F8: @ 80D48F8
|
||||
.string "????\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_80D4900
|
||||
gUnknown_80D4900: @ 80D4900
|
||||
.string "%d\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_80D4904
|
||||
gUnknown_80D4904: @ 80D4904
|
||||
.string "%*d\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_80D4908
|
||||
gUnknown_80D4908: @ 80D4908
|
||||
.string "%0*d\0"
|
||||
.asciz "%0*d"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_80D4910
|
||||
|
1371
data/data_8107224.s
1371
data/data_8107224.s
File diff suppressed because it is too large
Load Diff
1345
data/data_81076E4.s
Normal file
1345
data/data_81076E4.s
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,23 +0,0 @@
|
||||
.section .rodata
|
||||
|
||||
@ ???
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
@ ???
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
@ ???
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
@ ???
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_8109984
|
||||
gUnknown_8109984: @ 8109984
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x00
|
||||
|
||||
@ ???
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
|
@ -1,8 +1,9 @@
|
||||
#ifndef GUARD_CODE_2_H
|
||||
#define GUARD_CODE_2_H
|
||||
|
||||
// code_2.s
|
||||
extern void sub_8001024(u32 *);
|
||||
extern void sub_8001044(u32 *);
|
||||
#include "personality_test1.h"
|
||||
|
||||
#endif // GUARD_CODE_2_H
|
||||
void sub_8001024(struct PersonalityRelated *);
|
||||
void sub_8001044(struct PersonalityRelated *);
|
||||
|
||||
#endif // GUARD_CODE_2_H
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "structs/menu.h"
|
||||
|
||||
#include "structs/str_text.h"
|
||||
#include "pokemon_3.h"
|
||||
|
||||
struct unkStruct_203B2AC
|
||||
{
|
||||
@ -11,8 +12,7 @@ struct unkStruct_203B2AC
|
||||
u32 unk34[3];
|
||||
u8 unk40[0x48 - 0x40];
|
||||
s16 speciesNum;
|
||||
u32 unk4C;
|
||||
u8 unk50[0xB0 - 0x50];
|
||||
struct unkStruct_808FF20 unk4C;
|
||||
u32 unkB0;
|
||||
u8 fillB4[0xE0 - 0xB4];
|
||||
u32 unkE0;
|
||||
|
@ -14,14 +14,19 @@ typedef struct PersonalityQuestion
|
||||
/* 0x8 */ const PersonalityEffects *effects;
|
||||
} PersonalityQuestion;
|
||||
|
||||
struct PersonalityRelated
|
||||
{
|
||||
u32 unk4;
|
||||
s16 StarterID;
|
||||
s16 PartnerID;
|
||||
u8 StarterName[0x14];
|
||||
u8 PartnerNick[0x14];
|
||||
};
|
||||
|
||||
struct PersonalityTestTracker
|
||||
{
|
||||
/* 0x0 */ s32 FrameCounter;
|
||||
u32 unk4;
|
||||
/* 0x8 */ s16 StarterID;
|
||||
/* 0xA */ s16 PartnerID;
|
||||
u8 fillC[0x20 - 0xC];
|
||||
/* 0x20 */ u8 PartnerNick[20];
|
||||
struct PersonalityRelated unk4;
|
||||
/* 0x34 */ u32 TestState;
|
||||
/* 0x38 */ s32 QuestionCounter;
|
||||
/* 0x3C */ u32 currQuestionIndex;
|
||||
|
@ -81,21 +81,30 @@ OpenedFile *GetDialogueSpriteDataPtr(s32 index);
|
||||
s32 GetUnownIndex(s16 index);
|
||||
void GenerateHiddenPower(HiddenPower *);
|
||||
s32 GetEvolutionSequence(PokemonStruct1 *pokemon, EvolveStage *);
|
||||
s32 sub_808E400(s32 _species, s16* _a2, bool32 _bodySizeCheck, bool32 _shedinjaCheck);
|
||||
void sub_808E490(Move* a1, s32 species);
|
||||
void xxx_pokemonstruct_to_pokemon2_808DE50(PokemonStruct2 *, PokemonStruct1 *, s32);
|
||||
void WritePoke1Bits(DataSerializer *, PokemonStruct1 *pokemon);
|
||||
void ReadPoke1Bits(DataSerializer *, PokemonStruct1 *);
|
||||
s32 sub_808E218(unkStruct_808E218_arg *, PokemonStruct1 *pokemon);
|
||||
void sub_808CFD0(PokemonStruct1 *pokemon, s16 _species, u8* name, u32 _itemID, DungeonLocation *location, u16 *moveID);
|
||||
void sub_808D0D8(PokemonStruct1 *pokemon);
|
||||
|
||||
// pokemon.s
|
||||
extern PokemonStruct1 *GetPlayerPokemonStruct(void);
|
||||
extern u32 sub_808D1DC(PokemonStruct1*);
|
||||
extern PokemonStruct1 *sub_808D378(void);
|
||||
extern PokemonStruct1 *sub_808D3BC(void);
|
||||
extern PokemonStruct1 *sub_808D3F8(void);
|
||||
extern s32 GetUnitSum_808D544(u32);
|
||||
extern s32 sub_808D580(s32 *);
|
||||
PokemonStruct1 *GetPlayerPokemonStruct(void);
|
||||
PokemonStruct1 *sub_808D1DC(PokemonStruct1*);
|
||||
PokemonStruct1 *sub_808D378(void);
|
||||
PokemonStruct1 *sub_808D3BC(void);
|
||||
PokemonStruct1 *sub_808D3F8(void);
|
||||
PokemonStruct1 * sub_808D434(s16 species, s32 param_2);
|
||||
s32 GetFriendSum_808D480(void);
|
||||
bool8 sub_808D4B0(void);
|
||||
bool8 sub_808D500(void);
|
||||
s32 GetUnitSum_808D544(s32 *);
|
||||
s32 sub_808D580(s32 *);
|
||||
bool8 ComparePokemonNames(s16, s16);
|
||||
void PrintPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon);
|
||||
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level);
|
||||
const u8* DecompressMoveID(const u8* a1, u16* moveID);
|
||||
bool8 sub_808DA44(s32, u32);
|
||||
|
||||
static inline bool8 PokemonFlag1(PokemonStruct1 *mon)
|
||||
{
|
||||
|
@ -15,6 +15,40 @@ typedef struct EvolveStatus
|
||||
/* 0x6 */ s16 targetEvolveSpecies;
|
||||
} EvolveStatus;
|
||||
|
||||
struct unkStruct_808FF20
|
||||
{
|
||||
// size: 0x64
|
||||
s16 species;
|
||||
u8 nameBuffer[0x14];
|
||||
u8 types[2]; // 0x16
|
||||
u8 abilities[2]; // 0x18
|
||||
u8 fill1A[0x1C - 0x1A];
|
||||
DungeonLocation dungeonLocation; // 0x1C
|
||||
Item item; // 0x20
|
||||
s32 HP1;
|
||||
s32 HP2;
|
||||
s32 level;
|
||||
u32 exp;
|
||||
Offense offense;
|
||||
bool8 isTeamLeader;
|
||||
u8 atkBoost;
|
||||
u8 spAtkBoost;
|
||||
u8 defBoost;
|
||||
u8 spDefBoost;
|
||||
u8 fill3D;
|
||||
s16 IQ; // 0x3E
|
||||
s16 unk40;
|
||||
s16 fill42;
|
||||
struct unkPokeSubStruct_C unk44[2];
|
||||
u8 unk4C;
|
||||
u8 fill4D[3];
|
||||
IqSkillFlags IQSkills; // 0x50
|
||||
u8 tactic;
|
||||
u8 fill55[1];
|
||||
s16 unk56;
|
||||
u8 unk58[12];
|
||||
};
|
||||
|
||||
bool8 HasRecruitedMon(s16 species);
|
||||
s16 GetBaseSpecies(s16 index);
|
||||
s16 GetBaseSpeciesNoUnown(s16 index);
|
||||
@ -30,13 +64,13 @@ void SetIQSkill(IqSkillFlags *iq, u32 skillIndex);
|
||||
bool8 IsIQSkillSet(IqSkillFlags *iq, u32 IQSkillBit);
|
||||
void SetDefaultIQSkills(IqSkillFlags *iq, bool8 enableSelfCurer);
|
||||
void sub_808F468(PokemonStruct1 *param_1, EvolveStatus *evolveStatus, u8 param_3);
|
||||
u32 sub_808F734(PokemonStruct1 *pokemon, s16 _species);
|
||||
s32 sub_808F700(PokemonStruct1 *pokemon);
|
||||
PokemonStruct1 *sub_808F734(PokemonStruct1 *pokemon, s16 _species);
|
||||
s16 ExtractSpeciesIndex(UnkDungeonGlobal_unk1CD98 *r0);
|
||||
void SetSpeciesLevelToExtract(UnkDungeonGlobal_unk1CD98 *r0, s32 level, s32 species);
|
||||
s32 ExtractLevel(UnkDungeonGlobal_unk1CD98 *r0);
|
||||
|
||||
// pokemon_3.s
|
||||
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
|
||||
extern void sub_808FF20(u32 *, PokemonStruct1 *, bool8);
|
||||
PokemonStruct1 *sub_808F798(PokemonStruct1 *pokemon, short _species);
|
||||
void CreatePokemonInfoTabScreen(u32, s32, struct unkStruct_808FF20 *, u8 *, u32);
|
||||
void sub_808FF20(struct unkStruct_808FF20 *param_1, struct PokemonStruct1 *pokemon, bool8 param_3);
|
||||
|
||||
#endif // GUARD_POKEMON_3_H
|
||||
|
@ -3,12 +3,8 @@
|
||||
|
||||
#include "pokemon.h"
|
||||
|
||||
bool8 ComparePokemonNames(s16, s16);
|
||||
// NOTE: this is kept separate since TransferOrbAction needs index to be s32
|
||||
// and I haven't had the time to fix matching
|
||||
void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index);
|
||||
void PrintPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon);
|
||||
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level);
|
||||
const u8* DecompressMoveID(const u8* a1, u16* moveID);
|
||||
|
||||
bool8 sub_808DA44(s32, u32);
|
||||
|
||||
#endif // GUARD_POKEMON_MID_H
|
||||
|
36
include/structs/str_dungeon_8042F6C.h
Normal file
36
include/structs/str_dungeon_8042F6C.h
Normal file
@ -0,0 +1,36 @@
|
||||
#ifndef GUARD_STR_DUNGEON_8042F6C_H
|
||||
#define GUARD_STR_DUNGEON_8042F6C_H
|
||||
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "structs/str_dungeon_location.h"
|
||||
#include "structs/str_pokemon.h"
|
||||
#include "structs/str_wonder_mail.h"
|
||||
|
||||
struct UnkStruct_xxx_dungeon_8042F6C
|
||||
{
|
||||
u8 unk0;
|
||||
DungeonLocation unk4;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u8 unk10;
|
||||
u8 unk11;
|
||||
unkStruct_Dungeon64C unk14;
|
||||
PokemonStruct1 unk1C;
|
||||
u8 *unk74;
|
||||
Dungeon *unk78;
|
||||
s16 unk7C;
|
||||
u8 unk7E;
|
||||
DungeonLocation unk80;
|
||||
WonderMailSub unk84;
|
||||
};
|
||||
|
||||
void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8);
|
||||
|
||||
#endif // GUARD_STR_DUNGEON_8042F6C_H
|
||||
|
@ -79,4 +79,4 @@ typedef struct WonderMailStruct_203B2C0_sub
|
||||
/* 0x30 */ PokemonStruct1 pokemon;
|
||||
} WonderMailStruct_203B2C0_sub;
|
||||
|
||||
#endif // GUARD_STR_WONDER_MAIL_H
|
||||
#endif // GUARD_STR_WONDER_MAIL_H
|
||||
|
@ -284,11 +284,8 @@ SECTIONS {
|
||||
src/code_80869E4.o(.text);
|
||||
src/dungeon_cutscenes.o(.text);
|
||||
src/pokemon.o(.text);
|
||||
asm/pokemon.o(.text);
|
||||
src/pokemon_mid.o(.text);
|
||||
asm/pokemon_2.o(.text);
|
||||
src/pokemon_3.o(.text);
|
||||
asm/pokemon_3.o(.text);
|
||||
src/dungeon.o(.text);
|
||||
asm/dungeon_2.o(.text);
|
||||
src/dungeon_2_1.o(.text);
|
||||
@ -547,8 +544,13 @@ SECTIONS {
|
||||
data/data_8107010.o(.rodata);
|
||||
src/dungeon_serializer.o(.rodata);
|
||||
data/data_8107224.o(.rodata);
|
||||
src/pokemon.o(.rodata);
|
||||
data/data_81076E4.o(.rodata);
|
||||
src/game_options.o(.rodata);
|
||||
data/data_8109964.o(.rodata);
|
||||
src/code_8094D28.o(.rodata);
|
||||
src/play_time.o(.rodata);
|
||||
src/code_8094F88.o(.rodata);
|
||||
src/code_80958E8.o(.rodata);
|
||||
src/code_80972F4.o(.rodata);
|
||||
src/code_8097504.o(.rodata);
|
||||
data/data_8109D10.o(.rodata);
|
||||
|
256
src/code.c
256
src/code.c
@ -1,16 +1,266 @@
|
||||
#include "global.h"
|
||||
#include "structs/str_dungeon_8042F6C.h"
|
||||
#include "structs/str_wonder_mail.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_80A26CC.h"
|
||||
#include "code_8099360.h"
|
||||
#include "event_flag.h"
|
||||
#include "items.h"
|
||||
#include "memory.h"
|
||||
#include "personality_test1.h"
|
||||
#include "pokemon.h"
|
||||
#include "quick_save_read.h"
|
||||
#include "quick_save_write.h"
|
||||
#include "random.h"
|
||||
#include "save.h"
|
||||
#include "string_format.h"
|
||||
#include "text_util.h"
|
||||
|
||||
extern void xxx_dungeon_8042F6C(u32 r0);
|
||||
extern void NDS_LoadOverlay_GroundMain();
|
||||
extern u32 xxx_script_related_8098468(u32);
|
||||
extern u8 sub_80992E0(s16 *, s16 *);
|
||||
extern bool8 sub_8099328(u8 *dungeonId);
|
||||
extern bool8 sub_8099360(u8 *);
|
||||
extern u8 sub_8099394(u8 *);
|
||||
extern void GeneratePelipperJobs();
|
||||
extern void sub_8043D50(s32 *a0, s32 *a1);
|
||||
extern void xxx_update_stuff(u32);
|
||||
extern void sub_80961B4();
|
||||
extern void sub_808ED00();
|
||||
extern void SetDungeonLocationInfo(DungeonLocation *dl);
|
||||
extern void sub_808CE74(s16, bool32, u8*);
|
||||
|
||||
void xxx_dungeon_8001340(struct UnkStruct_xxx_dungeon_8042F6C *r0);
|
||||
void sub_80011E8(u8 *param_1);
|
||||
void sub_809542C(WonderMailSub *param_1);
|
||||
|
||||
struct unkTalkTable
|
||||
{
|
||||
u32 unk0;
|
||||
s16 species;
|
||||
};
|
||||
|
||||
extern struct unkTalkTable gTalkKindTable[];
|
||||
extern struct unkTalkTable gBaseKindTable[];
|
||||
|
||||
EWRAM_DATA_2 u32 gUnknown_203B03C = {0};
|
||||
EWRAM_DATA_2 struct PersonalityRelated gPersonalityRelated_203B040 = {0};
|
||||
|
||||
void SaveLoadRelated_8000EDC(struct UnkStruct_xxx_dungeon_8042F6C *param_1)
|
||||
{
|
||||
u8 quickSaveValid;
|
||||
s32 quickSaveStatus;
|
||||
s32 local_1c; // 0x4800
|
||||
s32 local_18; // sizeof(Dungeon)
|
||||
|
||||
quickSaveValid = TRUE;
|
||||
gUnknown_203B03C = 1;
|
||||
sub_800A8F8(3);
|
||||
sub_8014144();
|
||||
sub_8043D50(&local_1c,&local_18);
|
||||
param_1->unk74 = MemoryAlloc(local_1c,7); // size: 0x4800
|
||||
param_1->unk78 = MemoryAlloc(local_18,7); // size: sizeof(Dungeon)
|
||||
if (param_1->unk8) {
|
||||
PrepareQuickSaveRead(param_1->unk74,local_1c);
|
||||
while( TRUE ) {
|
||||
if (!ReadQuickSave()) break;
|
||||
xxx_update_stuff(0);
|
||||
}
|
||||
quickSaveValid = IsQuickSaveValid();
|
||||
FinishQuickSaveRead();
|
||||
sub_8011830();
|
||||
if (quickSaveValid) {
|
||||
sub_80121E0(0xf1208);
|
||||
}
|
||||
else {
|
||||
sub_80121E0(0xf1209);
|
||||
}
|
||||
xxx_call_start_bg_music();
|
||||
}
|
||||
else {
|
||||
GeneratePelipperJobs();
|
||||
sub_80961B4();
|
||||
sub_808ED00();
|
||||
}
|
||||
if (quickSaveValid) {
|
||||
xxx_dungeon_8001340(param_1);
|
||||
sub_8099648();
|
||||
SetWindowBGColor();
|
||||
sub_8099690(0);
|
||||
}
|
||||
else {
|
||||
param_1->unk7C = 5;
|
||||
}
|
||||
if (param_1->unk7C == -2) {
|
||||
sub_809542C(¶m_1->unk84);
|
||||
}
|
||||
if ((param_1->unk7C == 3) || (param_1->unk7C == -2)) {
|
||||
SetDungeonLocationInfo(¶m_1->unk80);
|
||||
xxx_call_stop_bgm();
|
||||
if (param_1->unk7C == -2) {
|
||||
PrepareQuickSaveWrite(param_1->unk74,local_1c,1);
|
||||
}
|
||||
else {
|
||||
PrepareQuickSaveWrite(param_1->unk74,local_1c,0);
|
||||
}
|
||||
while ((quickSaveStatus = WriteQuickSave(), (quickSaveStatus != 2))) {
|
||||
if (quickSaveStatus == 3) break;
|
||||
if (quickSaveStatus == 1) {
|
||||
MemoryFree(param_1->unk78);
|
||||
MemoryFree(param_1->unk74);
|
||||
}
|
||||
xxx_update_stuff(0);
|
||||
}
|
||||
FinishQuickSaveWrite();
|
||||
}
|
||||
else {
|
||||
sub_808ED00();
|
||||
MemoryFree(param_1->unk78);
|
||||
MemoryFree(param_1->unk74);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8001024(struct PersonalityRelated *r0)
|
||||
{
|
||||
*r0 = gPersonalityRelated_203B040;
|
||||
}
|
||||
|
||||
void sub_8001044(struct PersonalityRelated *r0)
|
||||
{
|
||||
gPersonalityRelated_203B040 = *r0;
|
||||
}
|
||||
|
||||
void sub_8001064(void)
|
||||
{
|
||||
struct unkTalkTable *psVar2;
|
||||
u8 buffer2 [20];
|
||||
u8 buffer1 [20];
|
||||
|
||||
if (GetPlayerPokemonStruct() == NULL) {
|
||||
if (gPersonalityRelated_203B040.StarterName[0] == '\0') {
|
||||
CopyMonsterNameToBuffer(buffer1,gPersonalityRelated_203B040.StarterID);
|
||||
CopyStringtoBuffer(buffer2,buffer1);
|
||||
sub_808CE74(gPersonalityRelated_203B040.StarterID,TRUE,buffer2);
|
||||
}
|
||||
else {
|
||||
sub_808CE74(gPersonalityRelated_203B040.StarterID,TRUE,gPersonalityRelated_203B040.StarterName);
|
||||
}
|
||||
}
|
||||
if (sub_808D378() == NULL) {
|
||||
if (gPersonalityRelated_203B040.PartnerNick[0] == '\0') {
|
||||
CopyMonsterNameToBuffer(buffer1,gPersonalityRelated_203B040.PartnerID);
|
||||
CopyStringtoBuffer(buffer2,buffer1);
|
||||
sub_808CE74(gPersonalityRelated_203B040.PartnerID,FALSE,buffer2);
|
||||
}
|
||||
else {
|
||||
sub_808CE74(gPersonalityRelated_203B040.PartnerID,FALSE,gPersonalityRelated_203B040.PartnerNick);
|
||||
}
|
||||
}
|
||||
if (gPersonalityRelated_203B040.StarterID != MONSTER_NONE) {
|
||||
psVar2 = &gBaseKindTable[0];
|
||||
while ((psVar2->species != MONSTER_NONE && (gPersonalityRelated_203B040.StarterID != psVar2->species))) {
|
||||
psVar2++;
|
||||
}
|
||||
SetScriptVarValue(NULL,BASE_KIND,psVar2->unk0);
|
||||
}
|
||||
if (gPersonalityRelated_203B040.PartnerID != MONSTER_NONE) {
|
||||
psVar2 = &gTalkKindTable[0];
|
||||
while ((psVar2->species != MONSTER_NONE && (gPersonalityRelated_203B040.PartnerID != psVar2->species))) {
|
||||
psVar2++;
|
||||
}
|
||||
SetScriptVarValue(NULL,PARTNER_TALK_KIND,psVar2->unk0);
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_8001170(void)
|
||||
{
|
||||
s16 local_10;
|
||||
s16 auStack_e;
|
||||
u8 dungeonID;
|
||||
u8 auStack_b;
|
||||
|
||||
dungeonID = 0x63;
|
||||
if (sub_80992E0(&local_10,&auStack_e) != 0) {
|
||||
dungeonID = sub_80A2740(local_10);
|
||||
}
|
||||
else {
|
||||
if (!sub_8099328(&dungeonID) && (!sub_8099360(&dungeonID) && sub_8099394(&auStack_b) != 0)) {
|
||||
dungeonID = 0x3F;
|
||||
}
|
||||
}
|
||||
return dungeonID;
|
||||
}
|
||||
|
||||
void sub_80011CC(u8 *param_1,u8 param_2)
|
||||
{
|
||||
u32 zero = 0;
|
||||
param_1[0] = param_2;
|
||||
param_1[1] = zero;
|
||||
sub_80011E8(param_1);
|
||||
param_1[0xb] = 0;
|
||||
param_1[4] = 0;
|
||||
param_1[0xc] = 0;
|
||||
param_1[0xd] = 0;
|
||||
}
|
||||
|
||||
void sub_80011E8(u8 *param_1)
|
||||
{
|
||||
param_1[5] = sub_80023E4(8);
|
||||
param_1[6] = sub_80023E4(3);
|
||||
param_1[8] = sub_80023E4(7);
|
||||
param_1[9] = sub_80023E4(0);
|
||||
param_1[10] = sub_80023E4(5);
|
||||
if (sub_80023E4(0x18) && sub_80023E4(0x19) && sub_80023E4(0x1a)) {
|
||||
param_1[7] = 1;
|
||||
}
|
||||
else {
|
||||
param_1[7] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8001248(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
if(RandInt(100) < 50)
|
||||
ZeroOutItem(&gTeamInventoryRef->teamItems[index]);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
for(index = 0; index < NUM_MONSTERS; index++)
|
||||
{
|
||||
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index];
|
||||
if(PokemonFlag1(mon) && PokemonFlag2(mon))
|
||||
mon->heldItem.id = ITEM_NOTHING;
|
||||
}
|
||||
gTeamInventoryRef->teamMoney = 0;
|
||||
}
|
||||
|
||||
void sub_80012C0(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
ZeroOutItem(&gTeamInventoryRef->teamItems[index]);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
for(index = 0; index < NUM_MONSTERS; index++)
|
||||
{
|
||||
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[index];
|
||||
if(PokemonFlag1(mon) && PokemonFlag2(mon))
|
||||
mon->heldItem.id = ITEM_NOTHING;
|
||||
}
|
||||
gTeamInventoryRef->teamMoney = 0;
|
||||
}
|
||||
|
||||
void NDS_LoadOverlay_GroundMain()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void nullsub_2(u32 r0)
|
||||
void nullsub_2(struct UnkStruct_xxx_dungeon_8042F6C *r0)
|
||||
{
|
||||
|
||||
}
|
||||
@ -20,7 +270,7 @@ u32 xxx_script_related_8001334(u32 r0)
|
||||
return xxx_script_related_8098468(r0);
|
||||
}
|
||||
|
||||
void xxx_dungeon_8001340(u32 r0)
|
||||
void xxx_dungeon_8001340(struct UnkStruct_xxx_dungeon_8042F6C *r0)
|
||||
{
|
||||
nullsub_2(r0);
|
||||
xxx_dungeon_8042F6C(r0);
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include "gulpin_shop.h"
|
||||
#include "memory.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
static EWRAM_DATA_2 unkStruct_203B22C *sUnknown_203B22C = {0};
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include "code_800D090.h"
|
||||
#include "code_8023868.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "structs/str_text.h"
|
||||
#include "text_util.h"
|
||||
|
||||
@ -172,4 +171,4 @@ UNUSED static PokemonStruct1 *sub_80243E8(void)
|
||||
sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH);
|
||||
sprintfStatic(buffer, sUnknown_80DC9A4, nameBuffer);
|
||||
return pokeStruct;
|
||||
}
|
||||
}
|
||||
|
@ -83,13 +83,13 @@ static void sub_8024588(void)
|
||||
|
||||
static void sub_80245D0(void)
|
||||
{
|
||||
CreatePokemonInfoTabScreen(sUnknown_203B2AC->unk34[sUnknown_203B2AC->input.unk1E], sUnknown_203B2AC->input.unk1E, &sUnknown_203B2AC->unk4C, &sUnknown_203B2AC->unkB0, sUnknown_203B2AC->unkE0);
|
||||
CreatePokemonInfoTabScreen(sUnknown_203B2AC->unk34[sUnknown_203B2AC->input.unk1E], sUnknown_203B2AC->input.unk1E, &sUnknown_203B2AC->unk4C, (u8 *)&sUnknown_203B2AC->unkB0, sUnknown_203B2AC->unkE0);
|
||||
}
|
||||
|
||||
static void sub_8024604(void)
|
||||
{
|
||||
PokemonStruct1 *pokeStruct;
|
||||
u32 *iVar3;
|
||||
struct unkStruct_808FF20 *iVar3;
|
||||
|
||||
sUnknown_203B2AC->unk34[0] = 2;
|
||||
sUnknown_203B2AC->unk34[1] = 3;
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "dungeon_util_1.h"
|
||||
#include "memory.h"
|
||||
#include "structs/rgb.h"
|
||||
#include "structs/str_dungeon_8042F6C.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "code_800E9E4.h"
|
||||
#include "code_800DAC0.h"
|
||||
@ -26,7 +27,7 @@
|
||||
#include "code_803E668.h"
|
||||
#include "dungeon_engine.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "weather.h"
|
||||
#include "moves.h"
|
||||
#include "code_8094F88.h"
|
||||
@ -250,35 +251,6 @@ extern u8 gUnknown_203B40C;
|
||||
extern DungeonPos gUnknown_203B410;
|
||||
extern u8 *gSerializedData_203B41C;
|
||||
|
||||
struct Substruct_xxx_dungeon_8042F6C
|
||||
{
|
||||
DungeonLocation a0;
|
||||
u32 a4;
|
||||
};
|
||||
|
||||
struct UnkStruct_xxx_dungeon_8042F6C
|
||||
{
|
||||
u8 unk0;
|
||||
DungeonLocation unk4;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
u8 unkE;
|
||||
u8 unkF;
|
||||
u8 unk10;
|
||||
u8 unk11;
|
||||
unkStruct_Dungeon64C unk14;
|
||||
PokemonStruct1 unk1C;
|
||||
u8 *unk74;
|
||||
Dungeon *unk78;
|
||||
s16 unk7C;
|
||||
u8 unk7E;
|
||||
DungeonLocation unk80;
|
||||
struct Substruct_xxx_dungeon_8042F6C unk84;
|
||||
};
|
||||
|
||||
extern void sub_8040094(u8 r0);
|
||||
extern void sub_8068BDC(u8 r0);
|
||||
@ -915,8 +887,8 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
||||
r8->unk7C = -2;
|
||||
memset(&r8->unk84, 0, sizeof(r8->unk84));
|
||||
r8->unk80 = gDungeon->unk644.dungeonLocation;
|
||||
r8->unk84.a0 = gDungeon->unk644.dungeonLocation;
|
||||
r8->unk84.a4 = gDungeon->unk644.unk38;
|
||||
r8->unk84.dungeon = gDungeon->unk644.dungeonLocation;
|
||||
r8->unk84.seed = gDungeon->unk644.unk38;
|
||||
|
||||
}
|
||||
else {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "code_8069D4C.h"
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "constants/status.h"
|
||||
#include "constants/type.h"
|
||||
#include "constants/weather.h"
|
||||
#include "dungeon_engine.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_movement.h"
|
||||
@ -21,7 +22,6 @@
|
||||
#include "move_effects_target.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "text_util.h"
|
||||
@ -66,7 +66,6 @@ extern void sub_803F4A0(Entity *a0);
|
||||
extern bool8 sub_80860A8(u8 id);
|
||||
extern u8 gUnknown_202F32C;
|
||||
extern u8 sub_803D73C(s32 a0);
|
||||
extern bool8 IsBossFight(void);
|
||||
extern void DeletePokemonDungeonSprite(s32 id);
|
||||
extern void sub_80429E8(Entity *r0);
|
||||
extern s32 sub_803DA20(s32 param_1);
|
||||
@ -85,7 +84,6 @@ extern void sub_803F580(s32);
|
||||
extern void sub_8040A84(void);
|
||||
extern void sub_806B678(void);
|
||||
extern void EntityUpdateStatusSprites(Entity *);
|
||||
extern s32 sub_808F700(PokemonStruct1 *pokemon);
|
||||
extern Entity *sub_80696A8(Entity *a0);
|
||||
extern int sprintf(char *, const char *, ...);
|
||||
extern const u8 gUnknown_8106EA8[]; // talkp%d
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "game_options.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "status.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "targeting.h"
|
||||
|
@ -54,8 +54,6 @@ extern bool8 sub_806AA0C(s32, u32);
|
||||
extern bool8 sub_8083660(DungeonPos *param_1);
|
||||
extern bool8 sub_803D930(u32);
|
||||
extern void sub_8072B78(Entity *pokemon, Entity *target, s16 id);
|
||||
extern s32 sub_808E400(s32 _species, s16* _a2, bool32 bodySizeCheck, bool32 shedinjaCheck);
|
||||
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level); // TODO: change to s32
|
||||
|
||||
void sub_8071B48(void)
|
||||
{
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "dungeon_util.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "status_checks_1.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/map.h"
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
|
||||
IWRAM_DATA u32 gUnknown_3001198[0x270] = {0};
|
||||
EWRAM_DATA_2 s32 gUnknown_203B470 = {0};
|
||||
|
@ -1,11 +1,12 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "code_8094D28.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "constants/wonder_mail.h"
|
||||
#include "dungeon.h"
|
||||
#include "memory.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "save.h"
|
||||
#include "text_util.h"
|
||||
@ -468,4 +469,4 @@ void sub_8095824(DataSerializer * a, unkStruct_203B480 *b)
|
||||
void sub_80958E4(u32 *a, u32 b)
|
||||
{
|
||||
*a = b;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "code_803C1D0.h"
|
||||
#include "code_80958E8.h"
|
||||
#include "code_80A26CC.h"
|
||||
@ -38,7 +39,7 @@ extern void sub_803C45C(WonderMail *);
|
||||
extern void sub_803C610(WonderMail *);
|
||||
extern void sub_803C580(WonderMail *);
|
||||
|
||||
extern u8 gUnknown_8109984[];
|
||||
static const u8 sPossibleMissionTypes[] = {MISSION_TYPE_FRIEND_RESCUE, MISSION_TYPE_FIND_ITEM, MISSION_TYPE_DELIVER_ITEM, MISSION_TYPE_RESCUE_CLIENT, MISSION_TYPE_RESCUE_TARGET, MISSION_TYPE_DELIVER_ITEM, MISSION_TYPE_FIND_ITEM, MISSION_TYPE_FRIEND_RESCUE};
|
||||
|
||||
static EWRAM_DATA unkStruct_203B490 sUnknown_2039448 = {0};
|
||||
|
||||
@ -187,7 +188,7 @@ bool8 GenerateMailJobInfo(struct WonderMail *mail)
|
||||
}
|
||||
mail->mailType = MAIL_TYPE_SUSPENDED_JOB;
|
||||
rand = RandInt(8);
|
||||
missionType = gUnknown_8109984[rand];
|
||||
missionType = sPossibleMissionTypes[rand];
|
||||
mail->missionType = missionType;
|
||||
if (missionType == MISSION_TYPE_DELIVER_ITEM && GetRescueTeamRank() == 0) {
|
||||
mail->missionType = MISSION_TYPE_FRIEND_RESCUE;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "dungeon.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
#include "event_flag.h"
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include "menu_input.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "text.h"
|
||||
|
||||
EWRAM_DATA_2 unkStruct_203B27C *gUnknown_203B27C = {0};
|
||||
|
@ -2,7 +2,6 @@
|
||||
#include "globaldata.h"
|
||||
#include "code_802F204.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "rescue_team_info.h"
|
||||
#include "friend_area.h"
|
||||
#include "input.h"
|
||||
|
@ -273,7 +273,7 @@ static void RevealPersonality(void)
|
||||
sPersonalityTestTracker->playerNature = currentNature;
|
||||
}
|
||||
|
||||
sPersonalityTestTracker->StarterID = gStarters[sPersonalityTestTracker->playerNature][sPersonalityTestTracker->playerGender];
|
||||
sPersonalityTestTracker->unk4.StarterID = gStarters[sPersonalityTestTracker->playerNature][sPersonalityTestTracker->playerGender];
|
||||
PrintPersonalityTypeDescription();
|
||||
sPersonalityTestTracker->TestState = PERSONALITY_STARTER_REVEAL;
|
||||
}
|
||||
@ -313,7 +313,7 @@ static void AdvanceToPartnerSelection(void)
|
||||
|
||||
static void CallCreatePartnerSelectionMenu(void)
|
||||
{
|
||||
CreatePartnerSelectionMenu(sPersonalityTestTracker->StarterID);
|
||||
CreatePartnerSelectionMenu(sPersonalityTestTracker->unk4.StarterID);
|
||||
sPersonalityTestTracker->TestState = PERSONALITY_ADVANCE_TO_PARTNER_NICKNAME_1;
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ static void PromptForPartnerNickname(void)
|
||||
if (selectedPartner != 0xFFFF) {
|
||||
if (selectedPartner != 0xFFFE) {
|
||||
sub_803CE6C();
|
||||
sPersonalityTestTracker->PartnerID = selectedPartner;
|
||||
sPersonalityTestTracker->unk4.PartnerID = selectedPartner;
|
||||
CreateDialogueBoxAndPortrait(gPartnerNickPrompt, 0, 0, 0x301);
|
||||
sPersonalityTestTracker->TestState = PERSONALITY_ADVANCE_TO_PARTNER_NICKNAME_2;
|
||||
}
|
||||
@ -343,8 +343,8 @@ static void AdvanceToPartnerNicknameScreen(void)
|
||||
|
||||
static void NicknamePartner(void)
|
||||
{
|
||||
CopyStringtoBuffer(sPersonalityTestTracker->PartnerNick, GetMonSpecies(sPersonalityTestTracker->PartnerID));
|
||||
CreateConfirmNameMenu(3, sPersonalityTestTracker->PartnerNick);
|
||||
CopyStringtoBuffer(sPersonalityTestTracker->unk4.PartnerNick, GetMonSpecies(sPersonalityTestTracker->unk4.PartnerID));
|
||||
CreateConfirmNameMenu(3, sPersonalityTestTracker->unk4.PartnerNick);
|
||||
sPersonalityTestTracker->TestState = PERSONALITY_END_INTRO;
|
||||
}
|
||||
|
||||
@ -375,7 +375,7 @@ static void PromptNewQuestion(void)
|
||||
|
||||
static void PrintPersonalityTypeDescription(void)
|
||||
{
|
||||
CopyMonsterNameToBuffer(gFormatBuffer_Monsters[0], sPersonalityTestTracker->StarterID);
|
||||
CopyMonsterNameToBuffer(gFormatBuffer_Monsters[0], sPersonalityTestTracker->unk4.StarterID);
|
||||
CreateDialogueBoxAndPortrait(sPersonalityTypeDescriptionTable[sPersonalityTestTracker->playerNature], 0, 0, 0x101);
|
||||
}
|
||||
|
||||
@ -388,7 +388,7 @@ static void PersonalityTest_DisplayStarterSprite(void)
|
||||
const u8 *gfx;
|
||||
UnkTextStruct2 stackArray[4];
|
||||
|
||||
starterID = sPersonalityTestTracker->StarterID;
|
||||
starterID = sPersonalityTestTracker->unk4.StarterID;
|
||||
RestoreUnkTextStruct_8006518(stackArray);
|
||||
stackArray[1] = sUnknown_80F4244;
|
||||
ResetUnusedInputStruct();
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "play_time.h"
|
||||
#include "code_8092334.h"
|
||||
|
||||
|
1281
src/pokemon.c
1281
src/pokemon.c
File diff suppressed because it is too large
Load Diff
970
src/pokemon_3.c
970
src/pokemon_3.c
File diff suppressed because it is too large
Load Diff
@ -1,969 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "code_800D090.h"
|
||||
#include "code_8097DD0.h"
|
||||
#include "constants/colors.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/move_id.h"
|
||||
#include "decompress.h"
|
||||
#include "items.h"
|
||||
#include "moves.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "text_util.h"
|
||||
|
||||
extern MonsterDataEntry *gMonsterParameters;
|
||||
extern const char gUnknown_8107600[];
|
||||
extern const char gUnknown_8107608[];
|
||||
extern const char gUnownLetters[];
|
||||
extern const char gUnknown_8107630[];
|
||||
extern const char gUnknown_8107638[];
|
||||
extern const char gUnknown_810763C[];
|
||||
extern const char gUnknown_810768C[]; // lvmp%03d\0
|
||||
extern struct FileArchive gSystemFileArchive;
|
||||
extern s16 gFrenzyPlantIQReq; // 0x14d
|
||||
extern s16 gHydroCannonIQReq; // 0x14d
|
||||
extern s16 gBlastBurnIQReq; // 0x14d
|
||||
extern s16 gVoltTackleIQReq; // 0x14d
|
||||
extern char* gFormattedStatusNames[];
|
||||
|
||||
// wram data:
|
||||
extern u16 gLevelCurrentPokeId;
|
||||
extern LevelData gLevelCurrentData[];
|
||||
|
||||
|
||||
extern int sprintf(char *, const char *, ...);
|
||||
extern u32 ReturnIntFromChar(u8 r0);
|
||||
extern void xxx_pokemon2_to_pokemonstruct_808DF44(PokemonStruct1*, PokemonStruct2*);
|
||||
|
||||
struct unkStruct_8107654 {
|
||||
s16 unk0;
|
||||
s16 fill2;
|
||||
s32 unk4;
|
||||
};
|
||||
|
||||
extern u8 gUnknown_8107645[12];
|
||||
extern struct unkStruct_8107654 gUnknown_8107654[6];
|
||||
extern MonsterDataEntry *gMonsterParameters;
|
||||
extern struct FileArchive gMonsterFileArchive;
|
||||
extern const char gUnknown_8107684[];
|
||||
|
||||
s32 sub_808D654(s32 *ptr)
|
||||
{
|
||||
s32 i;
|
||||
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[0];
|
||||
s32 count = 0;
|
||||
s32 *ptr2;
|
||||
|
||||
for (i = 0, ptr2 = ptr; i < NUM_MONSTERS; i++, mon++) {
|
||||
if (PokemonFlag2(mon) && !IsMonTeamLeader(mon) && !IsMonPartner(mon)) {
|
||||
if (ptr != NULL) {
|
||||
*ptr2 = i;
|
||||
}
|
||||
ptr2++;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// The same as sub_808D654 except it doesn't exclude partner.
|
||||
s32 sub_808D6A4(s32 *ptr)
|
||||
{
|
||||
s32 i;
|
||||
PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[0];
|
||||
s32 count = 0;
|
||||
s32 *ptr2;
|
||||
|
||||
for (i = 0, ptr2 = ptr; i < NUM_MONSTERS; i++, mon++) {
|
||||
if (PokemonFlag2(mon) && !IsMonTeamLeader(mon)) {
|
||||
if (ptr != NULL) {
|
||||
*ptr2 = i;
|
||||
}
|
||||
ptr2++;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
bool8 sub_808D6E8()
|
||||
{
|
||||
s32 i;
|
||||
s32 count = 0;
|
||||
s32 size_count = 0;
|
||||
for (i = 0; i < NUM_MONSTERS; i++) {
|
||||
PokemonStruct1* pokemon = &gRecruitedPokemonRef->pokemon[i];
|
||||
if (PokemonFlag1(pokemon) && PokemonFlag2(pokemon)) {
|
||||
size_count += GetBodySize(pokemon->speciesNum);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if ((size_count < 6) && (count < 4)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// this one is surprisingly frustrating
|
||||
NAKED
|
||||
bool8 sub_808D750(s16 index_) {
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r9\n"
|
||||
"\tmov r6, r8\n"
|
||||
"\tpush {r6,r7}\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tasrs r0, 16\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmovs r5, 0\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tldr r0, _0808D7C8\n"
|
||||
"\tmov r9, r0\n"
|
||||
"\tmovs r7, 0x1\n"
|
||||
"_0808D76A:\n"
|
||||
"\tmovs r0, 0x58\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmuls r1, r0\n"
|
||||
"\tmov r2, r9\n"
|
||||
"\tldr r0, [r2]\n"
|
||||
"\tadds r1, r0, r1\n"
|
||||
"\tldrh r2, [r1]\n"
|
||||
"\tadds r0, r7, 0\n"
|
||||
"\tands r0, r2\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0808D798\n"
|
||||
"\tlsrs r0, r2, 1\n"
|
||||
"\tands r0, r7\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0808D798\n"
|
||||
"\tmovs r2, 0x8\n"
|
||||
"\tldrsh r0, [r1, r2]\n"
|
||||
"\tbl GetBodySize\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tadds r5, r0\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"_0808D798:\n"
|
||||
"\tadds r4, 0x1\n"
|
||||
"\tmovs r0, 0xCE\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tble _0808D76A\n"
|
||||
"\tcmp r6, 0x3\n"
|
||||
"\tbgt _0808D7CC\n"
|
||||
"\tldr r2, _0808D7C8\n"
|
||||
"\tmovs r0, 0x58\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tmuls r1, r0\n"
|
||||
"\tldr r0, [r2]\n"
|
||||
"\tadds r1, r0, r1\n"
|
||||
"\tmovs r2, 0x8\n"
|
||||
"\tldrsh r0, [r1, r2]\n"
|
||||
"\tbl GetBodySize\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tadds r5, r0\n"
|
||||
"\tcmp r5, 0x6\n"
|
||||
"\tbgt _0808D7CC\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0808D7CE\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0808D7C8: .4byte gRecruitedPokemonRef\n"
|
||||
"_0808D7CC:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0808D7CE:\n"
|
||||
"\tpop {r3,r4}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n"
|
||||
);
|
||||
}
|
||||
|
||||
// bool8 sub_808D750(s16 index_) {
|
||||
// s32 i;
|
||||
// register s32 index asm("r8") = index_;
|
||||
// s32 count = 0;
|
||||
// s32 size_count = 0;
|
||||
|
||||
// for (i = 0; i < 413; i++) {
|
||||
// register PokemonStruct1* pokemon = &i[gRecruitedPokemonRef->pokemon];
|
||||
// register u16 unk0 = pokemon->unk0;
|
||||
// if ((unk0 & 1) && ((pokemon->unk0 >> 1) & 1)) {
|
||||
// size_count += GetBodySize(pokemon->speciesNum);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (count < 4) {
|
||||
// PokemonStruct1* pokemon;
|
||||
|
||||
// pokemon = &gRecruitedPokemonRef->pokemon[index];
|
||||
|
||||
// size_count += GetBodySize(pokemon->speciesNum);
|
||||
// if (size_count < 7) {
|
||||
// return TRUE;
|
||||
// }
|
||||
// }
|
||||
// return FALSE;
|
||||
// }
|
||||
|
||||
|
||||
void PeekPokemonItem(s16 index_, BulkItem* item) {
|
||||
s32 index = index_;
|
||||
PokemonStruct1* pokemon = &gRecruitedPokemonRef->pokemon[index];
|
||||
item->id = pokemon->heldItem.id;
|
||||
item->quantity = pokemon->heldItem.quantity;
|
||||
}
|
||||
|
||||
void GivePokemonItem(s16 index_, BulkItem* item) {
|
||||
s32 index = index_;
|
||||
PokemonStruct1* pokemon = &gRecruitedPokemonRef->pokemon[index];
|
||||
pokemon->heldItem.id = item->id;
|
||||
pokemon->heldItem.quantity = item->quantity;
|
||||
}
|
||||
|
||||
bool8 IsPokemonRenamed(PokemonStruct1* pokemon) {
|
||||
char species_name[20];
|
||||
char* species = GetMonSpecies(pokemon->speciesNum);
|
||||
s32 i;
|
||||
CopyStringtoBuffer(species_name, species);
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
if (pokemon->name[i] != species_name[i]) {
|
||||
return FALSE;
|
||||
}
|
||||
if (!pokemon->name[i]) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 ComparePokemonNames(s16 a1, s16 a2)
|
||||
{
|
||||
s32 index1 = a1;
|
||||
s32 index2 = a2;
|
||||
u8* name1 = gRecruitedPokemonRef->pokemon[index1].name;
|
||||
u8* name2 = gRecruitedPokemonRef->pokemon[index2].name;
|
||||
|
||||
s32 i;
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
s32 c1 = ReturnIntFromChar(*name1);
|
||||
s32 c2 = ReturnIntFromChar(*name2);
|
||||
if (c1 > c2) {
|
||||
return TRUE;
|
||||
}
|
||||
if (c1 < c2) {
|
||||
return FALSE;
|
||||
}
|
||||
name1++;
|
||||
name2++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CopyMonsterNameToBuffer(u8 * buffer, s32 index)
|
||||
{
|
||||
s16 index_s16 = index;
|
||||
strncpy(buffer, gMonsterParameters[index_s16].species, 0x14);
|
||||
}
|
||||
|
||||
void CopyYellowMonsterNametoBuffer(u8 *buffer, s16 index)
|
||||
{
|
||||
s32 new_index = index;
|
||||
sprintfStatic(buffer, gUnknown_8107600, gMonsterParameters[new_index].species); // {color YELLOW}%s{reset}
|
||||
}
|
||||
|
||||
void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index)
|
||||
{
|
||||
s32 new_index = index;
|
||||
sprintfStatic(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // {color CYAN}%s{reset}
|
||||
}
|
||||
|
||||
void sub_808D930(u8 *buffer, s32 index)
|
||||
{
|
||||
char *unownString;
|
||||
s32 unownIndex;
|
||||
const char *preload;
|
||||
s16 index_s16 = index;
|
||||
|
||||
if (GetBaseSpecies(index_s16) == MONSTER_UNOWN) {
|
||||
preload = gUnknown_8107630; // %s%c
|
||||
unownString = GetMonSpecies(MONSTER_UNOWN);
|
||||
unownIndex = GetUnownIndex(index_s16);
|
||||
sprintfStatic(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!?
|
||||
}
|
||||
else {
|
||||
sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index_s16].species); // %s
|
||||
}
|
||||
}
|
||||
|
||||
char * GetMonSpecies(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].species;
|
||||
}
|
||||
|
||||
void PrintColoredPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon, s32 colorNum)
|
||||
{
|
||||
u8 nameBuffer [20];
|
||||
|
||||
sub_80922B4(nameBuffer, pokemon->name, POKEMON_NAME_LENGTH);
|
||||
if (colorNum == COLOR_WHITE) {
|
||||
colorNum = COLOR_CYAN;
|
||||
}
|
||||
sprintfStatic(buffer,gUnknown_810763C,colorNum,nameBuffer); // {color}%c%s{reset}
|
||||
}
|
||||
|
||||
void sub_808D9DC(u8 *buffer, PokemonStruct2 *param_2, s32 colorNum)
|
||||
{
|
||||
u8 nameBuffer [20];
|
||||
|
||||
sub_80922B4(nameBuffer, param_2->name, POKEMON_NAME_LENGTH);
|
||||
if (colorNum == COLOR_WHITE) {
|
||||
colorNum = COLOR_YELLOW;
|
||||
}
|
||||
sprintfStatic(buffer,gUnknown_810763C,colorNum,nameBuffer); // {color}%c%s{reset}
|
||||
}
|
||||
|
||||
void sub_808DA0C(u8 *buffer, PokemonStruct2 *param_2)
|
||||
{
|
||||
u8 nameBuffer [20];
|
||||
|
||||
sub_80922B4(nameBuffer, param_2->name, POKEMON_NAME_LENGTH);
|
||||
sprintfStatic(buffer,gUnknown_8107638,nameBuffer); // %s
|
||||
}
|
||||
|
||||
void PrintPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon)
|
||||
{
|
||||
sub_80922B4(buffer, pokemon->name, POKEMON_NAME_LENGTH);
|
||||
}
|
||||
|
||||
bool8 sub_808DA44(s32 a1_, u32 a2_)
|
||||
{
|
||||
// this is the dumbest thing ever, but just making a1 a s16 and
|
||||
// a2 a u8 did weird stuff with shifting...
|
||||
s32 a1 = (s16)a1_;
|
||||
u32 a2 = (u8)a2_;
|
||||
if (a2 > 0xc) {
|
||||
s32 i;
|
||||
struct unkStruct_8107654 data[6];
|
||||
memcpy(data, gUnknown_8107654, 6 * sizeof(struct unkStruct_8107654));
|
||||
|
||||
for (i = 0; i < 10 && data[i].unk0; i++) {
|
||||
if (data[i].unk0 == a1 && data[i].unk4 == a2) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return gUnknown_8107645[a2];
|
||||
}
|
||||
}
|
||||
|
||||
u8 *GetCategoryString(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].category;
|
||||
}
|
||||
|
||||
u8 GetBodySize(s32 index)
|
||||
{
|
||||
s16 index_s16 = index;
|
||||
return gMonsterParameters[index_s16].bodySize;
|
||||
}
|
||||
|
||||
u8 GetShadowSize(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].shadowSize;
|
||||
}
|
||||
|
||||
s32 GetMovementSpeed(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].movementSpeed;
|
||||
}
|
||||
|
||||
u8 GetMovementType(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].movementType;
|
||||
}
|
||||
|
||||
u8 GetRegenSpeed(s16 index)
|
||||
{
|
||||
return ((u8)(gMonsterParameters[index].regenSpeed) << 25) >> 24;
|
||||
}
|
||||
|
||||
bool8 GetCanMoveFlag(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].canMove;
|
||||
}
|
||||
|
||||
u8 GetChanceAsleep(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].chanceAsleep;
|
||||
}
|
||||
|
||||
u32 GetWeight(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].weight;
|
||||
}
|
||||
|
||||
u32 GetSize(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].size;
|
||||
}
|
||||
|
||||
u8 GetFriendArea(s32 index)
|
||||
{
|
||||
s16 index_s32 = index;
|
||||
return gMonsterParameters[index_s32].friendArea;
|
||||
}
|
||||
|
||||
s32 GetBaseHP(s32 index)
|
||||
{
|
||||
s16 index_s32 = index;
|
||||
return gMonsterParameters[index_s32].baseHP;
|
||||
}
|
||||
|
||||
bool8 MonsterIDCanThrowItems(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].canThrowItems;
|
||||
}
|
||||
|
||||
u8 GetUnk12(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].unk12;
|
||||
}
|
||||
|
||||
s16 GetPokemonEvolveFrom(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].preEvolution.evolveFrom;
|
||||
}
|
||||
|
||||
s32 GetBaseOffensiveStat(s32 index, u32 r1)
|
||||
{
|
||||
s16 index_s16 = index;
|
||||
return gMonsterParameters[index_s16].baseAtkSpAtk[r1];
|
||||
}
|
||||
|
||||
s32 GetBaseDefensiveStat(s32 index, u32 r1)
|
||||
{
|
||||
s16 index_s16 = index;
|
||||
return gMonsterParameters[index_s16].baseDefSpDef[r1];
|
||||
}
|
||||
|
||||
u8 GetPokemonType(s32 index, u32 typeIndex)
|
||||
{
|
||||
s16 newIndex = index;
|
||||
return gMonsterParameters[newIndex].types[typeIndex];
|
||||
}
|
||||
|
||||
u8 GetPokemonAbility(s16 index, u32 abilityIndex)
|
||||
{
|
||||
return gMonsterParameters[index].abilities[abilityIndex];
|
||||
}
|
||||
|
||||
s16 GetDexInternalNo(s32 index, u32 r1)
|
||||
{
|
||||
s16 index_s16 = index;
|
||||
return gMonsterParameters[index_s16].dexInternal[r1];
|
||||
}
|
||||
|
||||
s16 GetRecruitRate(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].recruitRate;
|
||||
}
|
||||
|
||||
s16 GetAlphabetParentNo(s16 index, s32 r1)
|
||||
{
|
||||
return gMonsterParameters[index].alphabetParent[r1];
|
||||
}
|
||||
|
||||
|
||||
s16 GetInternalNo(s16 index)
|
||||
{
|
||||
return gMonsterParameters[index].dexInternal[1];
|
||||
}
|
||||
|
||||
s32 CalculateEXPGain(s16 index, s32 level)
|
||||
{
|
||||
s32 expYield = gMonsterParameters[index].expYield;
|
||||
return expYield + (expYield * (level - 1)) / 10;
|
||||
}
|
||||
|
||||
s16 GetPokemonEvolveConditions(s16 index, unkEvolve *r1)
|
||||
{
|
||||
PreEvolution temp2;
|
||||
EvolutionRequirements temp1;
|
||||
temp1 = gMonsterParameters[index].evolutionRequirements;
|
||||
temp2 = gMonsterParameters[index].preEvolution;
|
||||
r1->preEvolution = temp2;
|
||||
r1->evolutionRequirements = temp1;
|
||||
// The return value is not used anywhere, but necessary for the function to match.
|
||||
return index;
|
||||
}
|
||||
|
||||
u8 GetPokemonOverworldPalette(s16 index, u32 r1)
|
||||
{
|
||||
s32 id = SpeciesId(index);
|
||||
if (r1 != 0)
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
return gMonsterParameters[id].overworldPalette;
|
||||
}
|
||||
}
|
||||
|
||||
OpenedFile *OpenPokemonDialogueSpriteFile(s16 index)
|
||||
{
|
||||
// Looks like this loads the dialogue sprite for the pokemon
|
||||
|
||||
char buffer[0xC];
|
||||
if(gMonsterParameters[index].dialogueSprites == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
sprintf(buffer, gUnknown_8107684, index); // "kao%03d"
|
||||
return OpenFile(buffer, &gMonsterFileArchive);
|
||||
}
|
||||
|
||||
OpenedFile *GetDialogueSpriteDataPtr(s32 index)
|
||||
{
|
||||
// Looks like this loads the dialogue sprite for the pokemon
|
||||
char buffer[0xC];
|
||||
s16 id = SpeciesId(index);
|
||||
|
||||
if(gMonsterParameters[id].dialogueSprites == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
sprintf(buffer, gUnknown_8107684, id); // "kao%03d"
|
||||
return OpenFileAndGetFileDataPtr(buffer, &gMonsterFileArchive);
|
||||
}
|
||||
|
||||
bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 spriteId)
|
||||
{
|
||||
// checking to see if dialogue sprite is available??
|
||||
return (gMonsterParameters[index].dialogueSprites >> spriteId) & 1;
|
||||
}
|
||||
|
||||
void xxx_pokemonstruct_index_to_pokemon2_808DE30(void* r0, u32 r1)
|
||||
{
|
||||
xxx_pokemonstruct_to_pokemon2_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1);
|
||||
}
|
||||
|
||||
void xxx_pokemonstruct_to_pokemon2_808DE50(PokemonStruct2 * a1, PokemonStruct1 *pokemon, s32 a3)
|
||||
{
|
||||
s32 i;
|
||||
BulkItem* held;
|
||||
Item* slot;
|
||||
|
||||
a1->unk0 = pokemon->unk0;
|
||||
a1->level = pokemon->level;
|
||||
a1->IQ = pokemon->IQ;
|
||||
a1->IQSkills = pokemon->IQSkills;
|
||||
GenerateHiddenPower(&a1->hiddenPower);
|
||||
a1->dungeonLocation = pokemon->dungeonLocation;
|
||||
a1->isTeamLeader = pokemon->isTeamLeader;
|
||||
a1->unkA = a3;
|
||||
a1->speciesNum = pokemon->speciesNum;
|
||||
a1->tacticIndex = pokemon->tacticIndex;
|
||||
a1->unk12 = pokemon->pokeHP;
|
||||
a1->unk10 = pokemon->pokeHP;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
a1->offense.att[i] = pokemon->offense.att[i];
|
||||
a1->offense.def[i] = pokemon->offense.def[i];
|
||||
}
|
||||
|
||||
a1->currExp = pokemon->currExp;
|
||||
CopyAndResetMoves(&a1->moves, pokemon->moves);
|
||||
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
a1->name[i] = pokemon->name[i];
|
||||
}
|
||||
|
||||
held = &pokemon->heldItem;
|
||||
slot = &a1->itemSlot;
|
||||
|
||||
if ((u32)(-held->id | held->id) >> 31) {
|
||||
HeldItemToSlot(slot, held);
|
||||
}
|
||||
else {
|
||||
slot->id = ITEM_NOTHING;
|
||||
slot->quantity = 0;
|
||||
slot->flags = 0;
|
||||
}
|
||||
|
||||
a1->belly = IntToFixedPoint(100);
|
||||
a1->maxBelly = IntToFixedPoint(100);
|
||||
}
|
||||
|
||||
void xxx_pokemon2_to_pokemonstruct_index_808DF2C(s32 a1, PokemonStruct2* a2)
|
||||
{
|
||||
xxx_pokemon2_to_pokemonstruct_808DF44(&a1[gRecruitedPokemonRef->pokemon], a2);
|
||||
}
|
||||
|
||||
|
||||
void xxx_pokemon2_to_pokemonstruct_808DF44(PokemonStruct1* pokemon, PokemonStruct2* a2)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
pokemon->unk0 = a2->unk0;
|
||||
pokemon->level = a2->level;
|
||||
pokemon->IQ = a2->IQ;
|
||||
pokemon->IQSkills = a2->IQSkills;
|
||||
pokemon->dungeonLocation = a2->dungeonLocation;
|
||||
pokemon->isTeamLeader = a2->isTeamLeader;
|
||||
pokemon->speciesNum = a2->speciesNum;
|
||||
pokemon->tacticIndex = a2->tacticIndex;
|
||||
pokemon->pokeHP = a2->unk12;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
pokemon->offense.att[i] = a2->offense.att[i];
|
||||
pokemon->offense.def[i] = a2->offense.def[i];
|
||||
}
|
||||
|
||||
pokemon->currExp = a2->currExp;
|
||||
CopyBareMoveData(pokemon->moves, a2->moves.moves);
|
||||
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
|
||||
pokemon->name[i] = a2->name[i];
|
||||
}
|
||||
|
||||
if (a2->itemSlot.flags & ITEM_FLAG_EXISTS) {
|
||||
SlotToHeldItem(&pokemon->heldItem, &a2->itemSlot);
|
||||
}
|
||||
else {
|
||||
pokemon->heldItem.id = ITEM_NOTHING;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_808DFDC(s32 a1, PokemonStruct2* a2)
|
||||
{
|
||||
// transfer item from unk to pokemon at index
|
||||
PokemonStruct1* pokemon = &gRecruitedPokemonRef->pokemon[a1];
|
||||
if (a2->itemSlot.flags & ITEM_FLAG_EXISTS) {
|
||||
SlotToHeldItem(&pokemon->heldItem, &a2->itemSlot);
|
||||
}
|
||||
else {
|
||||
pokemon->heldItem.id = ITEM_NOTHING;
|
||||
}
|
||||
}
|
||||
|
||||
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level)
|
||||
{
|
||||
u8 buffer[12];
|
||||
s32 id = SpeciesId(_id);
|
||||
|
||||
if ((s16)gLevelCurrentPokeId != id)
|
||||
{
|
||||
OpenedFile *file;
|
||||
|
||||
gLevelCurrentPokeId = id;
|
||||
// lvmp%03d\0
|
||||
sprintf(buffer, gUnknown_810768C, id);
|
||||
file = OpenFileAndGetFileDataPtr(buffer, &gSystemFileArchive);
|
||||
DecompressATFile((char*)gLevelCurrentData, 0, file);
|
||||
CloseFile(file);
|
||||
}
|
||||
level -= 1;
|
||||
if ( level < 0 )
|
||||
level = 0;
|
||||
|
||||
*a1 = gLevelCurrentData[level];
|
||||
}
|
||||
|
||||
const u8* DecompressMoveID(const u8* src, u16* moveID)
|
||||
{
|
||||
u32 byte0;
|
||||
u32 byte1 = *src++;
|
||||
// If move >= 127 which means it uses 2 bytes and not one
|
||||
if (byte1 & 0x80) {
|
||||
byte0 = *src++;
|
||||
}
|
||||
else {
|
||||
byte0 = byte1;
|
||||
byte1 = 0;
|
||||
}
|
||||
|
||||
*moveID = (byte0 & 0x7F) | ((byte1 & 0x7F) << 7);
|
||||
return src;
|
||||
}
|
||||
|
||||
s32 GetMovesLearnedAtLevel(u16* dst, s16 species, s32 level, s32 IQPoints)
|
||||
{
|
||||
const u8* stream;
|
||||
u16 moveID; // moveID
|
||||
s32 count;
|
||||
s32 _species;
|
||||
|
||||
_species = SpeciesId(species);
|
||||
count = 0;
|
||||
|
||||
if (species == MONSTER_DECOY) return 0;
|
||||
if (species == MONSTER_NONE) return 0;
|
||||
if (species == MONSTER_MUNCHLAX) return 0;
|
||||
// get stream
|
||||
stream = GetLevelUpMoves(_species);
|
||||
|
||||
while (*stream)
|
||||
{
|
||||
u8 v12;
|
||||
|
||||
// read from stream
|
||||
stream = DecompressMoveID(stream, &moveID);
|
||||
v12 = *stream++;
|
||||
|
||||
if (v12 > level)
|
||||
break;
|
||||
if (v12 == level) {
|
||||
bool8 cond = TRUE;
|
||||
|
||||
// NOTE: these moves require IQ to be > 333
|
||||
if ((moveID == MOVE_FRENZY_PLANT) && (IQPoints < gFrenzyPlantIQReq)) cond = FALSE;
|
||||
if ((moveID == MOVE_HYDRO_CANNON) && (IQPoints < gHydroCannonIQReq)) cond = FALSE;
|
||||
if ((moveID == MOVE_BLAST_BURN) && (IQPoints < gBlastBurnIQReq)) cond = FALSE;
|
||||
if ((moveID == MOVE_VOLT_TACKLE) && (IQPoints < gVoltTackleIQReq)) cond = FALSE;
|
||||
|
||||
if (cond) {
|
||||
if (count < 16) {
|
||||
*dst++ = moveID;
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
bool8 CanMonLearnMove(u16 moveID, s16 _species)
|
||||
{
|
||||
u16 levelUpMoveID;
|
||||
u16 HMTMMoveID;
|
||||
s32 species = _species; // r4
|
||||
const u8* learnsetPtr;
|
||||
|
||||
if (species == MONSTER_DECOY) return 0;
|
||||
if (species == MONSTER_NONE) return 0;
|
||||
if (species == MONSTER_MUNCHLAX) return 0;
|
||||
if (moveID == MOVE_STRUGGLE) return 0;
|
||||
|
||||
learnsetPtr = GetLevelUpMoves(_species);
|
||||
while (*learnsetPtr) {
|
||||
learnsetPtr = DecompressMoveID(learnsetPtr, &levelUpMoveID);
|
||||
learnsetPtr++;
|
||||
if (moveID == levelUpMoveID) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
learnsetPtr = GetHMTMMoves(species);
|
||||
while (*learnsetPtr) {
|
||||
learnsetPtr = DecompressMoveID(learnsetPtr, &HMTMMoveID);
|
||||
if (HMTMMoveID == moveID) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
s32 sub_808E218(unkStruct_808E218_arg* a1, PokemonStruct1* pokemon)
|
||||
{
|
||||
s32 i;
|
||||
s32 count;
|
||||
struct EvolveStage evolve_sequence[3];
|
||||
s32 sequence_length;
|
||||
|
||||
count = 0;
|
||||
a1->count = 0;
|
||||
if (pokemon->speciesNum == MONSTER_DECOY) return 0;
|
||||
if (pokemon->speciesNum == MONSTER_NONE) return 0;
|
||||
if (pokemon->speciesNum == MONSTER_MUNCHLAX) return 0;
|
||||
|
||||
sequence_length = GetEvolutionSequence(pokemon, evolve_sequence);
|
||||
for (i = 0; i < sequence_length; i++) {
|
||||
const u8 *ptr;
|
||||
u16 result;
|
||||
|
||||
ptr = GetLevelUpMoves(evolve_sequence[i].speciesNum);
|
||||
while (*ptr) {
|
||||
s32 value;
|
||||
ptr = DecompressMoveID(ptr, &result);
|
||||
value = *ptr++;
|
||||
|
||||
if (value > evolve_sequence[i].level) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (count < NUM_MONSTERS) {
|
||||
s32 j;
|
||||
bool8 cond = 1;
|
||||
|
||||
if ((result == MOVE_FRENZY_PLANT) && (pokemon->IQ < gFrenzyPlantIQReq)) cond = 0;
|
||||
if ((result == MOVE_HYDRO_CANNON) && (pokemon->IQ < gHydroCannonIQReq)) cond = 0;
|
||||
if ((result == MOVE_BLAST_BURN) && (pokemon->IQ < gBlastBurnIQReq)) cond = 0;
|
||||
if ((result == MOVE_VOLT_TACKLE) && (pokemon->IQ < gVoltTackleIQReq)) cond = 0;
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++) {
|
||||
if ((pokemon->moves[j].moveFlags & MOVE_FLAG_EXISTS) && pokemon->moves[j].id == result) {
|
||||
cond = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (cond) {
|
||||
s32 k;
|
||||
for (k = 0; k < count && a1->unk0[k] != result; k++) {}
|
||||
|
||||
if (k == count) {
|
||||
a1->unk0[count++] = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a1->count = count;
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
s32 GetEvolutionSequence(PokemonStruct1* pokemon, struct EvolveStage* a2)
|
||||
{
|
||||
#ifdef NONMATCHING
|
||||
s32 count;
|
||||
s32 species;
|
||||
s32 i;
|
||||
|
||||
a2[0].speciesNum = pokemon->speciesNum;
|
||||
a2[0].level = pokemon->level;
|
||||
|
||||
count = 1;
|
||||
species = pokemon->speciesNum;
|
||||
i = 0;
|
||||
|
||||
for (; i < 2; i++) {
|
||||
if (!pokemon->unkC[i].level) {
|
||||
break;
|
||||
}
|
||||
species = GetPokemonEvolveFrom(species);
|
||||
if (!species) {
|
||||
break;
|
||||
}
|
||||
a2[1 + i].speciesNum = species;
|
||||
a2[1 + i].level = pokemon->unkC[i].level;
|
||||
// wrong increment order:
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
#else
|
||||
s32 count;
|
||||
s32 species;
|
||||
s32 i;
|
||||
struct EvolveStage* stage;
|
||||
struct unkPokeSubStruct_C* has_next_stage;
|
||||
|
||||
a2[0].speciesNum = pokemon->speciesNum;
|
||||
a2[0].level = pokemon->level;
|
||||
|
||||
count = 1;
|
||||
species = pokemon->speciesNum;
|
||||
i = 0;
|
||||
has_next_stage = pokemon->unkC;
|
||||
stage = &a2[1];
|
||||
|
||||
for (; i < 2; i++) {
|
||||
if (!has_next_stage->level) {
|
||||
break;
|
||||
}
|
||||
species = GetPokemonEvolveFrom(species);
|
||||
if (!species) {
|
||||
break;
|
||||
}
|
||||
stage->speciesNum = species;
|
||||
stage->level = has_next_stage->level;
|
||||
stage++;
|
||||
count++;
|
||||
has_next_stage++;
|
||||
}
|
||||
return count;
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 sub_808E400(s32 _species, s16* _a2, bool32 _bodySizeCheck, bool32 _shedinjaCheck)
|
||||
{
|
||||
// This is horrible
|
||||
s32 species = SpeciesId(_species);
|
||||
bool8 bodySizeCheck = _bodySizeCheck;
|
||||
bool8 shedinjaCheck = _shedinjaCheck;
|
||||
s32 count = 0;
|
||||
s32 i = 1;
|
||||
s16 *a2 = _a2;
|
||||
|
||||
for (i = 1; i < MONSTER_MAX; i++) {
|
||||
s32 loopSpeciesId = SpeciesId(i);
|
||||
#ifdef NONMATCHING
|
||||
s32 loopSpeciesId2 = SpeciesId(i);
|
||||
#else
|
||||
register s32 loopSpeciesId2 asm("r8") = SpeciesId(i);
|
||||
#endif // NONMATCHING
|
||||
|
||||
if (species != GetPokemonEvolveFrom(loopSpeciesId)) {
|
||||
continue;
|
||||
}
|
||||
if (!bodySizeCheck && GetBodySize(species) != GetBodySize(loopSpeciesId)) {
|
||||
continue;
|
||||
}
|
||||
if (!shedinjaCheck && loopSpeciesId == MONSTER_SHEDINJA) {
|
||||
continue;
|
||||
}
|
||||
*a2++ = loopSpeciesId2;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
void sub_808E490(Move* a1, s16 species)
|
||||
{
|
||||
u16 buffer[0x10]; // of moveIDs
|
||||
s32 i;
|
||||
s32 count = GetMovesLearnedAtLevel(buffer, species, 1, 999);
|
||||
if (count == 0) {
|
||||
count = 1;
|
||||
buffer[0] = MOVE_ITEM_TOSS;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
if (i < count) {
|
||||
while (i < count) {
|
||||
InitZeroedPPPokemonMove(&a1[i], buffer[i]);
|
||||
i++;
|
||||
}
|
||||
i = count;
|
||||
}
|
||||
while (i < MAX_MON_MOVES) {
|
||||
a1[i].moveFlags = 0;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
char* sub_808E4FC(s32 a1)
|
||||
{
|
||||
struct subStruct_203B240 *result[4];
|
||||
sub_8097DF0(gFormattedStatusNames[a1], result);
|
||||
return result[0]->pokeName;
|
||||
}
|
||||
|
||||
char* sub_808E51C(s32 a1)
|
||||
{
|
||||
struct subStruct_203B240 *result[4];
|
||||
sub_8097DF0(gFormattedStatusNames[a1], result);
|
||||
return result[0]->unk4;
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
#include "game_options.h"
|
||||
#include "input.h"
|
||||
#include "pokemon_mail.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_news2.h"
|
||||
#include "memory.h"
|
||||
#include "menu_input.h"
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "memory.h"
|
||||
#include "menu_input.h"
|
||||
#include "pokemon_mail.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_news3.h"
|
||||
#include "structs/str_802C39C.h"
|
||||
#include "text.h"
|
||||
|
@ -83,7 +83,7 @@ struct SubStruct_203B198
|
||||
u16 unkC; // x3C
|
||||
u16 unkE; // x3E
|
||||
u16 unk10; // x40
|
||||
u8 fill12[0x48-0x42]; // x42
|
||||
u8 fill12[6]; // x42
|
||||
};
|
||||
|
||||
struct UnkStruct_203B198
|
||||
@ -104,16 +104,42 @@ extern struct UnkStruct_203B198 gUnknown_203B198;
|
||||
extern UnkTextStruct1 gUnknown_2027370[4];
|
||||
extern void (*gUnknown_203B088)(s32 a0);
|
||||
|
||||
extern const struct SubStruct_203B198 gUnknown_80D48AC;
|
||||
extern const struct UnkTextStruct2 gUnknown_80D48DC;
|
||||
extern const struct UnkTextStruct2 gUnknown_80D48C4;
|
||||
extern const u32 gUnknown_80D48A0[];
|
||||
extern const u8 gUnknown_80D48F8[];
|
||||
extern const u8 gUnknown_80D4900[];
|
||||
extern const u8 gUnknown_80D4904[];
|
||||
static const u32 gUnknown_80D48A0[] = {0x7, 0x2, 0x2};
|
||||
static const struct SubStruct_203B198 gUnknown_80D48AC = {
|
||||
0x00,
|
||||
0x03,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00
|
||||
|
||||
};
|
||||
|
||||
static const UnkTextStruct2 gUnknown_80D48C4 = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
0x02, 0x0F,
|
||||
0x1A, 0x05,
|
||||
0x07, 0x00,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const UnkTextStruct2 gUnknown_80D48DC = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x02,
|
||||
0x02, 0x08,
|
||||
0x1A, 0x05,
|
||||
0x07, 0x00,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
ALIGNED(4) static const u8 sSpeakerNameSeparator[] = ": ";
|
||||
ALIGNED(4) static const u8 sUnknownTeamName[] = "????";
|
||||
ALIGNED(4) static const u8 gUnknown_80D4900[] = "%d";
|
||||
ALIGNED(4) static const u8 gUnknown_80D4904[] = "%*d" ;
|
||||
extern const u8 gUnknown_80D4908[];
|
||||
extern const u8 gUnknown_80D4910[];
|
||||
extern const u8 gSpeakerNameSeparator[];
|
||||
|
||||
extern void SetCharacterMask(int a0);
|
||||
extern void DisplayMonPortraitSprite(s32 a0, const u8 *compressedData, s32 a2);
|
||||
@ -705,7 +731,7 @@ const u8 *FormatString(const u8 *str, u8 *dst, u8 *dstMax, u16 flags)
|
||||
r9 = FALSE;
|
||||
if (flags & 8) {
|
||||
AppendString(gSpeakerNameBuffer, &dst, dstMax, flags);
|
||||
AppendString(gSpeakerNameSeparator, &dst, dstMax, flags);
|
||||
AppendString(sSpeakerNameSeparator, &dst, dstMax, flags);
|
||||
}
|
||||
}
|
||||
else if (r9) {
|
||||
@ -759,7 +785,7 @@ const u8 *FormatString(const u8 *str, u8 *dst, u8 *dstMax, u16 flags)
|
||||
sub_80920D8(sFormatBuffer_TeamName);
|
||||
}
|
||||
else {
|
||||
strcpy(sFormatBuffer_TeamName, gUnknown_80D48F8); // ????
|
||||
strcpy(sFormatBuffer_TeamName, sUnknownTeamName); // ????
|
||||
}
|
||||
txtPtr = sFormatBuffer_TeamName;
|
||||
break;
|
||||
|
@ -276,19 +276,8 @@ gUnknown_202F3D0: /* 202F3D0 (sub_80867F4 - sub_8086854) */
|
||||
gUnknown_202F3D8: /* 202F3D8 (sub_8085B4C - sub_8085B80) */
|
||||
.space 0x8
|
||||
|
||||
gMonsterParameters: /* 202F3E0 (LoadMonsterParameters - IsPokemonDialogueSpriteAvail) */
|
||||
.space 0x4
|
||||
gMonsterParametersFile: /* 202F3E4 (LoadMonsterParameters) */
|
||||
.space 0x4
|
||||
gShadowSprites: /* 202F3E8 (InitShadowSprites - AddShadowSprite) */
|
||||
.space 0x18
|
||||
gRecruitedPokemon: /* 202F400 [used everywhere tbh] */
|
||||
.space 0x90E8
|
||||
gLevelCurrentPokeId: /* 20384E8 (LoadMonsterParameters - GetPokemonLevelData) */
|
||||
.space 0x8
|
||||
gLevelCurrentData: /* 20384F0 (GetPokemonLevelData) */
|
||||
.space 0x4B0
|
||||
|
||||
.include "src/pokemon.o"
|
||||
.include "src/items.o"
|
||||
.include "src/rescue_team_info.o"
|
||||
.space 0x4
|
||||
|
Loading…
x
Reference in New Issue
Block a user