From dba353450429226d02bec958fdb8174e306eaeb7 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 18 Jun 2024 05:17:54 +0200 Subject: [PATCH] Named most things in REL/option --- config/GMPE01_00/rels/option/symbols.txt | 232 +-- include/REL/option.h | 99 +- src/REL/option/camera.c | 334 ++-- src/REL/option/guide.c | 269 +-- src/REL/option/record.c | 850 +++++---- src/REL/option/room.c | 291 +-- src/REL/option/rumble.c | 456 ++--- src/REL/option/scene.c | 180 +- src/REL/option/sound.c | 2220 +++++++++++----------- src/REL/option/state.c | 117 +- src/REL/option/window.c | 188 +- 11 files changed, 2725 insertions(+), 2511 deletions(-) diff --git a/config/GMPE01_00/rels/option/symbols.txt b/config/GMPE01_00/rels/option/symbols.txt index d5ad45af..01a62c17 100644 --- a/config/GMPE01_00/rels/option/symbols.txt +++ b/config/GMPE01_00/rels/option/symbols.txt @@ -2,14 +2,14 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0xC0 fn_1_160 = .text:0x00000160; // type:function size:0x110 -fn_1_270 = .text:0x00000270; // type:function size:0xE4 scope:local +HandleLRBtn = .text:0x00000270; // type:function size:0xE4 scope:local fn_1_354 = .text:0x00000354; // type:function size:0x114 scope:local fn_1_468 = .text:0x00000468; // type:function size:0xE8 scope:local fn_1_550 = .text:0x00000550; // type:function size:0x34 fn_1_584 = .text:0x00000584; // type:function size:0x34 fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 -fn_1_5EC = .text:0x000005EC; // type:function size:0xFC scope:local -fn_1_6E8 = .text:0x000006E8; // type:function size:0x110 scope:local +HandleScene = .text:0x000005EC; // type:function size:0xFC scope:local +KillScene = .text:0x000006E8; // type:function size:0x110 scope:local fn_1_7F8 = .text:0x000007F8; // type:function size:0x244 fn_1_A3C = .text:0x00000A3C; // type:function size:0x30 fn_1_A6C = .text:0x00000A6C; // type:function size:0x84 @@ -20,110 +20,110 @@ fn_1_C28 = .text:0x00000C28; // type:function size:0x30 fn_1_C58 = .text:0x00000C58; // type:function size:0x30 scope:local fn_1_C88 = .text:0x00000C88; // type:function size:0x30 fn_1_CB8 = .text:0x00000CB8; // type:function size:0x8C -fn_1_D44 = .text:0x00000D44; // type:function size:0x28 scope:local -fn_1_D6C = .text:0x00000D6C; // type:function size:0x578 scope:local +HandlerWrapper = .text:0x00000D44; // type:function size:0x28 scope:local +HandleCamera = .text:0x00000D6C; // type:function size:0x578 scope:local fn_1_12E4 = .text:0x000012E4; // type:function size:0x200 scope:local -fn_1_14E4 = .text:0x000014E4; // type:function size:0xC0 scope:local +PrintDebugInfo = .text:0x000014E4; // type:function size:0xC0 scope:local fn_1_15A4 = .text:0x000015A4; // type:function size:0x1F4 fn_1_1798 = .text:0x00001798; // type:function size:0xAC -fn_1_1844 = .text:0x00001844; // type:function size:0x1E8 scope:local +ChangeSelection = .text:0x00001844; // type:function size:0x1E8 scope:local fn_1_1A2C = .text:0x00001A2C; // type:function size:0x44 fn_1_1A70 = .text:0x00001A70; // type:function size:0x1C -fn_1_1A8C = .text:0x00001A8C; // type:function size:0x5FC scope:local -fn_1_2088 = .text:0x00002088; // type:function size:0x88 scope:local -fn_1_2110 = .text:0x00002110; // type:function size:0x34 scope:local -fn_1_2144 = .text:0x00002144; // type:function size:0x80 scope:local -fn_1_21C4 = .text:0x000021C4; // type:function size:0x34 scope:local +HandleRoom = .text:0x00001A8C; // type:function size:0x5FC scope:local +CreateBackground = .text:0x00002088; // type:function size:0x88 scope:local +KillBackground = .text:0x00002110; // type:function size:0x34 scope:local +CreateArrowPair = .text:0x00002144; // type:function size:0x80 scope:local +KillArrowPair = .text:0x000021C4; // type:function size:0x34 scope:local fn_1_21F8 = .text:0x000021F8; // type:function size:0x224 fn_1_241C = .text:0x0000241C; // type:function size:0x8C -fn_1_24A8 = .text:0x000024A8; // type:function size:0x44 scope:local -fn_1_24EC = .text:0x000024EC; // type:function size:0x1C scope:local +ChangeMode = .text:0x000024A8; // type:function size:0x44 scope:local +GetMode = .text:0x000024EC; // type:function size:0x1C scope:local fn_1_2508 = .text:0x00002508; // type:function size:0xA4 -fn_1_25AC = .text:0x000025AC; // type:function size:0x46C scope:local -fn_1_2A18 = .text:0x00002A18; // type:function size:0x2E8 scope:local +HandleGuide = .text:0x000025AC; // type:function size:0x46C scope:local +UpdateGuide = .text:0x00002A18; // type:function size:0x2E8 scope:local fn_1_2D00 = .text:0x00002D00; // type:function size:0x104 scope:local fn_1_2E04 = .text:0x00002E04; // type:function size:0x148 fn_1_2F4C = .text:0x00002F4C; // type:function size:0x64 -fn_1_2FB0 = .text:0x00002FB0; // type:function size:0x1A8 scope:local +HandleState = .text:0x00002FB0; // type:function size:0x1A8 scope:local fn_1_3158 = .text:0x00003158; // type:function size:0xD4 fn_1_322C = .text:0x0000322C; // type:function size:0x64 fn_1_3290 = .text:0x00003290; // type:function size:0x44 -fn_1_32D4 = .text:0x000032D4; // type:function size:0x1C -fn_1_32F0 = .text:0x000032F0; // type:function size:0x4BC scope:local -fn_1_37AC = .text:0x000037AC; // type:function size:0xBC scope:local -fn_1_3868 = .text:0x00003868; // type:function size:0x54 scope:local -fn_1_38BC = .text:0x000038BC; // type:function size:0xD0 scope:local -fn_1_398C = .text:0x0000398C; // type:function size:0x54 scope:local -fn_1_39E0 = .text:0x000039E0; // type:function size:0x128 scope:local -fn_1_3B08 = .text:0x00003B08; // type:function size:0x84 scope:local -fn_1_3B8C = .text:0x00003B8C; // type:function size:0x54 scope:local -fn_1_3BE0 = .text:0x00003BE0; // type:function size:0x8C scope:local -fn_1_3C6C = .text:0x00003C6C; // type:function size:0x94 scope:local -fn_1_3D00 = .text:0x00003D00; // type:function size:0x54 scope:local +fn_1_39D4 = .text:0x000032D4; // type:function size:0x1C +HandleRumble = .text:0x000032F0; // type:function size:0x4BC scope:local +CreateHand = .text:0x000037AC; // type:function size:0xBC scope:local +KillHand = .text:0x00003868; // type:function size:0x54 scope:local +CreateSystem = .text:0x000038BC; // type:function size:0xD0 scope:local +KillSystem = .text:0x0000398C; // type:function size:0x54 scope:local +StartSystemMotion = .text:0x000039E0; // type:function size:0x128 scope:local +CreatePad = .text:0x00003B08; // type:function size:0x84 scope:local +KillPad = .text:0x00003B8C; // type:function size:0x54 scope:local +ShakePad = .text:0x00003BE0; // type:function size:0x8C scope:local +CreatePadFilter = .text:0x00003C6C; // type:function size:0x94 scope:local +KillPadFilter = .text:0x00003D00; // type:function size:0x54 scope:local fn_1_3D54 = .text:0x00003D54; // type:function size:0xC8 fn_1_3E1C = .text:0x00003E1C; // type:function size:0xB4 fn_1_3ED0 = .text:0x00003ED0; // type:function size:0x58 -fn_1_3F28 = .text:0x00003F28; // type:function size:0xAC scope:local -fn_1_3FD4 = .text:0x00003FD4; // type:function size:0x54 scope:local +CreateHighlightOn = .text:0x00003F28; // type:function size:0xAC scope:local +KillHighlightOn = .text:0x00003FD4; // type:function size:0x54 scope:local fn_1_4028 = .text:0x00004028; // type:function size:0x2B4 fn_1_42DC = .text:0x000042DC; // type:function size:0xAC fn_1_4388 = .text:0x00004388; // type:function size:0x44 fn_1_43CC = .text:0x000043CC; // type:function size:0x1C -fn_1_43E8 = .text:0x000043E8; // type:function size:0x270 scope:local -fn_1_4658 = .text:0x00004658; // type:function size:0x424 scope:local -fn_1_4A7C = .text:0x00004A7C; // type:function size:0x3D4 scope:local -fn_1_4E50 = .text:0x00004E50; // type:function size:0x93C scope:local -fn_1_578C = .text:0x0000578C; // type:function size:0x8B8 scope:local -fn_1_6044 = .text:0x00006044; // type:function size:0xF8 scope:local -fn_1_613C = .text:0x0000613C; // type:function size:0x64 scope:local -fn_1_61A0 = .text:0x000061A0; // type:function size:0xFC scope:local -fn_1_629C = .text:0x0000629C; // type:function size:0x54 scope:local -fn_1_62F0 = .text:0x000062F0; // type:function size:0xFC scope:local -fn_1_63EC = .text:0x000063EC; // type:function size:0x54 scope:local -fn_1_6440 = .text:0x00006440; // type:function size:0x94 scope:local -fn_1_64D4 = .text:0x000064D4; // type:function size:0x54 scope:local -fn_1_6528 = .text:0x00006528; // type:function size:0x118 scope:local -fn_1_6640 = .text:0x00006640; // type:function size:0x54 scope:local -fn_1_6694 = .text:0x00006694; // type:function size:0x38 scope:local -fn_1_66CC = .text:0x000066CC; // type:function size:0x38 scope:local -fn_1_6704 = .text:0x00006704; // type:function size:0xC4 scope:local -fn_1_67C8 = .text:0x000067C8; // type:function size:0x60 scope:local -fn_1_6828 = .text:0x00006828; // type:function size:0x1E4 scope:local -fn_1_6A0C = .text:0x00006A0C; // type:function size:0x74 scope:local -fn_1_6A80 = .text:0x00006A80; // type:function size:0x1DC scope:local -fn_1_6C5C = .text:0x00006C5C; // type:function size:0x74 scope:local -fn_1_6CD0 = .text:0x00006CD0; // type:function size:0x1D4 scope:local -fn_1_6EA4 = .text:0x00006EA4; // type:function size:0xA4 scope:local -fn_1_6F48 = .text:0x00006F48; // type:function size:0x1D4 scope:local -fn_1_711C = .text:0x0000711C; // type:function size:0xA4 scope:local -fn_1_71C0 = .text:0x000071C0; // type:function size:0xE8 scope:local -fn_1_72A8 = .text:0x000072A8; // type:function size:0x68 scope:local -fn_1_7310 = .text:0x00007310; // type:function size:0x400 scope:local -fn_1_7710 = .text:0x00007710; // type:function size:0x190 scope:local -fn_1_78A0 = .text:0x000078A0; // type:function size:0x60 scope:local -fn_1_7900 = .text:0x00007900; // type:function size:0x3C scope:local -fn_1_793C = .text:0x0000793C; // type:function size:0x5C4 scope:local -fn_1_7F00 = .text:0x00007F00; // type:function size:0x148 scope:local -fn_1_8048 = .text:0x00008048; // type:function size:0x9C scope:local +HandleInitialScreen = .text:0x000043E8; // type:function size:0x270 scope:local +HandleOptionSel = .text:0x00004658; // type:function size:0x424 scope:local +HandleSoundSettings = .text:0x00004A7C; // type:function size:0x3D4 scope:local +HandleMusic = .text:0x00004E50; // type:function size:0x93C scope:local +HandleVoice = .text:0x0000578C; // type:function size:0x8B8 scope:local +TurnOnIndicator = .text:0x00006044; // type:function size:0xF8 scope:local +TurnOffIndicators = .text:0x0000613C; // type:function size:0x64 scope:local +CreateOptionHand = .text:0x000061A0; // type:function size:0xFC scope:local +KillOptionHand = .text:0x0000629C; // type:function size:0x54 scope:local +CreateSoundSettingsHand = .text:0x000062F0; // type:function size:0xFC scope:local +KillSoundSettingsHand = .text:0x000063EC; // type:function size:0x54 scope:local +CreateSystem = .text:0x00006440; // type:function size:0x94 scope:local +KillSystem = .text:0x000064D4; // type:function size:0x54 scope:local +CreateIndicator = .text:0x00006528; // type:function size:0x118 scope:local +KillIndicator = .text:0x00006640; // type:function size:0x54 scope:local +HideIndicator = .text:0x00006694; // type:function size:0x38 scope:local +ShowIndicator = .text:0x000066CC; // type:function size:0x38 scope:local +CreateSpr = .text:0x00006704; // type:function size:0xC4 scope:local +KillSpr = .text:0x000067C8; // type:function size:0x60 scope:local +DisplayOptionSel = .text:0x00006828; // type:function size:0x1E4 scope:local +HideOptionSel = .text:0x00006A0C; // type:function size:0x74 scope:local +DisplaySoundSettings = .text:0x00006A80; // type:function size:0x1DC scope:local +HideSoundSettings = .text:0x00006C5C; // type:function size:0x74 scope:local +DisplayMusicTitle = .text:0x00006CD0; // type:function size:0x1D4 scope:local +HideMusicTitle = .text:0x00006EA4; // type:function size:0xA4 scope:local +DisplayVoice = .text:0x00006F48; // type:function size:0x1D4 scope:local +HideVoiceTitle = .text:0x0000711C; // type:function size:0xA4 scope:local +CreateNote = .text:0x000071C0; // type:function size:0xE8 scope:local +KillNote = .text:0x000072A8; // type:function size:0x68 scope:local +HandleNote = .text:0x00007310; // type:function size:0x400 scope:local +SpawnNote = .text:0x00007710; // type:function size:0x190 scope:local +CreateNoteProcess = .text:0x000078A0; // type:function size:0x60 scope:local +KillNoteProcess = .text:0x00007900; // type:function size:0x3C scope:local +HandleNoteProcess = .text:0x0000793C; // type:function size:0x5C4 scope:local +PlaySound = .text:0x00007F00; // type:function size:0x148 scope:local +FadeOutCurrSound = .text:0x00008048; // type:function size:0x9C scope:local fn_1_80E4 = .text:0x000080E4; // type:function size:0x178 fn_1_825C = .text:0x0000825C; // type:function size:0x54 fn_1_82B0 = .text:0x000082B0; // type:function size:0x44 fn_1_82F4 = .text:0x000082F4; // type:function size:0x1C -fn_1_8310 = .text:0x00008310; // type:function size:0x778 scope:local -fn_1_8A88 = .text:0x00008A88; // type:function size:0xD0 scope:local -fn_1_8B58 = .text:0x00008B58; // type:function size:0x54 scope:local -fn_1_8BAC = .text:0x00008BAC; // type:function size:0xD8 scope:local -fn_1_8C84 = .text:0x00008C84; // type:function size:0xFC scope:local -fn_1_8D80 = .text:0x00008D80; // type:function size:0x54 scope:local -fn_1_8DD4 = .text:0x00008DD4; // type:function size:0xC4 scope:local -fn_1_8E98 = .text:0x00008E98; // type:function size:0x60 scope:local -fn_1_8EF8 = .text:0x00008EF8; // type:function size:0x40 scope:local -fn_1_8F38 = .text:0x00008F38; // type:function size:0x77C scope:local -fn_1_96B4 = .text:0x000096B4; // type:function size:0x9C scope:local -fn_1_9750 = .text:0x00009750; // type:function size:0x344 scope:local -fn_1_9A94 = .text:0x00009A94; // type:function size:0x7C scope:local -fn_1_9B10 = .text:0x00009B10; // type:function size:0x8A0 scope:local -fn_1_A3B0 = .text:0x0000A3B0; // type:function size:0x9C scope:local +HandleRecord = .text:0x00008310; // type:function size:0x778 scope:local +CreateSystem = .text:0x00008A88; // type:function size:0xD0 scope:local +KillSystem = .text:0x00008B58; // type:function size:0x54 scope:local +StartSystemMotion = .text:0x00008BAC; // type:function size:0xD8 scope:local +CreateHand = .text:0x00008C84; // type:function size:0xFC scope:local +KillHand = .text:0x00008D80; // type:function size:0x54 scope:local +CreateSpr = .text:0x00008DD4; // type:function size:0xC4 scope:local +KillSpr = .text:0x00008E98; // type:function size:0x60 scope:local +GetDigitSprAt = .text:0x00008EF8; // type:function size:0x40 scope:local +DisplayBoardRecord = .text:0x00008F38; // type:function size:0x77C scope:local +HideBoardRecordSpr = .text:0x000096B4; // type:function size:0x9C scope:local +DisplayTotalResults = .text:0x00009750; // type:function size:0x344 scope:local +HideTotalResultsSpr = .text:0x00009A94; // type:function size:0x7C scope:local +ShowMGRecord = .text:0x00009B10; // type:function size:0x8A0 scope:local +HideMGRecordSpr = .text:0x0000A3B0; // type:function size:0x9C scope:local fn_1_A44C = .text:0x0000A44C; // type:function size:0x260 fn_1_A6AC = .text:0x0000A6AC; // type:function size:0x40 fn_1_A6EC = .text:0x0000A6EC; // type:function size:0x18 @@ -135,9 +135,11 @@ fn_1_A7F0 = .text:0x0000A7F0; // type:function size:0x38 fn_1_A828 = .text:0x0000A828; // type:function size:0x38 fn_1_A860 = .text:0x0000A860; // type:function size:0x20 scope:local fn_1_A880 = .text:0x0000A880; // type:function size:0x24 -fn_1_A8A4 = .text:0x0000A8A4; // type:function size:0x108 scope:local +HandleWindow = .text:0x0000A8A4; // type:function size:0x108 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double @@ -171,11 +173,11 @@ lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:f lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0xC scope:local data:float +guidePosTbl = .rodata:0x000000BC; // type:object size:0xC scope:local data:float lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0xC scope:local +optionDescTbl = .rodata:0x000000D4; // type:object size:0xC scope:local lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC scope:local lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float @@ -215,10 +217,10 @@ lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data: lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x38 scope:local -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8C0 scope:local -lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x30 scope:local -lbl_1_rodata_AD0 = .rodata:0x00000AD0; // type:object size:0x780 scope:local +musicPageNameTbl = .rodata:0x000001A8; // type:object size:0x38 scope:local +musicTbl = .rodata:0x000001E0; // type:object size:0x8C0 scope:local +voiceCharNameTbl = .rodata:0x00000AA0; // type:object size:0x30 scope:local +voiceTbl = .rodata:0x00000AD0; // type:object size:0x780 scope:local lbl_1_rodata_1250 = .rodata:0x00001250; // type:object size:0x4 scope:local data:float lbl_1_rodata_1254 = .rodata:0x00001254; // type:object size:0x4 scope:local data:float lbl_1_rodata_1258 = .rodata:0x00001258; // type:object size:0x4 scope:local data:float @@ -227,9 +229,9 @@ lbl_1_rodata_1260 = .rodata:0x00001260; // type:object size:0x4 scope:local data lbl_1_rodata_1264 = .rodata:0x00001264; // type:object size:0x4 scope:local data:float lbl_1_rodata_1268 = .rodata:0x00001268; // type:object size:0x4 scope:local data:float lbl_1_rodata_1270 = .rodata:0x00001270; // type:object size:0x8 scope:local data:double -lbl_1_rodata_1278 = .rodata:0x00001278; // type:object size:0x8 scope:local -lbl_1_rodata_1280 = .rodata:0x00001280; // type:object size:0x8 scope:local -lbl_1_rodata_1288 = .rodata:0x00001288; // type:object size:0x8 scope:local +outputModeTbl = .rodata:0x00001278; // type:object size:0x8 scope:local +soundModeTbl = .rodata:0x00001280; // type:object size:0x8 scope:local +soundModeNameTbl = .rodata:0x00001288; // type:object size:0x8 scope:local lbl_1_rodata_1290 = .rodata:0x00001290; // type:object size:0x4 scope:local data:float lbl_1_rodata_1294 = .rodata:0x00001294; // type:object size:0x4 scope:local data:float lbl_1_rodata_1298 = .rodata:0x00001298; // type:object size:0x4 scope:local data:float @@ -246,21 +248,21 @@ lbl_1_rodata_12C0 = .rodata:0x000012C0; // type:object size:0x4 scope:local data lbl_1_rodata_12C4 = .rodata:0x000012C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_12C8 = .rodata:0x000012C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_12CC = .rodata:0x000012CC; // type:object size:0x4 scope:local data:float -lbl_1_rodata_12D0 = .rodata:0x000012D0; // type:object size:0x24 scope:local +indicatorPosTbl = .rodata:0x000012D0; // type:object size:0x24 scope:local lbl_1_rodata_12F4 = .rodata:0x000012F4; // type:object size:0x4 scope:local data:float lbl_1_rodata_12F8 = .rodata:0x000012F8; // type:object size:0x4 scope:local data:float lbl_1_rodata_12FC = .rodata:0x000012FC; // type:object size:0x4 scope:local data:float lbl_1_rodata_1300 = .rodata:0x00001300; // type:object size:0x4 scope:local data:float lbl_1_rodata_1304 = .rodata:0x00001304; // type:object size:0x4 scope:local data:float -lbl_1_rodata_1308 = .rodata:0x00001308; // type:object size:0x1C scope:local +optionSelSprIdxTbl = .rodata:0x00001308; // type:object size:0x1C scope:local lbl_1_rodata_1324 = .rodata:0x00001324; // type:object size:0x4 scope:local data:float lbl_1_rodata_1328 = .rodata:0x00001328; // type:object size:0x4 scope:local data:float lbl_1_rodata_132C = .rodata:0x0000132C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_1330 = .rodata:0x00001330; // type:object size:0x14 scope:local +soundSettingsSprTbl = .rodata:0x00001330; // type:object size:0x14 scope:local lbl_1_rodata_1344 = .rodata:0x00001344; // type:object size:0x4 scope:local data:float lbl_1_rodata_1348 = .rodata:0x00001348; // type:object size:0x4 scope:local data:float -lbl_1_rodata_134C = .rodata:0x0000134C; // type:object size:0x4 scope:local -lbl_1_rodata_1350 = .rodata:0x00001350; // type:object size:0x8 scope:local +musicTitleSprIdxTbl = .rodata:0x0000134C; // type:object size:0x4 scope:local +voiceTitleSprIdxTbl = .rodata:0x00001350; // type:object size:0x8 scope:local lbl_1_rodata_1358 = .rodata:0x00001358; // type:object size:0x8 scope:local data:double lbl_1_rodata_1360 = .rodata:0x00001360; // type:object size:0x8 scope:local data:double lbl_1_rodata_1368 = .rodata:0x00001368; // type:object size:0x4 scope:local data:float @@ -279,7 +281,7 @@ lbl_1_rodata_13A8 = .rodata:0x000013A8; // type:object size:0x8 scope:local data lbl_1_rodata_13B0 = .rodata:0x000013B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_13B4 = .rodata:0x000013B4; // type:object size:0x4 scope:local data:float lbl_1_rodata_13B8 = .rodata:0x000013B8; // type:object size:0x8 scope:local data:float -lbl_1_rodata_13C0 = .rodata:0x000013C0; // type:object size:0x18 scope:local +mgRecordIdxTbl = .rodata:0x000013C0; // type:object size:0x18 scope:local lbl_1_rodata_13D8 = .rodata:0x000013D8; // type:object size:0x4 scope:local data:float lbl_1_rodata_13DC = .rodata:0x000013DC; // type:object size:0x4 scope:local data:float lbl_1_rodata_13E0 = .rodata:0x000013E0; // type:object size:0x4 scope:local data:float @@ -301,7 +303,7 @@ lbl_1_rodata_142C = .rodata:0x0000142C; // type:object size:0x4 scope:local data lbl_1_rodata_1430 = .rodata:0x00001430; // type:object size:0x4 scope:local data:float lbl_1_rodata_1434 = .rodata:0x00001434; // type:object size:0x4 scope:local data:float lbl_1_rodata_1438 = .rodata:0x00001438; // type:object size:0x4 scope:local data:float -lbl_1_rodata_143C = .rodata:0x0000143C; // type:object size:0x264 scope:local +sprTbl = .rodata:0x0000143C; // type:object size:0x264 scope:local lbl_1_rodata_16A0 = .rodata:0x000016A0; // type:object size:0x4 scope:local data:float lbl_1_rodata_16A4 = .rodata:0x000016A4; // type:object size:0x4 scope:local data:float lbl_1_rodata_16A8 = .rodata:0x000016A8; // type:object size:0x4 scope:local data:float @@ -324,7 +326,7 @@ lbl_1_rodata_16E8 = .rodata:0x000016E8; // type:object size:0x4 scope:local data lbl_1_rodata_16EC = .rodata:0x000016EC; // type:object size:0x4 scope:local data:float lbl_1_rodata_16F0 = .rodata:0x000016F0; // type:object size:0x4 scope:local data:float lbl_1_rodata_16F4 = .rodata:0x000016F4; // type:object size:0x4 scope:local data:float -lbl_1_rodata_16F8 = .rodata:0x000016F8; // type:object size:0xD4 scope:local +boardRecordSprIdxTbl = .rodata:0x000016F8; // type:object size:0xD4 scope:local lbl_1_rodata_17CC = .rodata:0x000017CC; // type:object size:0x4 scope:local data:float lbl_1_rodata_17D0 = .rodata:0x000017D0; // type:object size:0x4 scope:local data:float lbl_1_rodata_17D4 = .rodata:0x000017D4; // type:object size:0x4 scope:local data:float @@ -332,14 +334,14 @@ lbl_1_rodata_17D8 = .rodata:0x000017D8; // type:object size:0x4 scope:local data lbl_1_rodata_17DC = .rodata:0x000017DC; // type:object size:0x4 scope:local data:float lbl_1_rodata_17E0 = .rodata:0x000017E0; // type:object size:0x4 scope:local data:float lbl_1_rodata_17E4 = .rodata:0x000017E4; // type:object size:0x4 scope:local data:float -lbl_1_rodata_17E8 = .rodata:0x000017E8; // type:object size:0x84 scope:local +totalResultsSprIdxTbl = .rodata:0x000017E8; // type:object size:0x84 scope:local lbl_1_rodata_186C = .rodata:0x0000186C; // type:object size:0x48 scope:local lbl_1_rodata_18B4 = .rodata:0x000018B4; // type:object size:0x4 scope:local data:float lbl_1_rodata_18B8 = .rodata:0x000018B8; // type:object size:0x4 scope:local data:float lbl_1_rodata_18BC = .rodata:0x000018BC; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C0 = .rodata:0x000018C0; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C4 = .rodata:0x000018C4; // type:object size:0x4 scope:local data:float -lbl_1_rodata_18C8 = .rodata:0x000018C8; // type:object size:0x108 scope:local +mgRecordSprIdxTbl = .rodata:0x000018C8; // type:object size:0x108 scope:local lbl_1_rodata_19D0 = .rodata:0x000019D0; // type:object size:0x4 scope:local data:float lbl_1_rodata_19D4 = .rodata:0x000019D4; // type:object size:0x4 scope:local data:float lbl_1_rodata_19D8 = .rodata:0x000019D8; // type:object size:0x4 scope:local data:float @@ -351,26 +353,26 @@ lbl_1_rodata_19EC = .rodata:0x000019EC; // type:object size:0x4 scope:local data lbl_1_data_1C = .data:0x0000001C; // type:object size:0x1B scope:local data:string lbl_1_data_37 = .data:0x00000037; // type:object size:0x1B scope:local data:string lbl_1_data_52 = .data:0x00000052; // type:object size:0x16 scope:local data:string -lbl_1_data_68 = .data:0x00000068; // type:object size:0x8 scope:local data:4byte +modes = .data:0x00000068; // type:object size:0x8 scope:local data:4byte jumptable_1_data_70 = .data:0x00000070; // type:object size:0x24 scope:local -lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:4byte -lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x1C scope:local -lbl_1_data_BC = .data:0x000000BC; // type:object size:0x24 scope:local +modes = .data:0x00000098; // type:object size:0x8 scope:local data:4byte +lightTbl = .data:0x000000A0; // type:object size:0x1C scope:local +shadowPosTbl = .data:0x000000BC; // type:object size:0x24 scope:local jumptable_1_data_E0 = .data:0x000000E0; // type:object size:0x24 scope:local -lbl_1_data_108 = .data:0x00000108; // type:object size:0x8 scope:local data:4byte +modes = .data:0x00000108; // type:object size:0x8 scope:local data:4byte lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 scope:local -lbl_1_data_118 = .data:0x00000118; // type:object size:0x38 scope:local data:4byte -lbl_1_data_150 = .data:0x00000150; // type:object size:0x18 scope:local data:4byte -lbl_1_data_168 = .data:0x00000168; // type:object size:0xC scope:local +musicPageEnabledTbl = .data:0x00000118; // type:object size:0x38 scope:local data:4byte +modes = .data:0x00000150; // type:object size:0x18 scope:local data:4byte +optionTextTbl = .data:0x00000168; // type:object size:0xC scope:local jumptable_1_data_174 = .data:0x00000174; // type:object size:0x24 scope:local jumptable_1_data_198 = .data:0x00000198; // type:object size:0x24 scope:local -lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x4C scope:local -lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 scope:local -lbl_1_data_210 = .data:0x00000210; // type:object size:0x8 scope:local data:4byte +sprTbl = .data:0x000001BC; // type:object size:0x4C scope:local +noteSprTbl = .data:0x00000208; // type:object size:0x8 scope:local +modes = .data:0x00000210; // type:object size:0x8 scope:local data:4byte jumptable_1_data_218 = .data:0x00000218; // type:object size:0x1C scope:local jumptable_1_data_234 = .data:0x00000234; // type:object size:0x20 scope:local -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +rumbleF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte +scene = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x8 data:4byte diff --git a/include/REL/option.h b/include/REL/option.h index 8334ff77..245afabe 100755 --- a/include/REL/option.h +++ b/include/REL/option.h @@ -6,72 +6,71 @@ #include "dolphin/types.h" typedef struct { - /* 0x00 */ Process *unk00; - /* 0x04 */ s16 unk04; - /* 0x06 */ char unk06[2]; - /* 0x08 */ s32 unk08; - /* 0x0C */ s32 unk0C; - /* 0x10 */ s32 unk10; - /* 0x14 */ s32 unk14; - /* 0x18 */ u32 unk18; - /* 0x1C */ s32 unk1C; - /* 0x20 */ s32 unk20; -} UnkWindowDataStruct; // Size 0x24 + /* 0x00 */ Process *process; + /* 0x04 */ s16 window; + /* 0x08 */ s32 id; + /* 0x0C */ s32 visible; + /* 0x10 */ BOOL messWaitSignal; + /* 0x14 */ BOOL choiceSignal; + /* 0x18 */ u32 messToBeSet; + /* 0x1C */ s32 choice; + /* 0x20 */ s32 state; // TODO add defines +} WindowWork; // Size 0x24 -void fn_1_160(s16 arg0, s32 arg1, s32 arg2); -s32 fn_1_550(u16 arg0); -s32 fn_1_584(u16 arg0); -s32 fn_1_5B8(u16 arg0); +void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime); +BOOL fn_1_550(u16 btn); +BOOL fn_1_584(u16 arg0); +BOOL fn_1_5B8(u16 arg0); omObjData *fn_1_7F8(void); -void fn_1_A3C(omObjData *arg0); -void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); -void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); -void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); -float fn_1_BF8(omObjData *arg0); -float fn_1_C28(omObjData *arg0); -void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3); -s32 fn_1_CB8(omObjData *arg0); +void fn_1_A3C(omObjData *object); +void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration); +void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration); +void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration); +float fn_1_BF8(omObjData *object); +float fn_1_C28(omObjData *object); +void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ); +s32 fn_1_CB8(omObjData *object); omObjData *fn_1_15A4(void); -void fn_1_1798(omObjData *arg0); -void fn_1_1A2C(omObjData *arg0, s32 arg1); -s32 fn_1_1A70(omObjData *arg0); +void fn_1_1798(omObjData *object); +void fn_1_1A2C(omObjData *object, s32 mode); +s32 fn_1_1A70(omObjData *object); omObjData *fn_1_21F8(void); -void fn_1_241C(omObjData *arg0); -void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3); +void fn_1_241C(omObjData *object); +void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration); omObjData *fn_1_2E04(void); -void fn_1_2F4C(omObjData *arg0); +void fn_1_2F4C(omObjData *object); omObjData *fn_1_3158(void); -void fn_1_322C(omObjData *arg0); -void fn_1_3290(omObjData *arg0, s32 arg1); -s32 fn_1_32D4(omObjData *arg0); -void fn_1_3D54(omObjData *arg0); -void fn_1_3E1C(omObjData *arg0); -s32 fn_1_3ED0(omObjData *arg0); +void fn_1_322C(omObjData *object); +void fn_1_3290(omObjData *object, s32 mode); +s32 fn_1_39D4(omObjData *object); +void fn_1_3D54(omObjData *object); +void fn_1_3E1C(omObjData *object); +BOOL fn_1_3ED0(omObjData *object); omObjData *fn_1_4028(void); -void fn_1_42DC(omObjData *arg0); -void fn_1_4388(omObjData *arg0, s32 arg1); -s32 fn_1_43CC(omObjData *arg0); +void fn_1_42DC(omObjData *object); +void fn_1_4388(omObjData *object, s32 arg1); +s32 fn_1_43CC(omObjData *object); omObjData *fn_1_80E4(void); -void fn_1_825C(omObjData *arg0); -void fn_1_82B0(omObjData *arg0, s32 arg1); -s32 fn_1_82F4(omObjData *arg0); +void fn_1_825C(omObjData *object); +void fn_1_82B0(omObjData *object, s32 arg1); +s32 fn_1_82F4(omObjData *object); -UnkWindowDataStruct *fn_1_A44C(s32 arg0); -void fn_1_A6AC(UnkWindowDataStruct *arg0); -void fn_1_A6EC(UnkWindowDataStruct *arg0); -void fn_1_A704(UnkWindowDataStruct *arg0); -void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1); -void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2); -void fn_1_A7F0(UnkWindowDataStruct *arg0); -void fn_1_A828(UnkWindowDataStruct *arg0); -void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1); +WindowWork *fn_1_A44C(s32 id); +void fn_1_A6AC(WindowWork *work); +void fn_1_A6EC(WindowWork *work); +void fn_1_A704(WindowWork *work); +void fn_1_A71C(WindowWork *work, s32 mess); +void fn_1_A7B0(WindowWork *work, float x, float y); +void fn_1_A7F0(WindowWork *work); +void fn_1_A828(WindowWork *work); +void fn_1_A880(WindowWork *work, s32 choice); extern Process *lbl_1_bss_8; extern omObjData *lbl_1_bss_10; diff --git a/src/REL/option/camera.c b/src/REL/option/camera.c index a9d3d31d..3af79c9b 100755 --- a/src/REL/option/camera.c +++ b/src/REL/option/camera.c @@ -6,232 +6,248 @@ #include "game/process.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { - /* 0x00 */ Vec unk00; - /* 0x0C */ Vec unk0C; - /* 0x18 */ float unk18; - /* 0x1C */ float unk1C; - /* 0x20 */ float unk20; - /* 0x24 */ float unk24; - /* 0x28 */ float unk28; - /* 0x2C */ Vec unk2C; - /* 0x38 */ Vec unk38; + /* 0x00 */ Vec eyePos; + /* 0x0C */ Vec lookingAt; + /* 0x18 */ Vec tilt; + /* 0x24 */ float zoom; + /* 0x28 */ float rot; + /* 0x2C */ Vec prevEyePos; + /* 0x38 */ Vec prevLookingAt; /* 0x44 */ char unk44[0xC]; - /* 0x50 */ float unk50; - /* 0x54 */ float unk54; - /* 0x58 */ Vec unk58; - /* 0x64 */ Vec unk64; + /* 0x50 */ float prevZoom; + /* 0x54 */ float prevRot; + /* 0x58 */ Vec eyePosTarget; + /* 0x64 */ Vec lookingAtTarget; /* 0x70 */ char unk70[0xC]; - /* 0x7C */ float unk7C; - /* 0x80 */ float unk80; - /* 0x84 */ float unk84; - /* 0x88 */ float unk88; - /* 0x8C */ float unk8C; - /* 0x90 */ float unk90; - /* 0x94 */ float unk94; - /* 0x98 */ float unk98; -} UnkCameraDataStruct; // Size 0x9C + /* 0x7C */ float zoomTarget; + /* 0x80 */ float rotTarget; + /* 0x84 */ float eyeVelocity; + /* 0x88 */ float eyeSpeed; + /* 0x8C */ float lookingAtVelocity; + /* 0x90 */ float lookingAtSpeed; + /* 0x94 */ float rotVelocity; + /* 0x98 */ float rotSpeed; +} CameraWork; // Size 0x9C -static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3); -static void fn_1_D44(omObjData *arg0); -static void fn_1_D6C(omObjData *arg0); -static void fn_1_12E4(omObjData *arg0); -static void fn_1_14E4(omObjData *arg0); +static void fn_1_C58(omObjData *object, float *arg1, float *arg2, float *arg3); +static void HandlerWrapper(omObjData *object); +static void HandleCamera(omObjData *object); +static void fn_1_12E4(omObjData *object); +static void PrintDebugInfo(omObjData *object); omObjData *lbl_1_bss_10; -static float pad_04_00000000_data[] = { - 0.0f, 500.0f, 0.0f, - 0.0f, -1.0f, 0.0f -}; +static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f }; static s32 pad_04_00000018_data = -1; -omObjData *fn_1_7F8(void) { - omObjData *var_r30; - UnkCameraDataStruct *temp_r31; +omObjData *fn_1_7F8(void) +{ + omObjData *object; + CameraWork *work; - var_r30 = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, fn_1_D44); - temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkCameraDataStruct), MEMORY_DEFAULT_NUM); - var_r30->data = temp_r31; - temp_r31->unk00.x = 0.0f; - temp_r31->unk00.y = 0.0f; - temp_r31->unk00.z = 0.0f; - temp_r31->unk0C.x = 0.0f; - temp_r31->unk0C.y = 0.0f; - temp_r31->unk0C.z = 0.0f; - temp_r31->unk18 = 0.0f; - temp_r31->unk1C = 1.0f; - temp_r31->unk20 = 0.0f; - temp_r31->unk24 = 0.0f; - temp_r31->unk28 = 0.0f; - temp_r31->unk8C = 1.0f; - temp_r31->unk84 = 1.0f; - temp_r31->unk94 = 1.0f; + object = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, HandlerWrapper); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->eyePos.x = 0.0f; + work->eyePos.y = 0.0f; + work->eyePos.z = 0.0f; + work->lookingAt.x = 0.0f; + work->lookingAt.y = 0.0f; + work->lookingAt.z = 0.0f; + work->tilt.x = 0.0f; + work->tilt.y = 1.0f; + work->tilt.z = 0.0f; + work->zoom = 0.0f; + work->rot = 0.0f; + work->lookingAtVelocity = 1.0f; + work->eyeVelocity = 1.0f; + work->rotVelocity = 1.0f; Hu3DCameraCreate(1); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f); - fn_1_B74(var_r30, 600.0f, 60.0f, 120.0f, 1); - fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1); - return var_r30; + fn_1_B74(object, 600.0f, 60.0f, 120.0f, 1); + fn_1_A6C(object, 180.0f, 120.0f, 0.0f, 1); + return object; } -void fn_1_A3C(omObjData *arg0) { - HuMemDirectFree(arg0->data); +void fn_1_A3C(omObjData *object) +{ + HuMemDirectFree(object->data); } -void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { - UnkCameraDataStruct *temp_r31 = arg0->data; +void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration) +{ + CameraWork *work = object->data; - temp_r31->unk58.x = arg1; - temp_r31->unk58.y = arg2; - temp_r31->unk58.z = arg3; - temp_r31->unk2C = temp_r31->unk00; - temp_r31->unk84 = 0.0f; - temp_r31->unk88 = 1.0f / arg4; + work->eyePosTarget.x = x; + work->eyePosTarget.y = y; + work->eyePosTarget.z = z; + work->prevEyePos = work->eyePos; + work->eyeVelocity = 0.0f; + work->eyeSpeed = 1.0f / duration; } -void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { - UnkCameraDataStruct *temp_r31 = arg0->data; +void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration) +{ + CameraWork *work = object->data; - temp_r31->unk64.x = arg1; - temp_r31->unk64.y = arg2; - temp_r31->unk64.z = arg3; - temp_r31->unk38 = temp_r31->unk0C; - temp_r31->unk8C = 0.0f; - temp_r31->unk90 = 1.0f / arg4; + work->lookingAtTarget.x = x; + work->lookingAtTarget.y = y; + work->lookingAtTarget.z = z; + work->prevLookingAt = work->lookingAt; + work->lookingAtVelocity = 0.0f; + work->lookingAtSpeed = 1.0f / duration; } -void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { - UnkCameraDataStruct *temp_r31 = arg0->data; +void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration) +{ + CameraWork *work = object->data; - temp_r31->unk64.y = arg3; - temp_r31->unk7C = arg1; - temp_r31->unk80 = arg2; - temp_r31->unk38.y = temp_r31->unk0C.y; - temp_r31->unk50 = temp_r31->unk24; - temp_r31->unk54 = temp_r31->unk28; - temp_r31->unk94 = 0.0f; - temp_r31->unk98 = 1.0f / arg4; + work->lookingAtTarget.y = y; + work->zoomTarget = zoom; + work->rotTarget = rot; + work->prevLookingAt.y = work->lookingAt.y; + work->prevZoom = work->zoom; + work->prevRot = work->rot; + work->rotVelocity = 0.0f; + work->rotSpeed = 1.0f / duration; } -float fn_1_BF8(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; - float temp_f31; +// GetZoom +float fn_1_BF8(omObjData *object) +{ + CameraWork *work = object->data; + float zoom; - temp_f31 = temp_r31->unk24; - return temp_f31; + zoom = work->zoom; + return zoom; } -float fn_1_C28(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; - float temp_f31; +// GetRot +float fn_1_C28(omObjData *object) +{ + CameraWork *work = object->data; + float rot; - temp_f31 = temp_r31->unk28; - return temp_f31; + rot = work->rot; + return rot; } -static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3) { - UnkCameraDataStruct *temp_r31 = arg0->data; +// GetEyePos +static void fn_1_C58(omObjData *object, float *eyePosX, float *eyePosY, float *eyePosZ) +{ + CameraWork *temp_r31 = object->data; - *arg1 = temp_r31->unk00.x; - *arg2 = temp_r31->unk00.y; - *arg3 = temp_r31->unk00.z; + *eyePosX = temp_r31->eyePos.x; + *eyePosY = temp_r31->eyePos.y; + *eyePosZ = temp_r31->eyePos.z; } -void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) { - UnkCameraDataStruct *temp_r31 = arg0->data; +// GetLookingAt +void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ) +{ + CameraWork *work = object->data; - *arg1 = temp_r31->unk0C.x; - *arg2 = temp_r31->unk0C.y; - *arg3 = temp_r31->unk0C.z; + *lookingAtX = work->lookingAt.x; + *lookingAtY = work->lookingAt.y; + *lookingAtZ = work->lookingAt.z; } -s32 fn_1_CB8(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; +// CameraDone +s32 fn_1_CB8(omObjData *object) +{ + CameraWork *work = object->data; s32 var_r30 = 1; s32 var_r29 = 1; - if (!(temp_r31->unk8C < 1.0f) && !(temp_r31->unk94 < 1.0f)) { + if (!(work->lookingAtVelocity < 1.0f) && !(work->rotVelocity < 1.0f)) { var_r29 = 0; } - if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) { + if (var_r29 == 0 && !(work->eyeVelocity < 1.0f)) { var_r30 = 0; } return var_r30; } -static void fn_1_D44(omObjData *arg0) { - fn_1_D6C(arg0); +static void HandlerWrapper(omObjData *object) +{ + HandleCamera(object); } -static void fn_1_D6C(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; +static void HandleCamera(omObjData *object) +{ + CameraWork *work = object->data; float temp_f28; - float temp_f31; - float temp_f30; + float xDiff; + float zDiff; - if (temp_r31->unk84 < 1.0f) { - temp_f28 = sin(90.0f * temp_r31->unk84 * M_PI / 180.0); - temp_r31->unk00.x = temp_r31->unk2C.x + temp_f28 * (temp_r31->unk58.x - temp_r31->unk2C.x); - temp_r31->unk00.y = temp_r31->unk2C.y + temp_f28 * (temp_r31->unk58.y - temp_r31->unk2C.y); - temp_r31->unk00.z = temp_r31->unk2C.z + temp_f28 * (temp_r31->unk58.z - temp_r31->unk2C.z); - if ((temp_r31->unk84 += temp_r31->unk88) >= 1.0f) { - temp_r31->unk00 = temp_r31->unk58; + if (work->eyeVelocity < 1.0f) { + temp_f28 = sind(90.0f * work->eyeVelocity); + work->eyePos.x = work->prevEyePos.x + temp_f28 * (work->eyePosTarget.x - work->prevEyePos.x); + work->eyePos.y = work->prevEyePos.y + temp_f28 * (work->eyePosTarget.y - work->prevEyePos.y); + work->eyePos.z = work->prevEyePos.z + temp_f28 * (work->eyePosTarget.z - work->prevEyePos.z); + if ((work->eyeVelocity += work->eyeSpeed) >= 1.0f) { + work->eyePos = work->eyePosTarget; } } - if (temp_r31->unk8C < 1.0f) { - temp_f28 = sin(90.0f * temp_r31->unk8C * M_PI / 180.0); - temp_r31->unk0C.x = temp_r31->unk38.x + temp_f28 * (temp_r31->unk64.x - temp_r31->unk38.x); - temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); - temp_r31->unk0C.z = temp_r31->unk38.z + temp_f28 * (temp_r31->unk64.z - temp_r31->unk38.z); - if ((temp_r31->unk8C += temp_r31->unk90) >= 1.0f) { - temp_r31->unk0C = temp_r31->unk64; + if (work->lookingAtVelocity < 1.0f) { + temp_f28 = sind(90.0f * work->lookingAtVelocity); + work->lookingAt.x = work->prevLookingAt.x + temp_f28 * (work->lookingAtTarget.x - work->prevLookingAt.x); + work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y); + work->lookingAt.z = work->prevLookingAt.z + temp_f28 * (work->lookingAtTarget.z - work->prevLookingAt.z); + if ((work->lookingAtVelocity += work->lookingAtSpeed) >= 1.0f) { + work->lookingAt = work->lookingAtTarget; } } - if (temp_r31->unk94 < 1.0f) { - temp_f28 = sin(90.0f * temp_r31->unk94 * M_PI / 180.0); - temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); - temp_r31->unk24 = temp_r31->unk50 + temp_f28 * (temp_r31->unk7C - temp_r31->unk50); - temp_r31->unk28 = temp_r31->unk54 + temp_f28 * (temp_r31->unk80 - temp_r31->unk54); - if ((temp_r31->unk94 += temp_r31->unk98) >= 1.0f) { - temp_r31->unk0C.y = temp_r31->unk64.y; - temp_r31->unk24 = temp_r31->unk7C; - temp_r31->unk28 = temp_r31->unk80; + if (work->rotVelocity < 1.0f) { + temp_f28 = sind(90.0f * work->rotVelocity); + work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y); + work->zoom = work->prevZoom + temp_f28 * (work->zoomTarget - work->prevZoom); + work->rot = work->prevRot + temp_f28 * (work->rotTarget - work->prevRot); + if ((work->rotVelocity += work->rotSpeed) >= 1.0f) { + work->lookingAt.y = work->lookingAtTarget.y; + work->zoom = work->zoomTarget; + work->rot = work->rotTarget; } - temp_r31->unk0C.x = temp_r31->unk24 * -sin(temp_r31->unk28 * M_PI / 180.0); - temp_r31->unk0C.z = temp_r31->unk24 * cos(temp_r31->unk28 * M_PI / 180.0); + work->lookingAt.x = work->zoom * -sind(work->rot); + work->lookingAt.z = work->zoom * cosd(work->rot); } - temp_f31 = temp_r31->unk0C.x - temp_r31->unk00.x; - temp_f30 = temp_r31->unk0C.z - temp_r31->unk00.z; - temp_r31->unk24 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); - temp_r31->unk28 = fmod(-(180.0 * (atan2(temp_f31, temp_f30) / M_PI)), 360.0); - if (temp_r31->unk28 < 0.0f) { - temp_r31->unk28 += 360.0f; + xDiff = work->lookingAt.x - work->eyePos.x; + zDiff = work->lookingAt.z - work->eyePos.z; + work->zoom = sqrtf(xDiff * xDiff + zDiff * zDiff); + work->rot = fmod(-atan2d(xDiff, zDiff), 360.0); + if (work->rot < 0.0f) { + work->rot += 360.0f; } - Hu3DCameraPosSet(1, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z, temp_r31->unk18, temp_r31->unk1C, temp_r31->unk20, temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z); + + Hu3DCameraPosSet(1, work->eyePos.x, work->eyePos.y, work->eyePos.z, work->tilt.x, work->tilt.y, work->tilt.z, work->lookingAt.x, + work->lookingAt.y, work->lookingAt.z); } -static void fn_1_12E4(omObjData *arg0) { - UnkCameraDataStruct *temp_r31; +static void fn_1_12E4(omObjData *object) +{ + CameraWork *work; if (HuPadBtn[0] & 0xF) { - temp_r31 = arg0->data; - temp_r31->unk0C.x += 0.5f * HuPadStkX[0]; - temp_r31->unk0C.y += 0.5f * HuPadStkY[0]; - temp_r31->unk00.z += 0.5f * HuPadTrigL[0]; - temp_r31->unk00.z -= 0.5f * HuPadTrigR[0]; - temp_r31->unk00.x += 0.5f * HuPadSubStkY[0]; - temp_r31->unk00.y += 0.5f * HuPadSubStkX[0]; + work = object->data; + work->lookingAt.x += 0.5f * HuPadStkX[0]; + work->lookingAt.y += 0.5f * HuPadStkY[0]; + work->eyePos.z += 0.5f * HuPadTrigL[0]; + work->eyePos.z -= 0.5f * HuPadTrigR[0]; + work->eyePos.x += 0.5f * HuPadSubStkY[0]; + work->eyePos.y += 0.5f * HuPadSubStkX[0]; } } -static void fn_1_14E4(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; +static void PrintDebugInfo(omObjData *object) +{ + CameraWork *work = object->data; - print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z); - print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z); - print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", temp_r31->unk24, temp_r31->unk28); + print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->lookingAt.x, work->lookingAt.y, work->lookingAt.z); + print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->eyePos.x, work->eyePos.y, work->eyePos.z); + print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot); } diff --git a/src/REL/option/guide.c b/src/REL/option/guide.c index c48edf1f..df72838a 100755 --- a/src/REL/option/guide.c +++ b/src/REL/option/guide.c @@ -6,35 +6,34 @@ #include "game/memory.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { - /* 0x00 */ s32 unk00; - /* 0x04 */ s16 unk04; + /* 0x00 */ s32 mode; + /* 0x04 */ s16 motionIdx; /* 0x06 */ char unk06[2]; - /* 0x08 */ Vec unk08; - /* 0x14 */ Vec unk14; - /* 0x20 */ float unk20; - /* 0x24 */ float unk24; - /* 0x28 */ float unk28; - /* 0x2C */ float unk2C; - /* 0x30 */ float unk30; - /* 0x34 */ float unk34; - /* 0x38 */ float unk38; - /* 0x3C */ float unk3C; - /* 0x40 */ float unk40; - /* 0x44 */ float unk44; + /* 0x08 */ Vec pos; + /* 0x14 */ Vec newPos; + /* 0x20 */ Vec rot; + /* 0x2C */ Vec posChange; + /* 0x38 */ float distanceToMove; + /* 0x3C */ float unkAngle; + /* 0x40 */ float posToMoveTo; + /* 0x44 */ float distFromCam; /* 0x48 */ char unk48[0xC]; - /* 0x54 */ float unk54; - /* 0x58 */ float unk58; + /* 0x54 */ float velocity; + /* 0x58 */ float speed; /* 0x5C */ s32 unk5C; /* 0x60 */ s32 unk60; -} UnkGuideDataStruct; // Size 0x64 +} GuideWork; // Size 0x64 -static void fn_1_24A8(omObjData *arg0, s32 arg1); -static s32 fn_1_24EC(omObjData *arg0); -static void fn_1_25AC(omObjData *arg0); -static void fn_1_2A18(omObjData *arg0); +#define MODE_DISABLED 0 +#define MODE_HANDLE_GUIDE 1 + +static void ChangeMode(omObjData *object, s32 mode); +static s32 GetMode(omObjData *object); +static void HandleGuide(omObjData *object); +static void UpdateGuide(omObjData *object); static float fn_1_2D00(float arg0, float arg1, float arg2); omObjData *lbl_1_bss_20; @@ -42,176 +41,184 @@ omObjData *lbl_1_bss_20; static const s32 lbl_1_rodata_E0[] = { DATA_MAKE_NUM(DATADIR_OPTION, 16), DATA_MAKE_NUM(DATADIR_OPTION, 17), - DATA_MAKE_NUM(DATADIR_OPTION, 18) + DATA_MAKE_NUM(DATADIR_OPTION, 18), }; -static omObjFunc lbl_1_data_98[] = { - NULL, - fn_1_25AC -}; +static omObjFunc modes[] = { NULL, HandleGuide }; -omObjData *fn_1_21F8(void) { - omObjData *var_r31; - UnkGuideDataStruct *temp_r30; +omObjData *fn_1_21F8(void) +{ + omObjData *object; + GuideWork *work; s32 i; - var_r31 = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); - temp_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkGuideDataStruct), MEMORY_DEFAULT_NUM); - var_r31->data = temp_r30; - temp_r30->unk08.x = -298.59f; - temp_r30->unk08.z = 298.21f; - temp_r30->unk08.y = 0.0f; - temp_r30->unk20 = 0.0f; - temp_r30->unk24 = 134.42f; - temp_r30->unk28 = 0.0f; - temp_r30->unk2C = 0.0f; - temp_r30->unk34 = 0.0f; - temp_r30->unk30 = 0.0f; - var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); - Hu3DModelLayerSet(var_r31->model[0], 1); + object = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->pos.x = -298.59f; + work->pos.z = 298.21f; + work->pos.y = 0.0f; + + work->rot.x = 0.0f; + work->rot.y = 134.42f; + work->rot.z = 0.0f; + + work->posChange.x = 0.0f; + work->posChange.z = 0.0f; + work->posChange.y = 0.0f; + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); + Hu3DModelLayerSet(object->model[0], 1); for (i = 0; i < 3; i++) { - var_r31->motion[i] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); + object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); } - temp_r30->unk5C = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 0xC); - temp_r30->unk60 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 0xC); + work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC); + work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); CharModelLayerSetAll(1); - Hu3DModelShadowSet(var_r31->model[0]); - Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[0], 0.0f, 8.0f, 0x40000001); - fn_1_24A8(var_r31, 0); - fn_1_2A18(var_r31); - return var_r31; + Hu3DModelShadowSet(object->model[0]); + Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001); + ChangeMode(object, MODE_DISABLED); + UpdateGuide(object); + return object; } -void fn_1_241C(omObjData *arg0) { - UnkGuideDataStruct *temp_r29 = arg0->data; +void fn_1_241C(omObjData *object) +{ + GuideWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } for (i = 0; i < 3; i++) { - Hu3DMotionKill(arg0->motion[i]); + Hu3DMotionKill(object->motion[i]); } - HuMemDirectFree(temp_r29); + HuMemDirectFree(work); } -static void fn_1_24A8(omObjData *arg0, s32 arg1) { - UnkGuideDataStruct *temp_r31 = arg0->data; +static void ChangeMode(omObjData *object, s32 mode) +{ + GuideWork *work = object->data; - temp_r31->unk00 = arg1; - arg0->func = lbl_1_data_98[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->mode = mode; + object->func = modes[mode]; + object->unk10 = 0; + object->unk10 = 0; } -static s32 fn_1_24EC(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; +static s32 GetMode(omObjData *object) +{ + GuideWork *work = object->data; - return temp_r31->unk00; + return work->mode; } -void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) { - UnkGuideDataStruct *temp_r31 = arg0->data; +void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration) +{ + GuideWork *work = object->data; - temp_r31->unk40 = arg1; - temp_r31->unk44 = arg2; - temp_r31->unk54 = 0.0f; - temp_r31->unk58 = 1.0f / arg3; - temp_r31->unk04 = 0; - fn_1_24A8(arg0, 1); + work->posToMoveTo = destPos; + work->distFromCam = distFromCam; + work->velocity = 0.0f; + work->speed = 1.0f / walkDuration; + work->motionIdx = 0; + ChangeMode(object, MODE_HANDLE_GUIDE); } -static void fn_1_25AC(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; +static void HandleGuide(omObjData *object) +{ + GuideWork *work = object->data; float var_f31; float var_f30; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - temp_r31->unk3C = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); - if (temp_r31->unk3C < 0.0f) { - temp_r31->unk3C += 360.0f; + work->unkAngle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); + if (work->unkAngle < 0.0f) { + work->unkAngle += 360.0f; } - arg0->unk10 = 1; + object->unk10 = 1; /* fallthrough */ case 1: - var_f30 = sin(90.0f * temp_r31->unk54 * M_PI / 180.0); - var_f31 = temp_r31->unk3C + var_f30 * (temp_r31->unk40 - temp_r31->unk3C); - temp_r31->unk14.x = temp_r31->unk44 * -sin(var_f31 * M_PI / 180.0); - temp_r31->unk14.z = temp_r31->unk44 * cos(var_f31 * M_PI / 180.0); - temp_r31->unk14.y = 0.0f; - temp_r31->unk2C = temp_r31->unk14.x - temp_r31->unk08.x; - temp_r31->unk34 = temp_r31->unk14.z - temp_r31->unk08.z; - if (temp_r31->unk54 <= 0.0f) { - temp_r31->unk2C = 0.0f; - temp_r31->unk34 = 0.0f; - temp_r31->unk08 = temp_r31->unk14; + var_f30 = sind(90.0f * work->velocity); + var_f31 = work->unkAngle + var_f30 * (work->posToMoveTo - work->unkAngle); + work->newPos.x = work->distFromCam * -sind(var_f31); + work->newPos.z = work->distFromCam * cosd(var_f31); + work->newPos.y = 0.0f; + work->posChange.x = work->newPos.x - work->pos.x; + work->posChange.z = work->newPos.z - work->pos.z; + if (work->velocity <= 0.0f) { + work->posChange.x = 0.0f; + work->posChange.z = 0.0f; + work->pos = work->newPos; } - if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + if ((work->velocity += work->speed) < 1.0f) { break; } - var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); + var_f31 = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); if (var_f31 < 0.0f) { var_f31 += 360.0f; } - temp_r31->unk14.x = 422.0 * -sin(var_f31 * M_PI / 180.0); - temp_r31->unk14.z = 422.0 * cos(var_f31 * M_PI / 180.0); - temp_r31->unk2C = (temp_r31->unk14.x - temp_r31->unk08.x) / 10.0f; - temp_r31->unk34 = (temp_r31->unk14.z - temp_r31->unk08.z) / 10.0f; - temp_r31->unk58 = 0.1f; - temp_r31->unk54 = 0.0f; - arg0->unk10 = 2; + work->newPos.x = 422.0 * -sind(var_f31); + work->newPos.z = 422.0 * cosd(var_f31); + work->posChange.x = (work->newPos.x - work->pos.x) / 10.0f; + work->posChange.z = (work->newPos.z - work->pos.z) / 10.0f; + work->speed = 0.1f; + work->velocity = 0.0f; + object->unk10 = 2; /* fallthrough */ case 2: - if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + if ((work->velocity += work->speed) < 1.0f) { break; } - arg0->unk10 = 3; + object->unk10 = 3; /* fallthrough */ case 3: - temp_r31->unk08 = temp_r31->unk14; - temp_r31->unk2C = 0.0f; - temp_r31->unk30 = 0.0f; - temp_r31->unk34 = 0.0f; - fn_1_2A18(arg0); - fn_1_24A8(arg0, 0); + work->pos = work->newPos; + work->posChange.x = 0.0f; + work->posChange.y = 0.0f; + work->posChange.z = 0.0f; + UpdateGuide(object); + ChangeMode(object, MODE_DISABLED); break; } - fn_1_2A18(arg0); + UpdateGuide(object); } -static void fn_1_2A18(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; +static void UpdateGuide(omObjData *object) +{ + GuideWork *work = object->data; s16 var_r29; var_r29 = 0; - temp_r31->unk38 = sqrtf(temp_r31->unk2C * temp_r31->unk2C + temp_r31->unk34 * temp_r31->unk34); - if (0.001f <= temp_r31->unk38) { - if (14.0f <= temp_r31->unk38) { - temp_r31->unk2C /= temp_r31->unk38; - temp_r31->unk34 /= temp_r31->unk38; - temp_r31->unk38 = 14.0f; - temp_r31->unk2C = 14.0f * temp_r31->unk2C; - temp_r31->unk34 = 14.0f * temp_r31->unk34; + work->distanceToMove = sqrtf(work->posChange.x * work->posChange.x + work->posChange.z * work->posChange.z); + if (0.001f <= work->distanceToMove) { + if (14.0f <= work->distanceToMove) { + work->posChange.x /= work->distanceToMove; + work->posChange.z /= work->distanceToMove; + work->distanceToMove = 14.0f; + work->posChange.x = 14.0f * work->posChange.x; + work->posChange.z = 14.0f * work->posChange.z; } - temp_r31->unk24 = fn_1_2D00(temp_r31->unk24, 180.0 * (atan2(temp_r31->unk2C, temp_r31->unk34) / M_PI), 0.4f); - if (8.0f <= temp_r31->unk38) { + work->rot.y = fn_1_2D00(work->rot.y, atan2d(work->posChange.x, work->posChange.z), 0.4f); + if (8.0f <= work->distanceToMove) { var_r29 = 2; - } else { + } + else { var_r29 = 1; } } - temp_r31->unk08.x += temp_r31->unk2C; - temp_r31->unk08.z += temp_r31->unk34; - if (temp_r31->unk04 != var_r29) { - Hu3DMotionShiftSet(*arg0->model, arg0->motion[var_r29], 0.0f, 8.0f, 0x40000001); - temp_r31->unk04 = var_r29; + work->pos.x += work->posChange.x; + work->pos.z += work->posChange.z; + if (work->motionIdx != var_r29) { + Hu3DMotionShiftSet(*object->model, object->motion[var_r29], 0.0f, 8.0f, 0x40000001); + work->motionIdx = var_r29; } - omSetTra(arg0, temp_r31->unk08.x, temp_r31->unk08.y, temp_r31->unk08.z); - omSetRot(arg0, temp_r31->unk20, temp_r31->unk24, temp_r31->unk28); + omSetTra(object, work->pos.x, work->pos.y, work->pos.z); + omSetRot(object, work->rot.x, work->rot.y, work->rot.z); } -static float fn_1_2D00(float arg0, float arg1, float arg2) { +static float fn_1_2D00(float arg0, float arg1, float arg2) +{ float var_f30; float var_f31; diff --git a/src/REL/option/record.c b/src/REL/option/record.c index 27c98655..1d435390 100755 --- a/src/REL/option/record.c +++ b/src/REL/option/record.c @@ -11,328 +11,366 @@ #include "dolphin.h" #include "math.h" -typedef struct { - /* 0x00 */ s32 unk00; - /* 0x04 */ s32 unk04[8]; - /* 0x24 */ s32 unk24; - /* 0x28 */ s32 unk28; -} UnkRecordDataStruct00; // Size 0x2C +#define RECORD_TYPE_BOARD 0 +#define RECORD_TYPE_MG 1 + +#define NUM_CHARACTERS 8 +#define NUM_BOARDS 6 + +#define PLAY_COUNT_NUM_DIGITS 4 +#define WIN_COUNT_NUM_DIGITS 3 +#define MAX_COINS_NUM_DIGITS 4 +#define MAX_STARS_NUM_DIGITS 4 +#define MG_DECIMAL_NUM_DIGITS 8 +#define MG_TIME_NUM_DIGITS 8 + +#define DISPLAY_TYPE_TIME 0 +#define DISPLAY_TYPE_DECIMAL 1 typedef struct { - /* 0x000 */ omObjData *unk00; - /* 0x004 */ omObjData *unk04; - /* 0x008 */ UnkWindowDataStruct *unk08[10]; - /* 0x030 */ s32 unk30; - /* 0x034 */ s16 unk34[153]; + /* 0x00 */ s32 playCount; + /* 0x04 */ s32 winCounts[8]; + /* 0x24 */ s32 maxCoins; + /* 0x28 */ s32 maxStars; +} BoardRecordData; // Size 0x2C + +typedef struct { + /* 0x000 */ omObjData *system; + /* 0x004 */ omObjData *hand; + /* 0x008 */ WindowWork *window[10]; + /* 0x030 */ s32 mode; + /* 0x034 */ s16 sprList[153]; /* 0x166 */ char unk166[6]; - /* 0x16C */ s32 unk16C; - /* 0x170 */ s32 unk170; - /* 0x174 */ s32 unk174; - /* 0x178 */ UnkRecordDataStruct00 unk178[6]; - /* 0x280 */ s32 unk280[6]; - /* 0x298 */ s32 unk298; - /* 0x29C */ s32 unk29C; -} UnkRecordDataStruct01; // Size 0x2A0 + /* 0x16C */ s32 recordType; + /* 0x170 */ s32 board; + /* 0x174 */ s32 mgPage; + /* 0x178 */ BoardRecordData boardRecords[6]; + /* 0x280 */ s32 mgRecords[6]; + /* 0x298 */ s32 cameraDoneF; + /* 0x29C */ s32 changeTimer; +} RecordWork; // Size 0x2A0 -static void fn_1_8310(omObjData *arg0); -static omObjData *fn_1_8A88(void); -static void fn_1_8B58(omObjData *arg0); -static void fn_1_8BAC(omObjData *arg0, s32 arg1); -static omObjData *fn_1_8C84(void); -static void fn_1_8D80(omObjData *arg0); -static void fn_1_8DD4(omObjData *arg0); -static void fn_1_8E98(omObjData *arg0); -static s32 fn_1_8EF8(s32 arg0, s32 arg1); -static void fn_1_8F38(omObjData *arg0, s32 arg1); -static void fn_1_96B4(omObjData *arg0); -static void fn_1_9750(omObjData *arg0); -static void fn_1_9A94(omObjData *arg0); -static void fn_1_9B10(omObjData *arg0, s32 arg1); -static void fn_1_A3B0(omObjData *arg0); +typedef struct { + /* 0x00 */ s32 id; + /* 0x04 */ s32 mess; + /* 0x08 */ s32 displayType; +} MGTable; // Size 0x0C + +#define MODE_DISABLED 0 +#define MODE_HANDLE_RECORD 1 + +static void HandleRecord(omObjData *object); +static omObjData *CreateSystem(void); +static void KillSystem(omObjData *system); +static void StartSystemMotion(omObjData *system, s32 type); +static omObjData *CreateHand(void); +static void KillHand(omObjData *hand); +static void CreateSpr(omObjData *object); +static void KillSpr(omObjData *object); +static s32 GetDigitSprAt(s32 n, s32 offsetFromRight); +static void DisplayBoardRecord(omObjData *object, s32 board); +static void HideBoardRecordSpr(omObjData *object); +static void DisplayTotalResults(omObjData *object); +static void HideTotalResultsSpr(omObjData *object); +static void ShowMGRecord(omObjData *object, s32 page); +static void HideMGRecordSpr(omObjData *object); omObjData *lbl_1_bss_40; -static const s32 lbl_1_rodata_13C0[] = { 0, 1, 2, 3, 5, 10 }; +static const s32 mgRecordIdxTbl[] = { 0, 1, 2, 3, 5, 10 }; -static omObjFunc lbl_1_data_210[] = { - NULL, - fn_1_8310 -}; +static omObjFunc modes[] = { NULL, HandleRecord }; -omObjData *fn_1_80E4(void) { - omObjData *temp_r29; - UnkRecordDataStruct01 *temp_r3; +omObjData *fn_1_80E4(void) +{ + omObjData *object; + RecordWork *work; s32 i; - s32 j; + s32 character; - temp_r29 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRecordDataStruct01), MEMORY_DEFAULT_NUM); - temp_r29->data = temp_r3; - for (i = 0; i < 6; i++) { - temp_r3->unk178[i].unk00 = GWBoardPlayCountGet(i); - temp_r3->unk178[i].unk28 = GWBoardMaxStarsGet(i); - temp_r3->unk178[i].unk24 = GWBoardMaxCoinsGet(i); - for (j = 0; j < 8; j++) { - temp_r3->unk178[i].unk04[j] = GWBoardWinCountGet(j, i); + object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RecordWork), MEMORY_DEFAULT_NUM); + object->data = work; + for (i = 0; i < NUM_BOARDS; i++) { + work->boardRecords[i].playCount = GWBoardPlayCountGet(i); + work->boardRecords[i].maxStars = GWBoardMaxStarsGet(i); + work->boardRecords[i].maxCoins = GWBoardMaxCoinsGet(i); + for (character = 0; character < NUM_CHARACTERS; character++) { + work->boardRecords[i].winCounts[character] = GWBoardWinCountGet(character, i); } } for (i = 0; i < 6; i++) { - temp_r3->unk280[i] = GWMGRecordGet(lbl_1_rodata_13C0[i]); + work->mgRecords[i] = GWMGRecordGet(mgRecordIdxTbl[i]); } - temp_r3->unk170 = 0; - temp_r3->unk174 = 0; - temp_r3->unk16C = 0; - temp_r3->unk00 = fn_1_8A88(); - temp_r3->unk04 = fn_1_8C84(); - fn_1_8DD4(temp_r29); - fn_1_82B0(temp_r29, 0); - return temp_r29; + work->board = 0; + work->mgPage = 0; + work->recordType = RECORD_TYPE_BOARD; + work->system = CreateSystem(); + work->hand = CreateHand(); + CreateSpr(object); + fn_1_82B0(object, MODE_DISABLED); + return object; } -void fn_1_825C(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +void fn_1_825C(omObjData *object) +{ + RecordWork *work = object->data; - fn_1_8B58(temp_r31->unk00); - fn_1_8D80(temp_r31->unk04); - fn_1_8E98(arg0); - HuMemDirectFree(temp_r31); + KillSystem(work->system); + KillHand(work->hand); + KillSpr(object); + HuMemDirectFree(work); } -void fn_1_82B0(omObjData *arg0, s32 arg1) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +void fn_1_82B0(omObjData *object, s32 mode) +{ + RecordWork *work = object->data; - temp_r31->unk30 = arg1; - arg0->func = lbl_1_data_210[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->mode = mode; + object->func = modes[mode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_82F4(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +s32 fn_1_82F4(omObjData *object) +{ + RecordWork *work = object->data; - return temp_r31->unk30; + return work->mode; } -static void fn_1_8310(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static void HandleRecord(omObjData *object) +{ + RecordWork *work = object->data; Vec sp8; s32 i; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - temp_r31->unk08[0] = fn_1_A44C(0); - temp_r31->unk08[1] = fn_1_A44C(1); + work->window[0] = fn_1_A44C(0); + work->window[1] = fn_1_A44C(1); for (i = 0; i < 8; i++) { - temp_r31->unk08[i + 2] = fn_1_A44C(3); + work->window[i + 2] = fn_1_A44C(3); } fn_1_AF0(lbl_1_bss_10, 519.0f, 125.0f, 300.0f, 0x28); fn_1_A6C(lbl_1_bss_10, 308.98f, 125.0f, 178.74f, 0x28); - temp_r31->unk170 = 0; - temp_r31->unk174 = 0; - temp_r31->unk298 = 0; - arg0->unk10 = 1; + work->board = 0; + work->mgPage = 0; + work->cameraDoneF = 0; + object->unk10 = 1; /* fallthrough */ case 1: if (fn_1_CB8(lbl_1_bss_10) != 0) { break; } fn_1_3D54(lbl_1_bss_30); - espBankSet(temp_r31->unk34[47], 0); - espBankSet(temp_r31->unk34[48], 2); - espPosSet(temp_r31->unk34[47], 46.0f, 240.0f); - espPosSet(temp_r31->unk34[48], 494.0f, 240.0f); - if (temp_r31->unk16C == 0) { - fn_1_160(temp_r31->unk34[47], 1, 10); - fn_1_160(temp_r31->unk34[48], 1, 10); - temp_r31->unk29C = 0; + espBankSet(work->sprList[47], 0); + espBankSet(work->sprList[48], 2); + espPosSet(work->sprList[47], 46.0f, 240.0f); + espPosSet(work->sprList[48], 494.0f, 240.0f); + if (work->recordType == RECORD_TYPE_BOARD) { + fn_1_160(work->sprList[47], 1, 10); + fn_1_160(work->sprList[48], 1, 10); + work->changeTimer = 0; } - arg0->unk10 = 2; + object->unk10 = 2; /* fallthrough */ case 2: - fn_1_96B4(arg0); - fn_1_A3B0(arg0); - fn_1_9A94(arg0); - switch (temp_r31->unk16C) { - case 0: - if (temp_r31->unk170 < 6) { - fn_1_8F38(arg0, temp_r31->unk170); - } else { - fn_1_9750(arg0); + HideBoardRecordSpr(object); + HideMGRecordSpr(object); + HideTotalResultsSpr(object); + switch (work->recordType) { + case RECORD_TYPE_BOARD: + if (work->board < 6) { + DisplayBoardRecord(object, work->board); } - fn_1_A6EC(temp_r31->unk08[0]); - fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 5)); + else { + DisplayTotalResults(object); + } + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], MAKE_MESSID(47, 5)); break; - case 1: - fn_1_9B10(arg0, temp_r31->unk174); - fn_1_A6EC(temp_r31->unk08[0]); - fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 6)); + case RECORD_TYPE_MG: + ShowMGRecord(object, work->mgPage); + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], MAKE_MESSID(47, 6)); break; } - fn_1_A6EC(temp_r31->unk08[1]); - fn_1_A71C(temp_r31->unk08[1], MAKE_MESSID(47, 169)); - if (temp_r31->unk298 == 0) { - Hu3DModelAttrReset(temp_r31->unk04->model[0], 1); - temp_r31->unk298 = 1; + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 169)); + if (!work->cameraDoneF) { + Hu3DModelAttrReset(work->hand->model[0], 1); + work->cameraDoneF = TRUE; } sp8.x = 505.0 * -sin(305 * M_PI / 180.0); sp8.z = 505.0 * cos(305 * M_PI / 180.0); - sp8.y = 144.0f - 14.0f * temp_r31->unk16C; - omSetTra(temp_r31->unk04, sp8.x, sp8.y, sp8.z); - arg0->unk10 = 3; + sp8.y = 144.0f - 14.0f * work->recordType; + omSetTra(work->hand, sp8.x, sp8.y, sp8.z); + object->unk10 = 3; /* fallthrough */ case 3: - if (temp_r31->unk29C > 0) { - temp_r31->unk29C--; + if (work->changeTimer > 0) { + work->changeTimer--; break; } - espBankSet(temp_r31->unk34[47], 0); - espBankSet(temp_r31->unk34[48], 2); - arg0->unk10 = 4; + espBankSet(work->sprList[47], 0); + espBankSet(work->sprList[48], 2); + object->unk10 = 4; /* fallthrough */ case 4: - if (temp_r31->unk08[1]->unk20 != 0) { + if (work->window[1]->state != 0) { break; } - if (fn_1_550(0x200) != 0) { + if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - arg0->unk10 = 5; - } else if (fn_1_584(8) != 0 && temp_r31->unk16C == 1) { - temp_r31->unk16C = 0; - temp_r31->unk170 = 0; - fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C); - fn_1_160(temp_r31->unk34[47], 1, 5); - fn_1_160(temp_r31->unk34[48], 1, 5); - temp_r31->unk29C = 5; + object->unk10 = 5; + } + else if (fn_1_584(8) != 0 && work->recordType == RECORD_TYPE_MG) { + work->recordType = RECORD_TYPE_BOARD; + work->board = 0; + StartSystemMotion(work->system, work->recordType); + fn_1_160(work->sprList[47], 1, 5); + fn_1_160(work->sprList[48], 1, 5); + work->changeTimer = 5; HuAudFXPlay(0x83F); - arg0->unk10 = 2; - } else if (fn_1_584(4) != 0 && temp_r31->unk16C == 0) { - temp_r31->unk16C = 1; - temp_r31->unk174 = 0; - fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C); - fn_1_160(temp_r31->unk34[47], 0, 5); - fn_1_160(temp_r31->unk34[48], 0, 5); - temp_r31->unk29C = 5; + object->unk10 = 2; + } + else if (fn_1_584(4) != 0 && work->recordType == RECORD_TYPE_BOARD) { + work->recordType = RECORD_TYPE_MG; + work->mgPage = 0; + StartSystemMotion(work->system, work->recordType); + fn_1_160(work->sprList[47], 0, 5); + fn_1_160(work->sprList[48], 0, 5); + work->changeTimer = 5; HuAudFXPlay(0x83F); - arg0->unk10 = 2; - } else { - switch (temp_r31->unk16C) { - case 0: - if (fn_1_550(0x40) != 0) { - if (--temp_r31->unk170 < 0) { - temp_r31->unk170 = 6; + object->unk10 = 2; + } + else { + switch (work->recordType) { + case RECORD_TYPE_BOARD: + if (fn_1_550(PAD_TRIGGER_L)) { + if (--work->board < 0) { + work->board = 6; } - if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) { - temp_r31->unk170--; + if (GWGameStat.open_w06 == 0 && work->board == 5) { + work->board--; } HuAudFXPlay(0x840); - espBankSet(temp_r31->unk34[47], 1); - temp_r31->unk29C = 0xA; - arg0->unk10 = 2; + espBankSet(work->sprList[47], 1); + work->changeTimer = 10; + object->unk10 = 2; return; } - if (fn_1_550(0x20) != 0) { - if (++temp_r31->unk170 >= 7) { - temp_r31->unk170 = 0; + if (fn_1_550(PAD_TRIGGER_R)) { + if (++work->board >= 7) { + work->board = 0; } - if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) { - temp_r31->unk170++; + if (GWGameStat.open_w06 == 0 && work->board == 5) { + work->board++; } HuAudFXPlay(0x840); - espBankSet(temp_r31->unk34[48], 3); - temp_r31->unk29C = 0xA; - arg0->unk10 = 2; + espBankSet(work->sprList[48], 3); + work->changeTimer = 10; + object->unk10 = 2; } break; - case 1: + case RECORD_TYPE_MG: break; } } break; case 5: fn_1_3E1C(lbl_1_bss_30); - if (temp_r31->unk16C == 0) { - fn_1_160(temp_r31->unk34[47], 0, 10); - fn_1_160(temp_r31->unk34[48], 0, 10); + if (work->recordType == RECORD_TYPE_BOARD) { + fn_1_160(work->sprList[47], 0, 10); + fn_1_160(work->sprList[48], 0, 10); } - fn_1_A704(temp_r31->unk08[0]); - fn_1_A704(temp_r31->unk08[1]); - Hu3DModelAttrSet(temp_r31->unk04->model[0], 1); - arg0->unk10 = 6; + fn_1_A704(work->window[0]); + fn_1_A704(work->window[1]); + Hu3DModelAttrSet(work->hand->model[0], 1); + object->unk10 = 6; /* fallthrough */ case 6: - if (temp_r31->unk08[1]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { + if (work->window[1]->state == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { for (i = 0; i < 10; i++) { - fn_1_A6AC(temp_r31->unk08[i]); + fn_1_A6AC(work->window[i]); } - fn_1_96B4(arg0); - fn_1_A3B0(arg0); - fn_1_9A94(arg0); - fn_1_AF0(lbl_1_bss_10, 519.62f, 120.0f, 300.0f, 0x28); + HideBoardRecordSpr(object); + HideMGRecordSpr(object); + HideTotalResultsSpr(object); + fn_1_AF0(lbl_1_bss_10, 519.62f, 120.0f, 300.0f, 40); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); - fn_1_82B0(arg0, 0); + fn_1_82B0(object, MODE_DISABLED); } break; } } -static omObjData *fn_1_8A88(void) { - omObjData *temp_r31; +static omObjData *CreateSystem(void) +{ + omObjData *system; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1)); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); - Hu3DModelLayerSet(temp_r31->model[0], 0); - Hu3DMotionStartEndSet(temp_r31->model[0], 0.0f, 6.0f); - Hu3DMotionTimeSet(temp_r31->model[0], 6.0f); - return temp_r31; + system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1)); + Hu3DModelAttrSet(system->model[0], 0x40000002); + Hu3DModelLayerSet(system->model[0], 0); + Hu3DMotionStartEndSet(system->model[0], 0.0f, 6.0f); + Hu3DMotionTimeSet(system->model[0], 6.0f); + return system; } -static void fn_1_8B58(omObjData *arg0) { +static void KillSystem(omObjData *system) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(system->model[i]); } } -static void fn_1_8BAC(omObjData *arg0, s32 arg1) { - s16 temp_r31 = arg0->model[0]; +static void StartSystemMotion(omObjData *system, s32 type) +{ + s16 model = system->model[0]; - switch (arg1) { - case 0: - Hu3DMotionStartEndSet(temp_r31, 0.0f, 6.0f); - Hu3DMotionTimeSet(temp_r31, 0.0f); + switch (type) { + case RECORD_TYPE_BOARD: + Hu3DMotionStartEndSet(model, 0.0f, 6.0f); + Hu3DMotionTimeSet(model, 0.0f); break; - case 1: - Hu3DMotionStartEndSet(temp_r31, 6.0f, 12.0f); - Hu3DMotionTimeSet(temp_r31, 6.0f); + case RECORD_TYPE_MG: + Hu3DMotionStartEndSet(model, 6.0f, 12.0f); + Hu3DMotionTimeSet(model, 6.0f); break; } - Hu3DModelAttrReset(arg0->model[0], 0x40000002); + Hu3DModelAttrReset(system->model[0], 0x40000002); } -static omObjData *fn_1_8C84(void) { - omObjData *temp_r31; +static omObjData *CreateHand(void) +{ + omObjData *hand; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); - Hu3DModelLayerSet(temp_r31->model[0], 2); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - omSetRot(temp_r31, 30.0f, 190.0f, 0.0f); - omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); - Hu3DModelAttrSet(temp_r31->model[0], 1); - return temp_r31; + hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); + Hu3DModelLayerSet(hand->model[0], 2); + Hu3DModelAttrSet(hand->model[0], 0x40000001); + omSetRot(hand, 30.0f, 190.0f, 0.0f); + omSetSca(hand, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(hand->model[0], 1); + return hand; } -static void fn_1_8D80(omObjData *arg0) { +static void KillHand(omObjData *hand) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(hand->model[i]); } } -static const s32 lbl_1_rodata_143C[153] = { +#define SPR_TBL_SIZE 153 + +static const s32 sprTbl[SPR_TBL_SIZE] = { DATA_MAKE_NUM(DATADIR_OPTION, 55), DATA_MAKE_NUM(DATADIR_OPTION, 56), DATA_MAKE_NUM(DATADIR_OPTION, 57), @@ -485,310 +523,314 @@ static const s32 lbl_1_rodata_143C[153] = { DATA_MAKE_NUM(DATADIR_OPTION, 54), DATA_MAKE_NUM(DATADIR_OPTION, 54), DATA_MAKE_NUM(DATADIR_OPTION, 54), - DATA_MAKE_NUM(DATADIR_OPTION, 54) + DATA_MAKE_NUM(DATADIR_OPTION, 54), }; -static void fn_1_8DD4(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static void CreateSpr(omObjData *object) +{ + RecordWork *work = object->data; s32 i; - for (i = 0; i < 153; i++) { - temp_r31->unk34[i] = espEntry(lbl_1_rodata_143C[i], 0, 0); - espDrawNoSet(temp_r31->unk34[i], 0x40); - espDispOff(temp_r31->unk34[i]); + for (i = 0; i < SPR_TBL_SIZE; i++) { + work->sprList[i] = espEntry(sprTbl[i], 0, 0); + espDrawNoSet(work->sprList[i], 0x40); + espDispOff(work->sprList[i]); } - espBankSet(temp_r31->unk34[47], 0); - espBankSet(temp_r31->unk34[48], 2); + espBankSet(work->sprList[47], 0); + espBankSet(work->sprList[48], 2); HuSprExecLayerSet(0x40, 1); } -static void fn_1_8E98(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static void KillSpr(omObjData *object) +{ + RecordWork *work = object->data; s32 i; - for (i = 0; i < 153; i++) { - espKill(temp_r31->unk34[i]); + for (i = 0; i < SPR_TBL_SIZE; i++) { + espKill(work->sprList[i]); } } -static s32 fn_1_8EF8(s32 arg0, s32 arg1) { - s32 var_r31; +static s32 GetDigitSprAt(s32 n, s32 offsetFromRight) +{ + s32 i; - var_r31 = 1; - while (arg1-- != 0) { - var_r31 *= 10; + i = 1; + while (offsetFromRight-- != 0) { + i *= 10; } - return (arg0 % (var_r31 * 10)) / var_r31; + return (n % (i * 10)) / i; } -static void fn_1_8F38(omObjData *arg0, s32 arg1) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 temp_r28; +static void DisplayBoardRecord(omObjData *object, s32 board) +{ + RecordWork *work = object->data; + s32 value; s32 i; s32 j; - espPosSet(temp_r31->unk34[arg1], 275.0f, 72.0f); - temp_r28 = temp_r31->unk178[temp_r31->unk170].unk00; - for (i = 0; i < 4; i++) { - espPosSet(temp_r31->unk34[i + 11], 323.0f + 20.0f * i, 116.0f); - if (temp_r28 > 999) { - espBankSet(temp_r31->unk34[i + 11], i + 10); - } else { - espBankSet(temp_r31->unk34[i + 11], fn_1_8EF8(temp_r28, 3 - i)); + espPosSet(work->sprList[board], 275.0f, 72.0f); + value = work->boardRecords[work->board].playCount; + for (i = 0; i < PLAY_COUNT_NUM_DIGITS; i++) { + espPosSet(work->sprList[i + 11], 323.0f + 20.0f * i, 116.0f); + if (value > 999) { + espBankSet(work->sprList[i + 11], i + 10); + } + else { + espBankSet(work->sprList[i + 11], GetDigitSprAt(value, 3 - i)); } } - espPosSet(temp_r31->unk34[8], 416.0f, 120.0f); - temp_r28 = temp_r31->unk178[temp_r31->unk170].unk24; - for (i = 0; i < 4; i++) { - espPosSet(temp_r31->unk34[i + 15], 364.0f + 20.0f * i, 268.0f); - if (temp_r28 > 999) { - espBankSet(temp_r31->unk34[i + 15], i + 10); - } else { - espBankSet(temp_r31->unk34[i + 15], fn_1_8EF8(temp_r28, 3 - i)); + espPosSet(work->sprList[8], 416.0f, 120.0f); + value = work->boardRecords[work->board].maxCoins; + for (i = 0; i < MAX_COINS_NUM_DIGITS; i++) { + espPosSet(work->sprList[i + 15], 364.0f + 20.0f * i, 268.0f); + if (value > 999) { + espBankSet(work->sprList[i + 15], i + 10); + } + else { + espBankSet(work->sprList[i + 15], GetDigitSprAt(value, 3 - i)); } } - espPosSet(temp_r31->unk34[9], 456.0f, 268.0f); - temp_r28 = temp_r31->unk178[temp_r31->unk170].unk28; - for (i = 0; i < 4; i++) { - espPosSet(temp_r31->unk34[i + 19], 364.0f + 20.0f * i, 312.0f); - if (temp_r28 > 999) { - espBankSet(temp_r31->unk34[i + 19], i + 10); - } else { - espBankSet(temp_r31->unk34[i + 19], fn_1_8EF8(temp_r28, 3 - i)); + espPosSet(work->sprList[9], 456.0f, 268.0f); + value = work->boardRecords[work->board].maxStars; + for (i = 0; i < MAX_STARS_NUM_DIGITS; i++) { + espPosSet(work->sprList[i + 19], 364.0f + 20.0f * i, 312.0f); + if (value > 999) { + espBankSet(work->sprList[i + 19], i + 10); + } + else { + espBankSet(work->sprList[i + 19], GetDigitSprAt(value, 3 - i)); } } - espPosSet(temp_r31->unk34[10], 456.0f, 312.0f); - for (i = 0; i < 8; i++) { - espPosSet(temp_r31->unk34[i + 49], 92.0f + 50.0f * i, 200.0f); - for (j = 0; j < 3; j++) { - espPosSet(temp_r31->unk34[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f); - espBankSet(temp_r31->unk34[i * 3 + 23 + j], fn_1_8EF8(temp_r31->unk178[temp_r31->unk170].unk04[i], 2 - j)); + espPosSet(work->sprList[10], 456.0f, 312.0f); + for (i = 0; i < NUM_CHARACTERS; i++) { + espPosSet(work->sprList[i + 49], 92.0f + 50.0f * i, 200.0f); + for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) { + espPosSet(work->sprList[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f); + espBankSet(work->sprList[i * 3 + 23 + j], GetDigitSprAt(work->boardRecords[work->board].winCounts[i], 2 - j)); } } - espPosSet(temp_r31->unk34[47], 48.0f, 240.0f); - espPosSet(temp_r31->unk34[48], 492.0f, 240.0f); - espDispOn(temp_r31->unk34[arg1]); - for (i = 0; i < 4; i++) { - espDispOn(temp_r31->unk34[i + 11]); + espPosSet(work->sprList[47], 48.0f, 240.0f); + espPosSet(work->sprList[48], 492.0f, 240.0f); + espDispOn(work->sprList[board]); + for (i = 0; i < PLAY_COUNT_NUM_DIGITS; i++) { + espDispOn(work->sprList[i + 11]); } - espDispOn(temp_r31->unk34[8]); - for (i = 0; i < 4; i++) { - espDispOn(temp_r31->unk34[i + 15]); + espDispOn(work->sprList[8]); + for (i = 0; i < MAX_COINS_NUM_DIGITS; i++) { + espDispOn(work->sprList[i + 15]); } - espDispOn(temp_r31->unk34[9]); - for (i = 0; i < 4; i++) { - espDispOn(temp_r31->unk34[i + 19]); + espDispOn(work->sprList[9]); + for (i = 0; i < MAX_STARS_NUM_DIGITS; i++) { + espDispOn(work->sprList[i + 19]); } - espDispOn(temp_r31->unk34[10]); - for (i = 0; i < 8; i++) { - espDispOn(temp_r31->unk34[i + 49]); - for (j = 0; j < 3; j++) { - espDispOn(temp_r31->unk34[i * 3 + 23 + j]); + espDispOn(work->sprList[10]); + for (i = 0; i < NUM_CHARACTERS; i++) { + espDispOn(work->sprList[i + 49]); + for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) { + espDispOn(work->sprList[i * 3 + 23 + j]); } } for (i = 0; i < 4; i++) { - fn_1_A7F0(temp_r31->unk08[i + 2]); + fn_1_A7F0(work->window[i + 2]); } - fn_1_A7B0(temp_r31->unk08[2], 64.0f, 96.0f); - fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 19)); - fn_1_A7B0(temp_r31->unk08[3], 64.0f, 140.0f); - fn_1_A71C(temp_r31->unk08[3], MAKE_MESSID(47, 20)); - fn_1_A7B0(temp_r31->unk08[4], 64.0f, 248.0f); - fn_1_A71C(temp_r31->unk08[4], MAKE_MESSID(47, 21)); - fn_1_A7B0(temp_r31->unk08[5], 64.0f, 292.0f); - fn_1_A71C(temp_r31->unk08[5], MAKE_MESSID(47, 22)); + fn_1_A7B0(work->window[2], 64.0f, 96.0f); + fn_1_A71C(work->window[2], MAKE_MESSID(47, 19)); + fn_1_A7B0(work->window[3], 64.0f, 140.0f); + fn_1_A71C(work->window[3], MAKE_MESSID(47, 20)); + fn_1_A7B0(work->window[4], 64.0f, 248.0f); + fn_1_A71C(work->window[4], MAKE_MESSID(47, 21)); + fn_1_A7B0(work->window[5], 64.0f, 292.0f); + fn_1_A71C(work->window[5], MAKE_MESSID(47, 22)); } -static const s32 lbl_1_rodata_16F8[53] = { - 0, 1, 2, 3, 4, 5, 49, 50, 51, 52, - 53, 54, 55, 56, 8, 9, 10, 11, 12, 13, - 14, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 38, 39, 40, 35, 36, 37, 41, - 42, 43, 44, 45, 46, 15, 16, 17, 18, 19, - 20, 21, 22 -}; +#define BOARD_RECORD_SPR_IDX_TBL_SIZE 53 -static void fn_1_96B4(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static const s32 boardRecordSprIdxTbl[BOARD_RECORD_SPR_IDX_TBL_SIZE] = { 0, 1, 2, 3, 4, 5, 49, 50, 51, 52, 53, 54, 55, 56, 8, 9, 10, 11, 12, 13, 14, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 38, 39, 40, 35, 36, 37, 41, 42, 43, 44, 45, 46, 15, 16, 17, 18, 19, 20, 21, 22 }; + +static void HideBoardRecordSpr(omObjData *object) +{ + RecordWork *work = object->data; s32 i; - for (i = 0; i < 53; i++) { - espDispOff(temp_r31->unk34[lbl_1_rodata_16F8[i]]); + for (i = 0; i < BOARD_RECORD_SPR_IDX_TBL_SIZE; i++) { + espDispOff(work->sprList[boardRecordSprIdxTbl[i]]); } for (i = 0; i < 4; i++) { - fn_1_A828(temp_r31->unk08[i + 2]); + fn_1_A828(work->window[i + 2]); } } -static void fn_1_9750(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 var_r27; +static void DisplayTotalResults(omObjData *object) +{ + RecordWork *work = object->data; + s32 winCount; s32 i; s32 j; - espPosSet(temp_r31->unk34[6], 275.0f, 72.0f); - for (i = 0; i < 8; i++) { - espPosSet(temp_r31->unk34[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4)); - for (j = 0, var_r27 = 0; j < 6; j++) { - var_r27 += temp_r31->unk178[j].unk04[i]; + espPosSet(work->sprList[6], 275.0f, 72.0f); + for (i = 0; i < NUM_CHARACTERS; i++) { + espPosSet(work->sprList[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4)); + for (j = 0, winCount = 0; j < NUM_BOARDS; j++) { + winCount += work->boardRecords[j].winCounts[i]; } - for (j = 0; j < 3; j++) { - espPosSet(temp_r31->unk34[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4)); - espBankSet(temp_r31->unk34[i * 3 + 65 + j], fn_1_8EF8(var_r27, 2 - j)); + for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) { + espPosSet(work->sprList[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4)); + espBankSet(work->sprList[i * 3 + 65 + j], GetDigitSprAt(winCount, 2 - j)); } } - espDispOn(temp_r31->unk34[6]); - for (i = 0; i < 8; i++) { - espDispOn(temp_r31->unk34[i + 57]); + espDispOn(work->sprList[6]); + for (i = 0; i < NUM_CHARACTERS; i++) { + espDispOn(work->sprList[i + 57]); for (j = 0; j < 3; j++) { - espDispOn(temp_r31->unk34[i * 3 + 65 + j]); + espDispOn(work->sprList[i * 3 + 65 + j]); } } - fn_1_A7B0(temp_r31->unk08[2], 136.0f, 96.0f); - fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 23)); - fn_1_A7F0(temp_r31->unk08[2]); + fn_1_A7B0(work->window[2], 136.0f, 96.0f); + fn_1_A71C(work->window[2], MAKE_MESSID(47, 23)); + fn_1_A7F0(work->window[2]); } -static const s32 lbl_1_rodata_17E8[33] = { - 6, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88 -}; +#define TOTAL_RESULTS_SPR_IDX_TBL_SIZE 33 -static void fn_1_9A94(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static const s32 totalResultsSprIdxTbl[TOTAL_RESULTS_SPR_IDX_TBL_SIZE] + = { 6, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88 }; + +static void HideTotalResultsSpr(omObjData *object) +{ + RecordWork *work = object->data; s32 i; - for (i = 0; i < 33; i++) { - espDispOff(temp_r31->unk34[lbl_1_rodata_17E8[i]]); + for (i = 0; i < TOTAL_RESULTS_SPR_IDX_TBL_SIZE; i++) { + espDispOff(work->sprList[totalResultsSprIdxTbl[i]]); } - fn_1_A828(temp_r31->unk08[2]); + fn_1_A828(work->window[2]); } -static const s32 lbl_1_rodata_186C[6][3] = { - { 0x00000195, MAKE_MESSID(23, 5), 0 }, - { 0x00000197, MAKE_MESSID(23, 7), 1 }, - { 0x000001AB, MAKE_MESSID(23, 27), 0 }, - { 0x000001B0, MAKE_MESSID(23, 32), 0 }, - { 0x000001BB, MAKE_MESSID(23, 43), 0 }, - { 0x000001C8, MAKE_MESSID(23, 54), 0 } +static const MGTable mgTbl[6] = { + { 405, MAKE_MESSID(23, 5), DISPLAY_TYPE_TIME }, + { 407, MAKE_MESSID(23, 7), DISPLAY_TYPE_DECIMAL }, + { 427, MAKE_MESSID(23, 27), DISPLAY_TYPE_TIME }, + { 432, MAKE_MESSID(23, 32), DISPLAY_TYPE_TIME }, + { 443, MAKE_MESSID(23, 43), DISPLAY_TYPE_TIME }, + { 456, MAKE_MESSID(23, 54), DISPLAY_TYPE_TIME }, }; -static void fn_1_9B10(omObjData *arg0, s32 arg1) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 temp_r25; - s32 temp_r27; - s32 var_r28; +static void ShowMGRecord(omObjData *object, s32 page) +{ + RecordWork *work = object->data; + s32 value; + s32 mg; + s32 digit; s32 var_r26; s32 var_r17; s32 sp5C; s32 sp58; - s32 sp54; - s32 sp50; - s32 sp4C; + s32 mgAvail; + BOOL digitDrawnF; + s32 nameMess; s32 i; s32 j; - espPosSet(temp_r31->unk34[7], 275.0f, 72.0f); - espPosSet(temp_r31->unk34[47], 48.0f, 240.0f); - espPosSet(temp_r31->unk34[48], 492.0f, 240.0f); - espDispOn(temp_r31->unk34[7]); + espPosSet(work->sprList[7], 275.0f, 72.0f); + espPosSet(work->sprList[47], 48.0f, 240.0f); + espPosSet(work->sprList[48], 492.0f, 240.0f); + espDispOn(work->sprList[7]); for (i = 0; i < 8; i++) { - sp50 = 0; - temp_r27 = i + arg1 * 8; - if (temp_r27 >= 6) { + digitDrawnF = FALSE; + mg = i + page * 8; + if (mg >= 6) { break; } - sp54 = GWMGAvailGet(lbl_1_rodata_186C[temp_r27][0]); - temp_r25 = temp_r31->unk280[temp_r27]; - if (sp54 != 0) { - switch (lbl_1_rodata_186C[temp_r27][2]) { - case 1: - for (j = 0; j < 8; j++) { - var_r17 = fn_1_8EF8(temp_r25, 7 - j); - if (var_r17 != 0 || sp50 != 0 || j >= 7) { - espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); - espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r17); - espDispOn(temp_r31->unk34[i * 8 + 89 + j]); - sp50 = 1; + mgAvail = GWMGAvailGet(mgTbl[mg].id); + value = work->mgRecords[mg]; + if (mgAvail) { + switch (mgTbl[mg].displayType) { + case DISPLAY_TYPE_DECIMAL: + for (j = 0; j < MG_DECIMAL_NUM_DIGITS; j++) { + var_r17 = GetDigitSprAt(value, 7 - j); + if (var_r17 != 0 || digitDrawnF || j >= 7) { + espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + espBankSet(work->sprList[i * 8 + 89 + j], var_r17); + espDispOn(work->sprList[i * 8 + 89 + j]); + digitDrawnF = TRUE; } } break; - case 0: - sp5C = temp_r25 / 3600; - sp58 = (temp_r25 % 3600) / 60; - var_r26 = (temp_r25 % 3600) % 60; - if (lbl_1_rodata_186C[temp_r27][0] == 0x195 || lbl_1_rodata_186C[temp_r27][0] == 0x1B0) { + case DISPLAY_TYPE_TIME: + sp5C = value / 3600; + sp58 = (value % 3600) / 60; + var_r26 = (value % 3600) % 60; + if (mgTbl[mg].id == 405 || mgTbl[mg].id == 432) { var_r26 *= 1.6916667f; - } else { + } + else { var_r26 *= 1.6666666f; } - for (j = 1; j < 8; j++) { - espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + for (j = 1; j < MG_TIME_NUM_DIGITS; j++) { + espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); switch (j) { case 0: - var_r28 = fn_1_8EF8(sp5C, 1); + digit = GetDigitSprAt(sp5C, 1); break; case 1: - var_r28 = fn_1_8EF8(sp5C, 0); + digit = GetDigitSprAt(sp5C, 0); break; case 3: - var_r28 = fn_1_8EF8(sp58, 1); + digit = GetDigitSprAt(sp58, 1); break; case 4: - var_r28 = fn_1_8EF8(sp58, 0); + digit = GetDigitSprAt(sp58, 0); break; case 6: - var_r28 = fn_1_8EF8(var_r26, 1); + digit = GetDigitSprAt(var_r26, 1); break; case 7: - var_r28 = fn_1_8EF8(var_r26, 0); + digit = GetDigitSprAt(var_r26, 0); break; case 2: - var_r28 = 11; + digit = 11; break; case 5: - var_r28 = 12; + digit = 12; break; } - espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r28); - espDispOn(temp_r31->unk34[i * 8 + 89 + j]); + espBankSet(work->sprList[i * 8 + 89 + j], digit); + espDispOn(work->sprList[i * 8 + 89 + j]); } break; } - } else { - for (j = 0; j < 8; j++) { - espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); - espBankSet(temp_r31->unk34[i * 8 + 89 + j], 0); - espDispOn(temp_r31->unk34[i * 8 + 89 + j]); + } + else { + for (j = 0; j < MG_DECIMAL_NUM_DIGITS; j++) { + espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + espBankSet(work->sprList[i * 8 + 89 + j], 0); + espDispOn(work->sprList[i * 8 + 89 + j]); } } - fn_1_A7B0(temp_r31->unk08[i + 2], 60.0f, 96.0f + 40.0f * i); - sp4C = (sp54 != 0) ? lbl_1_rodata_186C[temp_r27][1] : MAKE_MESSID(35, 0); - fn_1_A71C(temp_r31->unk08[i + 2], sp4C); - fn_1_A7F0(temp_r31->unk08[i + 2]); + fn_1_A7B0(work->window[i + 2], 60.0f, 96.0f + 40.0f * i); + nameMess = mgAvail ? mgTbl[mg].mess : MAKE_MESSID(35, 0); + fn_1_A71C(work->window[i + 2], nameMess); + fn_1_A7F0(work->window[i + 2]); } } -static const s32 lbl_1_rodata_18C8[65] = { - 7, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152 -}; +#define MG_RECORD_SPR_IDX_TBL_SIZE 65 -static void fn_1_A3B0(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r30 = arg0->data; +static const s32 mgRecordSprIdxTbl[65] = { 7, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152 }; + +static void HideMGRecordSpr(omObjData *object) +{ + RecordWork *temp_r30 = object->data; s32 i; - for (i = 0; i < 65; i++) { - espDispOff(temp_r30->unk34[lbl_1_rodata_18C8[i]]); + for (i = 0; i < MG_RECORD_SPR_IDX_TBL_SIZE; i++) { + espDispOff(temp_r30->sprList[mgRecordSprIdxTbl[i]]); } for (i = 0; i < 8; i++) { - fn_1_A828(temp_r30->unk08[i + 2]); + fn_1_A828(temp_r30->window[i + 2]); } } diff --git a/src/REL/option/room.c b/src/REL/option/room.c index a697e0e4..65a6fa9c 100755 --- a/src/REL/option/room.c +++ b/src/REL/option/room.c @@ -6,241 +6,256 @@ #include "game/window.h" typedef struct { - /* 0x00 */ omObjData *unk00; - /* 0x04 */ omObjData *unk04; - /* 0x08 */ omObjData *unk08; - /* 0x0C */ omObjData *unk0C; - /* 0x10 */ UnkWindowDataStruct *unk10; - /* 0x14 */ UnkWindowDataStruct *unk14; - /* 0x18 */ s32 unk18; - /* 0x1C */ s32 unk1C; + /* 0x00 */ omObjData *background; + /* 0x04 */ omObjData *rumbleArrowPair; + /* 0x08 */ omObjData *soundArrowPair; + /* 0x0C */ omObjData *recordArrowPair; + /* 0x10 */ WindowWork *optionDescWindow; + /* 0x14 */ WindowWork *btnLegendWindow; + /* 0x18 */ s32 selectedOption; + /* 0x1C */ s32 mode; /* 0x20 */ s16 unk20; /* 0x22 */ char unk22[6]; - /* 0x28 */ s32 unk28; -} UnkRoomDataStruct; // Size 0x2C + /* 0x28 */ BOOL cameraDoneF; +} RoomWork; // Size 0x2C -static void fn_1_1844(omObjData *arg0, s32 arg1); -static void fn_1_1A8C(omObjData *arg0); -static omObjData *fn_1_2088(void); -static void fn_1_2110(omObjData *arg0); -static omObjData *fn_1_2144(void); -static void fn_1_21C4(omObjData *arg0); +#define MODE_DISABLED 0 +#define MODE_HANDLE_ROOM 1 + +#define SEL_CHANGE_LEFT 0 +#define SEL_CHANGE_RIGHT 1 + +static void ChangeSelection(omObjData *object, s32 selChange); +static void HandleRoom(omObjData *object); +static omObjData *CreateBackground(void); +static void KillBackground(omObjData *background); +static omObjData *CreateArrowPair(void); +static void KillArrowPair(omObjData *arrowPair); omObjData *lbl_1_bss_18; -static omObjFunc lbl_1_data_68[] = { - NULL, - fn_1_1A8C -}; +static omObjFunc modes[] = { NULL, HandleRoom }; -omObjData *fn_1_15A4(void) { - omObjData *var_r30; - UnkRoomDataStruct *temp_r31; +omObjData *fn_1_15A4(void) +{ + omObjData *object; + RoomWork *work; - var_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); - temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRoomDataStruct), MEMORY_DEFAULT_NUM); - var_r30->data = temp_r31; - temp_r31->unk18 = 0; - temp_r31->unk20 = -1; - temp_r31->unk28 = 0; + object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->selectedOption = 0; + work->unk20 = -1; + work->cameraDoneF = 0; fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1); - temp_r31->unk00 = fn_1_2088(); + work->background = CreateBackground(); lbl_1_bss_38 = fn_1_4028(); lbl_1_bss_40 = fn_1_80E4(); lbl_1_bss_30 = fn_1_3158(); lbl_1_bss_20 = fn_1_21F8(); - temp_r31->unk04 = fn_1_2144(); - temp_r31->unk08 = fn_1_2144(); - temp_r31->unk0C = fn_1_2144(); - omSetRot(temp_r31->unk04, 0.0f, 0.0f, 0.0f); - omSetRot(temp_r31->unk08, 0.0f, 120.0f, 0.0f); - omSetRot(temp_r31->unk0C, 0.0f, 240.0f, 0.0f); - temp_r31->unk10 = fn_1_A44C(0); - temp_r31->unk14 = fn_1_A44C(1); - return var_r30; + work->rumbleArrowPair = CreateArrowPair(); + work->soundArrowPair = CreateArrowPair(); + work->recordArrowPair = CreateArrowPair(); + omSetRot(work->rumbleArrowPair, 0.0f, 0.0f, 0.0f); + omSetRot(work->soundArrowPair, 0.0f, 120.0f, 0.0f); + omSetRot(work->recordArrowPair, 0.0f, 240.0f, 0.0f); + work->optionDescWindow = fn_1_A44C(0); + work->btnLegendWindow = fn_1_A44C(1); + return object; } -void fn_1_1798(omObjData *arg0) { - UnkRoomDataStruct *temp_r31 = arg0->data; +void fn_1_1798(omObjData *object) +{ + RoomWork *work = object->data; - fn_1_2110(temp_r31->unk00); + KillBackground(work->background); fn_1_42DC(lbl_1_bss_38); fn_1_322C(lbl_1_bss_30); fn_1_825C(lbl_1_bss_40); fn_1_241C(lbl_1_bss_20); - fn_1_21C4(temp_r31->unk04); - fn_1_21C4(temp_r31->unk08); - fn_1_21C4(temp_r31->unk0C); - fn_1_A6AC(temp_r31->unk10); - fn_1_A6AC(temp_r31->unk14); - HuMemDirectFree(temp_r31); + KillArrowPair(work->rumbleArrowPair); + KillArrowPair(work->soundArrowPair); + KillArrowPair(work->recordArrowPair); + fn_1_A6AC(work->optionDescWindow); + fn_1_A6AC(work->btnLegendWindow); + HuMemDirectFree(work); } -static const float lbl_1_rodata_BC[3] = { 45.0f, 165.0f, 285.0f }; +static const float guidePosTbl[3] = { 45.0f, 165.0f, 285.0f }; -static void fn_1_1844(omObjData *arg0, s32 arg1) { - UnkRoomDataStruct *temp_r31 = arg0->data; +static void ChangeSelection(omObjData *object, s32 selChange) +{ + RoomWork *work = object->data; float sp10; float spC; float sp8; - float var_f31; + float guideDestPos; - temp_r31->unk18 += (arg1 == 0) ? -1 : 1; - if (temp_r31->unk18 < 0) { - temp_r31->unk18 = 2; - } else if (temp_r31->unk18 >= 3) { - temp_r31->unk18 = 0; + work->selectedOption += (selChange == SEL_CHANGE_LEFT) ? -1 : 1; + if (work->selectedOption < 0) { + work->selectedOption = 2; + } + else if (work->selectedOption >= 3) { + work->selectedOption = 0; } fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8); - fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (arg1 == 0 ? -120.0f : 120.0f), spC, 0x60); - if (temp_r31->unk18 == 2 && arg1 == 0) { - var_f31 = lbl_1_rodata_BC[2] - 360.0f; - } else if (temp_r31->unk18 == 0 && arg1 == 1) { - var_f31 = 360.0f + lbl_1_rodata_BC[0]; - } else { - var_f31 = lbl_1_rodata_BC[temp_r31->unk18]; + fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (selChange == SEL_CHANGE_LEFT ? -120.0f : 120.0f), spC, 96); + if (work->selectedOption == 2 && selChange == SEL_CHANGE_LEFT) { + guideDestPos = guidePosTbl[2] - 360.0f; } - fn_1_2508(lbl_1_bss_20, var_f31, 430.0f, 0x60); + else if (work->selectedOption == 0 && selChange == SEL_CHANGE_RIGHT) { + guideDestPos = 360.0f + guidePosTbl[0]; + } + else { + guideDestPos = guidePosTbl[work->selectedOption]; + } + fn_1_2508(lbl_1_bss_20, guideDestPos, 430.0f, 96); } -void fn_1_1A2C(omObjData *arg0, s32 arg1) { - UnkRoomDataStruct *temp_r31 = arg0->data; +void fn_1_1A2C(omObjData *object, s32 mode) +{ + RoomWork *work = object->data; - temp_r31->unk1C = arg1; - arg0->func = lbl_1_data_68[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->mode = mode; + object->func = modes[mode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_1A70(omObjData *arg0) { - UnkRoomDataStruct *temp_r31 = arg0->data; +s32 fn_1_1A70(omObjData *object) +{ + RoomWork *work = object->data; - return temp_r31->unk1C; + return work->mode; } -static const s32 lbl_1_rodata_D4[] = { - MAKE_MESSID(47, 1), - MAKE_MESSID(47, 7), - MAKE_MESSID(47, 4) -}; +static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) }; -static void fn_1_1A8C(omObjData *arg0) { - UnkRoomDataStruct *temp_r31 = arg0->data; +static void HandleRoom(omObjData *object) +{ + RoomWork *work = object->data; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - if (temp_r31->unk28 == 0) { + if (!work->cameraDoneF) { fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1); - temp_r31->unk28 = 1; + work->cameraDoneF = TRUE; } - arg0->unk10 = 1; + object->unk10 = 1; /* fallthrough */ case 1: if (fn_1_CB8(lbl_1_bss_10) != 0) { break; } - fn_1_A6EC(temp_r31->unk10); - fn_1_A71C(temp_r31->unk10, lbl_1_rodata_D4[temp_r31->unk18]); - fn_1_A6EC(temp_r31->unk14); - fn_1_A71C(temp_r31->unk14, MAKE_MESSID(47, 14)); - arg0->unk10 = 2; + fn_1_A6EC(work->optionDescWindow); + fn_1_A71C(work->optionDescWindow, optionDescTbl[work->selectedOption]); + fn_1_A6EC(work->btnLegendWindow); + fn_1_A71C(work->btnLegendWindow, MAKE_MESSID(47, 14)); + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { - if (fn_1_550(0x200) != 0) { + if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { + if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - arg0->unk10 = 7; - } else if (fn_1_584(1) != 0) { - fn_1_1844(arg0, 0); - fn_1_A704(temp_r31->unk10); - fn_1_A704(temp_r31->unk14); + object->unk10 = 7; + } + else if (fn_1_584(1)) { + ChangeSelection(object, SEL_CHANGE_LEFT); + fn_1_A704(work->optionDescWindow); + fn_1_A704(work->btnLegendWindow); HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_584(2) != 0) { - fn_1_1844(arg0, 1); - fn_1_A704(temp_r31->unk10); - fn_1_A704(temp_r31->unk14); + object->unk10 = 1; + } + else if (fn_1_584(2)) { + ChangeSelection(object, SEL_CHANGE_RIGHT); + fn_1_A704(work->optionDescWindow); + fn_1_A704(work->btnLegendWindow); HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_550(0x100) != 0) { - fn_1_A704(temp_r31->unk10); - fn_1_A704(temp_r31->unk14); + object->unk10 = 1; + } + else if (fn_1_550(PAD_BUTTON_A)) { + fn_1_A704(work->optionDescWindow); + fn_1_A704(work->btnLegendWindow); HuAudFXPlay(2); - arg0->unk10 = 3; + object->unk10 = 3; } } break; case 3: - if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { - switch (temp_r31->unk18) { + if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { + switch (work->selectedOption) { case 0: fn_1_3290(lbl_1_bss_30, 1); - arg0->unk10 = 4; + object->unk10 = 4; break; case 1: fn_1_4388(lbl_1_bss_38, 1); - arg0->unk10 = 5; + object->unk10 = 5; break; case 2: fn_1_82B0(lbl_1_bss_40, 1); - arg0->unk10 = 6; + object->unk10 = 6; break; } } break; case 4: - if (fn_1_32D4(lbl_1_bss_30) == 0) { - arg0->unk10 = 1; + if (fn_1_39D4(lbl_1_bss_30) == 0) { + object->unk10 = 1; } break; case 5: if (fn_1_43CC(lbl_1_bss_38) == 0) { - arg0->unk10 = 1; + object->unk10 = 1; } break; case 6: if (fn_1_82F4(lbl_1_bss_40) == 0) { - arg0->unk10 = 1; + object->unk10 = 1; } break; case 7: - fn_1_A704(temp_r31->unk10); - fn_1_A704(temp_r31->unk14); - arg0->unk10 = 8; + fn_1_A704(work->optionDescWindow); + fn_1_A704(work->btnLegendWindow); + object->unk10 = 8; /* fallthrough */ case 8: - if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { - fn_1_1A2C(arg0, 0); + if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { + fn_1_1A2C(object, MODE_DISABLED); } break; } } -static omObjData *fn_1_2088(void) { - omObjData *temp_r31; +static omObjData *CreateBackground(void) +{ + omObjData *background; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); - Hu3DModelLayerSet(temp_r31->model[0], 0); - Hu3DModelShadowMapSet(temp_r31->model[0]); - return temp_r31; + background = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + background->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); + Hu3DModelLayerSet(background->model[0], 0); + Hu3DModelShadowMapSet(background->model[0]); + return background; } -static void fn_1_2110(omObjData *arg0) { - Hu3DModelKill(arg0->model[0]); +static void KillBackground(omObjData *background) +{ + Hu3DModelKill(background->model[0]); } -static omObjData *fn_1_2144(void) { - omObjData *temp_r31; +static omObjData *CreateArrowPair(void) +{ + omObjData *arrowPair; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - Hu3DModelLayerSet(temp_r31->model[0], 0); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); - return temp_r31; + arrowPair = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + Hu3DModelLayerSet(arrowPair->model[0], 0); + arrowPair->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); + return arrowPair; } -static void fn_1_21C4(omObjData *arg0) { - Hu3DModelKill(arg0->model[0]); +static void KillArrowPair(omObjData *arrow) +{ + Hu3DModelKill(arrow->model[0]); } diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c index 5bb0ae3a..813497f3 100755 --- a/src/REL/option/rumble.c +++ b/src/REL/option/rumble.c @@ -8,328 +8,360 @@ #include "game/window.h" typedef struct { - /* 0x00 */ omObjData *unk00; - /* 0x04 */ omObjData *unk04; - /* 0x08 */ omObjData *unk08; - /* 0x0C */ omObjData *unk0C; - /* 0x10 */ omObjData *unk10; - /* 0x14 */ UnkWindowDataStruct *unk14[2]; - /* 0x20 */ s32 unk1C; - /* 0x20 */ s32 unk20; - /* 0x24 */ s32 unk24; - /* 0x28 */ s32 unk28; -} UnkRumbleDataStruct; // Size 0x2C + /* 0x00 */ omObjData *system; + /* 0x04 */ omObjData *pad; + /* 0x08 */ omObjData *padFilter; + /* 0x0C */ omObjData *hand; + /* 0x10 */ omObjData *highlightOn; + /* 0x14 */ WindowWork *window[2]; + /* 0x20 */ s32 mode; + /* 0x20 */ BOOL rumbleF; + /* 0x24 */ BOOL cameraDoneF; + /* 0x28 */ s32 changeTimer; +} RumbleWork; // Size 0x2C -static void fn_1_32F0(omObjData *arg0); -static omObjData *fn_1_37AC(void); -static void fn_1_3868(omObjData *arg0); -static omObjData *fn_1_38BC(void); -static void fn_1_398C(omObjData *arg0); -static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2); -static omObjData *fn_1_3B08(void); -static void fn_1_3B8C(omObjData *arg0); -static void fn_1_3BE0(omObjData *arg0, s32 arg1); -static omObjData *fn_1_3C6C(void); -static void fn_1_3D00(omObjData *arg0); -static omObjData *fn_1_3F28(void); -static void fn_1_3FD4(omObjData *arg0); +#define MODE_DISABLED 0 +#define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this + +static void HandleRumble(omObjData *object); +static omObjData *CreateHand(void); +static void KillHand(omObjData *hand); +static omObjData *CreateSystem(void); +static void KillSystem(omObjData *system); +static void StartSystemMotion(omObjData *system, s32 rumbleF, BOOL slowF); +static omObjData *CreatePad(void); +static void KillPad(omObjData *pad); +static void ShakePad(omObjData *pad, BOOL on); +static omObjData *CreatePadFilter(void); +static void KillPadFilter(omObjData *padFilter); +static omObjData *CreateHighlightOn(void); +static void KillHighlightOn(omObjData *highlightOn); omObjData *lbl_1_bss_30; -static omObjFunc lbl_1_data_108[] = { - NULL, - fn_1_32F0 -}; +static omObjFunc modes[] = { NULL, HandleRumble }; -omObjData *fn_1_3158(void) { - omObjData *temp_r30; - UnkRumbleDataStruct *temp_r3; +omObjData *fn_1_3158(void) +{ + omObjData *object; + RumbleWork *work; - temp_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRumbleDataStruct), MEMORY_DEFAULT_NUM); - temp_r30->data = temp_r3; - temp_r3->unk20 = GWGameStat.rumble; - temp_r3->unk00 = fn_1_38BC(); - fn_1_39E0(temp_r3->unk00, temp_r3->unk20, 0); - temp_r3->unk04 = fn_1_3B08(); - fn_1_3BE0(temp_r3->unk04, temp_r3->unk20); - temp_r3->unk08 = fn_1_3C6C(); - temp_r3->unk10 = fn_1_3F28(); - temp_r3->unk0C = fn_1_37AC(); - fn_1_3290(temp_r30, 0); - return temp_r30; + object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->rumbleF = GWGameStat.rumble; + work->system = CreateSystem(); + StartSystemMotion(work->system, work->rumbleF, 0); + work->pad = CreatePad(); + ShakePad(work->pad, work->rumbleF); + work->padFilter = CreatePadFilter(); + work->highlightOn = CreateHighlightOn(); + work->hand = CreateHand(); + fn_1_3290(object, MODE_DISABLED); + + return object; } -void fn_1_322C(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +void fn_1_322C(omObjData *object) +{ + RumbleWork *work = object->data; - fn_1_3868(temp_r31->unk0C); - fn_1_398C(temp_r31->unk00); - fn_1_3B8C(temp_r31->unk04); - fn_1_3FD4(temp_r31->unk10); - fn_1_3D00(temp_r31->unk08); - HuMemDirectFree(temp_r31); + KillHand(work->hand); + KillSystem(work->system); + KillPad(work->pad); + KillHighlightOn(work->highlightOn); + KillPadFilter(work->padFilter); + HuMemDirectFree(work); +} +// SetMode +void fn_1_3290(omObjData *object, s32 mode) +{ + RumbleWork *work = object->data; + + work->mode = mode; + object->func = modes[mode]; + object->unk10 = 0; + object->unk10 = 0; +} +// GetMode +s32 fn_1_39D4(omObjData *object) +{ + RumbleWork *work = object->data; + + return work->mode; } -void fn_1_3290(omObjData *arg0, s32 arg1) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - - temp_r31->unk1C = arg1; - arg0->func = lbl_1_data_108[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; -} - -s32 fn_1_32D4(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - - return temp_r31->unk1C; -} - -static void fn_1_32F0(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +static void HandleRumble(omObjData *object) +{ + RumbleWork *work = object->data; s32 i; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - temp_r31->unk14[0] = fn_1_A44C(0); - temp_r31->unk14[1] = fn_1_A44C(1); + work->window[0] = fn_1_A44C(0); + work->window[1] = fn_1_A44C(1); fn_1_AF0(lbl_1_bss_10, -519.62f, 135.0f, 300.0f, 0x28); fn_1_A6C(lbl_1_bss_10, -315.64f, 135.0f, 182.25f, 0x28); - fn_1_3D54(arg0); - Hu3DModelLayerSet(temp_r31->unk08->model[0], 1); - temp_r31->unk24 = 0; - arg0->unk10 = 1; + fn_1_3D54(object); + Hu3DModelLayerSet(work->padFilter->model[0], 1); + work->cameraDoneF = FALSE; + object->unk10 = 1; /* fallthrough */ case 1: if (fn_1_CB8(lbl_1_bss_10) != 0) { break; } - if (temp_r31->unk24 == 0) { - Hu3DModelAttrReset(temp_r31->unk0C->model[0], 1); - temp_r31->unk24 = 1; - Hu3DModelHookSet(temp_r31->unk00->model[0], "target", temp_r31->unk0C->model[0]); + if (!work->cameraDoneF) { + Hu3DModelAttrReset(work->hand->model[0], 1); + work->cameraDoneF = TRUE; + Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]); } - fn_1_A6EC(temp_r31->unk14[1]); - fn_1_A71C(temp_r31->unk14[1], MAKE_MESSID(47, 15)); - fn_1_A6EC(temp_r31->unk14[0]); - if (temp_r31->unk20 != 0) { - fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 2)); - } else { - fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 3)); + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 15)); + fn_1_A6EC(work->window[0]); + if (work->rumbleF) { + fn_1_A71C(work->window[0], MAKE_MESSID(47, 2)); } - arg0->unk10 = 2; + else { + fn_1_A71C(work->window[0], MAKE_MESSID(47, 3)); + } + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk14[0]->unk20 == 0 && temp_r31->unk14[1]->unk20 == 0) { - if (fn_1_550(0x200) != 0) { + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - arg0->unk10 = 4; - } else if (fn_1_584(8) != 0 && temp_r31->unk20 == 0) { - fn_1_39E0(temp_r31->unk00, 1, 1); - temp_r31->unk20 = 1; - temp_r31->unk28 = 0; + object->unk10 = 4; + } + else if (fn_1_584(8) && !work->rumbleF) { + StartSystemMotion(work->system, 1, TRUE); + work->rumbleF = TRUE; + work->changeTimer = 0; GWRumbleSet(1); - arg0->unk10 = 3; - } else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) { - fn_1_39E0(temp_r31->unk00, 0, 1); - temp_r31->unk20 = 0; - temp_r31->unk28 = 0; + object->unk10 = 3; + } + else if (fn_1_584(4) && work->rumbleF) { + StartSystemMotion(work->system, 0, TRUE); + work->rumbleF = FALSE; + work->changeTimer = 0; GWRumbleSet(0); - arg0->unk10 = 3; + object->unk10 = 3; } } break; case 3: - if (temp_r31->unk28++ >= 60) { + if (work->changeTimer++ >= 60) { HuAudFXPlay(0x83C); - fn_1_3BE0(temp_r31->unk04, temp_r31->unk20); - if (temp_r31->unk20 != 0) { - HuPadRumbleSet(0, 0x3C, 0xA, 5); - Hu3DMotionTimeSet(temp_r31->unk10->model[0], 0.0f); - Hu3DModelAttrReset(temp_r31->unk10->model[0], 1); - } else { - Hu3DModelAttrSet(temp_r31->unk10->model[0], 1); + ShakePad(work->pad, work->rumbleF); + if (work->rumbleF) { + HuPadRumbleSet(0, 60, 10, 5); + Hu3DMotionTimeSet(work->highlightOn->model[0], 0.0f); + Hu3DModelAttrReset(work->highlightOn->model[0], 1); } - arg0->unk10 = 1; + else { + Hu3DModelAttrSet(work->highlightOn->model[0], 1); + } + object->unk10 = 1; } break; case 4: - fn_1_A704(temp_r31->unk14[1]); - fn_1_A704(temp_r31->unk14[0]); - Hu3DModelAttrSet(temp_r31->unk0C->model[0], 1); - fn_1_3E1C(arg0); - arg0->unk10 = 5; + fn_1_A704(work->window[1]); + fn_1_A704(work->window[0]); + Hu3DModelAttrSet(work->hand->model[0], 1); + fn_1_3E1C(object); + object->unk10 = 5; /* fallthrough */ case 5: - if (temp_r31->unk14[1]->unk20 == 0 && temp_r31->unk14[0]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { + if (work->window[1]->state == 0 && work->window[0]->state == 0 && !fn_1_3ED0(lbl_1_bss_30)) { for (i = 0; i < 2; i++) { - fn_1_A6AC(temp_r31->unk14[i]); + fn_1_A6AC(work->window[i]); } - Hu3DModelHookReset(temp_r31->unk00->model[0]); + Hu3DModelHookReset(work->system->model[0]); fn_1_AF0(lbl_1_bss_10, -519.62f, 120.0f, 300.0f, 0x28); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); - fn_1_3290(arg0, 0); + fn_1_3290(object, MODE_DISABLED); } break; } } -static omObjData *fn_1_37AC(void) { - omObjData *temp_r31; +static omObjData *CreateHand(void) +{ + omObjData *hand; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15)); - Hu3DModelLayerSet(temp_r31->model[0], 3); - omSetRot(temp_r31, 0.0f, 180.0f, 0.0f); - Hu3DModelAttrSet(temp_r31->model[0], 1); - return temp_r31; + hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15)); + Hu3DModelLayerSet(hand->model[0], 3); + omSetRot(hand, 0.0f, 180.0f, 0.0f); + Hu3DModelAttrSet(hand->model[0], 1); + return hand; } -static void fn_1_3868(omObjData *arg0) { +static void KillHand(omObjData *hand) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(hand->model[i]); } } -static omObjData *fn_1_38BC(void) { - omObjData *temp_r31; +static omObjData *CreateSystem(void) +{ + omObjData *system; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); + system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); + Hu3DModelAttrSet(system->model[0], 0x40000002); if (GWRumbleGet()) { - Hu3DMotionTimeSet(temp_r31->model[0], 60.0f); - } else { - Hu3DMotionTimeSet(temp_r31->model[0], 0.0f); + Hu3DMotionTimeSet(system->model[0], 60.0f); } - return temp_r31; + else { + Hu3DMotionTimeSet(system->model[0], 0.0f); + } + return system; } -static void fn_1_398C(omObjData *arg0) { +static void KillSystem(omObjData *system) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(system->model[i]); } } -static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2) { - s16 temp_r31 = arg0->model[0]; +static void StartSystemMotion(omObjData *system, s32 rumbleF, BOOL slowF) +{ + s16 model = system->model[0]; - Hu3DModelAttrReset(arg0->model[0], 0x40000002); - Hu3DModelAttrReset(arg0->model[0], 0x40000001); - if (arg1 != 0) { - Hu3DMotionStartEndSet(temp_r31, 60.0f, 120.0f); - if (arg2 != 0) { - Hu3DMotionTimeSet(temp_r31, 60.0f); - } else { - Hu3DMotionTimeSet(temp_r31, 119.0f); + Hu3DModelAttrReset(system->model[0], 0x40000002); + Hu3DModelAttrReset(system->model[0], 0x40000001); + if (rumbleF) { + Hu3DMotionStartEndSet(model, 60.0f, 120.0f); + if (slowF) { + Hu3DMotionTimeSet(model, 60.0f); } - } else { - Hu3DMotionStartEndSet(temp_r31, 0.0f, 60.0f); - if (arg2 != 0) { - Hu3DMotionTimeSet(temp_r31, 0.0f); - } else { - Hu3DMotionTimeSet(temp_r31, 59.0f); + else { + Hu3DMotionTimeSet(model, 119.0f); + } + } + else { + Hu3DMotionStartEndSet(model, 0.0f, 60.0f); + if (slowF) { + Hu3DMotionTimeSet(model, 0.0f); + } + else { + Hu3DMotionTimeSet(model, 59.0f); } } } -static omObjData *fn_1_3B08(void) { - omObjData *temp_r31; +static omObjData *CreatePad(void) +{ + omObjData *pad; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - return temp_r31; + pad = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); + Hu3DModelAttrSet(pad->model[0], 0x40000001); + return pad; } -static void fn_1_3B8C(omObjData *arg0) { +static void KillPad(omObjData *pad) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(pad->model[i]); } } -static void fn_1_3BE0(omObjData *arg0, s32 arg1) { - if (arg1 != 0) { - Hu3DModelAttrReset(arg0->model[0], 0x40000002); - Hu3DModelAttrSet(arg0->model[0], 0x40000001); - } else { - Hu3DModelAttrSet(arg0->model[0], 0x40000002); - Hu3DModelAttrReset(arg0->model[0], 0x40000001); +static void ShakePad(omObjData *pad, BOOL on) +{ + if (on) { + Hu3DModelAttrReset(pad->model[0], 0x40000002); + Hu3DModelAttrSet(pad->model[0], 0x40000001); + } + else { + Hu3DModelAttrSet(pad->model[0], 0x40000002); + Hu3DModelAttrReset(pad->model[0], 0x40000001); } } -static omObjData *fn_1_3C6C(void) { - omObjData *temp_r31; +static omObjData *CreatePadFilter(void) +{ + omObjData *object; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10)); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); - Hu3DModelLayerSet(temp_r31->model[0], 2); - return temp_r31; + object = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10)); + Hu3DModelAttrSet(object->model[0], 0x40000002); + Hu3DModelLayerSet(object->model[0], 2); + + return object; } -static void fn_1_3D00(omObjData *arg0) { +static void KillPadFilter(omObjData *padFilter) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(padFilter->model[i]); } } +// ZoomIn +void fn_1_3D54(omObjData *object) +{ + RumbleWork *work = object->data; + s16 model = work->padFilter->model[0]; -void fn_1_3D54(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; - - Hu3DMotionStartEndSet(temp_r30, 0.0f, 40.0f); - Hu3DMotionTimeSet(temp_r30, 0.0f); - Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); - Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); - Hu3DModelLayerSet(temp_r31->unk08->model[0], 2); + Hu3DMotionStartEndSet(model, 0.0f, 40.0f); + Hu3DMotionTimeSet(model, 0.0f); + Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002); + Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001); + Hu3DModelLayerSet(work->padFilter->model[0], 2); HuAudFXPlay(0x83D); } +// ZoomOut +void fn_1_3E1C(omObjData *object) +{ + RumbleWork *work = object->data; + s16 model = work->padFilter->model[0]; -void fn_1_3E1C(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; - - Hu3DMotionStartEndSet(temp_r30, 40.0f, 80.0f); - Hu3DMotionTimeSet(temp_r30, 40.0f); - Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); - Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); + Hu3DMotionStartEndSet(model, 40.0f, 80.0f); + Hu3DMotionTimeSet(model, 40.0f); + Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002); + Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001); HuAudFXPlay(0x83E); } +// GetPadFilterMotionDone +BOOL fn_1_3ED0(omObjData *object) +{ + RumbleWork *work = object->data; + s16 padFilterModel = work->padFilter->model[0]; -s32 fn_1_3ED0(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; - - return !Hu3DMotionEndCheck(temp_r30); + return !Hu3DMotionEndCheck(padFilterModel); } -static omObjData *fn_1_3F28(void) { - omObjData *temp_r31; +static omObjData *CreateHighlightOn(void) +{ + omObjData *highlightOn; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); + highlightOn = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + highlightOn->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); if (GWRumbleGet()) { - Hu3DModelAttrReset(temp_r31->model[0], 1); - } else { - Hu3DModelAttrSet(temp_r31->model[0], 1); + Hu3DModelAttrReset(highlightOn->model[0], 1); } - return temp_r31; + else { + Hu3DModelAttrSet(highlightOn->model[0], 1); + } + return highlightOn; } -static void fn_1_3FD4(omObjData *arg0) { +static void KillHighlightOn(omObjData *highlightOn) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(highlightOn->model[i]); } } diff --git a/src/REL/option/scene.c b/src/REL/option/scene.c index 6713e5fe..b99bd621 100755 --- a/src/REL/option/scene.c +++ b/src/REL/option/scene.c @@ -1,5 +1,5 @@ -#include "REL/option.h" #include "REL/executor.h" +#include "REL/option.h" #include "game/audio.h" #include "game/esprite.h" #include "game/gamework_data.h" @@ -15,160 +15,171 @@ #include "rel_sqrt_consts.h" typedef struct { - /* 0x00 */ s16 unk00; + /* 0x00 */ s16 spr; /* 0x02 */ char unk02[2]; - /* 0x04 */ float unk04; - /* 0x08 */ float unk08; -} UnkSceneDataStruct; // Size 0xC + /* 0x04 */ float opacity; + /* 0x08 */ float opacityChange; +} LRButtonWork; // Size 0xC -static void fn_1_270(void); +static void HandleLRBtn(void); static void fn_1_354(s16 arg0, s32 arg1, s32 arg2); static void fn_1_468(void); -static void fn_1_5EC(omObjData *arg0); -static void fn_1_6E8(void); +static void HandleScene(omObjData *arg0); +static void KillScene(void); Process *lbl_1_bss_8; -static omObjData *lbl_1_bss_4; -static s32 lbl_1_bss_0; +static omObjData *scene; +static s32 rumbleF; -void ModuleProlog(void) { +void ModuleProlog(void) +{ lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); omGameSysInit(lbl_1_bss_8); HuWinInit(1); - lbl_1_bss_0 = GWGameStat.rumble; - lbl_1_bss_4 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, fn_1_5EC); - lbl_1_bss_4->unk10 = 0; + rumbleF = GWGameStat.rumble; + scene = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, HandleScene); + scene->unk10 = 0; lbl_1_bss_28 = fn_1_2E04(); } -void fn_1_160(s16 arg0, s32 arg1, s32 arg2) { - UnkSceneDataStruct *temp_r31; - Process *temp_r30; +void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime) +{ + LRButtonWork *work; + Process *process; - temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); - temp_r31->unk00 = arg0; - temp_r31->unk08 = 1.0f / arg2; - if (arg1 != 0) { - temp_r31->unk08 = temp_r31->unk08; - temp_r31->unk04 = 0.0f; - } else { - temp_r31->unk08 = -temp_r31->unk08; - temp_r31->unk04 = 1.0f; + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM); + work->spr = sprite; + work->opacityChange = 1.0f / fadeInTime; + if (hiddenF) { + work->opacityChange = work->opacityChange; + work->opacity = 0.0f; } - espDispOn(temp_r31->unk00); - espTPLvlSet(temp_r31->unk00, temp_r31->unk04); - temp_r30 = HuPrcChildCreate(fn_1_270, 0x3000, 0x1500, 0, HuPrcCurrentGet()); - temp_r30->user_data = temp_r31; + else { + work->opacityChange = -work->opacityChange; + work->opacity = 1.0f; + } + espDispOn(work->spr); + espTPLvlSet(work->spr, work->opacity); + process = HuPrcChildCreate(HandleLRBtn, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + process->user_data = work; } -static void fn_1_270(void) { - UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; +static void HandleLRBtn(void) +{ + LRButtonWork *work = HuPrcCurrentGet()->user_data; - while (1) { - temp_r31->unk04 += temp_r31->unk08; - if (temp_r31->unk04 > 1.0f) { - temp_r31->unk04 = 1.0f; + while (TRUE) { + work->opacity += work->opacityChange; + if (work->opacity > 1.0f) { + work->opacity = 1.0f; break; } - if (temp_r31->unk04 < 0.0f) { - temp_r31->unk04 = 0.0f; + if (work->opacity < 0.0f) { + work->opacity = 0.0f; break; } - espTPLvlSet(temp_r31->unk00, temp_r31->unk04); + espTPLvlSet(work->spr, work->opacity); HuPrcVSleep(); } - espTPLvlSet(temp_r31->unk00, temp_r31->unk04); - if (temp_r31->unk04 <= 0.0f) { - espDispOff(temp_r31->unk00); + espTPLvlSet(work->spr, work->opacity); + if (work->opacity <= 0.0f) { + espDispOff(work->spr); } - HuMemDirectFree(temp_r31); + HuMemDirectFree(work); HuPrcEnd(); } -static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) { - UnkSceneDataStruct *temp_r31; - Process *temp_r30; +static void fn_1_354(s16 sprite, s32 arg1, s32 arg2) +{ + LRButtonWork *work; + Process *process; - temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); - temp_r31->unk00 = arg0; - temp_r31->unk08 = 1.0f / arg2; + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM); + work->spr = sprite; + work->opacityChange = 1.0f / arg2; if (arg1 != 0) { - temp_r31->unk08 = temp_r31->unk08; - temp_r31->unk04 = 0.0f; - } else { - temp_r31->unk08 = -temp_r31->unk08; - temp_r31->unk04 = 1.0f; + work->opacityChange = work->opacityChange; + work->opacity = 0.0f; } - Hu3DModelAttrReset(temp_r31->unk00, 1); - Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); - temp_r30 = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); - temp_r30->user_data = temp_r31; + else { + work->opacityChange = -work->opacityChange; + work->opacity = 1.0f; + } + Hu3DModelAttrReset(work->spr, 1); + Hu3DModelTPLvlSet(work->spr, work->opacity); + process = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + process->user_data = work; } -static void fn_1_468(void) { - UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; +static void fn_1_468(void) +{ + LRButtonWork *work = HuPrcCurrentGet()->user_data; - while (1) { - temp_r31->unk04 += temp_r31->unk08; - if (temp_r31->unk04 > 1.0f) { - temp_r31->unk04 = 1.0f; + while (TRUE) { + work->opacity += work->opacityChange; + if (work->opacity > 1.0f) { + work->opacity = 1.0f; break; } - if (temp_r31->unk04 < 0.0f) { - temp_r31->unk04 = 0.0f; + if (work->opacity < 0.0f) { + work->opacity = 0.0f; break; } - Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); + Hu3DModelTPLvlSet(work->spr, work->opacity); HuPrcVSleep(); } - Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); - if (temp_r31->unk04 <= 0.0f) { - Hu3DModelAttrSet(temp_r31->unk00, 1); + Hu3DModelTPLvlSet(work->spr, work->opacity); + if (work->opacity <= 0.0f) { + Hu3DModelAttrSet(work->spr, 1); } - HuMemDirectFree(temp_r31); + HuMemDirectFree(work); HuPrcEnd(); } -s32 fn_1_550(u16 arg0) { - u32 temp_r31 = HuPadBtnDown[0] & arg0; +BOOL fn_1_550(u16 btn) +{ + u32 temp_r31 = HuPadBtnDown[0] & btn; return (temp_r31 != 0); } -s32 fn_1_584(u16 arg0) { +BOOL fn_1_584(u16 arg0) +{ u32 temp_r31 = HuPadDStkRep[0] & arg0; return (temp_r31 != 0); } -s32 fn_1_5B8(u16 arg0) { +BOOL fn_1_5B8(u16 arg0) +{ u32 temp_r31 = HuPadDStk[0] & arg0; return (temp_r31 != 0); } -static void fn_1_5EC(omObjData *arg0) { - switch (arg0->unk10) { +static void HandleScene(omObjData *object) +{ + switch (object->unk10) { case 0: - arg0->unk10 = 1; + object->unk10 = 1; /* fallthrough */ case 1: - if (omSysExitReq == 0) { + if (!omSysExitReq) { break; } - arg0->unk10 = 2; + object->unk10 = 2; /* fallthrough */ case 2: WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); HuAudFadeOut(1000); - arg0->unk10 = 3; + object->unk10 = 3; /* fallthrough */ case 3: if (WipeStatGet() == 0) { fn_1_2F4C(lbl_1_bss_28); - if (lbl_1_bss_0 != GWGameStat.rumble) { + if (rumbleF != GWGameStat.rumble) { omSysExitReq = 0; - fn_1_6E8(); + KillScene(); } omOvlReturnEx(1, 1); } @@ -176,7 +187,8 @@ static void fn_1_5EC(omObjData *arg0) { } } -static void fn_1_6E8(void) { +static void KillScene(void) +{ s16 temp_r31; if (SLSaveFlagGet() == 0) { diff --git a/src/REL/option/sound.c b/src/REL/option/sound.c index b9f9e628..9f0e4090 100755 --- a/src/REL/option/sound.c +++ b/src/REL/option/sound.c @@ -1,4 +1,5 @@ #include "REL/option.h" +#include "ext_math.h" #include "game/data.h" #include "game/esprite.h" #include "game/gamework_data.h" @@ -13,94 +14,114 @@ #include "math.h" typedef struct { - /* 0x000 */ omObjData *unk00[26]; - /* 0x068 */ UnkWindowDataStruct *unk68[13]; - /* 0x09C */ s32 unk9C; - /* 0x0A0 */ s16 unkA0[19]; + /* 0x000 */ omObjData *objects[26]; + /* 0x068 */ WindowWork *window[13]; + /* 0x09C */ s32 mode; + /* 0x0A0 */ s16 sprList[19]; /* 0x0C6 */ char unkC6[2]; - /* 0x0C8 */ s32 unkC8; - /* 0x0CC */ s32 unkCC; - /* 0x0D0 */ s32 unkD0; - /* 0x0D4 */ s32 unkD4; - /* 0x0D8 */ s32 unkD8; - /* 0x0DC */ s32 unkDC; - /* 0x0E0 */ s16 unkE0; + /* 0x0C8 */ s32 changeTimer; + /* 0x0CC */ s32 selectedOption; + /* 0x0D0 */ s32 soundMode; + /* 0x0D4 */ s32 page; + /* 0x0D8 */ s32 lSelection; // list selection + /* 0x0DC */ s32 prevLSelection; + /* 0x0E0 */ s16 sndGrpSet; /* 0x0E2 */ char unkE2[2]; - /* 0x0E4 */ s32 unkE4; - /* 0x0E8 */ s32 unkE8; - /* 0x0EC */ s32 unkEC; - /* 0x0F0 */ s16 unkF0; - /* 0x0F2 */ s16 unkF2; - /* 0x0F4 */ s16 unkF4; - /* 0x0F6 */ s16 unkF6; - /* 0x0F8 */ s32 unkF8; - /* 0x0FC */ s32 unkFC; - /* 0x100 */ s32 unk100; - /* 0x104 */ float unk104; - /* 0x108 */ float unk108; - /* 0x10C */ Process *unk10C; -} UnkSoundDataStruct00; // Size 0x110 + /* 0x0E4 */ BOOL optionSelected; + /* 0x0E8 */ BOOL unkE8; + /* 0x0EC */ BOOL cameraDoneF; + /* 0x0F0 */ s16 bgMusicStat; + /* 0x0F2 */ s16 audSeqStat; + /* 0x0F4 */ s16 audSStreamStat; + /* 0x0F6 */ s16 audFxStat; + /* 0x0F8 */ s32 selectionChangeTimer; + /* 0x0FC */ s32 pageChange; + /* 0x100 */ s32 lSelectionChange; + /* 0x104 */ float lSelectionPos; + /* 0x108 */ float lSelectionChangeSpeed; + /* 0x10C */ Process *speakerNoteProcess; +} SoundWork; // Size 0x110 typedef struct { - /* 0x00 */ s32 unk00; - /* 0x04 */ s32 unk04; - /* 0x08 */ s32 unk08; - /* 0x0C */ float unk0C; - /* 0x10 */ float unk10; -} UnkSoundDataStruct01; // Size 0x14 + /* 0x00 */ BOOL enabled; + /* 0x04 */ s32 noteType; + /* 0x08 */ s32 speakerId; + /* 0x0C */ float pos; + /* 0x10 */ float speed; +} NoteWork; // Size 0x14 typedef struct { - /* 0x00 */ BOOL unk00; - /* 0x04 */ s32 unk04; - /* 0x08 */ s16 unk08; - /* 0x0A */ s16 unk0A; - /* 0x0C */ s32 unk0C; -} lbl_1_rodata_1E0_Data; // Size 0x10 + /* 0x00 */ BOOL enabled; + /* 0x04 */ s32 nameMess; + /* 0x08 */ s16 audType; + /* 0x0A */ s16 sndGrpSet; + /* 0x0C */ s32 fxId; +} SndSelData; // Size 0x10 -static void fn_1_43E8(omObjData *arg0); -static void fn_1_4658(omObjData *arg0); -static void fn_1_4A7C(omObjData *arg0); -static void fn_1_4E50(omObjData *arg0); -static void fn_1_578C(omObjData *arg0); -static void fn_1_6044(omObjData *arg0, s32 arg1); -static void fn_1_613C(omObjData *arg0); -static omObjData *fn_1_61A0(void); -static void fn_1_629C(omObjData *arg0); -static omObjData *fn_1_62F0(void); -static void fn_1_63EC(omObjData *arg0); -static omObjData *fn_1_6440(void); -static void fn_1_64D4(omObjData *arg0); -static omObjData *fn_1_6528(s32 arg0, s32 arg1); -static void fn_1_6640(omObjData *arg0); -static void fn_1_6694(omObjData *arg0); -static void fn_1_66CC(omObjData *arg0); -static void fn_1_6704(omObjData *arg0); -static void fn_1_67C8(omObjData *arg0); -static void fn_1_6828(omObjData *arg0); -static void fn_1_6A0C(omObjData *arg0); -static void fn_1_6A80(omObjData *arg0); -static void fn_1_6C5C(omObjData *arg0); -static void fn_1_6CD0(omObjData *arg0, s32 arg1); -static void fn_1_6EA4(omObjData *arg0); -static void fn_1_6F48(omObjData *arg0, s32 arg1); -static void fn_1_711C(omObjData *arg0); -static omObjData *fn_1_71C0(s32 arg0); -static void fn_1_72A8(omObjData *arg0); -static void fn_1_7310(omObjData *arg0); -static void fn_1_7710(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3); -static void fn_1_78A0(omObjData *arg0); -static void fn_1_7900(omObjData *arg0); -static void fn_1_793C(void); -static void fn_1_7F00(omObjData *arg0); -static void fn_1_8048(omObjData *arg0); +#define NUM_NOTES 16 + +#define MODE_DISABLED 0 +#define MODE_HANDLE_INITIAL_SCREEN 1 +#define MODE_HANDLE_OPTION_SEL 2 +#define MODE_HANDLE_SOUND 3 +#define MODE_HANDLE_MUSIC 4 +#define MODE_HANDLE_VOICE 5 + +#define SOUND_MODE_STEREO 0 +#define SOUND_MODE_MONO 1 + +#define NUM_BOARDS 6 + +#define NOTE_TYPE_QUAVER 0 +#define NOTE_TYPE_QUARTER 1 + +#define SPEAKER_LEFT 0 +#define SPEAKER_RIGHT 1 + +static void HandleInitialScreen(omObjData *object); +static void HandleOptionSel(omObjData *object); +static void HandleSoundSettings(omObjData *object); +static void HandleMusic(omObjData *object); +static void HandleVoice(omObjData *object); +static void TurnOnIndicator(omObjData *object, s32 id); +static void TurnOffIndicators(omObjData *object); +static omObjData *CreateOptionHand(void); +static void KillOptionHand(omObjData *optionHand); +static omObjData *CreateSoundSettingsHand(void); +static void KillSoundSettingsHand(omObjData *soundSettingsHand); +static omObjData *CreateSystem(void); +static void KillSystem(omObjData *system); +static omObjData *CreateIndicator(s32 id, BOOL off); +static void KillIndicator(omObjData *indicator); +static void HideIndicator(omObjData *object); +static void ShowIndicator(omObjData *object); +static void CreateSpr(omObjData *object); +static void KillSpr(omObjData *object); +static void DisplayOptionSel(omObjData *object); +static void HideOptionSel(omObjData *object); +static void DisplaySoundSettings(omObjData *object); +static void HideSoundSettings(omObjData *object); +static void DisplayMusicTitle(omObjData *object, s32 page); +static void HideMusicTitle(omObjData *object); +static void DisplayVoice(omObjData *object, s32 character); +static void HideVoiceTitle(omObjData *object); +static omObjData *CreateNote(s32 noteType); +static void KillNote(omObjData *note); +static void HandleNote(omObjData *note); +static void SpawnNote(omObjData *object, s32 noteType, s32 speakerId, s32 color); +static void CreateNoteProcess(omObjData *object); +static void KillNoteProcess(omObjData *object); +static void HandleNoteProcess(void); +static void PlaySound(omObjData *object); +static void FadeOutCurrSound(omObjData *object); omObjData *lbl_1_bss_38; -static const s32 lbl_1_rodata_1A8[] = { - MAKE_MESSID(47, 70), - MAKE_MESSID(47, 81), +static const s32 musicPageNameTbl[] = { + MAKE_MESSID(47, 70), + MAKE_MESSID(47, 81), MAKE_MESSID(47, 172), - MAKE_MESSID(47, 92), + MAKE_MESSID(47, 92), MAKE_MESSID(47, 101), MAKE_MESSID(47, 109), MAKE_MESSID(47, 119), @@ -110,303 +131,303 @@ static const s32 lbl_1_rodata_1A8[] = { MAKE_MESSID(47, 140), MAKE_MESSID(47, 149), MAKE_MESSID(47, 156), - MAKE_MESSID(47, 176) + MAKE_MESSID(47, 176), }; -static const lbl_1_rodata_1E0_Data lbl_1_rodata_1E0[14][10] = { +static const SndSelData musicTbl[14][10] = { { - { TRUE, MAKE_MESSID(47, 71), 1, 0, 20 }, - { TRUE, MAKE_MESSID(47, 72), 2, 79, 43 }, - { TRUE, MAKE_MESSID(47, 73), 3, 81, 44 }, - { TRUE, MAKE_MESSID(47, 74), 29, 80, 45 }, - { TRUE, MAKE_MESSID(47, 76), 30, 82, 47 }, - { TRUE, MAKE_MESSID(47, 78), 1, 0, 12 }, - { TRUE, MAKE_MESSID(47, 77), 4, 83, 48 }, - { TRUE, MAKE_MESSID(47, 80), 11, 90, 40 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 71), 1, 0, 20 }, + { TRUE, MAKE_MESSID(47, 72), 2, 79, 43 }, + { TRUE, MAKE_MESSID(47, 73), 3, 81, 44 }, + { TRUE, MAKE_MESSID(47, 74), 29, 80, 45 }, + { TRUE, MAKE_MESSID(47, 76), 30, 82, 47 }, + { TRUE, MAKE_MESSID(47, 78), 1, 0, 12 }, + { TRUE, MAKE_MESSID(47, 77), 4, 83, 48 }, + { TRUE, MAKE_MESSID(47, 80), 11, 90, 40 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 79), 1, 0, 5 }, - { TRUE, MAKE_MESSID(47, 170), 33, 0, 12 }, - { TRUE, MAKE_MESSID(47, 82), 33, 0, 7 }, - { TRUE, MAKE_MESSID(47, 83), 33, 0, 4 }, - { TRUE, MAKE_MESSID(47, 171), 33, 0, 10 }, - { TRUE, MAKE_MESSID(47, 84), 33, 0, 9 }, - { TRUE, MAKE_MESSID(47, 85), 33, 0, 1 }, - { TRUE, MAKE_MESSID(47, 86), 33, 0, 3 }, - { TRUE, MAKE_MESSID(47, 87), 33, 0, 2 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 79), 1, 0, 5 }, + { TRUE, MAKE_MESSID(47, 170), 33, 0, 12 }, + { TRUE, MAKE_MESSID(47, 82), 33, 0, 7 }, + { TRUE, MAKE_MESSID(47, 83), 33, 0, 4 }, + { TRUE, MAKE_MESSID(47, 171), 33, 0, 10 }, + { TRUE, MAKE_MESSID(47, 84), 33, 0, 9 }, + { TRUE, MAKE_MESSID(47, 85), 33, 0, 1 }, + { TRUE, MAKE_MESSID(47, 86), 33, 0, 3 }, + { TRUE, MAKE_MESSID(47, 87), 33, 0, 2 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 88), 33, 0, 5 }, - { TRUE, MAKE_MESSID(47, 89), 33, 0, 6 }, - { TRUE, MAKE_MESSID(47, 90), 33, 0, 11 }, - { TRUE, MAKE_MESSID(47, 91), 33, 0, 8 }, - { TRUE, MAKE_MESSID(47, 125), 1, 0, 2 }, - { TRUE, MAKE_MESSID(47, 126), 1, 0, 6 }, - { TRUE, MAKE_MESSID(47, 127), 1, 0, 9 }, - { TRUE, MAKE_MESSID(47, 128), 1, 0, 10 }, + { TRUE, MAKE_MESSID(47, 88), 33, 0, 5 }, + { TRUE, MAKE_MESSID(47, 89), 33, 0, 6 }, + { TRUE, MAKE_MESSID(47, 90), 33, 0, 11 }, + { TRUE, MAKE_MESSID(47, 91), 33, 0, 8 }, + { TRUE, MAKE_MESSID(47, 125), 1, 0, 2 }, + { TRUE, MAKE_MESSID(47, 126), 1, 0, 6 }, + { TRUE, MAKE_MESSID(47, 127), 1, 0, 9 }, + { TRUE, MAKE_MESSID(47, 128), 1, 0, 10 }, { TRUE, MAKE_MESSID(47, 124), 12, 93, 49 }, - { TRUE, MAKE_MESSID(47, 123), 12, 93, 50 } + { TRUE, MAKE_MESSID(47, 123), 12, 93, 50 }, }, { - { TRUE, MAKE_MESSID(47, 93), 5, 84, 13 }, - { TRUE, MAKE_MESSID(47, 94), 5, 84, 14 }, - { TRUE, MAKE_MESSID(47, 95), 5, 84, 15 }, - { TRUE, MAKE_MESSID(47, 96), 5, 84, 16 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 93), 5, 84, 13 }, + { TRUE, MAKE_MESSID(47, 94), 5, 84, 14 }, + { TRUE, MAKE_MESSID(47, 95), 5, 84, 15 }, + { TRUE, MAKE_MESSID(47, 96), 5, 84, 16 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 97), 6, 85, 17 }, - { TRUE, MAKE_MESSID(47, 98), 6, 85, 18 }, - { TRUE, MAKE_MESSID(47, 99), 6, 85, 19 }, - { TRUE, MAKE_MESSID(47, 100), 6, 85, 20 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 97), 6, 85, 17 }, + { TRUE, MAKE_MESSID(47, 98), 6, 85, 18 }, + { TRUE, MAKE_MESSID(47, 99), 6, 85, 19 }, + { TRUE, MAKE_MESSID(47, 100), 6, 85, 20 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 102), 7, 86, 21 }, - { TRUE, MAKE_MESSID(47, 103), 7, 86, 22 }, - { TRUE, MAKE_MESSID(47, 104), 7, 86, 23 }, - { TRUE, MAKE_MESSID(47, 105), 7, 86, 24 }, - { TRUE, MAKE_MESSID(47, 106), 7, 86, 25 }, - { TRUE, MAKE_MESSID(47, 107), 7, 86, 26 }, - { TRUE, MAKE_MESSID(47, 108), 7, 86, 27 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 102), 7, 86, 21 }, + { TRUE, MAKE_MESSID(47, 103), 7, 86, 22 }, + { TRUE, MAKE_MESSID(47, 104), 7, 86, 23 }, + { TRUE, MAKE_MESSID(47, 105), 7, 86, 24 }, + { TRUE, MAKE_MESSID(47, 106), 7, 86, 25 }, + { TRUE, MAKE_MESSID(47, 107), 7, 86, 26 }, + { TRUE, MAKE_MESSID(47, 108), 7, 86, 27 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 110), 8, 87, 28 }, - { TRUE, MAKE_MESSID(47, 111), 8, 87, 30 }, - { TRUE, MAKE_MESSID(47, 112), 8, 87, 29 }, - { TRUE, MAKE_MESSID(47, 113), 8, 87, 31 }, - { TRUE, MAKE_MESSID(47, 114), 8, 87, 32 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 110), 8, 87, 28 }, + { TRUE, MAKE_MESSID(47, 111), 8, 87, 30 }, + { TRUE, MAKE_MESSID(47, 112), 8, 87, 29 }, + { TRUE, MAKE_MESSID(47, 113), 8, 87, 31 }, + { TRUE, MAKE_MESSID(47, 114), 8, 87, 32 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 115), 9, 88, 33 }, - { TRUE, MAKE_MESSID(47, 116), 9, 88, 34 }, - { TRUE, MAKE_MESSID(47, 117), 9, 88, 35 }, - { TRUE, MAKE_MESSID(47, 118), 9, 88, 36 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 115), 9, 88, 33 }, + { TRUE, MAKE_MESSID(47, 116), 9, 88, 34 }, + { TRUE, MAKE_MESSID(47, 117), 9, 88, 35 }, + { TRUE, MAKE_MESSID(47, 118), 9, 88, 36 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 120), 10, 89, 37 }, - { TRUE, MAKE_MESSID(47, 121), 10, 89, 38 }, - { TRUE, MAKE_MESSID(47, 122), 10, 89, 39 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 120), 10, 89, 37 }, + { TRUE, MAKE_MESSID(47, 121), 10, 89, 38 }, + { TRUE, MAKE_MESSID(47, 122), 10, 89, 39 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 130), 13, 94, 59 }, - { TRUE, MAKE_MESSID(47, 131), 13, 94, 57 }, - { TRUE, MAKE_MESSID(47, 132), 14, 95, 67 }, - { TRUE, MAKE_MESSID(47, 133), 15, 96, 68 }, - { TRUE, MAKE_MESSID(47, 134), 16, 97, 69 }, - { TRUE, MAKE_MESSID(47, 135), 17, 98, 70 }, - { TRUE, MAKE_MESSID(47, 136), 18, 99, 71 }, + { TRUE, MAKE_MESSID(47, 130), 13, 94, 59 }, + { TRUE, MAKE_MESSID(47, 131), 13, 94, 57 }, + { TRUE, MAKE_MESSID(47, 132), 14, 95, 67 }, + { TRUE, MAKE_MESSID(47, 133), 15, 96, 68 }, + { TRUE, MAKE_MESSID(47, 134), 16, 97, 69 }, + { TRUE, MAKE_MESSID(47, 135), 17, 98, 70 }, + { TRUE, MAKE_MESSID(47, 136), 18, 99, 71 }, { TRUE, MAKE_MESSID(47, 137), 19, 100, 72 }, { TRUE, MAKE_MESSID(47, 138), 20, 101, 73 }, - { TRUE, MAKE_MESSID(47, 139), 21, 102, 74 } + { TRUE, MAKE_MESSID(47, 139), 21, 102, 74 }, }, { - { TRUE, MAKE_MESSID(47, 141), 22, 103, 75 }, - { TRUE, MAKE_MESSID(47, 142), 23, 104, 76 }, - { TRUE, MAKE_MESSID(47, 143), 24, 105, 77 }, - { TRUE, MAKE_MESSID(47, 144), 13, 94, 58 }, - { TRUE, MAKE_MESSID(47, 175), 13, 94, 60 }, - { TRUE, MAKE_MESSID(47, 145), 1, 0, 1 }, - { TRUE, MAKE_MESSID(47, 146), 1, 0, 3 }, - { TRUE, MAKE_MESSID(47, 147), 1, 0, 4 }, - { TRUE, MAKE_MESSID(47, 148), 1, 0, 11 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 141), 22, 103, 75 }, + { TRUE, MAKE_MESSID(47, 142), 23, 104, 76 }, + { TRUE, MAKE_MESSID(47, 143), 24, 105, 77 }, + { TRUE, MAKE_MESSID(47, 144), 13, 94, 58 }, + { TRUE, MAKE_MESSID(47, 175), 13, 94, 60 }, + { TRUE, MAKE_MESSID(47, 145), 1, 0, 1 }, + { TRUE, MAKE_MESSID(47, 146), 1, 0, 3 }, + { TRUE, MAKE_MESSID(47, 147), 1, 0, 4 }, + { TRUE, MAKE_MESSID(47, 148), 1, 0, 11 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 152), 25, 106, 61 }, - { TRUE, MAKE_MESSID(47, 150), 25, 106, 62 }, - { TRUE, MAKE_MESSID(47, 151), 25, 106, 63 }, - { TRUE, MAKE_MESSID(47, 155), 26, 107, 65 }, - { TRUE, MAKE_MESSID(47, 153), 26, 107, 64 }, - { TRUE, MAKE_MESSID(47, 154), 26, 107, 66 }, - { TRUE, MAKE_MESSID(47, 164), 1, 0, 13 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 152), 25, 106, 61 }, + { TRUE, MAKE_MESSID(47, 150), 25, 106, 62 }, + { TRUE, MAKE_MESSID(47, 151), 25, 106, 63 }, + { TRUE, MAKE_MESSID(47, 155), 26, 107, 65 }, + { TRUE, MAKE_MESSID(47, 153), 26, 107, 64 }, + { TRUE, MAKE_MESSID(47, 154), 26, 107, 66 }, + { TRUE, MAKE_MESSID(47, 164), 1, 0, 13 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 157), 27, 108, 51 }, - { TRUE, MAKE_MESSID(47, 158), 27, 108, 53 }, - { TRUE, MAKE_MESSID(47, 159), 27, 108, 54 }, - { TRUE, MAKE_MESSID(47, 160), 27, 108, 52 }, - { TRUE, MAKE_MESSID(47, 161), 27, 108, 55 }, - { TRUE, MAKE_MESSID(47, 162), 27, 108, 56 }, - { TRUE, MAKE_MESSID(47, 163), 1, 0, 7 }, - { TRUE, MAKE_MESSID(47, 165), 1, 0, 22 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 157), 27, 108, 51 }, + { TRUE, MAKE_MESSID(47, 158), 27, 108, 53 }, + { TRUE, MAKE_MESSID(47, 159), 27, 108, 54 }, + { TRUE, MAKE_MESSID(47, 160), 27, 108, 52 }, + { TRUE, MAKE_MESSID(47, 161), 27, 108, 55 }, + { TRUE, MAKE_MESSID(47, 162), 27, 108, 56 }, + { TRUE, MAKE_MESSID(47, 163), 1, 0, 7 }, + { TRUE, MAKE_MESSID(47, 165), 1, 0, 22 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, }, { - { TRUE, MAKE_MESSID(47, 177), 32, 92, 46 }, - { TRUE, MAKE_MESSID(47, 178), 31, 91, 41 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, - { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } - } + { TRUE, MAKE_MESSID(47, 177), 32, 92, 46 }, + { TRUE, MAKE_MESSID(47, 178), 31, 91, 41 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + }, }; -static const s32 lbl_1_rodata_AA0[12] = { - MAKE_MESSID( 0, 0), - MAKE_MESSID( 0, 1), - MAKE_MESSID( 0, 2), - MAKE_MESSID( 0, 3), - MAKE_MESSID( 0, 4), - MAKE_MESSID( 0, 5), - MAKE_MESSID( 0, 6), - MAKE_MESSID( 0, 7), +static const s32 voiceCharNameTbl[12] = { + MAKE_MESSID(0, 0), + MAKE_MESSID(0, 1), + MAKE_MESSID(0, 2), + MAKE_MESSID(0, 3), + MAKE_MESSID(0, 4), + MAKE_MESSID(0, 5), + MAKE_MESSID(0, 6), + MAKE_MESSID(0, 7), MAKE_MESSID(47, 34), MAKE_MESSID(47, 44), MAKE_MESSID(47, 55), - MAKE_MESSID(47, 62) + MAKE_MESSID(47, 62), }; -static const lbl_1_rodata_1E0_Data lbl_1_rodata_AD0[12][10] = { +static const SndSelData voiceTbl[12][10] = { { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2217 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2219 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2216 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2223 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2220 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2221 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2222 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2218 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2217 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2219 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2216 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2223 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2220 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2221 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2222 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2218 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2208 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2210 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2207 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2214 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2211 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2212 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2213 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2209 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2208 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2210 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2207 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2214 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2211 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2212 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2213 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2209 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2226 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2228 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2225 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2232 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2229 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2230 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2231 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2227 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2226 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2228 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2225 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2232 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2229 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2230 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2231 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2227 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2253 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2255 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2252 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2259 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2256 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2257 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2258 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2254 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2253 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2255 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2252 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2259 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2256 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2257 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2258 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2254 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2244 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2246 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2243 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2250 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2247 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2248 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2249 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2245 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2244 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2246 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2243 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2250 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2247 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2248 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2249 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2245 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2199 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2201 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2198 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2205 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2202 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2203 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2204 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2200 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2199 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2201 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2198 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2205 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2202 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2203 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2204 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2200 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2190 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2192 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2189 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2196 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2193 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2194 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2195 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2191 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2190 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2192 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2189 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2196 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2193 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2194 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2195 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2191 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 26), 28, 109, 2235 }, - { TRUE, MAKE_MESSID(47, 27), 28, 109, 2237 }, - { TRUE, MAKE_MESSID(47, 28), 28, 109, 2234 }, - { TRUE, MAKE_MESSID(47, 29), 28, 109, 2241 }, - { TRUE, MAKE_MESSID(47, 30), 28, 109, 2238 }, - { TRUE, MAKE_MESSID(47, 31), 28, 109, 2239 }, - { TRUE, MAKE_MESSID(47, 32), 28, 109, 2240 }, - { TRUE, MAKE_MESSID(47, 33), 28, 109, 2236 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2235 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2237 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2234 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2241 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2238 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2239 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2240 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2236 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 35), 28, 109, 54 }, - { TRUE, MAKE_MESSID(47, 36), 28, 109, 55 }, - { TRUE, MAKE_MESSID(47, 37), 28, 109, 56 }, - { TRUE, MAKE_MESSID(47, 38), 28, 109, 67 }, - { TRUE, MAKE_MESSID(47, 39), 28, 109, 68 }, - { TRUE, MAKE_MESSID(47, 40), 28, 109, 69 }, - { TRUE, MAKE_MESSID(47, 41), 28, 109, 64 }, - { TRUE, MAKE_MESSID(47, 42), 28, 109, 65 }, - { TRUE, MAKE_MESSID(47, 43), 28, 109, 66 }, - { FALSE, MAKE_MESSID(47, 24), 0, 0, 0 } + { TRUE, MAKE_MESSID(47, 35), 28, 109, 54 }, + { TRUE, MAKE_MESSID(47, 36), 28, 109, 55 }, + { TRUE, MAKE_MESSID(47, 37), 28, 109, 56 }, + { TRUE, MAKE_MESSID(47, 38), 28, 109, 67 }, + { TRUE, MAKE_MESSID(47, 39), 28, 109, 68 }, + { TRUE, MAKE_MESSID(47, 40), 28, 109, 69 }, + { TRUE, MAKE_MESSID(47, 41), 28, 109, 64 }, + { TRUE, MAKE_MESSID(47, 42), 28, 109, 65 }, + { TRUE, MAKE_MESSID(47, 43), 28, 109, 66 }, + { FALSE, MAKE_MESSID(47, 24), 0, 0, 0 }, }, { { TRUE, MAKE_MESSID(47, 45), 28, 109, 75 }, @@ -418,534 +439,547 @@ static const lbl_1_rodata_1E0_Data lbl_1_rodata_AD0[12][10] = { { TRUE, MAKE_MESSID(47, 51), 28, 109, 58 }, { TRUE, MAKE_MESSID(47, 52), 28, 109, 59 }, { TRUE, MAKE_MESSID(47, 53), 28, 109, 60 }, - { TRUE, MAKE_MESSID(47, 54), 28, 109, 61 } + { TRUE, MAKE_MESSID(47, 54), 28, 109, 61 }, }, { - { TRUE, MAKE_MESSID(47, 56), 28, 109, 62 }, - { TRUE, MAKE_MESSID(47, 57), 28, 109, 63 }, - { TRUE, MAKE_MESSID(47, 58), 28, 109, 79 }, - { TRUE, MAKE_MESSID(47, 59), 28, 109, 80 }, - { TRUE, MAKE_MESSID(47, 60), 28, 109, 73 }, - { TRUE, MAKE_MESSID(47, 61), 28, 109, 74 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + { TRUE, MAKE_MESSID(47, 56), 28, 109, 62 }, + { TRUE, MAKE_MESSID(47, 57), 28, 109, 63 }, + { TRUE, MAKE_MESSID(47, 58), 28, 109, 79 }, + { TRUE, MAKE_MESSID(47, 59), 28, 109, 80 }, + { TRUE, MAKE_MESSID(47, 60), 28, 109, 73 }, + { TRUE, MAKE_MESSID(47, 61), 28, 109, 74 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, }, { - { TRUE, MAKE_MESSID(47, 63), 28, 109, 36 }, - { TRUE, MAKE_MESSID(47, 64), 28, 109, 37 }, - { TRUE, MAKE_MESSID(47, 65), 28, 109, 38 }, - { TRUE, MAKE_MESSID(47, 67), 28, 109, 40 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, - { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } - } + { TRUE, MAKE_MESSID(47, 63), 28, 109, 36 }, + { TRUE, MAKE_MESSID(47, 64), 28, 109, 37 }, + { TRUE, MAKE_MESSID(47, 65), 28, 109, 38 }, + { TRUE, MAKE_MESSID(47, 67), 28, 109, 40 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + }, }; -static s32 lbl_1_data_118[14] = { - 1, 1, 1, 0, - 0, 0, 0, 0, - 0, 1, 1, 0, - 0, 0 -}; +static BOOL musicPageEnabledTbl[14] = { TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE }; -static omObjFunc lbl_1_data_150[] = { - NULL, - fn_1_43E8, - fn_1_4658, - fn_1_4A7C, - fn_1_4E50, - fn_1_578C -}; +static omObjFunc modes[] = { NULL, HandleInitialScreen, HandleOptionSel, HandleSoundSettings, HandleMusic, HandleVoice }; -static s32 lbl_1_data_168[] = { - MAKE_MESSID(47, 8), - MAKE_MESSID(47, 10), - MAKE_MESSID(47, 9) -}; +static s32 optionTextTbl[] = { MAKE_MESSID(47, 8), MAKE_MESSID(47, 10), MAKE_MESSID(47, 9) }; -omObjData *fn_1_4028(void) { - omObjData *temp_r29; - UnkSoundDataStruct00 *temp_r3; +omObjData *fn_1_4028(void) +{ + omObjData *object; + SoundWork *work; s32 i; - temp_r29 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSoundDataStruct00), MEMORY_DEFAULT_NUM); - temp_r29->data = temp_r3; - temp_r3->unkCC = 0; - temp_r3->unkE8 = 0; - temp_r3->unkE4 = 0; - temp_r3->unkF0 = -2; - temp_r3->unkF2 = -1; - temp_r3->unkF4 = -1; - temp_r3->unkF6 = -1; - temp_r3->unk10C = NULL; + object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(SoundWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->selectedOption = 0; + work->unkE8 = FALSE; + work->optionSelected = FALSE; + work->bgMusicStat = -2; + work->audSeqStat = -1; + work->audSStreamStat = -1; + work->audFxStat = -1; + work->speakerNoteProcess = NULL; switch (GWGameStat.sound_mode) { case 0: - temp_r3->unkD0 = 1; + work->soundMode = SOUND_MODE_MONO; break; case 2: default: - temp_r3->unkD0 = 0; + work->soundMode = SOUND_MODE_STEREO; break; } - temp_r3->unk00[0] = fn_1_6440(); + + work->objects[0] = CreateSystem(); for (i = 0; i < 6; i++) { - temp_r3->unk00[i + 1] = fn_1_6528(i % 3, (i / 3) > 0); + work->objects[i + 1] = CreateIndicator(i % 3, (i / 3) > 0); } - fn_1_613C(temp_r29); - temp_r3->unk00[7] = fn_1_61A0(); - temp_r3->unk00[8] = fn_1_62F0(); - for (i = 0; i < 16; i++) { - temp_r3->unk00[i + 10] = fn_1_71C0((i / 8) == 0 ? 0 : 1); + TurnOffIndicators(object); + work->objects[7] = CreateOptionHand(); + work->objects[8] = CreateSoundSettingsHand(); + for (i = 0; i < NUM_NOTES; i++) { + work->objects[i + 10] = CreateNote((i / 8) == 0 ? NOTE_TYPE_QUAVER : NOTE_TYPE_QUARTER); } - fn_1_6704(temp_r29); - fn_1_4388(temp_r29, 0); - for (i = 0; i < 6; i++) { - lbl_1_data_118[i + 3] = (GWGameStat.board_play_count[i] != 0) ? 1 : 0; + CreateSpr(object); + fn_1_4388(object, MODE_DISABLED); + for (i = 0; i < NUM_BOARDS; i++) { + musicPageEnabledTbl[i + 3] = (GWGameStat.board_play_count[i] != 0) ? TRUE : FALSE; } - lbl_1_data_118[11] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; - lbl_1_data_118[12] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; - lbl_1_data_118[13] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; - return temp_r29; + musicPageEnabledTbl[11] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + musicPageEnabledTbl[12] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + musicPageEnabledTbl[13] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + return object; } -void fn_1_42DC(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +void fn_1_42DC(omObjData *object) +{ + SoundWork *work = object->data; s32 i; - fn_1_629C(temp_r31->unk00[7]); - fn_1_63EC(temp_r31->unk00[8]); - fn_1_64D4(temp_r31->unk00[0]); + KillOptionHand(work->objects[7]); + KillSoundSettingsHand(work->objects[8]); + KillSystem(work->objects[0]); for (i = 0; i < 6; i++) { - fn_1_6640(temp_r31->unk00[i + 1]); + KillIndicator(work->objects[i + 1]); } for (i = 0; i < 16; i++) { - fn_1_72A8(temp_r31->unk00[i + 10]); + KillNote(work->objects[i + 10]); } - fn_1_67C8(arg0); - HuMemDirectFree(temp_r31); + KillSpr(object); + HuMemDirectFree(work); } -void fn_1_4388(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +void fn_1_4388(omObjData *object, s32 mode) +{ + SoundWork *work = object->data; - temp_r31->unk9C = arg1; - arg0->func = lbl_1_data_150[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->mode = mode; + object->func = modes[mode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_43CC(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +s32 fn_1_43CC(omObjData *object) +{ + SoundWork *work = object->data; - return temp_r31->unk9C; + return work->mode; } -static void fn_1_43E8(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void HandleInitialScreen(omObjData *object) +{ + SoundWork *work = object->data; s32 i; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - if (temp_r30->unkE8 == 0) { - temp_r30->unk68[0] = fn_1_A44C(0); - temp_r30->unk68[1] = fn_1_A44C(1); - temp_r30->unk68[2] = fn_1_A44C(2); + if (!work->unkE8) { + work->window[0] = fn_1_A44C(0); + work->window[1] = fn_1_A44C(1); + work->window[2] = fn_1_A44C(2); for (i = 0; i < 10; i++) { - temp_r30->unk68[i + 3] = fn_1_A44C(3); + work->window[i + 3] = fn_1_A44C(3); } fn_1_AF0(lbl_1_bss_10, 0.0f, 120.0f, -600.0f, 0x28); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, -350.0f, 0x28); - temp_r30->unkE8 = 1; - temp_r30->unkCC = 0; - temp_r30->unkE4 = 0; - arg0->unk10 = 1; - } else { - arg0->unk10 = 2; + work->unkE8 = TRUE; + work->selectedOption = 0; + work->optionSelected = FALSE; + object->unk10 = 1; + } + else { + object->unk10 = 2; } break; case 1: if (fn_1_CB8(lbl_1_bss_10) == 0) { - fn_1_4388(arg0, 2); + fn_1_4388(object, MODE_HANDLE_OPTION_SEL); } break; case 2: for (i = 0; i < 13; i++) { - fn_1_A6AC(temp_r30->unk68[i]); + fn_1_A6AC(work->window[i]); } fn_1_AF0(lbl_1_bss_10, 0.0f, 120.0f, -600.0f, 0x28); fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); - temp_r30->unkE8 = 0; - temp_r30->unkE4 = 0; - fn_1_4388(arg0, 0); + work->unkE8 = FALSE; + work->optionSelected = FALSE; + fn_1_4388(object, MODE_DISABLED); break; } } -static void fn_1_4658(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void HandleOptionSel(omObjData *object) +{ + SoundWork *work = object->data; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - fn_1_613C(arg0); - temp_r31->unkD8 = temp_r31->unkCC; - if (temp_r31->unkE4 == 0) { + TurnOffIndicators(object); + work->lSelection = work->selectedOption; + if (!work->optionSelected) { fn_1_3D54(lbl_1_bss_30); - } else { - fn_1_6C5C(arg0); - fn_1_6EA4(arg0); - fn_1_711C(arg0); } - temp_r31->unkE4 = 0; - temp_r31->unkEC = 0; - arg0->unk10 = 1; + else { + HideSoundSettings(object); + HideMusicTitle(object); + HideVoiceTitle(object); + } + work->optionSelected = FALSE; + work->cameraDoneF = FALSE; + object->unk10 = 1; /* fallthrough */ case 1: - fn_1_6828(arg0); - fn_1_A6EC(temp_r31->unk68[1]); - fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 168)); - fn_1_A6EC(temp_r31->unk68[0]); - fn_1_A71C(temp_r31->unk68[0], lbl_1_data_168[temp_r31->unkD8]); - if (temp_r31->unkEC == 0) { - Hu3DModelAttrReset(temp_r31->unk00[7]->model[0], 1); - temp_r31->unkEC = 1; + DisplayOptionSel(object); + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 168)); + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], optionTextTbl[work->lSelection]); + if (!work->cameraDoneF) { + Hu3DModelAttrReset(work->objects[7]->model[0], 1); + work->cameraDoneF = TRUE; } - omSetTra(temp_r31->unk00[7], -34.0f + 40.0f * temp_r31->unkD8, 120.0f, -500.0f); - arg0->unk10 = 2; + omSetTra(work->objects[7], -34.0f + 40.0f * work->lSelection, 120.0f, -500.0f); + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - if (fn_1_550(0x100) != 0) { - temp_r31->unkCC = temp_r31->unkD8; - temp_r31->unkE4 = 1; - fn_1_6044(arg0, temp_r31->unkCC); + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + if (fn_1_550(PAD_BUTTON_A)) { + work->selectedOption = work->lSelection; + work->optionSelected = TRUE; + TurnOnIndicator(object, work->selectedOption); HuAudFXPlay(2); - arg0->unk10 = 3; - } else if (fn_1_550(0x200) != 0) { + object->unk10 = 3; + } + else if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - arg0->unk10 = 3; - } else if (fn_1_584(1) != 0 && temp_r31->unkD8 > 0) { - temp_r31->unkD8--; + object->unk10 = 3; + } + else if (fn_1_584(1) && work->lSelection > 0) { + work->lSelection--; HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_584(2) != 0 && temp_r31->unkD8 < 2) { - temp_r31->unkD8++; + object->unk10 = 1; + } + else if (fn_1_584(2) && work->lSelection < 2) { + work->lSelection++; HuAudFXPlay(0); - arg0->unk10 = 1; + object->unk10 = 1; } } break; case 3: - fn_1_A704(temp_r31->unk68[1]); - fn_1_A704(temp_r31->unk68[0]); - if (temp_r31->unkE4 == 0) { + fn_1_A704(work->window[1]); + fn_1_A704(work->window[0]); + if (!work->optionSelected) { fn_1_3E1C(lbl_1_bss_30); } - Hu3DModelAttrSet(temp_r31->unk00[7]->model[0], 1); - arg0->unk10 = 4; + Hu3DModelAttrSet(work->objects[7]->model[0], 1); + object->unk10 = 4; /* fallthrough */ case 4: - if ((temp_r31->unkE4 != 0 || fn_1_3ED0(lbl_1_bss_30) == 0) && temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - if (temp_r31->unkE4 != 0) { - switch (temp_r31->unkCC) { + if ((work->optionSelected || !fn_1_3ED0(lbl_1_bss_30)) && work->window[0]->state == 0 && work->window[1]->state == 0) { + if (work->optionSelected) { + switch (work->selectedOption) { case 0: - fn_1_4388(arg0, 3); + fn_1_4388(object, MODE_HANDLE_SOUND); break; case 1: - fn_1_4388(arg0, 4); + fn_1_4388(object, MODE_HANDLE_MUSIC); break; case 2: - fn_1_4388(arg0, 5); + fn_1_4388(object, MODE_HANDLE_VOICE); break; } - } else { - fn_1_6A0C(arg0); - fn_1_4388(arg0, 1); + } + else { + HideOptionSel(object); + fn_1_4388(object, MODE_HANDLE_INITIAL_SCREEN); } } break; } } -static const s32 lbl_1_rodata_1278[] = { 2, 0 }; -static const s32 lbl_1_rodata_1280[] = { 1, 0 }; +static const s32 outputModeTbl[] = { 2, 0 }; +static const s32 soundModeTbl[] = { 1, 0 }; -static const s32 lbl_1_rodata_1288[] = { - MAKE_MESSID(47, 11), - MAKE_MESSID(47, 12) -}; +static const s32 soundModeNameTbl[] = { MAKE_MESSID(47, 11), MAKE_MESSID(47, 12) }; -static void fn_1_4A7C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void HandleSoundSettings(omObjData *object) +{ + SoundWork *work = object->data; Vec sp8; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - fn_1_6A0C(arg0); - temp_r31->unkE4 = 0; - temp_r31->unkD8 = temp_r31->unkD0; - temp_r31->unkEC = 0; - temp_r31->unkE4 = 0; - fn_1_78A0(arg0); - arg0->unk10 = 1; + HideOptionSel(object); + work->optionSelected = FALSE; + work->lSelection = work->soundMode; + work->cameraDoneF = FALSE; + work->optionSelected = FALSE; + CreateNoteProcess(object); + object->unk10 = 1; /* fallthrough */ case 1: - fn_1_6A80(arg0); - fn_1_A6EC(temp_r31->unk68[1]); - fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 168)); - fn_1_A6EC(temp_r31->unk68[0]); - fn_1_A71C(temp_r31->unk68[0], lbl_1_rodata_1288[temp_r31->unkD0]); - if (temp_r31->unkEC == 0) { - Hu3DModelAttrReset(temp_r31->unk00[8]->model[0], 1); - temp_r31->unkEC = 1; + DisplaySoundSettings(object); + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 168)); + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], soundModeNameTbl[work->soundMode]); + if (!work->cameraDoneF) { + Hu3DModelAttrReset(work->objects[8]->model[0], 1); + work->cameraDoneF = TRUE; } sp8.x = -38.0f; - sp8.y = 140.0f - 15.0f * temp_r31->unkD8; + sp8.y = 140.0f - 15.0f * work->lSelection; sp8.z = -500.0f; - omSetTra(temp_r31->unk00[8], sp8.x, sp8.y, sp8.z); - arg0->unk10 = 2; + omSetTra(work->objects[8], sp8.x, sp8.y, sp8.z); + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - if (fn_1_550(0x100) != 0) { - temp_r31->unkD0 = temp_r31->unkD8; - if (temp_r31->unkD0 == 0) { + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + if (fn_1_550(PAD_BUTTON_A)) { + work->soundMode = work->lSelection; + if (work->soundMode == SOUND_MODE_STEREO) { HuAudFXPlay(0x841); - } else { + } + else { HuAudFXPlay(0x842); } - GWGameStat.sound_mode = lbl_1_rodata_1278[temp_r31->unkD8]; - msmSysSetOutputMode(lbl_1_rodata_1278[temp_r31->unkD8]); - OSSetSoundMode(lbl_1_rodata_1280[temp_r31->unkD8]); - temp_r31->unkE4 = 1; - fn_1_6A80(arg0); - temp_r31->unkC8 = 0; - arg0->unk10 = 3; - } else if (fn_1_550(0x200) != 0) { + GWGameStat.sound_mode = outputModeTbl[work->lSelection]; + msmSysSetOutputMode(outputModeTbl[work->lSelection]); + OSSetSoundMode(soundModeTbl[work->lSelection]); + work->optionSelected = TRUE; + DisplaySoundSettings(object); + work->changeTimer = 0; + object->unk10 = 3; + } + else if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - arg0->unk10 = 4; - } else if (fn_1_584(8) != 0 && temp_r31->unkD8 > 0) { - temp_r31->unkD8--; + object->unk10 = 4; + } + else if (fn_1_584(8) != 0 && work->lSelection > 0) { + work->lSelection--; HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_584(4) != 0 && temp_r31->unkD8 < 1) { - temp_r31->unkD8++; + object->unk10 = 1; + } + else if (fn_1_584(4) != 0 && work->lSelection < 1) { + work->lSelection++; HuAudFXPlay(0); - arg0->unk10 = 1; + object->unk10 = 1; } } break; case 3: - if (temp_r31->unkC8++ >= 60) { - arg0->unk10 = 4; + if (work->changeTimer++ >= 60) { + object->unk10 = 4; return; } break; case 4: - fn_1_7900(arg0); - fn_1_A704(temp_r31->unk68[1]); - fn_1_A704(temp_r31->unk68[0]); - Hu3DModelAttrSet(temp_r31->unk00[8]->model[0], 1); - arg0->unk10 = 5; + KillNoteProcess(object); + fn_1_A704(work->window[1]); + fn_1_A704(work->window[0]); + Hu3DModelAttrSet(work->objects[8]->model[0], 1); + object->unk10 = 5; /* fallthrough */ case 5: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - temp_r31->unkE4 = 0; - fn_1_6A80(arg0); - temp_r31->unkE4 = 1; - fn_1_4388(arg0, 2); + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + work->optionSelected = FALSE; + DisplaySoundSettings(object); + work->optionSelected = TRUE; + fn_1_4388(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_4E50(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void HandleMusic(omObjData *object) +{ + SoundWork *work = object->data; float temp_f31; float temp_f30; float temp_f29; float temp_f28; float temp_f27; float temp_f26; - s32 var_r28; - s32 var_r29; + s32 i; + s32 newSelection; s32 sp8; - sp8 = temp_r31->unkD8; - switch (arg0->unk10) { + sp8 = work->lSelection; + switch (object->unk10) { case 0: - fn_1_6A0C(arg0); - temp_r31->unkD4 = 0; - temp_r31->unk100 = 0; - temp_r31->unkFC = 0; - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - espPosSet(temp_r31->unkA0[14], 36.0f, 222.0f); - espPosSet(temp_r31->unkA0[15], 544.0f, 222.0f); - fn_1_160(temp_r31->unkA0[14], 1, 5); - fn_1_160(temp_r31->unkA0[15], 1, 5); - temp_r31->unkF8 = 0; - arg0->unk10 = 1; + HideOptionSel(object); + work->page = 0; + work->lSelectionChange = 0; + work->pageChange = 0; + espBankSet(work->sprList[14], 0); + espBankSet(work->sprList[15], 2); + espPosSet(work->sprList[14], 36.0f, 222.0f); + espPosSet(work->sprList[15], 544.0f, 222.0f); + fn_1_160(work->sprList[14], 1, 5); + fn_1_160(work->sprList[15], 1, 5); + work->selectionChangeTimer = 0; + object->unk10 = 1; /* fallthrough */ case 1: - temp_r31->unkD8 = 0; - temp_r31->unkDC = 0; - if (temp_r31->unkFC != 0) { + work->lSelection = 0; + work->prevLSelection = 0; + if (work->pageChange != 0) { do { - temp_r31->unkD4 += temp_r31->unkFC; - if (temp_r31->unkD4 >= 14) { - temp_r31->unkD4 = 0; - } else if (temp_r31->unkD4 < 0) { - temp_r31->unkD4 = 13; + work->page += work->pageChange; + if (work->page >= 14) { + work->page = 0; } - } while (lbl_1_data_118[temp_r31->unkD4] == 0); + else if (work->page < 0) { + work->page = 13; + } + } while (!musicPageEnabledTbl[work->page]); HuAudFXPlay(0x840); - if (temp_r31->unkFC > 0) { - espBankSet(temp_r31->unkA0[15], 3); - } else { - espBankSet(temp_r31->unkA0[14], 1); + if (work->pageChange > 0) { + espBankSet(work->sprList[15], 3); } - temp_r31->unkF8 = 5; - temp_r31->unkFC = 0; + else { + espBankSet(work->sprList[14], 1); + } + work->selectionChangeTimer = 5; + work->pageChange = 0; } - arg0->unk10 = 2; + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk100 != 0) { - var_r29 = temp_r31->unkD8 + temp_r31->unk100; - if (var_r29 > 9) { - var_r29 = 9; - } else if (var_r29 < 0) { - var_r29 = 0; + if (work->lSelectionChange != 0) { + newSelection = work->lSelection + work->lSelectionChange; + if (newSelection > 9) { + newSelection = 9; } - if (!lbl_1_rodata_1E0[temp_r31->unkD4][var_r29].unk00) { - if (temp_r31->unkD8 < 5) { - for (var_r28 = var_r29; var_r28 >= 5; var_r28--) { - if (lbl_1_rodata_1E0[temp_r31->unkD4][var_r28].unk00) { - var_r29 = var_r28; + else if (newSelection < 0) { + newSelection = 0; + } + if (!musicTbl[work->page][newSelection].enabled) { + if (work->lSelection < 5) { + for (i = newSelection; i >= 5; i--) { + if (musicTbl[work->page][i].enabled) { + newSelection = i; break; } } - if (var_r28 < 5) { - var_r29 = temp_r31->unkD8; + if (i < 5) { + newSelection = work->lSelection; } - } else { - var_r29 = temp_r31->unkD8; + } + else { + newSelection = work->lSelection; } } - temp_r31->unkDC = temp_r31->unkD8; - if (temp_r31->unkD8 != var_r29) { - temp_r31->unkD8 = var_r29; + work->prevLSelection = work->lSelection; + if (work->lSelection != newSelection) { + work->lSelection = newSelection; HuAudFXPlay(0x840); } - temp_r31->unk100 = 0; + work->lSelectionChange = 0; } - arg0->unk10 = 3; + object->unk10 = 3; /* fallthrough */ case 3: - fn_1_6CD0(arg0, temp_r31->unkD4); - fn_1_A6EC(temp_r31->unk68[0]); - fn_1_A71C(temp_r31->unk68[0], MAKE_MESSID(47, 10)); - fn_1_A6EC(temp_r31->unk68[1]); - fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 18)); - espDispOn(temp_r31->unkA0[18]); - temp_r31->unk104 = 0.0f; - temp_r31->unk108 = 0.0625f; - if (temp_r31->unkF8 > 0) { - arg0->unk10 = 5; - } else { - arg0->unk10 = 4; + DisplayMusicTitle(object, work->page); + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], MAKE_MESSID(47, 10)); + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 18)); + espDispOn(work->sprList[18]); + work->lSelectionPos = 0.0f; + work->lSelectionChangeSpeed = 0.0625f; + if (work->selectionChangeTimer > 0) { + object->unk10 = 5; + } + else { + object->unk10 = 4; } /* fallthrough */ case 4: - temp_f31 = 166.0f + 244.0f * (temp_r31->unkDC / 5); - temp_f30 = 144.0f + 29.0f * (temp_r31->unkDC % 5); - temp_f27 = 166.0f + 244.0f * (temp_r31->unkD8 / 5); - temp_f26 = 144.0f + 29.0f * (temp_r31->unkD8 % 5); - temp_f29 = temp_f31 + temp_r31->unk104 * (temp_f27 - temp_f31); - temp_f28 = temp_f30 + temp_r31->unk104 * (temp_f26 - temp_f30); - espPosSet(temp_r31->unkA0[18], temp_f29, temp_f28); - if ((temp_r31->unk104 += temp_r31->unk108) < 1.0f) { + temp_f31 = 166.0f + 244.0f * (work->prevLSelection / 5); + temp_f30 = 144.0f + 29.0f * (work->prevLSelection % 5); + temp_f27 = 166.0f + 244.0f * (work->lSelection / 5); + temp_f26 = 144.0f + 29.0f * (work->lSelection % 5); + temp_f29 = temp_f31 + work->lSelectionPos * (temp_f27 - temp_f31); + temp_f28 = temp_f30 + work->lSelectionPos * (temp_f26 - temp_f30); + espPosSet(work->sprList[18], temp_f29, temp_f28); + if ((work->lSelectionPos += work->lSelectionChangeSpeed) < 1.0f) { break; } - espPosSet(temp_r31->unkA0[18], 166.0f + 244.0f * (temp_r31->unkD8 / 5), 144.0f + 29.0f * (temp_r31->unkD8 % 5)); - arg0->unk10 = 6; + espPosSet(work->sprList[18], 166.0f + 244.0f * (work->lSelection / 5), 144.0f + 29.0f * (work->lSelection % 5)); + object->unk10 = 6; break; case 5: - if (temp_r31->unkF8 > 0) { - temp_r31->unkF8--; + if (work->selectionChangeTimer > 0) { + work->selectionChangeTimer--; break; } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - arg0->unk10 = 6; + espBankSet(work->sprList[14], 0); + espBankSet(work->sprList[15], 2); + object->unk10 = 6; /* fallthrough */ case 6: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - if (fn_1_550(0x100) != 0) { - if (temp_r31->unkF0 == -2) { + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + if (fn_1_550(PAD_BUTTON_A)) { + if (work->bgMusicStat == -2) { HuAudFadeOut(0x64); - temp_r31->unkF0 = -1; - } else if (temp_r31->unkF0 != -1) { - HuAudSeqFadeOut(temp_r31->unkF0, 0x64); - temp_r31->unkF0 = -1; + work->bgMusicStat = -1; } - fn_1_7F00(arg0); - } else if (fn_1_550(0x200) != 0) { + else if (work->bgMusicStat != -1) { + HuAudSeqFadeOut(work->bgMusicStat, 0x64); + work->bgMusicStat = -1; + } + PlaySound(object); + } + else if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - temp_r31->unkC8 = 0; - arg0->unk10 = 7; - } else { - if (fn_1_5B8(1) != 0 && temp_r31->unkD8 >= 5) { - temp_r31->unk100 -= 5; - } else if (fn_1_5B8(2) != 0 && temp_r31->unkD8 < 5) { - temp_r31->unk100 += 5; + work->changeTimer = 0; + object->unk10 = 7; + } + else { + if (fn_1_5B8(1) != 0 && work->lSelection >= 5) { + work->lSelectionChange -= 5; } - if (fn_1_5B8(8) != 0 && temp_r31->unkD8 % 5 > 0) { - temp_r31->unk100--; - } else if (fn_1_5B8(4) != 0 && temp_r31->unkD8 % 5 < 4) { - temp_r31->unk100++; + else if (fn_1_5B8(2) != 0 && work->lSelection < 5) { + work->lSelectionChange += 5; } - if (temp_r31->unk100 != 0) { - arg0->unk10 = 2; - } else if (fn_1_550(0x40) != 0) { - temp_r31->unkFC = -1; - } else if (fn_1_550(0x20) != 0) { - temp_r31->unkFC = 1; + if (fn_1_5B8(8) != 0 && work->lSelection % 5 > 0) { + work->lSelectionChange--; } - if (temp_r31->unkFC != 0) { - arg0->unk10 = 1; + else if (fn_1_5B8(4) != 0 && work->lSelection % 5 < 4) { + work->lSelectionChange++; + } + if (work->lSelectionChange != 0) { + object->unk10 = 2; + } + else if (fn_1_550(PAD_TRIGGER_L)) { + work->pageChange = -1; + } + else if (fn_1_550(PAD_TRIGGER_R)) { + work->pageChange = 1; + } + if (work->pageChange != 0) { + object->unk10 = 1; } } } break; case 7: - fn_1_A704(temp_r31->unk68[1]); - fn_1_A704(temp_r31->unk68[0]); - fn_1_8048(arg0); - fn_1_160(temp_r31->unkA0[14], 0, 5); - fn_1_160(temp_r31->unkA0[15], 0, 5); - arg0->unk10 = 8; + fn_1_A704(work->window[1]); + fn_1_A704(work->window[0]); + FadeOutCurrSound(object); + fn_1_160(work->sprList[14], 0, 5); + fn_1_160(work->sprList[15], 0, 5); + object->unk10 = 8; /* fallthrough */ case 8: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - espDispOff(temp_r31->unkA0[18]); - if (temp_r31->unkF0 == -1) { - temp_r31->unkF0 = HuAudSeqPlay(0x2D); + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + espDispOff(work->sprList[18]); + if (work->bgMusicStat == -1) { + work->bgMusicStat = HuAudSeqPlay(0x2D); } - fn_1_4388(arg0, 2); + fn_1_4388(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_578C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void HandleVoice(omObjData *object) +{ + SoundWork *work = object->data; float temp_f31; float temp_f30; float temp_f29; @@ -953,303 +987,323 @@ static void fn_1_578C(omObjData *arg0) { float temp_f27; float temp_f26; s32 var_r28; - s32 var_r29; + s32 newSelection; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - fn_1_6A0C(arg0); - temp_r31->unkD4 = 0; - temp_r31->unk100 = 0; - temp_r31->unkFC = 0; - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - espPosSet(temp_r31->unkA0[14], 36.0f, 222.0f); - espPosSet(temp_r31->unkA0[15], 544.0f, 222.0f); - fn_1_160(temp_r31->unkA0[14], 1, 5); - fn_1_160(temp_r31->unkA0[15], 1, 5); - temp_r31->unkF8 = 0; - arg0->unk10 = 3; + HideOptionSel(object); + work->page = 0; + work->lSelectionChange = 0; + work->pageChange = 0; + espBankSet(work->sprList[14], 0); + espBankSet(work->sprList[15], 2); + espPosSet(work->sprList[14], 36.0f, 222.0f); + espPosSet(work->sprList[15], 544.0f, 222.0f); + fn_1_160(work->sprList[14], 1, 5); + fn_1_160(work->sprList[15], 1, 5); + work->selectionChangeTimer = 0; + object->unk10 = 3; /* fallthrough */ case 1: - temp_r31->unkD8 = 0; - temp_r31->unkDC = 0; - if (temp_r31->unkFC != 0) { - temp_r31->unkD4 += temp_r31->unkFC; - if (temp_r31->unkD4 > 11) { - temp_r31->unkD4 = 0; - } else if (temp_r31->unkD4 < 0) { - temp_r31->unkD4 = 11; + work->lSelection = 0; + work->prevLSelection = 0; + if (work->pageChange != 0) { + work->page += work->pageChange; + if (work->page > 11) { + work->page = 0; + } + else if (work->page < 0) { + work->page = 11; } HuAudFXPlay(0x840); - if (temp_r31->unkFC > 0) { - espBankSet(temp_r31->unkA0[15], 3); - } else { - espBankSet(temp_r31->unkA0[14], 1); + if (work->pageChange > 0) { + espBankSet(work->sprList[15], 3); } - temp_r31->unkF8 = 5; - temp_r31->unkFC = 0; + else { + espBankSet(work->sprList[14], 1); + } + work->selectionChangeTimer = 5; + work->pageChange = 0; } - arg0->unk10 = 2; + object->unk10 = 2; /* fallthrough */ case 2: - if (temp_r31->unk100 != 0) { - var_r29 = temp_r31->unkD8 + temp_r31->unk100; - if (var_r29 > 9) { - var_r29 = 9; - } else if (var_r29 < 0) { - var_r29 = 0; + if (work->lSelectionChange != 0) { + newSelection = work->lSelection + work->lSelectionChange; + if (newSelection > 9) { + newSelection = 9; } - if (!lbl_1_rodata_AD0[temp_r31->unkD4][var_r29].unk00) { - if (temp_r31->unkD8 < 5) { - for (var_r28 = var_r29; var_r28 >= 5; var_r28--) { - if (lbl_1_rodata_AD0[temp_r31->unkD4][var_r28].unk00) { - var_r29 = var_r28; + else if (newSelection < 0) { + newSelection = 0; + } + if (!voiceTbl[work->page][newSelection].enabled) { + if (work->lSelection < 5) { + for (var_r28 = newSelection; var_r28 >= 5; var_r28--) { + if (voiceTbl[work->page][var_r28].enabled) { + newSelection = var_r28; break; } } if (var_r28 < 5) { - var_r29 = temp_r31->unkD8; + newSelection = work->lSelection; } - } else { - var_r29 = temp_r31->unkD8; + } + else { + newSelection = work->lSelection; } } - temp_r31->unkDC = temp_r31->unkD8; - if (temp_r31->unkD8 != var_r29) { - temp_r31->unkD8 = var_r29; + work->prevLSelection = work->lSelection; + if (work->lSelection != newSelection) { + work->lSelection = newSelection; HuAudFXPlay(0x840); } - temp_r31->unk100 = 0; + work->lSelectionChange = 0; } - arg0->unk10 = 3; + object->unk10 = 3; /* fallthrough */ case 3: - fn_1_6F48(arg0, temp_r31->unkD4); - fn_1_A6EC(temp_r31->unk68[0]); - fn_1_A71C(temp_r31->unk68[0], MAKE_MESSID(47, 9)); - fn_1_A6EC(temp_r31->unk68[1]); - fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 18)); - espDispOn(temp_r31->unkA0[18]); - temp_r31->unk104 = 0.0f; - temp_r31->unk108 = 0.0625f; - if (temp_r31->unkF8 > 0) { - arg0->unk10 = 5; - } else { - arg0->unk10 = 4; + DisplayVoice(object, work->page); + fn_1_A6EC(work->window[0]); + fn_1_A71C(work->window[0], MAKE_MESSID(47, 9)); + fn_1_A6EC(work->window[1]); + fn_1_A71C(work->window[1], MAKE_MESSID(47, 18)); + espDispOn(work->sprList[18]); + work->lSelectionPos = 0.0f; + work->lSelectionChangeSpeed = 0.0625f; + if (work->selectionChangeTimer > 0) { + object->unk10 = 5; + } + else { + object->unk10 = 4; } /* fallthrough */ case 4: - temp_f31 = 166.0f + 244.0f * (temp_r31->unkDC / 5); - temp_f30 = 144.0f + 29.0f * (temp_r31->unkDC % 5); - temp_f27 = 166.0f + 244.0f * (temp_r31->unkD8 / 5); - temp_f26 = 144.0f + 29.0f * (temp_r31->unkD8 % 5); - temp_f29 = temp_f31 + temp_r31->unk104 * (temp_f27 - temp_f31); - temp_f28 = temp_f30 + temp_r31->unk104 * (temp_f26 - temp_f30); - espPosSet(temp_r31->unkA0[18], temp_f29, temp_f28); - if ((temp_r31->unk104 += temp_r31->unk108) < 1.0f) { + temp_f31 = 166.0f + 244.0f * (work->prevLSelection / 5); + temp_f30 = 144.0f + 29.0f * (work->prevLSelection % 5); + temp_f27 = 166.0f + 244.0f * (work->lSelection / 5); + temp_f26 = 144.0f + 29.0f * (work->lSelection % 5); + temp_f29 = temp_f31 + work->lSelectionPos * (temp_f27 - temp_f31); + temp_f28 = temp_f30 + work->lSelectionPos * (temp_f26 - temp_f30); + espPosSet(work->sprList[18], temp_f29, temp_f28); + if ((work->lSelectionPos += work->lSelectionChangeSpeed) < 1.0f) { break; } - espPosSet(temp_r31->unkA0[18], 166.0f + 244.0f * (temp_r31->unkD8 / 5), 144.0f + 29.0f * (temp_r31->unkD8 % 5)); - arg0->unk10 = 6; + espPosSet(work->sprList[18], 166.0f + 244.0f * (work->lSelection / 5), 144.0f + 29.0f * (work->lSelection % 5)); + object->unk10 = 6; break; case 5: - if (temp_r31->unkF8 > 0) { - temp_r31->unkF8--; + if (work->selectionChangeTimer > 0) { + work->selectionChangeTimer--; break; } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - arg0->unk10 = 6; + espBankSet(work->sprList[14], 0); + espBankSet(work->sprList[15], 2); + object->unk10 = 6; /* fallthrough */ case 6: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - if (fn_1_550(0x100) != 0) { - fn_1_7F00(arg0); - } else if (fn_1_550(0x200) != 0) { + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + if (fn_1_550(PAD_BUTTON_A)) { + PlaySound(object); + } + else if (fn_1_550(PAD_BUTTON_B)) { HuAudFXPlay(3); - temp_r31->unkC8 = 0; - arg0->unk10 = 7; - } else { - if (fn_1_5B8(1) != 0 && temp_r31->unkD8 >= 5) { - temp_r31->unk100 -= 5; - } else if (fn_1_5B8(2) != 0 && temp_r31->unkD8 < 5) { - temp_r31->unk100 += 5; + work->changeTimer = 0; + object->unk10 = 7; + } + else { + if (fn_1_5B8(1) != 0 && work->lSelection >= 5) { + work->lSelectionChange -= 5; } - if (fn_1_5B8(8) != 0 && temp_r31->unkD8 % 5 > 0) { - temp_r31->unk100--; - } else if (fn_1_5B8(4) != 0 && temp_r31->unkD8 % 5 < 4) { - temp_r31->unk100++; + else if (fn_1_5B8(2) != 0 && work->lSelection < 5) { + work->lSelectionChange += 5; } - if (temp_r31->unk100 != 0) { - arg0->unk10 = 2; - } else if (fn_1_550(0x40) != 0) { - temp_r31->unkFC = -1; - } else if (fn_1_550(0x20) != 0) { - temp_r31->unkFC = 1; + if (fn_1_5B8(8) != 0 && work->lSelection % 5 > 0) { + work->lSelectionChange--; } - if (temp_r31->unkFC != 0) { - arg0->unk10 = 1; + else if (fn_1_5B8(4) != 0 && work->lSelection % 5 < 4) { + work->lSelectionChange++; + } + if (work->lSelectionChange != 0) { + object->unk10 = 2; + } + else if (fn_1_550(PAD_TRIGGER_L)) { + work->pageChange = -1; + } + else if (fn_1_550(PAD_TRIGGER_R)) { + work->pageChange = 1; + } + if (work->pageChange != 0) { + object->unk10 = 1; } } } break; case 7: - fn_1_A704(temp_r31->unk68[1]); - fn_1_A704(temp_r31->unk68[0]); - fn_1_8048(arg0); - fn_1_160(temp_r31->unkA0[14], 0, 5); - fn_1_160(temp_r31->unkA0[15], 0, 5); - arg0->unk10 = 8; + fn_1_A704(work->window[1]); + fn_1_A704(work->window[0]); + FadeOutCurrSound(object); + fn_1_160(work->sprList[14], 0, 5); + fn_1_160(work->sprList[15], 0, 5); + object->unk10 = 8; /* fallthrough */ case 8: - if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { - espDispOff(temp_r31->unkA0[18]); - fn_1_4388(arg0, 2); + if (work->window[0]->state == 0 && work->window[1]->state == 0) { + espDispOff(work->sprList[18]); + fn_1_4388(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_6044(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void TurnOnIndicator(omObjData *object, s32 id) +{ + SoundWork *work = object->data; - switch (arg1) { + switch (id) { case 0: - fn_1_6694(temp_r31->unk00[1]); - fn_1_6694(temp_r31->unk00[5]); - fn_1_6694(temp_r31->unk00[6]); - fn_1_66CC(temp_r31->unk00[4]); - fn_1_66CC(temp_r31->unk00[2]); - fn_1_66CC(temp_r31->unk00[3]); + HideIndicator(work->objects[1]); + HideIndicator(work->objects[5]); + HideIndicator(work->objects[6]); + ShowIndicator(work->objects[4]); + ShowIndicator(work->objects[2]); + ShowIndicator(work->objects[3]); break; case 1: - fn_1_6694(temp_r31->unk00[4]); - fn_1_6694(temp_r31->unk00[2]); - fn_1_6694(temp_r31->unk00[6]); - fn_1_66CC(temp_r31->unk00[1]); - fn_1_66CC(temp_r31->unk00[5]); - fn_1_66CC(temp_r31->unk00[3]); + HideIndicator(work->objects[4]); + HideIndicator(work->objects[2]); + HideIndicator(work->objects[6]); + ShowIndicator(work->objects[1]); + ShowIndicator(work->objects[5]); + ShowIndicator(work->objects[3]); break; case 2: - fn_1_6694(temp_r31->unk00[4]); - fn_1_6694(temp_r31->unk00[5]); - fn_1_6694(temp_r31->unk00[3]); - fn_1_66CC(temp_r31->unk00[1]); - fn_1_66CC(temp_r31->unk00[2]); - fn_1_66CC(temp_r31->unk00[6]); + HideIndicator(work->objects[4]); + HideIndicator(work->objects[5]); + HideIndicator(work->objects[3]); + ShowIndicator(work->objects[1]); + ShowIndicator(work->objects[2]); + ShowIndicator(work->objects[6]); break; } } -static void fn_1_613C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void TurnOffIndicators(omObjData *object) +{ + SoundWork *work = object->data; - fn_1_6694(temp_r31->unk00[4]); - fn_1_6694(temp_r31->unk00[5]); - fn_1_6694(temp_r31->unk00[6]); - fn_1_66CC(temp_r31->unk00[1]); - fn_1_66CC(temp_r31->unk00[2]); - fn_1_66CC(temp_r31->unk00[3]); + HideIndicator(work->objects[4]); + HideIndicator(work->objects[5]); + HideIndicator(work->objects[6]); + ShowIndicator(work->objects[1]); + ShowIndicator(work->objects[2]); + ShowIndicator(work->objects[3]); } -static omObjData *fn_1_61A0(void) { - omObjData *temp_r31; +static omObjData *CreateOptionHand(void) +{ + omObjData *optionHand; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 13)); - Hu3DModelLayerSet(temp_r31->model[0], 2); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - omSetRot(temp_r31, -80.0f, 45.0f, 0.0f); - omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); - Hu3DModelAttrSet(temp_r31->model[0], 1); - return temp_r31; + optionHand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + optionHand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 13)); + Hu3DModelLayerSet(optionHand->model[0], 2); + Hu3DModelAttrSet(optionHand->model[0], 0x40000001); + omSetRot(optionHand, -80.0f, 45.0f, 0.0f); + omSetSca(optionHand, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(optionHand->model[0], 1); + return optionHand; } -static void fn_1_629C(omObjData *arg0) { +static void KillOptionHand(omObjData *optionHand) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(optionHand->model[i]); } } -static omObjData *fn_1_62F0(void) { - omObjData *temp_r31; +static omObjData *CreateSoundSettingsHand(void) +{ + omObjData *soundSettingsHand; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); - Hu3DModelLayerSet(temp_r31->model[0], 2); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - omSetRot(temp_r31, 0.0f, -90.0f, 0.0f); - omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); - Hu3DModelAttrSet(temp_r31->model[0], 1); - return temp_r31; + soundSettingsHand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + soundSettingsHand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); + Hu3DModelLayerSet(soundSettingsHand->model[0], 2); + Hu3DModelAttrSet(soundSettingsHand->model[0], 0x40000001); + omSetRot(soundSettingsHand, 0.0f, -90.0f, 0.0f); + omSetSca(soundSettingsHand, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(soundSettingsHand->model[0], 1); + return soundSettingsHand; } -static void fn_1_63EC(omObjData *arg0) { +static void KillSoundSettingsHand(omObjData *settingsHand) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(settingsHand->model[i]); } } -static omObjData *fn_1_6440(void) { - omObjData *temp_r31; +static omObjData *CreateSystem(void) +{ + omObjData *system; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 3)); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - Hu3DModelLayerSet(temp_r31->model[0], 0); - return temp_r31; + system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 3)); + Hu3DModelAttrSet(system->model[0], 0x40000001); + Hu3DModelLayerSet(system->model[0], 0); + return system; } -static void fn_1_64D4(omObjData *arg0) { +static void KillSystem(omObjData *system) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(system->model[i]); } } -static const Vec lbl_1_rodata_12D0[3] = { - { -40.0f, 0.0f, 0.0f }, - { 0.0f, 0.0f, 0.0f }, - { 40.0f, 0.0f, 0.0f } -}; +static const Vec indicatorPosTbl[3] = { { -40.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 40.0f, 0.0f, 0.0f } }; -static omObjData *fn_1_6528(s32 arg0, s32 arg1) { - omObjData *temp_r31; +static omObjData *CreateIndicator(s32 id, BOOL off) +{ + omObjData *indicator; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - if (arg1 != 0) { - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 5)); - } else { - temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 4)); + indicator = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + if (off) { + indicator->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 5)); } - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - Hu3DModelLayerSet(temp_r31->model[0], 0); - omSetTra(temp_r31, lbl_1_rodata_12D0[arg0].x, lbl_1_rodata_12D0[arg0].y, lbl_1_rodata_12D0[arg0].z); - return temp_r31; + else { + indicator->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 4)); + } + Hu3DModelAttrSet(indicator->model[0], 0x40000001); + Hu3DModelLayerSet(indicator->model[0], 0); + omSetTra(indicator, indicatorPosTbl[id].x, indicatorPosTbl[id].y, indicatorPosTbl[id].z); + return indicator; } -static void fn_1_6640(omObjData *arg0) { +static void KillIndicator(omObjData *indicator) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(indicator->model[i]); } } -static void fn_1_6694(omObjData *arg0) { - Hu3DModelAttrReset(arg0->model[0], 1); +static void HideIndicator(omObjData *indicator) +{ + Hu3DModelAttrReset(indicator->model[0], 1); } -static void fn_1_66CC(omObjData *arg0) { - Hu3DModelAttrSet(arg0->model[0], 1); +static void ShowIndicator(omObjData *indicator) +{ + Hu3DModelAttrSet(indicator->model[0], 1); } -static s32 lbl_1_data_1BC[] = { +static s32 sprTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 38), DATA_MAKE_NUM(DATADIR_OPTION, 39), DATA_MAKE_NUM(DATADIR_OPTION, 40), @@ -1268,387 +1322,405 @@ static s32 lbl_1_data_1BC[] = { DATA_MAKE_NUM(DATADIR_OPTION, 49), DATA_MAKE_NUM(DATADIR_OPTION, 63), DATA_MAKE_NUM(DATADIR_OPTION, 64), - DATA_MAKE_NUM(DATADIR_OPTION, 65) + DATA_MAKE_NUM(DATADIR_OPTION, 65), }; -static void fn_1_6704(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void CreateSpr(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 19; i++) { - temp_r31->unkA0[i] = espEntry(lbl_1_data_1BC[i], 0, 0); - espDrawNoSet(temp_r31->unkA0[i], 0x40); - espDispOff(temp_r31->unkA0[i]); + work->sprList[i] = espEntry(sprTbl[i], 0, 0); + espDrawNoSet(work->sprList[i], 0x40); + espDispOff(work->sprList[i]); } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); + espBankSet(work->sprList[14], 0); + espBankSet(work->sprList[15], 2); HuSprExecLayerSet(0x40, 1); } -static void fn_1_67C8(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void KillSpr(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 19; i++) { - espKill(temp_r31->unkA0[i]); + espKill(work->sprList[i]); } } -static void fn_1_6828(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void DisplayOptionSel(omObjData *object) +{ + SoundWork *work = object->data; float temp_f31 = 288.0f; float temp_f30 = 188.0f; - espPosSet(temp_r31->unkA0[12], 288.0f, 72.0f); - espPosSet(temp_r31->unkA0[0], temp_f31 + -112.0f, temp_f30); - espPosSet(temp_r31->unkA0[3], temp_f31 + -112.0f, temp_f30); - espPosSet(temp_r31->unkA0[1], temp_f31, temp_f30); - espPosSet(temp_r31->unkA0[4], temp_f31, temp_f30); - espPosSet(temp_r31->unkA0[2], temp_f31 + 112.0f, temp_f30); - espPosSet(temp_r31->unkA0[5], temp_f31 + 112.0f, temp_f30); - espDispOn(temp_r31->unkA0[12]); - switch (temp_r31->unkD8) { + espPosSet(work->sprList[12], 288.0f, 72.0f); + espPosSet(work->sprList[0], temp_f31 + -112.0f, temp_f30); + espPosSet(work->sprList[3], temp_f31 + -112.0f, temp_f30); + espPosSet(work->sprList[1], temp_f31, temp_f30); + espPosSet(work->sprList[4], temp_f31, temp_f30); + espPosSet(work->sprList[2], temp_f31 + 112.0f, temp_f30); + espPosSet(work->sprList[5], temp_f31 + 112.0f, temp_f30); + espDispOn(work->sprList[12]); + switch (work->lSelection) { case 0: - espDispOn(temp_r31->unkA0[3]); - espDispOn(temp_r31->unkA0[1]); - espDispOn(temp_r31->unkA0[2]); - espDispOff(temp_r31->unkA0[0]); - espDispOff(temp_r31->unkA0[4]); - espDispOff(temp_r31->unkA0[5]); + espDispOn(work->sprList[3]); + espDispOn(work->sprList[1]); + espDispOn(work->sprList[2]); + espDispOff(work->sprList[0]); + espDispOff(work->sprList[4]); + espDispOff(work->sprList[5]); break; case 1: - espDispOn(temp_r31->unkA0[0]); - espDispOn(temp_r31->unkA0[4]); - espDispOn(temp_r31->unkA0[2]); - espDispOff(temp_r31->unkA0[3]); - espDispOff(temp_r31->unkA0[1]); - espDispOff(temp_r31->unkA0[5]); + espDispOn(work->sprList[0]); + espDispOn(work->sprList[4]); + espDispOn(work->sprList[2]); + espDispOff(work->sprList[3]); + espDispOff(work->sprList[1]); + espDispOff(work->sprList[5]); break; case 2: - espDispOn(temp_r31->unkA0[0]); - espDispOn(temp_r31->unkA0[1]); - espDispOn(temp_r31->unkA0[5]); - espDispOff(temp_r31->unkA0[3]); - espDispOff(temp_r31->unkA0[4]); - espDispOff(temp_r31->unkA0[2]); + espDispOn(work->sprList[0]); + espDispOn(work->sprList[1]); + espDispOn(work->sprList[5]); + espDispOff(work->sprList[3]); + espDispOff(work->sprList[4]); + espDispOff(work->sprList[2]); break; } } -static const s32 lbl_1_rodata_1308[] = { 12, 0, 1, 2, 3, 4, 5 }; +static const s32 optionSelSprIdxTbl[] = { 12, 0, 1, 2, 3, 4, 5 }; -static void fn_1_6A0C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void HideOptionSel(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 7; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_1308[i]]); + espDispOff(work->sprList[optionSelSprIdxTbl[i]]); } } -static void fn_1_6A80(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void DisplaySoundSettings(omObjData *object) +{ + SoundWork *work = object->data; float temp_f31 = 290.0f; float temp_f30 = 192.0f; - espPosSet(temp_r31->unkA0[13], 288.0f, 72.0f); - espPosSet(temp_r31->unkA0[6], temp_f31, temp_f30 - 32.0f); - espPosSet(temp_r31->unkA0[7], temp_f31, temp_f30 - 32.0f); - espPosSet(temp_r31->unkA0[8], temp_f31, temp_f30 + 32.0f); - espPosSet(temp_r31->unkA0[9], temp_f31, temp_f30 + 32.0f); - switch (temp_r31->unkD8) { + espPosSet(work->sprList[13], 288.0f, 72.0f); + espPosSet(work->sprList[6], temp_f31, temp_f30 - 32.0f); + espPosSet(work->sprList[7], temp_f31, temp_f30 - 32.0f); + espPosSet(work->sprList[8], temp_f31, temp_f30 + 32.0f); + espPosSet(work->sprList[9], temp_f31, temp_f30 + 32.0f); + switch (work->lSelection) { case 0: - espPosSet(temp_r31->unkA0[17], temp_f31, temp_f30 - 32.0f); + espPosSet(work->sprList[17], temp_f31, temp_f30 - 32.0f); break; case 1: - espPosSet(temp_r31->unkA0[17], temp_f31, temp_f30 + 32.0f); + espPosSet(work->sprList[17], temp_f31, temp_f30 + 32.0f); break; } - espDispOn(temp_r31->unkA0[13]); - switch (temp_r31->unkD8) { + espDispOn(work->sprList[13]); + switch (work->lSelection) { case 0: - espDispOn(temp_r31->unkA0[6]); - espDispOn(temp_r31->unkA0[9]); - espDispOff(temp_r31->unkA0[7]); - espDispOff(temp_r31->unkA0[8]); + espDispOn(work->sprList[6]); + espDispOn(work->sprList[9]); + espDispOff(work->sprList[7]); + espDispOff(work->sprList[8]); break; case 1: - espDispOn(temp_r31->unkA0[7]); - espDispOn(temp_r31->unkA0[8]); - espDispOff(temp_r31->unkA0[6]); - espDispOff(temp_r31->unkA0[9]); + espDispOn(work->sprList[7]); + espDispOn(work->sprList[8]); + espDispOff(work->sprList[6]); + espDispOff(work->sprList[9]); break; } - if (temp_r31->unkE4 != 0) { - espDispOn(temp_r31->unkA0[17]); - } else { - espDispOff(temp_r31->unkA0[17]); + if (work->optionSelected) { + espDispOn(work->sprList[17]); + } + else { + espDispOff(work->sprList[17]); } } -static const s32 lbl_1_rodata_1330[] = { 13, 6, 7, 8, 9 }; +static const s32 soundSettingsSprTbl[] = { 13, 6, 7, 8, 9 }; -static void fn_1_6C5C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void HideSoundSettings(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 5; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_1330[i]]); + espDispOff(work->sprList[soundSettingsSprTbl[i]]); } } -static void fn_1_6CD0(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void DisplayMusicTitle(omObjData *object, s32 page) +{ + SoundWork *work = object->data; s32 i; - espPosSet(temp_r31->unkA0[10], 288.0f, 72.0f); - espDispOn(temp_r31->unkA0[10]); - fn_1_A7F0(temp_r31->unk68[2]); + espPosSet(work->sprList[10], 288.0f, 72.0f); + espDispOn(work->sprList[10]); + fn_1_A7F0(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A7F0(temp_r31->unk68[i + 3]); - fn_1_A7B0(temp_r31->unk68[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); + fn_1_A7F0(work->window[i + 3]); + fn_1_A7B0(work->window[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); } - fn_1_A71C(temp_r31->unk68[2], lbl_1_rodata_1A8[arg1]); + fn_1_A71C(work->window[2], musicPageNameTbl[page]); for (i = 0; i < 10; i++) { - fn_1_A71C(temp_r31->unk68[i + 3], lbl_1_rodata_1E0[arg1][i].unk04); + fn_1_A71C(work->window[i + 3], musicTbl[page][i].nameMess); } } -static const s32 lbl_1_rodata_134C[] = { 10 }; +static const s32 musicTitleSprIdxTbl[] = { 10 }; -static void fn_1_6EA4(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void HideMusicTitle(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_134C[i]]); + espDispOff(work->sprList[musicTitleSprIdxTbl[i]]); } - fn_1_A828(temp_r30->unk68[2]); + fn_1_A828(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(temp_r30->unk68[i + 3]); + fn_1_A828(work->window[i + 3]); } } -static void fn_1_6F48(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void DisplayVoice(omObjData *object, s32 character) +{ + SoundWork *work = object->data; s32 i; - espPosSet(temp_r31->unkA0[11], 288.0f, 72.0f); - espDispOn(temp_r31->unkA0[11]); - fn_1_A7F0(temp_r31->unk68[2]); + espPosSet(work->sprList[11], 288.0f, 72.0f); + espDispOn(work->sprList[11]); + fn_1_A7F0(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A7F0(temp_r31->unk68[i + 3]); - fn_1_A7B0(temp_r31->unk68[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); + fn_1_A7F0(work->window[i + 3]); + fn_1_A7B0(work->window[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); } - fn_1_A71C(temp_r31->unk68[2], lbl_1_rodata_AA0[arg1]); + fn_1_A71C(work->window[2], voiceCharNameTbl[character]); for (i = 0; i < 10; i++) { - fn_1_A71C(temp_r31->unk68[i + 3], lbl_1_rodata_AD0[arg1][i].unk04); + fn_1_A71C(work->window[i + 3], voiceTbl[character][i].nameMess); } } -static const s32 lbl_1_rodata_1350[] = { 11, 0 }; +static const s32 voiceTitleSprIdxTbl[] = { 11, 0 }; -static void fn_1_711C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void HideVoiceTitle(omObjData *object) +{ + SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_1350[i]]); + espDispOff(work->sprList[voiceTitleSprIdxTbl[i]]); } - fn_1_A828(temp_r30->unk68[2]); + fn_1_A828(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(temp_r30->unk68[i + 3]); + fn_1_A828(work->window[i + 3]); } } -static s32 lbl_1_data_208[] = { - DATA_MAKE_NUM(DATADIR_OPTION, 7), - DATA_MAKE_NUM(DATADIR_OPTION, 8) -}; +static s32 noteSprTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 7), DATA_MAKE_NUM(DATADIR_OPTION, 8) }; -static omObjData *fn_1_71C0(s32 arg0) { - omObjData *temp_r31; - UnkSoundDataStruct01 *temp_r3; +static omObjData *CreateNote(s32 noteType) +{ + omObjData *note; + NoteWork *noteWork; - temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSoundDataStruct01), MEMORY_DEFAULT_NUM); - temp_r31->data = temp_r3; - temp_r3->unk00 = 0; - temp_r3->unk04 = arg0; - temp_r31->model[0] = Hu3DModelCreateFile(lbl_1_data_208[arg0]); - Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); - Hu3DModelLayerSet(temp_r31->model[0], 2); - Hu3DModelAttrReset(temp_r31->model[0], 2); - return temp_r31; + note = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + noteWork = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(NoteWork), MEMORY_DEFAULT_NUM); + note->data = noteWork; + noteWork->enabled = FALSE; + noteWork->noteType = noteType; + note->model[0] = Hu3DModelCreateFile(noteSprTbl[noteType]); + Hu3DModelAttrSet(note->model[0], 0x40000001); + Hu3DModelLayerSet(note->model[0], 2); + Hu3DModelAttrReset(note->model[0], 2); + return note; } -static void fn_1_72A8(omObjData *arg0) { - UnkSoundDataStruct01 *temp_r30 = arg0->data; +static void KillNote(omObjData *note) +{ + NoteWork *noteWork = note->data; s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(note->model[i]); } - HuMemDirectFree(temp_r30); + HuMemDirectFree(noteWork); } -static void fn_1_7310(omObjData *arg0) { - UnkSoundDataStruct01 *temp_r31 = arg0->data; +static void HandleNote(omObjData *note) +{ + NoteWork *noteWork = note->data; float temp_f31; - float temp_f30; + float scale; float var_f29; - float var_f28; + float rot; float temp_f27; - float temp_f26; - float temp_f25; - float temp_f24; + float x; + float z; + float y; float temp_f23; - Hu3DModelAttrReset(arg0->model[0], 1); - temp_f31 = sin(45.0f * temp_r31->unk0C * M_PI / 180.0); + Hu3DModelAttrReset(note->model[0], 1); + temp_f31 = sind(45.0f * noteWork->pos); temp_f31 = temp_f31 * temp_f31; - switch (temp_r31->unk08) { - case 0: + switch (noteWork->speakerId) { + case SPEAKER_LEFT: var_f29 = 174.5f + 7.0f * temp_f31; - var_f28 = -15.0 + 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + rot = -15.0 + 30.0 * sind(1440.0f * temp_f31); break; - case 1: + case SPEAKER_RIGHT: var_f29 = 185.5f - (7.0f * temp_f31); - var_f28 = 15.0 - 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + rot = 15.0 - 30.0 * sind(1440.0f * temp_f31); break; } - temp_f23 = sin(180.0f * temp_r31->unk0C * M_PI / 180.0); + temp_f23 = sind(180.0f * noteWork->pos); temp_f27 = 500.0f - 25.0f * temp_f31; - temp_f26 = temp_f27 * -sin(var_f29 * M_PI / 180.0); - temp_f25 = temp_f27 * cos(var_f29 * M_PI / 180.0); - temp_f24 = 160.0f - 15.0f * temp_r31->unk0C; - temp_f30 = 0.5 + 2.0 * sin(90.0f * temp_f31 * M_PI / 180.0); - omSetTra(arg0, temp_f26, temp_f24, temp_f25); - Hu3DModelTPLvlSet(arg0->model[0], temp_f23); - omSetSca(arg0, temp_f30, temp_f30, temp_f30); - omSetRot(arg0, 0.0f, 0.0f, var_f28); - if ((temp_r31->unk0C += temp_r31->unk10) < 1.0f) { + x = temp_f27 * -sind(var_f29); + z = temp_f27 * cosd(var_f29); + y = 160.0f - 15.0f * noteWork->pos; + scale = 0.5 + 2.0 * sind(90.0f * temp_f31); + omSetTra(note, x, y, z); + Hu3DModelTPLvlSet(note->model[0], temp_f23); + omSetSca(note, scale, scale, scale); + omSetRot(note, 0.0f, 0.0f, rot); + if ((noteWork->pos += noteWork->speed) < 1.0f) { return; } - temp_r31->unk00 = 0; - Hu3DModelAttrSet(arg0->model[0], 1); - arg0->func = NULL; - arg0->unk10 = 0; + noteWork->enabled = FALSE; + Hu3DModelAttrSet(note->model[0], 1); + note->func = NULL; + note->unk10 = 0; } -static void fn_1_7710(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3) { - omObjData *var_r30; - UnkSoundDataStruct01 *var_r31; +static void SpawnNote(omObjData *object, s32 noteType, s32 speakerId, s32 color) +{ + omObjData *note; + NoteWork *var_r31; s32 i; - for (i = 0; i < 16; i++) { - var_r30 = ((UnkSoundDataStruct00*) arg0->data)->unk00[i + 10]; - var_r31 = var_r30->data; - if (var_r31->unk00 == 0 && var_r31->unk04 == arg1) { + for (i = 0; i < NUM_NOTES; i++) { + note = ((SoundWork *)object->data)->objects[i + 10]; + var_r31 = note->data; + if (!var_r31->enabled && var_r31->noteType == noteType) { break; } } - if (i != 16) { - Hu3DMotionTimeSet(var_r30->model[0], 2.0f * arg3); - Hu3DMotionStartEndSet(var_r30->model[0], 2.0f * arg3, 2.0f * arg3 + 1.0f); - var_r31->unk00 = 1; - var_r31->unk08 = arg2; - var_r31->unk0C = 0.0f; - var_r31->unk10 = 0.011111111f; - var_r30->func = fn_1_7310; - var_r30->unk10 = 0; + if (i != NUM_NOTES) { + Hu3DMotionTimeSet(note->model[0], 2.0f * color); + Hu3DMotionStartEndSet(note->model[0], 2.0f * color, 2.0f * color + 1.0f); + var_r31->enabled = TRUE; + var_r31->speakerId = speakerId; + var_r31->pos = 0.0f; + var_r31->speed = 0.011111111f; + note->func = HandleNote; + note->unk10 = 0; } } -static void fn_1_78A0(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void CreateNoteProcess(omObjData *object) +{ + SoundWork *work = object->data; - temp_r31->unk10C = HuPrcChildCreate(fn_1_793C, 0x64, 0x2000, 0, HuPrcCurrentGet()); - temp_r31->unk10C->user_data = arg0; + work->speakerNoteProcess = HuPrcChildCreate(HandleNoteProcess, 0x64, 0x2000, 0, HuPrcCurrentGet()); + work->speakerNoteProcess->user_data = object; } -static void fn_1_7900(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void KillNoteProcess(omObjData *object) +{ + SoundWork *work = object->data; - HuPrcKill(temp_r31->unk10C); + HuPrcKill(work->speakerNoteProcess); } -static void fn_1_793C(void) { - omObjData *temp_r26; - UnkSoundDataStruct00 *sp8; - s32 var_r21; - s32 temp_r31; +static void HandleNoteProcess(void) +{ + omObjData *object; + SoundWork *work; + s32 noteType; + s32 color; - temp_r26 = HuPrcCurrentGet()->user_data; - sp8 = temp_r26->data; - while (1) { - switch (sp8->unkD8) { + object = HuPrcCurrentGet()->user_data; + work = object->data; + while (TRUE) { + switch (work->lSelection) { case 0: - var_r21 = 1; - temp_r31 = frandmod(7); - fn_1_7710(temp_r26, var_r21, 0, temp_r31); - var_r21 = 0; - temp_r31 = frandmod(7); - fn_1_7710(temp_r26, var_r21, 1, temp_r31); + noteType = NOTE_TYPE_QUARTER; + color = frandmod(7); + SpawnNote(object, noteType, SPEAKER_LEFT, color); + noteType = NOTE_TYPE_QUAVER; + color = frandmod(7); + SpawnNote(object, noteType, SPEAKER_RIGHT, color); break; case 1: - var_r21 = 0; - temp_r31 = frandmod(7); - fn_1_7710(temp_r26, var_r21, 0, temp_r31); - fn_1_7710(temp_r26, var_r21, 1, temp_r31); + noteType = NOTE_TYPE_QUAVER; + color = frandmod(7); + SpawnNote(object, noteType, SPEAKER_LEFT, color); + SpawnNote(object, noteType, SPEAKER_RIGHT, color); break; } - HuPrcSleep(0x18); + HuPrcSleep(24); } } -static void fn_1_7F00(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; - lbl_1_rodata_1E0_Data *var_r31; +static void PlaySound(omObjData *object) +{ + SoundWork *work = object->data; + SndSelData *sndSelData; - if (temp_r30->unkCC == 1) { - var_r31 = (lbl_1_rodata_1E0_Data*) &lbl_1_rodata_1E0[temp_r30->unkD4][temp_r30->unkD8]; - } else { - var_r31 = (lbl_1_rodata_1E0_Data*) &lbl_1_rodata_AD0[temp_r30->unkD4][temp_r30->unkD8]; + if (work->selectedOption == 1) { + sndSelData = (SndSelData *)&musicTbl[work->page][work->lSelection]; } - if (var_r31->unk00 != 0) { - fn_1_8048(arg0); - switch (var_r31->unk08) { + else { + sndSelData = (SndSelData *)&voiceTbl[work->page][work->lSelection]; + } + if (sndSelData->enabled) { + FadeOutCurrSound(object); + switch (sndSelData->audType) { case 1: - temp_r30->unkF4 = HuAudSStreamPlay(var_r31->unk0C); + work->audSStreamStat = HuAudSStreamPlay(sndSelData->fxId); break; case 28: - if (var_r31->unk0A != temp_r30->unkE0) { - HuAudSndGrpSetSet(var_r31->unk0A); + if (sndSelData->sndGrpSet != work->sndGrpSet) { + HuAudSndGrpSetSet(sndSelData->sndGrpSet); } - temp_r30->unkF6 = HuAudFXPlay(var_r31->unk0C); + work->audFxStat = HuAudFXPlay(sndSelData->fxId); break; default: - if (var_r31->unk0A != temp_r30->unkE0 && var_r31->unk0A != 2) { - HuAudSndGrpSetSet(var_r31->unk0A); + if (sndSelData->sndGrpSet != work->sndGrpSet && sndSelData->sndGrpSet != 2) { + HuAudSndGrpSetSet(sndSelData->sndGrpSet); } - temp_r30->unkF2 = HuAudSeqPlay(var_r31->unk0C); + work->audSeqStat = HuAudSeqPlay(sndSelData->fxId); break; } - temp_r30->unkE0 = var_r31->unk0A; + work->sndGrpSet = sndSelData->sndGrpSet; HuPrcSleep(40); } } -static void fn_1_8048(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void FadeOutCurrSound(omObjData *object) +{ + SoundWork *work = object->data; - if (temp_r31->unkF2 != -1) { - HuAudSeqFadeOut(temp_r31->unkF2, 0x64); - temp_r31->unkF2 = -1; + if (work->audSeqStat != -1) { + HuAudSeqFadeOut(work->audSeqStat, 0x64); + work->audSeqStat = -1; } - if (temp_r31->unkF4 != -1) { - HuAudSStreamFadeOut(temp_r31->unkF4, 0x64); - temp_r31->unkF4 = -1; + if (work->audSStreamStat != -1) { + HuAudSStreamFadeOut(work->audSStreamStat, 0x64); + work->audSStreamStat = -1; } - if (temp_r31->unkF6 != -1) { - HuAudFXFadeOut(temp_r31->unkF6, 0x64); - temp_r31->unkF6 = -1; + if (work->audFxStat != -1) { + HuAudFXFadeOut(work->audFxStat, 0x64); + work->audFxStat = -1; } HuPrcSleep(20); } diff --git a/src/REL/option/state.c b/src/REL/option/state.c index 2b952b61..86b6ed63 100755 --- a/src/REL/option/state.c +++ b/src/REL/option/state.c @@ -7,118 +7,121 @@ #include "dolphin.h" typedef struct { - /* 0x00 */ UnkWindowDataStruct *unk00; - /* 0x04 */ s32 unk04; - /* 0x08 */ s16 unk08; - /* 0x0A */ char unk0A[2]; -} UnkStateDataStruct; // Size 0xC + /* 0x00 */ WindowWork *window; + /* 0x04 */ s32 quitTimer; + /* 0x08 */ s16 light; +} StateWork; // Size 0xC typedef struct { - Vec unk00; - Vec unk0C; - GXColor unk18; -} UnkLightDataStruct; // Size 0x1C + Vec src; + Vec dest; + GXColor color; +} UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 -static void fn_1_2FB0(omObjData *arg0); +static void HandleState(omObjData *object); omObjData *lbl_1_bss_28; -static UnkLightDataStruct lbl_1_data_A0 = { - { 0.0f, 300.0f, 0.0f }, +static UnkLightDataStruct lightTbl = { + { 0.0f, 300.0f, 0.0f }, { 0.0f, -300.0f, -600.0f }, - { 0xFF, 0xFF, 0xFF, 0xFF } + { 0xFF, 0xFF, 0xFF, 0xFF }, }; -static Vec lbl_1_data_BC[3] = { +static Vec shadowPosTbl[3] = { { 0.0f, 3000.0f, 1.0f }, - { 0.0f, 1.0f, 0.0f }, - { 0.0f, 0.0f, 0.0f } + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, }; -omObjData *fn_1_2E04(void) { - omObjData *var_r30; - UnkStateDataStruct *temp_r3; - LightData *sp8; +omObjData *fn_1_2E04(void) +{ + omObjData *object; + StateWork *work; + LightData *lightData; - var_r30 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, fn_1_2FB0); - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkStateDataStruct), MEMORY_DEFAULT_NUM); - var_r30->data = temp_r3; + object = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, HandleState); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); + object->data = work; lbl_1_bss_10 = fn_1_7F8(); lbl_1_bss_18 = fn_1_15A4(); - temp_r3->unk00 = fn_1_A44C(0); + work->window = fn_1_A44C(0); Hu3DLighInit(); - temp_r3->unk08 = Hu3DGLightCreateV(&lbl_1_data_A0.unk00, &lbl_1_data_A0.unk0C, &lbl_1_data_A0.unk18); - Hu3DGLightInfinitytSet(temp_r3->unk08); - sp8 = &Hu3DGlobalLight[temp_r3->unk08]; + work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color); + Hu3DGLightInfinitytSet(work->light); + lightData = &Hu3DGlobalLight[work->light]; Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowTPLvlSet(0.45f); - Hu3DShadowPosSet(&lbl_1_data_BC[0], &lbl_1_data_BC[1], &lbl_1_data_BC[2]); - return var_r30; + Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]); + return object; } -void fn_1_2F4C(omObjData *arg0) { - UnkStateDataStruct *temp_r31 = arg0->data; +void fn_1_2F4C(omObjData *object) +{ + StateWork *work = object->data; fn_1_A3C(lbl_1_bss_10); fn_1_1798(lbl_1_bss_18); - fn_1_A6AC(temp_r31->unk00); - HuMemDirectFree(temp_r31); + fn_1_A6AC(work->window); + HuMemDirectFree(work); } -static void fn_1_2FB0(omObjData *arg0) { - UnkStateDataStruct *temp_r31 = arg0->data; +static void HandleState(omObjData *object) +{ + StateWork *work = object->data; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - arg0->unk10 = 1; + object->unk10 = 1; /* fallthrough */ case 1: WipeCreate(WIPE_MODE_IN, -1, 60); - arg0->unk10 = 2; + object->unk10 = 2; break; case 2: - if (WipeStatGet() != 0 || temp_r31->unk00->unk20 != 0) { + if (WipeStatGet() != 0 || work->window->state != 0) { break; } fn_1_1A2C(lbl_1_bss_18, 1); - arg0->unk10 = 3; + object->unk10 = 3; /* fallthrough */ case 3: if (fn_1_1A70(lbl_1_bss_18) != 0) { break; } - arg0->unk10 = 4; + object->unk10 = 4; /* fallthrough */ case 4: - fn_1_A6EC(temp_r31->unk00); - fn_1_A71C(temp_r31->unk00, MAKE_MESSID(47, 167)); - arg0->unk10 = 5; + fn_1_A6EC(work->window); + fn_1_A71C(work->window, MAKE_MESSID(47, 167)); // Would you like to leave? + object->unk10 = 5; /* fallthrough */ case 5: - if (temp_r31->unk00->unk20 != 0) { + if (work->window->state != 0) { break; } - fn_1_A880(temp_r31->unk00, 1); - arg0->unk10 = 6; + fn_1_A880(work->window, 1); + object->unk10 = 6; /* fallthrough */ case 6: - if (temp_r31->unk00->unk20 != 0) { + if (work->window->state != 0) { break; } - fn_1_A704(temp_r31->unk00); - if (temp_r31->unk00->unk1C == 0) { - temp_r31->unk04 = 0; - arg0->unk10 = 7; - } else { - arg0->unk10 = 2; + fn_1_A704(work->window); + if (work->window->choice == 0) { + work->quitTimer = 0; + object->unk10 = 7; + } + else { + object->unk10 = 2; } break; case 7: - arg0->unk10 = 8; - temp_r31->unk04 = 0; + object->unk10 = 8; + work->quitTimer = 0; /* fallthrough */ case 8: - if (temp_r31->unk00->unk20 == 0 && temp_r31->unk04++ >= 60) { + if (work->window->state == 0 && work->quitTimer++ >= 60) { omSysExitReq = 1; } break; diff --git a/src/REL/option/window.c b/src/REL/option/window.c index ec1311f0..e401f0fd 100755 --- a/src/REL/option/window.c +++ b/src/REL/option/window.c @@ -1,147 +1,161 @@ +#include "game/window.h" #include "REL/option.h" #include "game/esprite.h" #include "game/memory.h" #include "game/process.h" #include "game/sprite.h" -#include "game/window.h" -static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2); -static void fn_1_A860(UnkWindowDataStruct *arg0); -static void fn_1_A8A4(void); +static void HandleWindow(void); -UnkWindowDataStruct *fn_1_A44C(s32 arg0) { - UnkWindowDataStruct *temp_r31; +WindowWork *fn_1_A44C(s32 id) +{ + WindowWork *work; - temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); - temp_r31->unk18 = 0; - temp_r31->unk10 = 0; - temp_r31->unk14 = 0; - temp_r31->unk20 = 0; - temp_r31->unk00 = HuPrcChildCreate(fn_1_A8A4, 0x2000, 0x2000, 0, lbl_1_bss_8); - temp_r31->unk00->user_data = temp_r31; - temp_r31->unk08 = arg0; - switch (temp_r31->unk08) { + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WindowWork), MEMORY_DEFAULT_NUM); + work->messToBeSet = 0; + work->messWaitSignal = 0; + work->choiceSignal = 0; + work->state = 0; + work->process = HuPrcChildCreate(HandleWindow, 0x2000, 0x2000, 0, lbl_1_bss_8); + work->process->user_data = work; + work->id = id; + switch (work->id) { case 0: - temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); - HuWinBGTPLvlSet(temp_r31->unk04, 0.8f); - HuWinMesSpeedSet(temp_r31->unk04, 0); - HuWinMesPalSet(temp_r31->unk04, 7, 0, 0, 0); + work->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); + HuWinBGTPLvlSet(work->window, 0.8f); + HuWinMesSpeedSet(work->window, 0); + HuWinMesPalSet(work->window, 7, 0, 0, 0); break; case 1: - temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0); - HuWinAttrSet(temp_r31->unk04, 0x800); - HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); - HuWinMesSpeedSet(temp_r31->unk04, 0); + work->window = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0); + HuWinAttrSet(work->window, 0x800); + HuWinBGTPLvlSet(work->window, 0.0f); + HuWinMesSpeedSet(work->window, 0); break; case 2: - temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0); - HuWinAttrSet(temp_r31->unk04, 0x800); - HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); - HuWinMesSpeedSet(temp_r31->unk04, 0); + work->window = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0); + HuWinAttrSet(work->window, 0x800); + HuWinBGTPLvlSet(work->window, 0.0f); + HuWinMesSpeedSet(work->window, 0); break; case 3: - temp_r31->unk04 = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0); - HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); - HuWinMesSpeedSet(temp_r31->unk04, 0); + work->window = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0); + HuWinBGTPLvlSet(work->window, 0.0f); + HuWinMesSpeedSet(work->window, 0); break; } - HuWinDrawNoSet(temp_r31->unk04, 0x3F); - fn_1_A828(temp_r31); + HuWinDrawNoSet(work->window, 0x3F); + fn_1_A828(work); HuSprExecLayerSet(0x3F, 2); - return temp_r31; + return work; } -void fn_1_A6AC(UnkWindowDataStruct *arg0) { - HuWinExCleanup(arg0->unk04); - HuPrcKill(arg0->unk00); - HuMemDirectFree(arg0); +void fn_1_A6AC(WindowWork *work) +{ + HuWinExCleanup(work->window); + HuPrcKill(work->process); + HuMemDirectFree(work); } -void fn_1_A6EC(UnkWindowDataStruct *arg0) { - if (arg0->unk0C == 0) { - arg0->unk20 = 1; +void fn_1_A6EC(WindowWork *work) +{ + if (!work->visible) { + work->state = 1; } } -void fn_1_A704(UnkWindowDataStruct *arg0) { - if (arg0->unk0C != 0) { - arg0->unk20 = 2; +void fn_1_A704(WindowWork *work) +{ + if (work->visible) { + work->state = 2; } } -void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1) { - if (arg0->unk20 == 0) { - HuWinMesSet(arg0->unk04, arg1); - } else { - arg0->unk18 = arg1; +void fn_1_A71C(WindowWork *work, s32 mess) +{ + if (work->state == 0) { + HuWinMesSet(work->window, mess); + } + else { + work->messToBeSet = mess; } } -static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2) { - HuWinInsertMesSet(arg0->unk04, arg1, arg2); +static void fn_1_A770(WindowWork *work, s32 mess, s16 index) +{ + HuWinInsertMesSet(work->window, mess, index); } -void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2) { - HuWinPosSet(arg0->unk04, arg1, arg2); +// SetWindowPosition +void fn_1_A7B0(WindowWork *work, float x, float y) +{ + HuWinPosSet(work->window, x, y); } -void fn_1_A7F0(UnkWindowDataStruct *arg0) { - HuWinDispOn(arg0->unk04); - arg0->unk0C = 1; +// DisplayWindow +void fn_1_A7F0(WindowWork *work) +{ + HuWinDispOn(work->window); + work->visible = TRUE; } -void fn_1_A828(UnkWindowDataStruct *arg0) { - HuWinDispOff(arg0->unk04); - arg0->unk0C = 0; +// HideWindow +void fn_1_A828(WindowWork *work) +{ + HuWinDispOff(work->window); + work->visible = FALSE; } -static void fn_1_A860(UnkWindowDataStruct *arg0) { - if (arg0->unk20 == 0) { - arg0->unk20 = 3; +static void fn_1_A860(WindowWork *work) +{ + if (work->state == 0) { + work->state = 3; } - arg0->unk10 = 1; + work->messWaitSignal = TRUE; } -void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1) { - if (arg0->unk20 == 0) { - arg0->unk20 = 4; +void fn_1_A880(WindowWork *work, s32 choice) +{ + if (work->state == 0) { + work->state = 4; } - arg0->unk14 = 1; - arg0->unk1C = arg1; + work->choiceSignal = TRUE; + work->choice = choice; } -static void fn_1_A8A4(void) { - UnkWindowDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; +static void HandleWindow(void) +{ + WindowWork *work = HuPrcCurrentGet()->user_data; - while (1) { - switch (temp_r31->unk20) { + while (TRUE) { + switch (work->state) { case 1: - fn_1_A7F0(temp_r31); - HuWinExAnimIn(temp_r31->unk04); + fn_1_A7F0(work); + HuWinExAnimIn(work->window); break; case 2: - HuWinExAnimOut(temp_r31->unk04); - fn_1_A828(temp_r31); + HuWinExAnimOut(work->window); + fn_1_A828(work); break; case 3: - HuWinMesWait(temp_r31->unk04); - temp_r31->unk10 = 0; + HuWinMesWait(work->window); + work->messWaitSignal = FALSE; break; case 4: - temp_r31->unk1C = HuWinChoiceGet(temp_r31->unk04, temp_r31->unk1C); - temp_r31->unk14 = 0; + work->choice = HuWinChoiceGet(work->window, work->choice); + work->choiceSignal = FALSE; break; } - if (temp_r31->unk18 != 0) { - HuWinMesSet(temp_r31->unk04, temp_r31->unk18); - temp_r31->unk18 = 0; + if (work->messToBeSet != 0) { + HuWinMesSet(work->window, work->messToBeSet); + work->messToBeSet = 0; } - temp_r31->unk20 = 0; - if (temp_r31->unk10 != 0) { - temp_r31->unk20 = 3; + work->state = 0; + if (work->messWaitSignal) { + work->state = 3; } - if (temp_r31->unk14 != 0) { - temp_r31->unk20 = 4; + if (work->choiceSignal) { + work->state = 4; } HuPrcVSleep(); }