Merge pull request #286 from SethBarberee/dec_2024
Some checks are pending
GithubCI / build (push) Waiting to run

Pokemon.s
This commit is contained in:
Seth Barberee 2024-12-16 17:13:03 -08:00 committed by GitHub
commit 47339753e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 4023 additions and 4860 deletions

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

File diff suppressed because it is too large Load Diff

1345
data/data_81076E4.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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)
{

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View File

@ -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);

View File

@ -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(&param_1->unk84);
}
if ((param_1->unk7C == 3) || (param_1->unk7C == -2)) {
SetDungeonLocationInfo(&param_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);

View File

@ -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};

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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 {

View File

@ -1,5 +1,5 @@
#include "global.h"
#include "pokemon_mid.h"
#include "pokemon.h"
#include "dungeon_util.h"
#include "code_8069D4C.h"

View File

@ -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

View File

@ -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"

View File

@ -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)
{

View File

@ -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"

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
IWRAM_DATA u32 gUnknown_3001198[0x270] = {0};
EWRAM_DATA_2 s32 gUnknown_203B470 = {0};

View File

@ -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;
}
}

View File

@ -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;

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
#include "dungeon.h"
#include "exclusive_pokemon.h"
#include "event_flag.h"

View File

@ -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};

View File

@ -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"

View File

@ -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();

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
#include "play_time.h"
#include "code_8092334.h"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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;
}

View File

@ -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"

View File

@ -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"

View File

@ -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;

View File

@ -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