From c33448ba0929a54252b02bdc848c9f30d2a544cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 May 2019 14:17:26 -0400 Subject: slot_machine: through sub_813FBC0 --- asm/slot_machine.s | 510 ------------------------------------------------- include/quest_log.h | 1 + include/slot_machine.h | 2 +- include/songs.h | 468 --------------------------------------------- ld_script.txt | 1 + src/slot_machine.c | 267 ++++++++++++++++++++++++++ src/vs_seeker.c | 2 +- 7 files changed, 271 insertions(+), 980 deletions(-) delete mode 100644 include/songs.h create mode 100644 src/slot_machine.c diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 02e17cbb0..659b8901c 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,516 +5,6 @@ .text - thumb_func_start PlaySlotMachine -PlaySlotMachine: @ 813F804 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - bl ResetTasks - ldr r4, _0813F828 @ =gUnknown_203F3A0 - movs r0, 0x54 - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _0813F82C - adds r0, r6, 0 - bl SetMainCallback2 - b _0813F840 - .align 2, 0 -_0813F828: .4byte gUnknown_203F3A0 -_0813F82C: - cmp r5, 0x5 - bls _0813F832 - movs r5, 0 -_0813F832: - strh r5, [r0, 0x4] - str r6, [r0] - bl sub_813F84C - ldr r0, _0813F848 @ =sub_813F898 - bl SetMainCallback2 -_0813F840: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F848: .4byte sub_813F898 - thumb_func_end PlaySlotMachine - - thumb_func_start sub_813F84C -sub_813F84C: @ 813F84C - push {r4-r6,lr} - movs r1, 0 - strh r1, [r0, 0x6] - strh r1, [r0, 0xE] - adds r0, 0x50 - strh r1, [r0] - movs r3, 0 - ldr r6, _0813F894 @ =gUnknown_203F3A0 - movs r4, 0 - movs r5, 0x15 -_0813F860: - ldr r2, [r6] - lsls r1, r3, 2 - adds r0, r2, 0 - adds r0, 0x14 - adds r0, r1 - str r4, [r0] - lsls r1, r3, 1 - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x26 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x2C - adds r0, r1 - strh r5, [r0] - adds r3, 0x1 - cmp r3, 0x2 - ble _0813F860 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F894: .4byte gUnknown_203F3A0 - thumb_func_end sub_813F84C - - thumb_func_start sub_813F898 -sub_813F898: @ 813F898 - push {r4,lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0813F8BC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - beq _0813F8C0 - cmp r0, 0x1 - beq _0813F8EC - b _0813F916 - .align 2, 0 -_0813F8BC: .4byte gMain -_0813F8C0: - bl sub_814104C - cmp r0, 0 - beq _0813F8DC - ldr r0, _0813F8D8 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldr r0, [r0] - bl SetMainCallback2 - bl sub_813F92C - b _0813F916 - .align 2, 0 -_0813F8D8: .4byte gUnknown_203F3A0 -_0813F8DC: - movs r0, 0 - movs r1, 0 - bl sub_8141148 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0813F916 -_0813F8EC: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813F916 - ldr r0, _0813F91C @ =sub_813F964 - movs r1, 0 - bl CreateTask - ldr r4, _0813F920 @ =gUnknown_203F3A0 - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, _0813F924 @ =sub_8140060 - movs r1, 0x1 - bl CreateTask - ldr r1, [r4] - strb r0, [r1, 0x11] - ldr r0, _0813F928 @ =sub_813F94C - bl SetMainCallback2 -_0813F916: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F91C: .4byte sub_813F964 -_0813F920: .4byte gUnknown_203F3A0 -_0813F924: .4byte sub_8140060 -_0813F928: .4byte sub_813F94C - thumb_func_end sub_813F898 - - thumb_func_start sub_813F92C -sub_813F92C: @ 813F92C - push {r4,lr} - bl sub_8141094 - ldr r4, _0813F948 @ =gUnknown_203F3A0 - ldr r0, [r4] - cmp r0, 0 - beq _0813F942 - bl Free - movs r0, 0 - str r0, [r4] -_0813F942: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F948: .4byte gUnknown_203F3A0 - thumb_func_end sub_813F92C - - thumb_func_start sub_813F94C -sub_813F94C: @ 813F94C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_813F94C - - thumb_func_start sub_813F964 -sub_813F964: @ 813F964 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813F988 @ =gTasks+0x8 - adds r6, r1, r0 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x4 - bls _0813F97E - b _0813FBB8 -_0813F97E: - lsls r0, 2 - ldr r1, _0813F98C @ =_0813F990 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813F988: .4byte gTasks+0x8 -_0813F98C: .4byte _0813F990 - .align 2, 0 -_0813F990: - .4byte _0813F9A4 - .4byte _0813FAA8 - .4byte _0813FAE4 - .4byte _0813FB08 - .4byte _0813FB48 -_0813F9A4: - bl GetCoins - lsls r0, 16 - cmp r0, 0 - bne _0813F9BC - ldr r0, _0813F9B8 @ =sub_813FBC0 - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813F9B8: .4byte sub_813FBC0 -_0813F9BC: - ldr r1, _0813F9F4 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _0813F9FC - ldr r0, _0813F9F8 @ =gUnknown_203F3A0 - ldr r1, [r0] - ldrh r0, [r1, 0xE] - adds r0, 0x1 - strh r0, [r1, 0xE] - movs r0, 0x1 - bl TakeCoins - movs r0, 0x58 - bl PlaySE - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x1 - b _0813FBB6 - .align 2, 0 -_0813F9F4: .4byte gMain -_0813F9F8: .4byte gUnknown_203F3A0 -_0813F9FC: - movs r0, 0x80 - lsls r0, 1 - ands r0, r2 - cmp r0, 0 - beq _0813FA5C - ldr r5, _0813FA2C @ =gUnknown_203F3A0 - ldr r0, [r5] - ldrh r0, [r0, 0xE] - movs r7, 0x3 - subs r4, r7, r0 - bl GetCoins - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - blt _0813FA30 - ldr r0, [r5] - strh r7, [r0, 0xE] - lsls r0, r4, 16 - lsrs r0, 16 - bl TakeCoins - b _0813FA42 - .align 2, 0 -_0813FA2C: .4byte gUnknown_203F3A0 -_0813FA30: - bl GetCoins - ldr r1, [r5] - ldrh r2, [r1, 0xE] - adds r0, r2 - strh r0, [r1, 0xE] - movs r0, 0 - bl SetCoins -_0813FA42: - movs r0, 0x58 - bl PlaySE - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x1 - b _0813FBB6 -_0813FA5C: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _0813FA78 - ldr r0, _0813FA74 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - cmp r0, 0 - beq _0813FA78 - movs r0, 0x2 - b _0813FBB6 - .align 2, 0 -_0813FA74: .4byte gUnknown_203F3A0 -_0813FA78: - ldrh r1, [r1, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813FA90 - ldr r0, _0813FA8C @ =sub_813FCAC - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FA8C: .4byte sub_813FCAC -_0813FA90: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0813FA9A - b _0813FBB8 -_0813FA9A: - ldr r0, _0813FAA4 @ =sub_813FC2C - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FAA4: .4byte sub_813FC2C -_0813FAA8: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - beq _0813FAB4 - b _0813FBB8 -_0813FAB4: - movs r0, 0x1 - bl sub_8141180 - adds r4, r0, 0 - cmp r4, 0 - beq _0813FAC2 - b _0813FBB8 -_0813FAC2: - ldr r0, _0813FADC @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - cmp r0, 0x3 - beq _0813FAD6 - bl GetCoins - lsls r0, 16 - cmp r0, 0 - bne _0813FAE0 -_0813FAD6: - movs r0, 0x2 - b _0813FBB6 - .align 2, 0 -_0813FADC: .4byte gUnknown_203F3A0 -_0813FAE0: - strh r4, [r6] - b _0813FBB8 -_0813FAE4: - bl sub_811539C - bl sub_81409B4 - bl sub_8140148 - ldr r0, _0813FB04 @ =gUnknown_203F3A0 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x6] - movs r0, 0x3 - movs r1, 0 - bl sub_8141148 - b _0813FBB4 - .align 2, 0 -_0813FB04: .4byte gUnknown_203F3A0 -_0813FB08: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FBB8 - ldr r0, _0813FB40 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FBB8 - movs r0, 0x18 - bl PlaySE - ldr r4, _0813FB44 @ =gUnknown_203F3A0 - ldr r0, [r4] - ldrh r1, [r0, 0x6] - adds r0, r1, 0 - bl sub_814016C - ldr r0, [r4] - ldrb r0, [r0, 0x6] - movs r1, 0 - bl sub_8141C30 - movs r0, 0x4 - b _0813FBB6 - .align 2, 0 -_0813FB40: .4byte gMain -_0813FB44: .4byte gUnknown_203F3A0 -_0813FB48: - ldr r5, _0813FB90 @ =gUnknown_203F3A0 - ldr r0, [r5] - ldrh r0, [r0, 0x6] - bl sub_81401A0 - cmp r0, 0 - bne _0813FBB8 - movs r0, 0 - bl sub_8141180 - adds r4, r0, 0 - cmp r4, 0 - bne _0813FBB8 - ldr r1, [r5] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bls _0813FBB4 - bl sub_8140A80 - ldr r1, [r5] - strh r0, [r1, 0xA] - strh r4, [r1, 0xE] - strh r4, [r1, 0x6] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0813FB98 - ldr r0, _0813FB94 @ =sub_813FD84 - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FB90: .4byte gUnknown_203F3A0 -_0813FB94: .4byte sub_813FD84 -_0813FB98: - cmp r0, 0x6 - bne _0813FBA2 - movs r0, 0x1C - bl IncrementGameStat -_0813FBA2: - bl sub_8140A70 - ldr r0, _0813FBB0 @ =sub_813FE1C - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FBB0: .4byte sub_813FE1C -_0813FBB4: - movs r0, 0x3 -_0813FBB6: - strh r0, [r6] -_0813FBB8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813F964 - - thumb_func_start sub_813FBC0 -sub_813FBC0: @ 813FBC0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FBE4 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813FBF8 - cmp r0, 0x1 - bgt _0813FBE8 - cmp r0, 0 - beq _0813FBEE - b _0813FC1C - .align 2, 0 -_0813FBE4: .4byte gTasks+0x8 -_0813FBE8: - cmp r0, 0x2 - beq _0813FC0A - b _0813FC1C -_0813FBEE: - movs r0, 0x9 - movs r1, 0 - bl sub_8141148 - b _0813FC02 -_0813FBF8: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FC1C -_0813FC02: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FC1C -_0813FC0A: - ldr r0, _0813FC24 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _0813FC1C - ldr r0, _0813FC28 @ =sub_813FFD8 - bl sub_8140030 -_0813FC1C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FC24: .4byte gMain -_0813FC28: .4byte sub_813FFD8 - thumb_func_end sub_813FBC0 - thumb_func_start sub_813FC2C sub_813FC2C: @ 813FC2C push {r4,lr} diff --git a/include/quest_log.h b/include/quest_log.h index cdd28371f..aca3e5fe8 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -22,6 +22,7 @@ extern const u16 gUnknown_84566A8[]; void sub_8112720(u8); void sub_8113550(u16, const u16 *); +void sub_811539C(void); void sub_8115748(u16); u8 sub_8112CAC(void); bool8 sub_81119D4(void (*func)(void)); diff --git a/include/slot_machine.h b/include/slot_machine.h index 5c96384fa..37120f66b 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -3,6 +3,6 @@ #include "global.h" -void PlaySlotMachine(u8, void *); +void PlaySlotMachine(u16, void (*)(void)); #endif // GUARD_SLOT_MACHINE_H diff --git a/include/songs.h b/include/songs.h deleted file mode 100644 index f8d0fbf5b..000000000 --- a/include/songs.h +++ /dev/null @@ -1,468 +0,0 @@ -#ifndef GUARD_SONGS_H -#define GUARD_SONGS_H - -#include "global.h" - -enum -{ - /*0x00*/ SE_STOP, - /*0x01*/ SE_KAIFUKU, - /*0x02*/ SE_PC_LOGON, - /*0x03*/ SE_PC_OFF, - /*0x04*/ SE_PC_ON, - /*0x05*/ SE_SELECT, - /*0x06*/ SE_WIN_OPEN, - /*0x07*/ SE_WALL_HIT, - /*0x08*/ SE_DOOR, - /*0x09*/ SE_KAIDAN, - /*0x0A*/ SE_DANSA, - /*0x0B*/ SE_JITENSYA, - /*0x0C*/ SE_KOUKA_L, // Goggle told me Kouka means 'effectiveness' which makes sense, because - /*0x0D*/ SE_KOUKA_M, // those three sounds play whenever you use a move - /*0x0E*/ SE_KOUKA_H, - /*0x0F*/ SE_BOWA2, - /*0x10*/ SE_POKE_DEAD, - /*0x11*/ SE_NIGERU, - /*0x12*/ SE_JIDO_DOA, - /*0x13*/ SE_NAMINORI, - /*0x14*/ SE_BAN, - /*0x15*/ SE_PIN, - /*0x16*/ SE_BOO, - /*0x17*/ SE_BOWA, - /*0x18*/ SE_JYUNI, - /*0x19*/ SE_A, - /*0x1A*/ SE_I, - /*0x1B*/ SE_U, - /*0x1C*/ SE_E, - /*0x1D*/ SE_O, - /*0x1E*/ SE_N, - /*0x1F*/ SE_SEIKAI, - /*0x20*/ SE_HAZURE, - /*0x21*/ SE_EXP, - /*0x22*/ SE_JITE_PYOKO, - /*0x23*/ SE_MU_PACHI, - /*0x24*/ SE_TK_KASYA, - /*0x25*/ SE_FU_ZAKU, - /*0x26*/ SE_FU_ZAKU2, - /*0x27*/ SE_FU_ZUZUZU, - /*0x28*/ SE_RU_GASHIN, - /*0x29*/ SE_RU_GASYAN, - /*0x2A*/ SE_RU_BARI, - /*0x2B*/ SE_RU_HYUU, - /*0x2C*/ SE_KI_GASYAN, - /*0x2D*/ SE_TK_WARPIN, - /*0x2E*/ SE_TK_WARPOUT, - /*0x2F*/ SE_TU_SAA, - /*0x30*/ SE_HI_TURUN, - /*0x31*/ SE_TRACK_MOVE, - /*0x32*/ SE_TRACK_STOP, - /*0x33*/ SE_TRACK_HAIK, - /*0x34*/ SE_TRACK_DOOR, - /*0x35*/ SE_MOTER, - /*0x36*/ SE_CARD, - /*0x37*/ SE_SAVE, - /*0x38*/ SE_KON, - /*0x39*/ SE_KON2, - /*0x3A*/ SE_KON3, - /*0x3B*/ SE_KON4, - /*0x3C*/ SE_SUIKOMU, - /*0x3D*/ SE_NAGERU, - SE_TOY_C, - SE_TOY_D, - SE_TOY_E, - SE_TOY_F, - SE_TOY_G, - SE_TOY_A, - SE_TOY_B, - SE_TOY_C1, - SE_MIZU, - SE_HASHI, - SE_DAUGI, - SE_PINPON, - SE_FUUSEN1, - SE_FUUSEN2, - SE_FUUSEN3, - SE_TOY_KABE, - SE_TOY_DANGO, - SE_DOKU, - SE_ESUKA, - SE_T_AME, - SE_T_AME_E, - SE_T_OOAME, - SE_T_OOAME_E, - SE_T_KOAME, - SE_T_KOAME_E, - SE_T_KAMI, - SE_T_KAMI2, - SE_ELEBETA, - /*0x5A*/ SE_HINSI, - /*0x5B*/ SE_EXPMAX, - /*0x5C*/ SE_TAMAKORO, - /*0x5D*/ SE_TAMAKORO_E, - /*0x5E*/ SE_BASABASA, - /*0x5F*/ SE_REGI, - SE_C_GAJI, - SE_C_MAKU_U, - SE_C_MAKU_D, - SE_C_PASI, - SE_C_SYU, - SE_C_PIKON, - /*0x66*/ SE_REAPOKE, - /*0x67*/ SE_OP_BASYU, - /*0x68*/ SE_BT_START, - SE_DENDOU, - SE_JIHANKI, - SE_TAMA, - SE_Z_SCROLL, - /*0x6D*/ SE_Z_PAGE, - /*0x6E*/ SE_PN_ON, - /*0x6F*/ SE_PN_OFF, - /*0x70*/ SE_Z_SEARCH, - /*0x71*/ SE_TAMAGO, - /*0x72*/ SE_TB_START, - /*0x73*/ SE_TB_KON, - /*0x74*/ SE_TB_KARA, - /*0x75*/ SE_BIDORO, - /*0x76*/ SE_W085, - /*0x77*/ SE_W085B, - /*0x78*/ SE_W231, - /*0x79*/ SE_W171, - /*0x7A*/ SE_W233, - /*0x7B*/ SE_W233B, - /*0x7C*/ SE_W145, - /*0x7D*/ SE_W145B, - /*0x7E*/ SE_W145C, - /*0x7F*/ SE_W240, - /*0x80*/ SE_W015, - /*0x81*/ SE_W081, - /*0x82*/ SE_W081B, - /*0x83*/ SE_W088, - /*0x84*/ SE_W016, - /*0x85*/ SE_W016B, - /*0x86*/ SE_W003, - /*0x87*/ SE_W104, - /*0x88*/ SE_W013, - /*0x89*/ SE_W196, - /*0x8A*/ SE_W086, - /*0x8B*/ SE_W004, - /*0x8C*/ SE_W025, - /*0x8D*/ SE_W025B, - SE_W152, - SE_W026, - SE_W172, - SE_W172B, - SE_W053, - SE_W007, - SE_W092, - SE_W221, - SE_W221B, - SE_W052, - SE_W036, - SE_W059, - SE_W059B, - SE_W010, - SE_W011, - SE_W017, - SE_W019, - SE_W028, - SE_W013B, - SE_W044, - SE_W029, - SE_W057, - SE_W056, - SE_W250, - SE_W030, - SE_W039, - SE_W054, - SE_W077, - SE_W020, - SE_W082, - SE_W047, - SE_W195, - SE_W006, - SE_W091, - SE_W146, - SE_W120, - SE_W153, - SE_W071B, - SE_W071, - SE_W103, - /*0xB6*/ SE_W062, - /*0xB7*/ SE_W062B, - /*0xB8*/ SE_W048, - /*0xB9*/ SE_W187, - /*0xBA*/ SE_W118, - /*0xBB*/ SE_W155, - /*0xBC*/ SE_W122, - /*0xBD*/ SE_W060, - /*0xBE*/ SE_W185, - /*0xBF*/ SE_W014, - /*0xC0*/ SE_W043, - /*0xC1*/ SE_W207, - /*0xC2*/ SE_W207B, - /*0xC3*/ SE_W215, - /*0xC4*/ SE_W109, - /*0xC5*/ SE_W173, - /*0xC6*/ SE_W280, - /*0xC7*/ SE_W202, - /*0xC8*/ SE_W060B, - /*0xC9*/ SE_W076, - /*0xCA*/ SE_W080, - /*0xCB*/ SE_W100, - /*0xCC*/ SE_W107, - SE_W166, - SE_W129, - SE_W115, - SE_W112, - SE_W197, - SE_W199, - SE_W236, - SE_W204, - SE_W268, - SE_W070, - SE_W063, - SE_W127, - SE_W179, - SE_W151, - SE_W201, - SE_W161, - SE_W161B, - SE_W227, - SE_W227B, - SE_W226, - SE_W208, - SE_W213, - SE_W213B, - SE_W234, - SE_W260, - SE_W328, - SE_W320, - SE_W255, - SE_W291, - SE_W089, - SE_W239, - SE_W230, - SE_W281, - SE_W327, - SE_W287, - SE_W257, - SE_W253, - SE_W258, - SE_W322, - SE_W298, - SE_W287B, - SE_W114, - SE_W063B, - BGM_STOP = 349, - /*0x15E*/ BGM_TETSUJI, - /*0x15F*/ BGM_FIELD13, - /*0x160*/ BGM_KACHI22, - /*0x161*/ BGM_KACHI2, - /*0x162*/ BGM_KACHI3, - /*0x163*/ BGM_KACHI5, - /*0x164*/ BGM_PCC, - /*0x165*/ BGM_NIBI, - /*0x166*/ BGM_SUIKUN, - /*0x167*/ BGM_DOORO1, - /*0x168*/ BGM_DOORO_X1, - /*0x169*/ BGM_DOORO_X3, - /*0x16A*/ BGM_MACHI_S2, - /*0x16B*/ BGM_MACHI_S4, - /*0x16C*/ BGM_GIM, - /*0x16D*/ BGM_NAMINORI, - /*0x16E*/ BGM_DAN01, - /*0x16F*/ BGM_FANFA1, - /*0x170*/ BGM_ME_ASA, - /*0x171*/ BGM_ME_BACHI, - /*0x172*/ BGM_FANFA4, - /*0x173*/ BGM_FANFA5, - /*0x174*/ BGM_ME_WAZA, - /*0x175*/ BGM_BIJYUTU, - /*0x176*/ BGM_DOORO_X4, - /*0x177*/ BGM_FUNE_KAN, - /*0x178*/ BGM_ME_SHINKA, - /*0x179*/ BGM_SHINKA, - /*0x17A*/ BGM_ME_WASURE, - /*0x17B*/ BGM_SYOUJOEYE, - /*0x17C*/ BGM_BOYEYE, - /*0x17D*/ BGM_DAN02, - /*0x17E*/ BGM_MACHI_S3, - /*0x17F*/ BGM_ODAMAKI, - /*0x180*/ BGM_B_TOWER, - /*0x181*/ BGM_SWIMEYE, - /*0x182*/ BGM_DAN03, - /*0x183*/ BGM_ME_KINOMI, - /*0x184*/ BGM_ME_TAMA, - /*0x185*/ BGM_ME_B_BIG, - /*0x186*/ BGM_ME_B_SMALL, - /*0x187*/ BGM_ME_ZANNEN, - /*0x188*/ BGM_BD_TIME, - /*0x189*/ BGM_TEST1, - /*0x18A*/ BGM_TEST2, - /*0x18B*/ BGM_TEST3, - /*0x18C*/ BGM_TEST4, - /*0x18D*/ BGM_TEST, - /*0x18E*/ BGM_GOMACHI0, - /*0x18F*/ BGM_GOTOWN, - /*0x190*/ BGM_POKECEN, - /*0x191*/ BGM_NEXTROAD, - /*0x192*/ BGM_GRANROAD, - /*0x193*/ BGM_CYCLING, - /*0x194*/ BGM_FRIENDLY, - /*0x195*/ BGM_MISHIRO, - /*0x196*/ BGM_TOZAN, - /*0x197*/ BGM_GIRLEYE, - /*0x198*/ BGM_MINAMO, - /*0x199*/ BGM_ASHROAD, - /*0x19A*/ BGM_EVENT0, - /*0x19B*/ BGM_DEEPDEEP, - /*0x19C*/ BGM_KACHI1, - /*0x19D*/ BGM_TITLE3, - /*0x19E*/ BGM_DEMO1, - /*0x19F*/ BGM_GIRL_SUP, - /*0x1A0*/ BGM_HAGESHII, - /*0x1A1*/ BGM_KAKKOII, - /*0x1A2*/ BGM_KAZANBAI, - /*0x1A3*/ BGM_AQA_0, - /*0x1A4*/ BGM_TSURETEK, - /*0x1A5*/ BGM_BOY_SUP, - /*0x1A6*/ BGM_RAINBOW, - /*0x1A7*/ BGM_AYASII, - /*0x1A8*/ BGM_KACHI4, - /*0x1A9*/ BGM_ROPEWAY, - /*0x1AA*/ BGM_CASINO, - /*0x1AB*/ BGM_HIGHTOWN, - /*0x1AC*/ BGM_SAFARI, - BGM_C_ROAD, - BGM_AJITO, - BGM_M_BOAT, - BGM_M_DUNGON, - BGM_FINECITY, - BGM_MACHUPI, - BGM_P_SCHOOL, - BGM_DENDOU, - BGM_TONEKUSA, - BGM_MABOROSI, - BGM_CON_FAN, - BGM_CONTEST0, - BGM_MGM0, - BGM_T_BATTLE, - BGM_OOAME, - BGM_HIDERI, - BGM_RUNECITY, - BGM_CON_K, - BGM_EIKOU_R, - BGM_KARAKURI, - BGM_HUTAGO, - BGM_SITENNOU, - BGM_YAMA_EYE, - BGM_CONLOBBY, - BGM_INTER_V, - BGM_DAIGO, - BGM_THANKFOR, - BGM_END, - /*0x1C9*/ BGM_BATTLE_FRONTIER, // human-readable names start here because we don't know the actual filenames - BGM_BATTLE_ARENA, - BGM_ME_BATTLE_POINTS, // ME_ as in messagebox? Used for KINOMI (berries) and stuff above - BGM_ME_MATCH_CALL, - BGM_BATTLE_PYRAMID, - BGM_BATTLE_PYRAMID_SUMMIT, - BGM_BATTLE_PALACE, - BGM_FANFA_RAYQUAZA, - BGM_BATTLE_TOWER, - BGM_ME_BATTLE_SYMBOL, - BGM_BATTLE_DOME_TOURNAMENT, - BGM_BATTLE_PIKE, - BGM_BATTLE_FACTORY, - BGM_BATTLE_LEGENDARY, - BGM_BATTLE_FRONTIER_BRAIN, - BGM_BATTLE_MEW, - BGM_BATTLE_DOME, // end of the human-readable names - /*0x1DA*/ BGM_BATTLE27, // wild - BGM_BATTLE31, // aqua/magma grunt - BGM_BATTLE20, // trainer - BGM_BATTLE32, // gym leader - BGM_BATTLE33, // champion - BGM_BATTLE36, // regi - BGM_BATTLE34, // weather trio - BGM_BATTLE35, // rival - BGM_BATTLE38, // elite four - BGM_BATTLE30, // aqua/magma leader - /*0x1E4*/ BGM_FRLG_FOLLOW_ME, // FR/LG names not known, human-readable again! - BGM_FRLG_GAMECORNER, - BGM_FRLG_ROCKET_HIDEOUT, - BGM_FRLG_GYM, - BGM_FRLG_JIGGLYPUFF, - BGM_FRLG_OPENING, - BGM_FRLG_TITLE, - BGM_FRLG_CINNABAR_ISLAND, - BGM_FRLG_LAVENDER_TOWN, - BGM_FRLG_HEALING_TEST, - BGM_FRLG_BICYCLE, - BGM_FRLG_SUSPICIOUS_EYE, - BGM_FRLG_GIRL_EYE, - BGM_FRLG_BOY_EYE, - BGM_FRLG_CONGRATULATIONS_HALL_OF_FAME, - BGM_FRLG_VIRIDIAN_FOREST, - BGM_FRLG_MT_MOON, - BGM_FRLG_POKEMON_MANSION, - BGM_FRLG_CREDITS, - BGM_FRLG_ROUTE_1, - BGM_FRLG_ROUTE_24, - BGM_FRLG_ROUTE_3, - BGM_FRLG_ROUTE_11, - BGM_FRLG_INDIGO_PLATEAU, - BGM_FRLG_BATTLE_LEADER, - BGM_FRLG_BATTLE_TRAINER, - BGM_FRLG_BATTLE_WILD_POKEMON, - BGM_FRLG_BATTLE_CHAMPION, - BGM_FRLG_PALLET_TOWN, - BGM_FRLG_OAK_LAB, - BGM_FRLG_PROF_OAK, - BGM_FRLG_POKEMON_CENTER, - BGM_FRLG_SS_ANNE, - BGM_FRLG_SURF, - BGM_FRLG_POKEMON_TOWER, - BGM_FRLG_SILPH, - BGM_FRLG_CERULEAN_CITY, - BGM_FRLG_CELADON_CITY, - BGM_FRLG_KACHI_TRAINER, // KACHI used in RS test - victory - BGM_FRLG_KACHI_WILD_POKEMON, - BGM_FRLG_KACHI_LEADER, - BGM_FRLG_VERMILION_CITY, - BGM_FRLG_VIRIDIAN_CITY, - BGM_FRLG_RIVAL, - BGM_FRLG_RIVAL_POSTBATTLE, - BGM_FRLG_ME_POKEDEX_EVAL, - BGM_FRLG_ME_KEYITEM, - BGM_FRLG_FANFA_POKEMON_CAUGHT, - BGM_FRLG_FANFA_TRAINERCARD_PHOTO, - BGM_FRLG_GAMEFREAK_LOGO, - BGM_FRLG_CAUGHT_POKEMON, - BGM_FRLG_GAME_EXPLANATION_START, - BGM_FRLG_GAME_EXPLANATION_MIDDLE, - BGM_FRLG_GAME_EXPLANATION_END, - BGM_FRLG_POKEMON_JUMP, - BGM_FRLG_UNION_ROOM, - BGM_FRLG_POKEMON_NETWORK_CENTER, - BGM_FRLG_MYSTERY_GIFT, - BGM_FRLG_DODRIO_BERRY_PICK, - BGM_FRLG_MT_EMBER, - BGM_FRLG_TEACHY_TV_EPISODE, - BGM_FRLG_SEVII_ISLANDS, - BGM_FRLG_TANOBY_RUINS, - BGM_FRLG_ISLAND_ONE, - BGM_FRLG_ISLAND_FOUR, - BGM_FRLG_ISLAND_SIX, - BGM_FRLG_FLUTE, - BGM_FRLG_BATTLE_DEOXYS, - BGM_FRLG_BATTLE_MEWTWO, - BGM_FRLG_BATTLE_LEGENDARY, - BGM_FRLG_LEADER_EYE, - BGM_FRLG_DEOXYS_EYE, - BGM_FRLG_TRAINER_TOWER, - BGM_FRLG_HALL_OF_FAME_PALLET_TOWN, - /*0x22E*/BGM_FRLG_TEACHY_TV, -}; - -#endif // GUARD_SONGS_H diff --git a/ld_script.txt b/ld_script.txt index 4b7fafa2e..ea0c43fd1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -237,6 +237,7 @@ SECTIONS { asm/berry_pouch.o(.text); asm/itemfinder.o(.text); asm/buy_menu_helpers.o(.text); + src/slot_machine.o(.text); asm/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); diff --git a/src/slot_machine.c b/src/slot_machine.c new file mode 100644 index 000000000..5a69512c5 --- /dev/null +++ b/src/slot_machine.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "palette.h" +#include "task.h" +#include "main.h" +#include "malloc.h" +#include "sound.h" +#include "coins.h" +#include "quest_log.h" +#include "overworld.h" +#include "slot_machine.h" +#include "constants/songs.h" + +struct SlotMachineState +{ + MainCallback savedCallback; + u16 machineidx; + u16 field_06; + u8 filler_08[2]; + u16 field_0A; + u8 filler_0C[2]; + u16 bet; + u8 field_10; + u8 field_11; + TaskFunc field_14[3]; + u16 field_20[3]; + u16 field_26[3]; + u16 field_2C[3]; + u8 filler_32[0x1E]; + u16 field_50; +}; + +EWRAM_DATA struct SlotMachineState * gUnknown_203F3A0 = NULL; + +void sub_813F84C(struct SlotMachineState * ptr); +void sub_813F898(void); +void sub_813F92C(void); +void sub_813F94C(void); +void sub_813F964(u8 taskId); +void sub_813FBC0(u8 taskId); +void sub_813FC2C(u8 taskId); +void sub_813FCAC(u8 taskId); +void sub_813FD84(u8 taskId); +void sub_813FE1C(u8 taskId); +void sub_813FFD8(u8 taskId); +void sub_8140030(TaskFunc taskFunc); +void sub_8140060(u8 taskId); +void sub_8140148(void); +void sub_814016C(u16, u16); +bool32 sub_81401A0(u16); +void sub_81409B4(void); +void sub_8140A70(void); +u16 sub_8140A80(void); +bool32 sub_814104C(void); +void sub_8141094(void); +void sub_8141148(u16 a0, u8 a1); +bool32 sub_8141180(u8 a0); +void sub_8141C30(u8, u8); + +void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) +{ + ResetTasks(); + gUnknown_203F3A0 = Alloc(sizeof(*gUnknown_203F3A0)); + if (gUnknown_203F3A0 == NULL) + SetMainCallback2(savedCallback); + else + { + if (machineIdx > 5) + machineIdx = 0; + gUnknown_203F3A0->machineidx = machineIdx; + gUnknown_203F3A0->savedCallback = savedCallback; + sub_813F84C(gUnknown_203F3A0); + SetMainCallback2(sub_813F898); + } +} + +void sub_813F84C(struct SlotMachineState * ptr) +{ + s32 i; + + ptr->field_06 = 0; + ptr->bet = 0; + ptr->field_50 = 0; + // for whatever reason, the loop does not use the ptr param + for (i = 0; i < 3; i++) + { + gUnknown_203F3A0->field_14[i] = NULL; + gUnknown_203F3A0->field_20[i] = 0; + gUnknown_203F3A0->field_26[i] = 0; + gUnknown_203F3A0->field_2C[i] = 21; + } +} + +void sub_813F898(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + + switch (gMain.state) + { + case 0: + if (sub_814104C()) + { + SetMainCallback2(gUnknown_203F3A0->savedCallback); + sub_813F92C(); + } + else + { + sub_8141148(0, 0); + gMain.state++; + } + break; + case 1: + if (sub_8141180(0) == 0) + { + gUnknown_203F3A0->field_10 = CreateTask(sub_813F964, 0); + gUnknown_203F3A0->field_11 = CreateTask(sub_8140060, 1); + SetMainCallback2(sub_813F94C); + } + break; + } +} + +void sub_813F92C(void) +{ + sub_8141094(); + if (gUnknown_203F3A0 != NULL) + { + Free(gUnknown_203F3A0); + gUnknown_203F3A0 = NULL; + } +} + +void sub_813F94C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_813F964(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (GetCoins() == 0) + { + sub_8140030(sub_813FBC0); + } + else if (JOY_NEW(DPAD_DOWN)) + { + gUnknown_203F3A0->bet++; + TakeCoins(1); + PlaySE(SE_T_KAMI2); + sub_8141148(8, 0); + sub_8141148(2, 1); + data[0] = 1; + } + else if (JOY_NEW(R_BUTTON)) + { + s32 toAdd = 3 - gUnknown_203F3A0->bet; + if (GetCoins() >= toAdd) + { + gUnknown_203F3A0->bet = 3; + TakeCoins(toAdd); + } + else + { + gUnknown_203F3A0->bet += GetCoins(); + SetCoins(0); + } + PlaySE(SE_T_KAMI2); + sub_8141148(8, 0); + sub_8141148(2, 1); + data[0] = 1; + } + else if (JOY_NEW(A_BUTTON) && gUnknown_203F3A0->bet != 0) + { + data[0] = 2; + } + else if (JOY_NEW(B_BUTTON)) + { + sub_8140030(sub_813FCAC); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + sub_8140030(sub_813FC2C); + } + break; + case 1: + if (sub_8141180(0) == 0 && sub_8141180(1) == 0) + { + if (gUnknown_203F3A0->bet == 3 || GetCoins() == 0) + data[0] = 2; + else + data[0] = 0; + } + break; + case 2: + sub_811539C(); + sub_81409B4(); + sub_8140148(); + gUnknown_203F3A0->field_06 = 0; + sub_8141148(3, 0); + data[0] = 3; + break; + case 3: + if (sub_8141180(0) == 0) + { + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_JYUNI); + sub_814016C(gUnknown_203F3A0->field_06, gUnknown_203F3A0->field_06); + sub_8141C30(gUnknown_203F3A0->field_06, 0); + data[0] = 4; + } + } + break; + case 4: + if (sub_81401A0(gUnknown_203F3A0->field_06) == 0 && sub_8141180(0) == 0) + { + gUnknown_203F3A0->field_06++; + if (gUnknown_203F3A0->field_06 >= 3) + { + gUnknown_203F3A0->field_0A = sub_8140A80(); + gUnknown_203F3A0->bet = 0; + gUnknown_203F3A0->field_06 = 0; + if (gUnknown_203F3A0->field_0A == 0) + sub_8140030(sub_813FD84); + else + { + if (gUnknown_203F3A0->field_0A == 6) + IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); + sub_8140A70(); + sub_8140030(sub_813FE1C); + } + } + else + data[0] = 3; + } + break; + } +} + +void sub_813FBC0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(9, 0); + data[0]++; + break; + case 1: + if (sub_8141180(0) == 0) + data[0]++; + break; + case 2: + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + sub_8140030(sub_813FFD8); + break; + } +} diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd5b9c7ea..6c6daf803 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -1,5 +1,5 @@ #include "global.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "task.h" #include "malloc.h" -- cgit v1.2.3 From 6d05c777d27e844969a74cfa533adbcfbeddf398 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 May 2019 19:06:23 -0400 Subject: slot_machine through sub_8140060 --- asm/slot_machine.s | 743 +++-------------------------------------------------- src/slot_machine.c | 350 ++++++++++++++++++++----- sym_ewram.txt | 4 +- 3 files changed, 334 insertions(+), 763 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 659b8901c..a543a18fe 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,672 +5,11 @@ .text - thumb_func_start sub_813FC2C -sub_813FC2C: @ 813FC2C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FC50 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813FC62 - cmp r0, 0x1 - bgt _0813FC54 - cmp r0, 0 - beq _0813FC5E - b _0813FCA0 - .align 2, 0 -_0813FC50: .4byte gTasks+0x8 -_0813FC54: - cmp r0, 0x2 - beq _0813FC6E - cmp r0, 0x3 - beq _0813FC90 - b _0813FCA0 -_0813FC5E: - movs r0, 0xE - b _0813FC7C -_0813FC62: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FCA0 - b _0813FC82 -_0813FC6E: - ldr r0, _0813FC8C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813FCA0 - movs r0, 0xF -_0813FC7C: - movs r1, 0 - bl sub_8141148 -_0813FC82: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FCA0 - .align 2, 0 -_0813FC8C: .4byte gMain -_0813FC90: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FCA0 - ldr r0, _0813FCA8 @ =sub_813F964 - bl sub_8140030 -_0813FCA0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FCA8: .4byte sub_813F964 - thumb_func_end sub_813FC2C - - thumb_func_start sub_813FCAC -sub_813FCAC: @ 813FCAC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FCD0 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bhi _0813FD78 - lsls r0, 2 - ldr r1, _0813FCD4 @ =_0813FCD8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813FCD0: .4byte gTasks+0x8 -_0813FCD4: .4byte _0813FCD8 - .align 2, 0 -_0813FCD8: - .4byte _0813FCEC - .4byte _0813FCF6 - .4byte _0813FD08 - .4byte _0813FD52 - .4byte _0813FD68 -_0813FCEC: - movs r0, 0xA - movs r1, 0 - bl sub_8141148 - b _0813FD00 -_0813FCF6: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 -_0813FD00: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FD78 -_0813FD08: - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0813FD28 - cmp r1, 0 - bgt _0813FD22 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0813FD44 - b _0813FD78 -_0813FD22: - cmp r1, 0x1 - beq _0813FD44 - b _0813FD78 -_0813FD28: - ldr r0, _0813FD40 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - bl GiveCoins - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x3 - strh r0, [r4] - b _0813FD78 - .align 2, 0 -_0813FD40: .4byte gUnknown_203F3A0 -_0813FD44: - movs r0, 0xB - movs r1, 0 - bl sub_8141148 - movs r0, 0x4 - strh r0, [r4] - b _0813FD78 -_0813FD52: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 - ldr r0, _0813FD64 @ =sub_813FFD8 - bl sub_8140030 - b _0813FD78 - .align 2, 0 -_0813FD64: .4byte sub_813FFD8 -_0813FD68: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 - ldr r0, _0813FD80 @ =sub_813F964 - bl sub_8140030 -_0813FD78: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FD80: .4byte sub_813F964 - thumb_func_end sub_813FCAC - - thumb_func_start sub_813FD84 -sub_813FD84: @ 813FD84 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FDA8 @ =gTasks+0x8 - adds r5, r1, r0 - movs r0, 0 - ldrsh r4, [r5, r0] - cmp r4, 0x1 - beq _0813FDBE - cmp r4, 0x1 - bgt _0813FDAC - cmp r4, 0 - beq _0813FDB2 - b _0813FE10 - .align 2, 0 -_0813FDA8: .4byte gTasks+0x8 -_0813FDAC: - cmp r4, 0x2 - beq _0813FDEC - b _0813FE10 -_0813FDB2: - movs r0, 0x6 - movs r1, 0 - bl sub_8141148 - strh r4, [r5, 0x2] - b _0813FDE4 -_0813FDBE: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _0813FE10 - movs r0, 0x7 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0xD - movs r1, 0x2 - bl sub_8141148 -_0813FDE4: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0813FE10 -_0813FDEC: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - movs r0, 0x1 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - movs r0, 0x2 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - ldr r0, _0813FE18 @ =sub_813F964 - bl sub_8140030 -_0813FE10: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813FE18: .4byte sub_813F964 - thumb_func_end sub_813FD84 - - thumb_func_start sub_813FE1C -sub_813FE1C: @ 813FE1C - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FE40 @ =gTasks+0x8 - adds r5, r1, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bls _0813FE36 - b _0813FFCE -_0813FE36: - lsls r0, 2 - ldr r1, _0813FE44 @ =_0813FE48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813FE40: .4byte gTasks+0x8 -_0813FE44: .4byte _0813FE48 - .align 2, 0 -_0813FE48: - .4byte _0813FE60 - .4byte _0813FEA0 - .4byte _0813FECC - .4byte _0813FF78 - .4byte _0813FF92 - .4byte _0813FFB4 -_0813FE60: - ldr r0, _0813FE7C @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xA] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0813FE80 - movs r0, 0x86 - lsls r0, 1 - bl PlayFanfare - b _0813FE86 - .align 2, 0 -_0813FE7C: .4byte gUnknown_203F3A0 -_0813FE80: - ldr r0, _0813FE9C @ =0x0000010d - bl PlayFanfare -_0813FE86: - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x4 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x8 - strh r0, [r5, 0x2] - b _0813FFAC - .align 2, 0 -_0813FE9C: .4byte 0x0000010d -_0813FEA0: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - bgt _0813FEB0 - b _0813FFCE -_0813FEB0: - movs r0, 0x8 - strh r0, [r5, 0x2] - ldr r0, _0813FEC8 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FFAC - movs r0, 0x2 - strh r0, [r5, 0x2] - b _0813FFAC - .align 2, 0 -_0813FEC8: .4byte gMain -_0813FECC: - movs r0, 0 - bl sub_8141180 - adds r6, r0, 0 - cmp r6, 0 - bne _0813FFCE - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FF0C - ldr r0, _0813FF04 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0813FF0C - ldr r4, _0813FF08 @ =gUnknown_203F3A0 - ldr r0, [r4] - adds r0, 0x50 - ldrh r0, [r0] - bl GiveCoins - ldr r0, [r4] - adds r0, 0x50 - strh r6, [r0] - b _0813FF58 - .align 2, 0 -_0813FF04: .4byte gMain -_0813FF08: .4byte gUnknown_203F3A0 -_0813FF0C: - ldrh r0, [r5, 0x2] - subs r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - cmp r0, 0 - bne _0813FF58 - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FF28 - movs r0, 0x15 - bl PlaySE -_0813FF28: - ldr r4, _0813FF70 @ =gUnknown_203F3A0 - ldr r0, [r4] - adds r0, 0x50 - ldrh r0, [r0] - cmp r0, 0 - beq _0813FF44 - movs r0, 0x1 - bl GiveCoins - ldr r1, [r4] - adds r1, 0x50 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_0813FF44: - movs r0, 0x8 - strh r0, [r5, 0x2] - ldr r0, _0813FF74 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FF58 - movs r0, 0x2 - strh r0, [r5, 0x2] -_0813FF58: - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - ldr r0, _0813FF70 @ =gUnknown_203F3A0 - ldr r0, [r0] - adds r0, 0x50 - ldrh r0, [r0] - cmp r0, 0 - bne _0813FFCE - b _0813FFAC - .align 2, 0 -_0813FF70: .4byte gUnknown_203F3A0 -_0813FF74: .4byte gMain -_0813FF78: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FFCE - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x5 - movs r1, 0 - b _0813FFA8 -_0813FF92: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x2 - movs r1, 0 - bl sub_8141148 - movs r0, 0xD - movs r1, 0x1 -_0813FFA8: - bl sub_8141148 -_0813FFAC: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0813FFCE -_0813FFB4: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x1 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - ldr r0, _0813FFD4 @ =sub_813F964 - bl sub_8140030 -_0813FFCE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813FFD4: .4byte sub_813F964 - thumb_func_end sub_813FE1C - - thumb_func_start sub_813FFD8 -sub_813FFD8: @ 813FFD8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FFF8 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0813FFFC - cmp r0, 0x1 - beq _0814000C - b _08140024 - .align 2, 0 -_0813FFF8: .4byte gTasks+0x8 -_0813FFFC: - movs r0, 0x1 - movs r1, 0 - bl sub_8141148 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08140024 -_0814000C: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _08140024 - ldr r0, _0814002C @ =gUnknown_203F3A0 - ldr r0, [r0] - ldr r0, [r0] - bl SetMainCallback2 - bl sub_813F92C -_08140024: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814002C: .4byte gUnknown_203F3A0 - thumb_func_end sub_813FFD8 - - thumb_func_start sub_8140030 -sub_8140030: @ 8140030 - push {r4,lr} - ldr r4, _08140058 @ =gTasks - ldr r1, _0814005C @ =gUnknown_203F3A0 - ldr r3, [r1] - ldrb r2, [r3, 0x10] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r4 - str r0, [r1] - ldrb r1, [r3, 0x10] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0 - strh r1, [r0, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140058: .4byte gTasks -_0814005C: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140030 - - thumb_func_start sub_8140060 -sub_8140060: @ 8140060 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r12, r0 - ldr r1, _08140144 @ =gUnknown_203F3A0 - mov r10, r1 - mov r8, r10 - mov r9, r0 - movs r6, 0 - movs r7, 0 -_0814007A: - mov r2, r8 - ldr r3, [r2] - adds r0, r3, 0 - adds r0, 0x14 - adds r0, r7 - ldr r0, [r0] - mov r1, r12 - lsls r4, r1, 1 - cmp r0, 0 - bne _0814009C - adds r0, r3, 0 - adds r0, 0x26 - adds r0, r6 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - beq _0814011A -_0814009C: - adds r0, r3, 0 - adds r0, 0x26 - adds r2, r0, r6 - ldrh r5, [r2] - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _081400C4 - adds r1, r3, 0 - adds r1, 0x20 - adds r1, r4 - adds r0, r3, 0 - adds r0, 0x2C - adds r0, r4 - movs r4, 0 - ldrsh r1, [r1, r4] - movs r4, 0 - ldrsh r0, [r0, r4] - cmp r1, r0 - beq _08140104 -_081400C4: - adds r0, r5, 0x1 - movs r1, 0 - strh r0, [r2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _081400EA - strh r1, [r2] - adds r0, r3, 0 - adds r0, 0x20 - adds r1, r0, r6 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bge _081400EA - movs r0, 0x14 - strh r0, [r1] -_081400EA: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x20 - adds r1, r6 - adds r0, 0x2C - adds r0, r6 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r4, 0 - ldrsh r0, [r0, r4] - cmp r1, r0 - bne _0814011A -_08140104: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x2C - adds r1, r6 - movs r2, 0x15 - strh r2, [r1] - adds r0, 0x14 - adds r0, r7 - mov r2, r9 - str r2, [r0] -_0814011A: - adds r6, 0x2 - adds r7, 0x4 - movs r4, 0x1 - add r12, r4 - mov r0, r12 - cmp r0, 0x2 - ble _0814007A - mov r2, r10 - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x20 - adds r1, 0x26 - bl sub_8140D7C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140144: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140060 - thumb_func_start sub_8140148 sub_8140148: @ 8140148 push {r4,lr} movs r2, 0 - ldr r4, _08140168 @ =gUnknown_203F3A0 + ldr r4, _08140168 @ =sSlotMachineState movs r3, 0x1 _08140150: ldr r0, [r4] @@ -685,7 +24,7 @@ _08140150: pop {r0} bx r0 .align 2, 0 -_08140168: .4byte gUnknown_203F3A0 +_08140168: .4byte sSlotMachineState thumb_func_end sub_8140148 thumb_func_start sub_814016C @@ -723,7 +62,7 @@ _0814019C: thumb_func_start sub_81401A0 sub_81401A0: @ 81401A0 lsls r0, 16 - ldr r1, _081401B0 @ =gUnknown_203F3A0 + ldr r1, _081401B0 @ =sSlotMachineState ldr r1, [r1] lsrs r0, 14 adds r1, 0x14 @@ -731,14 +70,14 @@ sub_81401A0: @ 81401A0 ldr r0, [r1] bx lr .align 2, 0 -_081401B0: .4byte gUnknown_203F3A0 +_081401B0: .4byte sSlotMachineState thumb_func_end sub_81401A0 thumb_func_start sub_81401B4 sub_81401B4: @ 81401B4 push {lr} lsls r0, 16 - ldr r1, _081401E8 @ =gUnknown_203F3A0 + ldr r1, _081401E8 @ =sSlotMachineState ldr r2, [r1] lsrs r0, 15 adds r1, r2, 0 @@ -764,7 +103,7 @@ _081401E0: pop {r1} bx r1 .align 2, 0 -_081401E8: .4byte gUnknown_203F3A0 +_081401E8: .4byte sSlotMachineState _081401EC: .4byte 0xffff0000 thumb_func_end sub_81401B4 @@ -784,7 +123,7 @@ sub_81401F0: @ 81401F0 lsrs r1, r0, 16 movs r0, 0 mov r8, r0 - ldr r0, _0814023C @ =gUnknown_203F3A0 + ldr r0, _0814023C @ =sSlotMachineState ldr r0, [r0] ldrh r0, [r0, 0x8] cmp r0, 0 @@ -809,7 +148,7 @@ _0814022A: adds r5, r7, 0x1 b _08140248 .align 2, 0 -_0814023C: .4byte gUnknown_203F3A0 +_0814023C: .4byte sSlotMachineState _08140240: adds r6, 0x1 adds r0, r4, 0x1 @@ -858,7 +197,7 @@ _08140288: mov r8, r0 b _081402FE _08140294: - ldr r0, _08140364 @ =gUnknown_203F3A0 + ldr r0, _08140364 @ =sSlotMachineState ldr r0, [r0] ldrh r0, [r0, 0x8] cmp r0, 0x1 @@ -896,7 +235,7 @@ _081402D0: ble _081402DA movs r2, 0 _081402DA: - ldr r0, _08140364 @ =gUnknown_203F3A0 + ldr r0, _08140364 @ =sSlotMachineState ldr r0, [r0] ldrh r0, [r0, 0x8] lsls r1, r2, 16 @@ -929,7 +268,7 @@ _08140310: bge _08140318 movs r2, 0x14 _08140318: - ldr r0, _08140364 @ =gUnknown_203F3A0 + ldr r0, _08140364 @ =sSlotMachineState ldr r0, [r0] ldrh r0, [r0, 0x8] lsls r1, r2, 16 @@ -966,7 +305,7 @@ _08140348: lsrs r2, r0, 16 b _0814037E .align 2, 0 -_08140364: .4byte gUnknown_203F3A0 +_08140364: .4byte sSlotMachineState _08140368: .4byte gUnknown_8464926 _0814036C: bl Random @@ -991,7 +330,7 @@ _0814037E: lsls r0, 16 lsrs r2, r0, 16 _08140398: - ldr r0, _081403B8 @ =gUnknown_203F3A0 + ldr r0, _081403B8 @ =sSlotMachineState ldr r0, [r0] mov r1, r9 strh r1, [r0, 0x32] @@ -1008,7 +347,7 @@ _08140398: pop {r0} bx r0 .align 2, 0 -_081403B8: .4byte gUnknown_203F3A0 +_081403B8: .4byte sSlotMachineState thumb_func_end sub_81401F0 thumb_func_start sub_81403BC @@ -1022,7 +361,7 @@ sub_81403BC: @ 81403BC lsls r0, 16 lsrs r0, 16 mov r8, r0 - ldr r0, _08140470 @ =gUnknown_203F3A0 + ldr r0, _08140470 @ =sSlotMachineState ldr r0, [r0] ldrh r1, [r0, 0x32] lsls r7, r1, 16 @@ -1062,7 +401,7 @@ _08140404: _08140416: lsls r0, r2, 16 asrs r4, r0, 16 - ldr r7, _08140470 @ =gUnknown_203F3A0 + ldr r7, _08140470 @ =sSlotMachineState ldr r0, [r7] ldrh r0, [r0, 0x8] str r0, [sp] @@ -1106,7 +445,7 @@ _0814044C: movs r2, 0x4 b _08140480 .align 2, 0 -_08140470: .4byte gUnknown_203F3A0 +_08140470: .4byte sSlotMachineState _08140474: ldr r0, [r7] movs r1, 0x1 @@ -1164,7 +503,7 @@ sub_81404B8: @ 81404B8 movs r6, 0 movs r5, 0 _081404D8: - ldr r7, _0814051C @ =gUnknown_203F3A0 + ldr r7, _0814051C @ =sSlotMachineState ldr r0, [r7] ldrh r2, [r0, 0x8] mov r0, r8 @@ -1199,7 +538,7 @@ _081404FA: movs r2, 0x4 b _08140526 .align 2, 0 -_0814051C: .4byte gUnknown_203F3A0 +_0814051C: .4byte sSlotMachineState _08140520: mov r0, sp ldrb r2, [r0] @@ -1464,7 +803,7 @@ sub_81406E8: @ 81406E8 adds r7, r0, 0 adds r5, r1, 0 mov r8, r2 - ldr r0, _081407C8 @ =gUnknown_203F3A0 + ldr r0, _081407C8 @ =sSlotMachineState ldr r2, [r0] movs r1, 0x32 ldrsh r0, [r2, r1] @@ -1575,7 +914,7 @@ _081407AE: beq _081407D8 b _081408A0 .align 2, 0 -_081407C8: .4byte gUnknown_203F3A0 +_081407C8: .4byte sSlotMachineState _081407CC: .4byte gUnknown_8464926 _081407D0: mov r6, r8 @@ -1851,7 +1190,7 @@ sub_81409B4: @ 81409B4 bl Random lsls r0, 16 lsrs r2, r0, 18 - ldr r0, _08140A60 @ =gUnknown_203F3A0 + ldr r0, _08140A60 @ =sSlotMachineState ldr r0, [r0] ldrh r1, [r0, 0x4] lsls r0, r1, 3 @@ -1873,7 +1212,7 @@ _081409D8: cmp r2, r1 bcs _081409D8 _081409E6: - ldr r6, _08140A60 @ =gUnknown_203F3A0 + ldr r6, _08140A60 @ =sSlotMachineState ldr r1, [r6] ldrh r0, [r1, 0x8] cmp r0, 0x4 @@ -1898,7 +1237,7 @@ _081409E6: _08140A16: strh r0, [r4, 0xC] _08140A18: - ldr r0, _08140A60 @ =gUnknown_203F3A0 + ldr r0, _08140A60 @ =sSlotMachineState ldr r1, [r0] ldrh r1, [r1, 0xC] cmp r1, 0 @@ -1912,7 +1251,7 @@ _08140A22: ldr r0, _08140A6C @ =0x00002ccb cmp r1, r0 bhi _08140A4A - ldr r0, _08140A60 @ =gUnknown_203F3A0 + ldr r0, _08140A60 @ =sSlotMachineState ldr r4, [r0] bl Random movs r1, 0x1 @@ -1924,7 +1263,7 @@ _08140A22: _08140A48: strh r0, [r4, 0xC] _08140A4A: - ldr r2, _08140A60 @ =gUnknown_203F3A0 + ldr r2, _08140A60 @ =sSlotMachineState ldr r1, [r2] ldrh r0, [r1, 0xC] subs r0, 0x1 @@ -1938,7 +1277,7 @@ _08140A5A: pop {r0} bx r0 .align 2, 0 -_08140A60: .4byte gUnknown_203F3A0 +_08140A60: .4byte sSlotMachineState _08140A64: .4byte gUnknown_84648D2 _08140A68: .4byte 0x00003fff _08140A6C: .4byte 0x00002ccb @@ -1946,13 +1285,13 @@ _08140A6C: .4byte 0x00002ccb thumb_func_start sub_8140A70 sub_8140A70: @ 8140A70 - ldr r0, _08140A7C @ =gUnknown_203F3A0 + ldr r0, _08140A7C @ =sSlotMachineState ldr r1, [r0] movs r0, 0 strh r0, [r1, 0x8] bx lr .align 2, 0 -_08140A7C: .4byte gUnknown_203F3A0 +_08140A7C: .4byte sSlotMachineState thumb_func_end sub_8140A70 thumb_func_start sub_8140A80 @@ -1967,7 +1306,7 @@ sub_8140A80: @ 8140A80 movs r2, 0x9 bl memset movs r5, 0 - ldr r2, _08140B58 @ =gUnknown_203F3A0 + ldr r2, _08140B58 @ =sSlotMachineState movs r3, 0 adds r4, r2, 0 _08140A9C: @@ -2028,7 +1367,7 @@ _08140AE8: subs r5, 0x1 cmp r5, 0 bge _08140AD0 - ldr r0, _08140B58 @ =gUnknown_203F3A0 + ldr r0, _08140B58 @ =sSlotMachineState ldr r0, [r0] adds r0, 0x50 movs r1, 0 @@ -2038,7 +1377,7 @@ _08140AE8: movs r6, 0 movs r5, 0x4 _08140B18: - ldr r0, _08140B58 @ =gUnknown_203F3A0 + ldr r0, _08140B58 @ =sSlotMachineState ldr r1, [r0] mov r0, r8 adds r0, 0x3 @@ -2069,7 +1408,7 @@ _08140B18: movs r3, 0x2 b _08140B92 .align 2, 0 -_08140B58: .4byte gUnknown_203F3A0 +_08140B58: .4byte sSlotMachineState _08140B5C: .4byte gUnknown_8464926 _08140B60: .4byte gUnknown_84648BD _08140B64: @@ -2098,7 +1437,7 @@ _08140B8E: cmp r3, 0 beq _08140BB0 _08140B92: - ldr r0, _08140BD4 @ =gUnknown_203F3A0 + ldr r0, _08140BD4 @ =sSlotMachineState ldr r2, [r0] adds r0, r2, 0 adds r0, 0x3C @@ -2134,34 +1473,34 @@ _08140BB6: pop {r1} bx r1 .align 2, 0 -_08140BD4: .4byte gUnknown_203F3A0 +_08140BD4: .4byte sSlotMachineState _08140BD8: .4byte gUnknown_8464966 thumb_func_end sub_8140A80 thumb_func_start sub_8140BDC sub_8140BDC: @ 8140BDC - ldr r0, _08140BE8 @ =gUnknown_203F3A0 + ldr r0, _08140BE8 @ =sSlotMachineState ldr r0, [r0] adds r0, 0x50 ldrh r0, [r0] bx lr .align 2, 0 -_08140BE8: .4byte gUnknown_203F3A0 +_08140BE8: .4byte sSlotMachineState thumb_func_end sub_8140BDC thumb_func_start sub_8140BEC sub_8140BEC: @ 8140BEC - ldr r0, _08140BF4 @ =gUnknown_203F3A0 + ldr r0, _08140BF4 @ =sSlotMachineState ldr r0, [r0] ldrb r0, [r0, 0xE] bx lr .align 2, 0 -_08140BF4: .4byte gUnknown_203F3A0 +_08140BF4: .4byte sSlotMachineState thumb_func_end sub_8140BEC thumb_func_start sub_8140BF8 sub_8140BF8: @ 8140BF8 - ldr r1, _08140C08 @ =gUnknown_203F3A0 + ldr r1, _08140C08 @ =sSlotMachineState ldr r1, [r1] lsls r0, 2 adds r1, 0x3C @@ -2169,7 +1508,7 @@ sub_8140BF8: @ 8140BF8 ldr r0, [r1] bx lr .align 2, 0 -_08140C08: .4byte gUnknown_203F3A0 +_08140C08: .4byte sSlotMachineState thumb_func_end sub_8140BF8 thumb_func_start sub_8140C0C diff --git a/src/slot_machine.c b/src/slot_machine.c index 5a69512c5..d4d0ab90d 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -8,6 +8,7 @@ #include "quest_log.h" #include "overworld.h" #include "slot_machine.h" +#include "menu.h" #include "constants/songs.h" struct SlotMachineState @@ -16,33 +17,33 @@ struct SlotMachineState u16 machineidx; u16 field_06; u8 filler_08[2]; - u16 field_0A; + u16 slotRewardClass; u8 filler_0C[2]; u16 bet; u8 field_10; u8 field_11; TaskFunc field_14[3]; - u16 field_20[3]; - u16 field_26[3]; - u16 field_2C[3]; + s16 field_20[3]; + s16 field_26[3]; + s16 field_2C[3]; u8 filler_32[0x1E]; - u16 field_50; + u16 payout; }; -EWRAM_DATA struct SlotMachineState * gUnknown_203F3A0 = NULL; +EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; void sub_813F84C(struct SlotMachineState * ptr); void sub_813F898(void); void sub_813F92C(void); void sub_813F94C(void); -void sub_813F964(u8 taskId); -void sub_813FBC0(u8 taskId); -void sub_813FC2C(u8 taskId); -void sub_813FCAC(u8 taskId); -void sub_813FD84(u8 taskId); -void sub_813FE1C(u8 taskId); -void sub_813FFD8(u8 taskId); -void sub_8140030(TaskFunc taskFunc); +void MainTask_SlotsGameLoop(u8 taskId); +void MainTask_NoCoinsGameOver(u8 taskId); +void MainTask_ShowHelp(u8 taskId); +void MainTask_ConfirmExitGame(u8 taskId); +void MainTask_DarnNoPayout(u8 taskId); +void MainTask_WinHandlePayout(u8 taskId); +void MainTask_ExitSlots(u8 taskId); +static void SetMainTask(TaskFunc taskFunc); void sub_8140060(u8 taskId); void sub_8140148(void); void sub_814016C(u16, u16); @@ -50,6 +51,7 @@ bool32 sub_81401A0(u16); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); +void sub_8140D7C(s16 *, s16 *); bool32 sub_814104C(void); void sub_8141094(void); void sub_8141148(u16 a0, u8 a1); @@ -59,16 +61,16 @@ void sub_8141C30(u8, u8); void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); - gUnknown_203F3A0 = Alloc(sizeof(*gUnknown_203F3A0)); - if (gUnknown_203F3A0 == NULL) + sSlotMachineState = Alloc(sizeof(*sSlotMachineState)); + if (sSlotMachineState == NULL) SetMainCallback2(savedCallback); else { if (machineIdx > 5) machineIdx = 0; - gUnknown_203F3A0->machineidx = machineIdx; - gUnknown_203F3A0->savedCallback = savedCallback; - sub_813F84C(gUnknown_203F3A0); + sSlotMachineState->machineidx = machineIdx; + sSlotMachineState->savedCallback = savedCallback; + sub_813F84C(sSlotMachineState); SetMainCallback2(sub_813F898); } } @@ -79,14 +81,14 @@ void sub_813F84C(struct SlotMachineState * ptr) ptr->field_06 = 0; ptr->bet = 0; - ptr->field_50 = 0; + ptr->payout = 0; // for whatever reason, the loop does not use the ptr param for (i = 0; i < 3; i++) { - gUnknown_203F3A0->field_14[i] = NULL; - gUnknown_203F3A0->field_20[i] = 0; - gUnknown_203F3A0->field_26[i] = 0; - gUnknown_203F3A0->field_2C[i] = 21; + sSlotMachineState->field_14[i] = NULL; + sSlotMachineState->field_20[i] = 0; + sSlotMachineState->field_26[i] = 0; + sSlotMachineState->field_2C[i] = 21; } } @@ -101,7 +103,7 @@ void sub_813F898(void) case 0: if (sub_814104C()) { - SetMainCallback2(gUnknown_203F3A0->savedCallback); + SetMainCallback2(sSlotMachineState->savedCallback); sub_813F92C(); } else @@ -111,10 +113,10 @@ void sub_813F898(void) } break; case 1: - if (sub_8141180(0) == 0) + if (!sub_8141180(0)) { - gUnknown_203F3A0->field_10 = CreateTask(sub_813F964, 0); - gUnknown_203F3A0->field_11 = CreateTask(sub_8140060, 1); + sSlotMachineState->field_10 = CreateTask(MainTask_SlotsGameLoop, 0); + sSlotMachineState->field_11 = CreateTask(sub_8140060, 1); SetMainCallback2(sub_813F94C); } break; @@ -124,10 +126,10 @@ void sub_813F898(void) void sub_813F92C(void) { sub_8141094(); - if (gUnknown_203F3A0 != NULL) + if (sSlotMachineState != NULL) { - Free(gUnknown_203F3A0); - gUnknown_203F3A0 = NULL; + Free(sSlotMachineState); + sSlotMachineState = NULL; } } @@ -139,7 +141,7 @@ void sub_813F94C(void) UpdatePaletteFade(); } -void sub_813F964(u8 taskId) +void MainTask_SlotsGameLoop(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -148,11 +150,11 @@ void sub_813F964(u8 taskId) case 0: if (GetCoins() == 0) { - sub_8140030(sub_813FBC0); + SetMainTask(MainTask_NoCoinsGameOver); } else if (JOY_NEW(DPAD_DOWN)) { - gUnknown_203F3A0->bet++; + sSlotMachineState->bet++; TakeCoins(1); PlaySE(SE_T_KAMI2); sub_8141148(8, 0); @@ -161,15 +163,15 @@ void sub_813F964(u8 taskId) } else if (JOY_NEW(R_BUTTON)) { - s32 toAdd = 3 - gUnknown_203F3A0->bet; + s32 toAdd = 3 - sSlotMachineState->bet; if (GetCoins() >= toAdd) { - gUnknown_203F3A0->bet = 3; + sSlotMachineState->bet = 3; TakeCoins(toAdd); } else { - gUnknown_203F3A0->bet += GetCoins(); + sSlotMachineState->bet += GetCoins(); SetCoins(0); } PlaySE(SE_T_KAMI2); @@ -177,23 +179,23 @@ void sub_813F964(u8 taskId) sub_8141148(2, 1); data[0] = 1; } - else if (JOY_NEW(A_BUTTON) && gUnknown_203F3A0->bet != 0) + else if (JOY_NEW(A_BUTTON) && sSlotMachineState->bet != 0) { data[0] = 2; } else if (JOY_NEW(B_BUTTON)) { - sub_8140030(sub_813FCAC); + SetMainTask(MainTask_ConfirmExitGame); } else if (JOY_NEW(DPAD_RIGHT)) { - sub_8140030(sub_813FC2C); + SetMainTask(MainTask_ShowHelp); } break; case 1: - if (sub_8141180(0) == 0 && sub_8141180(1) == 0) + if (!sub_8141180(0) && !sub_8141180(1)) { - if (gUnknown_203F3A0->bet == 3 || GetCoins() == 0) + if (sSlotMachineState->bet == 3 || GetCoins() == 0) data[0] = 2; else data[0] = 0; @@ -203,39 +205,39 @@ void sub_813F964(u8 taskId) sub_811539C(); sub_81409B4(); sub_8140148(); - gUnknown_203F3A0->field_06 = 0; + sSlotMachineState->field_06 = 0; sub_8141148(3, 0); data[0] = 3; break; case 3: - if (sub_8141180(0) == 0) + if (!sub_8141180(0)) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_JYUNI); - sub_814016C(gUnknown_203F3A0->field_06, gUnknown_203F3A0->field_06); - sub_8141C30(gUnknown_203F3A0->field_06, 0); + sub_814016C(sSlotMachineState->field_06, sSlotMachineState->field_06); + sub_8141C30(sSlotMachineState->field_06, 0); data[0] = 4; } } break; case 4: - if (sub_81401A0(gUnknown_203F3A0->field_06) == 0 && sub_8141180(0) == 0) + if (sub_81401A0(sSlotMachineState->field_06) == 0 && !sub_8141180(0)) { - gUnknown_203F3A0->field_06++; - if (gUnknown_203F3A0->field_06 >= 3) + sSlotMachineState->field_06++; + if (sSlotMachineState->field_06 >= 3) { - gUnknown_203F3A0->field_0A = sub_8140A80(); - gUnknown_203F3A0->bet = 0; - gUnknown_203F3A0->field_06 = 0; - if (gUnknown_203F3A0->field_0A == 0) - sub_8140030(sub_813FD84); + sSlotMachineState->slotRewardClass = sub_8140A80(); + sSlotMachineState->bet = 0; + sSlotMachineState->field_06 = 0; + if (sSlotMachineState->slotRewardClass == 0) + SetMainTask(MainTask_DarnNoPayout); else { - if (gUnknown_203F3A0->field_0A == 6) + if (sSlotMachineState->slotRewardClass == 6) IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); sub_8140A70(); - sub_8140030(sub_813FE1C); + SetMainTask(MainTask_WinHandlePayout); } } else @@ -245,7 +247,7 @@ void sub_813F964(u8 taskId) } } -void sub_813FBC0(u8 taskId) +void MainTask_NoCoinsGameOver(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -256,12 +258,242 @@ void sub_813FBC0(u8 taskId) data[0]++; break; case 1: - if (sub_8141180(0) == 0) + if (!sub_8141180(0)) data[0]++; break; case 2: if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) - sub_8140030(sub_813FFD8); + SetMainTask(MainTask_ExitSlots); break; } } + +void MainTask_ShowHelp(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(14, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + data[0]++; + break; + case 2: + if (JOY_NEW(DPAD_LEFT)) + { + sub_8141148(15, 0); + data[0]++; + } + break; + case 3: + if (!sub_8141180(0)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +void MainTask_ConfirmExitGame(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(10, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + data[0]++; + break; + case 2: + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + GiveCoins(sSlotMachineState->bet); + sub_8141148(8, 0); + data[0] = 3; + break; + case 1: + case -1: + sub_8141148(11, 0); + data[0] = 4; + break; + } + break; + case 3: + if (!sub_8141180(0)) + SetMainTask(MainTask_ExitSlots); + break; + case 4: + if (!sub_8141180(0)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +void MainTask_DarnNoPayout(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(6, 0); + data[1] = 0; + data[0]++; + break; + case 1: + data[1]++; + if (data[1] > 60) + { + sub_8141148(7, 0); + sub_8141148(2, 1); + sub_8141148(13, 2); + data[0]++; + } + break; + case 2: + if (!sub_8141180(0) && !sub_8141180(1) && !sub_8141180(2)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +void MainTask_WinHandlePayout(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (sSlotMachineState->slotRewardClass == 5 || sSlotMachineState->slotRewardClass == 6) + PlayFanfare(MUS_ME_B_BIG); + else + PlayFanfare(MUS_ME_B_SMALL); + sub_8141148(8, 0); + sub_8141148(4, 1); + data[1] = 8; + data[0]++; + break; + case 1: + data[1]++; + if (data[1] > 120) + { + data[1] = 8; + if (JOY_HELD(A_BUTTON)) + data[1] = 2; + data[0]++; + } + break; + case 2: + if (!sub_8141180(0)) + { + if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) + { + GiveCoins(sSlotMachineState->payout); + sSlotMachineState->payout = 0; + } + else + { + data[1]--; + if (data[1] == 0) + { + if (IsFanfareTaskInactive()) + PlaySE(SE_PIN); + if (sSlotMachineState->payout != 0) + { + GiveCoins(1); + sSlotMachineState->payout--; + } + data[1] = 8; + if (JOY_HELD(A_BUTTON)) + data[1] = 2; + } + } + sub_8141148(8, 0); + if (sSlotMachineState->payout == 0) + data[0]++; + } + break; + case 3: + if (IsFanfareTaskInactive() && !sub_8141180(0)) + { + sub_8141148(5, 0); + data[0]++; + } + break; + case 4: + if (!sub_8141180(0)) + { + sub_8141148(2, 0); + sub_8141148(13, 1); + data[0]++; + } + break; + case 5: + if (!sub_8141180(0) && !sub_8141180(1)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +void MainTask_ExitSlots(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(1, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + { + SetMainCallback2(sSlotMachineState->savedCallback); + sub_813F92C(); + } + break; + } +} + +static void SetMainTask(TaskFunc taskFunc) +{ + gTasks[sSlotMachineState->field_10].func = taskFunc; + gTasks[sSlotMachineState->field_10].data[0] = 0; +} + +void sub_8140060(u8 taskId) +{ + // taskId is never used + + s32 i; + + for (i = 0; i < 3; i++) + { + if (sSlotMachineState->field_14[i] != NULL || sSlotMachineState->field_26[i] != 0) + { + if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) + { + sSlotMachineState->field_26[i]++; + if (sSlotMachineState->field_26[i] > 2) + { + sSlotMachineState->field_26[i] = 0; + sSlotMachineState->field_20[i]--; + if (sSlotMachineState->field_20[i] < 0) + sSlotMachineState->field_20[i] = 20; + } + if (sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) + continue; + } + sSlotMachineState->field_2C[i] = 21; + sSlotMachineState->field_14[i] = NULL; + } + } + sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index a5151ebc0..fa2499ace 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1589,8 +1589,8 @@ gUnknown_203F38C: @ 203F38C gUnknown_203F39C: @ 203F39C .space 0x4 -gUnknown_203F3A0: @ 203F3A0 - .space 0x4 + .align 2 + .include "src/slot_machine.o" gUnknown_203F3A4: @ 203F3A4 .space 0x4 -- cgit v1.2.3 From ce20a69eec5d61ea0e1ef8f5add21147bbce5b81 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 May 2019 08:45:03 -0400 Subject: slot_machine through sub_81401B4 --- asm/slot_machine.s | 102 ----------------------------------------------------- src/slot_machine.c | 62 +++++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 110 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index a543a18fe..0a6d0cf10 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,108 +5,6 @@ .text - thumb_func_start sub_8140148 -sub_8140148: @ 8140148 - push {r4,lr} - movs r2, 0 - ldr r4, _08140168 @ =sSlotMachineState - movs r3, 0x1 -_08140150: - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, 0x14 - adds r0, r1 - str r3, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08140150 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140168: .4byte sSlotMachineState - thumb_func_end sub_8140148 - - thumb_func_start sub_814016C -sub_814016C: @ 814016C - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r1, 0x1 - beq _08140192 - cmp r1, 0x1 - bgt _08140186 - cmp r1, 0 - beq _0814018C - b _0814019C -_08140186: - cmp r2, 0x2 - beq _08140198 - b _0814019C -_0814018C: - bl sub_81401F0 - b _0814019C -_08140192: - bl sub_81403BC - b _0814019C -_08140198: - bl sub_81404B8 -_0814019C: - pop {r0} - bx r0 - thumb_func_end sub_814016C - - thumb_func_start sub_81401A0 -sub_81401A0: @ 81401A0 - lsls r0, 16 - ldr r1, _081401B0 @ =sSlotMachineState - ldr r1, [r1] - lsrs r0, 14 - adds r1, 0x14 - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_081401B0: .4byte sSlotMachineState - thumb_func_end sub_81401A0 - - thumb_func_start sub_81401B4 -sub_81401B4: @ 81401B4 - push {lr} - lsls r0, 16 - ldr r1, _081401E8 @ =sSlotMachineState - ldr r2, [r1] - lsrs r0, 15 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldrh r1, [r1] - adds r2, 0x26 - adds r2, r0 - movs r3, 0 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _081401E0 - lsls r0, r1, 16 - ldr r1, _081401EC @ =0xffff0000 - adds r0, r1 - lsrs r1, r0, 16 - cmp r0, 0 - bge _081401E0 - movs r1, 0x14 -_081401E0: - lsls r0, r1, 16 - asrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_081401E8: .4byte sSlotMachineState -_081401EC: .4byte 0xffff0000 - thumb_func_end sub_81401B4 - thumb_func_start sub_81401F0 sub_81401F0: @ 81401F0 push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index d4d0ab90d..7293b6444 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -22,7 +22,7 @@ struct SlotMachineState u16 bet; u8 field_10; u8 field_11; - TaskFunc field_14[3]; + bool32 field_14[3]; s16 field_20[3]; s16 field_26[3]; s16 field_2C[3]; @@ -46,7 +46,10 @@ void MainTask_ExitSlots(u8 taskId); static void SetMainTask(TaskFunc taskFunc); void sub_8140060(u8 taskId); void sub_8140148(void); -void sub_814016C(u16, u16); +void sub_814016C(u16 whichPosition, u16 whichReel); +void sub_81401F0(u16 whichPosition); +void sub_81403BC(u16 whichPosition); +void sub_81404B8(u16 whichPosition); bool32 sub_81401A0(u16); void sub_81409B4(void); void sub_8140A70(void); @@ -85,10 +88,10 @@ void sub_813F84C(struct SlotMachineState * ptr) // for whatever reason, the loop does not use the ptr param for (i = 0; i < 3; i++) { - sSlotMachineState->field_14[i] = NULL; - sSlotMachineState->field_20[i] = 0; - sSlotMachineState->field_26[i] = 0; - sSlotMachineState->field_2C[i] = 21; + sSlotMachineState->field_14[i] = FALSE; + sSlotMachineState->field_20[i] = 0; + sSlotMachineState->field_26[i] = 0; + sSlotMachineState->field_2C[i] = 21; } } @@ -476,7 +479,7 @@ void sub_8140060(u8 taskId) for (i = 0; i < 3; i++) { - if (sSlotMachineState->field_14[i] != NULL || sSlotMachineState->field_26[i] != 0) + if (sSlotMachineState->field_14[i] || sSlotMachineState->field_26[i] != 0) { if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) { @@ -492,8 +495,51 @@ void sub_8140060(u8 taskId) continue; } sSlotMachineState->field_2C[i] = 21; - sSlotMachineState->field_14[i] = NULL; + sSlotMachineState->field_14[i] = FALSE; } } sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26); } + +void sub_8140148(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + sSlotMachineState->field_14[i] = TRUE; + } +} + +void sub_814016C(u16 whichPosition, u16 whichReel) +{ + switch (whichReel) + { + case 0: + sub_81401F0(whichPosition); + break; + case 1: + sub_81403BC(whichPosition); + break; + case 2: + sub_81404B8(whichPosition); + break; + } +} + +bool32 sub_81401A0(u16 whichReel) +{ + return sSlotMachineState->field_14[whichReel]; +} + +s16 sub_81401B4(u16 whichReel) +{ + s16 position = sSlotMachineState->field_20[whichReel]; + if (sSlotMachineState->field_26[whichReel] != 0) + { + position--; + if (position < 0) + position = 20; + } + return position; +} -- cgit v1.2.3 From aafeac8fcf4162d83d8fa2d9f8738c602ef2aa03 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 May 2019 12:31:54 -0400 Subject: Dump slot machine data --- data/slot_machine.s | 358 +++++++++++++++++++++++++++++++--- graphics/slot_machine/unk_8464974.pal | 19 ++ graphics/slot_machine/unk_8464994.pal | 19 ++ graphics/slot_machine/unk_84649b4.pal | 19 ++ graphics/slot_machine/unk_84649d4.pal | 19 ++ graphics/slot_machine/unk_84649f4.pal | 19 ++ graphics/slot_machine/unk_8464a14.png | Bin 0 -> 1234 bytes graphics/slot_machine/unk_846504c.pal | 19 ++ graphics/slot_machine/unk_846506c.png | Bin 0 -> 909 bytes graphics/slot_machine/unk_8465524.pal | 19 ++ graphics/slot_machine/unk_8465544.png | Bin 0 -> 215 bytes graphics/slot_machine/unk_8465930.pal | 19 ++ graphics/slot_machine/unk_8465950.pal | 19 ++ graphics/slot_machine/unk_8465970.pal | 19 ++ graphics/slot_machine/unk_8465990.pal | 19 ++ graphics/slot_machine/unk_84659b0.pal | 19 ++ graphics/slot_machine/unk_84659d0.png | Bin 0 -> 1736 bytes graphics/slot_machine/unk_84661d4.bin | Bin 0 -> 1280 bytes graphics/slot_machine/unk_84664bc.pal | 19 ++ graphics/slot_machine/unk_84664dc.pal | 19 ++ graphics/slot_machine/unk_84664fc.pal | 19 ++ graphics/slot_machine/unk_846651c.pal | 19 ++ graphics/slot_machine/unk_846653c.png | Bin 0 -> 229 bytes graphics/slot_machine/unk_84665c0.pal | 19 ++ graphics/slot_machine/unk_84665e0.pal | 19 ++ graphics/slot_machine/unk_8466600.pal | 19 ++ graphics/slot_machine/unk_8466620.png | Bin 0 -> 772 bytes graphics/slot_machine/unk_8466998.bin | Bin 0 -> 1280 bytes graphics_file_rules.mk | 7 + src/slot_machine.c | 67 ++++++- 30 files changed, 752 insertions(+), 41 deletions(-) create mode 100644 graphics/slot_machine/unk_8464974.pal create mode 100644 graphics/slot_machine/unk_8464994.pal create mode 100644 graphics/slot_machine/unk_84649b4.pal create mode 100644 graphics/slot_machine/unk_84649d4.pal create mode 100644 graphics/slot_machine/unk_84649f4.pal create mode 100644 graphics/slot_machine/unk_8464a14.png create mode 100644 graphics/slot_machine/unk_846504c.pal create mode 100644 graphics/slot_machine/unk_846506c.png create mode 100644 graphics/slot_machine/unk_8465524.pal create mode 100644 graphics/slot_machine/unk_8465544.png create mode 100644 graphics/slot_machine/unk_8465930.pal create mode 100644 graphics/slot_machine/unk_8465950.pal create mode 100644 graphics/slot_machine/unk_8465970.pal create mode 100644 graphics/slot_machine/unk_8465990.pal create mode 100644 graphics/slot_machine/unk_84659b0.pal create mode 100644 graphics/slot_machine/unk_84659d0.png create mode 100644 graphics/slot_machine/unk_84661d4.bin create mode 100644 graphics/slot_machine/unk_84664bc.pal create mode 100644 graphics/slot_machine/unk_84664dc.pal create mode 100644 graphics/slot_machine/unk_84664fc.pal create mode 100644 graphics/slot_machine/unk_846651c.pal create mode 100644 graphics/slot_machine/unk_846653c.png create mode 100644 graphics/slot_machine/unk_84665c0.pal create mode 100644 graphics/slot_machine/unk_84665e0.pal create mode 100644 graphics/slot_machine/unk_8466600.pal create mode 100644 graphics/slot_machine/unk_8466620.png create mode 100644 graphics/slot_machine/unk_8466998.bin diff --git a/data/slot_machine.s b/data/slot_machine.s index dac396602..a85e26b75 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -1,94 +1,390 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + .section .rodata .align 2 gUnknown_8464890:: @ 8464890 - .incbin "baserom.gba", 0x464890, 0x1E + .byte 0x00, 0x03 + .byte 0x00, 0x06 + .byte 0x03, 0x06 + .byte 0x01, 0x04 + .byte 0x01, 0x07 + .byte 0x04, 0x07 + .byte 0x02, 0x05 + .byte 0x02, 0x08 + .byte 0x05, 0x08 + .byte 0x00, 0x04 + .byte 0x00, 0x08 + .byte 0x04, 0x08 + .byte 0x02, 0x04 + .byte 0x02, 0x06 + .byte 0x04, 0x06 gUnknown_84648AE:: @ 84648AE - .incbin "baserom.gba", 0x4648AE, 0xF + .byte 0x00, 0x03, 0x06 + .byte 0x01, 0x04, 0x07 + .byte 0x02, 0x05, 0x08 + .byte 0x00, 0x04, 0x08 + .byte 0x02, 0x04, 0x06 gUnknown_84648BD:: @ 84648BD - .incbin "baserom.gba", 0x4648BD, 0x15 + .byte 0x00, 0x04, 0x08, 0x03 + .byte 0x00, 0x03, 0x06, 0x02 + .byte 0x01, 0x04, 0x07, 0x01 + .byte 0x02, 0x05, 0x08, 0x02 + .byte 0x02, 0x04, 0x06, 0x03 + .align 1 gUnknown_84648D2:: @ 84648D2 - .incbin "baserom.gba", 0x4648D2, 0x54 + .2byte 0x1fa1, 0x2eab, 0x3630, 0x39f3, 0x3bd4, 0x3bfc, 0x0049 + .2byte 0x1f97, 0x2ea2, 0x3627, 0x39e9, 0x3bca, 0x3bf8, 0x0049 + .2byte 0x1f91, 0x2e9b, 0x3620, 0x39e3, 0x3bc4, 0x3bf4, 0x0049 + .2byte 0x1f87, 0x2e92, 0x3617, 0x39d9, 0x3bba, 0x3bef, 0x0050 + .2byte 0x1f7f, 0x2e89, 0x360e, 0x39d1, 0x3bb2, 0x3bea, 0x0050 + .2byte 0x1fc9, 0x2efc, 0x3696, 0x3a63, 0x3c49, 0x3c8b, 0x0073 gUnknown_8464926:: @ 8464926 - .incbin "baserom.gba", 0x464926, 0x40 + .byte 0x00, 0x03, 0x04, 0x01, 0x02, 0x06, 0x02, 0x05, 0x00, 0x06, 0x03, 0x01, 0x04, 0x02, 0x06, 0x00, 0x05, 0x02, 0x01, 0x06, 0x02 + .byte 0x00, 0x05, 0x04, 0x03, 0x01, 0x05, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x00, 0x05, 0x04, 0x01, 0x03, 0x06, 0x05, 0x03, 0x04 + .byte 0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01 + .align 1 gUnknown_8464966:: @ 8464966 - .incbin "baserom.gba", 0x464966, 0xC4A + .2byte 0 + .2byte 2 + .2byte 6 + .2byte 8 + .2byte 15 + .2byte 100 + .2byte 300 + +gUnknown_8464974:: + .incbin "graphics/slot_machine/unk_8464974.gbapal" + +gUnknown_8464994:: + .incbin "graphics/slot_machine/unk_8464994.gbapal" + +gUnknown_84649B4:: + .incbin "graphics/slot_machine/unk_84649b4.gbapal" + +gUnknown_84649D4:: + .incbin "graphics/slot_machine/unk_84649d4.gbapal" + +gUnknown_84649F4:: + .incbin "graphics/slot_machine/unk_84649f4.gbapal" + +gUnknown_8464A14:: + .incbin "graphics/slot_machine/unk_8464a14.4bpp.lz" + +gUnknown_846504C:: + .incbin "graphics/slot_machine/unk_846504c.gbapal" + +gUnknown_846506C:: + .incbin "graphics/slot_machine/unk_846506c.4bpp.lz" + +gUnknown_8465524:: + .incbin "graphics/slot_machine/unk_8465524.gbapal" + +gUnknown_8465544:: + .incbin "graphics/slot_machine/unk_8465544.4bpp.lz" gUnknown_84655B0:: @ 84655B0 - .incbin "baserom.gba", 0x4655B0, 0x18 + obj_tiles gUnknown_8464A14, 0x0e00, 0 + obj_tiles gUnknown_846506C, 0x0c00, 1 + obj_tiles gUnknown_8465544, 0x0280, 2 gUnknown_84655C8:: @ 84655C8 - .incbin "baserom.gba", 0x4655C8, 0x40 + obj_pal gUnknown_8464974, 0 + obj_pal gUnknown_8464994, 1 + obj_pal gUnknown_84649B4, 2 + obj_pal gUnknown_84649D4, 3 + obj_pal gUnknown_84649F4, 4 + obj_pal gUnknown_846504C, 5 + obj_pal gUnknown_8465524, 6 + null_obj_pal gUnknown_8465608:: @ 8465608 - .incbin "baserom.gba", 0x465608, 0xE + .2byte 0x0002, 0x0002, 0x0000, 0x0000, 0x0002, 0x0004, 0x0003 gUnknown_8465616:: @ 8465616 - .incbin "baserom.gba", 0x465616, 0xC0 + .2byte 0x0120, 0x011f, 0x011e, 0x011d, 0x011c, 0x011b, 0x011a, 0x0119, 0x0118, 0x0117, 0x0116, 0x0115, 0x0114, 0x0113, 0x0112, 0x0111 + .2byte 0x0110, 0x010f, 0x010e, 0x010d, 0x010c, 0x010b, 0x010a, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101 + .2byte 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100 + .2byte 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100 + .2byte 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0110 + .2byte 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120 gUnknown_84656D6:: @ 84656D6 - .incbin "baserom.gba", 0x4656D6, 0x10E + .byte 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f + + .align 2 +gUnknown_8465738:: + .4byte 0x80000100, 0x00000c00 + +gUnknown_8465740:: + obj_image_anim_frame 0x00, 4 + obj_image_anim_end + +gUnknown_8465748:: + obj_image_anim_frame 0x10, 4 + obj_image_anim_end + +gUnknown_8465750:: + obj_image_anim_frame 0x20, 4 + obj_image_anim_end + +gUnknown_8465758:: + obj_image_anim_frame 0x30, 4 + obj_image_anim_end + +gUnknown_8465760:: + obj_image_anim_frame 0x40, 4 + obj_image_anim_end + +gUnknown_8465768:: + obj_image_anim_frame 0x50, 4 + obj_image_anim_end + +gUnknown_8465770:: + obj_image_anim_frame 0x60, 4 + obj_image_anim_end + +gUnknown_8465778:: + obj_image_anim_frame 0x20, 4 + obj_image_anim_end + +gUnknown_8465780:: + obj_image_anim_frame 0x30, 4 + obj_image_anim_end + +gUnknown_8465788:: + obj_image_anim_frame 0x40, 4 + obj_image_anim_end + +gUnknown_8465790:: + obj_image_anim_frame 0x50, 4 + obj_image_anim_end + +gUnknown_8465798:: + obj_image_anim_frame 0x60, 4 + obj_image_anim_end + +gUnknown_84657A0:: + .4byte gUnknown_8465740 + .4byte gUnknown_8465748 + .4byte gUnknown_8465750 + .4byte gUnknown_8465758 + .4byte gUnknown_8465760 + .4byte gUnknown_8465768 + .4byte gUnknown_8465770 + .4byte gUnknown_8465778 + .4byte gUnknown_8465780 + .4byte gUnknown_8465788 + .4byte gUnknown_8465790 + .4byte gUnknown_8465798 + +gUnknown_84657D0:: + obj_rot_scal_anim_frame 0x100, 0x100, 0, 1 + obj_rot_scal_anim_end + +gUnknown_84657E0:: @ unused + .4byte gUnknown_84657D0 gUnknown_84657E4:: @ 84657E4 - .incbin "baserom.gba", 0x4657E4, 0x98 + spr_template 0, 0, gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gUnknown_84657FC:: + .4byte 0x00008000, 0x00000400 + +gUnknown_8465804:: + obj_image_anim_frame 0x00, 4 + obj_image_anim_end + +gUnknown_846580C:: + obj_image_anim_frame 0x02, 4 + obj_image_anim_end + +gUnknown_8465814:: + obj_image_anim_frame 0x04, 4 + obj_image_anim_end + +gUnknown_846581C:: + obj_image_anim_frame 0x06, 4 + obj_image_anim_end + +gUnknown_8465824:: + obj_image_anim_frame 0x08, 4 + obj_image_anim_end + +gUnknown_846582C:: + obj_image_anim_frame 0x0a, 4 + obj_image_anim_end + +gUnknown_8465834:: + obj_image_anim_frame 0x0c, 4 + obj_image_anim_end + +gUnknown_846583C:: + obj_image_anim_frame 0x0e, 4 + obj_image_anim_end + +gUnknown_8465844:: + obj_image_anim_frame 0x10, 4 + obj_image_anim_end + +gUnknown_846584C:: + obj_image_anim_frame 0x12, 4 + obj_image_anim_end + +gUnknown_8465854:: + .4byte gUnknown_8465804 + .4byte gUnknown_846580C + .4byte gUnknown_8465814 + .4byte gUnknown_846581C + .4byte gUnknown_8465824 + .4byte gUnknown_846582C + .4byte gUnknown_8465834 + .4byte gUnknown_846583C + .4byte gUnknown_8465844 + .4byte gUnknown_846584C gUnknown_846587C:: @ 846587C - .incbin "baserom.gba", 0x46587C, 0x5C + spr_template 2, 6, gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gUnknown_8465894:: + .4byte 0x80000000, 0x00000400 + +gUnknown_846589C:: + obj_image_anim_frame 0, 4 + obj_image_anim_end + +gUnknown_84658A4:: + obj_image_anim_frame 0, 24 + obj_image_anim_frame 16, 24 + obj_image_anim_jump 0 + +gUnknown_84658B0:: + obj_image_anim_frame 32, 28 + obj_image_anim_frame 48, 28 + obj_image_anim_jump 0 + +gUnknown_84658BC:: + obj_image_anim_frame 64, 12 + obj_image_anim_frame 80, 12 + obj_image_anim_jump 0 + +gUnknown_84658C8:: + .4byte gUnknown_846589C + .4byte gUnknown_84658A4 + .4byte gUnknown_84658B0 + .4byte gUnknown_84658BC gUnknown_84658D8:: @ 84658D8 - .incbin "baserom.gba", 0x4658D8, 0x18 + spr_template 1, 5, gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_84658F0:: @ 84658F0 - .incbin "baserom.gba", 0x4658F0, 0x40 + .4byte sub_8141198 + .4byte sub_8141460 + .4byte sub_81414AC + .4byte sub_81414EC + .4byte sub_81414FC + .4byte sub_8141518 + .4byte sub_8141558 + .4byte sub_8141568 + .4byte sub_8141578 + .4byte sub_8141584 + .4byte sub_81415C8 + .4byte sub_8141610 + .4byte sub_8141650 + .4byte sub_8141690 + .4byte sub_81416C8 + .4byte sub_8141764 gUnknown_8465930:: @ 8465930 - .incbin "baserom.gba", 0x465930, 0x20 + .incbin "graphics/slot_machine/unk_8465930.gbapal" gUnknown_8465950:: @ 8465950 - .incbin "baserom.gba", 0x465950, 0x80 + .incbin "graphics/slot_machine/unk_8465950.gbapal" + .incbin "graphics/slot_machine/unk_8465970.gbapal" + .incbin "graphics/slot_machine/unk_8465990.gbapal" + .incbin "graphics/slot_machine/unk_84659b0.gbapal" gUnknown_84659D0:: @ 84659D0 - .incbin "baserom.gba", 0x4659D0, 0x804 + .incbin "graphics/slot_machine/unk_84659d0.4bpp.lz" gUnknown_84661D4:: @ 84661D4 - .incbin "baserom.gba", 0x4661D4, 0x2E8 + .incbin "graphics/slot_machine/unk_84661d4.bin.lz" gUnknown_84664BC:: @ 84664BC - .incbin "baserom.gba", 0x4664BC, 0x20 + .incbin "graphics/slot_machine/unk_84664bc.gbapal" gUnknown_84664DC:: @ 84664DC - .incbin "baserom.gba", 0x4664DC, 0x60 + .incbin "graphics/slot_machine/unk_84664dc.gbapal" + .incbin "graphics/slot_machine/unk_84664fc.gbapal" + .incbin "graphics/slot_machine/unk_846651c.gbapal" gUnknown_846653C:: @ 846653C - .incbin "baserom.gba", 0x46653C, 0x84 + .incbin "graphics/slot_machine/unk_846653c.4bpp.lz" gUnknown_84665C0:: @ 84665C0 - .incbin "baserom.gba", 0x4665C0, 0x60 + .incbin "graphics/slot_machine/unk_84665c0.gbapal" + .incbin "graphics/slot_machine/unk_84665e0.gbapal" + .incbin "graphics/slot_machine/unk_8466600.gbapal" gUnknown_8466620:: @ 8466620 - .incbin "baserom.gba", 0x466620, 0x378 + .incbin "graphics/slot_machine/unk_8466620.4bpp.lz" gUnknown_8466998:: @ 8466998 - .incbin "baserom.gba", 0x466998, 0x178 + .incbin "graphics/slot_machine/unk_8466998.bin.lz" + .align 2 @ bg templates gUnknown_8466B10:: @ 8466B10 - .incbin "baserom.gba", 0x466B10, 0x10 + .4byte 0x000001d0 + .4byte 0x000031ff + .4byte 0x000021ea + .4byte 0x000001c5 gUnknown_8466B20:: @ 8466B20 - .incbin "baserom.gba", 0x466B20, 0xEC + window_template 0x00, 0x05, 0x0f, 0x14, 0x04, 0x0f, 0x004f + window_template 0x00, 0x00, 0x00, 0x1e, 0x02, 0x0e, 0x0013 + window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000 + +gUnknown_8466B38:: + .2byte 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218 + .2byte 0x0219, 0x0237, 0x0238, 0x0239 +gUnknown_8466B60:: + .2byte 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119 + .2byte 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139 + +gUnknown_8466B8C:: + .2byte 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179 + .2byte 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199 + +gUnknown_8466BB8:: + .2byte 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9 + .2byte 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9 + +gUnknown_8466BE4:: + .2byte 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8 + .2byte 0x00b9, 0x00d7, 0x00d8, 0x00d9 + + .align 2 gUnknown_8466C0C:: @ 8466C0C - .incbin "baserom.gba", 0x466C0C, 0x28 + .4byte gUnknown_8466B38, 0x14 + .4byte gUnknown_8466B60, 0x16 + .4byte gUnknown_8466B8C, 0x16 + .4byte gUnknown_8466BB8, 0x16 + .4byte gUnknown_8466BE4, 0x14 gUnknown_8466C34:: @ 8466C34 - .incbin "baserom.gba", 0x466C34, 0x4 + .byte 0x02, 0x04 + .align 2 gUnknown_8466C38:: @ 8466C38 - .incbin "baserom.gba", 0x466C38, 0x8 + window_template 0x00, 0x13, 0x09, 0x06, 0x04, 0x0f, 0x009f gUnknown_8466C40:: @ 8466C40 - .incbin "baserom.gba", 0x466C40, 0x18 + .2byte 0x0229, 0x022a, 0x0249, 0x024a, 0x022e, 0x022f, 0x024e, 0x024f, 0x0233, 0x0234, 0x0253, 0x0254 diff --git a/graphics/slot_machine/unk_8464974.pal b/graphics/slot_machine/unk_8464974.pal new file mode 100644 index 000000000..6bc8bed9a --- /dev/null +++ b/graphics/slot_machine/unk_8464974.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +65 65 65 +255 246 0 +255 172 0 +246 246 255 +255 246 213 +246 213 156 +238 222 0 +98 98 98 +131 98 41 +255 106 0 +222 57 0 +213 180 0 +222 222 230 +0 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8464994.pal b/graphics/slot_machine/unk_8464994.pal new file mode 100644 index 000000000..8dee9dd3e --- /dev/null +++ b/graphics/slot_machine/unk_8464994.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 255 255 +65 65 65 +246 246 255 +246 74 0 +205 65 0 +255 205 189 +222 222 230 +0 0 0 +255 238 238 +164 32 0 +205 123 24 +255 222 115 +123 82 0 +255 246 0 +230 205 0 +164 123 41 diff --git a/graphics/slot_machine/unk_84649b4.pal b/graphics/slot_machine/unk_84649b4.pal new file mode 100644 index 000000000..d54cfc65f --- /dev/null +++ b/graphics/slot_machine/unk_84649b4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 255 139 +65 65 65 +255 0 0 +255 255 255 +255 131 0 +255 205 0 +0 0 255 +0 131 255 +0 205 255 +156 238 74 +205 205 230 +222 0 0 +0 156 0 +131 131 148 +164 164 189 +180 0 0 diff --git a/graphics/slot_machine/unk_84649d4.pal b/graphics/slot_machine/unk_84649d4.pal new file mode 100644 index 000000000..d06616c5d --- /dev/null +++ b/graphics/slot_machine/unk_84649d4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 156 230 +57 65 65 +255 246 213 +246 213 123 +255 205 172 +255 172 115 +172 156 90 +246 246 255 +213 98 41 +222 222 230 +148 148 156 +238 172 255 +246 131 180 +197 74 106 +148 74 197 +205 131 255 diff --git a/graphics/slot_machine/unk_84649f4.pal b/graphics/slot_machine/unk_84649f4.pal new file mode 100644 index 000000000..ef5e9a7ae --- /dev/null +++ b/graphics/slot_machine/unk_84649f4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 230 115 +57 65 65 +106 115 115 +197 205 205 +230 238 238 +246 246 255 +164 172 172 +255 90 65 +65 90 255 +189 213 255 +255 213 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8464a14.png b/graphics/slot_machine/unk_8464a14.png new file mode 100644 index 000000000..be8dfb6e8 Binary files /dev/null and b/graphics/slot_machine/unk_8464a14.png differ diff --git a/graphics/slot_machine/unk_846504c.pal b/graphics/slot_machine/unk_846504c.pal new file mode 100644 index 000000000..9a5bab429 --- /dev/null +++ b/graphics/slot_machine/unk_846504c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 172 0 +156 115 115 +246 205 205 +123 90 90 +222 164 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +222 123 32 +255 205 32 +205 90 0 diff --git a/graphics/slot_machine/unk_846506c.png b/graphics/slot_machine/unk_846506c.png new file mode 100644 index 000000000..1fe951e50 Binary files /dev/null and b/graphics/slot_machine/unk_846506c.png differ diff --git a/graphics/slot_machine/unk_8465524.pal b/graphics/slot_machine/unk_8465524.pal new file mode 100644 index 000000000..b8cf64bae --- /dev/null +++ b/graphics/slot_machine/unk_8465524.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +98 98 90 +255 255 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 0 diff --git a/graphics/slot_machine/unk_8465544.png b/graphics/slot_machine/unk_8465544.png new file mode 100644 index 000000000..0e3154f61 Binary files /dev/null and b/graphics/slot_machine/unk_8465544.png differ diff --git a/graphics/slot_machine/unk_8465930.pal b/graphics/slot_machine/unk_8465930.pal new file mode 100644 index 000000000..f2c377a3f --- /dev/null +++ b/graphics/slot_machine/unk_8465930.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 57 49 +230 230 230 +255 255 255 +238 172 0 +197 74 24 +205 90 0 +255 205 32 +222 123 32 +255 164 41 +57 148 255 +164 222 255 +0 49 123 +139 0 0 +98 98 90 +0 0 0 diff --git a/graphics/slot_machine/unk_8465950.pal b/graphics/slot_machine/unk_8465950.pal new file mode 100644 index 000000000..634aa770d --- /dev/null +++ b/graphics/slot_machine/unk_8465950.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8465970.pal b/graphics/slot_machine/unk_8465970.pal new file mode 100644 index 000000000..1d932206e --- /dev/null +++ b/graphics/slot_machine/unk_8465970.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +74 74 213 +115 172 255 +115 164 74 +156 238 74 +255 90 0 +255 164 41 +255 238 32 +222 41 0 +189 189 189 +156 156 156 +123 123 123 +90 90 90 +65 65 65 +0 0 0 diff --git a/graphics/slot_machine/unk_8465990.pal b/graphics/slot_machine/unk_8465990.pal new file mode 100644 index 000000000..2c2b3d843 --- /dev/null +++ b/graphics/slot_machine/unk_8465990.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 172 0 +172 106 106 +222 156 156 +148 82 82 +197 131 131 +8 123 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +222 123 32 +255 205 32 +205 90 0 diff --git a/graphics/slot_machine/unk_84659b0.pal b/graphics/slot_machine/unk_84659b0.pal new file mode 100644 index 000000000..742063525 --- /dev/null +++ b/graphics/slot_machine/unk_84659b0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +213 57 0 +205 90 0 +255 255 255 +238 172 0 +0 0 197 +180 65 0 +180 65 0 +0 106 0 +0 106 0 +82 123 255 +246 156 0 +246 156 0 +41 180 82 +41 180 82 +0 0 0 diff --git a/graphics/slot_machine/unk_84659d0.png b/graphics/slot_machine/unk_84659d0.png new file mode 100644 index 000000000..5223d0d3f Binary files /dev/null and b/graphics/slot_machine/unk_84659d0.png differ diff --git a/graphics/slot_machine/unk_84661d4.bin b/graphics/slot_machine/unk_84661d4.bin new file mode 100644 index 000000000..23182cba7 Binary files /dev/null and b/graphics/slot_machine/unk_84661d4.bin differ diff --git a/graphics/slot_machine/unk_84664bc.pal b/graphics/slot_machine/unk_84664bc.pal new file mode 100644 index 000000000..87103918b --- /dev/null +++ b/graphics/slot_machine/unk_84664bc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +213 57 0 +205 90 0 +255 255 255 +238 172 0 +0 164 238 +238 131 0 +238 131 0 +0 222 0 +0 222 0 +139 255 255 +255 238 106 +255 238 106 +148 255 148 +148 255 148 +0 0 0 diff --git a/graphics/slot_machine/unk_84664dc.pal b/graphics/slot_machine/unk_84664dc.pal new file mode 100644 index 000000000..12dfa2b28 --- /dev/null +++ b/graphics/slot_machine/unk_84664dc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 180 65 +255 90 0 +255 90 0 +222 41 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_84664fc.pal b/graphics/slot_machine/unk_84664fc.pal new file mode 100644 index 000000000..fe26d000a --- /dev/null +++ b/graphics/slot_machine/unk_84664fc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 180 65 +255 90 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 180 65 +255 90 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_846651c.pal b/graphics/slot_machine/unk_846651c.pal new file mode 100644 index 000000000..339886b3b --- /dev/null +++ b/graphics/slot_machine/unk_846651c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 90 0 +222 41 0 +255 180 65 +255 90 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_846653c.png b/graphics/slot_machine/unk_846653c.png new file mode 100644 index 000000000..4fb62b7a3 Binary files /dev/null and b/graphics/slot_machine/unk_846653c.png differ diff --git a/graphics/slot_machine/unk_84665c0.pal b/graphics/slot_machine/unk_84665c0.pal new file mode 100644 index 000000000..362860109 --- /dev/null +++ b/graphics/slot_machine/unk_84665c0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 189 230 +65 65 65 +255 255 255 +139 238 255 +172 255 255 +106 205 222 +246 222 123 +255 230 180 +213 189 90 +222 49 0 +255 238 0 +246 205 115 +213 156 41 +246 49 0 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_84665e0.pal b/graphics/slot_machine/unk_84665e0.pal new file mode 100644 index 000000000..758d58497 --- /dev/null +++ b/graphics/slot_machine/unk_84665e0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 255 255 +65 65 65 +246 246 246 +255 82 82 +49 180 255 +65 213 255 +255 156 82 +0 156 0 +156 238 74 +164 164 189 +255 238 0 +255 246 164 +197 164 57 +238 222 0 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_8466600.pal b/graphics/slot_machine/unk_8466600.pal new file mode 100644 index 000000000..bf0a84def --- /dev/null +++ b/graphics/slot_machine/unk_8466600.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 255 255 +65 65 65 +246 246 246 +123 131 131 +197 205 205 +255 139 115 +90 123 255 +213 131 255 +148 74 197 +189 90 65 +255 180 172 +246 230 106 +246 74 0 +197 255 255 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_8466620.png b/graphics/slot_machine/unk_8466620.png new file mode 100644 index 000000000..73b5d1046 Binary files /dev/null and b/graphics/slot_machine/unk_8466620.png differ diff --git a/graphics/slot_machine/unk_8466998.bin b/graphics/slot_machine/unk_8466998.bin new file mode 100644 index 000000000..d7dc278da Binary files /dev/null and b/graphics/slot_machine/unk_8466998.bin differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 145dc0810..27931e87e 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -23,6 +23,7 @@ PSSGFXDIR := graphics/pokemon_storage EVENTOBJGFXDIR := graphics/event_objects MISCGFXDIR := graphics/misc TEXTWINDOWGFXDIR := graphics/text_window +SLOTMACHINEGFXDIR := graphics/slot_machine types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -483,3 +484,9 @@ $(MISCGFXDIR)/unk_846B008.4bpp: %.4bpp: %.png $(TEXTWINDOWGFXDIR)/unk_8470B0C.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 19 + +$(SLOTMACHINEGFXDIR)/unk_8466620.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 66 + +$(SLOTMACHINEGFXDIR)/unk_84659d0.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 138 diff --git a/src/slot_machine.c b/src/slot_machine.c index 7293b6444..3a19fdbd5 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -16,7 +16,7 @@ struct SlotMachineState MainCallback savedCallback; u16 machineidx; u16 field_06; - u8 filler_08[2]; + u16 field_08; u16 slotRewardClass; u8 filler_0C[2]; u16 bet; @@ -46,11 +46,12 @@ void MainTask_ExitSlots(u8 taskId); static void SetMainTask(TaskFunc taskFunc); void sub_8140060(u8 taskId); void sub_8140148(void); -void sub_814016C(u16 whichPosition, u16 whichReel); -void sub_81401F0(u16 whichPosition); -void sub_81403BC(u16 whichPosition); -void sub_81404B8(u16 whichPosition); +void sub_814016C(u16 whichReel, u16 whichReel2); bool32 sub_81401A0(u16); +void sub_81401F0(u16 whichReel); +void sub_81403BC(u16 whichReel); +void sub_81404B8(u16 whichReel); +bool32 sub_81408F4(u32 a0, u32 a1); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); @@ -61,6 +62,8 @@ void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); +extern const u8 gUnknown_8464926[][21]; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -511,18 +514,18 @@ void sub_8140148(void) } } -void sub_814016C(u16 whichPosition, u16 whichReel) +void sub_814016C(u16 whichReel, u16 whichReel2) { - switch (whichReel) + switch (whichReel2) { case 0: - sub_81401F0(whichPosition); + sub_81401F0(whichReel); break; case 1: - sub_81403BC(whichPosition); + sub_81403BC(whichReel); break; case 2: - sub_81404B8(whichPosition); + sub_81404B8(whichReel); break; } } @@ -543,3 +546,47 @@ s16 sub_81401B4(u16 whichReel) } return position; } + +/* +void sub_81401F0(u16 whichReel) +{ + s32 i; + s16 r2; + s16 r6; + s16 sp0C = sub_81401B4(whichReel); + u32 r8 = 0; + u32 sp08; + u32 r10; + u8 sp0[5]; + + if (sSlotMachineState->field_08 == 0 && whichReel == 0) + { + sp08 = 0; + r10 = 0; + for (i = 0; i < 5; i++) + { + r6 = 0; + r2 = sp0C - i + 1; + for (; r6 < 3; r6++) + { + if (r2 >= 21) + r2 = 0; + if (sub_81408F4(1, gUnknown_8464926[r10][r2])) + break; + } + if (r6 == 3) + { + sp0[r8] = i; + r8++; + } + } + } + else if (sSlotMachineState->field_08 != 1 || whichReel == 0) + { + for (i = 0, r2 = whichReel + 1; i < 3; i++) + { + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[])) + } + } +} +*/ -- cgit v1.2.3 From ce6f4764081b7bc8da6851f68e3111e6ce928b9d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 May 2019 15:00:44 -0400 Subject: slot_machine sub_81401F0 --- asm/slot_machine.s | 243 ----------------------------------------------------- src/slot_machine.c | 59 +++++++++---- 2 files changed, 41 insertions(+), 261 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 0a6d0cf10..b3634a4b5 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,249 +5,6 @@ .text - thumb_func_start sub_81401F0 -sub_81401F0: @ 81401F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_81401B4 - lsls r0, 16 - lsrs r1, r0, 16 - movs r0, 0 - mov r8, r0 - ldr r0, _0814023C @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0 - bne _08140294 - mov r2, r9 - cmp r2, 0 - bne _08140294 - movs r7, 0 - lsls r1, 16 - str r1, [sp, 0xC] - movs r0, 0 - str r0, [sp, 0x8] - mov r10, r0 -_0814022A: - movs r6, 0 - ldr r1, [sp, 0xC] - asrs r0, r1, 16 - subs r0, r7 - adds r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r5, r7, 0x1 - b _08140248 - .align 2, 0 -_0814023C: .4byte sSlotMachineState -_08140240: - adds r6, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 -_08140248: - cmp r6, 0x2 - bgt _0814026E - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08140256 - movs r2, 0 -_08140256: - lsls r0, r2, 16 - asrs r4, r0, 16 - mov r2, r10 - adds r0, r4, r2 - ldr r1, _08140284 @ =gUnknown_8464926 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - beq _08140240 -_0814026E: - cmp r6, 0x3 - bne _0814027C - mov r0, sp - add r0, r8 - strb r7, [r0] - movs r2, 0x1 - add r8, r2 -_0814027C: - adds r7, r5, 0 - cmp r7, 0x4 - ble _0814022A - b _08140348 - .align 2, 0 -_08140284: .4byte gUnknown_8464926 -_08140288: - mov r1, sp - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - mov r8, r0 - b _081402FE -_08140294: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0x1 - bne _081402AE - lsls r2, r1, 16 - str r2, [sp, 0xC] - mov r0, r9 - lsls r0, 1 - str r0, [sp, 0x8] - mov r2, r9 - cmp r2, 0 - bne _08140348 -_081402AE: - movs r7, 0 - lsls r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r1, r2 - lsrs r2, r0, 16 - str r1, [sp, 0xC] - mov r0, r9 - lsls r6, r0, 2 - lsls r0, 1 - str r0, [sp, 0x8] - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r5, r0, r1 -_081402D0: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _081402DA - movs r2, 0 -_081402DA: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r5 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - cmp r0, 0 - bne _08140288 - adds r7, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x2 - ble _081402D0 -_081402FE: - movs r7, 0 - ldr r0, [sp, 0xC] - lsrs r2, r0, 16 - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r6, r0, r1 -_08140310: - lsls r0, r2, 16 - cmp r0, 0 - bge _08140318 - movs r2, 0x14 -_08140318: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r6 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - adds r5, r7, 0x1 - cmp r0, 0 - beq _0814033C - mov r0, sp - add r0, r8 - strb r5, [r0] - movs r2, 0x1 - add r8, r2 -_0814033C: - adds r7, r5, 0 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x3 - ble _08140310 -_08140348: - mov r0, r8 - cmp r0, 0 - bne _0814036C - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - b _0814037E - .align 2, 0 -_08140364: .4byte sSlotMachineState -_08140368: .4byte gUnknown_8464926 -_0814036C: - bl Random - lsls r0, 16 - lsrs r0, 16 - mov r1, r8 - bl __modsi3 - add r0, sp - ldrb r2, [r0] -_0814037E: - ldr r0, [sp, 0xC] - asrs r1, r0, 16 - lsls r0, r2, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - asrs r0, r1, 16 - cmp r0, 0 - bge _08140398 - adds r0, 0x15 - lsls r0, 16 - lsrs r2, r0, 16 -_08140398: - ldr r0, _081403B8 @ =sSlotMachineState - ldr r0, [r0] - mov r1, r9 - strh r1, [r0, 0x32] - adds r0, 0x2C - ldr r1, [sp, 0x8] - adds r0, r1 - strh r2, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081403B8: .4byte sSlotMachineState - thumb_func_end sub_81401F0 - thumb_func_start sub_81403BC sub_81403BC: @ 81403BC push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index 3a19fdbd5..af80f1bfc 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -9,6 +9,7 @@ #include "overworld.h" #include "slot_machine.h" #include "menu.h" +#include "random.h" #include "constants/songs.h" struct SlotMachineState @@ -26,7 +27,8 @@ struct SlotMachineState s16 field_20[3]; s16 field_26[3]; s16 field_2C[3]; - u8 filler_32[0x1E]; + u16 field_32; + u8 filler_34[0x1C]; u16 payout; }; @@ -547,34 +549,26 @@ s16 sub_81401B4(u16 whichReel) return position; } -/* void sub_81401F0(u16 whichReel) { - s32 i; + s32 i, j; s16 r2; - s16 r6; - s16 sp0C = sub_81401B4(whichReel); - u32 r8 = 0; - u32 sp08; - u32 r10; u8 sp0[5]; + s16 sp0C = sub_81401B4(whichReel); + s32 r8 = 0; if (sSlotMachineState->field_08 == 0 && whichReel == 0) { - sp08 = 0; - r10 = 0; for (i = 0; i < 5; i++) { - r6 = 0; - r2 = sp0C - i + 1; - for (; r6 < 3; r6++) + for (j = 0, r2 = sp0C - i + 1; j < 3; j++, r2++) { if (r2 >= 21) r2 = 0; - if (sub_81408F4(1, gUnknown_8464926[r10][r2])) + if (sub_81408F4(1, gUnknown_8464926[whichReel][r2])) break; } - if (r6 == 3) + if (j == 3) { sp0[r8] = i; r8++; @@ -583,10 +577,39 @@ void sub_81401F0(u16 whichReel) } else if (sSlotMachineState->field_08 != 1 || whichReel == 0) { - for (i = 0, r2 = whichReel + 1; i < 3; i++) + for (i = 0, r2 = sp0C + 1; i < 3; i++, r2++) { - if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[])) + if (r2 >= 21) + r2 = 0; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[0] = 0; + r8 = 1; + break; + } } + for (i = 0, r2 = sp0C; i < 4; i++, r2--) + { + if (r2 < 0) + r2 = 20; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[r8] = i + 1; + r8++; + } + } + } + if (r8 == 0) + { + r2 = Random() % 5; + } + else + { + r2 = sp0[Random() % r8]; } + r2 = sp0C - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_32 = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; } -*/ -- cgit v1.2.3 From d7832f2182f3f6673aded56d73b3e53c5931ba92 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 May 2019 15:39:20 -0400 Subject: slot_machine through sub_81404B8 --- asm/slot_machine.s | 215 ----------------------------------------------------- src/slot_machine.c | 94 ++++++++++++++++++++++- 2 files changed, 91 insertions(+), 218 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index b3634a4b5..a69c3ada1 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,221 +5,6 @@ .text - thumb_func_start sub_81403BC -sub_81403BC: @ 81403BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _08140470 @ =sSlotMachineState - ldr r0, [r0] - ldrh r1, [r0, 0x32] - lsls r7, r1, 16 - asrs r1, r7, 15 - adds r0, 0x20 - adds r0, r1 - ldrh r0, [r0] - adds r0, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _081403EC - movs r4, 0 -_081403EC: - mov r0, r8 - bl sub_81401B4 - lsls r1, r0, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r1, r2 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08140404 - movs r2, 0 -_08140404: - movs r6, 0 - movs r5, 0 - mov r10, r7 - lsls r4, 16 - mov r9, r4 - str r1, [sp, 0x10] - mov r0, r8 - lsls r0, 1 - str r0, [sp, 0xC] -_08140416: - lsls r0, r2, 16 - asrs r4, r0, 16 - ldr r7, _08140470 @ =sSlotMachineState - ldr r0, [r7] - ldrh r0, [r0, 0x8] - str r0, [sp] - mov r1, r10 - asrs r0, r1, 16 - mov r2, r9 - asrs r1, r2, 16 - mov r2, r8 - adds r3, r4, 0 - bl sub_814054C - cmp r0, 0 - beq _08140440 - mov r0, sp - adds r0, r6 - adds r0, 0x4 - strb r5, [r0] - adds r6, 0x1 -_08140440: - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _0814044C - movs r2, 0x14 -_0814044C: - adds r5, 0x1 - cmp r5, 0x4 - ble _08140416 - cmp r6, 0 - bne _08140474 - ldr r0, [r7] - str r6, [r0, 0x38] - ldrh r0, [r0, 0x8] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - movs r2, 0 - adds r3, r7, 0 - cmp r0, 0x1 - bhi _08140480 - movs r2, 0x4 - b _08140480 - .align 2, 0 -_08140470: .4byte sSlotMachineState -_08140474: - ldr r0, [r7] - movs r1, 0x1 - str r1, [r0, 0x38] - add r0, sp, 0x4 - ldrb r2, [r0] - adds r3, r7, 0 -_08140480: - ldr r0, [sp, 0x10] - asrs r1, r0, 16 - lsls r0, r2, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - asrs r0, r1, 16 - cmp r0, 0 - bge _0814049A - adds r0, 0x15 - lsls r0, 16 - lsrs r2, r0, 16 -_0814049A: - ldr r0, [r3] - mov r1, r8 - strh r1, [r0, 0x34] - adds r0, 0x2C - ldr r1, [sp, 0xC] - adds r0, r1 - strh r2, [r0] - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81403BC - - thumb_func_start sub_81404B8 -sub_81404B8: @ 81404B8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - bl sub_81401B4 - lsls r0, 16 - asrs r0, 16 - mov r9, r0 - mov r4, r9 - movs r6, 0 - movs r5, 0 -_081404D8: - ldr r7, _0814051C @ =sSlotMachineState - ldr r0, [r7] - ldrh r2, [r0, 0x8] - mov r0, r8 - adds r1, r4, 0 - bl sub_81406E8 - cmp r0, 0 - beq _081404F2 - mov r1, sp - adds r0, r1, r6 - strb r5, [r0] - adds r6, 0x1 -_081404F2: - subs r4, 0x1 - cmp r4, 0 - bge _081404FA - movs r4, 0x14 -_081404FA: - adds r5, 0x1 - cmp r5, 0x4 - ble _081404D8 - cmp r6, 0 - bne _08140520 - ldr r0, [r7] - ldrh r0, [r0, 0x8] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - movs r2, 0 - adds r1, r7, 0 - cmp r0, 0x1 - bhi _08140526 - movs r2, 0x4 - b _08140526 - .align 2, 0 -_0814051C: .4byte sSlotMachineState -_08140520: - mov r0, sp - ldrb r2, [r0] - adds r1, r7, 0 -_08140526: - mov r3, r9 - subs r2, r3, r2 - cmp r2, 0 - bge _08140530 - adds r2, 0x15 -_08140530: - ldr r0, [r1] - mov r3, r8 - lsls r1, r3, 1 - adds r0, 0x2C - adds r0, r1 - strh r2, [r0] - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81404B8 - thumb_func_start sub_814054C sub_814054C: @ 814054C push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index af80f1bfc..f1f16d848 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -27,8 +27,9 @@ struct SlotMachineState s16 field_20[3]; s16 field_26[3]; s16 field_2C[3]; - u16 field_32; - u8 filler_34[0x1C]; + s16 field_32[3]; + u32 field_38; + u8 filler_3C[0x14]; u16 payout; }; @@ -54,6 +55,8 @@ void sub_81401F0(u16 whichReel); void sub_81403BC(u16 whichReel); void sub_81404B8(u16 whichReel); bool32 sub_81408F4(u32 a0, u32 a1); +bool32 sub_814054C(u32, u32, u32, u32, u32); +bool32 sub_81406E8(u32, u32, u32); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); @@ -610,6 +613,91 @@ void sub_81401F0(u16 whichReel) r2 = sp0C - r2; if (r2 < 0) r2 += 21; - sSlotMachineState->field_32 = whichReel; + sSlotMachineState->field_32[0] = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; +} + +void sub_81403BC(u16 whichReel) +{ + s16 r2, r4, r7, sp10; + s32 i; + u32 r6; + u8 sp4[5]; + + r7 = sSlotMachineState->field_32[0]; + r4 = sSlotMachineState->field_20[r7] + 1; + if (r4 >= 21) + r4 = 0; + sp10 = sub_81401B4(whichReel); + r2 = sp10 + 1; + if (r2 >= 21) + r2 = 0; + r6 = 0; + for (i = 0; i < 5; i++) + { + if (sub_814054C(r7, r4, whichReel, r2, sSlotMachineState->field_08)) + { + sp4[r6] = i; + r6++; + } + r2--; + if (r2 < 0) + r2 = 20; + } + if (r6 == 0) + { + sSlotMachineState->field_38 = 0; + if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6) + r2 = 4; + else + r2 = 0; + } + else + { + sSlotMachineState->field_38 = 1; + r2 = sp4[0]; + } + r2 = sp10 - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_32[1] = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; +} + +void sub_81404B8(u16 whichReel) +{ + s32 i; + u32 r6; + s32 r9; + s32 r4; + s32 r2; + u8 sp0[5]; + + r9 = sub_81401B4(whichReel); + r4 = r9; + r6 = 0; + for (i = 0; i < 5; i++) + { + if (sub_81406E8(whichReel, r4, sSlotMachineState->field_08)) + { + sp0[r6] = i; + r6++; + } + r4--; + if (r4 < 0) + r4 = 20; + } + if (r6 == 0) + { + if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6) + r2 = 4; + else + r2 = 0; + } + else + r2 = sp0[0]; + r2 = r9 - r2; + if (r2 < 0) + r2 += 21; sSlotMachineState->field_2C[whichReel] = r2; } -- cgit v1.2.3 From 3ce8764b195ab3137b5ee96da7b3c1bede5a0c51 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 May 2019 16:40:30 -0400 Subject: slot_machine sub_814054C --- asm/slot_machine.s | 227 ----------------------------------------------------- src/slot_machine.c | 85 ++++++++++++++++++-- 2 files changed, 80 insertions(+), 232 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index a69c3ada1..62ff4a784 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,233 +5,6 @@ .text - thumb_func_start sub_814054C -sub_814054C: @ 814054C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - adds r7, r0, 0 - adds r6, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r0, [sp, 0x34] - mov r9, r0 - mov r0, sp - movs r1, 0 - movs r2, 0x9 - bl memset - movs r1, 0x7 - add r0, sp, 0x8 -_08140572: - strb r1, [r0] - subs r0, 0x1 - cmp r0, sp - bge _08140572 - movs r4, 0 - lsls r2, r7, 1 - lsls r0, r7, 2 - mov r1, r8 - lsls r1, 1 - str r1, [sp, 0x10] - mov r3, r8 - lsls r1, r3, 2 - ldr r3, _081405E8 @ =gUnknown_8464926 - mov r12, r3 - adds r0, r7 - lsls r0, 2 - adds r0, r7 - mov r10, r0 - adds r2, r7 - add r2, sp - ldr r3, [sp, 0x10] - add r3, r8 - add r1, r8 - lsls r1, 2 - add r1, r8 - str r1, [sp, 0xC] - add r3, sp -_081405A8: - mov r1, r10 - adds r0, r6, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r2] - ldr r1, [sp, 0xC] - adds r0, r5, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r3] - adds r6, 0x1 - cmp r6, 0x14 - ble _081405C4 - movs r6, 0 -_081405C4: - adds r5, 0x1 - cmp r5, 0x14 - ble _081405CC - movs r5, 0 -_081405CC: - adds r2, 0x1 - adds r3, 0x1 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405A8 - mov r3, r9 - cmp r3, 0x1 - beq _08140630 - cmp r3, 0x1 - bgt _081405EC - cmp r3, 0 - beq _081405F4 - b _081406A8 - .align 2, 0 -_081405E8: .4byte gUnknown_8464926 -_081405EC: - mov r5, r9 - cmp r5, 0x2 - beq _08140680 - b _081406A8 -_081405F4: - movs r4, 0 -_081405F6: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - bne _081406D2 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405F6 - movs r4, 0 - ldr r3, _0814062C @ =gUnknown_8464890 -_08140610: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406A4 - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _08140610 - b _081406D2 - .align 2, 0 -_0814062C: .4byte gUnknown_8464890 -_08140630: - cmp r7, 0 - beq _0814063A - mov r0, r8 - cmp r0, 0 - bne _081406A4 -_0814063A: - cmp r7, 0x1 - beq _08140644 - mov r1, r8 - cmp r1, 0x1 - bne _08140662 -_08140644: - movs r4, 0 - ldr r3, _0814067C @ =gUnknown_8464890 -_08140648: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406D2 - adds r3, 0x6 - adds r4, 0x3 - cmp r4, 0xE - ble _08140648 -_08140662: - movs r4, 0 -_08140664: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x2 - ble _08140664 - b _081406D2 - .align 2, 0 -_0814067C: .4byte gUnknown_8464890 -_08140680: - cmp r7, 0x2 - beq _0814068A - mov r3, r8 - cmp r3, 0x2 - bne _081406A8 -_0814068A: - movs r4, 0 -_0814068C: - mov r5, sp - adds r0, r5, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x8 - ble _0814068C - b _081406D2 -_081406A4: - movs r0, 0x1 - b _081406D4 -_081406A8: - movs r4, 0 - ldr r5, _081406E4 @ =gUnknown_8464890 -_081406AC: - ldrb r0, [r5] - mov r1, sp - adds r2, r1, r0 - ldrb r0, [r5, 0x1] - adds r1, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _081406CA - adds r1, r0, 0 - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 -_081406CA: - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _081406AC -_081406D2: - movs r0, 0 -_081406D4: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081406E4: .4byte gUnknown_8464890 - thumb_func_end sub_814054C - thumb_func_start sub_81406E8 sub_81406E8: @ 81406E8 push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index f1f16d848..41271b425 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -54,9 +54,9 @@ bool32 sub_81401A0(u16); void sub_81401F0(u16 whichReel); void sub_81403BC(u16 whichReel); void sub_81404B8(u16 whichReel); -bool32 sub_81408F4(u32 a0, u32 a1); -bool32 sub_814054C(u32, u32, u32, u32, u32); -bool32 sub_81406E8(u32, u32, u32); +bool32 sub_814054C(s32, s32, s32, s32, s32); +bool32 sub_81406E8(s32, s32, s32); +bool32 sub_81408F4(s32, s32); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); @@ -67,6 +67,7 @@ void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); +extern const u8 gUnknown_8464890[][2]; extern const u8 gUnknown_8464926[][21]; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) @@ -621,7 +622,7 @@ void sub_81403BC(u16 whichReel) { s16 r2, r4, r7, sp10; s32 i; - u32 r6; + s32 r6; u8 sp4[5]; r7 = sSlotMachineState->field_32[0]; @@ -667,7 +668,7 @@ void sub_81403BC(u16 whichReel) void sub_81404B8(u16 whichReel) { s32 i; - u32 r6; + s32 r6; s32 r9; s32 r4; s32 r2; @@ -701,3 +702,77 @@ void sub_81404B8(u16 whichReel) r2 += 21; sSlotMachineState->field_2C[whichReel] = r2; } + +bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) +{ + s32 i; + s32 r5; + u8 sp0[9] = {}; + + for (i = 0; i < 9; i++) + sp0[i] = 7; + + for (i = 0; i < 3; i++) + { + sp0[3 * a0 + i] = gUnknown_8464926[a0][a1]; + sp0[3 * a2 + i] = gUnknown_8464926[a2][a3]; + a1++; + if (a1 >= 21) + a1 = 0; + a3++; + if (a3 >= 21) + a3 = 0; + } + + switch (a4) + { + case 0: + for (i = 0; i < 3; i++) + { + if (sub_81408F4(1, sp0[i])) + return FALSE; + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return TRUE; + } + return FALSE; + case 1: + if (a0 == 0 || a2 == 0) + { + if (a0 == 1 || a2 == 1) + { + for (i = 0; i < 15; i += 3) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return FALSE; + } + } + for (i = 0; i < 3; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; + } + else + return TRUE; + case 2: + if (a0 == 2 || a2 == 2) + { + for (i = 0; i < 9; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; // wrong level + } + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]] && sub_81408F4(a4, sp0[gUnknown_8464890[i][0]])) + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 5a03fca0374e2c9e13360ac184acb321096fb527 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 May 2019 12:19:01 -0400 Subject: slot_machine nonmatching sub_81406E8 Register allocation differences --- asm/slot_machine.s | 284 ----------------------------------- data/slot_machine.s | 55 ------- ld_script.txt | 1 + src/slot_machine.c | 423 +++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 422 insertions(+), 341 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 62ff4a784..df42b5d5c 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,290 +5,6 @@ .text - thumb_func_start sub_81406E8 -sub_81406E8: @ 81406E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r7, r0, 0 - adds r5, r1, 0 - mov r8, r2 - ldr r0, _081407C8 @ =sSlotMachineState - ldr r2, [r0] - movs r1, 0x32 - ldrsh r0, [r2, r1] - lsls r0, 1 - adds r1, r2, 0 - adds r1, 0x20 - adds r0, r1, r0 - movs r3, 0 - ldrsh r0, [r0, r3] - adds r6, r0, 0x1 - movs r3, 0x34 - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r1, r0 - movs r3, 0 - ldrsh r0, [r1, r3] - adds r3, r0, 0x1 - adds r5, 0x1 - cmp r6, 0x14 - ble _08140726 - movs r6, 0 -_08140726: - cmp r3, 0x14 - ble _0814072C - movs r3, 0 -_0814072C: - cmp r5, 0x14 - ble _08140732 - movs r5, 0 -_08140732: - movs r4, 0 - lsls r1, r7, 1 - lsls r0, r7, 2 - mov r9, r2 - ldr r2, _081407CC @ =gUnknown_8464926 - mov r10, r2 - adds r1, r7 - add r1, sp - mov r12, r1 - adds r0, r7 - lsls r0, 2 - adds r0, r7 - str r0, [sp, 0xC] -_0814074C: - mov r7, r9 - movs r0, 0x32 - ldrsh r1, [r7, r0] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r4 - mov r7, sp - adds r2, r7, r0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r1 - adds r0, r6, r0 - add r0, r10 - ldrb r0, [r0] - strb r0, [r2] - mov r0, r9 - movs r2, 0x34 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r4 - adds r2, r7, r0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r1 - adds r0, r3, r0 - add r0, r10 - ldrb r0, [r0] - strb r0, [r2] - ldr r7, [sp, 0xC] - adds r0, r5, r7 - add r0, r10 - ldrb r0, [r0] - mov r1, r12 - strb r0, [r1] - adds r6, 0x1 - cmp r6, 0x14 - ble _0814079E - movs r6, 0 -_0814079E: - adds r3, 0x1 - cmp r3, 0x14 - ble _081407A6 - movs r3, 0 -_081407A6: - adds r5, 0x1 - cmp r5, 0x14 - ble _081407AE - movs r5, 0 -_081407AE: - movs r2, 0x1 - add r12, r2 - adds r4, 0x1 - cmp r4, 0x2 - ble _0814074C - mov r3, r8 - cmp r3, 0x1 - beq _08140828 - cmp r3, 0x1 - bgt _081407D0 - cmp r3, 0 - beq _081407D8 - b _081408A0 - .align 2, 0 -_081407C8: .4byte sSlotMachineState -_081407CC: .4byte gUnknown_8464926 -_081407D0: - mov r6, r8 - cmp r6, 0x2 - beq _08140870 - b _081408A0 -_081407D8: - movs r4, 0 -_081407DA: - mov r7, sp - adds r0, r7, r4 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - bne _081408DC - adds r4, 0x1 - cmp r4, 0x2 - ble _081407DA - movs r4, 0 - ldr r2, _08140824 @ =gUnknown_84648AE - movs r3, 0 - adds r5, r2, 0x2 -_081407F8: - ldrb r0, [r2] - mov r6, sp - adds r1, r6, r0 - ldrb r0, [r2, 0x1] - add r0, sp - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _08140816 - adds r0, r3, r5 - ldrb r0, [r0] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - beq _081408DC -_08140816: - adds r2, 0x3 - adds r3, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _081407F8 -_08140820: - movs r0, 0x1 - b _081408DE - .align 2, 0 -_08140824: .4byte gUnknown_84648AE -_08140828: - movs r4, 0 - ldr r5, _0814086C @ =gUnknown_84648AE -_0814082C: - ldrb r0, [r5] - mov r7, sp - adds r2, r7, r0 - ldrb r0, [r5, 0x1] - adds r1, r7, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _0814084A - adds r1, r0, 0 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _081408DC -_0814084A: - adds r5, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _0814082C - movs r4, 0 -_08140854: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 - adds r4, 0x1 - cmp r4, 0x2 - ble _08140854 - b _081408DC - .align 2, 0 -_0814086C: .4byte gUnknown_84648AE -_08140870: - movs r4, 0 - ldr r5, _0814089C @ =gUnknown_84648AE -_08140874: - ldrb r0, [r5] - mov r3, sp - adds r2, r3, r0 - ldrb r0, [r5, 0x1] - adds r1, r3, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _08140892 - adds r1, r0, 0 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 -_08140892: - adds r5, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _08140874 - b _081408DC - .align 2, 0 -_0814089C: .4byte gUnknown_84648AE -_081408A0: - movs r4, 0 - ldr r5, _081408F0 @ =gUnknown_84648AE - adds r7, r5, 0 - movs r6, 0 -_081408A8: - ldrb r0, [r5] - mov r1, sp - adds r2, r1, r0 - adds r0, r7, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r2] - ldrb r0, [r0] - cmp r1, r0 - bne _081408D2 - ldrb r0, [r5, 0x2] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - bne _081408D2 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 -_081408D2: - adds r5, 0x3 - adds r6, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _081408A8 -_081408DC: - movs r0, 0 -_081408DE: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081408F0: .4byte gUnknown_84648AE - thumb_func_end sub_81406E8 - thumb_func_start sub_81408F4 sub_81408F4: @ 81408F4 push {lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index a85e26b75..5c2093bd0 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -3,61 +3,6 @@ .section .rodata .align 2 -gUnknown_8464890:: @ 8464890 - .byte 0x00, 0x03 - .byte 0x00, 0x06 - .byte 0x03, 0x06 - .byte 0x01, 0x04 - .byte 0x01, 0x07 - .byte 0x04, 0x07 - .byte 0x02, 0x05 - .byte 0x02, 0x08 - .byte 0x05, 0x08 - .byte 0x00, 0x04 - .byte 0x00, 0x08 - .byte 0x04, 0x08 - .byte 0x02, 0x04 - .byte 0x02, 0x06 - .byte 0x04, 0x06 - -gUnknown_84648AE:: @ 84648AE - .byte 0x00, 0x03, 0x06 - .byte 0x01, 0x04, 0x07 - .byte 0x02, 0x05, 0x08 - .byte 0x00, 0x04, 0x08 - .byte 0x02, 0x04, 0x06 - -gUnknown_84648BD:: @ 84648BD - .byte 0x00, 0x04, 0x08, 0x03 - .byte 0x00, 0x03, 0x06, 0x02 - .byte 0x01, 0x04, 0x07, 0x01 - .byte 0x02, 0x05, 0x08, 0x02 - .byte 0x02, 0x04, 0x06, 0x03 - - .align 1 -gUnknown_84648D2:: @ 84648D2 - .2byte 0x1fa1, 0x2eab, 0x3630, 0x39f3, 0x3bd4, 0x3bfc, 0x0049 - .2byte 0x1f97, 0x2ea2, 0x3627, 0x39e9, 0x3bca, 0x3bf8, 0x0049 - .2byte 0x1f91, 0x2e9b, 0x3620, 0x39e3, 0x3bc4, 0x3bf4, 0x0049 - .2byte 0x1f87, 0x2e92, 0x3617, 0x39d9, 0x3bba, 0x3bef, 0x0050 - .2byte 0x1f7f, 0x2e89, 0x360e, 0x39d1, 0x3bb2, 0x3bea, 0x0050 - .2byte 0x1fc9, 0x2efc, 0x3696, 0x3a63, 0x3c49, 0x3c8b, 0x0073 - -gUnknown_8464926:: @ 8464926 - .byte 0x00, 0x03, 0x04, 0x01, 0x02, 0x06, 0x02, 0x05, 0x00, 0x06, 0x03, 0x01, 0x04, 0x02, 0x06, 0x00, 0x05, 0x02, 0x01, 0x06, 0x02 - .byte 0x00, 0x05, 0x04, 0x03, 0x01, 0x05, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x00, 0x05, 0x04, 0x01, 0x03, 0x06, 0x05, 0x03, 0x04 - .byte 0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01 - - .align 1 -gUnknown_8464966:: @ 8464966 - .2byte 0 - .2byte 2 - .2byte 6 - .2byte 8 - .2byte 15 - .2byte 100 - .2byte 300 - gUnknown_8464974:: .incbin "graphics/slot_machine/unk_8464974.gbapal" diff --git a/ld_script.txt b/ld_script.txt index ea0c43fd1..3057ccdb7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -416,6 +416,7 @@ SECTIONS { data/berry_pouch.o(.rodata); data/itemfinder.o(.rodata); data/buy_menu_helpers.o(.rodata); + src/slot_machine.o(.rodata); data/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); diff --git a/src/slot_machine.c b/src/slot_machine.c index 41271b425..064105bba 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -67,8 +67,68 @@ void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); -extern const u8 gUnknown_8464890[][2]; -extern const u8 gUnknown_8464926[][21]; +const u8 gUnknown_8464890[][2] = { + {0x00, 0x03}, + {0x00, 0x06}, + {0x03, 0x06}, + + {0x01, 0x04}, + {0x01, 0x07}, + {0x04, 0x07}, + + {0x02, 0x05}, + {0x02, 0x08}, + {0x05, 0x08}, + + {0x00, 0x04}, + {0x00, 0x08}, + {0x04, 0x08}, + + {0x02, 0x04}, + {0x02, 0x06}, + {0x04, 0x06} +}; + +const u8 gUnknown_84648AE[][3] = { + {0x00, 0x03, 0x06}, // top row + {0x01, 0x04, 0x07}, // middle row + {0x02, 0x05, 0x08}, // bottom row + {0x00, 0x04, 0x08}, // tl-br + {0x02, 0x04, 0x06} // bl-tr +}; + +const u8 gUnknown_84648BD[][4] = { + {0x00, 0x04, 0x08, 0x03}, + {0x00, 0x03, 0x06, 0x02}, + {0x01, 0x04, 0x07, 0x01}, + {0x02, 0x05, 0x08, 0x02}, + {0x02, 0x04, 0x06, 0x03} +}; + +const u16 gUnknown_84648D2[][7] = { + {0x1fa1, 0x2eab, 0x3630, 0x39f3, 0x3bd4, 0x3bfc, 0x0049}, + {0x1f97, 0x2ea2, 0x3627, 0x39e9, 0x3bca, 0x3bf8, 0x0049}, + {0x1f91, 0x2e9b, 0x3620, 0x39e3, 0x3bc4, 0x3bf4, 0x0049}, + {0x1f87, 0x2e92, 0x3617, 0x39d9, 0x3bba, 0x3bef, 0x0050}, + {0x1f7f, 0x2e89, 0x360e, 0x39d1, 0x3bb2, 0x3bea, 0x0050}, + {0x1fc9, 0x2efc, 0x3696, 0x3a63, 0x3c49, 0x3c8b, 0x0073}, +}; + +const u8 gUnknown_8464926[][21] = { + {0x00, 0x03, 0x04, 0x01, 0x02, 0x06, 0x02, 0x05, 0x00, 0x06, 0x03, 0x01, 0x04, 0x02, 0x06, 0x00, 0x05, 0x02, 0x01, 0x06, 0x02}, + {0x00, 0x05, 0x04, 0x03, 0x01, 0x05, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x00, 0x05, 0x04, 0x01, 0x03, 0x06, 0x05, 0x03, 0x04}, + {0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01}, +}; + +const u16 gUnknown_8464966[] = { + 0, + 2, + 6, + 8, + 15, + 100, + 300 +}; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { @@ -776,3 +836,362 @@ bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) } return FALSE; } + +#ifdef NONMATCHING +bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +{ + u8 sp0[9]; + s32 r3, r6; + s32 i; + + r6 = sSlotMachineState->field_20[sSlotMachineState->field_32[0]] + 1; + r3 = sSlotMachineState->field_20[sSlotMachineState->field_32[1]] + 1; + a1++; + if (r6 >= 21) + r6 = 0; + if (r3 >= 21) + r3 = 0; + if (a1 >= 21) + a1 = 0; + for (i = 0; i < 3; i++) + { + sp0[sSlotMachineState->field_32[0] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[0]][r6]; + sp0[sSlotMachineState->field_32[1] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[1]][r3]; + sp0[a0 * 3 + i] = gUnknown_8464926[a0][a1]; + r6++; + if (r6 >= 21) + r6 = 0; + r3++; + if (r3 >= 21) + r3 = 0; + a1++; + if (a1 >= 21) + a1++; + } + switch (a2) + { + case 0: + for (i = 0; i < 3; i++) + { + if (sub_81408F4(1, sp0[i])) + return FALSE; + } + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][2]]) + return FALSE; + } + return TRUE; + case 1: + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return FALSE; + } + for (i = 0; i < 3; i++) + { + if (sub_81408F4(a2, sp0[i])) + return TRUE; + } + return FALSE; + case 2: + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return TRUE; + } + return FALSE; + } + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][2]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return TRUE; + } + return FALSE; +} +#else +NAKED +bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tadds r7, r0, 0\n" + "\tadds r5, r1, 0\n" + "\tmov r8, r2\n" + "\tldr r0, _081407C8 @ =sSlotMachineState\n" + "\tldr r2, [r0]\n" + "\tmovs r1, 0x32\n" + "\tldrsh r0, [r2, r1]\n" + "\tlsls r0, 1\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0x20\n" + "\tadds r0, r1, r0\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r0, r3]\n" + "\tadds r6, r0, 0x1\n" + "\tmovs r3, 0x34\n" + "\tldrsh r0, [r2, r3]\n" + "\tlsls r0, 1\n" + "\tadds r1, r0\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r1, r3]\n" + "\tadds r3, r0, 0x1\n" + "\tadds r5, 0x1\n" + "\tcmp r6, 0x14\n" + "\tble _08140726\n" + "\tmovs r6, 0\n" + "_08140726:\n" + "\tcmp r3, 0x14\n" + "\tble _0814072C\n" + "\tmovs r3, 0\n" + "_0814072C:\n" + "\tcmp r5, 0x14\n" + "\tble _08140732\n" + "\tmovs r5, 0\n" + "_08140732:\n" + "\tmovs r4, 0\n" + "\tlsls r1, r7, 1\n" + "\tlsls r0, r7, 2\n" + "\tmov r9, r2\n" + "\tldr r2, _081407CC @ =gUnknown_8464926\n" + "\tmov r10, r2\n" + "\tadds r1, r7\n" + "\tadd r1, sp\n" + "\tmov r12, r1\n" + "\tadds r0, r7\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tstr r0, [sp, 0xC]\n" + "_0814074C:\n" + "\tmov r7, r9\n" + "\tmovs r0, 0x32\n" + "\tldrsh r1, [r7, r0]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tmov r7, sp\n" + "\tadds r2, r7, r0\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tadds r0, r6, r0\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tstrb r0, [r2]\n" + "\tmov r0, r9\n" + "\tmovs r2, 0x34\n" + "\tldrsh r1, [r0, r2]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tadds r2, r7, r0\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tadds r0, r3, r0\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tstrb r0, [r2]\n" + "\tldr r7, [sp, 0xC]\n" + "\tadds r0, r5, r7\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tmov r1, r12\n" + "\tstrb r0, [r1]\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x14\n" + "\tble _0814079E\n" + "\tmovs r6, 0\n" + "_0814079E:\n" + "\tadds r3, 0x1\n" + "\tcmp r3, 0x14\n" + "\tble _081407A6\n" + "\tmovs r3, 0\n" + "_081407A6:\n" + "\tadds r5, 0x1\n" + "\tcmp r5, 0x14\n" + "\tble _081407AE\n" + "\tmovs r5, 0\n" + "_081407AE:\n" + "\tmovs r2, 0x1\n" + "\tadd r12, r2\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _0814074C\n" + "\tmov r3, r8\n" + "\tcmp r3, 0x1\n" + "\tbeq _08140828\n" + "\tcmp r3, 0x1\n" + "\tbgt _081407D0\n" + "\tcmp r3, 0\n" + "\tbeq _081407D8\n" + "\tb _081408A0\n" + "\t.align 2, 0\n" + "_081407C8: .4byte sSlotMachineState\n" + "_081407CC: .4byte gUnknown_8464926\n" + "_081407D0:\n" + "\tmov r6, r8\n" + "\tcmp r6, 0x2\n" + "\tbeq _08140870\n" + "\tb _081408A0\n" + "_081407D8:\n" + "\tmovs r4, 0\n" + "_081407DA:\n" + "\tmov r7, sp\n" + "\tadds r0, r7, r4\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _081408DC_return_false\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _081407DA\n" + "\tmovs r4, 0\n" + "\tldr r2, _08140824 @ =gUnknown_84648AE\n" + "\tmovs r3, 0\n" + "\tadds r5, r2, 0x2\n" + "_081407F8:\n" + "\tldrb r0, [r2]\n" + "\tmov r6, sp\n" + "\tadds r1, r6, r0\n" + "\tldrb r0, [r2, 0x1]\n" + "\tadd r0, sp\n" + "\tldrb r1, [r1]\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _08140816\n" + "\tadds r0, r3, r5\n" + "\tldrb r0, [r0]\n" + "\tadd r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbeq _081408DC_return_false\n" + "_08140816:\n" + "\tadds r2, 0x3\n" + "\tadds r3, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _081407F8\n" + "_08140820_return_true:\n" + "\tmovs r0, 0x1\n" + "\tb _081408DE\n" + "\t.align 2, 0\n" + "_08140824: .4byte gUnknown_84648AE\n" + "_08140828:\n" + "\tmovs r4, 0\n" + "\tldr r5, _0814086C @ =gUnknown_84648AE\n" + "_0814082C:\n" + "\tldrb r0, [r5]\n" + "\tmov r7, sp\n" + "\tadds r2, r7, r0\n" + "\tldrb r0, [r5, 0x1]\n" + "\tadds r1, r7, r0\n" + "\tldrb r0, [r2]\n" + "\tldrb r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbne _0814084A\n" + "\tadds r1, r0, 0\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _081408DC_return_false\n" + "_0814084A:\n" + "\tadds r5, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _0814082C\n" + "\tmovs r4, 0\n" + "_08140854:\n" + "\tmov r1, sp\n" + "\tadds r0, r1, r4\n" + "\tldrb r1, [r0]\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _08140854\n" + "\tb _081408DC_return_false\n" + "\t.align 2, 0\n" + "_0814086C: .4byte gUnknown_84648AE\n" + "_08140870:\n" + "\tmovs r4, 0\n" + "\tldr r5, _0814089C @ =gUnknown_84648AE\n" + "_08140874:\n" + "\tldrb r0, [r5]\n" + "\tmov r3, sp\n" + "\tadds r2, r3, r0\n" + "\tldrb r0, [r5, 0x1]\n" + "\tadds r1, r3, r0\n" + "\tldrb r0, [r2]\n" + "\tldrb r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbne _08140892\n" + "\tadds r1, r0, 0\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "_08140892:\n" + "\tadds r5, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _08140874\n" + "\tb _081408DC_return_false\n" + "\t.align 2, 0\n" + "_0814089C: .4byte gUnknown_84648AE\n" + "_081408A0:\n" + "\tmovs r4, 0\n" + "\tldr r5, _081408F0 @ =gUnknown_84648AE\n" + "\tadds r7, r5, 0\n" + "\tmovs r6, 0\n" + "_081408A8:\n" + "\tldrb r0, [r5]\n" + "\tmov r1, sp\n" + "\tadds r2, r1, r0\n" + "\tadds r0, r7, 0x1\n" + "\tadds r0, r6, r0\n" + "\tldrb r0, [r0]\n" + "\tadd r0, sp\n" + "\tldrb r1, [r2]\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _081408D2\n" + "\tldrb r0, [r5, 0x2]\n" + "\tadd r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _081408D2\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "_081408D2:\n" + "\tadds r5, 0x3\n" + "\tadds r6, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _081408A8\n" + "_081408DC_return_false:\n" + "\tmovs r0, 0\n" + "_081408DE:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_081408F0: .4byte gUnknown_84648AE"); +} +#endif //NONMATCHING -- cgit v1.2.3 From 88bd9d4d062e7e750f470149f6454efa4d817f36 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 May 2019 14:00:37 -0400 Subject: slot_machine through sub_8140A80 --- asm/slot_machine.s | 401 ----------------------------------------------------- src/slot_machine.c | 141 ++++++++++++++++++- 2 files changed, 134 insertions(+), 408 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index df42b5d5c..0e3a7d8a7 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,407 +5,6 @@ .text - thumb_func_start sub_81408F4 -sub_81408F4: @ 81408F4 - push {lr} - adds r2, r1, 0 - cmp r0, 0x6 - bhi _08140966 - lsls r0, 2 - ldr r1, _08140908 @ =_0814090C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08140908: .4byte _0814090C - .align 2, 0 -_0814090C: - .4byte _08140928 - .4byte _08140934 - .4byte _08140934 - .4byte _0814093E - .4byte _08140944 - .4byte _08140952 - .4byte _0814095C -_08140928: - movs r1, 0x4 - eors r1, r2 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - b _08140968 -_08140934: - movs r0, 0 - cmp r2, 0x4 - bne _08140968 - movs r0, 0x1 - b _08140968 -_0814093E: - movs r1, 0 - subs r0, r2, 0x5 - b _08140948 -_08140944: - movs r1, 0 - subs r0, r2, 0x2 -_08140948: - cmp r0, 0x1 - bhi _0814094E - movs r1, 0x1 -_0814094E: - adds r0, r1, 0 - b _08140968 -_08140952: - movs r0, 0 - cmp r2, 0x1 - bne _08140968 - movs r0, 0x1 - b _08140968 -_0814095C: - movs r0, 0 - cmp r2, 0 - bne _08140968 - movs r0, 0x1 - b _08140968 -_08140966: - movs r0, 0 -_08140968: - pop {r1} - bx r1 - thumb_func_end sub_81408F4 - - thumb_func_start sub_814096C -sub_814096C: @ 814096C - push {lr} - cmp r0, 0x6 - bhi _0814099C - lsls r0, 2 - ldr r1, _0814097C @ =_08140980 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814097C: .4byte _08140980 - .align 2, 0 -_08140980: - .4byte _081409AC - .4byte _081409A8 - .4byte _081409A4 - .4byte _081409A4 - .4byte _0814099C - .4byte _081409A0 - .4byte _081409A0 -_0814099C: - movs r0, 0x1 - b _081409AE -_081409A0: - movs r0, 0x3 - b _081409AE -_081409A4: - movs r0, 0x4 - b _081409AE -_081409A8: - movs r0, 0x5 - b _081409AE -_081409AC: - movs r0, 0x6 -_081409AE: - pop {r1} - bx r1 - thumb_func_end sub_814096C - - thumb_func_start sub_81409B4 -sub_81409B4: @ 81409B4 - push {r4-r6,lr} - bl Random - lsls r0, 16 - lsrs r2, r0, 18 - ldr r0, _08140A60 @ =sSlotMachineState - ldr r0, [r0] - ldrh r1, [r0, 0x4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 1 - ldr r1, _08140A64 @ =gUnknown_84648D2 - adds r4, r0, r1 - movs r5, 0 - ldrh r0, [r4] - cmp r2, r0 - bcc _081409E6 - adds r0, r4, 0 -_081409D8: - adds r0, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - bgt _081409E6 - ldrh r1, [r0] - cmp r2, r1 - bcs _081409D8 -_081409E6: - ldr r6, _08140A60 @ =sSlotMachineState - ldr r1, [r6] - ldrh r0, [r1, 0x8] - cmp r0, 0x4 - bhi _08140A5A - ldrh r0, [r1, 0xC] - cmp r0, 0 - bne _08140A22 - bl Random - ldr r1, _08140A68 @ =0x00003fff - ands r1, r0 - ldrh r4, [r4, 0xC] - cmp r1, r4 - bcs _08140A18 - ldr r4, [r6] - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0x3C - cmp r1, 0 - beq _08140A16 - movs r0, 0x5 -_08140A16: - strh r0, [r4, 0xC] -_08140A18: - ldr r0, _08140A60 @ =sSlotMachineState - ldr r1, [r0] - ldrh r1, [r1, 0xC] - cmp r1, 0 - beq _08140A56 -_08140A22: - cmp r5, 0 - bne _08140A4A - bl Random - ldr r1, _08140A68 @ =0x00003fff - ands r1, r0 - ldr r0, _08140A6C @ =0x00002ccb - cmp r1, r0 - bhi _08140A4A - ldr r0, _08140A60 @ =sSlotMachineState - ldr r4, [r0] - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0x3C - cmp r1, 0 - beq _08140A48 - movs r0, 0x5 -_08140A48: - strh r0, [r4, 0xC] -_08140A4A: - ldr r2, _08140A60 @ =sSlotMachineState - ldr r1, [r2] - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - adds r0, r2, 0 -_08140A56: - ldr r0, [r0] - strh r5, [r0, 0x8] -_08140A5A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08140A60: .4byte sSlotMachineState -_08140A64: .4byte gUnknown_84648D2 -_08140A68: .4byte 0x00003fff -_08140A6C: .4byte 0x00002ccb - thumb_func_end sub_81409B4 - - thumb_func_start sub_8140A70 -sub_8140A70: @ 8140A70 - ldr r0, _08140A7C @ =sSlotMachineState - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x8] - bx lr - .align 2, 0 -_08140A7C: .4byte sSlotMachineState - thumb_func_end sub_8140A70 - - thumb_func_start sub_8140A80 -sub_8140A80: @ 8140A80 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - mov r0, sp - movs r1, 0 - movs r2, 0x9 - bl memset - movs r5, 0 - ldr r2, _08140B58 @ =sSlotMachineState - movs r3, 0 - adds r4, r2, 0 -_08140A9C: - ldr r0, [r2] - lsls r1, r5, 2 - adds r0, 0x3C - adds r0, r1 - str r3, [r0] - adds r5, 0x1 - cmp r5, 0x4 - ble _08140A9C - movs r0, 0 - mov r9, r0 - ldr r0, [r4] - movs r1, 0x20 - ldrsh r4, [r0, r1] - movs r7, 0x22 - ldrsh r3, [r0, r7] - movs r1, 0x24 - ldrsh r2, [r0, r1] - ldr r6, _08140B5C @ =gUnknown_8464926 - movs r7, 0x2A - adds r7, r6 - mov r8, r7 - mov r1, sp - movs r0, 0x15 - adds r0, r6 - mov r12, r0 - movs r5, 0x2 -_08140AD0: - adds r4, 0x1 - cmp r4, 0x14 - ble _08140AD8 - movs r4, 0 -_08140AD8: - adds r3, 0x1 - cmp r3, 0x14 - ble _08140AE0 - movs r3, 0 -_08140AE0: - adds r2, 0x1 - cmp r2, 0x14 - ble _08140AE8 - movs r2, 0 -_08140AE8: - adds r0, r4, r6 - ldrb r0, [r0] - strb r0, [r1] - mov r7, r12 - adds r0, r3, r7 - ldrb r0, [r0] - strb r0, [r1, 0x3] - mov r7, r8 - adds r0, r2, r7 - ldrb r0, [r0] - strb r0, [r1, 0x6] - adds r1, 0x1 - subs r5, 0x1 - cmp r5, 0 - bge _08140AD0 - ldr r0, _08140B58 @ =sSlotMachineState - ldr r0, [r0] - adds r0, 0x50 - movs r1, 0 - strh r1, [r0] - ldr r7, _08140B60 @ =gUnknown_84648BD - mov r8, r7 - movs r6, 0 - movs r5, 0x4 -_08140B18: - ldr r0, _08140B58 @ =sSlotMachineState - ldr r1, [r0] - mov r0, r8 - adds r0, 0x3 - adds r0, r6, r0 - ldrh r1, [r1, 0xE] - ldrb r0, [r0] - cmp r1, r0 - bcc _08140BB6 - ldrb r0, [r7] - mov r1, sp - adds r4, r1, r0 - ldrb r1, [r4] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - beq _08140B64 - mov r0, r8 - adds r0, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r0] - movs r0, 0x2 - bl sub_81408F4 - movs r3, 0x1 - cmp r0, 0 - beq _08140B8E - movs r3, 0x2 - b _08140B92 - .align 2, 0 -_08140B58: .4byte sSlotMachineState -_08140B5C: .4byte gUnknown_8464926 -_08140B60: .4byte gUnknown_84648BD -_08140B64: - mov r0, r8 - adds r0, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _08140B8C - ldrb r0, [r7, 0x2] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - bne _08140B8C - adds r0, r1, 0 - bl sub_814096C - lsls r0, 24 - lsrs r3, r0, 24 - b _08140B8E -_08140B8C: - movs r3, 0 -_08140B8E: - cmp r3, 0 - beq _08140BB0 -_08140B92: - ldr r0, _08140BD4 @ =sSlotMachineState - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x3C - adds r0, r6 - movs r1, 0x1 - str r1, [r0] - adds r2, 0x50 - ldr r1, _08140BD8 @ =gUnknown_8464966 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] -_08140BB0: - cmp r3, r9 - ble _08140BB6 - mov r9, r3 -_08140BB6: - adds r7, 0x4 - adds r6, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _08140B18 - mov r7, r9 - lsls r0, r7, 16 - lsrs r0, 16 - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08140BD4: .4byte sSlotMachineState -_08140BD8: .4byte gUnknown_8464966 - thumb_func_end sub_8140A80 - thumb_func_start sub_8140BDC sub_8140BDC: @ 8140BDC ldr r0, _08140BE8 @ =sSlotMachineState diff --git a/src/slot_machine.c b/src/slot_machine.c index 064105bba..172a4014a 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -19,7 +19,7 @@ struct SlotMachineState u16 field_06; u16 field_08; u16 slotRewardClass; - u8 filler_0C[2]; + u16 field_0C; u16 bet; u8 field_10; u8 field_11; @@ -29,7 +29,7 @@ struct SlotMachineState s16 field_2C[3]; s16 field_32[3]; u32 field_38; - u8 filler_3C[0x14]; + u32 field_3C[5]; u16 payout; }; @@ -98,11 +98,11 @@ const u8 gUnknown_84648AE[][3] = { }; const u8 gUnknown_84648BD[][4] = { - {0x00, 0x04, 0x08, 0x03}, - {0x00, 0x03, 0x06, 0x02}, - {0x01, 0x04, 0x07, 0x01}, - {0x02, 0x05, 0x08, 0x02}, - {0x02, 0x04, 0x06, 0x03} + {0x00, 0x04, 0x08, 0x03}, // tl-br + {0x00, 0x03, 0x06, 0x02}, // top row + {0x01, 0x04, 0x07, 0x01}, // middle row + {0x02, 0x05, 0x08, 0x02}, // bottom row + {0x02, 0x04, 0x06, 0x03} // bl-tr }; const u16 gUnknown_84648D2[][7] = { @@ -1195,3 +1195,130 @@ bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) "_081408F0: .4byte gUnknown_84648AE"); } #endif //NONMATCHING + +bool32 sub_81408F4(s32 a0, s32 a1) +{ + switch (a0) + { + case 0: + return a1 ^ 4 ? TRUE : FALSE; + case 1: + case 2: + return a1 == 4 ? TRUE : FALSE; + case 3: + return a1 == 5 || a1 == 6 ? TRUE : FALSE; + case 4: + return a1 == 2 || a1 == 3 ? TRUE : FALSE; + case 5: + return a1 == 1 ? TRUE : FALSE; + case 6: + return a1 == 0 ? TRUE : FALSE; + default: + return FALSE; + } +} + +u8 sub_814096C(s32 a0) +{ + switch (a0) + { + default: + case 4: + return 1; + case 5: + case 6: + return 3; + case 2: + case 3: + return 4; + case 1: + return 5; + case 0: + return 6; + } +} + +void sub_81409B4(void) +{ + u16 r2 = Random() / 4; + s32 i; + const u16 * r4 = gUnknown_84648D2[sSlotMachineState->machineidx]; + for (i = 0; i < 6; i++) + { + if (r2 < r4[i]) + break; + } + if (sSlotMachineState->field_08 < 5) + { + if (sSlotMachineState->field_0C == 0) + { + if ((Random() & 0x3FFF) < r4[6]) + sSlotMachineState->field_0C = (Random() & 1) ? 5 : 60; + } + if (sSlotMachineState->field_0C != 0) + { + if (i == 0 && (Random() & 0x3FFF) < 0x2CCC) + sSlotMachineState->field_0C = (Random() & 1) ? 5 : 60; + sSlotMachineState->field_0C--; + } + sSlotMachineState->field_08 = i; + } +} + +void sub_8140A70(void) +{ + sSlotMachineState->field_08 = 0; +} + +u16 sub_8140A80(void) +{ + u8 sp0[9] = {}; + s32 i; + s32 r4, r3, r2; + s32 r9; + + for (i = 0; i < 5; i++) + sSlotMachineState->field_3C[i] = 0; + + r9 = 0; + r4 = sSlotMachineState->field_20[0]; + r3 = sSlotMachineState->field_20[1]; + r2 = sSlotMachineState->field_20[2]; + + for (i = 0; i < 3; i++) + { + r4++; + if (r4 >= 21) + r4 = 0; + r3++; + if (r3 >= 21) + r3 = 0; + r2++; + if (r2 >= 21) + r2 = 0; + sp0[0 * 3 + i] = gUnknown_8464926[0][r4]; + sp0[1 * 3 + i] = gUnknown_8464926[1][r3]; + sp0[2 * 3 + i] = gUnknown_8464926[2][r2]; + } + sSlotMachineState->payout = 0; + for (i = 0; i < 5; i++) + { + if (sSlotMachineState->bet >= gUnknown_84648BD[i][3]) + { + if (sub_81408F4(1, sp0[gUnknown_84648BD[i][0]])) + r3 = sub_81408F4(2, sp0[gUnknown_84648BD[i][1]]) ? 2 : 1; + else if (sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][1]] && sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][2]]) + r3 = sub_814096C(sp0[gUnknown_84648BD[i][0]]); + else + r3 = 0; + if (r3 != 0) + { + sSlotMachineState->field_3C[i] = 1; + sSlotMachineState->payout += gUnknown_8464966[r3]; + } + if (r3 > r9) + r9 = r3; + } + } + return r9; +} -- cgit v1.2.3 From 8d6eac996f0e69666b47aefb3dadb37eb1f40e74 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 May 2019 16:09:19 -0400 Subject: slot_machine through sub_8140C6C --- asm/slot_machine.s | 119 ---------------------------------------------------- data/slot_machine.s | 47 +-------------------- src/slot_machine.c | 90 +++++++++++++++++++++++++++++++++++++++ sym_ewram.txt | 3 -- 4 files changed, 91 insertions(+), 168 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 0e3a7d8a7..9229072da 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,125 +5,6 @@ .text - thumb_func_start sub_8140BDC -sub_8140BDC: @ 8140BDC - ldr r0, _08140BE8 @ =sSlotMachineState - ldr r0, [r0] - adds r0, 0x50 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08140BE8: .4byte sSlotMachineState - thumb_func_end sub_8140BDC - - thumb_func_start sub_8140BEC -sub_8140BEC: @ 8140BEC - ldr r0, _08140BF4 @ =sSlotMachineState - ldr r0, [r0] - ldrb r0, [r0, 0xE] - bx lr - .align 2, 0 -_08140BF4: .4byte sSlotMachineState - thumb_func_end sub_8140BEC - - thumb_func_start sub_8140BF8 -sub_8140BF8: @ 8140BF8 - ldr r1, _08140C08 @ =sSlotMachineState - ldr r1, [r1] - lsls r0, 2 - adds r1, 0x3C - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_08140C08: .4byte sSlotMachineState - thumb_func_end sub_8140BF8 - - thumb_func_start sub_8140C0C -sub_8140C0C: @ 8140C0C - push {r4,r5,lr} - movs r5, 0 - ldr r4, _08140C3C @ =gUnknown_84655B0 -_08140C12: - adds r0, r4, 0 - bl LoadCompressedObjectPic - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x2 - bls _08140C12 - ldr r0, _08140C40 @ =gUnknown_84655C8 - bl LoadSpritePalettes - ldr r4, _08140C44 @ =gUnknown_203F3A4 - movs r0, 0x74 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08140C48 - bl sub_8140C6C - movs r0, 0x1 - b _08140C4A - .align 2, 0 -_08140C3C: .4byte gUnknown_84655B0 -_08140C40: .4byte gUnknown_84655C8 -_08140C44: .4byte gUnknown_203F3A4 -_08140C48: - movs r0, 0 -_08140C4A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8140C0C - - thumb_func_start sub_8140C50 -sub_8140C50: @ 8140C50 - push {r4,lr} - ldr r4, _08140C68 @ =gUnknown_203F3A4 - ldr r0, [r4] - cmp r0, 0 - beq _08140C62 - bl Free - movs r0, 0 - str r0, [r4] -_08140C62: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140C68: .4byte gUnknown_203F3A4 - thumb_func_end sub_8140C50 - - thumb_func_start sub_8140C6C -sub_8140C6C: @ 8140C6C - push {r4-r6,lr} - adds r4, r0, 0 - movs r2, 0 - movs r5, 0 - adds r6, r4, 0 - adds r6, 0xC -_08140C78: - lsls r0, r2, 2 - adds r1, r4, r0 - str r5, [r1] - adds r3, r2, 0x1 - adds r0, r2 - lsls r0, 2 - movs r1, 0x4 - adds r0, r6 - adds r0, 0x10 -_08140C8A: - str r5, [r0] - subs r0, 0x4 - subs r1, 0x1 - cmp r1, 0 - bge _08140C8A - adds r2, r3, 0 - cmp r2, 0x2 - ble _08140C78 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8140C6C - thumb_func_start sub_8140CA0 sub_8140CA0: @ 8140CA0 push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 5c2093bd0..6a53f4426 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -2,52 +2,7 @@ .include "constants/constants.inc" .section .rodata - .align 2 -gUnknown_8464974:: - .incbin "graphics/slot_machine/unk_8464974.gbapal" - -gUnknown_8464994:: - .incbin "graphics/slot_machine/unk_8464994.gbapal" - -gUnknown_84649B4:: - .incbin "graphics/slot_machine/unk_84649b4.gbapal" - -gUnknown_84649D4:: - .incbin "graphics/slot_machine/unk_84649d4.gbapal" - -gUnknown_84649F4:: - .incbin "graphics/slot_machine/unk_84649f4.gbapal" - -gUnknown_8464A14:: - .incbin "graphics/slot_machine/unk_8464a14.4bpp.lz" - -gUnknown_846504C:: - .incbin "graphics/slot_machine/unk_846504c.gbapal" - -gUnknown_846506C:: - .incbin "graphics/slot_machine/unk_846506c.4bpp.lz" - -gUnknown_8465524:: - .incbin "graphics/slot_machine/unk_8465524.gbapal" - -gUnknown_8465544:: - .incbin "graphics/slot_machine/unk_8465544.4bpp.lz" - -gUnknown_84655B0:: @ 84655B0 - obj_tiles gUnknown_8464A14, 0x0e00, 0 - obj_tiles gUnknown_846506C, 0x0c00, 1 - obj_tiles gUnknown_8465544, 0x0280, 2 - -gUnknown_84655C8:: @ 84655C8 - obj_pal gUnknown_8464974, 0 - obj_pal gUnknown_8464994, 1 - obj_pal gUnknown_84649B4, 2 - obj_pal gUnknown_84649D4, 3 - obj_pal gUnknown_84649F4, 4 - obj_pal gUnknown_846504C, 5 - obj_pal gUnknown_8465524, 6 - null_obj_pal - + .align 1 gUnknown_8465608:: @ 8465608 .2byte 0x0002, 0x0002, 0x0000, 0x0000, 0x0002, 0x0004, 0x0003 diff --git a/src/slot_machine.c b/src/slot_machine.c index 172a4014a..129d9b79a 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1,5 +1,6 @@ #include "global.h" #include "palette.h" +#include "decompress.h" #include "task.h" #include "main.h" #include "malloc.h" @@ -33,7 +34,15 @@ struct SlotMachineState u16 payout; }; +struct SlotMachineGfxManager +{ + u32 field_00[3]; + u32 field_0C[3][5]; + u8 filler_4C[0x2C]; +}; + EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; +EWRAM_DATA struct SlotMachineGfxManager * gUnknown_203F3A4 = NULL; void sub_813F84C(struct SlotMachineState * ptr); void sub_813F898(void); @@ -60,6 +69,7 @@ bool32 sub_81408F4(s32, s32); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); +void sub_8140C6C(struct SlotMachineGfxManager * manager); void sub_8140D7C(s16 *, s16 *); bool32 sub_814104C(void); void sub_8141094(void); @@ -130,6 +140,34 @@ const u16 gUnknown_8464966[] = { 300 }; +const u16 gUnknown_8464974[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal"); +const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal"); +const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal"); +const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal"); +const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal"); +const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz"); +const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_846504c.gbapal"); +const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz"); +const u16 gUnknown_8465524[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal"); +const u32 gUnknown_8465544[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz"); + +const struct CompressedSpriteSheet gUnknown_84655B0[] = { + {(const void *)gUnknown_8464A14, 0xe00, 0}, + {(const void *)gUnknown_846506C, 0xc00, 1}, + {(const void *)gUnknown_8465544, 0x280, 2}, +}; + +const struct SpritePalette gUnknown_84655C8[] = { + {gUnknown_8464974, 0}, + {gUnknown_8464994, 1}, + {gUnknown_84649B4, 2}, + {gUnknown_84649D4, 3}, + {gUnknown_84649F4, 4}, + {gUnknown_846504C, 5}, + {gUnknown_8465524, 6}, + {NULL} +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -1322,3 +1360,55 @@ u16 sub_8140A80(void) } return r9; } + +u16 sub_8140BDC(void) +{ + return sSlotMachineState->payout; +} + +u8 sub_8140BEC(void) +{ + return sSlotMachineState->bet; +} + +bool32 sub_8140BF8(s32 a0) +{ + return sSlotMachineState->field_3C[a0]; +} + +bool32 sub_8140C0C(void) +{ + s32 i; + + for (i = 0; i < NELEMS(gUnknown_84655B0); i++) + LoadCompressedObjectPic(&gUnknown_84655B0[i]); + LoadSpritePalettes(gUnknown_84655C8); + gUnknown_203F3A4 = Alloc(sizeof(*gUnknown_203F3A4)); + if (gUnknown_203F3A4 == NULL) + return FALSE; + sub_8140C6C(gUnknown_203F3A4); + return TRUE; +} + +void sub_8140C50(void) +{ + if (gUnknown_203F3A4 != NULL) + { + Free(gUnknown_203F3A4); + gUnknown_203F3A4 = NULL; + } +} + +void sub_8140C6C(struct SlotMachineGfxManager * manager) +{ + s32 i, j; + + for (i = 0; i < 3; i++) + { + manager->field_00[i] = 0; + for (j = 0; j < 5; j++) + { + manager->field_0C[i][j] = 0; + } + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index fa2499ace..18f6433c4 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1592,9 +1592,6 @@ gUnknown_203F39C: @ 203F39C .align 2 .include "src/slot_machine.o" -gUnknown_203F3A4: @ 203F3A4 - .space 0x4 - sLocationHistory: @ 203F3A8 .space 0x6 -- cgit v1.2.3 From d3aa5a0b97e08c7824eea6b38b2904e443267eab Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 May 2019 17:48:56 -0400 Subject: slot_machine sub_8140CA0 --- asm/slot_machine.s | 108 ---------------------------------------------------- data/slot_machine.s | 17 --------- src/slot_machine.c | 60 +++++++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 128 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 9229072da..f79f658ae 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,114 +5,6 @@ .text - thumb_func_start sub_8140CA0 -sub_8140CA0: @ 8140CA0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r7, 0 -_08140CAE: - movs r6, 0 - lsls r0, r7, 2 - adds r1, r7, 0x1 - str r1, [sp] - adds r0, r7 - mov r10, r0 - mov r2, r10 - lsls r2, 2 - mov r8, r2 - movs r3, 0xB0 - lsls r3, 14 - mov r9, r3 -_08140CC6: - mov r0, r10 - lsls r1, r0, 19 - movs r2, 0xA0 - lsls r2, 15 - adds r1, r2 - mov r3, r9 - asrs r2, r3, 16 - ldr r0, _08140D64 @ =gUnknown_84657E4 - asrs r1, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08140D68 @ =gUnknown_8464926 - mov r3, r8 - adds r1, r3, r7 - adds r1, r6, r1 - adds r1, r2 - ldrb r4, [r1] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r0, _08140D6C @ =gSprites - adds r5, r0 - adds r0, r5, 0 - adds r1, r4, 0 - bl StartSpriteAnim - ldr r0, _08140D70 @ =gUnknown_8465608 - lsls r4, 1 - adds r4, r0 - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r5, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x5] - movs r0, 0 - strh r7, [r5, 0x2E] - strh r6, [r5, 0x30] - strh r6, [r5, 0x32] - strh r0, [r5, 0x34] - ldrb r0, [r5, 0x3] - movs r2, 0x3F - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - strb r0, [r5, 0x3] - ldr r0, _08140D74 @ =gUnknown_203F3A4 - ldr r2, [r0] - lsls r1, r6, 2 - add r1, r8 - adds r0, r2, 0 - adds r0, 0xC - adds r0, r1 - str r5, [r0] - ldr r0, _08140D78 @ =0x07000006 - str r0, [r2, 0x70] - movs r3, 0xC0 - lsls r3, 13 - add r9, r3 - adds r6, 0x1 - cmp r6, 0x4 - ble _08140CC6 - ldr r7, [sp] - cmp r7, 0x2 - ble _08140CAE - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140D64: .4byte gUnknown_84657E4 -_08140D68: .4byte gUnknown_8464926 -_08140D6C: .4byte gSprites -_08140D70: .4byte gUnknown_8465608 -_08140D74: .4byte gUnknown_203F3A4 -_08140D78: .4byte 0x07000006 - thumb_func_end sub_8140CA0 - thumb_func_start sub_8140D7C sub_8140D7C: @ 8140D7C push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 6a53f4426..25b5a6817 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -2,23 +2,6 @@ .include "constants/constants.inc" .section .rodata - .align 1 -gUnknown_8465608:: @ 8465608 - .2byte 0x0002, 0x0002, 0x0000, 0x0000, 0x0002, 0x0004, 0x0003 - -gUnknown_8465616:: @ 8465616 - .2byte 0x0120, 0x011f, 0x011e, 0x011d, 0x011c, 0x011b, 0x011a, 0x0119, 0x0118, 0x0117, 0x0116, 0x0115, 0x0114, 0x0113, 0x0112, 0x0111 - .2byte 0x0110, 0x010f, 0x010e, 0x010d, 0x010c, 0x010b, 0x010a, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101 - .2byte 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100 - .2byte 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100 - .2byte 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0110 - .2byte 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120 - -gUnknown_84656D6:: @ 84656D6 - .byte 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f - .align 2 gUnknown_8465738:: .4byte 0x80000100, 0x00000c00 diff --git a/src/slot_machine.c b/src/slot_machine.c index 129d9b79a..7010bd969 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -37,8 +37,9 @@ struct SlotMachineState struct SlotMachineGfxManager { u32 field_00[3]; - u32 field_0C[3][5]; - u8 filler_4C[0x2C]; + struct Sprite * field_0C[3][5]; + u8 filler_4C[0x28]; + u32 field_70; }; EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; @@ -168,6 +169,33 @@ const struct SpritePalette gUnknown_84655C8[] = { {NULL} }; +const u16 gUnknown_8465608[] = { + 2, + 2, + 0, + 0, + 2, + 4, + 3 +}; + +const u16 gUnknown_8465616[] = { + 0x0120, 0x011f, 0x011e, 0x011d, 0x011c, 0x011b, 0x011a, 0x0119, 0x0118, 0x0117, 0x0116, 0x0115, 0x0114, 0x0113, 0x0112, 0x0111, + 0x0110, 0x010f, 0x010e, 0x010d, 0x010c, 0x010b, 0x010a, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0110, + 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120 +}; + +const u8 gUnknown_84656D6[] = { + 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f +}; + +extern const struct SpriteTemplate gUnknown_84657E4; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -1408,7 +1436,33 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager) manager->field_00[i] = 0; for (j = 0; j < 5; j++) { - manager->field_0C[i][j] = 0; + manager->field_0C[i][j] = NULL; + } + } +} + +void sub_8140CA0(void) +{ + struct Sprite * sprite; + s32 i, j; + s32 spriteId; + s32 animId; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 5; j++) + { + spriteId = CreateSprite(&gUnknown_84657E4, 80 + 40 * i, 44 + 24 * j, 2); + animId = gUnknown_8464926[i][j]; + sprite = &gSprites[spriteId]; + StartSpriteAnim(sprite, animId); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_8465608[animId]); + sprite->data[0] = i; + sprite->data[1] = j; + sprite->data[2] = j; + sprite->data[3] = 0; + sprite->oam.matrixNum = 0; + gUnknown_203F3A4->field_0C[i][j] = sprite; + gUnknown_203F3A4->field_70 = 0x07000006; } } } -- cgit v1.2.3 From bd9e6dbccf00009236f46722c7e898a055b43b7b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 23 May 2019 08:46:38 -0400 Subject: slot_machine through sub_8141020 --- asm/slot_machine.s | 363 ----------------------------------------------------- src/slot_machine.c | 129 +++++++++++++++++-- 2 files changed, 117 insertions(+), 375 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index f79f658ae..e234387a0 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,369 +5,6 @@ .text - thumb_func_start sub_8140D7C -sub_8140D7C: @ 8140D7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r3, r0, 0 - movs r2, 0 - ldr r0, _08140E34 @ =gUnknown_203F3A4 - mov r8, r0 -_08140D90: - movs r4, 0 - ldrsh r6, [r3, r4] - movs r4, 0 - ldrsh r0, [r1, r4] - lsls r0, 3 - mov r10, r0 - lsls r0, r2, 2 - adds r3, 0x2 - str r3, [sp] - adds r1, 0x2 - str r1, [sp, 0x4] - adds r1, r2, 0x1 - str r1, [sp, 0x8] - adds r0, r2 - lsls r0, 2 - adds r2, r0 - mov r9, r2 - adds r5, r0, 0 - movs r7, 0x4 -_08140DB6: - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r0, [r1] - mov r3, r10 - strh r3, [r0, 0x26] - ldr r2, _08140E38 @ =gUnknown_8464926 - mov r4, r9 - adds r0, r6, r4 - adds r0, r2 - ldrb r4, [r0] - ldr r0, [r1] - adds r1, r4, 0 - bl StartSpriteAnim - mov r1, r8 - ldr r0, [r1] - adds r0, 0xC - adds r0, r5 - ldr r0, [r0] - adds r1, r4, 0 - bl StartSpriteAnim - ldr r0, _08140E3C @ =gUnknown_8465608 - lsls r4, 1 - adds r4, r0 - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r3, [r1] - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - adds r6, 0x1 - cmp r6, 0x14 - ble _08140E10 - movs r6, 0 -_08140E10: - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _08140DB6 - ldr r3, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - cmp r2, 0x2 - ble _08140D90 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140E34: .4byte gUnknown_203F3A4 -_08140E38: .4byte gUnknown_8464926 -_08140E3C: .4byte gUnknown_8465608 - thumb_func_end sub_8140D7C - - thumb_func_start sub_8140E40 -sub_8140E40: @ 8140E40 - push {lr} - ldr r0, _08140E68 @ =0x04000006 - ldrh r0, [r0] - adds r3, r0, 0 - subs r3, 0x2B - cmp r3, 0x53 - bhi _08140E7C - ldr r0, _08140E6C @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r2, [r0, 0x70] - ldr r1, _08140E70 @ =gUnknown_8465616 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - ldr r1, _08140E74 @ =0x04000054 - ldr r0, _08140E78 @ =gUnknown_84656D6 - adds r0, r3, r0 - ldrb r0, [r0] - b _08140E8E - .align 2, 0 -_08140E68: .4byte 0x04000006 -_08140E6C: .4byte gUnknown_203F3A4 -_08140E70: .4byte gUnknown_8465616 -_08140E74: .4byte 0x04000054 -_08140E78: .4byte gUnknown_84656D6 -_08140E7C: - ldr r0, _08140E94 @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r1, [r0, 0x70] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08140E98 @ =0x04000054 - movs r0, 0 -_08140E8E: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08140E94: .4byte gUnknown_203F3A4 -_08140E98: .4byte 0x04000054 - thumb_func_end sub_8140E40 - - thumb_func_start sub_8140E9C -sub_8140E9C: @ 8140E9C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r5, 0 - ldr r0, _08140F20 @ =gUnknown_846587C - mov r10, r0 - ldr r0, _08140F24 @ =gUnknown_203F3A4 - mov r9, r0 - ldr r0, _08140F28 @ =gSprites - mov r8, r0 - movs r7, 0x85 - lsls r7, 16 - movs r6, 0xAA - lsls r6, 15 -_08140EBC: - asrs r1, r6, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - lsls r4, r5, 2 - adds r1, 0x48 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - asrs r1, r7, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - adds r1, 0x58 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 11 - adds r7, r0 - adds r6, r0 - adds r5, 0x1 - cmp r5, 0x3 - ble _08140EBC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140F20: .4byte gUnknown_846587C -_08140F24: .4byte gUnknown_203F3A4 -_08140F28: .4byte gSprites - thumb_func_end sub_8140E9C - - thumb_func_start sub_8140F2C -sub_8140F2C: @ 8140F2C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - bl GetCoins - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_8140BDC - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - movs r6, 0xFA - lsls r6, 2 - movs r7, 0 - ldr r0, _08140FC0 @ =gUnknown_203F3A4 - mov r10, r0 -_08140F54: - mov r0, r9 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - lsls r5, r7, 2 - adds r0, 0x48 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r9 - subs r1, r0 - mov r9, r1 - mov r0, r8 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - adds r0, 0x58 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r8 - subs r1, r0 - mov r8, r1 - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - adds r6, r0, 0 - adds r7, 0x1 - cmp r7, 0x3 - ble _08140F54 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140FC0: .4byte gUnknown_203F3A4 - thumb_func_end sub_8140F2C - - thumb_func_start sub_8140FC4 -sub_8140FC4: @ 8140FC4 - push {r4-r6,lr} - ldr r6, _08141014 @ =gUnknown_84658D8 - adds r0, r6, 0 - movs r1, 0x10 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r5, _08141018 @ =gUnknown_203F3A4 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r4, _0814101C @ =gSprites - adds r0, r4 - str r0, [r1, 0x68] - adds r0, r6, 0 - movs r1, 0xE0 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r4 - str r0, [r1, 0x6C] - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141014: .4byte gUnknown_84658D8 -_08141018: .4byte gUnknown_203F3A4 -_0814101C: .4byte gSprites - thumb_func_end sub_8140FC4 - - thumb_func_start sub_8141020 -sub_8141020: @ 8141020 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, _08141048 @ =gUnknown_203F3A4 -_0814102A: - ldr r0, [r6] - lsls r1, r4, 2 - adds r0, 0x68 - adds r0, r1 - ldr r0, [r0] - adds r1, r5, 0 - bl StartSpriteAnim - adds r4, 0x1 - cmp r4, 0x1 - ble _0814102A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141048: .4byte gUnknown_203F3A4 - thumb_func_end sub_8141020 - thumb_func_start sub_814104C sub_814104C: @ 814104C push {r4,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index 7010bd969..f8f67eb23 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -38,12 +38,14 @@ struct SlotMachineGfxManager { u32 field_00[3]; struct Sprite * field_0C[3][5]; - u8 filler_4C[0x28]; - u32 field_70; + struct Sprite * field_48[4]; + struct Sprite * field_58[4]; + struct Sprite * field_68[2]; + vu16 * field_70; }; EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; -EWRAM_DATA struct SlotMachineGfxManager * gUnknown_203F3A4 = NULL; +EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; void sub_813F84C(struct SlotMachineState * ptr); void sub_813F898(void); @@ -71,7 +73,7 @@ void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); void sub_8140C6C(struct SlotMachineGfxManager * manager); -void sub_8140D7C(s16 *, s16 *); +void sub_8140D7C(const s16 *, const s16 *); bool32 sub_814104C(void); void sub_8141094(void); void sub_8141148(u16 a0, u8 a1); @@ -195,6 +197,8 @@ const u8 gUnknown_84656D6[] = { }; extern const struct SpriteTemplate gUnknown_84657E4; +extern const struct SpriteTemplate gUnknown_846587C; +extern const struct SpriteTemplate gUnknown_84658D8; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { @@ -1411,19 +1415,19 @@ bool32 sub_8140C0C(void) for (i = 0; i < NELEMS(gUnknown_84655B0); i++) LoadCompressedObjectPic(&gUnknown_84655B0[i]); LoadSpritePalettes(gUnknown_84655C8); - gUnknown_203F3A4 = Alloc(sizeof(*gUnknown_203F3A4)); - if (gUnknown_203F3A4 == NULL) + sSlotMachineGfxManager = Alloc(sizeof(*sSlotMachineGfxManager)); + if (sSlotMachineGfxManager == NULL) return FALSE; - sub_8140C6C(gUnknown_203F3A4); + sub_8140C6C(sSlotMachineGfxManager); return TRUE; } void sub_8140C50(void) { - if (gUnknown_203F3A4 != NULL) + if (sSlotMachineGfxManager != NULL) { - Free(gUnknown_203F3A4); - gUnknown_203F3A4 = NULL; + Free(sSlotMachineGfxManager); + sSlotMachineGfxManager = NULL; } } @@ -1461,8 +1465,109 @@ void sub_8140CA0(void) sprite->data[2] = j; sprite->data[3] = 0; sprite->oam.matrixNum = 0; - gUnknown_203F3A4->field_0C[i][j] = sprite; - gUnknown_203F3A4->field_70 = 0x07000006; + sSlotMachineGfxManager->field_0C[i][j] = sprite; + sSlotMachineGfxManager->field_70 = (vu16 *)(OAM + 0 * sizeof(struct OamData) + offsetof(struct OamData, affineParam)); } } } + +void sub_8140D7C(const s16 * a0, const s16 * a1) +{ + s32 i, j; + s32 r6, r10; + + for (i = 0; i < 3; i++) + { + r6 = *a0; + r10 = *a1 * 8; + for (j = 0; j < 5; j++) + { + sSlotMachineGfxManager->field_0C[i][j]->pos2.y = r10; + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + sSlotMachineGfxManager->field_0C[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_8465608[gUnknown_8464926[i][r6]]); + r6++; + if (r6 >= 21) + r6 = 0; + } + a0++; + a1++; + } +} + +void sub_8140E40(void) +{ + s32 vcount = REG_VCOUNT - 0x2B; + if (vcount >= 0 && vcount < 0x54) + { + *sSlotMachineGfxManager->field_70 = gUnknown_8465616[vcount]; + REG_BLDY = gUnknown_84656D6[vcount]; + } + else + { + *sSlotMachineGfxManager->field_70 = 0x100; + REG_BLDY = 0; + } +} + +void sub_8140E9C(void) +{ + s32 i; + s32 spriteId; + + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(&gUnknown_846587C, 0x55 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_48[i] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_846587C, 0x85 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_58[i] = &gSprites[spriteId]; + } +} + +void sub_8140F2C(void) +{ + s32 coins = GetCoins(); + s32 payout = sub_8140BDC(); + s32 i; + s32 divisor = 1000; + s32 quotient; + + for (i = 0; i < 4; i++) + { + quotient = coins / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_48[i], quotient); + coins -= quotient * divisor; + quotient = payout / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_58[i], quotient); + payout -= quotient * divisor; + divisor /= 10; + } +} + +void sub_8140FC4(void) +{ + s32 spriteId; + + spriteId = CreateSprite(&gUnknown_84658D8, 0x10, 0x88, 1); + sSlotMachineGfxManager->field_68[0] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_84658D8, 0xE0, 0x88, 1); + sSlotMachineGfxManager->field_68[1] = &gSprites[spriteId]; + sSlotMachineGfxManager->field_68[1]->hFlip = TRUE; +} + +void sub_8141020(u8 a0) +{ + s32 i; + for (i = 0; i < 2; i++) + { + StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0); + } +} -- cgit v1.2.3 From dcdabbf6f2feeebece89114aa9e537a78ec14601 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 23 May 2019 12:14:43 -0400 Subject: slot_machine sprite templates --- data/slot_machine.s | 163 ----------------------------------- src/slot_machine.c | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 236 insertions(+), 166 deletions(-) diff --git a/data/slot_machine.s b/data/slot_machine.s index 25b5a6817..b6212ba71 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -3,169 +3,6 @@ .section .rodata .align 2 -gUnknown_8465738:: - .4byte 0x80000100, 0x00000c00 - -gUnknown_8465740:: - obj_image_anim_frame 0x00, 4 - obj_image_anim_end - -gUnknown_8465748:: - obj_image_anim_frame 0x10, 4 - obj_image_anim_end - -gUnknown_8465750:: - obj_image_anim_frame 0x20, 4 - obj_image_anim_end - -gUnknown_8465758:: - obj_image_anim_frame 0x30, 4 - obj_image_anim_end - -gUnknown_8465760:: - obj_image_anim_frame 0x40, 4 - obj_image_anim_end - -gUnknown_8465768:: - obj_image_anim_frame 0x50, 4 - obj_image_anim_end - -gUnknown_8465770:: - obj_image_anim_frame 0x60, 4 - obj_image_anim_end - -gUnknown_8465778:: - obj_image_anim_frame 0x20, 4 - obj_image_anim_end - -gUnknown_8465780:: - obj_image_anim_frame 0x30, 4 - obj_image_anim_end - -gUnknown_8465788:: - obj_image_anim_frame 0x40, 4 - obj_image_anim_end - -gUnknown_8465790:: - obj_image_anim_frame 0x50, 4 - obj_image_anim_end - -gUnknown_8465798:: - obj_image_anim_frame 0x60, 4 - obj_image_anim_end - -gUnknown_84657A0:: - .4byte gUnknown_8465740 - .4byte gUnknown_8465748 - .4byte gUnknown_8465750 - .4byte gUnknown_8465758 - .4byte gUnknown_8465760 - .4byte gUnknown_8465768 - .4byte gUnknown_8465770 - .4byte gUnknown_8465778 - .4byte gUnknown_8465780 - .4byte gUnknown_8465788 - .4byte gUnknown_8465790 - .4byte gUnknown_8465798 - -gUnknown_84657D0:: - obj_rot_scal_anim_frame 0x100, 0x100, 0, 1 - obj_rot_scal_anim_end - -gUnknown_84657E0:: @ unused - .4byte gUnknown_84657D0 - -gUnknown_84657E4:: @ 84657E4 - spr_template 0, 0, gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_84657FC:: - .4byte 0x00008000, 0x00000400 - -gUnknown_8465804:: - obj_image_anim_frame 0x00, 4 - obj_image_anim_end - -gUnknown_846580C:: - obj_image_anim_frame 0x02, 4 - obj_image_anim_end - -gUnknown_8465814:: - obj_image_anim_frame 0x04, 4 - obj_image_anim_end - -gUnknown_846581C:: - obj_image_anim_frame 0x06, 4 - obj_image_anim_end - -gUnknown_8465824:: - obj_image_anim_frame 0x08, 4 - obj_image_anim_end - -gUnknown_846582C:: - obj_image_anim_frame 0x0a, 4 - obj_image_anim_end - -gUnknown_8465834:: - obj_image_anim_frame 0x0c, 4 - obj_image_anim_end - -gUnknown_846583C:: - obj_image_anim_frame 0x0e, 4 - obj_image_anim_end - -gUnknown_8465844:: - obj_image_anim_frame 0x10, 4 - obj_image_anim_end - -gUnknown_846584C:: - obj_image_anim_frame 0x12, 4 - obj_image_anim_end - -gUnknown_8465854:: - .4byte gUnknown_8465804 - .4byte gUnknown_846580C - .4byte gUnknown_8465814 - .4byte gUnknown_846581C - .4byte gUnknown_8465824 - .4byte gUnknown_846582C - .4byte gUnknown_8465834 - .4byte gUnknown_846583C - .4byte gUnknown_8465844 - .4byte gUnknown_846584C - -gUnknown_846587C:: @ 846587C - spr_template 2, 6, gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_8465894:: - .4byte 0x80000000, 0x00000400 - -gUnknown_846589C:: - obj_image_anim_frame 0, 4 - obj_image_anim_end - -gUnknown_84658A4:: - obj_image_anim_frame 0, 24 - obj_image_anim_frame 16, 24 - obj_image_anim_jump 0 - -gUnknown_84658B0:: - obj_image_anim_frame 32, 28 - obj_image_anim_frame 48, 28 - obj_image_anim_jump 0 - -gUnknown_84658BC:: - obj_image_anim_frame 64, 12 - obj_image_anim_frame 80, 12 - obj_image_anim_jump 0 - -gUnknown_84658C8:: - .4byte gUnknown_846589C - .4byte gUnknown_84658A4 - .4byte gUnknown_84658B0 - .4byte gUnknown_84658BC - -gUnknown_84658D8:: @ 84658D8 - spr_template 1, 5, gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_84658F0:: @ 84658F0 .4byte sub_8141198 diff --git a/src/slot_machine.c b/src/slot_machine.c index f8f67eb23..acac324e2 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -196,9 +196,242 @@ const u8 gUnknown_84656D6[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }; -extern const struct SpriteTemplate gUnknown_84657E4; -extern const struct SpriteTemplate gUnknown_846587C; -extern const struct SpriteTemplate gUnknown_84658D8; +const struct OamData gUnknown_8465738 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_2, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AnimCmd gUnknown_8465740[] = { + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465748[] = { + ANIMCMD_FRAME(0x10, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465750[] = { + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465758[] = { + ANIMCMD_FRAME(0x30, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465760[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465768[] = { + ANIMCMD_FRAME(0x50, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465770[] = { + ANIMCMD_FRAME(0x60, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465778[] = { + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465780[] = { + ANIMCMD_FRAME(0x30, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465788[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465790[] = { + ANIMCMD_FRAME(0x50, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465798[] = { + ANIMCMD_FRAME(0x60, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_84657A0[] = { + gUnknown_8465740, + gUnknown_8465748, + gUnknown_8465750, + gUnknown_8465758, + gUnknown_8465760, + gUnknown_8465768, + gUnknown_8465770, + gUnknown_8465778, + gUnknown_8465780, + gUnknown_8465788, + gUnknown_8465790, + gUnknown_8465798 +}; + +const union AffineAnimCmd gUnknown_84657D0[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 1), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gUnknown_84657E0[] = { + gUnknown_84657D0 +}; + +const struct SpriteTemplate gUnknown_84657E4 = { + 0, 0, &gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +const struct OamData gUnknown_84657FC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_V_RECTANGLE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AnimCmd gUnknown_8465804[] = { + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846580C[] = { + ANIMCMD_FRAME(0x02, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465814[] = { + ANIMCMD_FRAME(0x04, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846581C[] = { + ANIMCMD_FRAME(0x06, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465824[] = { + ANIMCMD_FRAME(0x08, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846582C[] = { + ANIMCMD_FRAME(0x0a, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465834[] = { + ANIMCMD_FRAME(0x0c, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846583C[] = { + ANIMCMD_FRAME(0x0e, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_8465844[] = { + ANIMCMD_FRAME(0x10, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_846584C[] = { + ANIMCMD_FRAME(0x12, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_8465854[] = { + gUnknown_8465804, + gUnknown_846580C, + gUnknown_8465814, + gUnknown_846581C, + gUnknown_8465824, + gUnknown_846582C, + gUnknown_8465834, + gUnknown_846583C, + gUnknown_8465844, + gUnknown_846584C +}; + +const struct SpriteTemplate gUnknown_846587C = { + 2, 6, &gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +const struct OamData gUnknown_8465894 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AnimCmd gUnknown_846589C[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_84658A4[] = { + ANIMCMD_FRAME( 0, 24), + ANIMCMD_FRAME(16, 24), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gUnknown_84658B0[] = { + ANIMCMD_FRAME(32, 28), + ANIMCMD_FRAME(48, 28), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gUnknown_84658BC[] = { + ANIMCMD_FRAME(64, 12), + ANIMCMD_FRAME(80, 12), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_84658C8[] = { + gUnknown_846589C, + gUnknown_84658A4, + gUnknown_84658B0, + gUnknown_84658BC +}; + +const struct SpriteTemplate gUnknown_84658D8 = { + 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { -- cgit v1.2.3 From f111acf92a56bed70b15df882857d8081a092889 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 23 May 2019 17:16:32 -0400 Subject: slot_machine through sub_8141180 --- asm/slot_machine.s | 175 ---------------------------------------------------- data/slot_machine.s | 18 ------ src/slot_machine.c | 114 ++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 193 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index e234387a0..3d675083b 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,181 +5,6 @@ .text - thumb_func_start sub_814104C -sub_814104C: @ 814104C - push {r4,lr} - ldr r0, _0814108C @ =0x0000285c - bl Alloc - adds r4, r0, 0 - cmp r4, 0 - beq _08141082 - ldr r2, _08141090 @ =sub_81410CC - movs r1, 0 - adds r0, r4, 0 - adds r0, 0x1C -_08141062: - strb r1, [r0, 0x3] - subs r0, 0x4 - cmp r0, r4 - bge _08141062 - movs r0, 0 - str r0, [r4, 0x28] - adds r0, r2, 0 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - adds r2, r4, 0 - bl SetWordTaskArg -_08141082: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0814108C: .4byte 0x0000285c -_08141090: .4byte sub_81410CC - thumb_func_end sub_814104C - - thumb_func_start sub_8141094 -sub_8141094: @ 8141094 - push {r4,lr} - ldr r4, _081410C8 @ =sub_81410CC - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _081410BA - bl sub_814112C - bl Free - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_081410BA: - bl sub_8140C50 - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081410C8: .4byte sub_81410CC - thumb_func_end sub_8141094 - - thumb_func_start sub_81410CC -sub_81410CC: @ 81410CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - adds r6, r0, 0 - ldr r0, _08141114 @ =gUnknown_84658F0 - mov r8, r0 - adds r4, r6, 0x2 - adds r5, r6, 0 - movs r7, 0x7 -_081410E8: - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08141100 - ldrh r0, [r5] - lsls r0, 2 - add r0, r8 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - bl _call_via_r2 - strb r0, [r4, 0x1] -_08141100: - adds r4, 0x4 - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _081410E8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141114: .4byte gUnknown_84658F0 - thumb_func_end sub_81410CC - - thumb_func_start sub_8141118 -sub_8141118: @ 8141118 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_8141118 - - thumb_func_start sub_814112C -sub_814112C: @ 814112C - push {lr} - ldr r0, _08141144 @ =sub_81410CC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - pop {r1} - bx r1 - .align 2, 0 -_08141144: .4byte sub_81410CC - thumb_func_end sub_814112C - - thumb_func_start sub_8141148 -sub_8141148: @ 8141148 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - bl sub_814112C - adds r1, r0, 0 - lsls r5, 2 - adds r5, r1, r5 - movs r0, 0 - strh r4, [r5] - strb r0, [r5, 0x2] - ldr r0, _0814117C @ =gUnknown_84658F0 - lsls r4, 2 - adds r4, r0 - adds r0, r5, 0x2 - ldr r2, [r4] - bl _call_via_r2 - strb r0, [r5, 0x3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814117C: .4byte gUnknown_84658F0 - thumb_func_end sub_8141148 - - thumb_func_start sub_8141180 -sub_8141180: @ 8141180 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_814112C - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141180 - thumb_func_start sub_8141198 sub_8141198: @ 8141198 push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index b6212ba71..c2854d6e4 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -4,24 +4,6 @@ .section .rodata .align 2 -gUnknown_84658F0:: @ 84658F0 - .4byte sub_8141198 - .4byte sub_8141460 - .4byte sub_81414AC - .4byte sub_81414EC - .4byte sub_81414FC - .4byte sub_8141518 - .4byte sub_8141558 - .4byte sub_8141568 - .4byte sub_8141578 - .4byte sub_8141584 - .4byte sub_81415C8 - .4byte sub_8141610 - .4byte sub_8141650 - .4byte sub_8141690 - .4byte sub_81416C8 - .4byte sub_8141764 - gUnknown_8465930:: @ 8465930 .incbin "graphics/slot_machine/unk_8465930.gbapal" diff --git a/src/slot_machine.c b/src/slot_machine.c index acac324e2..1b1bff7e8 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -44,6 +44,21 @@ struct SlotMachineGfxManager vu16 * field_70; }; +struct SlotMachineReelActionTaskDataSub_0000 +{ + u16 unk0; + u8 unk2; + u8 unk3; +}; + +struct SlotMachineReelActionTaskData +{ + struct SlotMachineReelActionTaskDataSub_0000 field_0000[8]; + u8 filler_0020[8]; + u32 field_0028; + u8 filler_002C[0x2830]; +}; + EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; @@ -76,6 +91,24 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager); void sub_8140D7C(const s16 *, const s16 *); bool32 sub_814104C(void); void sub_8141094(void); +struct SlotMachineReelActionTaskData * sub_814112C(void); +void sub_81410CC(u8 taskId); +bool8 sub_8141198(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141460(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414AC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414EC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414FC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141518(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141558(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141568(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141578(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141584(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81415C8(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141610(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141650(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141690(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81416C8(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141764(u8 *, struct SlotMachineReelActionTaskData *); void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); @@ -433,6 +466,25 @@ const struct SpriteTemplate gUnknown_84658D8 = { 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; +bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineReelActionTaskData *) = { + sub_8141198, + sub_8141460, + sub_81414AC, + sub_81414EC, + sub_81414FC, + sub_8141518, + sub_8141558, + sub_8141568, + sub_8141578, + sub_8141584, + sub_81415C8, + sub_8141610, + sub_8141650, + sub_8141690, + sub_81416C8, + sub_8141764 +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -1804,3 +1856,65 @@ void sub_8141020(u8 a0) StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0); } } + +bool32 sub_814104C(void) +{ + s32 i; + + struct SlotMachineReelActionTaskData * ptr = Alloc(sizeof(struct SlotMachineReelActionTaskData)); + if (ptr == NULL) + return FALSE; + for (i = 0; i < 8; i++) + ptr->field_0000[i].unk3 = 0; + ptr->field_0028 = 0; + SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr); + return FALSE; +} + +void sub_8141094(void) +{ + if (FuncIsActiveTask(sub_81410CC)) + { + Free(sub_814112C()); + DestroyTask(FindTaskIdByFunc(sub_81410CC)); + } + sub_8140C50(); + FreeAllWindowBuffers(); +} + +void sub_81410CC(u8 taskId) +{ + struct SlotMachineReelActionTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); + s32 i; + + for (i = 0; i < 8; i++) + { + if (ptr->field_0000[i].unk3) + ptr->field_0000[i].unk3 = gUnknown_84658F0[ptr->field_0000[i].unk0](&ptr->field_0000[i].unk2, ptr); + } +} + +void sub_8141118(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +struct SlotMachineReelActionTaskData * sub_814112C(void) +{ + return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); +} + +void sub_8141148(u16 a0, u8 a1) +{ + struct SlotMachineReelActionTaskData * ptr = sub_814112C(); + ptr->field_0000[a1].unk0 = a0; + ptr->field_0000[a1].unk2 = 0; + ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); +} + +bool32 sub_8141180(u8 a0) +{ + return sub_814112C()->field_0000[a0].unk3; +} -- cgit v1.2.3 From 36fc72f25e178d53342acff66870e518ed7a144a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 May 2019 18:57:01 -0400 Subject: slot_machine nonmatching sub_8141198 --- asm/slot_machine.s | 291 ------------------------- data/slot_machine.s | 51 ----- include/new_menu_helpers.h | 1 + src/slot_machine.c | 530 ++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 504 insertions(+), 369 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 3d675083b..3240a8045 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,297 +5,6 @@ .text - thumb_func_start sub_8141198 -sub_8141198: @ 8141198 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r7, r0, 0 - mov r8, r1 - ldrb r6, [r7] - cmp r6, 0x1 - beq _081411D0 - cmp r6, 0x1 - bgt _081411B4 - cmp r6, 0 - beq _081411C2 - b _08141450 -_081411B4: - cmp r6, 0x2 - bne _081411BA - b _081413E4 -_081411BA: - cmp r6, 0x3 - bne _081411C0 - b _08141436 -_081411C0: - b _08141450 -_081411C2: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _0814142E -_081411D0: - movs r0, 0 - bl SetVBlankCallback - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r1, 0xE0 - lsls r1, 19 - movs r2, 0x80 - lsls r2, 3 - movs r0, 0 - movs r3, 0x1 - bl RequestDma3Fill - movs r1, 0xC0 - lsls r1, 19 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - ldr r1, _0814139C @ =0x0600c000 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl sub_80F6C14 - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _081413A0 @ =gUnknown_8466B10 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _081413A4 @ =gUnknown_8466B20 - bl InitWindows - ldr r1, _081413A8 @ =0x0000205c - add r1, r8 - movs r0, 0x3 - bl SetBgTilemapBuffer - movs r4, 0x20 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - bl reset_temp_tile_data_buffers - ldr r1, _081413AC @ =gUnknown_84659D0 - movs r5, 0 - str r5, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, _081413B0 @ =gUnknown_846653C - str r5, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0xC0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, _081413B4 @ =0x0000185c - add r1, r8 - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r1, _081413B8 @ =gUnknown_84661D4 - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r0, _081413BC @ =gUnknown_8465930 - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - ldr r0, _081413C0 @ =gUnknown_84664BC - movs r1, 0x50 - movs r2, 0x20 - bl LoadPalette - ldr r0, _081413C4 @ =gUnknown_84665C0 - movs r1, 0x70 - movs r2, 0x60 - bl LoadPalette - ldr r1, _081413C8 @ =0x00007fde - add r0, sp, 0xC - strh r1, [r0] - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - movs r0, 0 - movs r1, 0xA - movs r2, 0xD0 - bl LoadUserWindowBorderGfx - movs r0, 0 - movs r1, 0x1 - movs r2, 0xF0 - bl sub_814FDA0 - ldr r1, _081413CC @ =0x0000085c - add r1, r8 - movs r0, 0 - bl SetBgTilemapBuffer - str r4, [sp] - movs r0, 0x1E - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x2 - bl FillBgTilemapBufferRect_Palette0 - ldr r1, _081413D0 @ =gUnknown_8466620 - str r5, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, _081413D4 @ =gUnknown_8466998 - str r6, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl stdpal_get - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x1 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - ldr r4, _081413D8 @ =gUnknown_841B779 - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetStringWidth - movs r2, 0xEC - subs r2, r0 - add r1, sp, 0x10 - movs r0, 0xF - strb r0, [r1] - strb r6, [r1, 0x1] - movs r0, 0x2 - strb r0, [r1, 0x2] - lsls r2, 24 - lsrs r2, 24 - str r1, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r3, 0 - bl box_print - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r1, 0x83 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x50 - movs r1, 0xF8 - bl SetGpuReg - bl sub_8140C0C - bl sub_8140CA0 - bl sub_8140E9C - bl sub_8140FC4 - bl sub_8140F2C - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _081413DC @ =sub_8141118 - bl SetVBlankCallback - ldr r0, _081413E0 @ =sub_8140E40 - bl SetHBlankCallback - b _0814142E - .align 2, 0 -_0814139C: .4byte 0x0600c000 -_081413A0: .4byte gUnknown_8466B10 -_081413A4: .4byte gUnknown_8466B20 -_081413A8: .4byte 0x0000205c -_081413AC: .4byte gUnknown_84659D0 -_081413B0: .4byte gUnknown_846653C -_081413B4: .4byte 0x0000185c -_081413B8: .4byte gUnknown_84661D4 -_081413BC: .4byte gUnknown_8465930 -_081413C0: .4byte gUnknown_84664BC -_081413C4: .4byte gUnknown_84665C0 -_081413C8: .4byte 0x00007fde -_081413CC: .4byte 0x0000085c -_081413D0: .4byte gUnknown_8466620 -_081413D4: .4byte gUnknown_8466998 -_081413D8: .4byte gUnknown_841B779 -_081413DC: .4byte sub_8141118 -_081413E0: .4byte sub_8140E40 -_081413E4: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08141450 - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x1 - bl HideBg - bl sub_8141B34 - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0x3 - bl EnableInterrupts -_0814142E: - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] - b _08141450 -_08141436: - bl UpdatePaletteFade - ldr r0, _0814144C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08141450 - movs r0, 0 - b _08141452 - .align 2, 0 -_0814144C: .4byte gPaletteFade -_08141450: - movs r0, 0x1 -_08141452: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8141198 - thumb_func_start sub_8141460 sub_8141460: @ 8141460 push {r4,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index c2854d6e4..5c95ae7bf 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -2,57 +2,6 @@ .include "constants/constants.inc" .section .rodata - .align 2 - -gUnknown_8465930:: @ 8465930 - .incbin "graphics/slot_machine/unk_8465930.gbapal" - -gUnknown_8465950:: @ 8465950 - .incbin "graphics/slot_machine/unk_8465950.gbapal" - .incbin "graphics/slot_machine/unk_8465970.gbapal" - .incbin "graphics/slot_machine/unk_8465990.gbapal" - .incbin "graphics/slot_machine/unk_84659b0.gbapal" - -gUnknown_84659D0:: @ 84659D0 - .incbin "graphics/slot_machine/unk_84659d0.4bpp.lz" - -gUnknown_84661D4:: @ 84661D4 - .incbin "graphics/slot_machine/unk_84661d4.bin.lz" - -gUnknown_84664BC:: @ 84664BC - .incbin "graphics/slot_machine/unk_84664bc.gbapal" - -gUnknown_84664DC:: @ 84664DC - .incbin "graphics/slot_machine/unk_84664dc.gbapal" - .incbin "graphics/slot_machine/unk_84664fc.gbapal" - .incbin "graphics/slot_machine/unk_846651c.gbapal" - -gUnknown_846653C:: @ 846653C - .incbin "graphics/slot_machine/unk_846653c.4bpp.lz" - -gUnknown_84665C0:: @ 84665C0 - .incbin "graphics/slot_machine/unk_84665c0.gbapal" - .incbin "graphics/slot_machine/unk_84665e0.gbapal" - .incbin "graphics/slot_machine/unk_8466600.gbapal" - -gUnknown_8466620:: @ 8466620 - .incbin "graphics/slot_machine/unk_8466620.4bpp.lz" - -gUnknown_8466998:: @ 8466998 - .incbin "graphics/slot_machine/unk_8466998.bin.lz" - - .align 2 @ bg templates -gUnknown_8466B10:: @ 8466B10 - .4byte 0x000001d0 - .4byte 0x000031ff - .4byte 0x000021ea - .4byte 0x000001c5 - -gUnknown_8466B20:: @ 8466B20 - window_template 0x00, 0x05, 0x0f, 0x14, 0x04, 0x0f, 0x004f - window_template 0x00, 0x00, 0x00, 0x1e, 0x02, 0x0e, 0x0013 - window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000 - gUnknown_8466B38:: .2byte 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218 .2byte 0x0219, 0x0237, 0x0238, 0x0239 diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index b3daf43c6..8fb3bba78 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -32,5 +32,6 @@ u16 sub_80F796C(void); void sub_80F6B08(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void * gfx, u32 size, u16 a3, u8 a4); void ClearStdWindowAndFrame(u8 taskId, bool8 copyNow); +void sub_80F6C14(void); #endif // GUARD_NEW_MENU_HELPERS_H diff --git a/src/slot_machine.c b/src/slot_machine.c index 1b1bff7e8..bf0cb8020 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1,4 +1,7 @@ #include "global.h" +#include "gpu_regs.h" +#include "dma3.h" +#include "bg.h" #include "palette.h" #include "decompress.h" #include "task.h" @@ -10,9 +13,13 @@ #include "overworld.h" #include "slot_machine.h" #include "menu.h" +#include "new_menu_helpers.h" +#include "text_window.h" #include "random.h" #include "constants/songs.h" +extern const u8 gUnknown_841B779[]; + struct SlotMachineState { MainCallback savedCallback; @@ -44,20 +51,24 @@ struct SlotMachineGfxManager vu16 * field_70; }; -struct SlotMachineReelActionTaskDataSub_0000 +struct SlotMachineSetupTaskDataSub_0000 { u16 unk0; u8 unk2; u8 unk3; }; -struct SlotMachineReelActionTaskData +struct SlotMachineSetupTaskData { - struct SlotMachineReelActionTaskDataSub_0000 field_0000[8]; + struct SlotMachineSetupTaskDataSub_0000 field_0000[8]; u8 filler_0020[8]; u32 field_0028; - u8 filler_002C[0x2830]; -}; + u8 filler_002C[0x830]; + u8 field_085C[0x800]; + u8 field_105C[0x800]; + u8 field_185C[0x800]; + u8 field_205C[0x800]; +}; // size: 285C EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; @@ -91,26 +102,27 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager); void sub_8140D7C(const s16 *, const s16 *); bool32 sub_814104C(void); void sub_8141094(void); -struct SlotMachineReelActionTaskData * sub_814112C(void); +struct SlotMachineSetupTaskData * sub_814112C(void); void sub_81410CC(u8 taskId); -bool8 sub_8141198(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141460(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_81414AC(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_81414EC(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_81414FC(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141518(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141558(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141568(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141578(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141584(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_81415C8(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141610(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141650(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141690(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_81416C8(u8 *, struct SlotMachineReelActionTaskData *); -bool8 sub_8141764(u8 *, struct SlotMachineReelActionTaskData *); void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); +bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_81414EC(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_81414FC(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141518(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141558(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141568(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141578(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141584(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_81415C8(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141610(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); +bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); +void sub_8141B34(void); void sub_8141C30(u8, u8); const u8 gUnknown_8464890[][2] = { @@ -466,7 +478,7 @@ const struct SpriteTemplate gUnknown_84658D8 = { 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineReelActionTaskData *) = { +bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineSetupTaskData *) = { sub_8141198, sub_8141460, sub_81414AC, @@ -485,6 +497,81 @@ bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineReelActionTaskData *) sub_8141764 }; +const u16 gUnknown_8465930[] = INCBIN_U16("graphics/slot_machine/unk_8465930.gbapal"); +const u16 gUnknown_8465950[] = INCBIN_U16("graphics/slot_machine/unk_8465950.gbapal"); +const u16 gUnknown_8465970[] = INCBIN_U16("graphics/slot_machine/unk_8465970.gbapal"); +const u16 gUnknown_8465990[] = INCBIN_U16("graphics/slot_machine/unk_8465990.gbapal"); +const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gbapal"); +const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz"); +const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz"); +const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal"); +const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal"); +const u16 gUnknown_84664FC[] = INCBIN_U16("graphics/slot_machine/unk_84664fc.gbapal"); +const u16 gUnknown_846651C[] = INCBIN_U16("graphics/slot_machine/unk_846651c.gbapal"); +const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz"); +const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal"); +const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal"); +const u16 gUnknown_8466600[] = INCBIN_U16("graphics/slot_machine/unk_8466600.gbapal"); +const u32 gUnknown_8466620[] = INCBIN_U32("graphics/slot_machine/unk_8466620.4bpp.lz"); +const u32 gUnknown_8466998[] = INCBIN_U32("graphics/slot_machine/unk_8466998.bin.lz"); + +const struct BgTemplate gUnknown_8466B10[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_8466B20[] = { + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 15, + .width = 20, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x04f + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0x0e, + .baseBlock = 0x013 + }, + DUMMY_WIN_TEMPLATE +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -1861,7 +1948,7 @@ bool32 sub_814104C(void) { s32 i; - struct SlotMachineReelActionTaskData * ptr = Alloc(sizeof(struct SlotMachineReelActionTaskData)); + struct SlotMachineSetupTaskData * ptr = Alloc(sizeof(struct SlotMachineSetupTaskData)); if (ptr == NULL) return FALSE; for (i = 0; i < 8; i++) @@ -1884,7 +1971,7 @@ void sub_8141094(void) void sub_81410CC(u8 taskId) { - struct SlotMachineReelActionTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); + struct SlotMachineSetupTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); s32 i; for (i = 0; i < 8; i++) @@ -1901,14 +1988,14 @@ void sub_8141118(void) ProcessSpriteCopyRequests(); } -struct SlotMachineReelActionTaskData * sub_814112C(void) +struct SlotMachineSetupTaskData * sub_814112C(void) { return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); } void sub_8141148(u16 a0, u8 a1) { - struct SlotMachineReelActionTaskData * ptr = sub_814112C(); + struct SlotMachineSetupTaskData * ptr = sub_814112C(); ptr->field_0000[a1].unk0 = a0; ptr->field_0000[a1].unk2 = 0; ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); @@ -1918,3 +2005,392 @@ bool32 sub_8141180(u8 a0) { return sub_814112C()->field_0000[a0].unk3; } + +#ifdef NONMATCHING +bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + u16 pal; + struct TextColor textColor; + u32 x; + + switch (*state) + { + case 0: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + (*state)++; + break; + case 1: + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + RequestDma3Fill(0, (void *)OAM, OAM_SIZE, 1); + RequestDma3Fill(0, (void *)VRAM, 0x20, 1); + RequestDma3Fill(0, (void *)(VRAM + 0xC000), 0x20, 1); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + sub_80F6C14(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8466B10, NELEMS(gUnknown_8466B10)); + InitWindows(gUnknown_8466B20); + + SetBgTilemapBuffer(3, ptr->field_205C); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(3); + + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(2, gUnknown_84659D0, 0, 0x00, 0); + decompress_and_copy_tile_data_to_vram(2, gUnknown_846653C, 0, 0xC0, 0); + SetBgTilemapBuffer(2, ptr->field_185C); + CopyToBgTilemapBuffer(2, gUnknown_84661D4, 0, 0x00); + CopyBgTilemapBufferToVram(2); + LoadPalette(gUnknown_8465930, 0x00, 0xA0); + LoadPalette(gUnknown_84664BC, 0x50, 0x20); + LoadPalette(gUnknown_84665C0, 0x70, 0x60); + pal = RGB(30, 30, 31); + LoadPalette(&pal, 0x00, 0x02); + LoadUserWindowBorderGfx(0, 0x00A, 0xD0); + sub_814FDA0(0, 0x001, 0xF0); + + SetBgTilemapBuffer(0, ptr->field_085C); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 2, 32, 30); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8466620, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8466998, 0, 0, 1); + CopyBgTilemapBufferToVram(1); + + LoadPalette(stdpal_get(2), 0xE0, 0x20); + FillWindowPixelBuffer(1, 0xFF); + PutWindowTilemap(1); + + x = 0xEC - GetStringWidth(0, gUnknown_841B779, 0); + textColor.fgColor = 15; + textColor.bgColor = 1; + textColor.shadowColor = 2; + box_print(1, 0, x, 0, &textColor, 0, gUnknown_841B779); + CopyBgTilemapBufferToVram(0); + + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | 0x20 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN); + sub_8140C0C(); + sub_8140CA0(); + sub_8140E9C(); + sub_8140FC4(); + sub_8140F2C(); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + SetVBlankCallback(sub_8141118); + SetHBlankCallback(sub_8140E40); + (*state)++; + break; + case 2: + if (!free_temp_tile_data_buffers_if_possible()) + { + ShowBg(0); + ShowBg(3); + ShowBg(2); + HideBg(1); + sub_8141B34(); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + (*state)++; + } + break; + case 3: + UpdatePaletteFade(); + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} +#else +NAKED +bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x14\n" + "\tadds r7, r0, 0\n" + "\tmov r8, r1\n" + "\tldrb r6, [r7]\n" + "\tcmp r6, 0x1\n" + "\tbeq _081411D0\n" + "\tcmp r6, 0x1\n" + "\tbgt _081411B4\n" + "\tcmp r6, 0\n" + "\tbeq _081411C2\n" + "\tb _08141450\n" + "_081411B4:\n" + "\tcmp r6, 0x2\n" + "\tbne _081411BA\n" + "\tb _081413E4\n" + "_081411BA:\n" + "\tcmp r6, 0x3\n" + "\tbne _081411C0\n" + "\tb _08141436\n" + "_081411C0:\n" + "\tb _08141450\n" + "_081411C2:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tb _0814142E\n" + "_081411D0:\n" + "\tmovs r0, 0\n" + "\tbl SetVBlankCallback\n" + "\tbl ResetSpriteData\n" + "\tbl FreeAllSpritePalettes\n" + "\tmovs r1, 0xE0\n" + "\tlsls r1, 19\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 3\n" + "\tmovs r0, 0\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tmovs r1, 0xC0\n" + "\tlsls r1, 19\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x20\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tldr r1, _0814139C @ =0x0600c000\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x20\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tbl sub_80F6C14\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _081413A0 @ =gUnknown_8466B10\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _081413A4 @ =gUnknown_8466B20\n" + "\tbl InitWindows\n" + "\tldr r1, _081413A8 @ =0x0000205c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r4, 0x20\n" + "\tstr r4, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r0, 0x3\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl FillBgTilemapBufferRect_Palette0\n" + "\tmovs r0, 0x3\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tbl reset_temp_tile_data_buffers\n" + "\tldr r1, _081413AC @ =gUnknown_84659D0\n" + "\tmovs r5, 0\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl decompress_and_copy_tile_data_to_vram\n" + "\tldr r1, _081413B0 @ =gUnknown_846653C\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0xC0\n" + "\tbl decompress_and_copy_tile_data_to_vram\n" + "\tldr r1, _081413B4 @ =0x0000185c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r1, _081413B8 @ =gUnknown_84661D4\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl CopyToBgTilemapBuffer\n" + "\tmovs r0, 0x2\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tldr r0, _081413BC @ =gUnknown_8465930\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0xA0\n" + "\tbl LoadPalette\n" + "\tldr r0, _081413C0 @ =gUnknown_84664BC\n" + "\tmovs r1, 0x50\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tldr r0, _081413C4 @ =gUnknown_84665C0\n" + "\tmovs r1, 0x70\n" + "\tmovs r2, 0x60\n" + "\tbl LoadPalette\n" + "\tldr r1, _081413C8 @ =0x00007fde\n" + "\tadd r0, sp, 0xC\n" + "\tstrh r1, [r0]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x2\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0xA\n" + "\tmovs r2, 0xD0\n" + "\tbl LoadUserWindowBorderGfx\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0xF0\n" + "\tbl sub_814FDA0\n" + "\tldr r1, _081413CC @ =0x0000085c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0\n" + "\tbl SetBgTilemapBuffer\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x1E\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x2\n" + "\tbl FillBgTilemapBufferRect_Palette0\n" + "\tldr r1, _081413D0 @ =gUnknown_8466620\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl decompress_and_copy_tile_data_to_vram\n" + "\tldr r1, _081413D4 @ =gUnknown_8466998\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl decompress_and_copy_tile_data_to_vram\n" + "\tmovs r0, 0x1\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tmovs r0, 0x2\n" + "\tbl stdpal_get\n" + "\tmovs r1, 0xE0\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0xFF\n" + "\tbl FillWindowPixelBuffer\n" + "\tmovs r0, 0x1\n" + "\tbl PutWindowTilemap\n" + "\tldr r4, _081413D8 @ =gUnknown_841B779\n" + "\tmovs r0, 0\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tmovs r2, 0xEC\n" + "\tsubs r2, r0\n" + "\tadd r1, sp, 0x10\n" + "\tmovs r0, 0xF\n" + "\tstrb r0, [r1]\n" + "\tstrb r6, [r1, 0x1]\n" + "\tmovs r0, 0x2\n" + "\tstrb r0, [r1, 0x2]\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tstr r1, [sp]\n" + "\tstr r5, [sp, 0x4]\n" + "\tstr r4, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl box_print\n" + "\tmovs r0, 0\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tmovs r1, 0x83\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuRegBits\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0xF8\n" + "\tbl SetGpuReg\n" + "\tbl sub_8140C0C\n" + "\tbl sub_8140CA0\n" + "\tbl sub_8140E9C\n" + "\tbl sub_8140FC4\n" + "\tbl sub_8140F2C\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tldr r0, _081413DC @ =sub_8141118\n" + "\tbl SetVBlankCallback\n" + "\tldr r0, _081413E0 @ =sub_8140E40\n" + "\tbl SetHBlankCallback\n" + "\tb _0814142E\n" + "\t.align 2, 0\n" + "_0814139C: .4byte 0x0600c000\n" + "_081413A0: .4byte gUnknown_8466B10\n" + "_081413A4: .4byte gUnknown_8466B20\n" + "_081413A8: .4byte 0x0000205c\n" + "_081413AC: .4byte gUnknown_84659D0\n" + "_081413B0: .4byte gUnknown_846653C\n" + "_081413B4: .4byte 0x0000185c\n" + "_081413B8: .4byte gUnknown_84661D4\n" + "_081413BC: .4byte gUnknown_8465930\n" + "_081413C0: .4byte gUnknown_84664BC\n" + "_081413C4: .4byte gUnknown_84665C0\n" + "_081413C8: .4byte 0x00007fde\n" + "_081413CC: .4byte 0x0000085c\n" + "_081413D0: .4byte gUnknown_8466620\n" + "_081413D4: .4byte gUnknown_8466998\n" + "_081413D8: .4byte gUnknown_841B779\n" + "_081413DC: .4byte sub_8141118\n" + "_081413E0: .4byte sub_8140E40\n" + "_081413E4:\n" + "\tbl free_temp_tile_data_buffers_if_possible\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0\n" + "\tbne _08141450\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl HideBg\n" + "\tbl sub_8141B34\n" + "\tmovs r4, 0x1\n" + "\tnegs r4, r4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tstr r5, [sp]\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tmovs r0, 0x3\n" + "\tbl EnableInterrupts\n" + "_0814142E:\n" + "\tldrb r0, [r7]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r7]\n" + "\tb _08141450\n" + "_08141436:\n" + "\tbl UpdatePaletteFade\n" + "\tldr r0, _0814144C @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _08141450\n" + "\tmovs r0, 0\n" + "\tb _08141452\n" + "\t.align 2, 0\n" + "_0814144C: .4byte gPaletteFade\n" + "_08141450:\n" + "\tmovs r0, 0x1\n" + "_08141452:\n" + "\tadd sp, 0x14\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif //NONMATCHING -- cgit v1.2.3 From c37b93e8a6973e0f2cecbbc3eef628a1709b298a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 26 May 2019 11:34:02 -0400 Subject: slot_machine through sub_8141764 --- asm/slot_machine.s | 498 ----------------------------------------------------- src/slot_machine.c | 245 +++++++++++++++++++++++++- 2 files changed, 244 insertions(+), 499 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 3240a8045..5dbf01acc 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,504 +5,6 @@ .text - thumb_func_start sub_8141460 -sub_8141460: @ 8141460 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141472 - cmp r0, 0x1 - beq _0814148A - b _081414A0 -_08141472: - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414A0 -_0814148A: - ldr r0, _0814149C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081414A0 - movs r0, 0 - b _081414A2 - .align 2, 0 -_0814149C: .4byte gPaletteFade -_081414A0: - movs r0, 0x1 -_081414A2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141460 - - thumb_func_start sub_81414AC -sub_81414AC: @ 81414AC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081414BC - cmp r0, 0x1 - beq _081414D4 - b _081414E2 -_081414BC: - movs r0, 0x2 - bl GetBgTilemapBuffer - bl sub_8141834 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414E2 -_081414D4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081414E2 - movs r0, 0 - b _081414E4 -_081414E2: - movs r0, 0x1 -_081414E4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81414AC - - thumb_func_start sub_81414EC -sub_81414EC: @ 81414EC - push {lr} - movs r0, 0x1 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_81414EC - - thumb_func_start sub_81414FC -sub_81414FC: @ 81414FC - push {lr} - movs r0, 0x2 - bl sub_8141020 - ldr r0, _08141514 @ =sub_814191C - movs r1, 0x3 - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08141514: .4byte sub_814191C - thumb_func_end sub_81414FC - - thumb_func_start sub_8141518 -sub_8141518: @ 8141518 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141528 - cmp r0, 0x1 - beq _08141534 - b _08141550 -_08141528: - bl sub_8141AB0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141550 -_08141534: - ldr r0, _0814154C @ =sub_814191C - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08141550 - movs r0, 0 - bl sub_8141020 - movs r0, 0 - b _08141552 - .align 2, 0 -_0814154C: .4byte sub_814191C -_08141550: - movs r0, 0x1 -_08141552: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141518 - - thumb_func_start sub_8141558 -sub_8141558: @ 8141558 - push {lr} - movs r0, 0x3 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141558 - - thumb_func_start sub_8141568 -sub_8141568: @ 8141568 - push {lr} - movs r0, 0 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141568 - - thumb_func_start sub_8141578 -sub_8141578: @ 8141578 - push {lr} - bl sub_8140F2C - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141578 - - thumb_func_start sub_8141584 -sub_8141584: @ 8141584 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141594 - cmp r0, 0x1 - beq _081415B0 - b _081415BE -_08141594: - ldr r0, _081415AC @ =gUnknown_841B747 - bl sub_81417E4 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081415BE - .align 2, 0 -_081415AC: .4byte gUnknown_841B747 -_081415B0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081415BE - movs r0, 0 - b _081415C0 -_081415BE: - movs r0, 0x1 -_081415C0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141584 - - thumb_func_start sub_81415C8 -sub_81415C8: @ 81415C8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081415D8 - cmp r0, 0x1 - beq _081415F8 - b _08141606 -_081415D8: - ldr r0, _081415F4 @ =gUnknown_841B76B - bl sub_81417E4 - movs r0, 0 - bl sub_8141AD8 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141606 - .align 2, 0 -_081415F4: .4byte gUnknown_841B76B -_081415F8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141606 - movs r0, 0 - b _08141608 -_08141606: - movs r0, 0x1 -_08141608: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81415C8 - - thumb_func_start sub_8141610 -sub_8141610: @ 8141610 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141620 - cmp r0, 0x1 - beq _08141638 - b _08141646 -_08141620: - bl sub_8141828 - bl sub_8141B18 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141646 -_08141638: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141646 - movs r0, 0 - b _08141648 -_08141646: - movs r0, 0x1 -_08141648: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141610 - - thumb_func_start sub_8141650 -sub_8141650: @ 8141650 - push {r4,lr} - adds r4, r0, 0 - ldrb r2, [r4] - cmp r2, 0 - beq _08141660 - cmp r2, 0x1 - beq _08141678 - b _08141686 -_08141660: - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - bl sub_8141BA0 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141686 -_08141678: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141686 - movs r0, 0 - b _08141688 -_08141686: - movs r0, 0x1 -_08141688: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141650 - - thumb_func_start sub_8141690 -sub_8141690: @ 8141690 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081416A0 - cmp r0, 0x1 - beq _081416B2 - b _081416C0 -_081416A0: - bl sub_8141BE4 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081416C0 -_081416B2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081416C0 - movs r0, 0 - b _081416C2 -_081416C0: - movs r0, 0x1 -_081416C2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141690 - - thumb_func_start sub_81416C8 -sub_81416C8: @ 81416C8 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldrb r4, [r6] - cmp r4, 0x1 - beq _08141724 - cmp r4, 0x1 - bgt _081416DE - cmp r4, 0 - beq _081416E4 - b _0814175A -_081416DE: - cmp r4, 0x2 - beq _08141756 - b _0814175A -_081416E4: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3D - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0xA0 - bl SetGpuReg - movs r0, 0x1 - bl ShowBg - movs r0, 0x6 - bl PlaySE - str r4, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _0814175A -_08141724: - ldr r0, [r5, 0x24] - adds r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0xFF - ble _0814173A - movs r0, 0x80 - lsls r0, 1 - str r0, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0814173A: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _0814175A -_08141756: - movs r0, 0 - b _0814175C -_0814175A: - movs r0, 0x1 -_0814175C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81416C8 - - thumb_func_start sub_8141764 -sub_8141764: @ 8141764 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08141790 - cmp r0, 0x1 - bgt _0814177A - cmp r0, 0 - beq _08141784 - b _081417DC -_0814177A: - cmp r0, 0x2 - beq _081417C0 - cmp r0, 0x3 - beq _081417D8 - b _081417DC -_08141784: - movs r0, 0x6 - bl PlaySE - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08141790: - ldr r0, [r5, 0x24] - subs r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0 - bgt _081417A4 - movs r0, 0 - str r0, [r5, 0x24] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_081417A4: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _081417DC -_081417C0: - movs r0, 0x1 - bl HideBg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081417DC -_081417D8: - movs r0, 0 - b _081417DE -_081417DC: - movs r0, 0x1 -_081417DE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8141764 - thumb_func_start sub_81417E4 sub_81417E4: @ 81417E4 push {r4,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index bf0cb8020..93714311c 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -18,6 +18,8 @@ #include "random.h" #include "constants/songs.h" +extern const u8 gUnknown_841B747[]; +extern const u8 gUnknown_841B76B[]; extern const u8 gUnknown_841B779[]; struct SlotMachineState @@ -61,7 +63,9 @@ struct SlotMachineSetupTaskDataSub_0000 struct SlotMachineSetupTaskData { struct SlotMachineSetupTaskDataSub_0000 field_0000[8]; - u8 filler_0020[8]; + u8 field_0020; + // align 2 + s32 field_0024; u32 field_0028; u8 filler_002C[0x830]; u8 field_085C[0x800]; @@ -122,7 +126,16 @@ bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); +void sub_81417E4(const u8 * str); +void sub_8141828(void); +void sub_8141834(u16 * bgTilemapBuffer); +void sub_814191C(u8 taskId); +void sub_8141AB0(void); +void sub_8141AD8(u8 a0); +void sub_8141B18(void); void sub_8141B34(void); +void sub_8141BA0(u8 a0); +void sub_8141BE4(void); void sub_8141C30(u8, u8); const u8 gUnknown_8464890[][2] = { @@ -2394,3 +2407,233 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) "\tbx r1"); } #endif //NONMATCHING + +bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, 0); + (*state)++; + break; + case 1: + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141834(GetBgTilemapBuffer(2)); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81414EC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(1); + return FALSE; +} + +bool8 sub_81414FC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(2); + CreateTask(sub_814191C, 3); + return FALSE; +} + +bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141AB0(); + (*state)++; + break; + case 1: + if (!FuncIsActiveTask(sub_814191C)) + { + sub_8141020(0); + return FALSE; + } + break; + } + return TRUE; +} + +bool8 sub_8141558(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(3); + return FALSE; +} + +bool8 sub_8141568(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(FALSE); + return FALSE; +} + +bool8 sub_8141578(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8140F2C(); + return FALSE; +} + +bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gUnknown_841B747); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gUnknown_841B76B); + sub_8141AD8(0); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141828(); + sub_8141B18(); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BA0(ptr->field_0020); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BE4(); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x3D); + SetGpuReg(REG_OFFSET_WIN0H, 0x00); + SetGpuReg(REG_OFFSET_WIN1H, 0xA0); + ShowBg(1); + PlaySE(SE_WIN_OPEN); + ptr->field_0024 = 0; + (*state)++; + break; + case 1: + ptr->field_0024 += 16; + if (ptr->field_0024 >= 256) + { + ptr->field_0024 = 256; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + return FALSE; + } + return TRUE; +} + +bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + PlaySE(SE_WIN_OPEN); + (*state)++; + // fallthrough + case 1: + ptr->field_0024 -= 16; + if (ptr->field_0024 <= 0) + { + ptr->field_0024 = 0; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + HideBg(1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + (*state)++; + break; + case 3: + return FALSE; + } + return TRUE; +} -- cgit v1.2.3 From ef4c86fbfdd18b78700f61b629907a85579197c0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 29 Jul 2019 20:50:06 -0400 Subject: slot_machine: through sub_81418C4 --- asm/slot_machine.s | 161 ---------------------------------------------------- data/slot_machine.s | 26 --------- include/menu.h | 1 + src/slot_machine.c | 85 +++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 187 deletions(-) diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 5dbf01acc..028457d86 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,167 +5,6 @@ .text - thumb_func_start sub_81417E4 -sub_81417E4: @ 81417E4 - push {r4,lr} - sub sp, 0x14 - adds r4, r0, 0 - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - movs r2, 0xF - bl DrawTextBorderOuter - movs r1, 0x2 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r0, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl sub_812E62C - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81417E4 - - thumb_func_start sub_8141828 -sub_8141828: @ 8141828 - push {lr} - movs r0, 0 - bl rbox_fill_rectangle - pop {r0} - bx r0 - thumb_func_end sub_8141828 - - thumb_func_start sub_8141834 -sub_8141834: @ 8141834 - push {r4,lr} - adds r4, r0, 0 - bl sub_8140BEC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081418B4 - cmp r0, 0x1 - bgt _0814184E - cmp r0, 0 - beq _08141858 - b _081418BE -_0814184E: - cmp r0, 0x2 - beq _081418A0 - cmp r0, 0x3 - beq _0814188C - b _081418BE -_08141858: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x3 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x4 - movs r2, 0x4 - bl sub_81418C4 - b _081418BE -_0814188C: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x5 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x4 - movs r2, 0x5 - bl sub_81418C4 -_081418A0: - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x5 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x3 - movs r2, 0x5 - bl sub_81418C4 -_081418B4: - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0x5 - bl sub_81418C4 -_081418BE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8141834 - - thumb_func_start sub_81418C4 -sub_81418C4: @ 81418C4 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 16 - ldr r3, _08141914 @ =gUnknown_8466C0C - lsrs r1, 13 - adds r0, r1, r3 - ldr r4, [r0] - lsls r2, 28 - lsrs r7, r2, 16 - movs r5, 0 - adds r3, 0x4 - adds r1, r3 - ldr r1, [r1] - cmp r5, r1 - bcs _0814190C - ldr r0, _08141918 @ =0x00000fff - mov r12, r0 - adds r3, r1, 0 -_081418E8: - ldrh r1, [r4] - lsls r1, 1 - adds r1, r6 - ldrh r2, [r1] - mov r0, r12 - ands r0, r2 - strh r0, [r1] - ldrh r1, [r4] - lsls r1, 1 - adds r1, r6 - ldrh r2, [r1] - adds r0, r7, 0 - orrs r0, r2 - strh r0, [r1] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, r3 - bcc _081418E8 -_0814190C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141914: .4byte gUnknown_8466C0C -_08141918: .4byte 0x00000fff - thumb_func_end sub_81418C4 - thumb_func_start sub_814191C sub_814191C: @ 814191C push {r4,r5,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 5c95ae7bf..1ff90742f 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -2,34 +2,8 @@ .include "constants/constants.inc" .section .rodata -gUnknown_8466B38:: - .2byte 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218 - .2byte 0x0219, 0x0237, 0x0238, 0x0239 - -gUnknown_8466B60:: - .2byte 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119 - .2byte 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139 - -gUnknown_8466B8C:: - .2byte 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179 - .2byte 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199 - -gUnknown_8466BB8:: - .2byte 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9 - .2byte 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9 - -gUnknown_8466BE4:: - .2byte 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8 - .2byte 0x00b9, 0x00d7, 0x00d8, 0x00d9 .align 2 -gUnknown_8466C0C:: @ 8466C0C - .4byte gUnknown_8466B38, 0x14 - .4byte gUnknown_8466B60, 0x16 - .4byte gUnknown_8466B8C, 0x16 - .4byte gUnknown_8466BB8, 0x16 - .4byte gUnknown_8466BE4, 0x14 - gUnknown_8466C34:: @ 8466C34 .byte 0x02, 0x04 diff --git a/include/menu.h b/include/menu.h index 40c7ffc12..172944064 100644 --- a/include/menu.h +++ b/include/menu.h @@ -50,5 +50,6 @@ void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_st bool8 IsBlendTaskActive(void); void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); void sub_810F260(u8 windowId, u8 a1); +void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing); #endif // GUARD_MENU_H diff --git a/src/slot_machine.c b/src/slot_machine.c index 93714311c..bc3baf621 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -74,6 +74,12 @@ struct SlotMachineSetupTaskData u8 field_205C[0x800]; }; // size: 285C +struct UnkStruct_8466C0C +{ + const u16 * tiles; + u32 count; +}; + EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; @@ -129,6 +135,7 @@ bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); void sub_81417E4(const u8 * str); void sub_8141828(void); void sub_8141834(u16 * bgTilemapBuffer); +void sub_81418C4(u16 * bgTilemapBuffer, u16 a0, u16 a1); void sub_814191C(u8 taskId); void sub_8141AB0(void); void sub_8141AD8(u8 a0); @@ -585,6 +592,34 @@ const struct WindowTemplate gUnknown_8466B20[] = { DUMMY_WIN_TEMPLATE }; +const u16 gUnknown_8466B38[] = { + 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218, 0x0219, 0x0237, 0x0238, 0x0239 +}; + +const u16 gUnknown_8466B60[] = { + 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119, 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139 +}; + +const u16 gUnknown_8466B8C[] = { + 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179, 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199 +}; + +const u16 gUnknown_8466BB8[] = { + 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9, 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9 +}; + +const u16 gUnknown_8466BE4[] = { + 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8, 0x00b9, 0x00d7, 0x00d8, 0x00d9 +}; + +const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { + { gUnknown_8466B38, NELEMS(gUnknown_8466B38) }, + { gUnknown_8466B60, NELEMS(gUnknown_8466B60) }, + { gUnknown_8466B8C, NELEMS(gUnknown_8466B8C) }, + { gUnknown_8466BB8, NELEMS(gUnknown_8466BB8) }, + { gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) } +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -2637,3 +2672,53 @@ bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) } return TRUE; } + +void sub_81417E4(const u8 * str) +{ + FillWindowPixelBuffer(0, 0x11); + PutWindowTilemap(0); + DrawTextBorderOuter(0, 0x001, 15); + sub_812E62C(0, 2, str, 1, 2, -1, NULL, 1, 2); +} + +void sub_8141828(void) +{ + rbox_fill_rectangle(0); +} + +void sub_8141834(u16 * bgTilemapBuffer) +{ + switch (sub_8140BEC()) + { + case 0: + sub_81418C4(bgTilemapBuffer, 0, 4); + sub_81418C4(bgTilemapBuffer, 1, 4); + sub_81418C4(bgTilemapBuffer, 2, 4); + sub_81418C4(bgTilemapBuffer, 3, 4); + sub_81418C4(bgTilemapBuffer, 4, 4); + break; + case 3: + sub_81418C4(bgTilemapBuffer, 0, 5); + sub_81418C4(bgTilemapBuffer, 4, 5); + case 2: + sub_81418C4(bgTilemapBuffer, 1, 5); + sub_81418C4(bgTilemapBuffer, 3, 5); + case 1: + sub_81418C4(bgTilemapBuffer, 2, 5); + break; + } +} + +void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) +{ + s32 i; + const u16 * tileIdxs = gUnknown_8466C0C[whichLine].tiles; + u16 palMask = (paletteNum & 0xF) << 12; + + for (i = 0; i < gUnknown_8466C0C[whichLine].count; i++) + { + bgTilemapBuffer[*tileIdxs] &= 0x0FFF; + bgTilemapBuffer[*tileIdxs] |= palMask; + tileIdxs++; + } +} -- cgit v1.2.3 From 8384ed7a25f2fed140786b90a9893f47f8379f9a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 29 Jul 2019 21:52:37 -0400 Subject: Finish slot_machine --- asm/slot_machine.s | 436 ---------------------------------------------------- data/slot_machine.s | 15 -- ld_script.txt | 2 - src/slot_machine.c | 173 ++++++++++++++++++++- 4 files changed, 169 insertions(+), 457 deletions(-) delete mode 100644 asm/slot_machine.s delete mode 100644 data/slot_machine.s diff --git a/asm/slot_machine.s b/asm/slot_machine.s deleted file mode 100644 index e5aa4ff05..000000000 --- a/asm/slot_machine.s +++ /dev/null @@ -1,436 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_814191C -sub_814191C: @ 814191C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08141940 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08141984 - cmp r0, 0x1 - bgt _08141944 - cmp r0, 0 - beq _08141952 - b _08141AA8 - .align 2, 0 -_08141940: .4byte gTasks+0x8 -_08141944: - cmp r0, 0x2 - bne _0814194A - b _08141A58 -_0814194A: - cmp r0, 0x3 - bne _08141950 - b _08141A98 -_08141950: - b _08141AA8 -_08141952: - ldr r0, _08141980 @ =gUnknown_84664BC - movs r1, 0x60 - movs r2, 0x20 - bl LoadPalette - movs r4, 0 -_0814195E: - adds r0, r4, 0 - bl sub_8140BF8 - cmp r0, 0 - beq _08141978 - movs r0, 0x2 - bl GetBgTilemapBuffer - lsls r1, r4, 16 - lsrs r1, 16 - movs r2, 0x6 - bl sub_81418C4 -_08141978: - adds r4, 0x1 - cmp r4, 0x4 - ble _0814195E - b _08141A84 - .align 2, 0 -_08141980: .4byte gUnknown_84664BC -_08141984: - ldrh r1, [r5, 0x2] - movs r2, 0x2 - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _081419C4 - ldr r1, _081419BC @ =gSineTable - movs r2, 0x4 - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 23 - lsls r0, 16 - lsrs r0, 11 - ldr r1, _081419C0 @ =gUnknown_84664DC - adds r0, r1 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r5, 0x4] - adds r0, 0x20 - movs r1, 0x7F - ands r0, r1 - strh r0, [r5, 0x4] - movs r0, 0x8 - b _081419C6 - .align 2, 0 -_081419BC: .4byte gSineTable -_081419C0: .4byte gUnknown_84664DC -_081419C4: - subs r0, r1, 0x1 -_081419C6: - strh r0, [r5, 0x2] - movs r1, 0x6 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _08141A00 - ldrh r0, [r5, 0x8] - adds r0, 0x8 - movs r1, 0x7F - ands r0, r1 - strh r0, [r5, 0x8] - ldr r1, _081419FC @ =gSineTable - movs r2, 0x8 - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 21 - strh r1, [r5, 0xA] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x40 - movs r2, 0 - bl BlendPalettes - b _08141A2C - .align 2, 0 -_081419FC: .4byte gSineTable -_08141A00: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08141A2C - movs r0, 0 - strh r0, [r5, 0x8] - ldrh r0, [r5, 0xA] - adds r0, 0x1 - movs r1, 0x1 - ands r0, r1 - strh r0, [r5, 0xA] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r1, 27 - lsrs r1, 24 - movs r0, 0x40 - movs r2, 0 - bl BlendPalettes -_08141A2C: - movs r4, 0 - ldr r5, _08141A4C @ =gPlttBufferFaded - ldr r3, _08141A50 @ =gUnknown_8466C34 - ldr r2, _08141A54 @ =gPlttBufferUnfaded -_08141A34: - adds r0, r4, r3 - ldrb r0, [r0] - adds r0, 0x60 - lsls r0, 1 - adds r1, r0, r5 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r4, 0x1 - cmp r4, 0x1 - bls _08141A34 - b _08141AA8 - .align 2, 0 -_08141A4C: .4byte gPlttBufferFaded -_08141A50: .4byte gUnknown_8466C34 -_08141A54: .4byte gPlttBufferUnfaded -_08141A58: - movs r4, 0 -_08141A5A: - adds r0, r4, 0 - bl sub_8140BF8 - cmp r0, 0 - beq _08141A74 - movs r0, 0x2 - bl GetBgTilemapBuffer - lsls r1, r4, 16 - lsrs r1, 16 - movs r2, 0x4 - bl sub_81418C4 -_08141A74: - adds r4, 0x1 - cmp r4, 0x4 - ble _08141A5A - ldr r0, _08141A94 @ =gUnknown_8465950 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette -_08141A84: - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _08141AA8 - .align 2, 0 -_08141A94: .4byte gUnknown_8465950 -_08141A98: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141AA8 - adds r0, r4, 0 - bl DestroyTask -_08141AA8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_814191C - - thumb_func_start sub_8141AB0 -sub_8141AB0: @ 8141AB0 - push {lr} - ldr r0, _08141AD0 @ =sub_814191C - bl FindTaskIdByFunc - ldr r2, _08141AD4 @ =gTasks - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x2 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_08141AD0: .4byte sub_814191C -_08141AD4: .4byte gTasks - thumb_func_end sub_8141AB0 - - thumb_func_start sub_8141AD8 -sub_8141AD8: @ 8141AD8 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08141B14 @ =gUnknown_8466C38 - movs r1, 0xA - str r1, [sp] - movs r1, 0xD - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - lsls r4, 24 - asrs r4, 24 - adds r0, r4, 0 - bl Menu_MoveCursorNoWrapAround - bl sub_814112C - movs r1, 0x1 - str r1, [r0, 0x28] - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08141B14: .4byte gUnknown_8466C38 - thumb_func_end sub_8141AD8 - - thumb_func_start sub_8141B18 -sub_8141B18: @ 8141B18 - push {r4,lr} - bl sub_814112C - adds r4, r0, 0 - ldr r0, [r4, 0x28] - cmp r0, 0 - beq _08141B2E - bl DestroyYesNoMenu - movs r0, 0 - str r0, [r4, 0x28] -_08141B2E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8141B18 - - thumb_func_start sub_8141B34 -sub_8141B34: @ 8141B34 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - mov r12, r0 - movs r1, 0 - movs r0, 0x44 - adds r0, r4 - mov r8, r0 - adds r7, r4, 0 - adds r7, 0x2C - ldr r0, _08141B9C @ =gUnknown_8466C40 - mov r9, r0 -_08141B5A: - movs r5, 0 - lsls r0, r1, 3 - adds r6, r1, 0x1 - mov r1, r8 - adds r4, r0, r1 - mov r1, r9 - adds r3, r0, r1 - adds r2, r0, 0 -_08141B6A: - ldrh r0, [r3] - lsls r0, 1 - add r0, r12 - ldrh r0, [r0] - strh r0, [r4] - adds r1, r7, r2 - adds r0, r5, 0 - adds r0, 0xC0 - strh r0, [r1] - adds r4, 0x2 - adds r3, 0x2 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08141B6A - adds r1, r6, 0 - cmp r1, 0x2 - ble _08141B5A - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141B9C: .4byte gUnknown_8466C40 - thumb_func_end sub_8141B34 - - thumb_func_start sub_8141BA0 -sub_8141BA0: @ 8141BA0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bhi _08141BD8 - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - adds r6, r0, 0 - lsls r0, r5, 3 - ldr r1, _08141BE0 @ =gUnknown_8466C40 - adds r4, 0x2C - adds r3, r0, r4 - adds r2, r0, r1 - movs r4, 0x3 -_08141BC4: - ldrh r0, [r2] - lsls r0, 1 - adds r0, r6 - ldrh r1, [r3] - strh r1, [r0] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08141BC4 -_08141BD8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141BE0: .4byte gUnknown_8466C40 - thumb_func_end sub_8141BA0 - - thumb_func_start sub_8141BE4 -sub_8141BE4: @ 8141BE4 - push {r4-r7,lr} - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - adds r6, r0, 0 - movs r1, 0 - adds r7, r4, 0 - adds r7, 0x44 - ldr r0, _08141C2C @ =gUnknown_8466C40 - mov r12, r0 -_08141BFE: - lsls r0, r1, 3 - adds r5, r1, 0x1 - adds r3, r0, r7 - mov r1, r12 - adds r2, r0, r1 - movs r4, 0x3 -_08141C0A: - ldrh r0, [r2] - lsls r0, 1 - adds r0, r6 - ldrh r1, [r3] - strh r1, [r0] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08141C0A - adds r1, r5, 0 - cmp r1, 0x2 - ble _08141BFE - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141C2C: .4byte gUnknown_8466C40 - thumb_func_end sub_8141BE4 - - thumb_func_start sub_8141C30 -sub_8141C30: @ 8141C30 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - bl sub_814112C - adds r0, 0x20 - strb r4, [r0] - movs r0, 0xC - adds r1, r5, 0 - bl sub_8141148 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8141C30 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/slot_machine.s b/data/slot_machine.s deleted file mode 100644 index 1ff90742f..000000000 --- a/data/slot_machine.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_8466C34:: @ 8466C34 - .byte 0x02, 0x04 - - .align 2 -gUnknown_8466C38:: @ 8466C38 - window_template 0x00, 0x13, 0x09, 0x06, 0x04, 0x0f, 0x009f - -gUnknown_8466C40:: @ 8466C40 - .2byte 0x0229, 0x022a, 0x0249, 0x024a, 0x022e, 0x022f, 0x024e, 0x024f, 0x0233, 0x0234, 0x0253, 0x0254 diff --git a/ld_script.txt b/ld_script.txt index 0fcc799e3..faa82e34e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -255,7 +255,6 @@ SECTIONS { asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); src/slot_machine.o(.text); - asm/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); src/mevent.o(.text); @@ -454,7 +453,6 @@ SECTIONS { data/itemfinder.o(.rodata); src/buy_menu_helpers.o(.rodata); src/slot_machine.o(.rodata); - data/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); src/mevent.o(.rodata); diff --git a/src/slot_machine.c b/src/slot_machine.c index 5b4020a5f..6d0db130d 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -16,6 +16,7 @@ #include "new_menu_helpers.h" #include "text_window.h" #include "random.h" +#include "trig.h" #include "constants/songs.h" extern const u8 gUnknown_841B747[]; @@ -67,7 +68,9 @@ struct SlotMachineSetupTaskData // align 2 s32 field_0024; u32 field_0028; - u8 filler_002C[0x830]; + u16 field_002C[3][4]; + u16 field_0044[3][4]; + u8 field_005C[0x800]; u8 field_085C[0x800]; u8 field_105C[0x800]; u8 field_185C[0x800]; @@ -525,9 +528,7 @@ const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gba const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz"); const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz"); const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal"); -const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal"); -const u16 gUnknown_84664FC[] = INCBIN_U16("graphics/slot_machine/unk_84664fc.gbapal"); -const u16 gUnknown_846651C[] = INCBIN_U16("graphics/slot_machine/unk_846651c.gbapal"); +const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal","graphics/slot_machine/unk_84664fc.gbapal", "graphics/slot_machine/unk_846651c.gbapal"); const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz"); const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal"); const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal"); @@ -620,6 +621,24 @@ const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { { gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) } }; +const u8 gUnknown_8466C34[2] = {2, 4}; + +const struct WindowTemplate gUnknown_8466C38 = { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x9F +}; + +const u16 gUnknown_8466C40[][4] = { + {0x0229, 0x022a, 0x0249, 0x024a}, + {0x022e, 0x022f, 0x024e, 0x024f}, + {0x0233, 0x0234, 0x0253, 0x0254} +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -2722,3 +2741,149 @@ void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) tileIdxs++; } } + +void sub_814191C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 i; + + switch (data[0]) + { + case 0: + LoadPalette(gUnknown_84664BC, 0x60, 0x20); + for (i = 0; i < 5; i++) + { + if (sub_8140BF8(i)) + sub_81418C4(GetBgTilemapBuffer(2), i, 6); + } + CopyBgTilemapBufferToVram(2); + data[0]++; + break; + case 1: + if (data[1] == 0) + { + u16 y = gSineTable[data[2]] >> 7; + LoadPalette(&gUnknown_84664DC[16 * y], 0x10, 0x20); + data[2] += 32; + data[2] &= 0x7F; + data[1] = 8; + } + else + data[1]--; + + if (data[3] == 0) + { + data[4] += 8; + data[4] &= 0x7F; + data[5] = gSineTable[data[4]] >> 5; + BlendPalettes(0x00000040, data[5], RGB_BLACK); + } + else + { + data[4]++; + if (data[4] > 1) + { + data[4] = 0; + data[5]++; + data[5] &= 1; + BlendPalettes(0x00000040, data[5] * 8, RGB_BLACK); + } + } + + for (i = 0; i < NELEMS(gUnknown_8466C34); i++) + { + gPlttBufferFaded[gUnknown_8466C34[i] + 0x60] = gPlttBufferUnfaded[gUnknown_8466C34[i] + 0x60]; + } + break; + case 2: + for (i = 0; i < 5; i++) + { + if (sub_8140BF8(i)) + sub_81418C4(GetBgTilemapBuffer(2), i, 4); + } + LoadPalette(gUnknown_8465950, 0x10, 0x20); + CopyBgTilemapBufferToVram(2); + data[0]++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + DestroyTask(taskId); + break; + } +} + +void sub_8141AB0(void) +{ + gTasks[FindTaskIdByFunc(sub_814191C)].data[0] = 2; +} + +void sub_8141AD8(u8 cursorPos) +{ + CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos); + Menu_MoveCursorNoWrapAround(cursorPos); + sub_814112C()->field_0028 = TRUE; +} + +void sub_8141B18(void) +{ + struct SlotMachineSetupTaskData * data = sub_814112C(); + if (data->field_0028) + { + DestroyYesNoMenu(); + data->field_0028 = FALSE; + } +} + +void sub_8141B34(void) +{ + s32 i, j; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + u16 idx = gUnknown_8466C40[i][j]; + data->field_0044[i][j] = buffer[idx]; + data->field_002C[i][j] = j + 0xC0; + } + } +} + +void sub_8141BA0(u8 reel) +{ + if (reel < 3) + { + s32 i; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + for (i = 0; i < 4; i++) + { + u16 idx = gUnknown_8466C40[reel][i]; + buffer[idx] = data->field_002C[reel][i]; + } + } +} + +void sub_8141BE4(void) +{ + s32 i, j; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + u16 idx = gUnknown_8466C40[i][j]; + buffer[idx] = data->field_0044[i][j]; + } + } +} + +void sub_8141C30(u8 a0, u8 a1) +{ + sub_814112C()->field_0020 = a0; + sub_8141148(12, a1); +} -- cgit v1.2.3 From a74d770de1bd0b989350f8f4833ec92f48139bf8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 29 Jul 2019 21:56:42 -0400 Subject: Move string decls to strings.h --- data/strings.s | 6 +++--- include/strings.h | 5 +++++ src/slot_machine.c | 17 +++++++---------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/data/strings.s b/data/strings.s index e1804aae0..4f6b40d85 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3067,13 +3067,13 @@ gText_HatchedFromEgg:: @ 841B6FD gText_NickHatchPrompt:: @ 841B716 .string "Would you like to nickname the newly\nhatched {STR_VAR_1}?$" -gUnknown_841B747:: @ 841B747 +gString_OutOfCoins:: @ 841B747 .string "You've run out of COINS.\nGame over!$" -gUnknown_841B76B:: @ 841B76B +gString_QuitPlaying:: @ 841B76B .string "Quit playing?$" -gUnknown_841B779:: @ 841B779 +gString_SlotMachineControls:: @ 841B779 .string "{KEYGFX_DPAD_LEFT_RIGHT}COMBOS {KEYGFX_DPAD_DOWN}WAGER {KEYGFX_A_BUTTON}STOP {KEYGFX_B_BUTTON}EXIT$" gUnknown_841B798:: @ 0x841B798 diff --git a/include/strings.h b/include/strings.h index 85b67ed57..97c120ff3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -203,4 +203,9 @@ extern const u8 gString_BattleRecords_ColumnHeaders[]; extern const u8 gString_BattleRecords_7Dashes[]; extern const u8 gString_BattleRecords_4Dashes[]; +// slot_machine +extern const u8 gString_OutOfCoins[]; +extern const u8 gString_QuitPlaying[]; +extern const u8 gString_SlotMachineControls[]; + #endif //GUARD_STRINGS_H diff --git a/src/slot_machine.c b/src/slot_machine.c index 6d0db130d..98270cf37 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -17,12 +17,9 @@ #include "text_window.h" #include "random.h" #include "trig.h" +#include "strings.h" #include "constants/songs.h" -extern const u8 gUnknown_841B747[]; -extern const u8 gUnknown_841B76B[]; -extern const u8 gUnknown_841B779[]; - struct SlotMachineState { MainCallback savedCallback; @@ -2127,11 +2124,11 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) FillWindowPixelBuffer(1, 0xFF); PutWindowTilemap(1); - x = 0xEC - GetStringWidth(0, gUnknown_841B779, 0); + x = 0xEC - GetStringWidth(0, gString_SlotMachineControls, 0); textColor.fgColor = 15; textColor.bgColor = 1; textColor.shadowColor = 2; - AddTextPrinterParameterized3(1, 0, x, 0, &textColor, 0, gUnknown_841B779); + AddTextPrinterParameterized3(1, 0, x, 0, &textColor, 0, gString_SlotMachineControls); CopyBgTilemapBufferToVram(0); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | 0x20 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); @@ -2339,7 +2336,7 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) "\tbl FillWindowPixelBuffer\n" "\tmovs r0, 0x1\n" "\tbl PutWindowTilemap\n" - "\tldr r4, _081413D8 @ =gUnknown_841B779\n" + "\tldr r4, _081413D8 @ =gString_SlotMachineControls\n" "\tmovs r0, 0\n" "\tadds r1, r4, 0\n" "\tmovs r2, 0\n" @@ -2401,7 +2398,7 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) "_081413CC: .4byte 0x0000085c\n" "_081413D0: .4byte gUnknown_8466620\n" "_081413D4: .4byte gUnknown_8466998\n" - "_081413D8: .4byte gUnknown_841B779\n" + "_081413D8: .4byte gString_SlotMachineControls\n" "_081413DC: .4byte sub_8141118\n" "_081413E0: .4byte sub_8140E40\n" "_081413E4:\n" @@ -2550,7 +2547,7 @@ bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) switch (*state) { case 0: - sub_81417E4(gUnknown_841B747); + sub_81417E4(gString_OutOfCoins); CopyWindowToVram(0, 3); (*state)++; break; @@ -2567,7 +2564,7 @@ bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) switch (*state) { case 0: - sub_81417E4(gUnknown_841B76B); + sub_81417E4(gString_QuitPlaying); sub_8141AD8(0); CopyWindowToVram(0, 3); (*state)++; -- cgit v1.2.3 From 9b3b3244f7dad9c0a1d6335a8786da1fdfedd870 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 30 Jul 2019 19:20:41 -0400 Subject: Suppress IDE errors when incbinning multiple files --- include/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/global.h b/include/global.h index e1f63213a..9a398354d 100644 --- a/include/global.h +++ b/include/global.h @@ -17,7 +17,7 @@ // Get the IDE to stfu // We define it this way to fool preproc. -#define INCBIN(x) {0} +#define INCBIN(...) {0} #define INCBIN_U8 INCBIN #define INCBIN_U16 INCBIN #define INCBIN_U32 INCBIN -- cgit v1.2.3 From 23d917f7c89c1256f1e935a57d490816fd916f55 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 30 Jul 2019 19:50:52 -0400 Subject: Quieter `make tools` --- tools/aif2pcm/Makefile | 5 ++++- tools/bin2c/Makefile | 5 ++++- tools/gbafix/Makefile | 5 ++++- tools/jsonproc/Makefile | 2 +- tools/mapjson/Makefile | 5 ++++- tools/preproc/Makefile | 5 ++++- tools/ramscrgen/Makefile | 5 ++++- tools/rsfont/Makefile | 5 ++++- tools/scaninc/Makefile | 5 ++++- 9 files changed, 33 insertions(+), 9 deletions(-) diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index e5cb6ad31..af7d19fe9 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,7 +6,10 @@ LIBS = -lm SRCS = main.c extended.c -.PHONY: clean +.PHONY: all clean + +all: aif2pcm + @: aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 73f78980e..ab11e1b61 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -2,10 +2,13 @@ CC = gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -.PHONY: clean +.PHONY: all clean SRCS = bin2c.c +all: bin2c + @: + bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index f12c8cc4f..5b410da08 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -1,8 +1,11 @@ CC = gcc -.PHONY: clean +.PHONY: all clean SRCS = gbafix.c +all: gbafix + @: + gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index b415e7b41..721da1025 100644 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,7 +8,7 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -.PHONY: clean +.PHONY: all clean all: jsonproc @: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index d09acad50..9a49be506 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,7 +6,10 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -.PHONY: clean +.PHONY: all clean + +all: mapjson + @: mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 3d3275819..63dedda1f 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,7 +8,10 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -.PHONY: clean +.PHONY: all clean + +all: preproc + @: preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 9aa309aa1..858db1a77 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -6,7 +6,10 @@ SRCS := main.cpp sym_file.cpp elf.cpp HEADERS := ramscrgen.h sym_file.h elf.h char_util.h -.PHONY: clean +.PHONY: all clean + +all: ramscrgen + @: ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 582be7b88..abe1cab51 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -6,7 +6,10 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c util.c font.c -.PHONY: clean +.PHONY: all clean + +all: rsfont + @: rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 53c9d0060..1516f159c 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -6,7 +6,10 @@ SRCS = scaninc.cpp c_file.cpp asm_file.cpp source_file.cpp HEADERS := scaninc.h asm_file.h c_file.h source_file.h -.PHONY: clean +.PHONY: all clean + +all: scaninc + @: scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) -- cgit v1.2.3 From ea8f529f2d5bb520b83d5b7721dc47ba1b489d45 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 30 Jul 2019 22:07:15 -0400 Subject: title_screen: data and code thru sub_8078C9C --- asm/title_screen.s | 462 ----------------------------- data/field_weather.s | 3 + data/graphics.s | 5 +- data/graphics/title_screen/unk_83BF58C.png | Bin 0 -> 78 bytes data/graphics/title_screen/unk_83BF5A8.bin | 1 + data/graphics/title_screen/unk_83bf64c.png | Bin 0 -> 188 bytes data/graphics/title_screen/unk_83bf79c.png | Bin 0 -> 539 bytes data/graphics/title_screen/unk_83bfa14.png | Bin 0 -> 150 bytes data/title_screen.s | 80 ++++- graphics/title_screen/unk_8eae4a8.png | Bin 0 -> 148 bytes include/main.h | 1 + ld_script.txt | 2 + src/title_screen.c | 192 ++++++++++++ 13 files changed, 269 insertions(+), 477 deletions(-) create mode 100644 data/graphics/title_screen/unk_83BF58C.png create mode 100644 data/graphics/title_screen/unk_83BF5A8.bin create mode 100644 data/graphics/title_screen/unk_83bf64c.png create mode 100644 data/graphics/title_screen/unk_83bf79c.png create mode 100644 data/graphics/title_screen/unk_83bfa14.png create mode 100644 graphics/title_screen/unk_8eae4a8.png create mode 100644 src/title_screen.c diff --git a/asm/title_screen.s b/asm/title_screen.s index e62cc9a9f..293a289ce 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -5,468 +5,6 @@ .text - thumb_func_start CB2_InitTitleScreen -CB2_InitTitleScreen: @ 8078914 - push {r4-r6,lr} - sub sp, 0xC - ldr r0, _08078930 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r6, [r0] - cmp r6, 0x1 - beq _080789F0 - cmp r6, 0x1 - bgt _08078934 - cmp r6, 0 - beq _08078946 - b _0807893A - .align 2, 0 -_08078930: .4byte gMain -_08078934: - cmp r6, 0x2 - bne _0807893A - b _08078AC0 -_0807893A: - ldr r0, _080789D0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_08078946: - movs r0, 0 - bl SetVBlankCallback - bl StartTimer1 - ldr r0, _080789D4 @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetPaletteFade - bl sub_8078B34 - add r1, sp, 0x4 - movs r0, 0 - strh r0, [r1] - ldr r1, _080789D8 @ =0x040000d4 - add r0, sp, 0x4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789DC @ =0x8100c000 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0 - str r2, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789E0 @ =0x85000100 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add r0, sp, 0x4 - strh r2, [r0] - str r0, [r1] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789E4 @ =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080789E8 @ =gUnknown_83BFB74 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080789EC @ =gUnknown_2037F30 - movs r0, 0xFF - strb r0, [r1] - b _08078B18 - .align 2, 0 -_080789D0: .4byte gMain -_080789D4: .4byte gHeap -_080789D8: .4byte 0x040000d4 -_080789DC: .4byte 0x8100c000 -_080789E0: .4byte 0x85000100 -_080789E4: .4byte 0x81000200 -_080789E8: .4byte gUnknown_83BFB74 -_080789EC: .4byte gUnknown_2037F30 -_080789F0: - ldr r0, _08078A94 @ =gUnknown_8EAB6C4 - movs r2, 0xD0 - lsls r2, 1 - movs r1, 0 - bl LoadPalette - ldr r1, _08078A98 @ =gUnknown_8EAB8C4 - movs r4, 0 - str r4, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078A9C @ =gUnknown_8EAD390 - str r6, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r0, _08078AA0 @ =gUnknown_8EAD5E8 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AA4 @ =gUnknown_8EAD608 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078AA8 @ =gUnknown_8EADEE4 - str r6, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r5, _08078AAC @ =gUnknown_8EAE094 - adds r0, r5, 0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AB0 @ =gUnknown_8EAE0B4 - str r4, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078AB4 @ =gUnknown_8EAE374 - str r6, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - adds r0, r5, 0 - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AB8 @ =gUnknown_83BF58C - str r4, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078ABC @ =gUnknown_83BF5A8 - str r6, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - bl sub_8079708 - b _08078B18 - .align 2, 0 -_08078A94: .4byte gUnknown_8EAB6C4 -_08078A98: .4byte gUnknown_8EAB8C4 -_08078A9C: .4byte gUnknown_8EAD390 -_08078AA0: .4byte gUnknown_8EAD5E8 -_08078AA4: .4byte gUnknown_8EAD608 -_08078AA8: .4byte gUnknown_8EADEE4 -_08078AAC: .4byte gUnknown_8EAE094 -_08078AB0: .4byte gUnknown_8EAE0B4 -_08078AB4: .4byte gUnknown_8EAE374 -_08078AB8: .4byte gUnknown_83BF58C -_08078ABC: .4byte gUnknown_83BF5A8 -_08078AC0: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _08078B26 - ldr r0, _08078B00 @ =0x0000ffff - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _08078B04 @ =sub_8078C24 - movs r1, 0x4 - bl CreateTask - ldr r0, _08078B08 @ =sub_8078BEC - movs r1, 0x2 - bl CreateTask - ldr r1, _08078B0C @ =gUnknown_2037F30 - strb r0, [r1] - ldr r0, _08078B10 @ =sub_8078BB4 - bl SetVBlankCallback - ldr r0, _08078B14 @ =sub_8078B9C - bl SetMainCallback2 - movs r0, 0x8B - lsls r0, 1 - bl m4aSongNumStart - b _08078B26 - .align 2, 0 -_08078B00: .4byte 0x0000ffff -_08078B04: .4byte sub_8078C24 -_08078B08: .4byte sub_8078BEC -_08078B0C: .4byte gUnknown_2037F30 -_08078B10: .4byte sub_8078BB4 -_08078B14: .4byte sub_8078B9C -_08078B18: - ldr r1, _08078B30 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08078B26: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078B30: .4byte gMain - thumb_func_end CB2_InitTitleScreen - - thumb_func_start sub_8078B34 -sub_8078B34: @ 8078B34 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_8078B34 - - thumb_func_start sub_8078B9C -sub_8078B9C: @ 8078B9C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8078B9C - - thumb_func_start sub_8078BB4 -sub_8078BB4: @ 8078BB4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl ScanlineEffect_InitHBlankDmaTransfer - ldr r1, _08078BE4 @ =gUnknown_2037F30 - ldrb r0, [r1] - cmp r0, 0xFF - beq _08078BE0 - ldr r2, _08078BE8 @ =gTasks - adds r1, r0, 0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] -_08078BE0: - pop {r0} - bx r0 - .align 2, 0 -_08078BE4: .4byte gUnknown_2037F30 -_08078BE8: .4byte gTasks - thumb_func_end sub_8078BB4 - - thumb_func_start sub_8078BEC -sub_8078BEC: @ 8078BEC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _08078C18 @ =gTasks+0x8 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _08078C1C @ =0x00000a8b - cmp r1, r0 - ble _08078C12 - ldr r1, _08078C20 @ =gUnknown_2037F30 - movs r0, 0xFF - strb r0, [r1] - adds r0, r2, 0 - bl DestroyTask -_08078C12: - pop {r0} - bx r0 - .align 2, 0 -_08078C18: .4byte gTasks+0x8 -_08078C1C: .4byte 0x00000a8b -_08078C20: .4byte gUnknown_2037F30 - thumb_func_end sub_8078BEC - - thumb_func_start sub_8078C24 -sub_8078C24: @ 8078C24 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08078C6C @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _08078C70 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xB - ands r0, r1 - cmp r0, 0 - beq _08078C74 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - beq _08078C74 - cmp r0, 0x4 - beq _08078C74 - cmp r0, 0x5 - beq _08078C74 - bl sub_8079620 - bl sub_8079648 - movs r2, 0xA - ldrsh r0, [r4, r2] - bl sub_8079A10 - adds r0, r4, 0 - movs r1, 0x3 - bl sub_8078C90 - b _08078C86 - .align 2, 0 -_08078C6C: .4byte gTasks+0x8 -_08078C70: .4byte gMain -_08078C74: - ldr r0, _08078C8C @ =gUnknown_83BFB84 - movs r2, 0 - ldrsh r1, [r4, r2] - lsls r1, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r4, 0 - bl _call_via_r1 -_08078C86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078C8C: .4byte gUnknown_83BFB84 - thumb_func_end sub_8078C24 - - thumb_func_start sub_8078C90 -sub_8078C90: @ 8078C90 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r2, [r0, 0x2] - strh r1, [r0] - bx lr - thumb_func_end sub_8078C90 - - thumb_func_start sub_8078C9C -sub_8078C9C: @ 8078C9C - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x10 - mov r8, r0 - movs r0, 0 - bl HideBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldr r0, _08078D14 @ =0x04000054 - str r0, [sp] - ldr r0, _08078D18 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r5, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r5, [r0, 0x9] - add r0, sp, 0xC - strh r5, [r0] - ldr r4, _08078D1C @ =gScanlineEffectRegBuffers - ldr r6, _08078D20 @ =0x010000a0 - adds r1, r4, 0 - adds r2, r6, 0 - bl CpuSet - mov r0, sp - adds r0, 0xE - strh r5, [r0] - movs r1, 0xF0 - lsls r1, 3 - adds r4, r1 - adds r1, r4, 0 - adds r2, r6, 0 - bl CpuSet - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - mov r0, r8 - movs r1, 0x1 - bl sub_8078C90 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078D14: .4byte 0x04000054 -_08078D18: .4byte 0xa2600001 -_08078D1C: .4byte gScanlineEffectRegBuffers -_08078D20: .4byte 0x010000a0 - thumb_func_end sub_8078C9C - thumb_func_start sub_8078D24 sub_8078D24: @ 8078D24 push {r4,lr} diff --git a/data/field_weather.s b/data/field_weather.s index a25e44344..517480d9a 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -1,6 +1,9 @@ .section .rodata .align 2 +gUnknown_83BFBE4:: @ 83BFBE4 + .incbin "baserom.gba", 0x3BFBE4, 0x2FD8 + gUnknown_83C2BBC:: @ 83C2BBC .incbin "baserom.gba", 0x3C2BBC, 0x4 diff --git a/data/graphics.s b/data/graphics.s index 83d14001d..f62234529 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16379,11 +16379,12 @@ gUnknown_8EAE0B4:: @ 8EAE0B4 gUnknown_8EAE374:: @ 8EAE374 .incbin "baserom.gba", 0xEAE374, 0x114 + @ title_screen gUnknown_8EAE488:: @ 8EAE488 - .incbin "baserom.gba", 0xEAE488, 0x20 @UNKNOWN + .incbin "graphics/title_screen/unk_8eae488.gbapal" gUnknown_8EAE4A8:: @ 8EAE4A8 - .incbin "baserom.gba", 0xEAE4A8, 0x80 + .incbin "graphics/title_screen/unk_8eae4a8.4bpp.lz" gUnknown_8EAE528:: @ 8EAE528 .incbin "baserom.gba", 0xEAE528, 0x20 @UNKNOWN diff --git a/data/graphics/title_screen/unk_83BF58C.png b/data/graphics/title_screen/unk_83BF58C.png new file mode 100644 index 000000000..895457c3c Binary files /dev/null and b/data/graphics/title_screen/unk_83BF58C.png differ diff --git a/data/graphics/title_screen/unk_83BF5A8.bin b/data/graphics/title_screen/unk_83BF5A8.bin new file mode 100644 index 000000000..375fbeb7a --- /dev/null +++ b/data/graphics/title_screen/unk_83BF5A8.bin @@ -0,0 +1 @@ +àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà \ No newline at end of file diff --git a/data/graphics/title_screen/unk_83bf64c.png b/data/graphics/title_screen/unk_83bf64c.png new file mode 100644 index 000000000..3c9b7630d Binary files /dev/null and b/data/graphics/title_screen/unk_83bf64c.png differ diff --git a/data/graphics/title_screen/unk_83bf79c.png b/data/graphics/title_screen/unk_83bf79c.png new file mode 100644 index 000000000..246252bed Binary files /dev/null and b/data/graphics/title_screen/unk_83bf79c.png differ diff --git a/data/graphics/title_screen/unk_83bfa14.png b/data/graphics/title_screen/unk_83bfa14.png new file mode 100644 index 000000000..f4f030a5b Binary files /dev/null and b/data/graphics/title_screen/unk_83bfa14.png differ diff --git a/data/title_screen.s b/data/title_screen.s index 93d0f2f83..e0186afe3 100644 --- a/data/title_screen.s +++ b/data/title_screen.s @@ -1,34 +1,88 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" .section .rodata .align 2 -gUnknown_83BF58C:: @ 83BF58C - .incbin "baserom.gba", 0x3BF58C, 0x1C +gUnknown_83BF64C:: @ 83BF64C + .incbin "data/graphics/title_screen/unk_83bf64c.4bpp.lz" -gUnknown_83BF5A8:: @ 83BF5A8 - .incbin "baserom.gba", 0x3BF5A8, 0x55C +gUnknown_83BF77C:: + .incbin "data/graphics/title_screen/unk_83bf77c.gbapal" + +gUnknown_83BF79C:: + .incbin "data/graphics/title_screen/unk_83bf79c.4bpp.lz" + +gUnknown_83BFA14:: + .incbin "data/graphics/title_screen/unk_83bfa14.4bpp.lz" + +gOamData_83BFAB4:: + .4byte 0x40000000, 0x00000c00 + +gSpriteAnims_83BFABC:: + obj_image_anim_frame 0x0, 0x3 + obj_image_anim_frame 0x4, 0x6 + obj_image_anim_frame 0x8, 0x6 + obj_image_anim_frame 0xc, 0x6 + obj_image_anim_frame 0x10, 0x6 + obj_image_anim_frame 0x14, 0x6 + obj_image_anim_frame 0x18, 0x6 + obj_image_anim_frame 0x1c, 0x6 + obj_image_anim_frame 0x20, 0x6 + obj_image_anim_frame 0x24, 0x6 + obj_image_anim_end + +gSpriteAnims_83BFAE8:: + obj_image_anim_frame 0x18, 0x6 + obj_image_anim_frame 0x1c, 0x6 + obj_image_anim_frame 0x20, 0x6 + obj_image_anim_frame 0x24, 0x6 + obj_image_anim_end + +gSpriteAnimTable_83BFAFC:: + .4byte gSpriteAnims_83BFABC + .4byte gSpriteAnims_83BFAE8 gUnknown_83BFB04:: @ 83BFB04 - .incbin "baserom.gba", 0x3BFB04, 0x18 + spr_template 0, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83BFB1C:: @ 83BFB1C - .incbin "baserom.gba", 0x3BFB1C, 0x20 + spr_template 1, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gOamData_83BFB34:: + .4byte 0xc0008000, 0x00000000 gUnknown_83BFB3C:: @ 83BFB3C - .incbin "baserom.gba", 0x3BFB3C, 0x20 + spr_template 2, 2, gOamData_83BFB34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gOamData_83BFB54:: + .4byte 0xc0000800, 0x00000000 gUnknown_83BFB5C:: @ 83BFB5C - .incbin "baserom.gba", 0x3BFB5C, 0x18 + spr_template 3, 2, gOamData_83BFB54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83BFB74:: @ 83BFB74 - .incbin "baserom.gba", 0x3BFB74, 0x10 + .4byte 0x000009f0 + .4byte 0x000011e5 + .4byte 0x000021da + .4byte 0x000031cf gUnknown_83BFB84:: @ 83BFB84 - .incbin "baserom.gba", 0x3BFB84, 0x18 + .4byte sub_8078C9C + .4byte sub_8078D24 + .4byte sub_8078DA4 + .4byte sub_8078FC4 + .4byte sub_80790CC + .4byte sub_80791C0 gUnknown_83BFB9C:: @ 83BFB9C - .incbin "baserom.gba", 0x3BFB9C, 0x20 + obj_tiles gUnknown_83BF79C, 0x500, 0 + obj_tiles gUnknown_83BFA14, 0x500, 1 + obj_tiles gUnknown_8EAE4A8, 0x400, 2 + obj_tiles gUnknown_83BF64C, 0x800, 3 gUnknown_83BFBBC:: @ 83BFBBC - .incbin "baserom.gba", 0x3BFBBC, 0x18 + obj_pal gUnknown_83BF77C, 0 + obj_pal gUnknown_8EAE488, 2 + null_obj_pal gUnknown_83BFBD4:: @ 83BFBD4 - .incbin "baserom.gba", 0x3BFBD4, 0x2FE8 + .incbin "baserom.gba", 0x3BFBD4, 0xF diff --git a/graphics/title_screen/unk_8eae4a8.png b/graphics/title_screen/unk_8eae4a8.png new file mode 100644 index 000000000..d98563aef Binary files /dev/null and b/graphics/title_screen/unk_8eae4a8.png differ diff --git a/include/main.h b/include/main.h index a250475cb..b66ff04d8 100644 --- a/include/main.h +++ b/include/main.h @@ -65,6 +65,7 @@ void ClearPokemonCrySongs(void); void RestoreSerialTimer3IntrHandlers(void); void SetVBlankCounter1Ptr(u32 *ptr); void DisableVBlankCounter1(void); +void StartTimer1(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; diff --git a/ld_script.txt b/ld_script.txt index d9506d33f..20e1db897 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -115,6 +115,7 @@ SECTIONS { src/task.o(.text); asm/reshow_battle_screen.o(.text); asm/battle_anim_status_effects.o(.text); + src/title_screen.o(.text); asm/title_screen.o(.text); src/reset_save_heap.o(.text); asm/field_weather.o(.text); @@ -405,6 +406,7 @@ SECTIONS { data/battle_anim.o(.rodata); data/map_events.o(.rodata); data/battle_anim_status_effects.o(.rodata); + src/title_screen.o(.rodata); data/title_screen.o(.rodata); data/field_weather.o(.rodata); data/data_835B488.o(.rodata); diff --git a/src/title_screen.c b/src/title_screen.c new file mode 100644 index 000000000..9e779bb7b --- /dev/null +++ b/src/title_screen.c @@ -0,0 +1,192 @@ +#include "global.h" +#include "malloc.h" +#include "palette.h" +#include "gpu_regs.h" +#include "bg.h" +#include "task.h" +#include "main.h" +#include "new_menu_helpers.h" +#include "m4a.h" +#include "scanline_effect.h" +#include "constants/songs.h" + +EWRAM_DATA u8 gUnknown_2037F30 = 0; + +void sub_8078B34(void); +void sub_8078B9C(void); +void sub_8078BB4(void); +void sub_8078BEC(u8 taskId); +void sub_8078C24(u8 taskId); +void sub_8078C90(s16 * data, u8 a1); +void sub_8078C9C(s16 * data); +void sub_8078D24(s16 * data); +void sub_8078DA4(s16 * data); +void sub_8078FC4(s16 * data); +void sub_80790CC(s16 * data); +void sub_80791C0(s16 * data); +void sub_8079708(void); +void sub_8079620(void); +void sub_8079648(void); +void sub_8079A10(s16 a0); + +const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); +const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); +extern const struct BgTemplate gUnknown_83BFB74[4]; +extern const void (*const gUnknown_83BFB84[])(s16 * data); + +/*graphics.h*/ +extern const u16 gUnknown_8EAB6C4[]; +extern const u8 gUnknown_8EAB8C4[]; +extern const u8 gUnknown_8EAD390[]; +extern const u16 gUnknown_8EAD5E8[]; +extern const u8 gUnknown_8EAD608[]; +extern const u8 gUnknown_8EADEE4[]; +extern const u16 gUnknown_8EAE094[]; +extern const u8 gUnknown_8EAE0B4[]; +extern const u8 gUnknown_8EAE374[]; + +void CB2_InitTitleScreen(void) +{ + switch (gMain.state) + { + default: + gMain.state = 0; + // fallthrough + case 0: + SetVBlankCallback(NULL); + StartTimer1(); + InitHeap(gHeap, HEAP_SIZE); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + sub_8078B34(); + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_83BFB74, NELEMS(gUnknown_83BFB74)); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + gUnknown_2037F30 = 0xFF; + break; + case 1: + LoadPalette(gUnknown_8EAB6C4, 0, 0x1A0); + DecompressAndCopyTileDataToVram(0, gUnknown_8EAB8C4, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8EAD390, 0, 0, 1); + LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnknown_8EAD608, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8EADEE4, 0, 0, 1); + LoadPalette(gUnknown_8EAE094, 0xF0, 0x20); + DecompressAndCopyTileDataToVram(2, gUnknown_8EAE0B4, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gUnknown_8EAE374, 0, 0, 1); + LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); + DecompressAndCopyTileDataToVram(3, gUnknown_83BF58C, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, gUnknown_83BF5A8, 0, 0, 1); + sub_8079708(); + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); + CreateTask(sub_8078C24, 4); + gUnknown_2037F30 = CreateTask(sub_8078BEC, 2); + SetVBlankCallback(sub_8078BB4); + SetMainCallback2(sub_8078B9C); + m4aSongNumStart(BGM_FRLG_TITLE); + } + return; + } + gMain.state++; +} + +void sub_8078B34(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); +} + +void sub_8078B9C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8078BB4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); + + if (gUnknown_2037F30 != 0xFF) + gTasks[gUnknown_2037F30].data[0]++; +} + +void sub_8078BEC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[0] >= 2700) + { + gUnknown_2037F30 = 0xFF; + DestroyTask(taskId); + } +} + +void sub_8078C24(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON) + && data[0] != 3 && data[0] != 4 && data[0] != 5) + { + sub_8079620(); + sub_8079648(); + sub_8079A10(data[5]); + sub_8078C90(data, 3); + } + else + { + gUnknown_83BFB84[data[0]](data); + } +} + +void sub_8078C90(s16 * data, u8 a1) +{ + data[1] = 0; + data[0] = a1; +} + +void sub_8078C9C(s16 * data) +{ + struct ScanlineEffectParams params; + + HideBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + + params.dmaDest = (volatile void *)REG_ADDR_BLDY; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.initState = 1; + params.unused9 = 0; + + CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + + ScanlineEffect_SetParams(params); + + sub_8078C90(data, 1); +} -- cgit v1.2.3 From e96ecee460c5cd0c3139432ebbb191a36ad31912 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 31 Jul 2019 12:32:57 -0400 Subject: title_screen through sub_80791C0 --- asm/title_screen.s | 687 ---------------------------------------------------- data/title_screen.s | 88 ------- include/graphics.h | 13 + include/intro.h | 6 + include/main.h | 1 + include/main_menu.h | 6 + include/palette.h | 3 + ld_script.txt | 1 - src/title_screen.c | 468 +++++++++++++++++++++++++++++++++-- 9 files changed, 481 insertions(+), 792 deletions(-) delete mode 100644 data/title_screen.s create mode 100644 include/intro.h create mode 100644 include/main_menu.h diff --git a/asm/title_screen.s b/asm/title_screen.s index 293a289ce..47a1b30a9 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -5,693 +5,6 @@ .text - thumb_func_start sub_8078D24 -sub_8078D24: @ 8078D24 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08078D5C - cmp r0, 0x1 - bgt _08078D3A - cmp r0, 0 - beq _08078D40 - b _08078D9C -_08078D3A: - cmp r0, 0x2 - beq _08078D84 - b _08078D9C -_08078D40: - movs r0, 0x50 - movs r1, 0x82 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x80 - strh r0, [r4, 0x4] - movs r0, 0x80 - bl sub_8079550 - b _08078D78 -_08078D5C: - ldrh r0, [r4, 0x4] - subs r0, 0x4 - strh r0, [r4, 0x4] - movs r1, 0x4 - ldrsh r0, [r4, r1] - bl sub_8079550 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _08078D9C - ldr r1, _08078D80 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_08078D78: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _08078D9C - .align 2, 0 -_08078D80: .4byte gScanlineEffect -_08078D84: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - movs r1, 0x2 - bl sub_8078C90 -_08078D9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078D24 - - thumb_func_start sub_8078DA4 -sub_8078DA4: @ 8078DA4 - push {r4-r7,lr} - sub sp, 0xC - adds r6, r0, 0 - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0x9 - bls _08078DB4 - b _08078FB6 -_08078DB4: - lsls r0, 2 - ldr r1, _08078DC0 @ =_08078DC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078DC0: .4byte _08078DC4 - .align 2, 0 -_08078DC4: - .4byte _08078DEC - .4byte _08078DF2 - .4byte _08078E24 - .4byte _08078E40 - .4byte _08078E80 - .4byte _08078EA4 - .4byte _08078ED4 - .4byte _08078EF8 - .4byte _08078F24 - .4byte _08078F98 -_08078DEC: - movs r0, 0 - strh r0, [r6, 0x4] - b _08078F80 -_08078DF2: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bgt _08078E02 - b _08078FB6 -_08078E02: - ldr r0, _08078E20 @ =gPlttBufferUnfaded + 0x1A0 - movs r1, 0x10 - bl TintPalette_GrayScale2 - movs r0, 0x80 - lsls r0, 6 - movs r1, 0 - str r1, [sp] - movs r1, 0x9 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _08078F80 - .align 2, 0 -_08078E20: .4byte gPlttBufferUnfaded + 0x1A0 -_08078E24: - ldr r0, _08078E3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08078E36 - b _08078FB6 -_08078E36: - strh r0, [r6, 0x4] - b _08078F80 - .align 2, 0 -_08078E3C: .4byte gPaletteFade -_08078E40: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x24 - bgt _08078E50 - b _08078FB6 -_08078E50: - ldr r0, _08078E78 @ =sub_80792C8 - movs r1, 0x3 - bl CreateTask - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078E7C @ =0x00007fde - str r2, [sp] - movs r4, 0 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r2, 0x1 - movs r3, 0x10 - bl sub_80717A8 - strh r4, [r6, 0x4] - b _08078F80 - .align 2, 0 -_08078E78: .4byte sub_80792C8 -_08078E7C: .4byte 0x00007fde -_08078E80: - movs r0, 0 - bl sub_807185C - adds r3, r0, 0 - cmp r3, 0 - beq _08078E8E - b _08078FB6 -_08078E8E: - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078EA0 @ =0x00007fde - str r2, [sp] - str r3, [sp, 0x4] - str r3, [sp, 0x8] - b _08078F78 - .align 2, 0 -_08078EA0: .4byte 0x00007fde -_08078EA4: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bgt _08078EB4 - b _08078FB6 -_08078EB4: - movs r0, 0 - strh r0, [r6, 0x4] - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078ED0 @ =0x00007fde - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - str r2, [sp, 0x8] - movs r2, 0x1 - movs r3, 0x10 - b _08078F7C - .align 2, 0 -_08078ED0: .4byte 0x00007fde -_08078ED4: - movs r0, 0 - bl sub_807185C - adds r3, r0, 0 - cmp r3, 0 - bne _08078FB6 - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078EF4 @ =0x00007fde - str r2, [sp] - str r3, [sp, 0x4] - str r3, [sp, 0x8] - b _08078F78 - .align 2, 0 -_08078EF4: .4byte 0x00007fde -_08078EF8: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08078FB6 - movs r0, 0 - strh r0, [r6, 0x4] - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x3 - negs r1, r1 - ldr r2, _08078F20 @ =0x00007fde - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - str r2, [sp, 0x8] - movs r3, 0x10 - b _08078F7C - .align 2, 0 -_08078F20: .4byte 0x00007fde -_08078F24: - movs r0, 0 - bl sub_807185C - adds r7, r0, 0 - cmp r7, 0 - bne _08078FB6 - movs r0, 0x1 - strh r0, [r6, 0xA] - bl sub_80799F0 - movs r4, 0x80 - lsls r4, 9 - lsls r4, r0 - ldr r0, _08078F88 @ =0x00001fff - orrs r4, r0 - ldr r5, _08078F8C @ =0x00007fde - adds r0, r4, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - ldr r0, _08078F90 @ =gUnknown_8EAD5E8 - ldr r1, _08078F94 @ =gPlttBufferUnfaded + 0x1A0 - movs r2, 0x10 - bl CpuSet - movs r0, 0x80 - lsls r0, 6 - str r5, [sp] - str r7, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 -_08078F78: - movs r2, 0xF - movs r3, 0 -_08078F7C: - bl sub_80717A8 -_08078F80: - ldrh r0, [r6, 0x2] - adds r0, 0x1 - strh r0, [r6, 0x2] - b _08078FB6 - .align 2, 0 -_08078F88: .4byte 0x00001fff -_08078F8C: .4byte 0x00007fde -_08078F90: .4byte gUnknown_8EAD5E8 -_08078F94: .4byte gPlttBufferUnfaded + 0x1A0 -_08078F98: - movs r0, 0 - bl sub_807185C - cmp r0, 0 - bne _08078FB6 - ldr r0, _08078FC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08078FB6 - adds r0, r6, 0 - movs r1, 0x3 - bl sub_8078C90 -_08078FB6: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078FC0: .4byte gPaletteFade - thumb_func_end sub_8078DA4 - - thumb_func_start sub_8078FC4 -sub_8078FC4: @ 8078FC4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08078FD6 - cmp r0, 0x1 - beq _08079004 - b _08079094 -_08078FD6: - movs r0, 0x1 - bl HelpSystem_SetSomeVariable2 - ldr r0, _0807902C @ =sub_807941C - movs r1, 0 - bl CreateTask - ldr r0, _08079030 @ =sub_8079840 - movs r1, 0x5 - bl CreateTask - bl sub_80790A0 - bl sub_8079A40 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xC] - bl sub_812B484 - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_08079004: - ldr r2, _08079034 @ =gMain - ldrh r1, [r2, 0x2C] - movs r0, 0x46 - ands r0, r1 - cmp r0, 0x46 - bne _08079040 - ldrb r0, [r4, 0xC] - bl sub_8079A88 - ldr r0, _08079038 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _0807903C @ =sub_80796CC - bl SetMainCallback2 - b _08079094 - .align 2, 0 -_0807902C: .4byte sub_807941C -_08079030: .4byte sub_8079840 -_08079034: .4byte gMain -_08079038: .4byte sub_8078C24 -_0807903C: .4byte sub_80796CC -_08079040: - movs r0, 0x6 - ands r0, r1 - cmp r0, 0x6 - bne _0807906C - ldrb r0, [r4, 0xC] - bl sub_8079A88 - ldr r0, _08079064 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _08079068 @ =sub_80796E8 - bl SetMainCallback2 - b _08079094 - .align 2, 0 -_08079064: .4byte sub_8078C24 -_08079068: .4byte sub_80796E8 -_0807906C: - ldrh r1, [r2, 0x2E] - movs r0, 0x9 - ands r0, r1 - cmp r0, 0 - beq _08079080 - adds r0, r4, 0 - movs r1, 0x5 - bl sub_8078C90 - b _08079094 -_08079080: - ldr r0, _0807909C @ =sub_8078BEC - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08079094 - adds r0, r4, 0 - movs r1, 0x4 - bl sub_8078C90 -_08079094: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807909C: .4byte sub_8078BEC - thumb_func_end sub_8078FC4 - - thumb_func_start sub_80790A0 -sub_80790A0: @ 80790A0 - push {lr} - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080790C8 @ =0x00003f1f - movs r0, 0x4A - bl SetGpuReg - movs r0, 0x50 - movs r1, 0x81 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0xD - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_080790C8: .4byte 0x00003f1f - thumb_func_end sub_80790A0 - - thumb_func_start sub_80790CC -sub_80790CC: @ 80790CC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bhi _080791B0 - lsls r0, 2 - ldr r1, _080790E4 @ =_080790E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080790E4: .4byte _080790E8 - .align 2, 0 -_080790E8: - .4byte _080790FC - .4byte _08079104 - .4byte _0807913C - .4byte _08079170 - .4byte _08079198 -_080790FC: - ldrb r0, [r4, 0xC] - bl sub_8079A88 - b _0807918C -_08079104: - ldr r0, _08079138 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080791B0 - ldrb r0, [r4, 0xC] - bl sub_8079AA8 - adds r5, r0, 0 - cmp r5, 0 - bne _080791B0 - movs r0, 0xA - bl FadeOutMapMusic - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl sub_8079528 - b _0807918C - .align 2, 0 -_08079138: .4byte gPaletteFade -_0807913C: - bl IsNotWaitingForBGMStop - lsls r0, 24 - cmp r0, 0 - beq _080791B0 - ldr r0, _08079168 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080791B0 - ldr r0, _0807916C @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - strh r5, [r4, 0x4] - b _0807918C - .align 2, 0 -_08079168: .4byte gPaletteFade -_0807916C: .4byte sub_807941C -_08079170: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080791B0 - ldr r0, _08079194 @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0807918C: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _080791B0 - .align 2, 0 -_08079194: .4byte sub_807941C -_08079198: - bl sub_812B478 - ldr r0, _080791B8 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080791BC @ =sub_80EC864 - bl SetMainCallback2 -_080791B0: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080791B8: .4byte sub_8078C24 -_080791BC: .4byte sub_80EC864 - thumb_func_end sub_80790CC - - thumb_func_start sub_80791C0 -sub_80791C0: @ 80791C0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08079204 - cmp r0, 0x1 - bgt _080791D8 - cmp r0, 0 - beq _080791DE - b _080792A6 -_080791D8: - cmp r0, 0x2 - beq _08079248 - b _080792A6 -_080791DE: - ldr r0, _08079200 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080792A6 - .ifdef FIRERED - movs r0, 0x6 @ CHARIZARD - .else - movs r0, 0x3 @ VENUSAUR - .endif - movs r1, 0 - bl PlayCry1 - ldrb r0, [r4, 0xC] - bl sub_8079A88 - strh r5, [r4, 0x4] - b _08079238 - .align 2, 0 -_08079200: .4byte gPaletteFade -_08079204: - ldrh r1, [r4, 0x4] - movs r2, 0x4 - ldrsh r0, [r4, r2] - cmp r0, 0x59 - bgt _08079214 - adds r0, r1, 0x1 - strh r0, [r4, 0x4] - b _080792A6 -_08079214: - ldrb r0, [r4, 0xC] - bl sub_8079AA8 - cmp r0, 0 - bne _080792A6 - ldr r0, _08079240 @ =0x0fffffff - ldr r1, _08079244 @ =0x00007fff - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl sub_8079528 - movs r0, 0x4 - bl FadeOutBGM -_08079238: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _080792A6 - .align 2, 0 -_08079240: .4byte 0x0fffffff -_08079244: .4byte 0x00007fff -_08079248: - ldr r0, _080792B0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080792A6 - bl SeedRngAndSetTrainerId - bl SetSaveBlocksPointers - bl ResetMenuAndMonGlobals - bl Save_ResetSaveCounters - movs r0, 0 - bl Save_LoadGameData - ldr r0, _080792B4 @ =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _08079276 - cmp r0, 0x2 - bne _0807927A -_08079276: - bl Sav2_ClearSetDefault -_0807927A: - ldr r0, _080792B8 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x15] - lsls r0, 31 - lsrs r0, 31 - bl SetPokemonCryStereo - ldr r0, _080792BC @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - ldr r0, _080792C0 @ =sub_800C300 - bl SetMainCallback2 - ldr r0, _080792C4 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080792A6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080792B0: .4byte gPaletteFade -_080792B4: .4byte gSaveFileStatus -_080792B8: .4byte gSaveBlock2Ptr -_080792BC: .4byte gHeap -_080792C0: .4byte sub_800C300 -_080792C4: .4byte sub_8078C24 - thumb_func_end sub_80791C0 - thumb_func_start sub_80792C8 sub_80792C8: @ 80792C8 push {r4,r5,lr} diff --git a/data/title_screen.s b/data/title_screen.s deleted file mode 100644 index e0186afe3..000000000 --- a/data/title_screen.s +++ /dev/null @@ -1,88 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 -gUnknown_83BF64C:: @ 83BF64C - .incbin "data/graphics/title_screen/unk_83bf64c.4bpp.lz" - -gUnknown_83BF77C:: - .incbin "data/graphics/title_screen/unk_83bf77c.gbapal" - -gUnknown_83BF79C:: - .incbin "data/graphics/title_screen/unk_83bf79c.4bpp.lz" - -gUnknown_83BFA14:: - .incbin "data/graphics/title_screen/unk_83bfa14.4bpp.lz" - -gOamData_83BFAB4:: - .4byte 0x40000000, 0x00000c00 - -gSpriteAnims_83BFABC:: - obj_image_anim_frame 0x0, 0x3 - obj_image_anim_frame 0x4, 0x6 - obj_image_anim_frame 0x8, 0x6 - obj_image_anim_frame 0xc, 0x6 - obj_image_anim_frame 0x10, 0x6 - obj_image_anim_frame 0x14, 0x6 - obj_image_anim_frame 0x18, 0x6 - obj_image_anim_frame 0x1c, 0x6 - obj_image_anim_frame 0x20, 0x6 - obj_image_anim_frame 0x24, 0x6 - obj_image_anim_end - -gSpriteAnims_83BFAE8:: - obj_image_anim_frame 0x18, 0x6 - obj_image_anim_frame 0x1c, 0x6 - obj_image_anim_frame 0x20, 0x6 - obj_image_anim_frame 0x24, 0x6 - obj_image_anim_end - -gSpriteAnimTable_83BFAFC:: - .4byte gSpriteAnims_83BFABC - .4byte gSpriteAnims_83BFAE8 - -gUnknown_83BFB04:: @ 83BFB04 - spr_template 0, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_83BFB1C:: @ 83BFB1C - spr_template 1, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gOamData_83BFB34:: - .4byte 0xc0008000, 0x00000000 - -gUnknown_83BFB3C:: @ 83BFB3C - spr_template 2, 2, gOamData_83BFB34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gOamData_83BFB54:: - .4byte 0xc0000800, 0x00000000 - -gUnknown_83BFB5C:: @ 83BFB5C - spr_template 3, 2, gOamData_83BFB54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_83BFB74:: @ 83BFB74 - .4byte 0x000009f0 - .4byte 0x000011e5 - .4byte 0x000021da - .4byte 0x000031cf - -gUnknown_83BFB84:: @ 83BFB84 - .4byte sub_8078C9C - .4byte sub_8078D24 - .4byte sub_8078DA4 - .4byte sub_8078FC4 - .4byte sub_80790CC - .4byte sub_80791C0 - -gUnknown_83BFB9C:: @ 83BFB9C - obj_tiles gUnknown_83BF79C, 0x500, 0 - obj_tiles gUnknown_83BFA14, 0x500, 1 - obj_tiles gUnknown_8EAE4A8, 0x400, 2 - obj_tiles gUnknown_83BF64C, 0x800, 3 - -gUnknown_83BFBBC:: @ 83BFBBC - obj_pal gUnknown_83BF77C, 0 - obj_pal gUnknown_8EAE488, 2 - null_obj_pal - -gUnknown_83BFBD4:: @ 83BFBD4 - .incbin "baserom.gba", 0x3BFBD4, 0xF diff --git a/include/graphics.h b/include/graphics.h index e8503609e..bd25f4d1a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -961,4 +961,17 @@ extern const u8 gFile_graphics_items_icon_palettes_sapphire_palette[]; extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[]; +// title_screen +extern const u16 gUnknown_8EAB6C4[]; +extern const u8 gUnknown_8EAB8C4[]; +extern const u8 gUnknown_8EAD390[]; +extern const u16 gUnknown_8EAD5E8[]; +extern const u8 gUnknown_8EAD608[]; +extern const u8 gUnknown_8EADEE4[]; +extern const u16 gUnknown_8EAE094[]; +extern const u8 gUnknown_8EAE0B4[]; +extern const u8 gUnknown_8EAE374[]; +extern const u16 gUnknown_8EAE488[]; +extern const u8 gUnknown_8EAE4A8[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/intro.h b/include/intro.h new file mode 100644 index 000000000..f01c81a9e --- /dev/null +++ b/include/intro.h @@ -0,0 +1,6 @@ +#ifndef GUARD_INTRO_H +#define GUARD_INTRO_H + +void sub_80EC864(void); + +#endif //GUARD_INTRO_H diff --git a/include/main.h b/include/main.h index b66ff04d8..d326909ff 100644 --- a/include/main.h +++ b/include/main.h @@ -66,6 +66,7 @@ void RestoreSerialTimer3IntrHandlers(void); void SetVBlankCounter1Ptr(u32 *ptr); void DisableVBlankCounter1(void); void StartTimer1(void); +void SeedRngAndSetTrainerId(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; diff --git a/include/main_menu.h b/include/main_menu.h new file mode 100644 index 000000000..2a0cd81d5 --- /dev/null +++ b/include/main_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_MAIN_MENU_H +#define GUARD_MAIN_MENU_H + +void sub_800C300(void); + +#endif //GUARD_MAIN_MENU_H diff --git a/include/palette.h b/include/palette.h index 06b9b1f6f..feac1f11f 100644 --- a/include/palette.h +++ b/include/palette.h @@ -71,7 +71,10 @@ void BlendPalettes(u32, u8, u16); void BlendPalettesUnfaded(u32, u8, u16); void sub_80716F8(const u16 *, u16 *, u16, u8); void TintPalette_GrayScale(u16 *, u16); +void TintPalette_GrayScale2(u16 *, u16); void TintPalette_SepiaTone(u16 *, u16); +void sub_80717A8(u32, s8, u8, u8, u16, u8, u8); +bool32 sub_807185C(u8); extern struct PaletteFadeControl gPaletteFade; diff --git a/ld_script.txt b/ld_script.txt index 20e1db897..48e59a76a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -407,7 +407,6 @@ SECTIONS { data/map_events.o(.rodata); data/battle_anim_status_effects.o(.rodata); src/title_screen.o(.rodata); - data/title_screen.o(.rodata); data/field_weather.o(.rodata); data/data_835B488.o(.rodata); src/item_menu_icons.o(.rodata); diff --git a/src/title_screen.c b/src/title_screen.c index 9e779bb7b..32324ec7a 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -8,7 +8,32 @@ #include "new_menu_helpers.h" #include "m4a.h" #include "scanline_effect.h" +#include "graphics.h" +#include "help_system.h" +#include "intro.h" +#include "load_save.h" +#include "sound.h" +#include "new_game.h" +#include "save.h" +#include "main_menu.h" #include "constants/songs.h" +#include "constants/species.h" + +enum TitleScreenScene +{ + TITLESCREENSCENE_INIT = 0, + TITLESCREENSCENE_FLASHSPRITE, + TITLESCREENSCENE_FADEIN, + TITLESCREENSCENE_RUN, + TITLESCREENSCEEN_RESTART, + TITLESCREENSCENE_CRY +}; + +#if defined(FIRERED) +#define TITLE_SPECIES SPECIES_CHARIZARD +#elif defined(LEAFGREEN) +#define TITLE_SPECIES SPECIES_VENUSAUR +#endif EWRAM_DATA u8 gUnknown_2037F30 = 0; @@ -22,28 +47,190 @@ void sub_8078C9C(s16 * data); void sub_8078D24(s16 * data); void sub_8078DA4(s16 * data); void sub_8078FC4(s16 * data); +void sub_80790A0(void); void sub_80790CC(s16 * data); void sub_80791C0(s16 * data); -void sub_8079708(void); +void sub_80792C8(u8 taskId); +void sub_807941C(u8 taskId); +void sub_8079528(void); +void sub_8079550(s16 a0); void sub_8079620(void); void sub_8079648(void); +void sub_80796CC(void); +void sub_80796E8(void); +void sub_8079708(void); +void sub_8079840(u8 taskId); +u32 sub_80799F0(void); void sub_8079A10(s16 a0); +u8 sub_8079A40(void); +void sub_8079A88(u8 spriteId); +bool32 sub_8079AA8(u8 spriteId); +// bg3 const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); -extern const struct BgTemplate gUnknown_83BFB74[4]; -extern const void (*const gUnknown_83BFB84[])(s16 * data); - -/*graphics.h*/ -extern const u16 gUnknown_8EAB6C4[]; -extern const u8 gUnknown_8EAB8C4[]; -extern const u8 gUnknown_8EAD390[]; -extern const u16 gUnknown_8EAD5E8[]; -extern const u8 gUnknown_8EAD608[]; -extern const u8 gUnknown_8EADEE4[]; -extern const u16 gUnknown_8EAE094[]; -extern const u8 gUnknown_8EAE0B4[]; -extern const u8 gUnknown_8EAE374[]; + +//sprites +const u8 gUnknown_83BF64C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); +const u16 gUnknown_83BF77C[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); +const u8 gUnknown_83BF79C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); +const u8 gUnknown_83BFA14[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); + +const struct OamData gOamData_83BFAB4 = { + .objMode = ST_OAM_OBJ_NORMAL, + .shape = ST_OAM_SQUARE, + .size = ST_OAM_SIZE_1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0 +}; + +const union AnimCmd gSpriteAnims_83BFABC[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 6), + ANIMCMD_FRAME(0x08, 6), + ANIMCMD_FRAME(0x0c, 6), + ANIMCMD_FRAME(0x10, 6), + ANIMCMD_FRAME(0x14, 6), + ANIMCMD_FRAME(0x18, 6), + ANIMCMD_FRAME(0x1c, 6), + ANIMCMD_FRAME(0x20, 6), + ANIMCMD_FRAME(0x24, 6), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnims_83BFAE8[] = { + ANIMCMD_FRAME(0x18, 6), + ANIMCMD_FRAME(0x1c, 6), + ANIMCMD_FRAME(0x20, 6), + ANIMCMD_FRAME(0x24, 6), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BFAFC[] = { + gSpriteAnims_83BFABC, + gSpriteAnims_83BFAE8 +}; + +const struct SpriteTemplate gUnknown_83BFB04 = { + .tileTag = 0, + .paletteTag = 0, + .oam = &gOamData_83BFAB4, + .anims = gSpriteAnimTable_83BFAFC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpriteTemplate gUnknown_83BFB1C = { + .tileTag = 1, + .paletteTag = 0, + .oam = &gOamData_83BFAB4, + .anims = gSpriteAnimTable_83BFAFC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_83BFB34 = { + .objMode = ST_OAM_OBJ_NORMAL, + .shape = ST_OAM_V_RECTANGLE, + .size = ST_OAM_SIZE_3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gUnknown_83BFB3C = { + .tileTag = 2, + .paletteTag = 2, + .oam = &gOamData_83BFB34, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_83BFB54 = { + .objMode = ST_OAM_OBJ_WINDOW, + .shape = ST_OAM_SQUARE, + .size = ST_OAM_SIZE_3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gUnknown_83BFB5C = { + .tileTag = 3, + .paletteTag = 2, + .oam = &gOamData_83BFB54, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct BgTemplate gUnknown_83BFB74[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 1, // 8bpp + .priority = 0, + .baseTile = 0 + }, { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 1, + .baseTile = 0 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 2, + .baseTile = 0 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 3, + .baseTile = 0 + } +}; + +void (*const gUnknown_83BFB84[])(s16 * data) = { + sub_8078C9C, + sub_8078D24, + sub_8078DA4, + sub_8078FC4, + sub_80790CC, + sub_80791C0 +}; + +const struct CompressedSpriteSheet gUnknown_83BFB9C[] = { + {(const void *)gUnknown_83BF79C, 0x500, 0}, + {(const void *)gUnknown_83BFA14, 0x500, 1}, + {(const void *)gUnknown_8EAE4A8, 0x400, 2}, + {(const void *)gUnknown_83BF64C, 0x800, 3} +}; + +const struct SpritePalette gUnknown_83BFBBC[] = { + {gUnknown_83BF77C, 0}, + {gUnknown_8EAE488, 2}, + {} +}; + +const u8 gUnknown_83BFBD4[] = { + 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90 +}; void CB2_InitTitleScreen(void) { @@ -155,7 +342,7 @@ void sub_8078C24(u8 taskId) sub_8079620(); sub_8079648(); sub_8079A10(data[5]); - sub_8078C90(data, 3); + sub_8078C90(data, TITLESCREENSCENE_RUN); } else { @@ -188,5 +375,254 @@ void sub_8078C9C(s16 * data) ScanlineEffect_SetParams(params); - sub_8078C90(data, 1); + sub_8078C90(data, TITLESCREENSCENE_FLASHSPRITE); +} + +void sub_8078D24(s16 * data) +{ + switch (data[1]) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 0); + data[2] = 0x80; + sub_8079550(0x80); + data[1]++; + break; + case 1: + data[2] -= 4; + sub_8079550(data[2]); + if (data[2] < 0) + { + gScanlineEffect.state = 3; + data[1]++; + } + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + sub_8078C90(data, TITLESCREENSCENE_FADEIN); + } +} + +void sub_8078DA4(s16 * data) +{ + u32 r4; + switch (data[1]) + { + case 0: + data[2] = 0; + data[1]++; + break; + case 1: + data[2]++; + if (data[2] > 10) + { + TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 0x10); + BeginNormalPaletteFade(0x00002000, 9, 0x10, 0, RGB_BLACK); + data[1]++; + } + break; + case 2: + if (!gPaletteFade.active) + { + data[2] = 0; + data[1]++; + } + break; + case 3: + data[2]++; + if (data[2] > 36) + { + CreateTask(sub_80792C8, 3); + sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + data[2] = 0; + data[1]++; + } + break; + case 4: + if (!sub_807185C(0)) + { + sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 5: + data[2]++; + if (data[2] > 20) + { + data[2] = 0; + sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 6: + if (!sub_807185C(0)) + { + sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 7: + data[2]++; + if (data[2] > 20) + { + data[2] = 0; + sub_80717A8(0x2000, -3, 0x00, 0x10, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 8: + if (!sub_807185C(0)) + { + data[5] = 1; + r4 = (0x10000 << sub_80799F0()) | 0x00001FFF; + BlendPalettes(r4, 0x10, RGB(30, 30, 31)); + BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); + ShowBg(0); + CpuCopy16(gUnknown_8EAD5E8, gPlttBufferUnfaded + 0xD0, 0x20); + sub_80717A8(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 9: + if (!sub_807185C(0) && !gPaletteFade.active) + { + sub_8078C90(data, TITLESCREENSCENE_RUN); + } + break; + } +} + +#define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP) +#define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON) + +void sub_8078FC4(s16 * data) +{ + switch (data[1]) + { + case 0: + HelpSystem_SetSomeVariable2(1); + CreateTask(sub_807941C, 0); + CreateTask(sub_8079840, 5); + sub_80790A0(); + data[6] = sub_8079A40(); + sub_812B484(); + data[1]++; + // fallthrough + case 1: + if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) + { + sub_8079A88(data[6]); + DestroyTask(FindTaskIdByFunc(sub_8078C24)); + SetMainCallback2(sub_80796CC); + } + else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) + { + sub_8079A88(data[6]); + DestroyTask(FindTaskIdByFunc(sub_8078C24)); + SetMainCallback2(sub_80796E8); + } + else if (JOY_NEW(A_BUTTON | START_BUTTON)) + { + sub_8078C90(data, TITLESCREENSCENE_CRY); + } + else if (!FuncIsActiveTask(sub_8078BEC)) + { + sub_8078C90(data, TITLESCREENSCEEN_RESTART); + } + break; + } +} + +void sub_80790A0(void) +{ + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 13); +} + +void sub_80790CC(s16 * data) +{ + switch (data[1]) + { + case 0: + sub_8079A88(data[6]); + data[1]++; + break; + case 1: + if (!gPaletteFade.active && !sub_8079AA8(data[6])) + { + FadeOutMapMusic(10); + BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK); + sub_8079528(); + data[1]++; + } + break; + case 2: + if (IsNotWaitingForBGMStop() && !gPaletteFade.active) + { + DestroyTask(FindTaskIdByFunc(sub_807941C)); + data[2] = 0; + data[1]++; + } + break; + case 3: + data[2]++; + if (data[2] >= 20) + { + DestroyTask(FindTaskIdByFunc(sub_807941C)); + data[1]++; + } + break; + case 4: + sub_812B478(); + DestroyTask(FindTaskIdByFunc(sub_8078C24)); + SetMainCallback2(sub_80EC864); + break; + } +} + +void sub_80791C0(s16 * data) +{ + switch (data[1]) + { + case 0: + if (!gPaletteFade.active) + { + PlayCry1(TITLE_SPECIES, 0); + sub_8079A88(data[6]); + data[2] = 0; + data[1]++; + } + break; + case 1: + if (data[2] < 90) + data[2]++; + else if (!sub_8079AA8(data[6])) + { + BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE); + sub_8079528(); + FadeOutBGM(4); + data[1]++; + } + break; + case 2: + if (!gPaletteFade.active) + { + SeedRngAndSetTrainerId(); + SetSaveBlocksPointers(); + ResetMenuAndMonGlobals(); + Save_ResetSaveCounters(); + Save_LoadGameData(0); + if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_INVALID) + Sav2_ClearSetDefault(); + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + InitHeap(gHeap, HEAP_SIZE); + SetMainCallback2(sub_800C300); + DestroyTask(FindTaskIdByFunc(sub_8078C24)); + } + break; + } } -- cgit v1.2.3 From c3f95c1cbb7827c09d86fa0a6b481ae0fa3c37d5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 31 Jul 2019 13:50:47 -0400 Subject: title_screen: through sub_8079730 --- asm/title_screen.s | 636 --------------------------------------- include/berry_fix_program.h | 6 + include/clear_save_data_screen.h | 6 + include/graphics.h | 2 +- include/palette.h | 1 + src/title_screen.c | 231 ++++++++++++++ 6 files changed, 245 insertions(+), 637 deletions(-) create mode 100644 include/berry_fix_program.h create mode 100644 include/clear_save_data_screen.h diff --git a/asm/title_screen.s b/asm/title_screen.s index 47a1b30a9..686ecbbcd 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -5,642 +5,6 @@ .text - thumb_func_start sub_80792C8 -sub_80792C8: @ 80792C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080792EC @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080792E2 - b _08079414 -_080792E2: - lsls r0, 2 - ldr r1, _080792F0 @ =_080792F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080792EC: .4byte gTasks+0x8 -_080792F0: .4byte _080792F4 - .align 2, 0 -_080792F4: - .4byte _0807930C - .4byte _08079344 - .4byte _08079368 - .4byte _0807937C - .4byte _080793BC - .4byte _08079404 -_0807930C: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x37 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - movs r2, 0 - bl BlendPalettes - b _080793AA -_08079344: - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x4] - cmp r0, 0xEF - ble _08079364 - movs r0, 0xF0 - strh r0, [r4, 0x4] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_08079364: - ldrh r1, [r4, 0x4] - b _080793F6 -_08079368: - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _08079414 - movs r0, 0 - strh r0, [r4, 0x6] - b _080793AA -_0807937C: - movs r0, 0x4A - movs r1, 0x3B - bl SetGpuReg - ldr r1, _080793B4 @ =0x0000f0f0 - movs r0, 0x40 - bl SetGpuReg - ldr r1, _080793B8 @ =0xffff1000 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgX - movs r0, 0x80 - lsls r0, 8 - movs r1, 0 - movs r2, 0 - bl BlendPalettes - movs r1, 0xF0 - lsls r1, 4 - adds r0, r1, 0 - strh r0, [r4, 0x2] -_080793AA: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08079414 - .align 2, 0 -_080793B4: .4byte 0x0000f0f0 -_080793B8: .4byte 0xffff1000 -_080793BC: - ldr r1, _08079400 @ =0xfffffe80 - adds r0, r1, 0 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x4] - cmp r0, 0 - bgt _080793DA - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_080793DA: - movs r0, 0x4 - ldrsh r1, [r4, r0] - negs r1, r1 - lsls r1, 8 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r4, 0x4] - lsls r1, 8 - movs r0, 0xF0 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 -_080793F6: - movs r0, 0x40 - bl SetGpuReg - b _08079414 - .align 2, 0 -_08079400: .4byte 0xfffffe80 -_08079404: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - adds r0, r5, 0 - bl DestroyTask -_08079414: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80792C8 - - thumb_func_start sub_807941C -sub_807941C: @ 807941C - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _08079460 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08079444 - ldr r0, _08079464 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08079444 - movs r0, 0x1 - strh r0, [r5, 0x1C] -_08079444: - movs r3, 0x1C - ldrsh r0, [r5, r3] - cmp r0, 0 - beq _08079468 - ldr r0, _08079464 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08079468 - adds r0, r2, 0 - bl DestroyTask - b _08079510 - .align 2, 0 -_08079460: .4byte gTasks+0x8 -_08079464: .4byte gPaletteFade -_08079468: - movs r1, 0x2 - ldrsh r0, [r5, r1] - ldrh r2, [r5, 0x2] - cmp r0, 0 - bne _08079476 - movs r0, 0x3C - b _08079478 -_08079476: - movs r0, 0x1E -_08079478: - strh r0, [r5, 0x4] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x4 - ldrsh r1, [r5, r3] - cmp r0, r1 - blt _08079510 - movs r0, 0 - strh r0, [r5] - movs r0, 0x1 - eors r0, r2 - strh r0, [r5, 0x2] - lsls r0, 16 - cmp r0, 0 - beq _080794CC - ldr r2, _080794C0 @ =gPlttBufferUnfaded - ldr r4, _080794C4 @ =gUnknown_8EAE094 - ldr r1, _080794C8 @ =gPlttBufferFaded - movs r0, 0xF1 - lsls r0, 1 - adds r1, r0 - adds r2, r0 - movs r3, 0x4 -_080794AC: - ldrh r0, [r4, 0xC] - strh r0, [r2] - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r1, 0x2 - adds r2, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080794AC - b _080794F2 - .align 2, 0 -_080794C0: .4byte gPlttBufferUnfaded -_080794C4: .4byte gUnknown_8EAE094 -_080794C8: .4byte gPlttBufferFaded -_080794CC: - movs r3, 0 - ldr r2, _08079518 @ =gPlttBufferUnfaded - ldr r0, _0807951C @ =gUnknown_8EAE094 - ldr r1, _08079520 @ =gPlttBufferFaded - adds r4, r0, 0x2 - movs r0, 0xF1 - lsls r0, 1 - adds r1, r0 - adds r2, r0 -_080794DE: - ldrh r0, [r4] - strh r0, [r2] - ldrh r0, [r4] - strh r0, [r1] - adds r4, 0x2 - adds r1, 0x2 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x4 - ble _080794DE -_080794F2: - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08079510 - movs r0, 0x80 - lsls r0, 8 - ldr r2, _08079524 @ =gPaletteFade - ldrh r1, [r2, 0x4] - lsls r1, 21 - lsrs r1, 27 - ldrh r2, [r2, 0x6] - lsls r2, 17 - lsrs r2, 17 - bl BlendPalettes -_08079510: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079518: .4byte gPlttBufferUnfaded -_0807951C: .4byte gUnknown_8EAE094 -_08079520: .4byte gPlttBufferFaded -_08079524: .4byte gPaletteFade - thumb_func_end sub_807941C - - thumb_func_start sub_8079528 -sub_8079528: @ 8079528 - push {lr} - ldr r0, _08079548 @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807954C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x26] - pop {r0} - bx r0 - .align 2, 0 -_08079548: .4byte sub_807941C -_0807954C: .4byte gTasks - thumb_func_end sub_8079528 - - thumb_func_start sub_8079550 -sub_8079550: @ 8079550 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r5, r0, 16 - asrs r4, r5, 16 - cmp r4, 0 - blt _08079574 - ldr r3, _08079618 @ =gScanlineEffectRegBuffers - lsls r2, r4, 1 - ldr r0, _0807961C @ =gScanlineEffect - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r3 - movs r0, 0x10 - strh r0, [r2] -_08079574: - movs r3, 0 - mov r8, r5 - adds r6, r4, 0 - ldr r0, _08079618 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _0807961C @ =gScanlineEffect - movs r5, 0xF - lsls r2, r6, 1 - adds r4, r2, 0 -_08079586: - adds r0, r6, r3 - cmp r0, 0 - blt _0807959A - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r0, r4, r0 - add r0, r12 - strh r5, [r0] -_0807959A: - subs r0, r6, r3 - cmp r0, 0 - blt _080795AE - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r0, r2, r0 - add r0, r12 - strh r5, [r0] -_080795AE: - subs r5, 0x1 - subs r2, 0x2 - adds r4, 0x2 - adds r3, 0x1 - cmp r3, 0xF - ble _08079586 - mov r1, r8 - asrs r0, r1, 16 - adds r3, r0, 0 - adds r3, 0x10 - cmp r3, 0x9F - bgt _080795E6 - ldr r6, _08079618 @ =gScanlineEffectRegBuffers - ldr r5, _0807961C @ =gScanlineEffect - movs r4, 0 -_080795CC: - cmp r3, 0 - blt _080795E0 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - strh r4, [r2] -_080795E0: - adds r3, 0x1 - cmp r3, 0x9F - ble _080795CC -_080795E6: - mov r1, r8 - asrs r0, r1, 16 - adds r3, r0, 0 - subs r3, 0x10 - cmp r3, 0 - blt _0807960E - ldr r6, _08079618 @ =gScanlineEffectRegBuffers - ldr r5, _0807961C @ =gScanlineEffect - movs r4, 0 -_080795F8: - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - strh r4, [r2] - subs r3, 0x1 - cmp r3, 0 - bge _080795F8 -_0807960E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079618: .4byte gScanlineEffectRegBuffers -_0807961C: .4byte gScanlineEffect - thumb_func_end sub_8079550 - - thumb_func_start sub_8079620 -sub_8079620: @ 8079620 - push {lr} - ldr r1, _08079644 @ =gScanlineEffect - ldrb r0, [r1, 0x15] - cmp r0, 0 - beq _0807962E - movs r0, 0x3 - strb r0, [r1, 0x15] -_0807962E: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_08079644: .4byte gScanlineEffect - thumb_func_end sub_8079620 - - thumb_func_start sub_8079648 -sub_8079648: @ 8079648 - push {r4,lr} - ldr r0, _080796BC @ =sub_80792C8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0807965C - bl DestroyTask -_0807965C: - bl sub_8071898 - bl ResetPaletteFadeControl - ldr r0, _080796C0 @ =gUnknown_8EAB6C4 - movs r2, 0xD0 - lsls r2, 1 - movs r1, 0 - bl LoadPalette - ldr r0, _080796C4 @ =gUnknown_8EAD5E8 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - ldr r4, _080796C8 @ =gUnknown_8EAE094 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - bl ResetBgPositions - movs r1, 0xE0 - lsls r1, 8 - movs r0, 0 - bl ClearGpuRegBits - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080796BC: .4byte sub_80792C8 -_080796C0: .4byte gUnknown_8EAB6C4 -_080796C4: .4byte gUnknown_8EAD5E8 -_080796C8: .4byte gUnknown_8EAE094 - thumb_func_end sub_8079648 - - thumb_func_start sub_80796CC -sub_80796CC: @ 80796CC - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080796DE - ldr r0, _080796E4 @ =sub_80F55A0 - bl SetMainCallback2 -_080796DE: - pop {r0} - bx r0 - .align 2, 0 -_080796E4: .4byte sub_80F55A0 - thumb_func_end sub_80796CC - - thumb_func_start sub_80796E8 -sub_80796E8: @ 80796E8 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080796FE - bl m4aMPlayAllStop - ldr r0, _08079704 @ =mb_berry_fix_serve - bl SetMainCallback2 -_080796FE: - pop {r0} - bx r0 - .align 2, 0 -_08079704: .4byte mb_berry_fix_serve - thumb_func_end sub_80796E8 - - thumb_func_start sub_8079708 -sub_8079708: @ 8079708 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _08079728 @ =gUnknown_83BFB9C -_0807970E: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bls _0807970E - ldr r0, _0807972C @ =gUnknown_83BFBBC - bl LoadSpritePalettes - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079728: .4byte gUnknown_83BFB9C -_0807972C: .4byte gUnknown_83BFBBC - thumb_func_end sub_8079708 - - thumb_func_start sub_8079730 -sub_8079730: @ 8079730 - push {r4,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x2E - ldrh r0, [r4, 0x2E] - ldrh r1, [r2, 0x2] - subs r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x20] - movs r1, 0x8 - negs r1, r1 - cmp r0, r1 - blt _08079774 - ldrh r0, [r2, 0x6] - ldrh r1, [r2, 0x4] - adds r0, r1 - strh r0, [r2, 0x4] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - subs r0, 0x10 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB8 - bhi _08079774 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0807977C -_08079774: - adds r0, r4, 0 - bl DestroySprite - b _080797A6 -_0807977C: - ldrh r1, [r2, 0xE] - movs r3, 0xE - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _080797A6 - subs r0, r1, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080797A6 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_080797A6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8079730 - thumb_func_start sub_80797AC sub_80797AC: @ 80797AC push {r4-r7,lr} diff --git a/include/berry_fix_program.h b/include/berry_fix_program.h new file mode 100644 index 000000000..fc0748fd9 --- /dev/null +++ b/include/berry_fix_program.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BERRY_FIX_PROGRAM_H +#define GUARD_BERRY_FIX_PROGRAM_H + +void mb_berry_fix_serve(void); + +#endif //GUARD_BERRY_FIX_PROGRAM_H diff --git a/include/clear_save_data_screen.h b/include/clear_save_data_screen.h new file mode 100644 index 000000000..7edf7d03e --- /dev/null +++ b/include/clear_save_data_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_CLEAR_SAVE_DATA_SCREEN_H +#define GUARD_CLEAR_SAVE_DATA_SCREEN_H + +void sub_80F55A0(void); + +#endif //GUARD_CLEAR_SAVE_DATA_SCREEN_H diff --git a/include/graphics.h b/include/graphics.h index bd25f4d1a..dd91731b6 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -968,7 +968,7 @@ extern const u8 gUnknown_8EAD390[]; extern const u16 gUnknown_8EAD5E8[]; extern const u8 gUnknown_8EAD608[]; extern const u8 gUnknown_8EADEE4[]; -extern const u16 gUnknown_8EAE094[]; +extern u16 gUnknown_8EAE094[]; // If this is const, title_screen.c does not match extern const u8 gUnknown_8EAE0B4[]; extern const u8 gUnknown_8EAE374[]; extern const u16 gUnknown_8EAE488[]; diff --git a/include/palette.h b/include/palette.h index feac1f11f..300236d1e 100644 --- a/include/palette.h +++ b/include/palette.h @@ -75,6 +75,7 @@ void TintPalette_GrayScale2(u16 *, u16); void TintPalette_SepiaTone(u16 *, u16); void sub_80717A8(u32, s8, u8, u8, u16, u8, u8); bool32 sub_807185C(u8); +void sub_8071898(void); extern struct PaletteFadeControl gPaletteFade; diff --git a/src/title_screen.c b/src/title_screen.c index 32324ec7a..d4c861841 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -16,6 +16,9 @@ #include "new_game.h" #include "save.h" #include "main_menu.h" +#include "clear_save_data_screen.h" +#include "berry_fix_program.h" +#include "decompress.h" #include "constants/songs.h" #include "constants/species.h" @@ -626,3 +629,231 @@ void sub_80791C0(s16 * data) break; } } + +void sub_80792C8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0x00, 0x3F)); + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x00, 0x37)); + SetGpuReg(REG_OFFSET_WIN0V, 0xA0); + SetGpuReg(REG_OFFSET_WIN0H, 0x00); + BlendPalettes(0x00004000, 0, RGB_BLACK); + data[0]++; + break; + case 1: + data[1] += 0x180; + data[2] = data[1] >> 4; + if (data[2] >= 0xF0) + { + data[2] = 0xF0; + data[0]++; + } + SetGpuReg(REG_OFFSET_WIN0H, data[2]); + break; + case 2: + data[3]++; + if (data[3] >= 10) + { + data[3] = 0; + data[0]++; + } + break; + case 3: + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 0x3B)); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0F0); + ChangeBgX(2, -0xF000, 0); + BlendPalettes(0x00008000, 0, RGB_BLACK); + data[1] = 0xF00; + data[0]++; + break; + case 4: + data[1] -= 0x180; + data[2] = data[1] >> 4; + if (data[2] <= 0) + { + data[2] = 0; + data[0]++; + } + ChangeBgX(2, -data[2] << 8, 0); + SetGpuReg(REG_OFFSET_WIN0H, (data[2] << 8) | 0xF0); + break; + case 5: + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; + } +} + +void sub_807941C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 i; + + if (data[15] && gPaletteFade.active) + data[14] = 1; + if (data[14] && !gPaletteFade.active) + DestroyTask(taskId); + else + { + if (!data[1]) + data[2] = 60; + else + data[2] = 30; + data[0]++; + if (data[0] >= data[2]) + { + data[0] = 0; + data[1] ^= 1; + if (data[1]) + { + for (i = 0; i < 5; i++) + { + gPlttBufferUnfaded[0xF1 + i] = gUnknown_8EAE094[6]; + gPlttBufferFaded[0xF1 + i] = gUnknown_8EAE094[6]; + } + } + else + { + for (i = 0; i < 5; i++) + { + gPlttBufferUnfaded[0xF1 + i] = gUnknown_8EAE094[1 + i]; + gPlttBufferFaded[0xF1 + i] = gUnknown_8EAE094[1 + i]; + } + } + if (data[14]) + { + BlendPalettes(0x00008000, gPaletteFade.y, gPaletteFade.blendColor); + } + } + } +} + +void sub_8079528(void) +{ + u8 taskId = FindTaskIdByFunc(sub_807941C); + gTasks[taskId].data[15] = TRUE; +} + +void sub_8079550(s16 a0) +{ + s32 i; + + if (a0 >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0] = 16; + } + + for (i = 0; i < 16; i++) + { + if (a0 + i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 + i] = 15 - i; + } + if (a0 - i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 - i] = 15 - i; + } + } + for (i = a0 + 16; i < 160; i++) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; + } + } + for (i = a0 - 16; i >= 0; i--) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; + } + } +} + +void sub_8079620(void) +{ + if (gScanlineEffect.state) + gScanlineEffect.state = 3; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); +} + +void sub_8079648(void) +{ + u8 taskId; + + taskId = FindTaskIdByFunc(sub_80792C8); + if (taskId != 0xFF) + DestroyTask(taskId); + + sub_8071898(); + ResetPaletteFadeControl(); + LoadPalette(gUnknown_8EAB6C4, 0x00, 0x1A0); + LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20); + LoadPalette(gUnknown_8EAE094, 0xF0, 0x20); + LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); + ResetBgPositions(); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + ShowBg(1); + ShowBg(2); + ShowBg(0); + ShowBg(3); +} + +void sub_80796CC(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(sub_80F55A0); +} + +void sub_80796E8(void) +{ + if (!UpdatePaletteFade()) + { + m4aMPlayAllStop(); + SetMainCallback2(mb_berry_fix_serve); + } +} + +void sub_8079708(void) +{ + s32 i; + + for (i = 0; i < NELEMS(gUnknown_83BFB9C); i++) + LoadCompressedSpriteSheet(&gUnknown_83BFB9C[i]); + LoadSpritePalettes(gUnknown_83BFBBC); +} + +void sub_8079730(struct Sprite * sprite) +{ + s16 * data = sprite->data; + sprite->data[0] -= data[1]; + sprite->pos1.x = sprite->data[0] >> 4; + if (sprite->pos1.x < -8) + { + DestroySprite(sprite); + return; + } + data[2] += data[3]; + sprite->pos1.y = data[2] >> 4; + if (sprite->pos1.y < 0x10 || sprite->pos1.y > 0xc8) + { + DestroySprite(sprite); + return; + } + if (sprite->animEnded) + { + DestroySprite(sprite); + return; + } + if (data[7] != 0 && --data[7] == 0) + { + StartSpriteAnim(sprite, 0); + sprite->invisible = FALSE; + } +} -- cgit v1.2.3 From 11dd5fa23f44a6666a43b1f8ad5a2cb264117460 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 31 Jul 2019 15:08:46 -0400 Subject: finish title_screen; frlg split in sub_8079730 --- asm/title_screen.s | 525 ----------------------------------------------------- ld_script.txt | 1 - src/title_screen.c | 199 +++++++++++++++++++- 3 files changed, 198 insertions(+), 527 deletions(-) delete mode 100644 asm/title_screen.s diff --git a/asm/title_screen.s b/asm/title_screen.s deleted file mode 100644 index 686ecbbcd..000000000 --- a/asm/title_screen.s +++ /dev/null @@ -1,525 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80797AC -sub_80797AC: @ 80797AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - mov r8, r2 - adds r7, r3, 0 - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _080797C8 - ldr r0, _080797C4 @ =gUnknown_83BFB04 - b _080797CA - .align 2, 0 -_080797C4: .4byte gUnknown_83BFB04 -_080797C8: - ldr r0, _08079828 @ =gUnknown_83BFB1C -_080797CA: - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r5, 16 - asrs r2, 16 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08079834 - ldr r0, _0807982C @ =gSprites - mov r12, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r6, r0, 2 - mov r1, r12 - adds r2, r6, r1 - lsls r0, r4, 4 - movs r1, 0 - strh r0, [r2, 0x2E] - mov r0, r8 - strh r0, [r2, 0x30] - lsls r0, r5, 4 - strh r0, [r2, 0x32] - strh r7, [r2, 0x34] - strh r1, [r2, 0x36] - mov r3, r8 - muls r3, r7 - adds r0, r3, 0 - cmp r3, 0 - bge _0807980C - adds r0, 0xF -_0807980C: - asrs r0, 4 - lsls r0, 4 - subs r0, r3, r0 - strh r0, [r2, 0x38] - mov r1, sp - ldrh r1, [r1, 0x18] - strh r1, [r2, 0x3A] - mov r0, r12 - adds r0, 0x1C - adds r0, r6, r0 - ldr r1, _08079830 @ =sub_8079730 - str r1, [r0] - movs r0, 0x1 - b _08079836 - .align 2, 0 -_08079828: .4byte gUnknown_83BFB1C -_0807982C: .4byte gSprites -_08079830: .4byte sub_8079730 -_08079834: - movs r0, 0 -_08079836: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80797AC - - thumb_func_start sub_8079840 -sub_8079840: @ 8079840 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08079868 @ =gTasks+0x8 - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _0807986C - cmp r0, 0x1 - beq _08079884 - b _0807998A - .align 2, 0 -_08079868: .4byte gTasks+0x8 -_0807986C: - ldr r2, _08079880 @ =0x00007878 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_807999C - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] - b _0807998A - .align 2, 0 -_08079880: .4byte 0x00007878 -_08079884: - ldrh r0, [r6, 0x2] - adds r0, 0x1 - strh r0, [r6, 0x2] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x4 - ldrsh r1, [r6, r2] - cmp r0, r1 - blt _0807998A - movs r0, 0 - strh r0, [r6, 0x2] - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - movs r0, 0x12 - strh r0, [r6, 0x4] - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - subs r1, 0x2 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - adds r7, r1, 0 - subs r7, 0x10 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, 0x74 - mov r9, r0 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - movs r2, 0 - lsls r0, 16 - movs r1, 0xF0 - lsls r1, 12 - ands r1, r0 - lsrs r1, 16 - cmp r1, 0x7 - bls _0807991C - movs r2, 0x1 -_0807991C: - str r2, [sp] - adds r0, r4, 0 - mov r1, r9 - mov r2, r8 - adds r3, r7, 0 - bl sub_80797AC - movs r4, 0 -_0807992C: - ldr r1, _08079998 @ =gUnknown_83BFBD4 - adds r1, r4, r1 - movs r2, 0xA - ldrsh r0, [r6, r2] - ldrb r1, [r1] - adds r0, r1 - movs r1, 0x1 - str r1, [sp] - mov r1, r9 - mov r2, r8 - adds r3, r7, 0 - bl sub_80797AC - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - subs r1, 0x2 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - adds r7, r1, 0 - subs r7, 0x10 - adds r4, 0x1 - cmp r4, 0xE - ble _0807992C - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _0807998A - movs r0, 0 - strh r0, [r6, 0xA] -_0807998A: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079998: .4byte gUnknown_83BFBD4 - thumb_func_end sub_8079840 - - thumb_func_start sub_807999C -sub_807999C: @ 807999C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 16 - lsrs r2, 16 - bl SetWordTaskArg - pop {r0} - bx r0 - thumb_func_end sub_807999C - - thumb_func_start sub_80799B4 -sub_80799B4: @ 80799B4 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl GetWordTaskArg - adds r6, r0, 0 - ldr r0, _080799E8 @ =0x41c64e6d - muls r0, r6 - ldr r1, _080799EC @ =0x00006073 - adds r6, r0, r1 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl SetWordTaskArg - lsrs r0, r6, 16 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080799E8: .4byte 0x41c64e6d -_080799EC: .4byte 0x00006073 - thumb_func_end sub_80799B4 - - thumb_func_start sub_80799F0 -sub_80799F0: @ 80799F0 - push {lr} - ldr r0, _08079A0C @ =gUnknown_83BFB3C - movs r1, 0x18 - movs r2, 0x90 - movs r3, 0 - bl CreateSprite - movs r0, 0x2 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08079A0C: .4byte gUnknown_83BFB3C - thumb_func_end sub_80799F0 - - thumb_func_start sub_8079A10 -sub_8079A10: @ 8079A10 - push {lr} - cmp r0, 0 - beq _08079A38 - movs r0, 0x2 - bl IndexOfSpritePaletteTag - adds r1, r0, 0 - lsls r1, 24 - ldr r0, _08079A34 @ =gUnknown_8EAE488 - lsrs r1, 4 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - b _08079A3C - .align 2, 0 -_08079A34: .4byte gUnknown_8EAE488 -_08079A38: - bl sub_80799F0 -_08079A3C: - pop {r0} - bx r0 - thumb_func_end sub_8079A10 - - thumb_func_start sub_8079A40 -sub_8079A40: @ 8079A40 - push {r4,lr} - ldr r0, _08079A7C @ =gUnknown_83BFB5C - movs r1, 0x20 - negs r1, r1 - movs r2, 0x1B - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - adds r4, r1, 0 - cmp r1, 0x40 - beq _08079A74 - ldr r3, _08079A80 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x1C - adds r1, r0, r1 - ldr r2, _08079A84 @ =sub_8079AD8 - str r2, [r1] - adds r0, r3 - movs r1, 0x87 - lsls r1, 2 - strh r1, [r0, 0x30] -_08079A74: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08079A7C: .4byte gUnknown_83BFB5C -_08079A80: .4byte gSprites -_08079A84: .4byte sub_8079AD8 - thumb_func_end sub_8079A40 - - thumb_func_start sub_8079A88 -sub_8079A88: @ 8079A88 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _08079AA0 - ldr r0, _08079AA4 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x32] -_08079AA0: - pop {r0} - bx r0 - .align 2, 0 -_08079AA4: .4byte gSprites - thumb_func_end sub_8079A88 - - thumb_func_start sub_8079AA8 -sub_8079AA8: @ 8079AA8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - bne _08079AB6 - movs r0, 0 - b _08079ACE -_08079AB6: - ldr r1, _08079AD4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r2, 0x2E - ldrsh r1, [r0, r2] - movs r0, 0x2 - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 -_08079ACE: - pop {r1} - bx r1 - .align 2, 0 -_08079AD4: .4byte gSprites - thumb_func_end sub_8079AA8 - - thumb_func_start sub_8079AD8 -sub_8079AD8: @ 8079AD8 - push {lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x1 - beq _08079B24 - cmp r0, 0x1 - bgt _08079B74 - cmp r0, 0 - bne _08079B74 - movs r1, 0x32 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08079B04 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x2 - strh r0, [r2, 0x2E] -_08079B04: - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08079B74 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r3] - movs r0, 0x1 - strh r0, [r2, 0x2E] - b _08079B74 -_08079B24: - ldrh r0, [r2, 0x20] - adds r0, 0x9 - strh r0, [r2, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x43 - bne _08079B38 - ldrh r0, [r2, 0x22] - subs r0, 0x7 - strh r0, [r2, 0x22] -_08079B38: - movs r0, 0x20 - ldrsh r1, [r2, r0] - cmp r1, 0x94 - bne _08079B46 - ldrh r0, [r2, 0x22] - adds r0, 0x7 - strh r0, [r2, 0x22] -_08079B46: - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - ble _08079B74 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x32 - ldrsh r1, [r2, r0] - cmp r1, 0 - beq _08079B68 - movs r0, 0x2 - strh r0, [r2, 0x2E] - b _08079B74 -_08079B68: - ldr r0, _08079B78 @ =0x0000ffe0 - strh r0, [r2, 0x20] - movs r0, 0x87 - lsls r0, 2 - strh r0, [r2, 0x30] - strh r1, [r2, 0x2E] -_08079B74: - pop {r0} - bx r0 - .align 2, 0 -_08079B78: .4byte 0x0000ffe0 - thumb_func_end sub_8079AD8 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 48e59a76a..682d7d123 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,7 +116,6 @@ SECTIONS { asm/reshow_battle_screen.o(.text); asm/battle_anim_status_effects.o(.text); src/title_screen.o(.text); - asm/title_screen.o(.text); src/reset_save_heap.o(.text); asm/field_weather.o(.text); asm/field_weather_effects.o(.text); diff --git a/src/title_screen.c b/src/title_screen.c index d4c861841..492f0e378 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -63,11 +63,14 @@ void sub_80796CC(void); void sub_80796E8(void); void sub_8079708(void); void sub_8079840(u8 taskId); +void sub_807999C(u8 taskId, u8 field, u16 seed); +u16 sub_80799B4(u8 taskId, u8 field); u32 sub_80799F0(void); -void sub_8079A10(s16 a0); +void sub_8079A10(bool32 a0); u8 sub_8079A40(void); void sub_8079A88(u8 spriteId); bool32 sub_8079AA8(u8 spriteId); +void sub_8079AD8(struct Sprite * sprite); // bg3 const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); @@ -846,6 +849,7 @@ void sub_8079730(struct Sprite * sprite) DestroySprite(sprite); return; } +#if defined(FIRERED) if (sprite->animEnded) { DestroySprite(sprite); @@ -856,4 +860,197 @@ void sub_8079730(struct Sprite * sprite) StartSpriteAnim(sprite, 0); sprite->invisible = FALSE; } +#elif defined(LEAFGREEN) + if (!data[5]) + { + s32 r2; + s32 r1; + data[6]++; + r2 = data[1] * data[6]; + r1 = data[6] * data[3]; + r2 = (r2 * r2) >> 4; + r1 = (r1 * r1) >> 4; + if (r2 + r1 >= 0x510) + data[5] = TRUE; + } +#endif +} + +bool32 sub_80797AC(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) +{ + u8 spriteId; + if (templateId) + { + spriteId = CreateSprite(&gUnknown_83BFB04, x, y, 0); + } + else + { + spriteId = CreateSprite(&gUnknown_83BFB1C, x, y, 0); + } + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = x << 4; + gSprites[spriteId].data[1] = xspeed; + gSprites[spriteId].data[2] = y << 4; + gSprites[spriteId].data[3] = yspeed; + gSprites[spriteId].data[4] = 0; + gSprites[spriteId].data[5] = (xspeed * yspeed) % 16; + gSprites[spriteId].data[6] = templateId; + gSprites[spriteId].callback = sub_8079730; + return TRUE; + } + return FALSE; +} + +void sub_8079840(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 x, y, xspeed, yspeed, templateId; + s32 i; + + switch (data[0]) + { + case 0: + sub_807999C(taskId, 3, 0x7878); + data[0]++; + break; + case 1: + data[1]++; + if (data[1] >= data[2]) + { + data[1] = 0; + sub_80799B4(taskId, 3); + data[2] = 18; + xspeed = (sub_80799B4(taskId, 3) % 4) - 2; + yspeed = (sub_80799B4(taskId, 3) % 8) - 16; + y = (sub_80799B4(taskId, 3) % 3) + 0x74; + x = sub_80799B4(taskId, 3) % 240; + sub_80797AC( + x, + y, + xspeed, + yspeed, + (sub_80799B4(taskId, 3) % 16) < 8 ? 0 : 1 + ); + for (i = 0; i < 15; i++) + { + sub_80797AC( + data[5] + gUnknown_83BFBD4[i], + y, + xspeed, + yspeed, + 1 + ); + xspeed = (sub_80799B4(taskId, 3) % 4) - 2; + yspeed = (sub_80799B4(taskId, 3) % 8) - 16; + } + data[5]++; + if (data[5] > 3) + data[5] = 0; + } + } +} + +void sub_807999C(u8 taskId, u8 field, u16 seed) +{ + SetWordTaskArg(taskId, field, seed); +} + +u16 sub_80799B4(u8 taskId, u8 field) +{ + u32 rngval; + + rngval = GetWordTaskArg(taskId, field); + rngval = rngval * 1103515245 + 24691; + SetWordTaskArg(taskId, field, rngval); + return rngval >> 16; +} + +u32 sub_80799F0(void) +{ + CreateSprite(&gUnknown_83BFB3C, 0x18, 0x90, 0); + return IndexOfSpritePaletteTag(2); +} + +void sub_8079A10(bool32 mode) +{ + u32 palIdx; + + if (mode) + { + palIdx = IndexOfSpritePaletteTag(2); + LoadPalette(gUnknown_8EAE488, palIdx * 16 + 0x100, 0x20); + } + else + sub_80799F0(); +} + +u8 sub_8079A40(void) +{ + u8 spriteId = CreateSprite(&gUnknown_83BFB5C, -0x20, 0x1B, 1); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].callback = sub_8079AD8; + gSprites[spriteId].data[1] = 540; + } + return spriteId; +} + +void sub_8079A88(u8 spriteId) +{ + if (spriteId != MAX_SPRITES) + gSprites[spriteId].data[2] = TRUE; +} + +bool32 sub_8079AA8(u8 spriteId) +{ + if (spriteId != MAX_SPRITES) + return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE; + else + return FALSE; +} + +void sub_8079AD8(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->data[2]) + { + sprite->invisible = TRUE; + sprite->data[0] = 2; + } + sprite->data[1]--; + if (sprite->data[1] == 0) + { + sprite->invisible = FALSE; + sprite->data[0] = 1; + } + break; + case 1: + sprite->pos1.x += 9; + if (sprite->pos1.x == 67) + { + sprite->pos1.y -= 7; + } + if (sprite->pos1.x == 148) + { + sprite->pos1.y += 7; + } + if (sprite->pos1.x > 272) + { + sprite->invisible = TRUE; + if (sprite->data[2]) + sprite->data[0] = 2; + else + { + sprite->pos1.x = -0x20; + sprite->data[1] = 540; + sprite->data[0] = 0; + } + } + break; + case 2: + break; + } } -- cgit v1.2.3 From e2c552f1df045719652e1d91fb6a6ad67d00a045 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 31 Jul 2019 16:11:20 -0400 Subject: Static decl/def; gfx dump --- asm/clear_save_data_screen.s | 6 +- data/graphics.s | 20 +- data/graphics/title_screen/unk_83bf64c.png | Bin 188 -> 188 bytes data/graphics/title_screen/unk_83bf77c.pal | 19 ++ data/graphics/title_screen/unk_83bf79c.png | Bin 539 -> 539 bytes graphics/title_screen/unk_8eab6c4.pal | 259 ++++++++++++++++++++++++ graphics/title_screen/unk_8eab8c4.png | Bin 0 -> 5614 bytes graphics/title_screen/unk_8ead390.bin | Bin 0 -> 1280 bytes graphics/title_screen/unk_8ead5e8.pal | 19 ++ graphics/title_screen/unk_8ead608.png | Bin 0 -> 1802 bytes graphics/title_screen/unk_8eadee4.bin | Bin 0 -> 1280 bytes graphics/title_screen/unk_8eae094.pal | 19 ++ graphics/title_screen/unk_8eae0b4.png | Bin 0 -> 597 bytes graphics/title_screen/unk_8eae374.bin | Bin 0 -> 1280 bytes graphics/title_screen/unk_8eae488.pal | 19 ++ graphics/title_screen/unk_8eae4a8.png | Bin 148 -> 148 bytes graphics_file_rules.mk | 4 + include/clear_save_data_screen.h | 2 +- src/title_screen.c | 314 ++++++++++++++--------------- sym_ewram.txt | 5 +- 20 files changed, 513 insertions(+), 173 deletions(-) create mode 100644 data/graphics/title_screen/unk_83bf77c.pal create mode 100644 graphics/title_screen/unk_8eab6c4.pal create mode 100644 graphics/title_screen/unk_8eab8c4.png create mode 100644 graphics/title_screen/unk_8ead390.bin create mode 100644 graphics/title_screen/unk_8ead5e8.pal create mode 100644 graphics/title_screen/unk_8ead608.png create mode 100644 graphics/title_screen/unk_8eadee4.bin create mode 100644 graphics/title_screen/unk_8eae094.pal create mode 100644 graphics/title_screen/unk_8eae0b4.png create mode 100644 graphics/title_screen/unk_8eae374.bin create mode 100644 graphics/title_screen/unk_8eae488.pal diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s index f6cd11410..5d9d2ac03 100644 --- a/asm/clear_save_data_screen.s +++ b/asm/clear_save_data_screen.s @@ -26,8 +26,8 @@ sub_80F558C: @ 80F558C bx r0 thumb_func_end sub_80F558C - thumb_func_start sub_80F55A0 -sub_80F55A0: @ 80F55A0 + thumb_func_start CB2_SaveClearScreen_Init +CB2_SaveClearScreen_Init: @ 80F55A0 push {r4,lr} ldr r4, _080F55D0 @ =gUnknown_203AB54 movs r0, 0x4 @@ -52,7 +52,7 @@ sub_80F55A0: @ 80F55A0 _080F55D0: .4byte gUnknown_203AB54 _080F55D4: .4byte sub_80F55DC _080F55D8: .4byte sub_80F5574 - thumb_func_end sub_80F55A0 + thumb_func_end CB2_SaveClearScreen_Init thumb_func_start sub_80F55DC sub_80F55DC: @ 80F55DC diff --git a/data/graphics.s b/data/graphics.s index f62234529..189826238 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16352,34 +16352,34 @@ gUnknown_8EAAB98:: @ 8EAAB98 gUnknown_8EAB30C:: @ 8EAB30C .incbin "baserom.gba", 0xEAB30C, 0x3B8 + @ title_screen gUnknown_8EAB6C4:: @ 8EAB6C4 - .incbin "baserom.gba", 0xEAB6C4, 0x200 @UNKNOWN + .incbin "graphics/title_screen/unk_8eab6c4.gbapal" gUnknown_8EAB8C4:: @ 8EAB8C4 - .incbin "baserom.gba", 0xEAB8C4, 0x1ACC + .incbin "graphics/title_screen/unk_8eab8c4.8bpp.lz" gUnknown_8EAD390:: @ 8EAD390 - .incbin "baserom.gba", 0xEAD390, 0x258 + .incbin "graphics/title_screen/unk_8ead390.bin.lz" gUnknown_8EAD5E8:: @ 8EAD5E8 - .incbin "baserom.gba", 0xEAD5E8, 0x20 @UNKNOWN + .incbin "graphics/title_screen/unk_8ead5e8.gbapal" gUnknown_8EAD608:: @ 8EAD608 - .incbin "baserom.gba", 0xEAD608, 0x8DC + .incbin "graphics/title_screen/unk_8ead608.4bpp.lz" gUnknown_8EADEE4:: @ 8EADEE4 - .incbin "baserom.gba", 0xEADEE4, 0x1B0 + .incbin "graphics/title_screen/unk_8eadee4.bin.lz" gUnknown_8EAE094:: @ 8EAE094 - .incbin "baserom.gba", 0xEAE094, 0x20 @UNKNOWN + .incbin "graphics/title_screen/unk_8eae094.gbapal" gUnknown_8EAE0B4:: @ 8EAE0B4 - .incbin "baserom.gba", 0xEAE0B4, 0x2C0 + .incbin "graphics/title_screen/unk_8eae0b4.4bpp.lz" gUnknown_8EAE374:: @ 8EAE374 - .incbin "baserom.gba", 0xEAE374, 0x114 + .incbin "graphics/title_screen/unk_8eae374.bin.lz" - @ title_screen gUnknown_8EAE488:: @ 8EAE488 .incbin "graphics/title_screen/unk_8eae488.gbapal" diff --git a/data/graphics/title_screen/unk_83bf64c.png b/data/graphics/title_screen/unk_83bf64c.png index 3c9b7630d..260e00a01 100644 Binary files a/data/graphics/title_screen/unk_83bf64c.png and b/data/graphics/title_screen/unk_83bf64c.png differ diff --git a/data/graphics/title_screen/unk_83bf77c.pal b/data/graphics/title_screen/unk_83bf77c.pal new file mode 100644 index 000000000..815547f37 --- /dev/null +++ b/data/graphics/title_screen/unk_83bf77c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 205 180 +0 0 0 +255 255 189 +255 246 139 +255 213 65 +255 172 0 +197 164 49 +115 180 139 +98 189 156 +90 197 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +82 205 180 diff --git a/data/graphics/title_screen/unk_83bf79c.png b/data/graphics/title_screen/unk_83bf79c.png index 246252bed..66a57a899 100644 Binary files a/data/graphics/title_screen/unk_83bf79c.png and b/data/graphics/title_screen/unk_83bf79c.png differ diff --git a/graphics/title_screen/unk_8eab6c4.pal b/graphics/title_screen/unk_8eab6c4.pal new file mode 100644 index 000000000..48c794761 --- /dev/null +++ b/graphics/title_screen/unk_8eab6c4.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 255 41 +0 0 0 +255 238 16 +246 222 41 +246 238 246 +255 246 24 +246 246 41 +246 246 246 +246 255 255 +255 246 255 +32 0 255 +106 65 156 +32 0 238 +246 222 24 +246 222 32 +255 238 41 +255 238 49 +255 255 16 +255 255 24 +255 255 246 +255 255 255 +123 106 156 +24 41 32 +32 32 74 +32 0 230 +115 82 164 +16 0 246 +106 82 172 +246 238 32 +255 230 24 +246 230 41 +246 238 41 +246 230 49 +246 238 49 +255 246 32 +255 246 41 +255 255 32 +255 255 41 +32 24 32 +32 32 41 +197 156 41 +197 164 41 +156 156 156 +164 164 156 +172 172 172 +180 189 180 +41 0 230 +189 189 189 +197 189 189 +197 197 197 +205 205 213 +8 8 197 +246 230 24 +246 230 32 +255 238 24 +255 238 32 +32 32 32 +32 41 32 +41 32 32 +41 41 32 +49 32 32 +49 41 32 +41 32 41 +49 32 41 +24 41 41 +32 32 90 +16 24 106 +24 32 98 +41 32 82 +41 32 98 +41 41 82 +41 41 98 +0 0 115 +8 8 131 +32 24 115 +32 24 131 +32 41 115 +41 41 115 +32 41 131 +41 41 131 +57 41 41 +57 41 49 +57 49 41 +57 57 57 +65 41 41 +74 41 41 +65 57 57 +74 57 57 +57 74 74 +65 65 74 +82 74 82 +82 57 131 +82 90 82 +90 90 90 +90 98 98 +98 98 106 +115 106 106 +131 98 115 +139 98 106 +139 115 98 +180 139 57 +172 131 65 +156 115 90 +156 131 82 +115 82 139 +123 82 131 +115 98 131 +131 98 123 +115 123 123 +123 123 131 +139 131 139 +148 123 131 +205 172 24 +213 172 16 +205 164 32 +213 172 32 +222 189 24 +230 189 16 +213 189 32 +222 189 32 +230 205 24 +230 205 32 +230 213 32 +238 222 32 +180 148 57 +189 156 49 +180 148 74 +180 172 90 +156 148 123 +139 148 139 +164 148 115 +172 156 106 +197 156 49 +205 180 49 +197 172 90 +205 189 82 +222 205 49 +230 222 49 +205 205 74 +222 213 65 +49 0 230 +213 213 213 +222 230 230 +222 230 230 +255 0 246 +255 0 255 +16 8 197 +16 16 189 +32 16 164 +41 16 164 +32 16 180 +41 16 189 +8 8 205 +8 16 205 +24 8 213 +24 16 205 +41 8 213 +41 16 213 +49 8 213 +57 16 213 +16 8 230 +24 8 230 +24 16 230 +24 24 230 +8 8 246 +8 16 246 +16 8 246 +16 16 246 +32 8 230 +32 16 230 +32 8 238 +32 8 246 +41 8 230 +41 16 230 +49 16 230 +49 8 238 +32 32 156 +24 32 172 +41 41 156 +41 32 164 +74 49 180 +82 49 172 +82 65 164 +90 74 164 +24 32 189 +57 41 189 +41 32 213 +57 32 213 +74 41 189 +90 57 189 +74 49 197 +74 41 205 +49 49 49 +197 197 197 +189 189 189 +156 156 156 +172 172 172 +139 139 139 +115 115 115 +255 255 255 +16 16 16 +98 98 98 +246 246 246 +82 82 82 +230 230 230 +213 213 213 +0 0 0 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +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/title_screen/unk_8eab8c4.png b/graphics/title_screen/unk_8eab8c4.png new file mode 100644 index 000000000..9d9cd68f1 Binary files /dev/null and b/graphics/title_screen/unk_8eab8c4.png differ diff --git a/graphics/title_screen/unk_8ead390.bin b/graphics/title_screen/unk_8ead390.bin new file mode 100644 index 000000000..2987c5cfa Binary files /dev/null and b/graphics/title_screen/unk_8ead390.bin differ diff --git a/graphics/title_screen/unk_8ead5e8.pal b/graphics/title_screen/unk_8ead5e8.pal new file mode 100644 index 000000000..0832e8306 --- /dev/null +++ b/graphics/title_screen/unk_8ead5e8.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +82 205 180 +255 0 255 +255 0 255 +255 0 255 +32 0 0 +49 0 0 +65 0 0 +90 0 0 +123 32 0 +156 32 0 +180 49 0 +205 65 0 +222 90 0 +230 123 0 diff --git a/graphics/title_screen/unk_8ead608.png b/graphics/title_screen/unk_8ead608.png new file mode 100644 index 000000000..a0baa966c Binary files /dev/null and b/graphics/title_screen/unk_8ead608.png differ diff --git a/graphics/title_screen/unk_8eadee4.bin b/graphics/title_screen/unk_8eadee4.bin new file mode 100644 index 000000000..0c309689e Binary files /dev/null and b/graphics/title_screen/unk_8eadee4.bin differ diff --git a/graphics/title_screen/unk_8eae094.pal b/graphics/title_screen/unk_8eae094.pal new file mode 100644 index 000000000..f7f14d45d --- /dev/null +++ b/graphics/title_screen/unk_8eae094.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 139 +0 0 0 +123 123 123 +197 197 197 +222 222 222 +255 255 255 +0 0 0 +123 123 123 +197 197 197 +222 222 222 +255 255 255 +65 180 164 +139 0 0 +172 24 0 +213 57 0 +255 90 0 diff --git a/graphics/title_screen/unk_8eae0b4.png b/graphics/title_screen/unk_8eae0b4.png new file mode 100644 index 000000000..0b4e69015 Binary files /dev/null and b/graphics/title_screen/unk_8eae0b4.png differ diff --git a/graphics/title_screen/unk_8eae374.bin b/graphics/title_screen/unk_8eae374.bin new file mode 100644 index 000000000..9bab57cc0 Binary files /dev/null and b/graphics/title_screen/unk_8eae374.bin differ diff --git a/graphics/title_screen/unk_8eae488.pal b/graphics/title_screen/unk_8eae488.pal new file mode 100644 index 000000000..7a29ab72c --- /dev/null +++ b/graphics/title_screen/unk_8eae488.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 205 180 +189 197 205 +164 164 172 +123 131 131 +213 213 222 +255 246 74 +255 213 32 +164 131 24 +246 164 24 +131 90 16 +106 98 90 +65 57 41 +230 82 16 +205 41 0 +139 8 8 +246 246 246 diff --git a/graphics/title_screen/unk_8eae4a8.png b/graphics/title_screen/unk_8eae4a8.png index d98563aef..682c22432 100644 Binary files a/graphics/title_screen/unk_8eae4a8.png and b/graphics/title_screen/unk_8eae4a8.png differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index dfe15881a..df3a46c59 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -22,6 +22,7 @@ TEXTWINDOWGFXDIR := graphics/text_window TEACHYTVGFXDIR := graphics/teachy_tv SSANNEGFXDIR := graphics/ss_anne ITEMPCGFXDIR := graphics/item_pc +TITLESCREENGFXDIR := graphics/title_screen types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -486,3 +487,6 @@ $(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png $(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 82 + +$(TITLESCREENGFXDIR)/unk_8ead608.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 135 diff --git a/include/clear_save_data_screen.h b/include/clear_save_data_screen.h index 7edf7d03e..d5d2665ae 100644 --- a/include/clear_save_data_screen.h +++ b/include/clear_save_data_screen.h @@ -1,6 +1,6 @@ #ifndef GUARD_CLEAR_SAVE_DATA_SCREEN_H #define GUARD_CLEAR_SAVE_DATA_SCREEN_H -void sub_80F55A0(void); +void CB2_SaveClearScreen_Init(void); #endif //GUARD_CLEAR_SAVE_DATA_SCREEN_H diff --git a/src/title_screen.c b/src/title_screen.c index 492f0e378..3e801c72f 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -38,51 +38,51 @@ enum TitleScreenScene #define TITLE_SPECIES SPECIES_VENUSAUR #endif -EWRAM_DATA u8 gUnknown_2037F30 = 0; - -void sub_8078B34(void); -void sub_8078B9C(void); -void sub_8078BB4(void); -void sub_8078BEC(u8 taskId); -void sub_8078C24(u8 taskId); -void sub_8078C90(s16 * data, u8 a1); -void sub_8078C9C(s16 * data); -void sub_8078D24(s16 * data); -void sub_8078DA4(s16 * data); -void sub_8078FC4(s16 * data); -void sub_80790A0(void); -void sub_80790CC(s16 * data); -void sub_80791C0(s16 * data); -void sub_80792C8(u8 taskId); -void sub_807941C(u8 taskId); -void sub_8079528(void); -void sub_8079550(s16 a0); -void sub_8079620(void); -void sub_8079648(void); -void sub_80796CC(void); -void sub_80796E8(void); -void sub_8079708(void); -void sub_8079840(u8 taskId); -void sub_807999C(u8 taskId, u8 field, u16 seed); -u16 sub_80799B4(u8 taskId, u8 field); -u32 sub_80799F0(void); -void sub_8079A10(bool32 a0); -u8 sub_8079A40(void); -void sub_8079A88(u8 spriteId); -bool32 sub_8079AA8(u8 spriteId); -void sub_8079AD8(struct Sprite * sprite); +static EWRAM_DATA u8 sTitleScreenTimerTaskId = 0; + +static void ResetGpuRegs(void); +static void CB2_TitleScreenRun(void); +static void VBlankCB(void); +static void Task_TitleScreenTimer(u8 taskId); +static void Task_TitleScreenMain(u8 taskId); +static void SetTitleScreenScene(s16 * data, u8 a1); +static void SetTitleScreenScene_Init(s16 * data); +static void SetTitleScreenScene_FlashSprite(s16 * data); +static void SetTitleScreenScene_FadeIn(s16 * data); +static void SetTitleScreenScene_Run(s16 * data); +static void SetGpuRegsForTitleScreenRun(void); +static void SetTitleScreenScene_Restart(s16 * data); +static void SetTitleScreenScene_Cry(s16 * data); +static void Task_TitleScreen_SlideWin0(u8 taskId); +static void Task_TitleScreen_PaletteSomething(u8 taskId); +static void SignalEndTitleScreenPaletteSomethingTask(void); +static void UpdateScanlineEffectRegBuffer(s16 a0); +static void ScheduleStopScanlineEffect(void); +static void LoadMainTitleScreenPalsAndResetBgs(void); +static void CB2_FadeOutTransitionToSaveClearScreen(void); +static void CB2_FadeOutTransitionToBerryFix(void); +static void LoadSpriteGfxAndPals(void); +static void Task_FlameOrLeafSpawner(u8 taskId); +static void TitleScreen_srand(u8 taskId, u8 field, u16 seed); +static u16 TitleScreen_rand(u8 taskId, u8 field); +static u32 CreateBlankSprite(void); +static void sub_8079A10(bool32 a0); +static u8 CreateSlashSprite(void); +static void ScheduleHideSlashSprite(u8 spriteId); +static bool32 IsSlashSpriteHidden(u8 spriteId); +static void SpriteCallback_Slash(struct Sprite * sprite); // bg3 -const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); -const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); +static const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); +static const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); //sprites -const u8 gUnknown_83BF64C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); -const u16 gUnknown_83BF77C[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); -const u8 gUnknown_83BF79C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); -const u8 gUnknown_83BFA14[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); +static const u8 gUnknown_83BF64C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); +static const u16 gUnknown_83BF77C[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); +static const u8 gUnknown_83BF79C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); +static const u8 gUnknown_83BFA14[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); -const struct OamData gOamData_83BFAB4 = { +static const struct OamData gOamData_83BFAB4 = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_SQUARE, .size = ST_OAM_SIZE_1, @@ -91,7 +91,7 @@ const struct OamData gOamData_83BFAB4 = { .paletteNum = 0 }; -const union AnimCmd gSpriteAnims_83BFABC[] = { +static const union AnimCmd gSpriteAnims_83BFABC[] = { ANIMCMD_FRAME(0x00, 3), ANIMCMD_FRAME(0x04, 6), ANIMCMD_FRAME(0x08, 6), @@ -105,7 +105,7 @@ const union AnimCmd gSpriteAnims_83BFABC[] = { ANIMCMD_END }; -const union AnimCmd gSpriteAnims_83BFAE8[] = { +static const union AnimCmd gSpriteAnims_83BFAE8[] = { ANIMCMD_FRAME(0x18, 6), ANIMCMD_FRAME(0x1c, 6), ANIMCMD_FRAME(0x20, 6), @@ -113,12 +113,12 @@ const union AnimCmd gSpriteAnims_83BFAE8[] = { ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_83BFAFC[] = { +static const union AnimCmd *const gSpriteAnimTable_83BFAFC[] = { gSpriteAnims_83BFABC, gSpriteAnims_83BFAE8 }; -const struct SpriteTemplate gUnknown_83BFB04 = { +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { .tileTag = 0, .paletteTag = 0, .oam = &gOamData_83BFAB4, @@ -128,7 +128,7 @@ const struct SpriteTemplate gUnknown_83BFB04 = { .callback = SpriteCallbackDummy }; -const struct SpriteTemplate gUnknown_83BFB1C = { +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { .tileTag = 1, .paletteTag = 0, .oam = &gOamData_83BFAB4, @@ -138,7 +138,7 @@ const struct SpriteTemplate gUnknown_83BFB1C = { .callback = SpriteCallbackDummy }; -const struct OamData gOamData_83BFB34 = { +static const struct OamData gOamData_83BFB34 = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE, .size = ST_OAM_SIZE_3, @@ -147,7 +147,7 @@ const struct OamData gOamData_83BFB34 = { .paletteNum = 0 }; -const struct SpriteTemplate gUnknown_83BFB3C = { +static const struct SpriteTemplate sUnknownEmptySprite = { .tileTag = 2, .paletteTag = 2, .oam = &gOamData_83BFB34, @@ -157,7 +157,7 @@ const struct SpriteTemplate gUnknown_83BFB3C = { .callback = SpriteCallbackDummy }; -const struct OamData gOamData_83BFB54 = { +static const struct OamData gOamData_83BFB54 = { .objMode = ST_OAM_OBJ_WINDOW, .shape = ST_OAM_SQUARE, .size = ST_OAM_SIZE_3, @@ -166,7 +166,7 @@ const struct OamData gOamData_83BFB54 = { .paletteNum = 0 }; -const struct SpriteTemplate gUnknown_83BFB5C = { +static const struct SpriteTemplate sSlashSpriteTemplate = { .tileTag = 3, .paletteTag = 2, .oam = &gOamData_83BFB54, @@ -176,7 +176,7 @@ const struct SpriteTemplate gUnknown_83BFB5C = { .callback = SpriteCallbackDummy }; -const struct BgTemplate gUnknown_83BFB74[] = { +static const struct BgTemplate gUnknown_83BFB74[] = { { .bg = 0, .charBaseIndex = 0, @@ -212,29 +212,29 @@ const struct BgTemplate gUnknown_83BFB74[] = { } }; -void (*const gUnknown_83BFB84[])(s16 * data) = { - sub_8078C9C, - sub_8078D24, - sub_8078DA4, - sub_8078FC4, - sub_80790CC, - sub_80791C0 +static void (*const gUnknown_83BFB84[])(s16 * data) = { + SetTitleScreenScene_Init, + SetTitleScreenScene_FlashSprite, + SetTitleScreenScene_FadeIn, + SetTitleScreenScene_Run, + SetTitleScreenScene_Restart, + SetTitleScreenScene_Cry }; -const struct CompressedSpriteSheet gUnknown_83BFB9C[] = { +static const struct CompressedSpriteSheet gUnknown_83BFB9C[] = { {(const void *)gUnknown_83BF79C, 0x500, 0}, {(const void *)gUnknown_83BFA14, 0x500, 1}, {(const void *)gUnknown_8EAE4A8, 0x400, 2}, {(const void *)gUnknown_83BF64C, 0x800, 3} }; -const struct SpritePalette gUnknown_83BFBBC[] = { +static const struct SpritePalette gUnknown_83BFBBC[] = { {gUnknown_83BF77C, 0}, {gUnknown_8EAE488, 2}, {} }; -const u8 gUnknown_83BFBD4[] = { +static const u8 gUnknown_83BFBD4[] = { 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90 }; @@ -253,14 +253,14 @@ void CB2_InitTitleScreen(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetPaletteFade(); - sub_8078B34(); + ResetGpuRegs(); DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); DmaFill32(3, 0, (void *)OAM, OAM_SIZE); DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_83BFB74, NELEMS(gUnknown_83BFB74)); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - gUnknown_2037F30 = 0xFF; + sTitleScreenTimerTaskId = 0xFF; break; case 1: LoadPalette(gUnknown_8EAB6C4, 0, 0x1A0); @@ -275,16 +275,16 @@ void CB2_InitTitleScreen(void) LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); DecompressAndCopyTileDataToVram(3, gUnknown_83BF58C, 0, 0, 0); DecompressAndCopyTileDataToVram(3, gUnknown_83BF5A8, 0, 0, 1); - sub_8079708(); + LoadSpriteGfxAndPals(); break; case 2: if (!FreeTempTileDataBuffersIfPossible()) { BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); - CreateTask(sub_8078C24, 4); - gUnknown_2037F30 = CreateTask(sub_8078BEC, 2); - SetVBlankCallback(sub_8078BB4); - SetMainCallback2(sub_8078B9C); + CreateTask(Task_TitleScreenMain, 4); + sTitleScreenTimerTaskId = CreateTask(Task_TitleScreenTimer, 2); + SetVBlankCallback(VBlankCB); + SetMainCallback2(CB2_TitleScreenRun); m4aSongNumStart(BGM_FRLG_TITLE); } return; @@ -292,7 +292,7 @@ void CB2_InitTitleScreen(void) gMain.state++; } -void sub_8078B34(void) +static void ResetGpuRegs(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -308,7 +308,7 @@ void sub_8078B34(void) SetGpuReg(REG_OFFSET_BG3VOFS, 0); } -void sub_8078B9C(void) +static void CB2_TitleScreenRun(void) { RunTasks(); AnimateSprites(); @@ -316,39 +316,39 @@ void sub_8078B9C(void) UpdatePaletteFade(); } -void sub_8078BB4(void) +static void VBlankCB(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); ScanlineEffect_InitHBlankDmaTransfer(); - if (gUnknown_2037F30 != 0xFF) - gTasks[gUnknown_2037F30].data[0]++; + if (sTitleScreenTimerTaskId != 0xFF) + gTasks[sTitleScreenTimerTaskId].data[0]++; } -void sub_8078BEC(u8 taskId) +static void Task_TitleScreenTimer(u8 taskId) { s16 * data = gTasks[taskId].data; if (data[0] >= 2700) { - gUnknown_2037F30 = 0xFF; + sTitleScreenTimerTaskId = 0xFF; DestroyTask(taskId); } } -void sub_8078C24(u8 taskId) +static void Task_TitleScreenMain(u8 taskId) { s16 * data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON) && data[0] != 3 && data[0] != 4 && data[0] != 5) { - sub_8079620(); - sub_8079648(); + ScheduleStopScanlineEffect(); + LoadMainTitleScreenPalsAndResetBgs(); sub_8079A10(data[5]); - sub_8078C90(data, TITLESCREENSCENE_RUN); + SetTitleScreenScene(data, TITLESCREENSCENE_RUN); } else { @@ -356,13 +356,13 @@ void sub_8078C24(u8 taskId) } } -void sub_8078C90(s16 * data, u8 a1) +static void SetTitleScreenScene(s16 * data, u8 a1) { data[1] = 0; data[0] = a1; } -void sub_8078C9C(s16 * data) +static void SetTitleScreenScene_Init(s16 * data) { struct ScanlineEffectParams params; @@ -381,10 +381,10 @@ void sub_8078C9C(s16 * data) ScanlineEffect_SetParams(params); - sub_8078C90(data, TITLESCREENSCENE_FLASHSPRITE); + SetTitleScreenScene(data, TITLESCREENSCENE_FLASHSPRITE); } -void sub_8078D24(s16 * data) +static void SetTitleScreenScene_FlashSprite(s16 * data) { switch (data[1]) { @@ -392,12 +392,12 @@ void sub_8078D24(s16 * data) SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); data[2] = 0x80; - sub_8079550(0x80); + UpdateScanlineEffectRegBuffer(data[2]); data[1]++; break; case 1: data[2] -= 4; - sub_8079550(data[2]); + UpdateScanlineEffectRegBuffer(data[2]); if (data[2] < 0) { gScanlineEffect.state = 3; @@ -407,11 +407,11 @@ void sub_8078D24(s16 * data) case 2: SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDY, 0); - sub_8078C90(data, TITLESCREENSCENE_FADEIN); + SetTitleScreenScene(data, TITLESCREENSCENE_FADEIN); } } -void sub_8078DA4(s16 * data) +static void SetTitleScreenScene_FadeIn(s16 * data) { u32 r4; switch (data[1]) @@ -440,7 +440,7 @@ void sub_8078DA4(s16 * data) data[2]++; if (data[2] > 36) { - CreateTask(sub_80792C8, 3); + CreateTask(Task_TitleScreen_SlideWin0, 3); sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); data[2] = 0; data[1]++; @@ -482,7 +482,7 @@ void sub_8078DA4(s16 * data) if (!sub_807185C(0)) { data[5] = 1; - r4 = (0x10000 << sub_80799F0()) | 0x00001FFF; + r4 = (0x10000 << CreateBlankSprite()) | 0x00001FFF; BlendPalettes(r4, 0x10, RGB(30, 30, 31)); BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); ShowBg(0); @@ -494,7 +494,7 @@ void sub_8078DA4(s16 * data) case 9: if (!sub_807185C(0) && !gPaletteFade.active) { - sub_8078C90(data, TITLESCREENSCENE_RUN); + SetTitleScreenScene(data, TITLESCREENSCENE_RUN); } break; } @@ -503,45 +503,45 @@ void sub_8078DA4(s16 * data) #define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP) #define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON) -void sub_8078FC4(s16 * data) +static void SetTitleScreenScene_Run(s16 * data) { switch (data[1]) { case 0: HelpSystem_SetSomeVariable2(1); - CreateTask(sub_807941C, 0); - CreateTask(sub_8079840, 5); - sub_80790A0(); - data[6] = sub_8079A40(); + CreateTask(Task_TitleScreen_PaletteSomething, 0); + CreateTask(Task_FlameOrLeafSpawner, 5); + SetGpuRegsForTitleScreenRun(); + data[6] = CreateSlashSprite(); sub_812B484(); data[1]++; // fallthrough case 1: if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) { - sub_8079A88(data[6]); - DestroyTask(FindTaskIdByFunc(sub_8078C24)); - SetMainCallback2(sub_80796CC); + ScheduleHideSlashSprite(data[6]); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); } else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) { - sub_8079A88(data[6]); - DestroyTask(FindTaskIdByFunc(sub_8078C24)); - SetMainCallback2(sub_80796E8); + ScheduleHideSlashSprite(data[6]); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + SetMainCallback2(CB2_FadeOutTransitionToBerryFix); } else if (JOY_NEW(A_BUTTON | START_BUTTON)) { - sub_8078C90(data, TITLESCREENSCENE_CRY); + SetTitleScreenScene(data, TITLESCREENSCENE_CRY); } - else if (!FuncIsActiveTask(sub_8078BEC)) + else if (!FuncIsActiveTask(Task_TitleScreenTimer)) { - sub_8078C90(data, TITLESCREENSCEEN_RESTART); + SetTitleScreenScene(data, TITLESCREENSCEEN_RESTART); } break; } } -void sub_80790A0(void) +static void SetGpuRegsForTitleScreenRun(void) { SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F)); @@ -549,27 +549,27 @@ void sub_80790A0(void) SetGpuReg(REG_OFFSET_BLDY, 13); } -void sub_80790CC(s16 * data) +static void SetTitleScreenScene_Restart(s16 * data) { switch (data[1]) { case 0: - sub_8079A88(data[6]); + ScheduleHideSlashSprite(data[6]); data[1]++; break; case 1: - if (!gPaletteFade.active && !sub_8079AA8(data[6])) + if (!gPaletteFade.active && !IsSlashSpriteHidden(data[6])) { FadeOutMapMusic(10); BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK); - sub_8079528(); + SignalEndTitleScreenPaletteSomethingTask(); data[1]++; } break; case 2: if (IsNotWaitingForBGMStop() && !gPaletteFade.active) { - DestroyTask(FindTaskIdByFunc(sub_807941C)); + DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething)); data[2] = 0; data[1]++; } @@ -578,19 +578,19 @@ void sub_80790CC(s16 * data) data[2]++; if (data[2] >= 20) { - DestroyTask(FindTaskIdByFunc(sub_807941C)); + DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething)); data[1]++; } break; case 4: sub_812B478(); - DestroyTask(FindTaskIdByFunc(sub_8078C24)); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); SetMainCallback2(sub_80EC864); break; } } -void sub_80791C0(s16 * data) +static void SetTitleScreenScene_Cry(s16 * data) { switch (data[1]) { @@ -598,7 +598,7 @@ void sub_80791C0(s16 * data) if (!gPaletteFade.active) { PlayCry1(TITLE_SPECIES, 0); - sub_8079A88(data[6]); + ScheduleHideSlashSprite(data[6]); data[2] = 0; data[1]++; } @@ -606,10 +606,10 @@ void sub_80791C0(s16 * data) case 1: if (data[2] < 90) data[2]++; - else if (!sub_8079AA8(data[6])) + else if (!IsSlashSpriteHidden(data[6])) { BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE); - sub_8079528(); + SignalEndTitleScreenPaletteSomethingTask(); FadeOutBGM(4); data[1]++; } @@ -627,13 +627,13 @@ void sub_80791C0(s16 * data) SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); InitHeap(gHeap, HEAP_SIZE); SetMainCallback2(sub_800C300); - DestroyTask(FindTaskIdByFunc(sub_8078C24)); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); } break; } } -void sub_80792C8(u8 taskId) +static void Task_TitleScreen_SlideWin0(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -692,7 +692,7 @@ void sub_80792C8(u8 taskId) } } -void sub_807941C(u8 taskId) +static void Task_TitleScreen_PaletteSomething(u8 taskId) { s16 * data = gTasks[taskId].data; s32 i; @@ -736,13 +736,13 @@ void sub_807941C(u8 taskId) } } -void sub_8079528(void) +static void SignalEndTitleScreenPaletteSomethingTask(void) { - u8 taskId = FindTaskIdByFunc(sub_807941C); + u8 taskId = FindTaskIdByFunc(Task_TitleScreen_PaletteSomething); gTasks[taskId].data[15] = TRUE; } -void sub_8079550(s16 a0) +static void UpdateScanlineEffectRegBuffer(s16 a0) { s32 i; @@ -778,7 +778,7 @@ void sub_8079550(s16 a0) } } -void sub_8079620(void) +static void ScheduleStopScanlineEffect(void) { if (gScanlineEffect.state) gScanlineEffect.state = 3; @@ -786,11 +786,11 @@ void sub_8079620(void) SetGpuReg(REG_OFFSET_BLDY, 0); } -void sub_8079648(void) +static void LoadMainTitleScreenPalsAndResetBgs(void) { u8 taskId; - taskId = FindTaskIdByFunc(sub_80792C8); + taskId = FindTaskIdByFunc(Task_TitleScreen_SlideWin0); if (taskId != 0xFF) DestroyTask(taskId); @@ -808,13 +808,13 @@ void sub_8079648(void) ShowBg(3); } -void sub_80796CC(void) +static void CB2_FadeOutTransitionToSaveClearScreen(void) { if (!UpdatePaletteFade()) - SetMainCallback2(sub_80F55A0); + SetMainCallback2(CB2_SaveClearScreen_Init); } -void sub_80796E8(void) +static void CB2_FadeOutTransitionToBerryFix(void) { if (!UpdatePaletteFade()) { @@ -823,7 +823,7 @@ void sub_80796E8(void) } } -void sub_8079708(void) +static void LoadSpriteGfxAndPals(void) { s32 i; @@ -832,7 +832,7 @@ void sub_8079708(void) LoadSpritePalettes(gUnknown_83BFBBC); } -void sub_8079730(struct Sprite * sprite) +static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite) { s16 * data = sprite->data; sprite->data[0] -= data[1]; @@ -876,16 +876,16 @@ void sub_8079730(struct Sprite * sprite) #endif } -bool32 sub_80797AC(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) +static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) { u8 spriteId; if (templateId) { - spriteId = CreateSprite(&gUnknown_83BFB04, x, y, 0); + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, x, y, 0); } else { - spriteId = CreateSprite(&gUnknown_83BFB1C, x, y, 0); + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, x, y, 0); } if (spriteId != MAX_SPRITES) { @@ -896,13 +896,13 @@ bool32 sub_80797AC(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) gSprites[spriteId].data[4] = 0; gSprites[spriteId].data[5] = (xspeed * yspeed) % 16; gSprites[spriteId].data[6] = templateId; - gSprites[spriteId].callback = sub_8079730; + gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; return TRUE; } return FALSE; } -void sub_8079840(u8 taskId) +static void Task_FlameOrLeafSpawner(u8 taskId) { s16 * data = gTasks[taskId].data; s32 x, y, xspeed, yspeed, templateId; @@ -911,7 +911,7 @@ void sub_8079840(u8 taskId) switch (data[0]) { case 0: - sub_807999C(taskId, 3, 0x7878); + TitleScreen_srand(taskId, 3, 30840); data[0]++; break; case 1: @@ -919,30 +919,30 @@ void sub_8079840(u8 taskId) if (data[1] >= data[2]) { data[1] = 0; - sub_80799B4(taskId, 3); + TitleScreen_rand(taskId, 3); data[2] = 18; - xspeed = (sub_80799B4(taskId, 3) % 4) - 2; - yspeed = (sub_80799B4(taskId, 3) % 8) - 16; - y = (sub_80799B4(taskId, 3) % 3) + 0x74; - x = sub_80799B4(taskId, 3) % 240; - sub_80797AC( + xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; + yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; + y = (TitleScreen_rand(taskId, 3) % 3) + 0x74; + x = TitleScreen_rand(taskId, 3) % 240; + CreateFlameOrLeafSprite( x, y, xspeed, yspeed, - (sub_80799B4(taskId, 3) % 16) < 8 ? 0 : 1 + (TitleScreen_rand(taskId, 3) % 16) < 8 ? 0 : 1 ); for (i = 0; i < 15; i++) { - sub_80797AC( + CreateFlameOrLeafSprite( data[5] + gUnknown_83BFBD4[i], y, xspeed, yspeed, 1 ); - xspeed = (sub_80799B4(taskId, 3) % 4) - 2; - yspeed = (sub_80799B4(taskId, 3) % 8) - 16; + xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; + yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; } data[5]++; if (data[5] > 3) @@ -951,12 +951,12 @@ void sub_8079840(u8 taskId) } } -void sub_807999C(u8 taskId, u8 field, u16 seed) +static void TitleScreen_srand(u8 taskId, u8 field, u16 seed) { SetWordTaskArg(taskId, field, seed); } -u16 sub_80799B4(u8 taskId, u8 field) +static u16 TitleScreen_rand(u8 taskId, u8 field) { u32 rngval; @@ -966,13 +966,13 @@ u16 sub_80799B4(u8 taskId, u8 field) return rngval >> 16; } -u32 sub_80799F0(void) +static u32 CreateBlankSprite(void) { - CreateSprite(&gUnknown_83BFB3C, 0x18, 0x90, 0); + CreateSprite(&sUnknownEmptySprite, 0x18, 0x90, 0); return IndexOfSpritePaletteTag(2); } -void sub_8079A10(bool32 mode) +static void sub_8079A10(bool32 mode) { u32 palIdx; @@ -982,27 +982,27 @@ void sub_8079A10(bool32 mode) LoadPalette(gUnknown_8EAE488, palIdx * 16 + 0x100, 0x20); } else - sub_80799F0(); + CreateBlankSprite(); } -u8 sub_8079A40(void) +static u8 CreateSlashSprite(void) { - u8 spriteId = CreateSprite(&gUnknown_83BFB5C, -0x20, 0x1B, 1); + u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -0x20, 0x1B, 1); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].callback = sub_8079AD8; + gSprites[spriteId].callback = SpriteCallback_Slash; gSprites[spriteId].data[1] = 540; } return spriteId; } -void sub_8079A88(u8 spriteId) +static void ScheduleHideSlashSprite(u8 spriteId) { if (spriteId != MAX_SPRITES) gSprites[spriteId].data[2] = TRUE; } -bool32 sub_8079AA8(u8 spriteId) +static bool32 IsSlashSpriteHidden(u8 spriteId) { if (spriteId != MAX_SPRITES) return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE; @@ -1010,7 +1010,7 @@ bool32 sub_8079AA8(u8 spriteId) return FALSE; } -void sub_8079AD8(struct Sprite * sprite) +static void SpriteCallback_Slash(struct Sprite * sprite) { switch (sprite->data[0]) { diff --git a/sym_ewram.txt b/sym_ewram.txt index 3797720d5..c859d8eb9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -769,9 +769,10 @@ gUnknown_2037F24: @ 2037F24 gUnknown_2037F28: @ 2037F28 .space 0x8 -gUnknown_2037F30: @ 2037F30 - .space 0x4 + .align 2 + .include "src/title_screen.o" + .align 2 gUnknown_2037F34: @ 2037F34 .space 0x200 -- cgit v1.2.3 From 6032159d1bc099d4ed112e5e387ebba1d35fe6a9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 31 Jul 2019 17:15:57 -0400 Subject: Name stuff --- data/graphics.s | 22 +++---- graphics/title_screen/unk_8ead608.png | Bin 1802 -> 1792 bytes include/graphics.h | 22 +++---- src/title_screen.c | 120 +++++++++++++++++----------------- 4 files changed, 82 insertions(+), 82 deletions(-) diff --git a/data/graphics.s b/data/graphics.s index 189826238..4b00c1c4b 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16353,37 +16353,37 @@ gUnknown_8EAB30C:: @ 8EAB30C .incbin "baserom.gba", 0xEAB30C, 0x3B8 @ title_screen -gUnknown_8EAB6C4:: @ 8EAB6C4 +gGraphics_TitleScreen_PokemonFireRedLogoPals:: @ 8EAB6C4 .incbin "graphics/title_screen/unk_8eab6c4.gbapal" -gUnknown_8EAB8C4:: @ 8EAB8C4 +gGraphics_TitleScreen_PokemonFireRedLogoTiles:: @ 8EAB8C4 .incbin "graphics/title_screen/unk_8eab8c4.8bpp.lz" -gUnknown_8EAD390:: @ 8EAD390 +gGraphics_TitleScreen_PokemonFireRedLogoMap:: @ 8EAD390 .incbin "graphics/title_screen/unk_8ead390.bin.lz" -gUnknown_8EAD5E8:: @ 8EAD5E8 +gGraphics_TitleScreen_CharizardPals:: @ 8EAD5E8 .incbin "graphics/title_screen/unk_8ead5e8.gbapal" -gUnknown_8EAD608:: @ 8EAD608 +gGraphics_TitleScreen_CharizardTiles:: @ 8EAD608 .incbin "graphics/title_screen/unk_8ead608.4bpp.lz" -gUnknown_8EADEE4:: @ 8EADEE4 +gGraphics_TitleScreen_CharizardMap:: @ 8EADEE4 .incbin "graphics/title_screen/unk_8eadee4.bin.lz" -gUnknown_8EAE094:: @ 8EAE094 +gGraphics_TitleScreen_BackgroundPals:: @ 8EAE094 .incbin "graphics/title_screen/unk_8eae094.gbapal" -gUnknown_8EAE0B4:: @ 8EAE0B4 +gGraphics_TitleScreen_CopyrightPressStartTiles:: @ 8EAE0B4 .incbin "graphics/title_screen/unk_8eae0b4.4bpp.lz" -gUnknown_8EAE374:: @ 8EAE374 +gGraphics_TitleScreen_CopyrightPressStartMap:: @ 8EAE374 .incbin "graphics/title_screen/unk_8eae374.bin.lz" -gUnknown_8EAE488:: @ 8EAE488 +gGraphics_TitleScreen_FirePals:: @ 8EAE488 .incbin "graphics/title_screen/unk_8eae488.gbapal" -gUnknown_8EAE4A8:: @ 8EAE4A8 +gGraphics_TitleScreen_BlankObjTiles:: @ 8EAE4A8 .incbin "graphics/title_screen/unk_8eae4a8.4bpp.lz" gUnknown_8EAE528:: @ 8EAE528 diff --git a/graphics/title_screen/unk_8ead608.png b/graphics/title_screen/unk_8ead608.png index a0baa966c..c9a0dc8eb 100644 Binary files a/graphics/title_screen/unk_8ead608.png and b/graphics/title_screen/unk_8ead608.png differ diff --git a/include/graphics.h b/include/graphics.h index dd91731b6..f6c2ddd4a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -962,16 +962,16 @@ extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[]; // title_screen -extern const u16 gUnknown_8EAB6C4[]; -extern const u8 gUnknown_8EAB8C4[]; -extern const u8 gUnknown_8EAD390[]; -extern const u16 gUnknown_8EAD5E8[]; -extern const u8 gUnknown_8EAD608[]; -extern const u8 gUnknown_8EADEE4[]; -extern u16 gUnknown_8EAE094[]; // If this is const, title_screen.c does not match -extern const u8 gUnknown_8EAE0B4[]; -extern const u8 gUnknown_8EAE374[]; -extern const u16 gUnknown_8EAE488[]; -extern const u8 gUnknown_8EAE4A8[]; +extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; +extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; +extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoMap[]; +extern const u16 gGraphics_TitleScreen_CharizardPals[]; +extern const u8 gGraphics_TitleScreen_CharizardTiles[]; +extern const u8 gGraphics_TitleScreen_CharizardMap[]; +extern u16 gGraphics_TitleScreen_BackgroundPals[]; // If this is const, title_screen.c does not match +extern const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[]; +extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[]; +extern const u16 gGraphics_TitleScreen_FirePals[]; +extern const u8 gGraphics_TitleScreen_BlankObjTiles[]; #endif //GUARD_GRAPHICS_H diff --git a/src/title_screen.c b/src/title_screen.c index 3e801c72f..f4086b2ff 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -66,23 +66,23 @@ static void Task_FlameOrLeafSpawner(u8 taskId); static void TitleScreen_srand(u8 taskId, u8 field, u16 seed); static u16 TitleScreen_rand(u8 taskId, u8 field); static u32 CreateBlankSprite(void); -static void sub_8079A10(bool32 a0); +static void SetPalOnOrCreateBlankSprite(bool32 a0); static u8 CreateSlashSprite(void); static void ScheduleHideSlashSprite(u8 spriteId); static bool32 IsSlashSpriteHidden(u8 spriteId); static void SpriteCallback_Slash(struct Sprite * sprite); // bg3 -static const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); -static const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); +static const u8 sBorderBgTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); +static const u8 sBorderBgMap[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); //sprites -static const u8 gUnknown_83BF64C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); -static const u16 gUnknown_83BF77C[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); -static const u8 gUnknown_83BF79C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); -static const u8 gUnknown_83BFA14[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); +static const u8 sSlashSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); +static const u16 sSlashSpritePals[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); +static const u8 sFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); +static const u8 sBlankFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); -static const struct OamData gOamData_83BFAB4 = { +static const struct OamData sOamData_FlameOrLeaf = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_SQUARE, .size = ST_OAM_SIZE_1, @@ -91,7 +91,7 @@ static const struct OamData gOamData_83BFAB4 = { .paletteNum = 0 }; -static const union AnimCmd gSpriteAnims_83BFABC[] = { +static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { ANIMCMD_FRAME(0x00, 3), ANIMCMD_FRAME(0x04, 6), ANIMCMD_FRAME(0x08, 6), @@ -105,7 +105,7 @@ static const union AnimCmd gSpriteAnims_83BFABC[] = { ANIMCMD_END }; -static const union AnimCmd gSpriteAnims_83BFAE8[] = { +static const union AnimCmd sSpriteAnims_FlameOrLeaf_1[] = { ANIMCMD_FRAME(0x18, 6), ANIMCMD_FRAME(0x1c, 6), ANIMCMD_FRAME(0x20, 6), @@ -113,16 +113,16 @@ static const union AnimCmd gSpriteAnims_83BFAE8[] = { ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_83BFAFC[] = { - gSpriteAnims_83BFABC, - gSpriteAnims_83BFAE8 +static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { + sSpriteAnims_FlameOrLeaf_0, + sSpriteAnims_FlameOrLeaf_1 }; static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { .tileTag = 0, .paletteTag = 0, - .oam = &gOamData_83BFAB4, - .anims = gSpriteAnimTable_83BFAFC, + .oam = &sOamData_FlameOrLeaf, + .anims = sSpriteAnimTable_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy @@ -131,14 +131,14 @@ static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { .tileTag = 1, .paletteTag = 0, - .oam = &gOamData_83BFAB4, - .anims = gSpriteAnimTable_83BFAFC, + .oam = &sOamData_FlameOrLeaf, + .anims = sSpriteAnimTable_FlameOrLeaf, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_83BFB34 = { +static const struct OamData sOamData_UnknownTemptySprite = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE, .size = ST_OAM_SIZE_3, @@ -150,14 +150,14 @@ static const struct OamData gOamData_83BFB34 = { static const struct SpriteTemplate sUnknownEmptySprite = { .tileTag = 2, .paletteTag = 2, - .oam = &gOamData_83BFB34, + .oam = &sOamData_UnknownTemptySprite, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_83BFB54 = { +static const struct OamData sOamData_SlashSprite = { .objMode = ST_OAM_OBJ_WINDOW, .shape = ST_OAM_SQUARE, .size = ST_OAM_SIZE_3, @@ -169,14 +169,14 @@ static const struct OamData gOamData_83BFB54 = { static const struct SpriteTemplate sSlashSpriteTemplate = { .tileTag = 3, .paletteTag = 2, - .oam = &gOamData_83BFB54, + .oam = &sOamData_SlashSprite, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct BgTemplate gUnknown_83BFB74[] = { +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 0, @@ -212,7 +212,7 @@ static const struct BgTemplate gUnknown_83BFB74[] = { } }; -static void (*const gUnknown_83BFB84[])(s16 * data) = { +static void (*const sSceneFuncs[])(s16 * data) = { SetTitleScreenScene_Init, SetTitleScreenScene_FlashSprite, SetTitleScreenScene_FadeIn, @@ -221,16 +221,16 @@ static void (*const gUnknown_83BFB84[])(s16 * data) = { SetTitleScreenScene_Cry }; -static const struct CompressedSpriteSheet gUnknown_83BFB9C[] = { - {(const void *)gUnknown_83BF79C, 0x500, 0}, - {(const void *)gUnknown_83BFA14, 0x500, 1}, - {(const void *)gUnknown_8EAE4A8, 0x400, 2}, - {(const void *)gUnknown_83BF64C, 0x800, 3} +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {(const void *)sFireSpriteTiles, 0x500, 0}, + {(const void *)sBlankFireSpriteTiles, 0x500, 1}, + {(const void *)gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, + {(const void *)sSlashSpriteTiles, 0x800, 3} }; -static const struct SpritePalette gUnknown_83BFBBC[] = { - {gUnknown_83BF77C, 0}, - {gUnknown_8EAE488, 2}, +static const struct SpritePalette sSpritePals[] = { + {sSlashSpritePals, 0}, + {gGraphics_TitleScreen_FirePals, 2}, {} }; @@ -258,23 +258,23 @@ void CB2_InitTitleScreen(void) DmaFill32(3, 0, (void *)OAM, OAM_SIZE); DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_83BFB74, NELEMS(gUnknown_83BFB74)); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); sTitleScreenTimerTaskId = 0xFF; break; case 1: - LoadPalette(gUnknown_8EAB6C4, 0, 0x1A0); - DecompressAndCopyTileDataToVram(0, gUnknown_8EAB8C4, 0, 0, 0); - DecompressAndCopyTileDataToVram(0, gUnknown_8EAD390, 0, 0, 1); - LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20); - DecompressAndCopyTileDataToVram(1, gUnknown_8EAD608, 0, 0, 0); - DecompressAndCopyTileDataToVram(1, gUnknown_8EADEE4, 0, 0, 1); - LoadPalette(gUnknown_8EAE094, 0xF0, 0x20); - DecompressAndCopyTileDataToVram(2, gUnknown_8EAE0B4, 0, 0, 0); - DecompressAndCopyTileDataToVram(2, gUnknown_8EAE374, 0, 0, 1); - LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); - DecompressAndCopyTileDataToVram(3, gUnknown_83BF58C, 0, 0, 0); - DecompressAndCopyTileDataToVram(3, gUnknown_83BF5A8, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0, 0x1A0); + DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20); + DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20); + DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20); + DecompressAndCopyTileDataToVram(3, sBorderBgTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, sBorderBgMap, 0, 0, 1); LoadSpriteGfxAndPals(); break; case 2: @@ -347,12 +347,12 @@ static void Task_TitleScreenMain(u8 taskId) { ScheduleStopScanlineEffect(); LoadMainTitleScreenPalsAndResetBgs(); - sub_8079A10(data[5]); + SetPalOnOrCreateBlankSprite(data[5]); SetTitleScreenScene(data, TITLESCREENSCENE_RUN); } else { - gUnknown_83BFB84[data[0]](data); + sSceneFuncs[data[0]](data); } } @@ -486,7 +486,7 @@ static void SetTitleScreenScene_FadeIn(s16 * data) BlendPalettes(r4, 0x10, RGB(30, 30, 31)); BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); ShowBg(0); - CpuCopy16(gUnknown_8EAD5E8, gPlttBufferUnfaded + 0xD0, 0x20); + CpuCopy16(gGraphics_TitleScreen_CharizardPals, gPlttBufferUnfaded + 0xD0, 0x20); sub_80717A8(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); data[1]++; } @@ -716,16 +716,16 @@ static void Task_TitleScreen_PaletteSomething(u8 taskId) { for (i = 0; i < 5; i++) { - gPlttBufferUnfaded[0xF1 + i] = gUnknown_8EAE094[6]; - gPlttBufferFaded[0xF1 + i] = gUnknown_8EAE094[6]; + gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6]; + gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6]; } } else { for (i = 0; i < 5; i++) { - gPlttBufferUnfaded[0xF1 + i] = gUnknown_8EAE094[1 + i]; - gPlttBufferFaded[0xF1 + i] = gUnknown_8EAE094[1 + i]; + gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i]; + gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i]; } } if (data[14]) @@ -796,10 +796,10 @@ static void LoadMainTitleScreenPalsAndResetBgs(void) sub_8071898(); ResetPaletteFadeControl(); - LoadPalette(gUnknown_8EAB6C4, 0x00, 0x1A0); - LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20); - LoadPalette(gUnknown_8EAE094, 0xF0, 0x20); - LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); + LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0x00, 0x1A0); + LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20); ResetBgPositions(); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); ShowBg(1); @@ -827,9 +827,9 @@ static void LoadSpriteGfxAndPals(void) { s32 i; - for (i = 0; i < NELEMS(gUnknown_83BFB9C); i++) - LoadCompressedSpriteSheet(&gUnknown_83BFB9C[i]); - LoadSpritePalettes(gUnknown_83BFBBC); + for (i = 0; i < NELEMS(sSpriteSheets); i++) + LoadCompressedSpriteSheet(&sSpriteSheets[i]); + LoadSpritePalettes(sSpritePals); } static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite) @@ -972,14 +972,14 @@ static u32 CreateBlankSprite(void) return IndexOfSpritePaletteTag(2); } -static void sub_8079A10(bool32 mode) +static void SetPalOnOrCreateBlankSprite(bool32 mode) { u32 palIdx; if (mode) { palIdx = IndexOfSpritePaletteTag(2); - LoadPalette(gUnknown_8EAE488, palIdx * 16 + 0x100, 0x20); + LoadPalette(gGraphics_TitleScreen_FirePals, palIdx * 16 + 0x100, 0x20); } else CreateBlankSprite(); -- cgit v1.2.3 From da78b51cf3e3031b4c3594c37e1b2b17566db8e2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 1 Aug 2019 20:29:17 -0400 Subject: Delete duplicate menu.h declarations; make slot machine vars static --- include/menu.h | 3 - src/slot_machine.c | 456 ++++++++++++++++++++++++++--------------------------- 2 files changed, 228 insertions(+), 231 deletions(-) diff --git a/include/menu.h b/include/menu.h index 19d7c82a4..6d8de3274 100644 --- a/include/menu.h +++ b/include/menu.h @@ -24,9 +24,6 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 x, u void sub_812E6DC(u8 windowId, const u8 * src, u16 x, u16 y); void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_step, u8 priority); bool8 IsBlendTaskActive(void); -void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); -void sub_810F260(u8 windowId, u8 a1); -void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing); u8 sub_812EA78(u16 species, u32 personality, u8 a2); s8 sub_812EAE4(u16 species, u32 personality, u8 a2); diff --git a/src/slot_machine.c b/src/slot_machine.c index 98270cf37..740234d95 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -80,72 +80,72 @@ struct UnkStruct_8466C0C u32 count; }; -EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; -EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; - -void sub_813F84C(struct SlotMachineState * ptr); -void sub_813F898(void); -void sub_813F92C(void); -void sub_813F94C(void); -void MainTask_SlotsGameLoop(u8 taskId); -void MainTask_NoCoinsGameOver(u8 taskId); -void MainTask_ShowHelp(u8 taskId); -void MainTask_ConfirmExitGame(u8 taskId); -void MainTask_DarnNoPayout(u8 taskId); -void MainTask_WinHandlePayout(u8 taskId); -void MainTask_ExitSlots(u8 taskId); +static EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; +static EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; + +static void sub_813F84C(struct SlotMachineState * ptr); +static void sub_813F898(void); +static void sub_813F92C(void); +static void sub_813F94C(void); +static void MainTask_SlotsGameLoop(u8 taskId); +static void MainTask_NoCoinsGameOver(u8 taskId); +static void MainTask_ShowHelp(u8 taskId); +static void MainTask_ConfirmExitGame(u8 taskId); +static void MainTask_DarnNoPayout(u8 taskId); +static void MainTask_WinHandlePayout(u8 taskId); +static void MainTask_ExitSlots(u8 taskId); static void SetMainTask(TaskFunc taskFunc); -void sub_8140060(u8 taskId); -void sub_8140148(void); -void sub_814016C(u16 whichReel, u16 whichReel2); -bool32 sub_81401A0(u16); -void sub_81401F0(u16 whichReel); -void sub_81403BC(u16 whichReel); -void sub_81404B8(u16 whichReel); -bool32 sub_814054C(s32, s32, s32, s32, s32); -bool32 sub_81406E8(s32, s32, s32); -bool32 sub_81408F4(s32, s32); -void sub_81409B4(void); -void sub_8140A70(void); -u16 sub_8140A80(void); -void sub_8140C6C(struct SlotMachineGfxManager * manager); -void sub_8140D7C(const s16 *, const s16 *); -bool32 sub_814104C(void); -void sub_8141094(void); -struct SlotMachineSetupTaskData * sub_814112C(void); -void sub_81410CC(u8 taskId); -void sub_8141148(u16 a0, u8 a1); -bool32 sub_8141180(u8 a0); -bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_81414EC(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_81414FC(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141518(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141558(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141568(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141578(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141584(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_81415C8(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141610(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); -bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); -void sub_81417E4(const u8 * str); -void sub_8141828(void); -void sub_8141834(u16 * bgTilemapBuffer); -void sub_81418C4(u16 * bgTilemapBuffer, u16 a0, u16 a1); -void sub_814191C(u8 taskId); -void sub_8141AB0(void); -void sub_8141AD8(u8 a0); -void sub_8141B18(void); -void sub_8141B34(void); -void sub_8141BA0(u8 a0); -void sub_8141BE4(void); -void sub_8141C30(u8, u8); - -const u8 gUnknown_8464890[][2] = { +static void sub_8140060(u8 taskId); +static void sub_8140148(void); +static void sub_814016C(u16 whichReel, u16 whichReel2); +static bool32 sub_81401A0(u16); +static void sub_81401F0(u16 whichReel); +static void sub_81403BC(u16 whichReel); +static void sub_81404B8(u16 whichReel); +static bool32 sub_814054C(s32, s32, s32, s32, s32); +static bool32 sub_81406E8(s32, s32, s32); +static bool32 sub_81408F4(s32, s32); +static void sub_81409B4(void); +static void sub_8140A70(void); +static u16 sub_8140A80(void); +static void sub_8140C6C(struct SlotMachineGfxManager * manager); +static void sub_8140D7C(const s16 *, const s16 *); +static bool32 sub_814104C(void); +static void sub_8141094(void); +static struct SlotMachineSetupTaskData * sub_814112C(void); +static void sub_81410CC(u8 taskId); +static void sub_8141148(u16 a0, u8 a1); +static bool32 sub_8141180(u8 a0); +static bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414EC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414FC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141518(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141558(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141568(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141578(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141584(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81415C8(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141610(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); +static void sub_81417E4(const u8 * str); +static void sub_8141828(void); +static void sub_8141834(u16 * bgTilemapBuffer); +static void sub_81418C4(u16 * bgTilemapBuffer, u16 a0, u16 a1); +static void sub_814191C(u8 taskId); +static void sub_8141AB0(void); +static void sub_8141AD8(u8 a0); +static void sub_8141B18(void); +static void sub_8141B34(void); +static void sub_8141BA0(u8 a0); +static void sub_8141BE4(void); +static void sub_8141C30(u8, u8); + +static const u8 gUnknown_8464890[][2] = { {0x00, 0x03}, {0x00, 0x06}, {0x03, 0x06}, @@ -167,7 +167,7 @@ const u8 gUnknown_8464890[][2] = { {0x04, 0x06} }; -const u8 gUnknown_84648AE[][3] = { +static const u8 gUnknown_84648AE[][3] = { {0x00, 0x03, 0x06}, // top row {0x01, 0x04, 0x07}, // middle row {0x02, 0x05, 0x08}, // bottom row @@ -175,7 +175,7 @@ const u8 gUnknown_84648AE[][3] = { {0x02, 0x04, 0x06} // bl-tr }; -const u8 gUnknown_84648BD[][4] = { +static const u8 gUnknown_84648BD[][4] = { {0x00, 0x04, 0x08, 0x03}, // tl-br {0x00, 0x03, 0x06, 0x02}, // top row {0x01, 0x04, 0x07, 0x01}, // middle row @@ -183,7 +183,7 @@ const u8 gUnknown_84648BD[][4] = { {0x02, 0x04, 0x06, 0x03} // bl-tr }; -const u16 gUnknown_84648D2[][7] = { +static const u16 gUnknown_84648D2[][7] = { {0x1fa1, 0x2eab, 0x3630, 0x39f3, 0x3bd4, 0x3bfc, 0x0049}, {0x1f97, 0x2ea2, 0x3627, 0x39e9, 0x3bca, 0x3bf8, 0x0049}, {0x1f91, 0x2e9b, 0x3620, 0x39e3, 0x3bc4, 0x3bf4, 0x0049}, @@ -192,13 +192,13 @@ const u16 gUnknown_84648D2[][7] = { {0x1fc9, 0x2efc, 0x3696, 0x3a63, 0x3c49, 0x3c8b, 0x0073}, }; -const u8 gUnknown_8464926[][21] = { +static const u8 gUnknown_8464926[][21] = { {0x00, 0x03, 0x04, 0x01, 0x02, 0x06, 0x02, 0x05, 0x00, 0x06, 0x03, 0x01, 0x04, 0x02, 0x06, 0x00, 0x05, 0x02, 0x01, 0x06, 0x02}, {0x00, 0x05, 0x04, 0x03, 0x01, 0x05, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x00, 0x05, 0x04, 0x01, 0x03, 0x06, 0x05, 0x03, 0x04}, {0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01}, }; -const u16 gUnknown_8464966[] = { +static const u16 gUnknown_8464966[] = { 0, 2, 6, @@ -208,24 +208,24 @@ const u16 gUnknown_8464966[] = { 300 }; -const u16 gUnknown_8464974[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal"); -const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal"); -const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal"); -const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal"); -const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal"); -const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz"); -const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_846504c.gbapal"); -const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz"); -const u16 gUnknown_8465524[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal"); -const u32 gUnknown_8465544[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz"); - -const struct CompressedSpriteSheet gUnknown_84655B0[] = { +static const u16 gUnknown_8464974[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal"); +static const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal"); +static const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal"); +static const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal"); +static const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal"); +static const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz"); +static const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_846504c.gbapal"); +static const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz"); +static const u16 gUnknown_8465524[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal"); +static const u32 gUnknown_8465544[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_84655B0[] = { {(const void *)gUnknown_8464A14, 0xe00, 0}, {(const void *)gUnknown_846506C, 0xc00, 1}, {(const void *)gUnknown_8465544, 0x280, 2}, }; -const struct SpritePalette gUnknown_84655C8[] = { +static const struct SpritePalette gUnknown_84655C8[] = { {gUnknown_8464974, 0}, {gUnknown_8464994, 1}, {gUnknown_84649B4, 2}, @@ -236,7 +236,7 @@ const struct SpritePalette gUnknown_84655C8[] = { {NULL} }; -const u16 gUnknown_8465608[] = { +static const u16 gUnknown_8465608[] = { 2, 2, 0, @@ -246,7 +246,7 @@ const u16 gUnknown_8465608[] = { 3 }; -const u16 gUnknown_8465616[] = { +static const u16 gUnknown_8465616[] = { 0x0120, 0x011f, 0x011e, 0x011d, 0x011c, 0x011b, 0x011a, 0x0119, 0x0118, 0x0117, 0x0116, 0x0115, 0x0114, 0x0113, 0x0112, 0x0111, 0x0110, 0x010f, 0x010e, 0x010d, 0x010c, 0x010b, 0x010a, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, @@ -255,13 +255,13 @@ const u16 gUnknown_8465616[] = { 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120 }; -const u8 gUnknown_84656D6[] = { +static const u8 gUnknown_84656D6[] = { 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }; -const struct OamData gUnknown_8465738 = { +static const struct OamData gUnknown_8465738 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, @@ -277,67 +277,67 @@ const struct OamData gUnknown_8465738 = { .affineParam = 0 }; -const union AnimCmd gUnknown_8465740[] = { +static const union AnimCmd gUnknown_8465740[] = { ANIMCMD_FRAME(0x00, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465748[] = { +static const union AnimCmd gUnknown_8465748[] = { ANIMCMD_FRAME(0x10, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465750[] = { +static const union AnimCmd gUnknown_8465750[] = { ANIMCMD_FRAME(0x20, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465758[] = { +static const union AnimCmd gUnknown_8465758[] = { ANIMCMD_FRAME(0x30, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465760[] = { +static const union AnimCmd gUnknown_8465760[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465768[] = { +static const union AnimCmd gUnknown_8465768[] = { ANIMCMD_FRAME(0x50, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465770[] = { +static const union AnimCmd gUnknown_8465770[] = { ANIMCMD_FRAME(0x60, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465778[] = { +static const union AnimCmd gUnknown_8465778[] = { ANIMCMD_FRAME(0x20, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465780[] = { +static const union AnimCmd gUnknown_8465780[] = { ANIMCMD_FRAME(0x30, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465788[] = { +static const union AnimCmd gUnknown_8465788[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465790[] = { +static const union AnimCmd gUnknown_8465790[] = { ANIMCMD_FRAME(0x50, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465798[] = { +static const union AnimCmd gUnknown_8465798[] = { ANIMCMD_FRAME(0x60, 4), ANIMCMD_END }; -const union AnimCmd *const gUnknown_84657A0[] = { +static const union AnimCmd *const gUnknown_84657A0[] = { gUnknown_8465740, gUnknown_8465748, gUnknown_8465750, @@ -352,20 +352,20 @@ const union AnimCmd *const gUnknown_84657A0[] = { gUnknown_8465798 }; -const union AffineAnimCmd gUnknown_84657D0[] = { +static const union AffineAnimCmd gUnknown_84657D0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 1), AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gUnknown_84657E0[] = { +static const union AffineAnimCmd *const gUnknown_84657E0[] = { gUnknown_84657D0 }; -const struct SpriteTemplate gUnknown_84657E4 = { +static const struct SpriteTemplate gUnknown_84657E4 = { 0, 0, &gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -const struct OamData gUnknown_84657FC = { +static const struct OamData gUnknown_84657FC = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -381,57 +381,57 @@ const struct OamData gUnknown_84657FC = { .affineParam = 0 }; -const union AnimCmd gUnknown_8465804[] = { +static const union AnimCmd gUnknown_8465804[] = { ANIMCMD_FRAME(0x00, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_846580C[] = { +static const union AnimCmd gUnknown_846580C[] = { ANIMCMD_FRAME(0x02, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465814[] = { +static const union AnimCmd gUnknown_8465814[] = { ANIMCMD_FRAME(0x04, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_846581C[] = { +static const union AnimCmd gUnknown_846581C[] = { ANIMCMD_FRAME(0x06, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465824[] = { +static const union AnimCmd gUnknown_8465824[] = { ANIMCMD_FRAME(0x08, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_846582C[] = { +static const union AnimCmd gUnknown_846582C[] = { ANIMCMD_FRAME(0x0a, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465834[] = { +static const union AnimCmd gUnknown_8465834[] = { ANIMCMD_FRAME(0x0c, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_846583C[] = { +static const union AnimCmd gUnknown_846583C[] = { ANIMCMD_FRAME(0x0e, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_8465844[] = { +static const union AnimCmd gUnknown_8465844[] = { ANIMCMD_FRAME(0x10, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_846584C[] = { +static const union AnimCmd gUnknown_846584C[] = { ANIMCMD_FRAME(0x12, 4), ANIMCMD_END }; -const union AnimCmd *const gUnknown_8465854[] = { +static const union AnimCmd *const gUnknown_8465854[] = { gUnknown_8465804, gUnknown_846580C, gUnknown_8465814, @@ -444,11 +444,11 @@ const union AnimCmd *const gUnknown_8465854[] = { gUnknown_846584C }; -const struct SpriteTemplate gUnknown_846587C = { +static const struct SpriteTemplate gUnknown_846587C = { 2, 6, &gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -const struct OamData gUnknown_8465894 = { +static const struct OamData gUnknown_8465894 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -464,37 +464,37 @@ const struct OamData gUnknown_8465894 = { .affineParam = 0 }; -const union AnimCmd gUnknown_846589C[] = { +static const union AnimCmd gUnknown_846589C[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_84658A4[] = { +static const union AnimCmd gUnknown_84658A4[] = { ANIMCMD_FRAME( 0, 24), ANIMCMD_FRAME(16, 24), ANIMCMD_JUMP(0) }; -const union AnimCmd gUnknown_84658B0[] = { +static const union AnimCmd gUnknown_84658B0[] = { ANIMCMD_FRAME(32, 28), ANIMCMD_FRAME(48, 28), ANIMCMD_JUMP(0) }; -const union AnimCmd gUnknown_84658BC[] = { +static const union AnimCmd gUnknown_84658BC[] = { ANIMCMD_FRAME(64, 12), ANIMCMD_FRAME(80, 12), ANIMCMD_JUMP(0) }; -const union AnimCmd *const gUnknown_84658C8[] = { +static const union AnimCmd *const gUnknown_84658C8[] = { gUnknown_846589C, gUnknown_84658A4, gUnknown_84658B0, gUnknown_84658BC }; -const struct SpriteTemplate gUnknown_84658D8 = { +static const struct SpriteTemplate gUnknown_84658D8 = { 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; @@ -517,23 +517,23 @@ bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineSetupTaskData *) = { sub_8141764 }; -const u16 gUnknown_8465930[] = INCBIN_U16("graphics/slot_machine/unk_8465930.gbapal"); -const u16 gUnknown_8465950[] = INCBIN_U16("graphics/slot_machine/unk_8465950.gbapal"); -const u16 gUnknown_8465970[] = INCBIN_U16("graphics/slot_machine/unk_8465970.gbapal"); -const u16 gUnknown_8465990[] = INCBIN_U16("graphics/slot_machine/unk_8465990.gbapal"); -const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gbapal"); -const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz"); -const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz"); -const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal"); -const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal","graphics/slot_machine/unk_84664fc.gbapal", "graphics/slot_machine/unk_846651c.gbapal"); -const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz"); -const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal"); -const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal"); -const u16 gUnknown_8466600[] = INCBIN_U16("graphics/slot_machine/unk_8466600.gbapal"); -const u32 gUnknown_8466620[] = INCBIN_U32("graphics/slot_machine/unk_8466620.4bpp.lz"); -const u32 gUnknown_8466998[] = INCBIN_U32("graphics/slot_machine/unk_8466998.bin.lz"); - -const struct BgTemplate gUnknown_8466B10[] = { +static const u16 gUnknown_8465930[] = INCBIN_U16("graphics/slot_machine/unk_8465930.gbapal"); +static const u16 gUnknown_8465950[] = INCBIN_U16("graphics/slot_machine/unk_8465950.gbapal"); +static const u16 gUnknown_8465970[] = INCBIN_U16("graphics/slot_machine/unk_8465970.gbapal"); +static const u16 gUnknown_8465990[] = INCBIN_U16("graphics/slot_machine/unk_8465990.gbapal"); +static const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gbapal"); +static const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz"); +static const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz"); +static const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal"); +static const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal","graphics/slot_machine/unk_84664fc.gbapal", "graphics/slot_machine/unk_846651c.gbapal"); +static const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz"); +static const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal"); +static const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal"); +static const u16 gUnknown_8466600[] = INCBIN_U16("graphics/slot_machine/unk_8466600.gbapal"); +static const u32 gUnknown_8466620[] = INCBIN_U32("graphics/slot_machine/unk_8466620.4bpp.lz"); +static const u32 gUnknown_8466998[] = INCBIN_U32("graphics/slot_machine/unk_8466998.bin.lz"); + +static const struct BgTemplate gUnknown_8466B10[] = { { .bg = 0, .charBaseIndex = 0, @@ -569,7 +569,7 @@ const struct BgTemplate gUnknown_8466B10[] = { } }; -const struct WindowTemplate gUnknown_8466B20[] = { +static const struct WindowTemplate gUnknown_8466B20[] = { { .bg = 0, .tilemapLeft = 5, @@ -590,27 +590,27 @@ const struct WindowTemplate gUnknown_8466B20[] = { DUMMY_WIN_TEMPLATE }; -const u16 gUnknown_8466B38[] = { +static const u16 gUnknown_8466B38[] = { 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218, 0x0219, 0x0237, 0x0238, 0x0239 }; -const u16 gUnknown_8466B60[] = { +static const u16 gUnknown_8466B60[] = { 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119, 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139 }; -const u16 gUnknown_8466B8C[] = { +static const u16 gUnknown_8466B8C[] = { 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179, 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199 }; -const u16 gUnknown_8466BB8[] = { +static const u16 gUnknown_8466BB8[] = { 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9, 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9 }; -const u16 gUnknown_8466BE4[] = { +static const u16 gUnknown_8466BE4[] = { 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8, 0x00b9, 0x00d7, 0x00d8, 0x00d9 }; -const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { +static const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { { gUnknown_8466B38, NELEMS(gUnknown_8466B38) }, { gUnknown_8466B60, NELEMS(gUnknown_8466B60) }, { gUnknown_8466B8C, NELEMS(gUnknown_8466B8C) }, @@ -618,9 +618,9 @@ const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { { gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) } }; -const u8 gUnknown_8466C34[2] = {2, 4}; +static const u8 gUnknown_8466C34[2] = {2, 4}; -const struct WindowTemplate gUnknown_8466C38 = { +static const struct WindowTemplate gUnknown_8466C38 = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 9, @@ -630,7 +630,7 @@ const struct WindowTemplate gUnknown_8466C38 = { .baseBlock = 0x9F }; -const u16 gUnknown_8466C40[][4] = { +static const u16 gUnknown_8466C40[][4] = { {0x0229, 0x022a, 0x0249, 0x024a}, {0x022e, 0x022f, 0x024e, 0x024f}, {0x0233, 0x0234, 0x0253, 0x0254} @@ -653,7 +653,7 @@ void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) } } -void sub_813F84C(struct SlotMachineState * ptr) +static void sub_813F84C(struct SlotMachineState * ptr) { s32 i; @@ -670,7 +670,7 @@ void sub_813F84C(struct SlotMachineState * ptr) } } -void sub_813F898(void) +static void sub_813F898(void) { RunTasks(); AnimateSprites(); @@ -701,7 +701,7 @@ void sub_813F898(void) } } -void sub_813F92C(void) +static void sub_813F92C(void) { sub_8141094(); if (sSlotMachineState != NULL) @@ -711,7 +711,7 @@ void sub_813F92C(void) } } -void sub_813F94C(void) +static void sub_813F94C(void) { RunTasks(); AnimateSprites(); @@ -719,7 +719,7 @@ void sub_813F94C(void) UpdatePaletteFade(); } -void MainTask_SlotsGameLoop(u8 taskId) +static void MainTask_SlotsGameLoop(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -825,7 +825,7 @@ void MainTask_SlotsGameLoop(u8 taskId) } } -void MainTask_NoCoinsGameOver(u8 taskId) +static void MainTask_NoCoinsGameOver(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -846,7 +846,7 @@ void MainTask_NoCoinsGameOver(u8 taskId) } } -void MainTask_ShowHelp(u8 taskId) +static void MainTask_ShowHelp(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -874,7 +874,7 @@ void MainTask_ShowHelp(u8 taskId) } } -void MainTask_ConfirmExitGame(u8 taskId) +static void MainTask_ConfirmExitGame(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -914,7 +914,7 @@ void MainTask_ConfirmExitGame(u8 taskId) } } -void MainTask_DarnNoPayout(u8 taskId) +static void MainTask_DarnNoPayout(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -942,7 +942,7 @@ void MainTask_DarnNoPayout(u8 taskId) } } -void MainTask_WinHandlePayout(u8 taskId) +static void MainTask_WinHandlePayout(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -1020,7 +1020,7 @@ void MainTask_WinHandlePayout(u8 taskId) } } -void MainTask_ExitSlots(u8 taskId) +static void MainTask_ExitSlots(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -1046,7 +1046,7 @@ static void SetMainTask(TaskFunc taskFunc) gTasks[sSlotMachineState->field_10].data[0] = 0; } -void sub_8140060(u8 taskId) +static void sub_8140060(u8 taskId) { // taskId is never used @@ -1076,7 +1076,7 @@ void sub_8140060(u8 taskId) sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26); } -void sub_8140148(void) +static void sub_8140148(void) { s32 i; @@ -1086,7 +1086,7 @@ void sub_8140148(void) } } -void sub_814016C(u16 whichReel, u16 whichReel2) +static void sub_814016C(u16 whichReel, u16 whichReel2) { switch (whichReel2) { @@ -1102,12 +1102,12 @@ void sub_814016C(u16 whichReel, u16 whichReel2) } } -bool32 sub_81401A0(u16 whichReel) +static bool32 sub_81401A0(u16 whichReel) { return sSlotMachineState->field_14[whichReel]; } -s16 sub_81401B4(u16 whichReel) +static s16 sub_81401B4(u16 whichReel) { s16 position = sSlotMachineState->field_20[whichReel]; if (sSlotMachineState->field_26[whichReel] != 0) @@ -1119,7 +1119,7 @@ s16 sub_81401B4(u16 whichReel) return position; } -void sub_81401F0(u16 whichReel) +static void sub_81401F0(u16 whichReel) { s32 i, j; s16 r2; @@ -1184,7 +1184,7 @@ void sub_81401F0(u16 whichReel) sSlotMachineState->field_2C[whichReel] = r2; } -void sub_81403BC(u16 whichReel) +static void sub_81403BC(u16 whichReel) { s16 r2, r4, r7, sp10; s32 i; @@ -1231,7 +1231,7 @@ void sub_81403BC(u16 whichReel) sSlotMachineState->field_2C[whichReel] = r2; } -void sub_81404B8(u16 whichReel) +static void sub_81404B8(u16 whichReel) { s32 i; s32 r6; @@ -1269,15 +1269,15 @@ void sub_81404B8(u16 whichReel) sSlotMachineState->field_2C[whichReel] = r2; } -bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) +static bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) { s32 i; s32 r5; u8 sp0[9] = {}; - + for (i = 0; i < 9; i++) sp0[i] = 7; - + for (i = 0; i < 3; i++) { sp0[3 * a0 + i] = gUnknown_8464926[a0][a1]; @@ -1344,7 +1344,7 @@ bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) } #ifdef NONMATCHING -bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) { u8 sp0[9]; s32 r3, r6; @@ -1417,7 +1417,7 @@ bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) } #else NAKED -bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1702,7 +1702,7 @@ bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) } #endif //NONMATCHING -bool32 sub_81408F4(s32 a0, s32 a1) +static bool32 sub_81408F4(s32 a0, s32 a1) { switch (a0) { @@ -1724,7 +1724,7 @@ bool32 sub_81408F4(s32 a0, s32 a1) } } -u8 sub_814096C(s32 a0) +static u8 sub_814096C(s32 a0) { switch (a0) { @@ -1744,7 +1744,7 @@ u8 sub_814096C(s32 a0) } } -void sub_81409B4(void) +static void sub_81409B4(void) { u16 r2 = Random() / 4; s32 i; @@ -1771,12 +1771,12 @@ void sub_81409B4(void) } } -void sub_8140A70(void) +static void sub_8140A70(void) { sSlotMachineState->field_08 = 0; } -u16 sub_8140A80(void) +static u16 sub_8140A80(void) { u8 sp0[9] = {}; s32 i; @@ -1829,22 +1829,22 @@ u16 sub_8140A80(void) return r9; } -u16 sub_8140BDC(void) +static u16 sub_8140BDC(void) { return sSlotMachineState->payout; } -u8 sub_8140BEC(void) +static u8 sub_8140BEC(void) { return sSlotMachineState->bet; } -bool32 sub_8140BF8(s32 a0) +static bool32 sub_8140BF8(s32 a0) { return sSlotMachineState->field_3C[a0]; } -bool32 sub_8140C0C(void) +static bool32 sub_8140C0C(void) { s32 i; @@ -1858,7 +1858,7 @@ bool32 sub_8140C0C(void) return TRUE; } -void sub_8140C50(void) +static void sub_8140C50(void) { if (sSlotMachineGfxManager != NULL) { @@ -1867,7 +1867,7 @@ void sub_8140C50(void) } } -void sub_8140C6C(struct SlotMachineGfxManager * manager) +static void sub_8140C6C(struct SlotMachineGfxManager * manager) { s32 i, j; @@ -1881,7 +1881,7 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager) } } -void sub_8140CA0(void) +static void sub_8140CA0(void) { struct Sprite * sprite; s32 i, j; @@ -1907,7 +1907,7 @@ void sub_8140CA0(void) } } -void sub_8140D7C(const s16 * a0, const s16 * a1) +static void sub_8140D7C(const s16 * a0, const s16 * a1) { s32 i, j; s32 r6, r10; @@ -1939,7 +1939,7 @@ void sub_8140D7C(const s16 * a0, const s16 * a1) } } -void sub_8140E40(void) +static void sub_8140E40(void) { s32 vcount = REG_VCOUNT - 0x2B; if (vcount >= 0 && vcount < 0x54) @@ -1954,7 +1954,7 @@ void sub_8140E40(void) } } -void sub_8140E9C(void) +static void sub_8140E9C(void) { s32 i; s32 spriteId; @@ -1968,7 +1968,7 @@ void sub_8140E9C(void) } } -void sub_8140F2C(void) +static void sub_8140F2C(void) { s32 coins = GetCoins(); s32 payout = sub_8140BDC(); @@ -1988,7 +1988,7 @@ void sub_8140F2C(void) } } -void sub_8140FC4(void) +static void sub_8140FC4(void) { s32 spriteId; @@ -1999,7 +1999,7 @@ void sub_8140FC4(void) sSlotMachineGfxManager->field_68[1]->hFlip = TRUE; } -void sub_8141020(u8 a0) +static void sub_8141020(u8 a0) { s32 i; for (i = 0; i < 2; i++) @@ -2008,7 +2008,7 @@ void sub_8141020(u8 a0) } } -bool32 sub_814104C(void) +static bool32 sub_814104C(void) { s32 i; @@ -2022,7 +2022,7 @@ bool32 sub_814104C(void) return FALSE; } -void sub_8141094(void) +static void sub_8141094(void) { if (FuncIsActiveTask(sub_81410CC)) { @@ -2033,7 +2033,7 @@ void sub_8141094(void) FreeAllWindowBuffers(); } -void sub_81410CC(u8 taskId) +static void sub_81410CC(u8 taskId) { struct SlotMachineSetupTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); s32 i; @@ -2045,19 +2045,19 @@ void sub_81410CC(u8 taskId) } } -void sub_8141118(void) +static void sub_8141118(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -struct SlotMachineSetupTaskData * sub_814112C(void) +static struct SlotMachineSetupTaskData * sub_814112C(void) { return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); } -void sub_8141148(u16 a0, u8 a1) +static void sub_8141148(u16 a0, u8 a1) { struct SlotMachineSetupTaskData * ptr = sub_814112C(); ptr->field_0000[a1].unk0 = a0; @@ -2065,13 +2065,13 @@ void sub_8141148(u16 a0, u8 a1) ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); } -bool32 sub_8141180(u8 a0) +static bool32 sub_8141180(u8 a0) { return sub_814112C()->field_0000[a0].unk3; } #ifdef NONMATCHING -bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) { u16 pal; struct TextColor textColor; @@ -2167,7 +2167,7 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) } #else NAKED -bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -2459,7 +2459,7 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) } #endif //NONMATCHING -bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2475,7 +2475,7 @@ bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2492,20 +2492,20 @@ bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_81414EC(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_81414EC(u8 * state, struct SlotMachineSetupTaskData * ptr) { sub_8141020(1); return FALSE; } -bool8 sub_81414FC(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_81414FC(u8 * state, struct SlotMachineSetupTaskData * ptr) { sub_8141020(2); CreateTask(sub_814191C, 3); return FALSE; } -bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2524,25 +2524,25 @@ bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_8141558(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141558(u8 * state, struct SlotMachineSetupTaskData * ptr) { sub_8141020(3); return FALSE; } -bool8 sub_8141568(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141568(u8 * state, struct SlotMachineSetupTaskData * ptr) { sub_8141020(FALSE); return FALSE; } -bool8 sub_8141578(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141578(u8 * state, struct SlotMachineSetupTaskData * ptr) { sub_8140F2C(); return FALSE; } -bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2559,7 +2559,7 @@ bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2577,7 +2577,7 @@ bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2595,7 +2595,7 @@ bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2612,7 +2612,7 @@ bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2629,7 +2629,7 @@ bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2660,7 +2660,7 @@ bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) +static bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) { switch (*state) { @@ -2689,7 +2689,7 @@ bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) return TRUE; } -void sub_81417E4(const u8 * str) +static void sub_81417E4(const u8 * str) { FillWindowPixelBuffer(0, 0x11); PutWindowTilemap(0); @@ -2697,12 +2697,12 @@ void sub_81417E4(const u8 * str) AddTextPrinterParameterized5(0, 2, str, 1, 2, -1, NULL, 1, 2); } -void sub_8141828(void) +static void sub_8141828(void) { rbox_fill_rectangle(0); } -void sub_8141834(u16 * bgTilemapBuffer) +static void sub_8141834(u16 * bgTilemapBuffer) { switch (sub_8140BEC()) { @@ -2725,7 +2725,7 @@ void sub_8141834(u16 * bgTilemapBuffer) } } -void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) +static void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) { s32 i; const u16 * tileIdxs = gUnknown_8466C0C[whichLine].tiles; @@ -2739,7 +2739,7 @@ void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) } } -void sub_814191C(u8 taskId) +static void sub_814191C(u8 taskId) { s16 * data = gTasks[taskId].data; s32 i; @@ -2809,19 +2809,19 @@ void sub_814191C(u8 taskId) } } -void sub_8141AB0(void) +static void sub_8141AB0(void) { gTasks[FindTaskIdByFunc(sub_814191C)].data[0] = 2; } -void sub_8141AD8(u8 cursorPos) +static void sub_8141AD8(u8 cursorPos) { CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos); Menu_MoveCursorNoWrapAround(cursorPos); sub_814112C()->field_0028 = TRUE; } -void sub_8141B18(void) +static void sub_8141B18(void) { struct SlotMachineSetupTaskData * data = sub_814112C(); if (data->field_0028) @@ -2831,7 +2831,7 @@ void sub_8141B18(void) } } -void sub_8141B34(void) +static void sub_8141B34(void) { s32 i, j; struct SlotMachineSetupTaskData * data = sub_814112C(); @@ -2848,7 +2848,7 @@ void sub_8141B34(void) } } -void sub_8141BA0(u8 reel) +static void sub_8141BA0(u8 reel) { if (reel < 3) { @@ -2863,7 +2863,7 @@ void sub_8141BA0(u8 reel) } } -void sub_8141BE4(void) +static void sub_8141BE4(void) { s32 i, j; struct SlotMachineSetupTaskData * data = sub_814112C(); @@ -2879,7 +2879,7 @@ void sub_8141BE4(void) } } -void sub_8141C30(u8 a0, u8 a1) +static void sub_8141C30(u8 a0, u8 a1) { sub_814112C()->field_0020 = a0; sub_8141148(12, a1); -- cgit v1.2.3 From d58bf398b2b83a326d23d14d531de7f45a1058bb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 2 Aug 2019 17:41:44 -0400 Subject: Add rodata to calcrom --- .travis/calcrom/calcrom.pl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.travis/calcrom/calcrom.pl b/.travis/calcrom/calcrom.pl index 7b94c650b..1ad3e214d 100644 --- a/.travis/calcrom/calcrom.pl +++ b/.travis/calcrom/calcrom.pl @@ -9,6 +9,8 @@ open(my $file, $ARGV[0]) my $src = 0; my $asm = 0; +my $srcdata = 0; +my $data = 0; while (my $line = <$file>) { if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/.+\.o/) @@ -28,6 +30,17 @@ while (my $line = <$file>) $asm += $size; } } + elsif ($section =~ /rodata/) + { + if ($dir eq 'src') + { + $srcdata += $size; + } + elsif ($dir eq 'data') + { + $data += $size; + } + } } } @@ -118,3 +131,26 @@ print "$total_syms total symbols\n"; print "$documented symbols documented ($docPct%)\n"; print "$partial_documented symbols partially documented ($partialPct%)\n"; print "$undocumented symbols undocumented ($undocPct%)\n"; + +my $foundLines = `git grep '\.incbin "baserom\.gba"' data/`; +my @allLines = split('\n', $foundLines); +my $incbinTotal = 0; +my $incbinNum = 0; +foreach my $line (@allLines) +{ + if ($line =~ /\.incbin\s+"baserom\.gba",\s*0x\w+,\s*(.+?)\s*(\@.*)?$/) + { + my $size = hex($1); + $incbinTotal += $size; + $incbinNum++; + } +} +print "\n"; +my $dataTotal = $srcdata + $data; +my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); +my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); +my $incbinTotalPct = sprintf("%.4f", 100 * $incbinTotal / $dataTotal); +print "$dataTotal total bytes of data\n"; +print "$srcdata bytes of data in src ($srcDataPct%)\n"; +print "$data bytes of data in data ($dataPct%)\n"; +print "$incbinNum baserom incbins with a combined $incbinTotal bytes ($incbinTotalPct%)\n"; -- cgit v1.2.3