diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-20 14:17:26 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-20 14:17:26 -0400 |
commit | c33448ba0929a54252b02bdc848c9f30d2a544cc (patch) | |
tree | c9b38f787325854a20975fecfee4dd2377f6e823 | |
parent | 348bd19fddefede38716607ffe0ecdb4ae199bea (diff) |
slot_machine: through sub_813FBC0
-rw-r--r-- | asm/slot_machine.s | 510 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | include/slot_machine.h | 2 | ||||
-rw-r--r-- | include/songs.h | 468 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/slot_machine.c | 267 | ||||
-rw-r--r-- | src/vs_seeker.c | 2 |
7 files changed, 271 insertions, 980 deletions
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" |