summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/record_mixing.s543
-rw-r--r--data/record_mixing.s68
-rw-r--r--data/trainer_card.s62
-rw-r--r--include/flags.h1
-rw-r--r--include/global.h4
-rw-r--r--include/graphics.h11
-rw-r--r--include/record_mixing.h10
-rw-r--r--include/save.h2
-rw-r--r--include/trainer_card.h16
-rw-r--r--include/vars.h1
-rw-r--r--ld_script.txt5
-rw-r--r--src/record_mixing.c882
-rw-r--r--src/save.c6
-rw-r--r--src/trainer_card.c903
14 files changed, 1061 insertions, 1453 deletions
diff --git a/asm/record_mixing.s b/asm/record_mixing.s
deleted file mode 100644
index ce0121a40..000000000
--- a/asm/record_mixing.s
+++ /dev/null
@@ -1,543 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80B9C6C
-sub_80B9C6C: @ 80B9C6C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x58
- str r0, [sp, 0x2C]
- str r1, [sp, 0x30]
- str r3, [sp, 0x38]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x34]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x40]
- ldr r0, _080B9DA8 @ =gLinkPlayers
- ldrh r0, [r0, 0x4]
- bl SeedRng
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r3, 0
- add r0, sp, 0x1C
- mov r9, r0
- movs r1, 0x1D
- add r1, sp
- mov r10, r1
- mov r2, sp
- adds r2, 0xC
- str r2, [sp, 0x4C]
- movs r7, 0xFF
- add r4, sp, 0x8
- movs r2, 0
- mov r6, r9
- mov r5, r10
-_080B9CBC:
- mov r1, sp
- adds r1, r3
- adds r1, 0x4
- ldrb r0, [r1]
- orrs r0, r7
- strb r0, [r1]
- adds r0, r4, r3
- strb r2, [r0]
- lsls r1, r3, 1
- adds r0, r6, r1
- strb r2, [r0]
- adds r1, r5, r1
- strb r2, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x3
- bls _080B9CBC
- movs r4, 0
- str r4, [sp, 0x3C]
- movs r3, 0
- mov r1, r8
- lsls r0, r1, 16
- lsrs r1, r0, 16
- str r0, [sp, 0x50]
- ldr r4, [sp, 0x30]
- ldr r0, [sp, 0x34]
- adds r2, r4, 0
- muls r2, r0
- str r2, [sp, 0x48]
- ldr r2, [sp, 0x3C]
- cmp r2, r1
- bcs _080B9D46
- mov r8, r1
-_080B9D00:
- ldr r4, [sp, 0x30]
- adds r0, r4, 0
- muls r0, r3
- ldr r1, [sp, 0x2C]
- adds r6, r1, r0
- ldr r0, [r6, 0x70]
- cmp r0, 0
- beq _080B9D3C
- movs r7, 0
- cmp r7, r0
- bcs _080B9D3C
- adds r4, r6, 0
- adds r4, 0x74
- mov r2, r9
- lsls r1, r3, 1
- movs r5, 0x1
-_080B9D20:
- lsls r0, r7, 1
- adds r0, r4, r0
- ldrh r0, [r0]
- cmp r0, 0
- bne _080B9D30
- adds r0, r7, r1
- adds r0, r2, r0
- strb r5, [r0]
-_080B9D30:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r0, [r6, 0x70]
- cmp r7, r0
- bcc _080B9D20
-_080B9D3C:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, r8
- bcc _080B9D00
-_080B9D46:
- movs r7, 0
- movs r3, 0
- ldr r2, [sp, 0x50]
- cmp r2, 0
- beq _080B9E3E
- mov r4, sp
- adds r4, 0x24
- str r4, [sp, 0x44]
- movs r0, 0x25
- add r0, sp
- mov r8, r0
-_080B9D5C:
- ldr r1, [sp, 0x30]
- adds r0, r1, 0
- muls r0, r3
- ldr r2, [sp, 0x2C]
- adds r6, r2, r0
- lsls r1, r3, 1
- mov r4, r9
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080B9D7C
- mov r2, r10
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B9D86
-_080B9D7C:
- ldr r0, [sp, 0x3C]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x3C]
-_080B9D86:
- mov r4, r9
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B9DAC
- mov r2, r10
- adds r0, r2, r1
- ldrb r2, [r0]
- cmp r2, 0
- bne _080B9DAC
-_080B9D9A:
- lsls r1, r7, 1
- ldr r4, [sp, 0x44]
- adds r0, r4, r1
- strb r3, [r0]
- add r1, r8
- strb r2, [r1]
- b _080B9E2C
- .align 2, 0
-_080B9DA8: .4byte gLinkPlayers
-_080B9DAC:
- mov r2, r9
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080B9DC0
- mov r4, r10
- adds r0, r4, r1
- ldrb r2, [r0]
- cmp r2, 0x1
- beq _080B9D9A
-_080B9DC0:
- mov r2, r9
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B9E32
- mov r4, r10
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080B9E32
- lsls r5, r7, 1
- ldr r1, [sp, 0x44]
- adds r0, r1, r5
- strb r3, [r0]
- adds r0, r6, 0
- str r3, [sp, 0x54]
- bl sub_80B9BBC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- adds r0, 0x38
- bl sub_80B9BBC
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r3, [sp, 0x54]
- cmp r4, 0
- bne _080B9E0A
- cmp r1, 0
- beq _080B9E0E
- mov r2, r8
- adds r1, r2, r5
- movs r0, 0x1
- strb r0, [r1]
- b _080B9E2C
-_080B9E0A:
- cmp r1, 0
- beq _080B9E26
-_080B9E0E:
- str r3, [sp, 0x54]
- bl Random
- mov r4, r8
- adds r2, r4, r5
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- strb r0, [r2]
- ldr r3, [sp, 0x54]
- b _080B9E2C
-_080B9E26:
- mov r2, r8
- adds r0, r2, r5
- strb r1, [r0]
-_080B9E2C:
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
-_080B9E32:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r4, [sp, 0x50]
- cmp r0, r4
- bcc _080B9D5C
-_080B9E3E:
- movs r3, 0
- ldr r1, [sp, 0x48]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 3
- ldr r2, [sp, 0x2C]
- adds r6, r2, r0
- ldr r1, [sp, 0x4C]
-_080B9E4E:
- lsls r0, r3, 2
- adds r0, r1, r0
- str r6, [r0]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x3
- bls _080B9E4E
- ldr r0, [sp, 0x38]
- bl sub_80B9C4C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r4, [sp, 0x3C]
- cmp r4, 0x3
- beq _080B9E9C
- cmp r4, 0x3
- bgt _080B9E82
- cmp r4, 0x2
- beq _080B9E8A
- b _080B9EF0
-_080B9E82:
- ldr r0, [sp, 0x3C]
- cmp r0, 0x4
- beq _080B9EBC
- b _080B9EF0
-_080B9E8A:
- add r2, sp, 0x24
- movs r0, 0x1
- str r0, [sp]
- ldr r0, [sp, 0x2C]
- ldr r1, [sp, 0x30]
- movs r3, 0
- bl sub_80B9BC4
- b _080B9EF0
-_080B9E9C:
- ldr r0, _080B9EB8 @ =gUnknown_083D02B4
- lsls r1, 1
- adds r2, r1, r0
- ldrb r3, [r2]
- adds r0, 0x1
- adds r1, r0
- ldrb r0, [r1]
- add r2, sp, 0x24
- str r0, [sp]
- ldr r0, [sp, 0x2C]
- ldr r1, [sp, 0x30]
- bl sub_80B9BC4
- b _080B9EF0
- .align 2, 0
-_080B9EB8: .4byte gUnknown_083D02B4
-_080B9EBC:
- add r6, sp, 0x24
- ldr r4, _080B9F2C @ =gUnknown_083D02BA
- lsls r5, r1, 2
- adds r0, r5, r4
- ldrb r3, [r0]
- adds r0, r4, 0x1
- adds r0, r5, r0
- ldrb r0, [r0]
- str r0, [sp]
- ldr r0, [sp, 0x2C]
- ldr r1, [sp, 0x30]
- adds r2, r6, 0
- bl sub_80B9BC4
- adds r0, r4, 0x2
- adds r0, r5, r0
- ldrb r3, [r0]
- adds r4, 0x3
- adds r5, r4
- ldrb r0, [r5]
- str r0, [sp]
- ldr r0, [sp, 0x2C]
- ldr r1, [sp, 0x30]
- adds r2, r6, 0
- bl sub_80B9BC4
-_080B9EF0:
- ldr r1, [sp, 0x2C]
- ldr r2, [sp, 0x48]
- adds r6, r1, r2
- ldr r4, _080B9F30 @ =gSaveBlock1
- ldr r1, _080B9F34 @ =0x0000303c
- adds r0, r4, r1
- adds r1, r6, 0
- movs r2, 0x38
- bl memcpy
- ldr r2, _080B9F38 @ =0x00003074
- adds r4, r2
- adds r1, r6, 0
- adds r1, 0x38
- adds r0, r4, 0
- movs r2, 0x38
- bl memcpy
- ldr r0, [sp, 0x40]
- bl SeedRng
- add sp, 0x58
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B9F2C: .4byte gUnknown_083D02BA
-_080B9F30: .4byte gSaveBlock1
-_080B9F34: .4byte 0x0000303c
-_080B9F38: .4byte 0x00003074
- thumb_func_end sub_80B9C6C
-
- thumb_func_start sub_80B9F3C
-sub_80B9F3C: @ 80B9F3C
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- cmp r1, 0
- beq _080BA000
- ldrh r0, [r4]
- cmp r0, 0
- beq _080BA000
- bl GetPocketByItemId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bne _080B9FC8
- ldrh r0, [r4]
- movs r1, 0x1
- bl CheckBagHasItem
- lsls r0, 24
- cmp r0, 0
- bne _080B9FB8
- ldrh r0, [r4]
- movs r1, 0x1
- bl CheckPCHasItem
- lsls r0, 24
- cmp r0, 0
- bne _080B9FB8
- ldrh r0, [r4]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- beq _080B9FB8
- ldr r0, _080B9FA4 @ =0x00004001
- ldrh r1, [r4]
- bl VarSet
- ldr r0, _080B9FA8 @ =gStringVar1
- ldr r1, _080B9FAC @ =gLinkPlayers + 0x8
- bl StringCopy
- ldrh r1, [r4]
- ldr r0, _080B9FB0 @ =0x00000113
- cmp r1, r0
- bne _080BA000
- ldr r0, _080B9FB4 @ =0x00000853
- bl FlagSet
- b _080BA000
- .align 2, 0
-_080B9FA4: .4byte 0x00004001
-_080B9FA8: .4byte gStringVar1
-_080B9FAC: .4byte gLinkPlayers + 0x8
-_080B9FB0: .4byte 0x00000113
-_080B9FB4: .4byte 0x00000853
-_080B9FB8:
- ldr r0, _080B9FC4 @ =0x00004001
- movs r1, 0
- bl VarSet
- b _080BA000
- .align 2, 0
-_080B9FC4: .4byte 0x00004001
-_080B9FC8:
- ldrh r0, [r4]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B9FF8
- ldr r0, _080B9FEC @ =0x00004001
- ldrh r1, [r4]
- bl VarSet
- ldr r0, _080B9FF0 @ =gStringVar1
- ldr r1, _080B9FF4 @ =gLinkPlayers + 0x8
- bl StringCopy
- b _080BA000
- .align 2, 0
-_080B9FEC: .4byte 0x00004001
-_080B9FF0: .4byte gStringVar1
-_080B9FF4: .4byte gLinkPlayers + 0x8
-_080B9FF8:
- ldr r0, _080BA008 @ =0x00004001
- movs r1, 0
- bl VarSet
-_080BA000:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BA008: .4byte 0x00004001
- thumb_func_end sub_80B9F3C
-
- thumb_func_start sub_80BA00C
-sub_80BA00C: @ 80BA00C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080BA030 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bhi _080BA09C
- lsls r0, 2
- ldr r1, _080BA034 @ =_080BA038
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080BA030: .4byte gTasks
-_080BA034: .4byte _080BA038
- .align 2, 0
-_080BA038:
- .4byte _080BA086
- .4byte _080BA086
- .4byte _080BA050
- .4byte _080BA05A
- .4byte _080BA074
- .4byte _080BA08E
-_080BA050:
- bl SetSecretBase2Field_9_AndHideBG
- bl sub_8125E2C
- b _080BA086
-_080BA05A:
- bl sub_8125E6C
- lsls r0, 24
- cmp r0, 0
- beq _080BA09C
- bl ClearSecretBase2Field_9_2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x8]
- strh r1, [r4, 0xA]
- b _080BA09C
-_080BA074:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- ble _080BA09C
- bl sub_800832C
-_080BA086:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080BA09C
-_080BA08E:
- ldr r0, _080BA0A4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080BA09C
- adds r0, r2, 0
- bl DestroyTask
-_080BA09C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BA0A4: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_80BA00C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/record_mixing.s b/data/record_mixing.s
deleted file mode 100644
index 8b46e1ed3..000000000
--- a/data/record_mixing.s
+++ /dev/null
@@ -1,68 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-recordMixingSecretBases:: @ 83D026C
- @ gSaveBlock1.secretBases
- .4byte gSaveBlock1 + 0x1A08
-
- .align 2
-recordMixingTvShows:: @ 83D0270
- @ gSaveBlock1.tvShows
- .4byte gSaveBlock1 + 0x2738
-
- .align 2
-gUnknown_083D0274:: @ 83D0274
- .4byte gSaveBlock1 + 0x2ABC
-
- .align 2
-gUnknown_083D0278:: @ 83D0278
- .4byte gSaveBlock1 + 0x2D94
-
- .align 2
-recordMixingEasyChatPairs:: @ 83D027C
- @ gSaveBlock1.easyChatPairs
- .4byte gSaveBlock1 + 0x2DD4
-
- .align 2
-gUnknown_083D0280:: @ 83D0280
- .4byte gUnknown_02038738
-
- .align 2
-gUnknown_083D0284:: @ 83D0284
- .4byte gSaveBlock2+0xA8
-
-gUnknown_083D0288:: @ 83D0288
- .byte 1, 0
-
-gUnknown_083D028A:: @ 83D028A
- .byte 1, 2, 0
- .byte 2, 0, 1
-
-gUnknown_083D0290:: @ 83D0290
- .byte 1, 0, 3, 2
- .byte 3, 0, 1, 2
- .byte 2, 0, 3, 1
- .byte 1, 3, 0, 2
- .byte 2, 3, 0, 1
- .byte 3, 2, 0, 1
- .byte 1, 2, 3, 0
- .byte 2, 3, 1, 0
- .byte 3, 2, 1, 0
-
-gUnknown_083D02B4:: @ 83D02B4
- .byte 0, 1
- .byte 1, 2
- .byte 2, 0
-
-gUnknown_083D02BA:: @ 83D02BA
- .byte 0, 1
- .byte 2, 3
-
- .byte 0, 2
- .byte 1, 3
-
- .byte 0, 3
- .byte 2, 1
diff --git a/data/trainer_card.s b/data/trainer_card.s
deleted file mode 100644
index 75e0041dd..000000000
--- a/data/trainer_card.s
+++ /dev/null
@@ -1,62 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gBadgesTiles:: @ 83B5AB8
- .incbin "graphics/trainer_card/badges.4bpp"
-
-@ XXX: what is this?
- .align 2
- .4byte 0x2000000
-
- .align 2
-gUnknown_083B5EBC:: @ 83B5EBC
- .4byte sub_8093864
- .4byte sub_80938A8
- .4byte sub_80938CC
- .4byte sub_8093918
- .4byte sub_8093938
- .4byte sub_8093954
- .4byte sub_8093980
-
- .align 2
-gUnknown_083B5ED8:: @ 83B5ED8
- .4byte sub_8093AA0
- .4byte sub_8093AF0
- .4byte sub_8093C0C
- .4byte sub_8093C38
- .4byte sub_8093D50
-
- .align 2
-gUnknown_083B5EEC:: @ 83B5EEC
- .4byte gUnknown_08E8CAC0
- .4byte gUnknown_08E8D4C0
-
-gUnknown_083B5EF4:: @ 83B5EF4
- .string " : $"
-
- .align 2
-gUnknown_083B5EF8:: @ 83B5EF8
- .4byte gMenuTrainerCard0Star_Pal
- .4byte gMenuTrainerCard1Star_Pal
- .4byte gMenuTrainerCard2Star_Pal
- .4byte gMenuTrainerCard3Star_Pal
- .4byte gMenuTrainerCard4Star_Pal
-
-gUnknown_083B5F0C:: @ 83B5F0C
- .incbin "graphics/trainer_card/83B5F0C.gbapal"
-
- .align 2
-gBadgesPalette:: @ 83B5F2C
- .incbin "graphics/trainer_card/badges.gbapal"
-
-gUnknown_083B5F4C:: @ 83B5F4C
- .incbin "graphics/trainer_card/83B5F4C.gbapal"
-
-gUnknown_083B5F6C:: @ 83B5F6C
- .incbin "graphics/trainer_card/83B5F6C.gbapal"
-
-gUnknown_083B5F8C:: @ 83B5F8C
- .incbin "graphics/trainer_card/83B5F8C_map.bin"
diff --git a/include/flags.h b/include/flags.h
index 8ed15cb99..a60de6ea0 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -71,6 +71,7 @@
#define SYS_BRAILLE_STRENGTH 0x850
#define SYS_BRAILLE_WAIT 0x851
#define SYS_BRAILLE_FLY 0x852
+#define SYS_HAS_EON_TICKET 0x853
#define SYS_POKEMON_LEAGUE_FLY 0x854
diff --git a/include/global.h b/include/global.h
index c29797638..c9a092f05 100644
--- a/include/global.h
+++ b/include/global.h
@@ -536,7 +536,9 @@ struct GabbyAndTyData
struct RecordMixing_UnknownStructSub
{
- u8 data[0x38];
+ u32 unk0;
+ u8 data[0x34];
+ //u8 data[0x38];
};
struct RecordMixing_UnknownStruct
diff --git a/include/graphics.h b/include/graphics.h
index fb9781147..fa6a85513 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2549,4 +2549,15 @@ extern const u8 gBerryPalette_Enigma[];
extern const u8 gUnknown_08E96EC8[];
+extern const u8 gMenuTrainerCard_Gfx[];
+extern const u16 gMenuTrainerCard0Star_Pal[];
+extern const u16 gMenuTrainerCard1Star_Pal[];
+extern const u16 gMenuTrainerCard2Star_Pal[];
+extern const u16 gMenuTrainerCard3Star_Pal[];
+extern const u16 gMenuTrainerCard4Star_Pal[];
+extern const u8 gUnknown_08E8CAC0[];
+extern const u8 gUnknown_08E8CFC0[];
+extern const u8 gUnknown_08E8D4C0[];
+extern const u8 gUnknown_08E8D9C0[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/include/record_mixing.h b/include/record_mixing.h
index 103f5ad64..ca60b04a7 100644
--- a/include/record_mixing.h
+++ b/include/record_mixing.h
@@ -14,8 +14,8 @@ void Task_RecordMixing_CopyReceiveBuffer(u8 taskId);
void sub_80B99B4(u8 taskId);
void Task_RecordMixing_ReceivePacket(u8 taskId);
void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId);
-void *LoadPtrFromTaskData(u16 *ptr);
-void StorePtrInTaskData(void *ptr, u16 *data);
+void *LoadPtrFromTaskData(u16 *);
+void StorePtrInTaskData(void *, u16 *);
u8 GetMultiplayerId_(void);
u16 *GetPlayerRecvBuffer(u8 player);
void sub_80B9A78(void);
@@ -23,12 +23,12 @@ void sub_80B9A88(u8 *a);
void sub_80B9B1C(u8 *a, size_t size, u8 index);
void sub_80B9B70(u8 *a, size_t size, u8 index);
u8 sub_80B9BBC(u16 *a);
-void sub_80B9BC4(struct RecordMixing_UnknownStruct *, size_t, u8 [][2], u8, u8);
+void sub_80B9BC4(u8 *, size_t, u8[][2], u8 d, u8 e);
u8 sub_80B9C4C(u8 *a);
// ASM
-void sub_80B9C6C(struct RecordMixing_UnknownStruct *, u32, u8, void *);
-void sub_80B9F3C(void *, u8);
+void sub_80B9C6C(u8 *, u32, u8, void *);
+void sub_80B9F3C(u16 *, u8);
void sub_80BA00C(u8);
#endif // GUARD_RECORD_MIXING_H
diff --git a/include/save.h b/include/save.h
index 3feaa1f3d..6c47c6f60 100644
--- a/include/save.h
+++ b/include/save.h
@@ -74,7 +74,7 @@ bool8 sub_8125DA8(void);
u8 sub_8125DDC(void);
u8 sub_8125E04(void);
u8 sub_8125E2C(void);
-u8 sub_8125E6C(void);
+bool8 sub_8125E6C(void);
u8 sub_8125EC8(u8 a1);
bool8 unref_sub_8125F4C(struct UnkSaveSection *a1);
u8 unref_sub_8125FA0(void);
diff --git a/include/trainer_card.h b/include/trainer_card.h
index bd0c808dd..98b5934f7 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -33,20 +33,4 @@ void sub_8093130(u8, void (*)(void));
void sub_8093390(struct TrainerCard *);
u8 sub_80934C4(u8 id);
-// gUnknown_083B5EBC:: @ 83B5EBC
-bool8 sub_8093864();
-bool8 sub_80938A8();
-bool8 sub_80938CC();
-bool8 sub_8093918();
-bool8 sub_8093938();
-bool8 sub_8093954();
-bool8 sub_8093980();
-
-// gUnknown_083B5ED8:: @ 83B5ED8
-bool8 sub_8093AA0();
-bool8 sub_8093AF0();
-bool8 sub_8093C0C(struct TrainerCard *trainerCard);
-bool8 sub_8093C38();
-bool8 sub_8093D50(void);
-
#endif // GUARD_TRAINER_CARD_H
diff --git a/include/vars.h b/include/vars.h
index e08f344d4..efbb462a4 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -1,6 +1,7 @@
#ifndef GUARD_VARS_H
#define GUARD_VARS_H
+#define VAR_0x4000 0x4000
#define VAR_0x4001 0x4001
#define VAR_0x4002 0x4002
#define VAR_0x4003 0x4003
diff --git a/ld_script.txt b/ld_script.txt
index 439f6f1c6..4bd19d780 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -168,7 +168,6 @@ SECTIONS {
src/money.o(.text);
asm/contest_effect.o(.text);
src/record_mixing.o(.text);
- asm/record_mixing.o(.text);
src/sound_check_menu.o(.text);
src/secret_base.o(.text);
asm/secret_base.o(.text_80BC1D0);
@@ -390,7 +389,6 @@ SECTIONS {
src/option_menu.o(.rodata);
src/pokedex.o(.rodata);
src/trainer_card.o(.rodata);
- data/trainer_card.o(.rodata);
src/battle_party_menu.o(.rodata);
data/pokemon_storage_system.o(.rodata);
data/pokemon_icon.o(.rodata);
@@ -408,7 +406,8 @@ SECTIONS {
data/naming_screen.o(.rodata);
data/money.o(.rodata);
data/contest_effect.o(.rodata);
- data/record_mixing.o(.rodata);
+ src/record_mixing.o(.data);
+ src/record_mixing.o(.rodata);
src/sound_check_menu.o(.rodata);
data/secret_base.o(.rodata);
data/tv.o(.rodata);
diff --git a/src/record_mixing.c b/src/record_mixing.c
index e1a72cf2e..a8daa9220 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -6,11 +6,16 @@
#include "dewford_trend.h"
#include "event_data.h"
#include "fldeff_80C5CD4.h"
+#include "item.h"
+#include "items.h"
+#include "load_save.h"
#include "link.h"
#include "mauville_old_man.h"
#include "menu.h"
#include "mystery_event_script.h"
+#include "rng.h"
#include "rom4.h"
+#include "save.h"
#include "script.h"
#include "secret_base.h"
#include "songs.h"
@@ -20,25 +25,25 @@
#include "task.h"
#include "tv.h"
+extern u8 ewram[];
+#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000))
+#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000))
-extern void *recordMixingSecretBases;
-extern void *recordMixingTvShows;
-extern void *gUnknown_083D0274;
-extern void *gUnknown_083D0278;
-extern void *recordMixingEasyChatPairs;
-extern void *gUnknown_083D0284;
-extern u8 gUnknown_083D0288[2];
-extern u8 gUnknown_083D028A[2][3];
-extern u8 gUnknown_083D0290[9][4];
-
-extern struct RecordMixing_UnknownStruct gUnknown_02038738; //Don't know what type this points to
-extern struct RecordMixing_UnknownStruct *gUnknown_083D0280;
+extern struct RecordMixing_UnknownStruct gUnknown_02038738;
extern u16 gSpecialVar_0x8005;
extern u32 gUnknown_03005D2C;
extern u8 gUnknown_03000718;
extern u8 gUnknown_0300071C[];
extern bool8 gReceivedRemoteLinkPlayers;
+void *recordMixingSecretBases = &gSaveBlock1.secretBases;
+void *recordMixingTvShows = &gSaveBlock1.tvShows;
+void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC;
+void *gUnknown_083D0278 = &gSaveBlock1.oldMan;
+void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
+struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738;
+void *gUnknown_083D0284 = &gSaveBlock2.filler_A8;
+
#define BUFFER_CHUNK_SIZE 200
void sub_80B929C(void)
@@ -46,7 +51,8 @@ void sub_80B929C(void)
sub_8083A84(Task_RecordMixing_Main);
}
-struct PlayerRecords {
+struct PlayerRecords
+{
struct SecretBaseRecord secretBases[20];
TVShow tvShows[25];
u8 filler1004[0x40];
@@ -57,9 +63,6 @@ struct PlayerRecords {
u16 filler11C8[0x34];
};
-extern struct PlayerRecords unk_2008000;
-extern struct PlayerRecords unk_2018000;
-
void RecordMixing_PrepareExchangePacket(void)
{
sub_80BC300();
@@ -67,14 +70,14 @@ void RecordMixing_PrepareExchangePacket(void)
memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases));
memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows));
- memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
- memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
- memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
+ memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004));
+ memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044));
+ memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs));
gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0];
gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1];
sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738);
memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct));
- memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
+ memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124));
if (GetMultiplayerId() == 0)
unk_2018000.filler11C8[0] = sub_8126338();
@@ -86,71 +89,77 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a);
sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
- //UB: Too many arguments for function "sub_80FA4E4"
sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
- sub_80B9C6C(&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
+ sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a);
sub_80B9F3C(unk_2008000.filler11C8, a);
}
+#define tCounter data[0]
+
void Task_RecordMixing_SoundEffect(u8 taskId)
{
- gTasks[taskId].data[0]++;
- if (gTasks[taskId].data[0] == 50)
+ gTasks[taskId].tCounter++;
+ if (gTasks[taskId].tCounter == 50)
{
PlaySE(SE_W213);
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tCounter = 0;
}
}
-#define TD_STATE 0
+#undef tCounter
+
+
+#define tState data[0]
+#define tSndEffTaskId data[15]
+
void Task_RecordMixing_Main(u8 taskId)
{
- s16 *taskData = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
- switch (taskData[TD_STATE])
+ switch (tState)
{
case 0: // init
sub_8007270(gSpecialVar_0x8005);
- VarSet(0x4000, 1);
+ VarSet(VAR_0x4000, 1);
gUnknown_03000718 = 0;
RecordMixing_PrepareExchangePacket();
CreateRecordMixingSprite();
- taskData[TD_STATE] = 1;
- taskData[10] = CreateTask(sub_80B95F0, 0x50);
- taskData[15] = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
+ tState = 1;
+ data[10] = CreateTask(sub_80B95F0, 0x50);
+ tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
break;
case 1: // wait for sub_80B95F0
- if (!gTasks[taskData[10]].isActive)
+ if (!gTasks[data[10]].isActive)
{
- taskData[TD_STATE] = 2;
+ tState = 2;
FlagSet(SYS_MIX_RECORD);
DestroyRecordMixingSprite();
- DestroyTask(taskData[15]);
+ DestroyTask(tSndEffTaskId);
}
break;
case 2:
- taskData[10] = CreateTask(sub_80BA00C, 10);
- taskData[TD_STATE] = 3;
+ data[10] = CreateTask(sub_80BA00C, 10);
+ tState = 3;
PlaySE(SE_W226);
break;
case 3: // wait for sub_80BA00C
- if (!gTasks[taskData[10]].isActive)
+ if (!gTasks[data[10]].isActive)
{
- taskData[TD_STATE] = 4;
- taskData[10] = sub_8083664();
+ tState = 4;
+ data[10] = sub_8083664();
sub_80720B0();
MenuPrint(gOtherText_MixingComplete, 2, 15);
- taskData[8] = 0;
+ data[8] = 0;
}
break;
case 4: // wait 60 frames
- taskData[8]++;
- if (taskData[8] > 60)
- taskData[TD_STATE] = 5;
+ data[8]++;
+ if (data[8] > 60)
+ tState = 5;
break;
case 5:
- if (!gTasks[taskData[10]].isActive)
+ if (!gTasks[data[10]].isActive)
{
sub_8055588();
MenuZeroFillScreen();
@@ -165,14 +174,14 @@ void sub_80B95F0(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[TD_STATE])
+ switch (task->tState)
{
case 0:
sub_80B9A78();
MenuDisplayMessageBox();
MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15);
task->data[8] = 0x708;
- task->data[TD_STATE] = 400;
+ task->tState = 400;
ClearLinkCallback_2();
break;
case 100: // wait 20 frames
@@ -180,48 +189,48 @@ void sub_80B95F0(u8 taskId)
if (task->data[12] > 20)
{
task->data[12] = 0;
- task->data[TD_STATE] = 101;
+ task->tState = 101;
}
break;
case 101:
- {
- u8 players = GetLinkPlayerCount_2();
-
- if (IsLinkMaster() == 1)
{
- if (players == sub_800820C())
+ u8 players = GetLinkPlayerCount_2();
+
+ if (IsLinkMaster() == 1)
{
- PlaySE(0x15);
- task->data[TD_STATE] = 201;
- task->data[12] = 0;
+ if (players == sub_800820C())
+ {
+ PlaySE(SE_PIN);
+ task->tState = 201;
+ task->data[12] = 0;
+ }
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ task->tState = 301;
}
- }
- else
- {
- PlaySE(0x16);
- task->data[TD_STATE] = 301;
}
break;
- }
case 201:
if (sub_800820C() == GetLinkPlayerCount_2())
{
if (++task->data[12] > GetLinkPlayerCount_2() * 30)
{
sub_8007F4C();
- task->data[TD_STATE] = 1;
+ task->tState = 1;
}
}
break;
case 301:
if (sub_800820C() == GetLinkPlayerCount_2())
- task->data[TD_STATE] = 1;
+ task->tState = 1;
break;
case 400: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
- task->data[TD_STATE] = 1;
+ task->tState = 1;
task->data[12] = 0;
}
break;
@@ -229,31 +238,30 @@ void sub_80B95F0(u8 taskId)
if (gReceivedRemoteLinkPlayers)
{
ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
- task->data[TD_STATE] = 5;
+ task->tState = 5;
}
break;
case 2:
- {
- u8 subTaskId;
-
- task->data[6] = GetLinkPlayerCount_2();
- task->data[TD_STATE] = 0;
- task->data[5] = GetMultiplayerId_();
- task->func = Task_RecordMixing_SendPacket;
- StorePtrInTaskData(&unk_2018000, &task->data[2]);
- subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
- task->data[10] = subTaskId;
- gTasks[subTaskId].data[0] = taskId;
- //StorePtrInTaskData((void*)0x2008000, &gTasks[subTaskId].data[5]);
- StorePtrInTaskData((u8 *)&unk_2018000 - 0x10000, &gTasks[subTaskId].data[5]);
+ {
+ u8 subTaskId;
+
+ task->data[6] = GetLinkPlayerCount_2();
+ task->tState = 0;
+ task->data[5] = GetMultiplayerId_();
+ task->func = Task_RecordMixing_SendPacket;
+ StorePtrInTaskData(&unk_2018000, &task->data[2]);
+ subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
+ task->data[10] = subTaskId;
+ gTasks[subTaskId].data[0] = taskId;
+ StorePtrInTaskData((u8 *)&unk_2008000, &gTasks[subTaskId].data[5]);
+ }
break;
- }
case 5: // wait 60 frames
task->data[10]++;
if (task->data[10] > 60)
{
task->data[10] = 0;
- task->data[TD_STATE] = 2;
+ task->tState = 2;
}
break;
}
@@ -264,29 +272,29 @@ void Task_RecordMixing_SendPacket(u8 taskId)
struct Task *task = &gTasks[taskId];
// does this send the data 24 times?
- switch (task->data[TD_STATE])
+ switch (task->tState)
{
case 0: //Copy record data to send buffer
- {
- void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4];
+ {
+ void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4];
- memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE);
- task->data[TD_STATE]++;
+ memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE);
+ task->tState++;
+ }
break;
- }
case 1:
if (GetMultiplayerId() == 0)
sub_8007E9C(1);
- task->data[TD_STATE]++;
+ task->tState++;
break;
case 2:
break;
case 3:
task->data[4]++;
if ((u16)task->data[4] == 24)
- task->data[TD_STATE]++;
+ task->tState++;
else
- task->data[TD_STATE] = 0;
+ task->tState = 0;
break;
case 4:
if (!gTasks[task->data[10]].isActive)
@@ -325,7 +333,6 @@ void Task_RecordMixing_CopyReceiveBuffer(u8 taskId)
}
gTasks[task->data[0]].data[0]++;
}
- //_080B998A
if (handledPlayers == GetLinkPlayerCount())
DestroyTask(taskId);
}
@@ -353,15 +360,15 @@ void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId)
gUnknown_03000718 = 1;
}
-void *LoadPtrFromTaskData(u16 *ptr)
+void *LoadPtrFromTaskData(u16 *taskData)
{
- return (void *)(*ptr | *(ptr + 1) << 16);
+ return (void *)(taskData[0] | (taskData[1] << 16));
}
-void StorePtrInTaskData(void *ptr, u16 *data)
+void StorePtrInTaskData(void *ptr, u16 *taskData)
{
- *data = (u32)ptr;
- *(data + 1) = (u32)ptr >> 16;
+ taskData[0] = (u32)ptr;
+ taskData[1] = (u32)ptr >> 16;
}
u8 GetMultiplayerId_(void)
@@ -379,6 +386,27 @@ void sub_80B9A78(void)
gUnknown_03005D2C = sizeof(struct PlayerRecords);
}
+const u8 gUnknown_083D0288[2] = {1, 0};
+
+const u8 gUnknown_083D028A[2][3] =
+{
+ {1, 2, 0},
+ {2, 0, 1},
+};
+
+const u8 gUnknown_083D0290[9][4] =
+{
+ {1, 0, 3, 2},
+ {3, 0, 1, 2},
+ {2, 0, 3, 1},
+ {1, 3, 0, 2},
+ {2, 3, 0, 1},
+ {3, 2, 0, 1},
+ {1, 2, 3, 0},
+ {2, 3, 1, 0},
+ {3, 2, 1, 0},
+};
+
void sub_80B9A88(u8 *a)
{
u32 i;
@@ -430,101 +458,627 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
-#undef NONMATCHING
-#ifdef NONMATCHING
+void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e)
+{
+ struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d][0]);
+ struct RecordMixing_UnknownStructSub *src = r6 + c[d][1];
+ struct RecordMixing_UnknownStructSub sp0 = *src;
+ struct RecordMixing_UnknownStructSub *r8 = (struct RecordMixing_UnknownStructSub *)(a + b * c[e][0]);
-void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
+ r6 += c[d][1];
+ *r6 = *(r8 + c[e][1]);
+
+ r8 += c[e][1];
+ *r8 = sp0;
+}
+
+u8 sub_80B9C4C(u8 *a)
{
- struct RecordMixing_UnknownStructSub *offA;
- struct RecordMixing_UnknownStructSub *offB;
- struct RecordMixing_UnknownStructSub v0;
- v0 = (offA = ((struct RecordMixing_UnknownStruct *)(b * c[d][0] + (u32)&a))->data)[c[d][1]];
- offA[c[d][1]] = (offB = ((struct RecordMixing_UnknownStruct *)(b * c[e][0] + (u32)&a))->data)[c[e][1]];
- offB[c[e][1]] = v0;
- //ToDo: Figure out what this strange stack usage is
+ int i;
+ u8 r2 = 0;
+
+ for (i = 0; i < 0x100; i++)
+ r2 += a[i];
+ return r2;
}
+const u8 gUnknown_083D02B4[][2] =
+{
+ {0, 1},
+ {1, 2},
+ {2, 0},
+};
+
+const u8 gUnknown_083D02BA[3][4] =
+{
+ {0, 1, 2, 3},
+ {0, 2, 1, 3},
+ {0, 3, 2, 1},
+};
+
+#ifdef NONMATCHING
+void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
+{
+ u8 r8;
+ u8 sp4[4];
+ u8 sp8[4];
+ void *spC[4];
+ u8 sp1C[4][2];
+ u8 sp24[4][2];
+ u8 sp3C;
+ u16 sp40 = Random();
+ u16 i; // r3
+ u16 r7;
+ u8 r1;
+ struct RecordMixing_UnknownStruct *r6;
+
+ //asm("":::"r8");
+ SeedRng(gLinkPlayers[0].trainerId);
+ r8 = GetLinkPlayerCount();
+ for (i = 0; i < 4; i++)
+ {
+ sp4[i] = 0xFF;
+ sp8[i] = 0;
+ sp1C[i][0] = 0;
+ sp1C[i][1] = 0;
+ }
+ sp3C = 0;
+ for (i = 0; i < r8; i++)
+ {
+ r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ if (r6->unk70 != 0)
+ {
+ for (r7 = 0; r7 < r6->unk70; r7++)
+ {
+ if (r6->unk74[r7] == 0)
+ sp1C[i][r7] = 1;
+ }
+ }
+ //_080B9D3C
+ }
+ //_080B9D46
+ for (r7 = 0, i = 0; i < r8; i++)
+ {
+ r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ if (sp1C[i][0] == 1 || sp1C[i][1] == 1)
+ sp3C++;
+ if (sp1C[i][0] == 1 && sp1C[i][1] == 0)
+ {
+ sp24[r7][0] = i;
+ sp24[r7][1] = 0;
+ r7++;
+ }
+ else if (sp1C[i][0] == 0 && sp1C[i][1] == 1)
+ {
+ sp24[r7][0] = i;
+ sp24[r7][1] = 0;
+ r7++;
+ }
+ //else if (sp1C[i][0] == 1 + 1 && sp1C[i][1] + 1 == 1 + 1)
+ else if (sp1C[i][0] == 1 && sp1C[i][1] == 1)
+ {
+ u8 r4, r1;
+
+ sp24[r7][0] = i;
+ r4 = sub_80B9BBC((u16 *)&r6->data[0]);
+ r1 = sub_80B9BBC((u16 *)&r6->data[1]);
+
+ asm("");
+ if (r4 == 0 && r1 != 0)
+ sp24[r7][1] = 1;
+ else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
+ sp24[r7][1] = Random() % 2;
+ else
+ sp24[r7][1] = 0;
+ /*
+ if (r4 == 0 && r1 != 0)
+ sp24[r7][1] = 1;
+ else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
+ sp24[r7][1] = Random() % 2;
+ else
+ sp24[r7][1] = 0;
+ */
+
+ /*
+ if (r4 == 0 && r1 != 0)
+ sp24[r7][1] = 1;
+ else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
+ //sp24[r7][1] = ((Random() << 16) >> 16) % 2;
+ sp24[r7][1] = Random() % 2;
+ else
+ sp24[r7][1] = 0;
+ */
+ //_080B9E2C:
+ r7++;
+ }
+ }
+ //_080B9E3E
+ for (i = 0; i < 4; i++)
+ {
+ r6 = (struct RecordMixing_UnknownStruct *)a + b * c;
+ spC[i] = r6;
+ }
+ r1 = sub_80B9C4C(d) % 3;
+ switch (sp3C)
+ {
+ case 2:
+ sub_80B9BC4(a, b, (u8 *)sp24, 0, 1);
+ break;
+ case 3:
+ {
+ u8 var1 = gUnknown_083D02B4[r1][0];
+ u8 var2 = gUnknown_083D02B4[r1][1];
+ sub_80B9BC4(a, b, (u8 *)sp24, var1, var2);
+ }
+ break;
+ case 4:
+ {
+ u8 *r6 = (u8 *)sp24;
+ u8 var1 = gUnknown_083D02BA[r1][0];
+ u8 var2 = gUnknown_083D02BA[r1][1];
+ sub_80B9BC4(a, b, r6, var1, var2);
+ }
+ {
+ u8 *r6 = (u8 *)sp24;
+ u8 var1 = gUnknown_083D02BA[r1][2];
+ u8 var2 = gUnknown_083D02BA[r1][3];
+ sub_80B9BC4(a, b, r6, var1, var2);
+ }
+ break;
+ }
+ //_080B9EF0
+ //memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38);
+ //memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38);
+ r6 = (struct RecordMixing_UnknownStruct *)(a + b * c);
+ gSaveBlock1.filler_303C.data[0] = r6->data[0];
+ gSaveBlock1.filler_303C.data[1] = r6->data[1];
+ //memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38);
+ //memcpy(&gSaveBlock1.filler_303C.data[1], &r6->data[1], 0x38);
+ SeedRng(sp40);
+}
#else
__attribute__((naked))
-void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
+void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
{
asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- mov r6, r10\n\
- mov r5, r9\n\
- mov r4, r8\n\
- push {r4-r6}\n\
- sub sp, 0x38\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x58\n\
+ str r0, [sp, 0x2C]\n\
+ str r1, [sp, 0x30]\n\
+ str r3, [sp, 0x38]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x34]\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x40]\n\
+ ldr r0, _080B9DA8 @ =gLinkPlayers\n\
+ ldrh r0, [r0, 0x4]\n\
+ bl SeedRng\n\
+ bl GetLinkPlayerCount\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
mov r8, r0\n\
+ movs r3, 0\n\
+ add r0, sp, 0x1C\n\
+ mov r9, r0\n\
+ movs r1, 0x1D\n\
+ add r1, sp\n\
mov r10, r1\n\
- mov r9, r2\n\
- adds r4, r3, 0\n\
- ldr r5, [sp, 0x54]\n\
- lsls r4, 24\n\
- lsls r5, 24\n\
- lsrs r5, 24\n\
- lsrs r4, 23\n\
- add r4, r9\n\
- ldrb r0, [r4]\n\
- mov r6, r10\n\
- muls r6, r0\n\
- add r6, r8\n\
- ldrb r0, [r4, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
- adds r1, r6, r1\n\
- mov r0, sp\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- lsls r5, 1\n\
- add r5, r9\n\
- ldrb r0, [r5]\n\
- mov r1, r10\n\
- muls r1, r0\n\
+ mov r2, sp\n\
+ adds r2, 0xC\n\
+ str r2, [sp, 0x4C]\n\
+ movs r7, 0xFF\n\
+ add r4, sp, 0x8\n\
+ movs r2, 0\n\
+ mov r6, r9\n\
+ mov r5, r10\n\
+_080B9CBC:\n\
+ mov r1, sp\n\
+ adds r1, r3\n\
+ adds r1, 0x4\n\
+ ldrb r0, [r1]\n\
+ orrs r0, r7\n\
+ strb r0, [r1]\n\
+ adds r0, r4, r3\n\
+ strb r2, [r0]\n\
+ lsls r1, r3, 1\n\
+ adds r0, r6, r1\n\
+ strb r2, [r0]\n\
+ adds r1, r5, r1\n\
+ strb r2, [r1]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x3\n\
+ bls _080B9CBC\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x3C]\n\
+ movs r3, 0\n\
+ mov r1, r8\n\
+ lsls r0, r1, 16\n\
+ lsrs r1, r0, 16\n\
+ str r0, [sp, 0x50]\n\
+ ldr r4, [sp, 0x30]\n\
+ ldr r0, [sp, 0x34]\n\
+ adds r2, r4, 0\n\
+ muls r2, r0\n\
+ str r2, [sp, 0x48]\n\
+ ldr r2, [sp, 0x3C]\n\
+ cmp r2, r1\n\
+ bcs _080B9D46\n\
+ mov r8, r1\n\
+_080B9D00:\n\
+ ldr r4, [sp, 0x30]\n\
+ adds r0, r4, 0\n\
+ muls r0, r3\n\
+ ldr r1, [sp, 0x2C]\n\
+ adds r6, r1, r0\n\
+ ldr r0, [r6, 0x70]\n\
+ cmp r0, 0\n\
+ beq _080B9D3C\n\
+ movs r7, 0\n\
+ cmp r7, r0\n\
+ bcs _080B9D3C\n\
+ adds r4, r6, 0\n\
+ adds r4, 0x74\n\
+ mov r2, r9\n\
+ lsls r1, r3, 1\n\
+ movs r5, 0x1\n\
+_080B9D20:\n\
+ lsls r0, r7, 1\n\
+ adds r0, r4, r0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080B9D30\n\
+ adds r0, r7, r1\n\
+ adds r0, r2, r0\n\
+ strb r5, [r0]\n\
+_080B9D30:\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldr r0, [r6, 0x70]\n\
+ cmp r7, r0\n\
+ bcc _080B9D20\n\
+_080B9D3C:\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, r8\n\
+ bcc _080B9D00\n\
+_080B9D46:\n\
+ movs r7, 0\n\
+ movs r3, 0\n\
+ ldr r2, [sp, 0x50]\n\
+ cmp r2, 0\n\
+ beq _080B9E3E\n\
+ mov r4, sp\n\
+ adds r4, 0x24\n\
+ str r4, [sp, 0x44]\n\
+ movs r0, 0x25\n\
+ add r0, sp\n\
+ mov r8, r0\n\
+_080B9D5C:\n\
+ ldr r1, [sp, 0x30]\n\
adds r0, r1, 0\n\
- add r8, r0\n\
- ldrb r1, [r4, 0x1]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- adds r6, r0\n\
- ldrb r0, [r5, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
+ muls r0, r3\n\
+ ldr r2, [sp, 0x2C]\n\
+ adds r6, r2, r0\n\
+ lsls r1, r3, 1\n\
+ mov r4, r9\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ beq _080B9D7C\n\
+ mov r2, r10\n\
+ adds r0, r2, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080B9D86\n\
+_080B9D7C:\n\
+ ldr r0, [sp, 0x3C]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x3C]\n\
+_080B9D86:\n\
+ mov r4, r9\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080B9DAC\n\
+ mov r2, r10\n\
+ adds r0, r2, r1\n\
+ ldrb r2, [r0]\n\
+ cmp r2, 0\n\
+ bne _080B9DAC\n\
+_080B9D9A:\n\
+ lsls r1, r7, 1\n\
+ ldr r4, [sp, 0x44]\n\
+ adds r0, r4, r1\n\
+ strb r3, [r0]\n\
add r1, r8\n\
+ strb r2, [r1]\n\
+ b _080B9E2C\n\
+ .align 2, 0\n\
+_080B9DA8: .4byte gLinkPlayers\n\
+_080B9DAC:\n\
+ mov r2, r9\n\
+ adds r0, r2, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080B9DC0\n\
+ mov r4, r10\n\
+ adds r0, r4, r1\n\
+ ldrb r2, [r0]\n\
+ cmp r2, 0x1\n\
+ beq _080B9D9A\n\
+_080B9DC0:\n\
+ mov r2, r9\n\
+ adds r0, r2, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080B9E32\n\
+ mov r4, r10\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080B9E32\n\
+ lsls r5, r7, 1\n\
+ ldr r1, [sp, 0x44]\n\
+ adds r0, r1, r5\n\
+ strb r3, [r0]\n\
adds r0, r6, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r0, r1, 3\n\
+ str r3, [sp, 0x54]\n\
+ bl sub_80B9BBC\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x38\n\
+ bl sub_80B9BBC\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ ldr r3, [sp, 0x54]\n\
+ cmp r4, 0\n\
+ bne _080B9E0A\n\
+ cmp r1, 0\n\
+ beq _080B9E0E\n\
+ mov r2, r8\n\
+ adds r1, r2, r5\n\
+ movs r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _080B9E2C\n\
+_080B9E0A:\n\
+ cmp r1, 0\n\
+ beq _080B9E26\n\
+_080B9E0E:\n\
+ str r3, [sp, 0x54]\n\
+ bl Random\n\
+ mov r4, r8\n\
+ adds r2, r4, r5\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x1\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r3, [sp, 0x54]\n\
+ b _080B9E2C\n\
+_080B9E26:\n\
+ mov r2, r8\n\
+ adds r0, r2, r5\n\
+ strb r1, [r0]\n\
+_080B9E2C:\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+_080B9E32:\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ ldr r4, [sp, 0x50]\n\
+ cmp r0, r4\n\
+ bcc _080B9D5C\n\
+_080B9E3E:\n\
+ movs r3, 0\n\
+ ldr r1, [sp, 0x48]\n\
+ lsls r0, r1, 4\n\
subs r0, r1\n\
lsls r0, 3\n\
- add r8, r0\n\
- mov r0, r8\n\
- mov r1, sp\n\
+ ldr r2, [sp, 0x2C]\n\
+ adds r6, r2, r0\n\
+ ldr r1, [sp, 0x4C]\n\
+_080B9E4E:\n\
+ lsls r0, r3, 2\n\
+ adds r0, r1, r0\n\
+ str r6, [r0]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x3\n\
+ bls _080B9E4E\n\
+ ldr r0, [sp, 0x38]\n\
+ bl sub_80B9C4C\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ ldr r4, [sp, 0x3C]\n\
+ cmp r4, 0x3\n\
+ beq _080B9E9C\n\
+ cmp r4, 0x3\n\
+ bgt _080B9E82\n\
+ cmp r4, 0x2\n\
+ beq _080B9E8A\n\
+ b _080B9EF0\n\
+_080B9E82:\n\
+ ldr r0, [sp, 0x3C]\n\
+ cmp r0, 0x4\n\
+ beq _080B9EBC\n\
+ b _080B9EF0\n\
+_080B9E8A:\n\
+ add r2, sp, 0x24\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r1, [sp, 0x30]\n\
+ movs r3, 0\n\
+ bl sub_80B9BC4\n\
+ b _080B9EF0\n\
+_080B9E9C:\n\
+ ldr r0, _080B9EB8 @ =gUnknown_083D02B4\n\
+ lsls r1, 1\n\
+ adds r2, r1, r0\n\
+ ldrb r3, [r2]\n\
+ adds r0, 0x1\n\
+ adds r1, r0\n\
+ ldrb r0, [r1]\n\
+ add r2, sp, 0x24\n\
+ str r0, [sp]\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r1, [sp, 0x30]\n\
+ bl sub_80B9BC4\n\
+ b _080B9EF0\n\
+ .align 2, 0\n\
+_080B9EB8: .4byte gUnknown_083D02B4\n\
+_080B9EBC:\n\
+ add r6, sp, 0x24\n\
+ ldr r4, _080B9F2C @ =gUnknown_083D02BA\n\
+ lsls r5, r1, 2\n\
+ adds r0, r5, r4\n\
+ ldrb r3, [r0]\n\
+ adds r0, r4, 0x1\n\
+ adds r0, r5, r0\n\
+ ldrb r0, [r0]\n\
+ str r0, [sp]\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r1, [sp, 0x30]\n\
+ adds r2, r6, 0\n\
+ bl sub_80B9BC4\n\
+ adds r0, r4, 0x2\n\
+ adds r0, r5, r0\n\
+ ldrb r3, [r0]\n\
+ adds r4, 0x3\n\
+ adds r5, r4\n\
+ ldrb r0, [r5]\n\
+ str r0, [sp]\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldr r1, [sp, 0x30]\n\
+ adds r2, r6, 0\n\
+ bl sub_80B9BC4\n\
+_080B9EF0:\n\
+ ldr r1, [sp, 0x2C]\n\
+ ldr r2, [sp, 0x48]\n\
+ adds r6, r1, r2\n\
+ ldr r4, _080B9F30 @ =gSaveBlock1\n\
+ ldr r1, _080B9F34 @ =0x0000303c\n\
+ adds r0, r4, r1\n\
+ adds r1, r6, 0\n\
movs r2, 0x38\n\
bl memcpy\n\
- add sp, 0x38\n\
+ ldr r2, _080B9F38 @ =0x00003074\n\
+ adds r4, r2\n\
+ adds r1, r6, 0\n\
+ adds r1, 0x38\n\
+ adds r0, r4, 0\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ ldr r0, [sp, 0x40]\n\
+ bl SeedRng\n\
+ add sp, 0x58\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
- pop {r4-r6}\n\
+ pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
+ .align 2, 0\n\
+_080B9F2C: .4byte gUnknown_083D02BA\n\
+_080B9F30: .4byte gSaveBlock1\n\
+_080B9F34: .4byte 0x0000303c\n\
+_080B9F38: .4byte 0x00003074\n\
.syntax divided\n");
}
#endif
-u8 sub_80B9C4C(u8 *a)
+void sub_80B9F3C(u16 *a, u8 b)
{
- int i;
- u8 r2 = 0;
-
- for (i = 0; i < 0x100; i++)
- r2 += a[i];
- return r2;
+ if (b != 0 && *a != 0)
+ {
+ if (GetPocketByItemId(*a) == 5)
+ {
+ if (!CheckBagHasItem(*a, 1) && !CheckPCHasItem(*a, 1) && AddBagItem(*a, 1))
+ {
+ VarSet(VAR_0x4001, *a);
+ StringCopy(gStringVar1, gLinkPlayers[0].name);
+ if (*a == ITEM_EON_TICKET)
+ FlagSet(SYS_HAS_EON_TICKET);
+ }
+ else
+ {
+ VarSet(VAR_0x4001, ITEM_NONE);
+ }
+ }
+ else
+ {
+ if (AddBagItem(*a, 1) == TRUE)
+ {
+ VarSet(VAR_0x4001, *a);
+ StringCopy(gStringVar1, gLinkPlayers[0].name);
+ }
+ else
+ {
+ VarSet(VAR_0x4001, ITEM_NONE);
+ }
+ }
+ }
}
+void sub_80BA00C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[0]++;
+ break;
+ case 1:
+ task->data[0]++;
+ break;
+ case 2:
+ SetSecretBase2Field_9_AndHideBG();
+ sub_8125E2C();
+ task->data[0]++;
+ break;
+ case 3:
+ if (sub_8125E6C() != 0)
+ {
+ ClearSecretBase2Field_9_2();
+ task->data[0]++;
+ task->data[1] = 0;
+ }
+ break;
+ case 4:
+ task->data[1]++;
+ if (task->data[1] > 10)
+ {
+ sub_800832C();
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ if (!gReceivedRemoteLinkPlayers)
+ DestroyTask(taskId);
+ break;
+ }
+}
diff --git a/src/save.c b/src/save.c
index 570210fb0..46094746a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -672,9 +672,9 @@ u8 sub_8125E2C(void)
return 0;
}
-u8 sub_8125E6C(void)
+bool8 sub_8125E6C(void)
{
- u8 retVal = 0;
+ u8 retVal = FALSE;
u16 val = ++gUnknown_03005EB4;
if (val <= 4)
{
@@ -684,7 +684,7 @@ u8 sub_8125E6C(void)
else
{
sub_81257F0(val, gSaveSectionLocations);
- retVal = 1;
+ retVal = TRUE;
}
if (gDamagedSaveSectors)
DoSaveFailedScreen(1);
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 876a3b426..f7afd9cec 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -3,6 +3,7 @@
#include "easy_chat.h"
#include "event_data.h"
#include "field_effect.h"
+#include "graphics.h"
#include "link.h"
#include "main.h"
#include "menu.h"
@@ -54,22 +55,55 @@ extern struct TrainerCard gTrainerCards[4];
struct UnknownStruct1
{
- u8 filler0[0x780];
+ u16 filler0[0x3C0];
u16 unk780[160];
};
extern struct UnknownStruct1 gUnknown_03004DE0;
-extern u8 gUnknown_083B5EF4[];
-extern u16 *gUnknown_083B5EF8[5];
-extern u16 gUnknown_083B5F0C[];
-extern u16 gBadgesPalette[];
-extern u16 gUnknown_083B5F4C[];
+extern const u8 gBadgesTiles[];
+extern const u16 gUnknown_083B5F0C[];
+extern const u16 gBadgesPalette[];
+extern const u16 gUnknown_083B5F4C[];
+extern const u16 gUnknown_083B5F6C[];
+extern const u16 gUnknown_083B5F8C[][4];
+
+const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp");
+// XXX: what is this?
+u8 *const ewram_ = ewram;
+
+bool8 sub_8093864(struct Task *);
+bool8 sub_80938A8(struct Task *);
+bool8 sub_80938CC(struct Task *);
+bool8 sub_8093918(struct Task *);
+bool8 sub_8093938(struct Task *);
+bool8 sub_8093954(struct Task *);
+bool8 sub_8093980(struct Task *);
+
+bool8 (*const gUnknown_083B5EBC[])(struct Task *) =
+{
+ sub_8093864,
+ sub_80938A8,
+ sub_80938CC,
+ sub_8093918,
+ sub_8093938,
+ sub_8093954,
+ sub_8093980,
+};
-extern u16 gUnknown_08E8CFC0[];
-extern u16 gUnknown_08E8D9C0[];
+bool8 sub_8093AA0(struct Task *);
+bool8 sub_8093AF0(struct Task *);
+bool8 sub_8093C0C(struct Task *);
+bool8 sub_8093C38(struct Task *);
+bool8 sub_8093D50(struct Task *);
-extern bool8 (*const gUnknown_083B5EBC[])(struct Task *);
-extern bool8 (*const gUnknown_083B5ED8[])(struct Task *);
+bool8 (*const gUnknown_083B5ED8[])(struct Task *) =
+{
+ sub_8093AA0,
+ sub_8093AF0,
+ sub_8093C0C,
+ sub_8093C38,
+ sub_8093D50,
+};
// FIXME: Other signature than on save_menu_util.h
void FormatPlayTime(u8 *playtime, u16 hours, u16 minutes, s16 colon);
@@ -171,38 +205,35 @@ static void sub_8093174(void)
case 0:
sub_8093534();
sub_8093688();
- gMain.state += 1;
+ gMain.state++;
break;
case 1:
sub_8093598();
- gMain.state += 1;
+ gMain.state++;
break;
case 2:
sub_80935EC();
- gMain.state += 1;
+ gMain.state++;
break;
case 3:
sub_8093610();
sub_80937A4();
- gMain.state += 1;
+ gMain.state++;
break;
case 4:
sub_80937BC();
- gMain.state += 1;
+ gMain.state++;
case 5:
- if (MultistepInitMenuWindowContinue() == FALSE)
- {
- return;
- }
- gMain.state += 1;
+ if (MultistepInitMenuWindowContinue())
+ gMain.state++;
break;
case 6:
sub_80937F0();
- gMain.state += 1;
+ gMain.state++;
break;
case 7:
sub_80937D8();
- gMain.state += 1;
+ gMain.state++;
break;
case 8:
nullsub_15();
@@ -376,22 +407,22 @@ static u8 sub_80934F4(struct TrainerCard *trainerCard)
if (trainerCard->firstHallOfFameA != 0 || trainerCard->firstHallOfFameB != 0 || trainerCard->firstHallOfFameC != 0)
{
- value += 1;
+ value++;
}
if (trainerCard->var_3)
{
- value += 1;
+ value++;
}
if (trainerCard->battleTowerLosses > 49)
{
- value += 1;
+ value++;
}
if (trainerCard->var_4)
{
- value += 1;
+ value++;
}
return value;
@@ -470,21 +501,14 @@ static void sub_8093688(void)
u8 i;
sub_8093324();
-
- ewram0.var_0 = FALSE;
- ewram0.var_3 = FALSE;
+ ewram0.var_0 = 0;
+ ewram0.var_3 = 0;
ewram0.var_4 = FALSE;
-
ewram0.var_2 = ewram0.var_64.stars;
-
- ewram0.var_5 = FALSE;
- ewram0.var_6 = FALSE;
-
+ ewram0.var_5 = 0;
+ ewram0.var_6 = 0;
for (i = 0; i < 4; i++)
- {
sub_80EB3FC(ewram0.var_20[i], ewram0.var_64.var_28[i]);
- }
-
sub_80936D4();
}
@@ -497,61 +521,43 @@ void sub_80936D4(void)
ewram0.var_b = 0;
ewram0.var_c = 0;
ewram0.var_d = 0;
-
memset(ewram0.var_e, 0, sizeof(ewram0.var_e));
if (ewram0.var_64.hasPokedex)
- {
- ewram0.var_7 += 1;
- }
+ ewram0.var_7++;
- if (ewram0.var_64.firstHallOfFameA != 0 || ewram0.var_64.firstHallOfFameB != 0 ||
- ewram0.var_64.firstHallOfFameC != 0)
- {
- ewram0.var_8 += 1;
- }
+ if (ewram0.var_64.firstHallOfFameA != 0
+ || ewram0.var_64.firstHallOfFameB != 0
+ || ewram0.var_64.firstHallOfFameC != 0)
+ ewram0.var_8++;
if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0)
- {
- ewram0.var_9 += 1;
- }
+ ewram0.var_9++;
if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0)
- {
- ewram0.var_a += 1;
- }
+ ewram0.var_a++;
if (ewram0.var_64.contestsWithFriends != 0)
- {
- ewram0.var_b += 1;
- }
+ ewram0.var_b++;
if (ewram0.var_64.pokeblocksWithFriends != 0)
- {
- ewram0.var_c += 1;
- }
+ ewram0.var_c++;
if (ewram0.var_64.pokemonTrades != 0)
- {
- ewram0.var_d += 1;
- }
+ ewram0.var_d++;
if (!ewram0.var_1)
{
u32 badgeFlag;
- int i;
+ int i = 0;
- i = 0;
badgeFlag = BADGE01_GET;
while (1)
{
if (FlagGet(badgeFlag))
- {
- ewram0.var_e[i] += 1;
- }
-
- badgeFlag += 1;
- i += 1;
+ ewram0.var_e[i]++;
+ badgeFlag++;
+ i++;
if (badgeFlag > BADGE08_GET)
{
break;
@@ -616,14 +622,14 @@ bool8 sub_8093864(struct Task *task)
ewram0.var_6 = gSaveBlock2.playTimeVBlanks;
sub_80939A4();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- ewram0.var_0 += 1;
+ ewram0.var_0++;
return FALSE;
}
bool8 sub_80938A8(struct Task *task)
{
if (!gPaletteFade.active)
- ewram0.var_0 += 1;
+ ewram0.var_0++;
return FALSE;
}
@@ -639,16 +645,14 @@ bool8 sub_80938CC(struct Task *task)
if (ewram0.var_3 != 0)
{
ewram0.var_0 = 5;
- return TRUE;
}
else
{
ewram0.var_3 ^= 1;
ewram0.var_0 = 3;
- return TRUE;
}
+ return TRUE;
}
-
return FALSE;
}
@@ -656,19 +660,14 @@ bool8 sub_8093918(struct Task *task)
{
sub_8093A28();
PlaySE(SE_CARD);
-
- ewram0.var_0 += 1;
-
+ ewram0.var_0++;
return FALSE;
}
bool8 sub_8093938(struct Task *task)
{
if (sub_8093A48())
- {
ewram0.var_0 = 2;
- }
-
return FALSE;
}
@@ -676,17 +675,14 @@ bool8 sub_8093954(struct Task *task)
{
sub_80939C0();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- ewram0.var_0 += 1;
+ ewram0.var_0++;
return FALSE;
}
bool8 sub_8093980(struct Task *task)
{
if (!gPaletteFade.active)
- {
SetMainCallback2((MainCallback)ewram0.var_60);
- }
-
return FALSE;
}
@@ -698,28 +694,22 @@ static void sub_80939A4(void)
static void sub_80939C0(void)
{
- u8 taskId;
-
- taskId = FindTaskIdByFunc(sub_80939DC);
+ u8 taskId = FindTaskIdByFunc(sub_80939DC);
if (taskId != 0xFF)
- {
DestroyTask(taskId);
- }
}
static void sub_80939DC(u8 taskId)
{
u8 buffer[32];
- struct Task *task;
- task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (ewram0.var_5 != task->data[TD_1])
{
task->data[TD_1] = ewram0.var_5;
task->data[TD_0] ^= TRUE;
}
-
TrainerCard_Front_PrintPlayTime(buffer, task->data[TD_0]);
MenuPrint(buffer, 10, 12);
}
@@ -750,18 +740,66 @@ bool8 sub_8093AA0(struct Task *task)
{
s32 i;
- ewram0.var_4 = 0;
+ ewram0.var_4 = FALSE;
dp12_8087EA4();
for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++)
gUnknown_03004DE0.unk780[i] = -4;
SetHBlankCallback(sub_8093D7C);
- ewram0.var_4 = 1;
+ ewram0.var_4 = TRUE;
task->data[0]++;
return FALSE;
}
+/*
+bool8 sub_8093AF0(struct Task *task)
+{
+ u32 r7;
+ u16 r9;
+ u32 r6;
+ u32 r5;
+ u32 r4;
+ u32 r10;
+ u32 sp0;
+ s16 i;
+
+ ewram0.var_4 = 0;
+ task->data[1] += 3;
+ if (task->data[1] > 79)
+ task->data[1] = 79;
+
+ r7 = task->data[1];
+ r9 = 160 - r7;
+ r4 = r9 - r7;
+ r6 = -r7 << 16;
+ r5 = (160 << 16) / r4;
+ r5 -= 1 << 16;
+ r10 = r5 * r4 + r6;
+ sp0 = r5 / r4;
+ r5 *= 2;
+
+ for (i = 0; i < r7; i++)
+ {
+ gUnknown_03004DE0.filler0[i] = -4 - (u32)i;
+ }
+ //_08093B74
+ for (; i < r9; i++)
+ {
+ u16 var = r6 >> 16;
+ r6 += r5;
+ r5 -= sp0;
+ gUnknown_03004DE0.filler0[i] = -4 + var;
+ }
+ for (; i < 160; i++)
+ gUnknown_03004DE0.filler0[i] = -4 + (u16)(r10 >> 16);
+ ewram0.var_4 = 1;
+ if (task->data[1] > 0x4A)
+ task->data[0]++;
+ return FALSE;
+}
+*/
+
__attribute__((naked))
-bool8 sub_8093AF0()
+bool8 sub_8093AF0(struct Task *task)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -912,23 +950,18 @@ _08093C08: .4byte 0x0000fffc\n\
.syntax divided\n");
}
-bool8 sub_8093C0C(struct TrainerCard *trainerCard)
+bool8 sub_8093C0C(struct Task *task)
{
sub_80939C0();
sub_8093DAC();
-
if (!ewram0.var_3)
- {
sub_80939A4();
- }
-
- trainerCard->firstHallOfFameB += 1;
-
+ task->data[0]++;
return TRUE;
}
__attribute__((naked))
-bool8 sub_8093C38()
+bool8 sub_8093C38(struct Task *task)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -1077,59 +1110,33 @@ _08093D4C: .4byte 0x0000fffc\n\
.syntax divided\n");
}
-bool8 sub_8093D50(void)
+bool8 sub_8093D50(struct Task *task)
{
u8 taskId;
ewram0.var_4 = FALSE;
SetHBlankCallback(NULL);
sub_8093E04();
-
taskId = FindTaskIdByFunc(sub_8093A68);
DestroyTask(taskId);
-
return FALSE;
}
-__attribute__((naked))
void sub_8093D7C(void)
{
- asm(".syntax unified\n\
- ldr r1, _08093DA0 @ =gUnknown_03004DE0\n\
- ldr r0, _08093DA4 @ =REG_VCOUNT\n\
- ldrh r2, [r0]\n\
- movs r0, 0xFF\n\
- ands r0, r2\n\
- lsls r0, 1\n\
- movs r2, 0xF0\n\
- lsls r2, 3\n\
- adds r1, r2\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldr r0, _08093DA8 @ =REG_BG0VOFS\n\
- strh r1, [r0]\n\
- adds r0, 0x4\n\
- strh r1, [r0]\n\
- adds r0, 0x4\n\
- strh r1, [r0]\n\
- bx lr\n\
- .align 2, 0\n\
-_08093DA0: .4byte gUnknown_03004DE0\n\
-_08093DA4: .4byte 0x4000006 @ REG_VCOUNT\n\
-_08093DA8: .4byte 0x4000012 @ REG_BG0VOFS\n\
- .syntax divided\n");
+ u16 bgVOffset = gUnknown_03004DE0.unk780[REG_VCOUNT & 0xFF];
+
+ REG_BG0VOFS = bgVOffset;
+ REG_BG1VOFS = bgVOffset;
+ REG_BG2VOFS = bgVOffset;
}
static void sub_8093DAC(void)
{
if (ewram0.var_3)
- {
sub_8093DEC();
- }
else
- {
sub_8093DC8();
- }
}
static void sub_8093DC8(void)
@@ -1151,99 +1158,55 @@ static void sub_8093DEC(void)
sub_8094188();
}
-__attribute__((naked))
-static void sub_8093E04()
+static void sub_8093E04(void)
{
- asm(".syntax unified\n\
- ldr r0, _08093E20 @ =REG_BG0VOFS\n\
- ldr r2, _08093E24 @ =0x0000fffc\n\
- adds r1, r2, 0\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- movs r2, 0\n\
- strh r2, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r2, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- bx lr\n\
- .align 2, 0\n\
-_08093E20: .4byte 0x4000012 @ REG_BG0VOFS\n\
-_08093E24: .4byte 0x0000fffc\n\
- .syntax divided\n");
+ REG_BG0VOFS = -4;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = -4;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = -4;
}
-__attribute__((naked))
static void sub_8093E28(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- bl sub_8093EA0\n\
- ldr r0, _08093E84 @ =gUnknown_083B5F6C\n\
- movs r1, 0xE0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r3, _08093E88 @ =gMenuTrainerCard_Gfx\n\
- movs r4, 0xC0\n\
- lsls r4, 19\n\
- movs r5, 0xA4\n\
- lsls r5, 5\n\
- ldr r1, _08093E8C @ =0x040000d4\n\
- ldr r6, _08093E90 @ =0x80000800\n\
- movs r2, 0x80\n\
- lsls r2, 5\n\
- movs r7, 0x80\n\
- lsls r7, 24\n\
-_08093E4E:\n\
- str r3, [r1]\n\
- str r4, [r1, 0x4]\n\
- str r6, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- adds r3, r2\n\
- adds r4, r2\n\
- subs r5, r2\n\
- cmp r5, r2\n\
- bhi _08093E4E\n\
- str r3, [r1]\n\
- str r4, [r1, 0x4]\n\
- lsrs r0, r5, 1\n\
- orrs r0, r7\n\
- str r0, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- ldr r1, _08093E94 @ =gBadgesTiles\n\
- ldr r2, _08093E98 @ =0x06001480\n\
- ldr r0, _08093E8C @ =0x040000d4\n\
- str r1, [r0]\n\
- str r2, [r0, 0x4]\n\
- ldr r1, _08093E9C @ =0x80000200\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093E84: .4byte gUnknown_083B5F6C\n\
-_08093E88: .4byte gMenuTrainerCard_Gfx\n\
-_08093E8C: .4byte 0x040000d4\n\
-_08093E90: .4byte 0x80000800\n\
-_08093E94: .4byte gBadgesTiles\n\
-_08093E98: .4byte 0x06001480\n\
-_08093E9C: .4byte 0x80000200\n\
- .syntax divided\n");
+ const u8 *src;
+ u8 *dst;
+ u32 size;
+
+ sub_8093EA0();
+ LoadPalette(gUnknown_083B5F6C, 0xE0, 32);
+ src = gMenuTrainerCard_Gfx;
+ dst = (void *)VRAM;
+ size = 0x1480;
+ while (1)
+ {
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ }
+ {
+ const void *src = gBadgesTiles;
+ void *dst = (void *)(VRAM + 0x1480);
+
+ DmaCopy16(3, src, dst, 0x400);
+ }
}
+extern const u16 *const gUnknown_083B5EF8[];
+
void sub_8093EA0(void)
{
LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2);
LoadPalette(gBadgesPalette, 48, 16 * 2);
LoadPalette(gUnknown_083B5F4C, 64, 16 * 2);
-
if (ewram0.var_64.gender != MALE)
- {
LoadPalette(gUnknown_083B5F0C, 16, 16 * 2);
- }
}
static void sub_8093EF8(void)
@@ -1251,36 +1214,32 @@ static void sub_8093EF8(void)
LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880));
}
-__attribute__((naked))
static void sub_8093F14(void)
{
- asm(".syntax unified\n\
- push {lr}\n\
- sub sp, 0x8\n\
- ldr r0, _08093F3C @ =gUnknown_083B5EEC\n\
- ldr r1, [r0, 0x4]\n\
- ldr r0, [r0]\n\
- str r0, [sp]\n\
- str r1, [sp, 0x4]\n\
- ldr r0, _08093F40 @ =0x02000000\n\
- ldrb r0, [r0, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r0, [r0]\n\
- ldr r1, _08093F44 @ =0x06004800\n\
- movs r2, 0xA0\n\
- lsls r2, 1\n\
- bl CpuFastSet\n\
- add sp, 0x8\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093F3C: .4byte gUnknown_083B5EEC\n\
-_08093F40: .4byte 0x02000000\n\
-_08093F44: .4byte 0x06004800\n\
- .syntax divided\n");
+ const void *arr[] = {gUnknown_08E8CAC0, gUnknown_08E8D4C0};
+
+ CpuFastSet(arr[ewram0.var_1], (void *)(VRAM + 0x4800), 0x140);
}
+// I don't really know where to put the data. It's in such a weird order.
+
+const u8 gUnknown_083B5EF4[] = _(" : ");
+
+const u16 *const gUnknown_083B5EF8[] =
+{
+ gMenuTrainerCard0Star_Pal,
+ gMenuTrainerCard1Star_Pal,
+ gMenuTrainerCard2Star_Pal,
+ gMenuTrainerCard3Star_Pal,
+ gMenuTrainerCard4Star_Pal,
+};
+
+const u16 gUnknown_083B5F0C[] = INCBIN_U16("graphics/trainer_card/83B5F0C.gbapal");
+const u16 gBadgesPalette[] = INCBIN_U16("graphics/trainer_card/badges.gbapal");
+const u16 gUnknown_083B5F4C[] = INCBIN_U16("graphics/trainer_card/83B5F4C.gbapal");
+const u16 gUnknown_083B5F6C[] = INCBIN_U16("graphics/trainer_card/83B5F6C.gbapal");
+const u16 gUnknown_083B5F8C[][4] = INCBIN_U16("graphics/trainer_card/83B5F8C_map.bin");
+
static void sub_8093F48(void)
{
CpuFastSet(gUnknown_08E8CFC0, (void *)(VRAM + 0x4800), 320);
@@ -1291,266 +1250,79 @@ static void sub_8093F64(void)
CpuFastSet(gUnknown_08E8D9C0, (void *)(VRAM + 0x5000), 320);
}
-__attribute__((naked))
static void sub_8093F80(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- movs r5, 0xC4\n\
- ldr r7, _08093FCC @ =0x06004000\n\
- movs r1, 0x5\n\
- movs r0, 0xA0\n\
- lsls r0, 7\n\
- adds r6, r0, 0\n\
-_08093F8E:\n\
- movs r0, 0x13\n\
- lsls r3, r1, 16\n\
- asrs r4, r3, 11\n\
-_08093F94:\n\
- lsls r2, r0, 16\n\
- asrs r2, 16\n\
- adds r1, r4, r2\n\
- lsls r1, 1\n\
- adds r1, r7\n\
- adds r0, r5, 0\n\
- orrs r0, r6\n\
- strh r0, [r1]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- lsrs r0, r2, 16\n\
- asrs r2, 16\n\
- cmp r2, 0x1A\n\
- ble _08093F94\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- adds r0, r3, r1\n\
- lsrs r1, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0xC\n\
- ble _08093F8E\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08093FCC: .4byte 0x06004000\n\
- .syntax divided\n");
+ u16 r5 = 0xC4;
+ u16 *ptr = (u16 *)(VRAM + 0x4000);
+ s16 i;
+ s16 j;
+
+ for (i = 5; i < 13; i++)
+ {
+ for (j = 19; j < 27; j++, r5++)
+ ptr[i * 32 + j] = r5 | 0x5000;
+ }
}
-__attribute__((naked))
static void sub_8093FD0(void)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- ldr r4, _0809402C @ =0x06004000\n\
- movs r2, 0xF\n\
- ldr r0, _08094030 @ =0x02000000\n\
- ldrb r0, [r0, 0x2]\n\
- adds r0, 0xF\n\
- cmp r2, r0\n\
- bge _08094002\n\
- movs r6, 0xC0\n\
- lsls r6, 1\n\
- ldr r1, _08094034 @ =0x0000408f\n\
- adds r5, r1, 0\n\
- adds r3, r0, 0\n\
-_08093FEA:\n\
- lsls r1, r2, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- adds r0, r6\n\
- strh r5, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r2, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, r3\n\
- blt _08093FEA\n\
-_08094002:\n\
- lsls r1, r2, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x12\n\
- bgt _08094024\n\
- movs r3, 0xC0\n\
- lsls r3, 1\n\
- movs r2, 0\n\
-_08094010:\n\
- asrs r0, r1, 16\n\
- lsls r1, r0, 1\n\
- adds r1, r4\n\
- adds r1, r3\n\
- strh r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r1, r0, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x12\n\
- ble _08094010\n\
-_08094024:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809402C: .4byte 0x06004000\n\
-_08094030: .4byte 0x02000000\n\
-_08094034: .4byte 0x0000408f\n\
- .syntax divided\n");
+ u16 *ptr = (u16 *)(VRAM + 0x4000);
+ s16 i = 15;
+ s16 var = 15 + ewram0.var_2;
+
+ while (i < var)
+ {
+ ptr[6 * 32 + i] = 0x408F;
+ i++;
+ }
+ while (i < 0x13)
+ {
+ ptr[6 * 32 + i] = 0;
+ i++;
+ }
}
-__attribute__((naked))
static void sub_8094038(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r1, _080940D0 @ =0x02000000\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _080940C2\n\
- ldr r0, _080940D4 @ =0x06004000\n\
- mov r9, r0\n\
- movs r0, 0\n\
- movs r2, 0x4\n\
- adds r1, 0xE\n\
- mov r8, r1\n\
- ldr r7, _080940D8 @ =gUnknown_083B5F8C\n\
- movs r1, 0xC0\n\
- lsls r1, 6\n\
- adds r6, r1, 0\n\
- adds r1, r7, 0x6\n\
- mov r12, r1\n\
-_08094060:\n\
- lsls r0, 16\n\
- asrs r4, r0, 16\n\
- mov r1, r8\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- lsls r5, r2, 16\n\
- cmp r0, 0\n\
- beq _080940AE\n\
- asrs r1, r5, 15\n\
- add r1, r9\n\
- movs r2, 0xF0\n\
- lsls r2, 2\n\
- adds r3, r1, r2\n\
- lsls r2, r4, 3\n\
- adds r0, r2, r7\n\
- ldrh r0, [r0]\n\
- orrs r0, r6\n\
- strh r0, [r3]\n\
- ldr r0, _080940DC @ =0x000003c2\n\
- adds r3, r1, r0\n\
- adds r0, r7, 0x2\n\
- adds r0, r2, r0\n\
- ldrh r0, [r0]\n\
- orrs r0, r6\n\
- strh r0, [r3]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- adds r3, r1, r0\n\
- adds r0, r7, 0x4\n\
- adds r0, r2, r0\n\
- ldrh r0, [r0]\n\
- orrs r0, r6\n\
- strh r0, [r3]\n\
- ldr r0, _080940E0 @ =0x00000402\n\
- adds r1, r0\n\
- add r2, r12\n\
- ldrh r0, [r2]\n\
- orrs r0, r6\n\
- strh r0, [r1]\n\
-_080940AE:\n\
- adds r1, r4, 0x1\n\
- lsls r1, 16\n\
- movs r2, 0xC0\n\
- lsls r2, 10\n\
- adds r0, r5, r2\n\
- lsrs r2, r0, 16\n\
- lsrs r0, r1, 16\n\
- asrs r1, 16\n\
- cmp r1, 0x7\n\
- ble _08094060\n\
-_080940C2:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080940D0: .4byte 0x02000000\n\
-_080940D4: .4byte 0x06004000\n\
-_080940D8: .4byte gUnknown_083B5F8C\n\
-_080940DC: .4byte 0x000003c2\n\
-_080940E0: .4byte 0x00000402\n\
- .syntax divided\n");
+ if (ewram0.var_1 == 0)
+ {
+ u16 *ptr = (u16 *)(VRAM + 0x4000);
+ s16 i;
+ s16 r2;
+
+ for (i = 0, r2 = 4; i < 8; i++, r2 += 3)
+ {
+ if (ewram0.var_e[i] != 0)
+ {
+ ptr[15 * 32 + r2 + 0] = gUnknown_083B5F8C[i][0] | 0x3000;
+ ptr[15 * 32 + r2 + 1] = gUnknown_083B5F8C[i][1] | 0x3000;
+ ptr[16 * 32 + r2 + 0] = gUnknown_083B5F8C[i][2] | 0x3000;
+ ptr[16 * 32 + r2 + 1] = gUnknown_083B5F8C[i][3] | 0x3000;
+ }
+ }
+ }
}
-__attribute__((naked))
-static void sub_80940E4()
+static void sub_80940E4(void)
{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- movs r2, 0\n\
- ldr r1, _08094108 @ =0x06004000\n\
- movs r4, 0\n\
- ldr r3, _0809410C @ =0x000003ff\n\
-_080940EE:\n\
- strh r4, [r1]\n\
- lsls r0, r2, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- adds r1, 0x2\n\
- lsrs r2, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, r3\n\
- ble _080940EE\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08094108: .4byte 0x06004000\n\
-_0809410C: .4byte 0x000003ff\n\
- .syntax divided\n");
+ s16 i;
+ u16 *ptr;
+
+ for (i = 0, ptr = (u16 *)(VRAM + 0x4000); i < 0x400; i++, ptr++)
+ *ptr = 0;
}
-__attribute__((naked))
-static void sub_8094110()
+static void sub_8094110(void)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- ldr r6, _0809413C @ =0x06004800\n\
- movs r2, 0x3\n\
- movs r5, 0xA0\n\
- lsls r5, 2\n\
- movs r3, 0x1\n\
- movs r4, 0xB0\n\
- lsls r4, 2\n\
-_08094120:\n\
- lsls r0, r2, 1\n\
- adds r0, r6\n\
- adds r1, r0, r5\n\
- strh r3, [r1]\n\
- adds r0, r4\n\
- strh r3, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x10\n\
- bls _08094120\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809413C: .4byte 0x06004800\n\
- .syntax divided\n");
-}
+ u16 *ptr = (u16 *)(VRAM + 0x4800);
+ u16 i;
+ for (i = 3; i < 17; i++)
+ {
+ ptr[10 * 32 + i] = 1;
+ ptr[11 * 32 + i] = 1;
+ }
+}
static void sub_8094140(void)
{
@@ -1609,11 +1381,12 @@ static void TrainerCard_Front_PrintPokedexCount(void)
if (ewram0.var_7 == FALSE)
{
sub_8094110();
- return;
}
-
- ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
- MenuPrint_RightAligned(buffer, 16, 10);
+ else
+ {
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
+ MenuPrint_RightAligned(buffer, 16, 10);
+ }
}
static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon)
@@ -1624,13 +1397,11 @@ static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon)
playTimeHours = gSaveBlock2.playTimeHours;
playTimeMinutes = gSaveBlock2.playTimeMinutes;
-
if (ewram0.var_1 != 0)
{
playTimeHours = ewram0.var_64.playTimeHours;
playTimeMinutes = ewram0.var_64.playTimeMinutes;
}
-
FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon);
sub_8072C74(arg1, buffer, 48, 1);
}
@@ -1639,24 +1410,22 @@ static void sub_809429C(void)
{
u8 *str;
- if (ewram0.var_1 == FALSE)
+ if (ewram0.var_1 != 0)
{
- return;
+ str = gStringVar1;
+ str = StringCopy(str, ewram0.var_20[0]);
+ str[0] = 00;
+ str++;
+ str = StringCopy(str, ewram0.var_20[1]);
+ MenuPrint(gStringVar1, 2, 14);
+
+ str = gStringVar1;
+ str = StringCopy(str, ewram0.var_20[2]);
+ str[0] = 00;
+ str++;
+ str = StringCopy(str, ewram0.var_20[3]);
+ MenuPrint(gStringVar1, 2, 16);
}
-
- str = gStringVar1;
- str = StringCopy(str, ewram0.var_20[0]);
- str[0] = 00;
- str++;
- str = StringCopy(str, ewram0.var_20[1]);
- MenuPrint(gStringVar1, 2, 14);
-
- str = gStringVar1;
- str = StringCopy(str, ewram0.var_20[2]);
- str[0] = 00;
- str++;
- str = StringCopy(str, ewram0.var_20[3]);
- MenuPrint(gStringVar1, 2, 16);
}
static void TrainerCard_Back_PrintName(void)
@@ -1678,152 +1447,115 @@ static void TrainerCard_Back_PrintName(void)
static void TrainerCard_Back_PrintHallOfFameTime_Label(void)
{
- if (ewram0.var_8 == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_FirstHOF, 3, 5);
+ if (ewram0.var_8 != 0)
+ MenuPrint(gOtherText_FirstHOF, 3, 5);
}
static void TrainerCard_Back_PrintHallOfFameTime(void)
{
u8 *str;
- if (ewram0.var_8 == FALSE)
+ if (ewram0.var_8 != 0)
{
- return;
+ str = gStringVar1;
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ str = StringCopy(str, gUnknown_083B5EF4);
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2);
+ str = StringCopy(str, gUnknown_083B5EF4);
+ str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2);
+ MenuPrint_RightAligned(gStringVar1, 28, 5);
}
-
- str = gStringVar1;
- str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3);
- str = StringCopy(str, gUnknown_083B5EF4);
- str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2);
- str = StringCopy(str, gUnknown_083B5EF4);
- str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2);
-
- MenuPrint_RightAligned(gStringVar1, 28, 5);
}
static void TrainerCard_Back_PrintLinkBattlesLabel(void)
{
- if (ewram0.var_9 == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_LinkCableBattles, 3, 7);
+ if (ewram0.var_9 != 0)
+ MenuPrint(gOtherText_LinkCableBattles, 3, 7);
}
static void TrainerCard_Back_PrintLinkBattles(void)
{
u8 buffer[16];
- if (ewram0.var_9 == FALSE)
+ if (ewram0.var_9 != 0)
{
- return;
- }
+ ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins);
+ MenuPrint_RightAligned(buffer, 22, 7);
- ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins);
- MenuPrint_RightAligned(buffer, 22, 7);
-
- ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses);
- MenuPrint_RightAligned(buffer, 28, 7);
+ ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses);
+ MenuPrint_RightAligned(buffer, 28, 7);
+ }
}
static void TrainerCard_Back_PrintBattleTower_Label(void)
{
- if (ewram0.var_a == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15);
+ if (ewram0.var_a != 0)
+ MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15);
}
static void TrainerCard_Back_PrintBattleTower(void)
{
u8 buffer[16];
- if (ewram0.var_a == FALSE)
+ if (ewram0.var_a != 0)
{
- return;
- }
+ sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1);
+ MenuPrint_PixelCoords(buffer, 112, 120, 0);
- sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1);
- MenuPrint_PixelCoords(buffer, 112, 120, 0);
-
- sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1);
- MenuPrint_PixelCoords(buffer, 149, 120, 0);
+ sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1);
+ MenuPrint_PixelCoords(buffer, 149, 120, 0);
+ }
}
static void TrainerCard_Back_PrintLinkContests_Label(void)
{
- if (ewram0.var_b == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_ContestRecord, 3, 13);
+ if (ewram0.var_b != 0)
+ MenuPrint(gOtherText_ContestRecord, 3, 13);
}
static void TrainerCard_Back_PrintLinkContests(void)
{
u8 buffer[8];
- if (ewram0.var_b == FALSE)
+ if (ewram0.var_b != 0)
{
- return;
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ MenuPrint_RightAligned(buffer, 28, 13);
}
-
- ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3);
- MenuPrint_RightAligned(buffer, 28, 13);
}
static void TrainerCard_Back_PrintLinkPokeblocks_Label(void)
{
- if (ewram0.var_c == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_MixingRecord, 3, 11);
+ if (ewram0.var_c != 0)
+ MenuPrint(gOtherText_MixingRecord, 3, 11);
}
static void TrainerCard_Back_PrintLinkPokeblocks(void)
{
u8 buffer[8];
- if (ewram0.var_c == FALSE)
+ if (ewram0.var_c != 0)
{
- return;
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ MenuPrint_RightAligned(buffer, 28, 11);
}
-
- ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
- MenuPrint_RightAligned(buffer, 28, 11);
}
static void TrainerCard_Back_PrintPokemonTrades_Label(void)
{
- if (ewram0.var_d == FALSE)
- {
- return;
- }
-
- MenuPrint(gOtherText_TradeRecord, 3, 9);
+ if (ewram0.var_d != 0)
+ MenuPrint(gOtherText_TradeRecord, 3, 9);
}
static void TrainerCard_Back_PrintPokemonTrades(void)
{
u8 buffer[8];
- if (ewram0.var_d == FALSE)
+ if (ewram0.var_d != 0)
{
- return;
+ ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ MenuPrint_RightAligned(buffer, 28, 9);
}
-
- ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
- MenuPrint_RightAligned(buffer, 28, 9);
}
void unref_sub_8094588(u16 left, u16 top)
@@ -1831,9 +1563,6 @@ void unref_sub_8094588(u16 left, u16 top)
const u8 *text = gOtherText_Boy;
if (gSaveBlock2.playerGender == FEMALE)
- {
text = gOtherText_Girl;
- }
-
- MenuPrint(text, (u8)left, (u8)top);
+ MenuPrint(text, left, top);
}