diff options
-rw-r--r-- | asm/battle_records.s | 401 | ||||
-rw-r--r-- | baserom.ips | bin | 2327998 -> 2325691 bytes | |||
-rw-r--r-- | data/data_83F5738.s | 23 | ||||
-rw-r--r-- | graphics/battle_records/bg_tiles.png | bin | 0 -> 135 bytes | |||
-rw-r--r-- | graphics/battle_records/palette.pal | 19 | ||||
-rw-r--r-- | graphics/battle_records/tilemap.bin | bin | 0 -> 2048 bytes | |||
-rw-r--r-- | include/strings.h | 7 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_records.c | 168 |
9 files changed, 197 insertions, 424 deletions
diff --git a/asm/battle_records.s b/asm/battle_records.s deleted file mode 100644 index 0d5db750c..000000000 --- a/asm/battle_records.s +++ /dev/null @@ -1,401 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80CD9F4 -sub_80CD9F4: @ 80CD9F4 - push {r4-r7,lr} - sub sp, 0x14 - movs r0, 0x17 - bl GetGameStat - adds r4, r0, 0 - movs r0, 0x18 - bl GetGameStat - adds r5, r0, 0 - movs r0, 0x19 - bl GetGameStat - adds r6, r0, 0 - ldr r0, _080CDAB0 @ =0x0000270f - cmp r4, r0 - bls _080CDA18 - adds r4, r0, 0 -_080CDA18: - cmp r5, r0 - bls _080CDA1E - adds r5, r0, 0 -_080CDA1E: - cmp r6, r0 - bls _080CDA24 - adds r6, r0, 0 -_080CDA24: - ldr r0, _080CDAB4 @ =gStringVar1 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - ldr r0, _080CDAB8 @ =gStringVar2 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - ldr r0, _080CDABC @ =gStringVar3 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - movs r3, 0 - ldr r6, _080CDAC0 @ =gUnknown_83F6C84 - ldr r7, _080CDAC4 @ =gStringVar4 - ldr r0, _080CDAC8 @ =gUnknown_8418188 - mov r12, r0 - movs r5, 0 -_080CDA54: - lsls r0, r3, 2 - adds r0, r6 - ldr r2, [r0] - movs r1, 0 - adds r4, r3, 0x1 - movs r3, 0x3 -_080CDA60: - cmp r1, 0 - bne _080CDA70 - ldrb r0, [r2] - cmp r0, 0xFF - bne _080CDA6C - movs r1, 0x1 -_080CDA6C: - cmp r1, 0 - beq _080CDA72 -_080CDA70: - strb r5, [r2] -_080CDA72: - adds r2, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _080CDA60 - movs r0, 0xFF - strb r0, [r2] - adds r3, r4, 0 - cmp r3, 0x2 - bls _080CDA54 - adds r0, r7, 0 - mov r1, r12 - bl StringExpandPlaceholders - movs r0, 0 - str r0, [sp] - movs r1, 0x2 - str r1, [sp, 0x4] - ldr r1, _080CDACC @ =gUnknown_83F6C78 - str r1, [sp, 0x8] - str r0, [sp, 0xC] - str r7, [sp, 0x10] - movs r1, 0x2 - movs r2, 0xC - movs r3, 0x18 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CDAB0: .4byte 0x0000270f -_080CDAB4: .4byte gStringVar1 -_080CDAB8: .4byte gStringVar2 -_080CDABC: .4byte gStringVar3 -_080CDAC0: .4byte gUnknown_83F6C84 -_080CDAC4: .4byte gStringVar4 -_080CDAC8: .4byte gUnknown_8418188 -_080CDACC: .4byte gUnknown_83F6C78 - thumb_func_end sub_80CD9F4 - - thumb_func_start sub_80CDAD0 -sub_80CDAD0: @ 80CDAD0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r5, 0 - ldrh r0, [r6, 0xA] - cmp r0, 0 - bne _080CDB50 - ldr r0, [r6, 0xC] - cmp r0, 0 - bne _080CDB50 - str r5, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - ldr r0, _080CDB44 @ =gUnknown_83F6C78 - str r0, [sp, 0x8] - str r5, [sp, 0xC] - ldr r0, _080CDB48 @ =gUnknown_84181B6 - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - mov r3, r8 - bl AddTextPrinterParameterized4 - movs r6, 0 -_080CDB0E: - movs r4, 0x54 - cmp r5, 0 - beq _080CDB1C - movs r4, 0xB4 - cmp r5, 0x1 - bne _080CDB1C - movs r4, 0x84 -_080CDB1C: - adds r2, r4, 0 - str r6, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - ldr r0, _080CDB44 @ =gUnknown_83F6C78 - str r0, [sp, 0x8] - str r6, [sp, 0xC] - ldr r0, _080CDB4C @ =gUnknown_84181BE - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - mov r3, r8 - bl AddTextPrinterParameterized4 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _080CDB0E - b _080CDBCE - .align 2, 0 -_080CDB44: .4byte gUnknown_83F6C78 -_080CDB48: .4byte gUnknown_84181B6 -_080CDB4C: .4byte gUnknown_84181BE -_080CDB50: - movs r5, 0 - ldr r7, _080CDB70 @ =gStringVar1 - mov r9, r5 -_080CDB56: - cmp r5, 0 - bne _080CDB74 - movs r4, 0 - adds r0, r7, 0 - movs r1, 0x8 - bl StringFillWithTerminator - adds r0, r7, 0 - adds r1, r6, 0 - movs r2, 0x7 - bl StringCopyN - b _080CDBA6 - .align 2, 0 -_080CDB70: .4byte gStringVar1 -_080CDB74: - cmp r5, 0x1 - bne _080CDB7E - movs r4, 0x54 - ldrh r1, [r6, 0xA] - b _080CDB86 -_080CDB7E: - cmp r5, 0x2 - bne _080CDB98 - movs r4, 0x84 - ldrh r1, [r6, 0xC] -_080CDB86: - ldr r0, _080CDB94 @ =gStringVar1 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - b _080CDBA6 - .align 2, 0 -_080CDB94: .4byte gStringVar1 -_080CDB98: - movs r4, 0xB4 - ldrh r1, [r6, 0xE] - ldr r0, _080CDBDC @ =gStringVar1 - movs r2, 0x1 - movs r3, 0x4 - bl ConvertIntToDecimalStringN -_080CDBA6: - adds r2, r4, 0 - mov r0, r9 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - ldr r0, _080CDBE0 @ =gUnknown_83F6C78 - str r0, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - str r7, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - mov r3, r8 - bl AddTextPrinterParameterized4 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _080CDB56 -_080CDBCE: - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CDBDC: .4byte gStringVar1 -_080CDBE0: .4byte gUnknown_83F6C78 - thumb_func_end sub_80CDAD0 - - thumb_func_start sub_80CDBE4 -sub_80CDBE4: @ 80CDBE4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - movs r0, 0xD8 - str r0, [sp] - movs r0, 0x90 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect - ldr r5, _080CDC9C @ =gStringVar4 - ldr r1, _080CDCA0 @ =gUnknown_8418174 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r2, 0x1 - negs r2, r2 - movs r0, 0x2 - adds r1, r5, 0 - bl GetStringWidth - movs r2, 0xD0 - subs r2, r0 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - movs r4, 0 - str r4, [sp] - movs r0, 0x2 - mov r9, r0 - str r0, [sp, 0x4] - ldr r6, _080CDCA4 @ =gUnknown_83F6C78 - str r6, [sp, 0x8] - str r4, [sp, 0xC] - str r5, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - movs r3, 0x4 - bl AddTextPrinterParameterized4 - ldr r5, _080CDCA8 @ =gSaveBlock2Ptr - ldr r0, [r5] - ldr r1, _080CDCAC @ =0x00000a98 - mov r8, r1 - add r0, r8 - bl sub_80CD9F4 - str r4, [sp] - mov r0, r9 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - str r4, [sp, 0xC] - ldr r0, _080CDCB0 @ =gUnknown_84181A4 - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x54 - movs r3, 0x30 - bl AddTextPrinterParameterized4 - adds r7, r5, 0 - movs r5, 0xF4 - lsls r5, 22 - mov r6, r8 - movs r4, 0x4 -_080CDC70: - ldr r0, [r7] - adds r0, r6 - lsrs r1, r5, 24 - bl sub_80CDAD0 - movs r1, 0xE0 - lsls r1, 20 - adds r5, r1 - adds r6, 0x10 - subs r4, 0x1 - cmp r4, 0 - bge _080CDC70 - movs r0, 0 - bl sub_80CDCB4 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CDC9C: .4byte gStringVar4 -_080CDCA0: .4byte gUnknown_8418174 -_080CDCA4: .4byte gUnknown_83F6C78 -_080CDCA8: .4byte gSaveBlock2Ptr -_080CDCAC: .4byte 0x00000a98 -_080CDCB0: .4byte gUnknown_84181A4 - thumb_func_end sub_80CDBE4 - - thumb_func_start sub_80CDCB4 -sub_80CDCB4: @ 80CDCB4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80CDCB4 - - thumb_func_start sub_80CDCD0 -sub_80CDCD0: @ 80CDCD0 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080CDD0C @ =gUnknown_83F6388 - adds r0, r4, 0 - movs r2, 0xC0 - movs r3, 0 - bl LoadBgTiles - ldr r1, _080CDD10 @ =gUnknown_83F6468 - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - ldr r0, _080CDD14 @ =gUnknown_83F6448 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CDD0C: .4byte gUnknown_83F6388 -_080CDD10: .4byte gUnknown_83F6468 -_080CDD14: .4byte gUnknown_83F6448 - thumb_func_end sub_80CDCD0 - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips Binary files differindex f70a84768..81e7391b4 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/data/data_83F5738.s b/data/data_83F5738.s index c14edc5c8..a466ffd45 100644 --- a/data/data_83F5738.s +++ b/data/data_83F5738.s @@ -105,26 +105,9 @@ gUnknown_83F6366:: @ 83F6366 gUnknown_83F637C:: @ 83F637C .incbin "baserom.gba", 0x3F637C, 0xC -gUnknown_83F6388:: @ 83F6388 - .incbin "baserom.gba", 0x3F6388, 0xC0 - -gUnknown_83F6448:: @ 83F6448 - .incbin "baserom.gba", 0x3F6448, 0x20 - -gUnknown_83F6468:: @ 83F6468 - .incbin "baserom.gba", 0x3F6468, 0x800 - -gUnknown_83F6C68:: @ 83F6C68 - .incbin "baserom.gba", 0x3F6C68, 0x10 - -gUnknown_83F6C78:: @ 83F6C78 - .incbin "baserom.gba", 0x3F6C78, 0x4 - -gUnknown_83F6C7C:: @ 83F6C7C - .incbin "baserom.gba", 0x3F6C7C, 0x8 - -gUnknown_83F6C84:: @ 83F6C84 - .incbin "baserom.gba", 0x3F6C84, 0x2C + .section .rodata.83F6C90 +gUnknown_83F6C90:: @ 83F6C90 + .incbin "baserom.gba", 0x3F6C90, 0x20 gUnknown_83F6CB0:: @ 83F6CB0 .incbin "baserom.gba", 0x3F6CB0, 0x6F8 diff --git a/graphics/battle_records/bg_tiles.png b/graphics/battle_records/bg_tiles.png Binary files differnew file mode 100644 index 000000000..bbe9de321 --- /dev/null +++ b/graphics/battle_records/bg_tiles.png diff --git a/graphics/battle_records/palette.pal b/graphics/battle_records/palette.pal new file mode 100644 index 000000000..d6994a324 --- /dev/null +++ b/graphics/battle_records/palette.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +74 74 74 +189 131 156 +230 156 213 +222 238 255 +230 246 255 +148 115 139 +197 213 222 +172 164 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_records/tilemap.bin b/graphics/battle_records/tilemap.bin Binary files differnew file mode 100644 index 000000000..a3691cfd7 --- /dev/null +++ b/graphics/battle_records/tilemap.bin diff --git a/include/strings.h b/include/strings.h index cbe5286f2..d7ba606f9 100644 --- a/include/strings.h +++ b/include/strings.h @@ -185,4 +185,11 @@ extern const u8 gUnknown_841B684[]; extern const u8 gUnknown_841B68F[]; extern const u8 gUnknown_841B698[]; +// battle_records +extern const u8 gUnknown_8418174[]; +extern const u8 gUnknown_8418188[]; +extern const u8 gUnknown_84181A4[]; +extern const u8 gUnknown_84181B6[]; +extern const u8 gUnknown_84181BE[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index f10d4427f..55cb9d316 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -189,7 +189,6 @@ SECTIONS { src/hof_pc.o(.text); asm/field_specials.o(.text); src/battle_records.o(.text); - asm/battle_records.o(.text); asm/evolution_scene.o(.text); src/coins.o(.text); src/fldeff_strength.o(.text); @@ -417,6 +416,8 @@ SECTIONS { data/data_835B488.o(.rodata.83EEC98); src/battle_ai_script_commands.o(.rodata); data/data_83F5738.o(.rodata); + src/battle_records.o(.rodata); + data/data_83F5738.o(.rodata.83F6C90); src/save.o(.rodata); data/data_83FECCC.o(.rodata); src/intro.o(.rodata); diff --git a/src/battle_records.c b/src/battle_records.c index bd63ba06b..04d282b1d 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -16,7 +16,9 @@ #include "sound.h" #include "string_util.h" #include "link.h" +#include "menu.h" #include "overworld.h" +#include "strings.h" #include "trainer_card.h" #include "constants/battle.h" #include "constants/songs.h" @@ -45,10 +47,54 @@ void sub_80CD608(void); void sub_80CD628(void); void sub_80CD638(void); void sub_80CDBE4(void); +void sub_80CDCB4(u8 windowId); void sub_80CDCD0(u8 bgId); -extern const struct WindowTemplate gUnknown_83F6C68[]; -extern const struct BgTemplate gUnknown_83F6C7C[2]; +const u16 gUnknown_83F6388[] = INCBIN_U16("graphics/battle_records/bg_tiles.4bpp"); +const u16 gUnknown_83F6448[] = INCBIN_U16("graphics/battle_records/palette.gbapal"); +const u16 gUnknown_83F6468[] = INCBIN_U16("graphics/battle_records/tilemap.bin"); + +const struct WindowTemplate gUnknown_83F6C68[] = { + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 27, + .height = 18, + .paletteNum = 0xF, + .baseBlock = 0x014 + }, DUMMY_WIN_TEMPLATE +}; + +const struct TextColor gUnknown_83F6C78 = { + 0, 2, 3 +}; + +const struct BgTemplate gUnknown_83F6C7C[2] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +u8 *const gUnknown_83F6C84[3] = { + gStringVar1, + gStringVar2, + gStringVar3 +}; void sub_80CD228(void) { @@ -418,3 +464,121 @@ void sub_80CD98C(s32 battlerId) sub_80CD854(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language); } } + +void sub_80CD9F4(struct LinkBattleRecords * records) +{ + u32 nwins = GetGameStat(GAME_STAT_LINK_BATTLE_WINS); + u32 nlosses = GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES); + u32 ndraws = GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS); + s32 i; + s32 j; + bool32 foundEnd; + u8 * strvar; + + if (nwins > 9999) + nwins = 9999; + if (nlosses > 9999) + nlosses = 9999; + if (ndraws > 9999) + ndraws = 9999; + + ConvertIntToDecimalStringN(gStringVar1, nwins, STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar2, nlosses, STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar3, ndraws, STR_CONV_MODE_LEFT_ALIGN, 4); + + for (i = 0; i < NELEMS(gUnknown_83F6C84); i++) + { + strvar = gUnknown_83F6C84[i]; + foundEnd = FALSE; + for (j = 0; j < 4; j++) + { + if (!foundEnd && *strvar == EOS) + foundEnd = TRUE; + if (foundEnd) + *strvar = CHAR_SPACE; + strvar++; + } + *strvar = 0xFF; + } + + StringExpandPlaceholders(gStringVar4, gUnknown_8418188); + AddTextPrinterParameterized4(0, 2, 12, 24, 0, 2, &gUnknown_83F6C78, 0, gStringVar4); +} + +void sub_80CDAD0(struct LinkBattleRecord * record, u8 y) +{ + u8 i = 0; + s32 x; + + if (record->wins == 0 && record->losses == 0 && record->draws == 0) + { + AddTextPrinterParameterized4(0, 2, 0, y, 0, 2, &gUnknown_83F6C78, 0, gUnknown_84181B6); + for (i = 0; i < 3; i++) + { + if (i == 0) + x = 0x54; + else if (i == 1) + x = 0x84; + else + x = 0xB4; + AddTextPrinterParameterized4(0, 2, x, y, 0, 2, &gUnknown_83F6C78, 0, gUnknown_84181BE); + } + } + else + { + for (i = 0; i < 4; i++) + { + if (i == 0) + { + x = 0; + StringFillWithTerminator(gStringVar1, OT_NAME_LENGTH + 1); + StringCopyN(gStringVar1, record->name, OT_NAME_LENGTH); + } + else if (i == 1) + { + x = 0x54; + ConvertIntToDecimalStringN(gStringVar1, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); + } + else if (i == 2) + { + x = 0x84; + ConvertIntToDecimalStringN(gStringVar1, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); + } + else + { + x = 0xB4; + ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); + } + AddTextPrinterParameterized4(0, 2, x, y, 0, 2, &gUnknown_83F6C78, 0, gStringVar1); + } + } +} + +void sub_80CDBE4(void) +{ + u32 left; + s32 i; + + FillWindowPixelRect(0, PIXEL_FILL(0), 0, 0, 0xD8, 0x90); + StringExpandPlaceholders(gStringVar4, gUnknown_8418174); + left = 0xD0 - GetStringWidth(2, gStringVar4, -1); + AddTextPrinterParameterized4(0, 2, left / 2, 4, 0, 2, &gUnknown_83F6C78, 0, gStringVar4); + sub_80CD9F4(&gSaveBlock2Ptr->linkBattleRecords); + AddTextPrinterParameterized4(0, 2, 0x54, 0x30, 0, 2, &gUnknown_83F6C78, 0, gUnknown_84181A4); + for (i = 0; i < LINK_B_RECORDS_COUNT; i++) + sub_80CDAD0(&gSaveBlock2Ptr->linkBattleRecords.entries[i], 0x3D + 14 * i); + sub_80CDCB4(0); +} + +void sub_80CDCB4(u8 windowId) +{ + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +void sub_80CDCD0(u8 bg) +{ + LoadBgTiles(bg, gUnknown_83F6388, 0xC0, 0); + CopyToBgTilemapBufferRect(bg, gUnknown_83F6468, 0, 0, 32, 32); + LoadPalette(gUnknown_83F6448, 0, 0x20); +} |