slot_machine: through sub_813FBC0

This commit is contained in:
PikalaxALT
2019-05-20 14:17:26 -04:00
parent 348bd19fdd
commit c33448ba09
7 changed files with 271 additions and 980 deletions
-510
View File
@@ -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}
+1
View File
@@ -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));
+1 -1
View File
@@ -3,6 +3,6 @@
#include "global.h"
void PlaySlotMachine(u8, void *);
void PlaySlotMachine(u16, void (*)(void));
#endif // GUARD_SLOT_MACHINE_H
-468
View File
@@ -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
+1
View File
@@ -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);
+267
View File
@@ -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;
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
#include "global.h"
#include "songs.h"
#include "constants/songs.h"
#include "sound.h"
#include "task.h"
#include "malloc.h"