From dba353450429226d02bec958fdb8174e306eaeb7 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 18 Jun 2024 05:17:54 +0200 Subject: [PATCH 1/4] 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(); } From 0687fd8abbe2d0fe007161ce606ffdf5b02dce9b Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 18 Jun 2024 08:11:20 -0500 Subject: [PATCH 2/4] Finish naming option REL --- config/GMPE01_00/rels/option/symbols.txt | 266 ++--- include/REL/option.h | 116 +-- src/REL/option/camera.c | 217 ++-- src/REL/option/guide.c | 191 ++-- src/REL/option/record.c | 415 ++++---- src/REL/option/room.c | 230 +++-- src/REL/option/rumble.c | 138 +-- src/REL/option/scene.c | 146 ++- src/REL/option/sound.c | 1155 +++++++++++----------- src/REL/option/state.c | 38 +- src/REL/option/window.c | 43 +- 11 files changed, 1493 insertions(+), 1462 deletions(-) diff --git a/config/GMPE01_00/rels/option/symbols.txt b/config/GMPE01_00/rels/option/symbols.txt index 01a62c17..eba33444 100644 --- a/config/GMPE01_00/rels/option/symbols.txt +++ b/config/GMPE01_00/rels/option/symbols.txt @@ -1,55 +1,55 @@ _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 -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 -HandleScene = .text:0x000005EC; // type:function size:0xFC scope:local +OptionFadeSprite = .text:0x00000160; // type:function size:0x110 +FadeSprite = .text:0x00000270; // type:function size:0xE4 scope:local +OptionFadeModel = .text:0x00000354; // type:function size:0x114 scope:local +FadeModel = .text:0x00000468; // type:function size:0xE8 scope:local +OptionPadCheck = .text:0x00000550; // type:function size:0x34 +OptionPadDStkRepCheck = .text:0x00000584; // type:function size:0x34 +OptionPadDStkCheck = .text:0x000005B8; // type:function size:0x34 +SceneMain = .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 -fn_1_AF0 = .text:0x00000AF0; // type:function size:0x84 -fn_1_B74 = .text:0x00000B74; // type:function size:0x84 -fn_1_BF8 = .text:0x00000BF8; // type:function size:0x30 -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 -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 -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 -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 -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 -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 -HandleGuide = .text:0x000025AC; // type:function size:0x46C scope:local +OptionCameraCreate = .text:0x000007F8; // type:function size:0x244 +OptionCameraKill = .text:0x00000A3C; // type:function size:0x30 +OptionCameraTargetSet = .text:0x00000A6C; // type:function size:0x84 +OptionCameraFocusSet = .text:0x00000AF0; // type:function size:0x84 +OptionCameraViewSet = .text:0x00000B74; // type:function size:0x84 +OptionCameraZoomGet = .text:0x00000BF8; // type:function size:0x30 +OptionCameraRotGet = .text:0x00000C28; // type:function size:0x30 +OptionCameraPosGet = .text:0x00000C58; // type:function size:0x30 +OptionCameraTargetGet = .text:0x00000C88; // type:function size:0x30 +OptionCameraDoneCheck = .text:0x00000CB8; // type:function size:0x8C +ExecCameraObj = .text:0x00000D44; // type:function size:0x28 scope:local +ExecCamera = .text:0x00000D6C; // type:function size:0x578 scope:local +CameraExecDebug = .text:0x000012E4; // type:function size:0x200 scope:local +CameraPrintDebug = .text:0x000014E4; // type:function size:0xC0 scope:local +OptionRoomCreate = .text:0x000015A4; // type:function size:0x1F4 +OptionRoomKill = .text:0x00001798; // type:function size:0xAC +MoveOption = .text:0x00001844; // type:function size:0x1E8 scope:local +OptionRoomExecModeSet = .text:0x00001A2C; // type:function size:0x44 +OptionRoomExecModeGet = .text:0x00001A70; // type:function size:0x1C +ExecRoom = .text:0x00001A8C; // type:function size:0x5FC scope:local +CreateRoomBG = .text:0x00002088; // type:function size:0x88 scope:local +KillRoomBG = .text:0x00002110; // type:function size:0x34 scope:local +CreateArrow = .text:0x00002144; // type:function size:0x80 scope:local +KillArrow = .text:0x000021C4; // type:function size:0x34 scope:local +OptionGuideCreate = .text:0x000021F8; // type:function size:0x224 +OptionGuideKill = .text:0x0000241C; // type:function size:0x8C +SetExecMode = .text:0x000024A8; // type:function size:0x44 scope:local +GetExecMode = .text:0x000024EC; // type:function size:0x1C scope:local +OptionGuideWalkExec = .text:0x00002508; // type:function size:0xA4 +ExecGuide = .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 -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_39D4 = .text:0x000032D4; // type:function size:0x1C -HandleRumble = .text:0x000032F0; // type:function size:0x4BC scope:local +LerpAngle = .text:0x00002D00; // type:function size:0x104 scope:local +OptionStateCreate = .text:0x00002E04; // type:function size:0x148 +OptionStateKill = .text:0x00002F4C; // type:function size:0x64 +ExecState = .text:0x00002FB0; // type:function size:0x1A8 scope:local +OptionRumbleCreate = .text:0x00003158; // type:function size:0xD4 +OptionRumbleKill = .text:0x0000322C; // type:function size:0x64 +OptionRumbleExecModeSet = .text:0x00003290; // type:function size:0x44 +OptionRumbleExecModeGet = .text:0x000032D4; // type:function size:0x1C +ExecRumble = .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 @@ -60,56 +60,56 @@ 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 -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 -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 +OptionRumbleMotionShowStart = .text:0x00003D54; // type:function size:0xC8 +OptionRumbleMotionHideStart = .text:0x00003E1C; // type:function size:0xB4 +OptionRumbleMotionCheck = .text:0x00003ED0; // type:function size:0x58 +CreateHiliteOn = .text:0x00003F28; // type:function size:0xAC scope:local +KillHiliteOn = .text:0x00003FD4; // type:function size:0x54 scope:local +OptionSoundCreate = .text:0x00004028; // type:function size:0x2B4 +OptionSoundKill = .text:0x000042DC; // type:function size:0xAC +OptionSoundExecModeSet = .text:0x00004388; // type:function size:0x44 +OptionSoundExecModeGet = .text:0x000043CC; // type:function size:0x1C +ExecZoom = .text:0x000043E8; // type:function size:0x270 scope:local +ExecOptionSel = .text:0x00004658; // type:function size:0x424 scope:local +ExecOutputMode = .text:0x00004A7C; // type:function size:0x3D4 scope:local +ExecMusic = .text:0x00004E50; // type:function size:0x93C scope:local +ExecVoice = .text:0x0000578C; // type:function size:0x8B8 scope:local +LightSetCurr = .text:0x00006044; // type:function size:0xF8 scope:local +LightSetNone = .text:0x0000613C; // type:function size:0x64 scope:local +CreateHand = .text:0x000061A0; // type:function size:0xFC scope:local +KillHand = .text:0x0000629C; // type:function size:0x54 scope:local +CreateOutputModeHand = .text:0x000062F0; // type:function size:0xFC scope:local +KillOutputModeHand = .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 +CreateLightObj = .text:0x00006528; // type:function size:0x118 scope:local +KillLightObj = .text:0x00006640; // type:function size:0x54 scope:local +LightDispOff = .text:0x00006694; // type:function size:0x38 scope:local +LightDispOn = .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 +OptionSelDisp = .text:0x00006828; // type:function size:0x1E4 scope:local +OptionSelHide = .text:0x00006A0C; // type:function size:0x74 scope:local +OutputModeDisp = .text:0x00006A80; // type:function size:0x1DC scope:local +OutputModeHide = .text:0x00006C5C; // type:function size:0x74 scope:local +MusicPageDisp = .text:0x00006CD0; // type:function size:0x1D4 scope:local +MusicPageHide = .text:0x00006EA4; // type:function size:0xA4 scope:local +VoicePageDisp = .text:0x00006F48; // type:function size:0x1D4 scope:local +VoicePageHide = .text:0x0000711C; // type:function size:0xA4 scope:local +CreateNoteObj = .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 +CreateNote = .text:0x00007710; // type:function size:0x190 scope:local +CreateNoteSpawner = .text:0x000078A0; // type:function size:0x60 scope:local +KillNoteSpawner = .text:0x00007900; // type:function size:0x3C scope:local +ExecNoteSpawner = .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 -HandleRecord = .text:0x00008310; // type:function size:0x778 scope:local +FadeSound = .text:0x00008048; // type:function size:0x9C scope:local +OptionRecordCreate = .text:0x000080E4; // type:function size:0x178 +OptionRecordKill = .text:0x0000825C; // type:function size:0x54 +OptionRecordExecModeSet = .text:0x000082B0; // type:function size:0x44 +OptionRecordExecModeGet = .text:0x000082F4; // type:function size:0x1C +ExecRecord = .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 @@ -117,25 +117,25 @@ 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 -fn_1_A704 = .text:0x0000A704; // type:function size:0x18 -fn_1_A71C = .text:0x0000A71C; // type:function size:0x54 -fn_1_A770 = .text:0x0000A770; // type:function size:0x40 scope:local -fn_1_A7B0 = .text:0x0000A7B0; // type:function size:0x40 -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 -HandleWindow = .text:0x0000A8A4; // type:function size:0x108 scope:local +GetDigit = .text:0x00008EF8; // type:function size:0x40 scope:local +ShowBoard = .text:0x00008F38; // type:function size:0x77C scope:local +HideBoard = .text:0x000096B4; // type:function size:0x9C scope:local +ShowTotal = .text:0x00009750; // type:function size:0x344 scope:local +HideTotal = .text:0x00009A94; // type:function size:0x7C scope:local +ShowMG = .text:0x00009B10; // type:function size:0x8A0 scope:local +HideMG = .text:0x0000A3B0; // type:function size:0x9C scope:local +OptionWinCreate = .text:0x0000A44C; // type:function size:0x260 +OptionWinKill = .text:0x0000A6AC; // type:function size:0x40 +OptionWinAnimIn = .text:0x0000A6EC; // type:function size:0x18 +OptionWinAnimOut = .text:0x0000A704; // type:function size:0x18 +OptionWinMesSet = .text:0x0000A71C; // type:function size:0x54 +OptionWinInsertMesSet = .text:0x0000A770; // type:function size:0x40 +OptionWinPosSet = .text:0x0000A7B0; // type:function size:0x40 +OptionWinDispOn = .text:0x0000A7F0; // type:function size:0x38 +OptionWinDispOff = .text:0x0000A828; // type:function size:0x38 +OptionWinMesWait = .text:0x0000A860; // type:function size:0x20 +OptionWinChoiceSet = .text:0x0000A880; // type:function size:0x24 +ExecWindow = .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 @@ -173,12 +173,12 @@ 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 -guidePosTbl = .rodata:0x000000BC; // type:object size:0xC scope:local data:float +guideAngleTbl = .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 optionDescTbl = .rodata:0x000000D4; // type:object size:0xC scope:local -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC scope:local +guideMotTbl = .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 lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float @@ -248,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 -indicatorPosTbl = .rodata:0x000012D0; // type:object size:0x24 scope:local +lightPosTbl = .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 -optionSelSprIdxTbl = .rodata:0x00001308; // type:object size:0x1C scope:local +sprHideTbl$767 = .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 -soundSettingsSprTbl = .rodata:0x00001330; // type:object size:0x14 scope:local +sprHideTbl$793 = .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 -musicTitleSprIdxTbl = .rodata:0x0000134C; // type:object size:0x4 scope:local -voiceTitleSprIdxTbl = .rodata:0x00001350; // type:object size:0x8 scope:local +sprHideTbl$821 = .rodata:0x0000134C; // type:object size:0x4 scope:local +sprHideTbl$852 = .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 @@ -353,31 +353,31 @@ 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 -modes = .data:0x00000068; // type:object size:0x8 scope:local data:4byte +execModeTbl = .data:0x00000068; // type:object size:0x8 scope:local data:4byte jumptable_1_data_70 = .data:0x00000070; // type:object size:0x24 scope:local -modes = .data:0x00000098; // type:object size:0x8 scope:local data:4byte +execModeTbl = .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 -modes = .data:0x00000108; // type:object size:0x8 scope:local data:4byte +execModeTbl = .data:0x00000108; // type:object size:0x8 scope:local data:4byte lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 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 +musicPageOn = .data:0x00000118; // type:object size:0x38 scope:local data:4byte +execModeTbl = .data:0x00000150; // type:object size:0x18 scope:local data:4byte +choiceMess = .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 -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 +spriteDataTbl = .data:0x000001BC; // type:object size:0x4C scope:local +noteMdlTbl = .data:0x00000208; // type:object size:0x8 scope:local +execModeTbl = .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 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 -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:4byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x8 data:4byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x8 data:4byte -lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x8 data:4byte -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 data:4byte +optionObjMan = .bss:0x00000008; // type:object size:0x8 data:4byte +optionCamera = .bss:0x00000010; // type:object size:0x8 data:4byte +optionRoom = .bss:0x00000018; // type:object size:0x8 data:4byte +optionGuide = .bss:0x00000020; // type:object size:0x8 data:4byte +optionState = .bss:0x00000028; // type:object size:0x8 data:4byte +optionRumble = .bss:0x00000030; // type:object size:0x8 data:4byte +optionSound = .bss:0x00000038; // type:object size:0x8 data:4byte +optionRecord = .bss:0x00000040; // type:object size:0x4 data:4byte diff --git a/include/REL/option.h b/include/REL/option.h index 245afabe..3052b323 100755 --- a/include/REL/option.h +++ b/include/REL/option.h @@ -15,70 +15,76 @@ typedef struct { /* 0x18 */ u32 messToBeSet; /* 0x1C */ s32 choice; /* 0x20 */ s32 state; // TODO add defines -} WindowWork; // Size 0x24 +} OptionWindow; // Size 0x24 -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); +void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration); +void OptionFadeModel(s16 model, BOOL inF, s32 duration); -omObjData *fn_1_7F8(void); -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); +BOOL OptionPadCheck(u16 btn); +BOOL OptionPadDStkRepCheck(u16 arg0); +BOOL OptionPadDStkCheck(u16 arg0); -omObjData *fn_1_15A4(void); -void fn_1_1798(omObjData *object); -void fn_1_1A2C(omObjData *object, s32 mode); -s32 fn_1_1A70(omObjData *object); +omObjData *OptionCameraCreate(void); +void OptionCameraKill(omObjData *object); +void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration); +void OptionCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration); +void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration); +float OptionCameraZoomGet(omObjData *object); +float OptionCameraRotGet(omObjData *object); +void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z); -omObjData *fn_1_21F8(void); -void fn_1_241C(omObjData *object); -void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration); +void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z); +s32 OptionCameraDoneCheck(omObjData *object); -omObjData *fn_1_2E04(void); -void fn_1_2F4C(omObjData *object); +omObjData *OptionRoomCreate(void); +void OptionRoomKill(omObjData *object); +void OptionRoomExecModeSet(omObjData *object, s32 execMode); +s32 OptionRoomExecModeGet(omObjData *object); -omObjData *fn_1_3158(void); -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 *OptionGuideCreate(void); +void OptionGuideKill(omObjData *object); +void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration); -omObjData *fn_1_4028(void); -void fn_1_42DC(omObjData *object); -void fn_1_4388(omObjData *object, s32 arg1); -s32 fn_1_43CC(omObjData *object); +omObjData *OptionStateCreate(void); +void OptionStateKill(omObjData *object); -omObjData *fn_1_80E4(void); -void fn_1_825C(omObjData *object); -void fn_1_82B0(omObjData *object, s32 arg1); -s32 fn_1_82F4(omObjData *object); +omObjData *OptionRumbleCreate(void); +void OptionRumbleKill(omObjData *object); +void OptionRumbleExecModeSet(omObjData *object, s32 execMode); +s32 OptionRumbleExecModeGet(omObjData *object); +void OptionRumbleMotionShowStart(omObjData *object); +void OptionRumbleMotionHideStart(omObjData *object); +BOOL OptionRumbleMotionCheck(omObjData *object); -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); +omObjData *OptionSoundCreate(void); +void OptionSoundKill(omObjData *object); +void OptionSoundExecModeSet(omObjData *object, s32 execMode); +s32 OptionSoundExecModeGet(omObjData *object); -extern Process *lbl_1_bss_8; -extern omObjData *lbl_1_bss_10; -extern omObjData *lbl_1_bss_18; -extern omObjData *lbl_1_bss_20; -extern omObjData *lbl_1_bss_28; -extern omObjData *lbl_1_bss_30; -extern omObjData *lbl_1_bss_38; -extern omObjData *lbl_1_bss_40; +omObjData *OptionRecordCreate(void); +void OptionRecordKill(omObjData *object); +void OptionRecordExecModeSet(omObjData *object, s32 execMode); +s32 OptionRecordExecModeGet(omObjData *object); + +OptionWindow *OptionWinCreate(s32 id); +void OptionWinKill(OptionWindow *work); +void OptionWinAnimIn(OptionWindow *work); +void OptionWinAnimOut(OptionWindow *work); +void OptionWinMesSet(OptionWindow *work, s32 mess); +void OptionWinInsertMesSet(OptionWindow *work, s32 mess, s16 index); +void OptionWinPosSet(OptionWindow *work, float x, float y); +void OptionWinDispOn(OptionWindow *work); +void OptionWinDispOff(OptionWindow *work); +void fn_1_A860(OptionWindow *work); +void fn_1_A880(OptionWindow *work, s32 choice); + +extern Process *optionObjMan; +extern omObjData *optionCamera; +extern omObjData *optionRoom; +extern omObjData *optionGuide; +extern omObjData *optionState; +extern omObjData *optionRumble; +extern omObjData *optionSound; +extern omObjData *optionRecord; #endif diff --git a/src/REL/option/camera.c b/src/REL/option/camera.c index 3af79c9b..99e2aa68 100755 --- a/src/REL/option/camera.c +++ b/src/REL/option/camera.c @@ -9,116 +9,115 @@ #include "ext_math.h" typedef struct { - /* 0x00 */ Vec eyePos; - /* 0x0C */ Vec lookingAt; - /* 0x18 */ Vec tilt; + /* 0x00 */ Vec pos; + /* 0x0C */ Vec target; + /* 0x18 */ Vec up; /* 0x24 */ float zoom; /* 0x28 */ float rot; - /* 0x2C */ Vec prevEyePos; - /* 0x38 */ Vec prevLookingAt; + /* 0x2C */ Vec posPrev; + /* 0x38 */ Vec targetPrev; /* 0x44 */ char unk44[0xC]; /* 0x50 */ float prevZoom; /* 0x54 */ float prevRot; - /* 0x58 */ Vec eyePosTarget; - /* 0x64 */ Vec lookingAtTarget; + /* 0x58 */ Vec posTarget; + /* 0x64 */ Vec posFocus; /* 0x70 */ char unk70[0xC]; /* 0x7C */ float zoomTarget; /* 0x80 */ float rotTarget; - /* 0x84 */ float eyeVelocity; + /* 0x84 */ float timeEye; /* 0x88 */ float eyeSpeed; - /* 0x8C */ float lookingAtVelocity; - /* 0x90 */ float lookingAtSpeed; - /* 0x94 */ float rotVelocity; + /* 0x8C */ float timeTarget; + /* 0x90 */ float targetSpeed; + /* 0x94 */ float timeRot; /* 0x98 */ float rotSpeed; } CameraWork; // Size 0x9C -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 ExecCameraObj(omObjData *object); +static void ExecCamera(omObjData *object); static void fn_1_12E4(omObjData *object); static void PrintDebugInfo(omObjData *object); -omObjData *lbl_1_bss_10; +omObjData *optionCamera; 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 *OptionCameraCreate(void) { omObjData *object; CameraWork *work; - object = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, HandlerWrapper); + object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj); 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->pos.x = 0.0f; + work->pos.y = 0.0f; + work->pos.z = 0.0f; + work->target.x = 0.0f; + work->target.y = 0.0f; + work->target.z = 0.0f; + work->up.x = 0.0f; + work->up.y = 1.0f; + work->up.z = 0.0f; work->zoom = 0.0f; work->rot = 0.0f; - work->lookingAtVelocity = 1.0f; - work->eyeVelocity = 1.0f; - work->rotVelocity = 1.0f; + work->timeTarget = 1.0f; + work->timeEye = 1.0f; + work->timeRot = 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(object, 600.0f, 60.0f, 120.0f, 1); - fn_1_A6C(object, 180.0f, 120.0f, 0.0f, 1); + OptionCameraViewSet(object, 600.0f, 60.0f, 120.0f, 1); + OptionCameraTargetSet(object, 180.0f, 120.0f, 0.0f, 1); return object; } -void fn_1_A3C(omObjData *object) +void OptionCameraKill(omObjData *object) { HuMemDirectFree(object->data); } -void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration) +void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration) { CameraWork *work = object->data; - work->eyePosTarget.x = x; - work->eyePosTarget.y = y; - work->eyePosTarget.z = z; - work->prevEyePos = work->eyePos; - work->eyeVelocity = 0.0f; + work->posTarget.x = x; + work->posTarget.y = y; + work->posTarget.z = z; + work->posPrev = work->pos; + work->timeEye = 0.0f; work->eyeSpeed = 1.0f / duration; } -void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration) +void OptionCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration) { CameraWork *work = object->data; - 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; + work->posFocus.x = x; + work->posFocus.y = y; + work->posFocus.z = z; + work->targetPrev = work->target; + work->timeTarget = 0.0f; + work->targetSpeed = 1.0f / duration; } -void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration) +void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration) { CameraWork *work = object->data; - work->lookingAtTarget.y = y; + work->posFocus.y = y; work->zoomTarget = zoom; work->rotTarget = rot; - work->prevLookingAt.y = work->lookingAt.y; + work->targetPrev.y = work->target.y; work->prevZoom = work->zoom; work->prevRot = work->rot; - work->rotVelocity = 0.0f; + work->timeRot = 0.0f; work->rotSpeed = 1.0f / duration; } // GetZoom -float fn_1_BF8(omObjData *object) +float OptionCameraZoomGet(omObjData *object) { CameraWork *work = object->data; float zoom; @@ -128,7 +127,7 @@ float fn_1_BF8(omObjData *object) } // GetRot -float fn_1_C28(omObjData *object) +float OptionCameraRotGet(omObjData *object) { CameraWork *work = object->data; float rot; @@ -137,117 +136,117 @@ float fn_1_C28(omObjData *object) return rot; } -// GetEyePos -static void fn_1_C58(omObjData *object, float *eyePosX, float *eyePosY, float *eyePosZ) +// Getpos +void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) { CameraWork *temp_r31 = object->data; - *eyePosX = temp_r31->eyePos.x; - *eyePosY = temp_r31->eyePos.y; - *eyePosZ = temp_r31->eyePos.z; + *x = temp_r31->pos.x; + *y = temp_r31->pos.y; + *z = temp_r31->pos.z; } -// GetLookingAt -void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ) +// Gettarget +void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) { CameraWork *work = object->data; - *lookingAtX = work->lookingAt.x; - *lookingAtY = work->lookingAt.y; - *lookingAtZ = work->lookingAt.z; + *x = work->target.x; + *y = work->target.y; + *z = work->target.z; } // CameraDone -s32 fn_1_CB8(omObjData *object) +s32 OptionCameraDoneCheck(omObjData *object) { CameraWork *work = object->data; s32 var_r30 = 1; s32 var_r29 = 1; - if (!(work->lookingAtVelocity < 1.0f) && !(work->rotVelocity < 1.0f)) { + if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) { var_r29 = 0; } - if (var_r29 == 0 && !(work->eyeVelocity < 1.0f)) { + if (var_r29 == 0 && !(work->timeEye < 1.0f)) { var_r30 = 0; } return var_r30; } -static void HandlerWrapper(omObjData *object) +static void ExecCameraObj(omObjData *object) { - HandleCamera(object); + ExecCamera(object); } -static void HandleCamera(omObjData *object) +static void ExecCamera(omObjData *object) { CameraWork *work = object->data; - float temp_f28; - float xDiff; - float zDiff; + float weight; + float dx; + float dz; - 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 (work->timeEye < 1.0f) { + weight = sind(90.0f * work->timeEye); + work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x); + work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y); + work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z); + if ((work->timeEye += work->eyeSpeed) >= 1.0f) { + work->pos = work->posTarget; } } - 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 (work->timeTarget < 1.0f) { + weight = sind(90.0f * work->timeTarget); + work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x); + work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); + work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z); + if ((work->timeTarget += work->targetSpeed) >= 1.0f) { + work->target = work->posFocus; } } - 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; + if (work->timeRot < 1.0f) { + weight = sind(90.0f * work->timeRot); + work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); + work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom); + work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot); + if ((work->timeRot += work->rotSpeed) >= 1.0f) { + work->target.y = work->posFocus.y; work->zoom = work->zoomTarget; work->rot = work->rotTarget; } - work->lookingAt.x = work->zoom * -sind(work->rot); - work->lookingAt.z = work->zoom * cosd(work->rot); + work->target.x = work->zoom * -sind(work->rot); + work->target.z = work->zoom * cosd(work->rot); } - 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); + dx = work->target.x - work->pos.x; + dz = work->target.z - work->pos.z; + work->zoom = sqrtf(dx * dx + dz * dz); + work->rot = fmod(-atan2d(dx, dz), 360.0); if (work->rot < 0.0f) { work->rot += 360.0f; } - 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); + Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, + work->target.y, work->target.z); } -static void fn_1_12E4(omObjData *object) +static void CameraExecDebug(omObjData *object) { CameraWork *work; if (HuPadBtn[0] & 0xF) { 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]; + work->target.x += 0.5f * HuPadStkX[0]; + work->target.y += 0.5f * HuPadStkY[0]; + work->pos.z += 0.5f * HuPadTrigL[0]; + work->pos.z -= 0.5f * HuPadTrigR[0]; + work->pos.x += 0.5f * HuPadSubStkY[0]; + work->pos.y += 0.5f * HuPadSubStkX[0]; } } -static void PrintDebugInfo(omObjData *object) +static void CameraPrintDebug(omObjData *object) { CameraWork *work = object->data; - 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, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z); + print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.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 df72838a..2487f72c 100755 --- a/src/REL/option/guide.c +++ b/src/REL/option/guide.c @@ -9,19 +9,18 @@ #include "ext_math.h" typedef struct { - /* 0x00 */ s32 mode; - /* 0x04 */ s16 motionIdx; - /* 0x06 */ char unk06[2]; + /* 0x00 */ s32 execMode; + /* 0x04 */ s16 motion; /* 0x08 */ Vec pos; /* 0x14 */ Vec newPos; /* 0x20 */ Vec rot; - /* 0x2C */ Vec posChange; - /* 0x38 */ float distanceToMove; - /* 0x3C */ float unkAngle; - /* 0x40 */ float posToMoveTo; - /* 0x44 */ float distFromCam; + /* 0x2C */ Vec posDelta; + /* 0x38 */ float distRemain; + /* 0x3C */ float angle; + /* 0x40 */ float angleEnd; + /* 0x44 */ float camDist; /* 0x48 */ char unk48[0xC]; - /* 0x54 */ float velocity; + /* 0x54 */ float time; /* 0x58 */ float speed; /* 0x5C */ s32 unk5C; /* 0x60 */ s32 unk60; @@ -30,29 +29,29 @@ typedef struct { #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 SetExecMode(omObjData *object, s32 mode); +static s32 GetExecMode(omObjData *object); +static void ExecGuide(omObjData *object); static void UpdateGuide(omObjData *object); -static float fn_1_2D00(float arg0, float arg1, float arg2); +static float LerpAngle(float arg0, float arg1, float arg2); -omObjData *lbl_1_bss_20; +omObjData *optionGuide; -static const s32 lbl_1_rodata_E0[] = { +static const s32 guideMotTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 16), DATA_MAKE_NUM(DATADIR_OPTION, 17), DATA_MAKE_NUM(DATADIR_OPTION, 18), }; -static omObjFunc modes[] = { NULL, HandleGuide }; +static omObjFunc execModeTbl[] = { NULL, ExecGuide }; -omObjData *fn_1_21F8(void) +omObjData *OptionGuideCreate(void) { omObjData *object; GuideWork *work; s32 i; - object = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); + object = omAddObjEx(optionObjMan, 1002, 1, 3, 2, NULL); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM); object->data = work; work->pos.x = -298.59f; @@ -63,25 +62,25 @@ omObjData *fn_1_21F8(void) 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; + work->posDelta.x = 0.0f; + work->posDelta.z = 0.0f; + work->posDelta.y = 0.0f; object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); Hu3DModelLayerSet(object->model[0], 1); for (i = 0; i < 3; i++) { - object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); + object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); } 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(object->model[0]); Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001); - ChangeMode(object, MODE_DISABLED); + SetExecMode(object, MODE_DISABLED); UpdateGuide(object); return object; } -void fn_1_241C(omObjData *object) +void OptionGuideKill(omObjData *object) { GuideWork *work = object->data; s32 i; @@ -95,90 +94,90 @@ void fn_1_241C(omObjData *object) HuMemDirectFree(work); } -static void ChangeMode(omObjData *object, s32 mode) +static void SetExecMode(omObjData *object, s32 execMode) { GuideWork *work = object->data; - work->mode = mode; - object->func = modes[mode]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -static s32 GetMode(omObjData *object) +static s32 GetExecMode(omObjData *object) { GuideWork *work = object->data; - return work->mode; + return work->execMode; } -void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration) +void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration) { GuideWork *work = object->data; - work->posToMoveTo = destPos; - work->distFromCam = distFromCam; - work->velocity = 0.0f; - work->speed = 1.0f / walkDuration; - work->motionIdx = 0; - ChangeMode(object, MODE_HANDLE_GUIDE); + work->angleEnd = angleEnd; + work->camDist = camDist; + work->time = 0.0f; + work->speed = 1.0f / duration; + work->motion = 0; + SetExecMode(object, MODE_HANDLE_GUIDE); } -static void HandleGuide(omObjData *object) +static void ExecGuide(omObjData *object) { GuideWork *work = object->data; - float var_f31; - float var_f30; + float angle; + float weight; switch (object->unk10) { case 0: - work->unkAngle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); - if (work->unkAngle < 0.0f) { - work->unkAngle += 360.0f; + work->angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); + if (work->angle < 0.0f) { + work->angle += 360.0f; } object->unk10 = 1; /* fallthrough */ case 1: - 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); + weight = sind(90.0f * work->time); + angle = work->angle + weight * (work->angleEnd - work->angle); + work->newPos.x = work->camDist * -sind(angle); + work->newPos.z = work->camDist * cosd(angle); 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->posDelta.x = work->newPos.x - work->pos.x; + work->posDelta.z = work->newPos.z - work->pos.z; + if (work->time <= 0.0f) { + work->posDelta.x = 0.0f; + work->posDelta.z = 0.0f; work->pos = work->newPos; } - if ((work->velocity += work->speed) < 1.0f) { + if ((work->time += work->speed) < 1.0f) { break; } - var_f31 = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); + if (angle < 0.0f) { + angle += 360.0f; } - 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->newPos.x = 422.0 * -sind(angle); + work->newPos.z = 422.0 * cosd(angle); + work->posDelta.x = (work->newPos.x - work->pos.x) / 10.0f; + work->posDelta.z = (work->newPos.z - work->pos.z) / 10.0f; work->speed = 0.1f; - work->velocity = 0.0f; + work->time = 0.0f; object->unk10 = 2; /* fallthrough */ case 2: - if ((work->velocity += work->speed) < 1.0f) { + if ((work->time += work->speed) < 1.0f) { break; } object->unk10 = 3; /* fallthrough */ case 3: work->pos = work->newPos; - work->posChange.x = 0.0f; - work->posChange.y = 0.0f; - work->posChange.z = 0.0f; + work->posDelta.x = 0.0f; + work->posDelta.y = 0.0f; + work->posDelta.z = 0.0f; UpdateGuide(object); - ChangeMode(object, MODE_DISABLED); + SetExecMode(object, MODE_DISABLED); break; } UpdateGuide(object); @@ -187,51 +186,51 @@ static void HandleGuide(omObjData *object) static void UpdateGuide(omObjData *object) { GuideWork *work = object->data; - s16 var_r29; + s16 motion; - var_r29 = 0; - 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; + motion = 0; + work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z); + if (0.001f <= work->distRemain) { + if (14.0f <= work->distRemain) { + work->posDelta.x /= work->distRemain; + work->posDelta.z /= work->distRemain; + work->distRemain = 14.0f; + work->posDelta.x = 14.0f * work->posDelta.x; + work->posDelta.z = 14.0f * work->posDelta.z; } - 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; + work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f); + if (8.0f <= work->distRemain) { + motion = 2; } else { - var_r29 = 1; + motion = 1; } } - 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; + work->pos.x += work->posDelta.x; + work->pos.z += work->posDelta.z; + if (work->motion != motion) { + Hu3DMotionShiftSet(*object->model, object->motion[motion], 0.0f, 8.0f, 0x40000001); + work->motion = motion; } 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 LerpAngle(float start, float end, float time) { - float var_f30; - float var_f31; + float angle; + float delta; - var_f31 = fmod(arg1 - arg0, 360.0); - if (0.0f > var_f31) { - var_f31 += 360.0f; + delta = fmod(end - start, 360.0); + if (0.0f > delta) { + delta += 360.0f; } - if (180.0f < var_f31) { - var_f31 -= 360.0f; + if (180.0f < delta) { + delta -= 360.0f; } - var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); - if (0.0f > var_f30) { - var_f30 += 360.0f; + angle = fmod(start + delta * time, 360.0); + if (0.0f > angle) { + angle += 360.0f; } - return var_f30; + return angle; } diff --git a/src/REL/option/record.c b/src/REL/option/record.c index 1d435390..d625d764 100755 --- a/src/REL/option/record.c +++ b/src/REL/option/record.c @@ -21,15 +21,15 @@ #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_SCORE_NUM_DIGITS 8 #define MG_TIME_NUM_DIGITS 8 #define DISPLAY_TYPE_TIME 0 -#define DISPLAY_TYPE_DECIMAL 1 +#define DISPLAY_TYPE_SCORE 1 typedef struct { /* 0x00 */ s32 playCount; - /* 0x04 */ s32 winCounts[8]; + /* 0x04 */ s32 winCount[8]; /* 0x24 */ s32 maxCoins; /* 0x28 */ s32 maxStars; } BoardRecordData; // Size 0x2C @@ -37,15 +37,15 @@ typedef struct { typedef struct { /* 0x000 */ omObjData *system; /* 0x004 */ omObjData *hand; - /* 0x008 */ WindowWork *window[10]; - /* 0x030 */ s32 mode; + /* 0x008 */ OptionWindow *window[10]; + /* 0x030 */ s32 execMode; /* 0x034 */ s16 sprList[153]; - /* 0x166 */ char unk166[6]; + /* 0x166 */ s16 unk166[3]; /* 0x16C */ s32 recordType; /* 0x170 */ s32 board; /* 0x174 */ s32 mgPage; - /* 0x178 */ BoardRecordData boardRecords[6]; - /* 0x280 */ s32 mgRecords[6]; + /* 0x178 */ BoardRecordData boardRecord[6]; + /* 0x280 */ s32 mgRecord[6]; /* 0x298 */ s32 cameraDoneF; /* 0x29C */ s32 changeTimer; } RecordWork; // Size 0x2A0 @@ -59,48 +59,48 @@ typedef struct { #define MODE_DISABLED 0 #define MODE_HANDLE_RECORD 1 -static void HandleRecord(omObjData *object); +static void ExecRecord(omObjData *object); static omObjData *CreateSystem(void); -static void KillSystem(omObjData *system); -static void StartSystemMotion(omObjData *system, s32 type); +static void KillSystem(omObjData *object); +static void StartSystemMotion(omObjData *object, s32 type); static omObjData *CreateHand(void); -static void KillHand(omObjData *hand); +static void KillHand(omObjData *object); 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); +static s32 GetDigit(s32 value, s32 place); +static void ShowBoard(omObjData *object, s32 board); +static void HideBoard(omObjData *object); +static void ShowTotal(omObjData *object); +static void HideTotal(omObjData *object); +static void ShowMG(omObjData *object, s32 page); +static void HideMG(omObjData *object); -omObjData *lbl_1_bss_40; +omObjData *optionRecord; static const s32 mgRecordIdxTbl[] = { 0, 1, 2, 3, 5, 10 }; -static omObjFunc modes[] = { NULL, HandleRecord }; +static omObjFunc execModeTbl[] = { NULL, ExecRecord }; -omObjData *fn_1_80E4(void) +omObjData *OptionRecordCreate(void) { omObjData *object; RecordWork *work; s32 i; s32 character; - object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 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); + work->boardRecord[i].playCount = GWBoardPlayCountGet(i); + work->boardRecord[i].maxStars = GWBoardMaxStarsGet(i); + work->boardRecord[i].maxCoins = GWBoardMaxCoinsGet(i); for (character = 0; character < NUM_CHARACTERS; character++) { - work->boardRecords[i].winCounts[character] = GWBoardWinCountGet(character, i); + work->boardRecord[i].winCount[character] = GWBoardWinCountGet(character, i); } } for (i = 0; i < 6; i++) { - work->mgRecords[i] = GWMGRecordGet(mgRecordIdxTbl[i]); + work->mgRecord[i] = GWMGRecordGet(mgRecordIdxTbl[i]); } work->board = 0; work->mgPage = 0; @@ -108,11 +108,11 @@ omObjData *fn_1_80E4(void) work->system = CreateSystem(); work->hand = CreateHand(); CreateSpr(object); - fn_1_82B0(object, MODE_DISABLED); + OptionRecordExecModeSet(object, MODE_DISABLED); return object; } -void fn_1_825C(omObjData *object) +void OptionRecordKill(omObjData *object) { RecordWork *work = object->data; @@ -122,90 +122,90 @@ void fn_1_825C(omObjData *object) HuMemDirectFree(work); } -void fn_1_82B0(omObjData *object, s32 mode) +void OptionRecordExecModeSet(omObjData *object, s32 execMode) { RecordWork *work = object->data; - work->mode = mode; - object->func = modes[mode]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -s32 fn_1_82F4(omObjData *object) +s32 OptionRecordExecModeGet(omObjData *object) { RecordWork *work = object->data; - return work->mode; + return work->execMode; } -static void HandleRecord(omObjData *object) +static void ExecRecord(omObjData *object) { RecordWork *work = object->data; - Vec sp8; + Vec pos; s32 i; switch (object->unk10) { case 0: - work->window[0] = fn_1_A44C(0); - work->window[1] = fn_1_A44C(1); + work->window[0] = OptionWinCreate(0); + work->window[1] = OptionWinCreate(1); for (i = 0; i < 8; i++) { - work->window[i + 2] = fn_1_A44C(3); + work->window[i + 2] = OptionWinCreate(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); + OptionCameraFocusSet(optionCamera, 519.0f, 125.0f, 300.0f, 0x28); + OptionCameraTargetSet(optionCamera, 308.98f, 125.0f, 178.74f, 0x28); work->board = 0; work->mgPage = 0; work->cameraDoneF = 0; object->unk10 = 1; /* fallthrough */ case 1: - if (fn_1_CB8(lbl_1_bss_10) != 0) { + if (OptionCameraDoneCheck(optionCamera) != 0) { break; } - fn_1_3D54(lbl_1_bss_30); + OptionRumbleMotionShowStart(optionRumble); 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); + OptionFadeSprite(work->sprList[47], 1, 10); + OptionFadeSprite(work->sprList[48], 1, 10); work->changeTimer = 0; } object->unk10 = 2; /* fallthrough */ case 2: - HideBoardRecordSpr(object); - HideMGRecordSpr(object); - HideTotalResultsSpr(object); + HideBoard(object); + HideMG(object); + HideTotal(object); switch (work->recordType) { case RECORD_TYPE_BOARD: if (work->board < 6) { - DisplayBoardRecord(object, work->board); + ShowBoard(object, work->board); } else { - DisplayTotalResults(object); + ShowTotal(object); } - fn_1_A6EC(work->window[0]); - fn_1_A71C(work->window[0], MAKE_MESSID(47, 5)); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 5)); break; case RECORD_TYPE_MG: - ShowMGRecord(object, work->mgPage); - fn_1_A6EC(work->window[0]); - fn_1_A71C(work->window[0], MAKE_MESSID(47, 6)); + ShowMG(object, work->mgPage); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 6)); break; } - fn_1_A6EC(work->window[1]); - fn_1_A71C(work->window[1], MAKE_MESSID(47, 169)); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(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 * work->recordType; - omSetTra(work->hand, sp8.x, sp8.y, sp8.z); + pos.x = 505.0 * -sin(305 * M_PI / 180.0); + pos.z = 505.0 * cos(305 * M_PI / 180.0); + pos.y = 144.0f - 14.0f * work->recordType; + omSetTra(work->hand, pos.x, pos.y, pos.z); object->unk10 = 3; /* fallthrough */ case 3: @@ -221,26 +221,26 @@ static void HandleRecord(omObjData *object) if (work->window[1]->state != 0) { break; } - if (fn_1_550(PAD_BUTTON_B)) { + if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); object->unk10 = 5; } - else if (fn_1_584(8) != 0 && work->recordType == RECORD_TYPE_MG) { + else if (OptionPadDStkRepCheck(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); + OptionFadeSprite(work->sprList[47], 1, 5); + OptionFadeSprite(work->sprList[48], 1, 5); work->changeTimer = 5; HuAudFXPlay(0x83F); object->unk10 = 2; } - else if (fn_1_584(4) != 0 && work->recordType == RECORD_TYPE_BOARD) { + else if (OptionPadDStkRepCheck(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); + OptionFadeSprite(work->sprList[47], 0, 5); + OptionFadeSprite(work->sprList[48], 0, 5); work->changeTimer = 5; HuAudFXPlay(0x83F); object->unk10 = 2; @@ -248,7 +248,7 @@ static void HandleRecord(omObjData *object) else { switch (work->recordType) { case RECORD_TYPE_BOARD: - if (fn_1_550(PAD_TRIGGER_L)) { + if (OptionPadCheck(PAD_TRIGGER_L)) { if (--work->board < 0) { work->board = 6; } @@ -261,7 +261,7 @@ static void HandleRecord(omObjData *object) object->unk10 = 2; return; } - if (fn_1_550(PAD_TRIGGER_R)) { + if (OptionPadCheck(PAD_TRIGGER_R)) { if (++work->board >= 7) { work->board = 0; } @@ -280,27 +280,27 @@ static void HandleRecord(omObjData *object) } break; case 5: - fn_1_3E1C(lbl_1_bss_30); + OptionRumbleMotionHideStart(optionRumble); if (work->recordType == RECORD_TYPE_BOARD) { - fn_1_160(work->sprList[47], 0, 10); - fn_1_160(work->sprList[48], 0, 10); + OptionFadeSprite(work->sprList[47], 0, 10); + OptionFadeSprite(work->sprList[48], 0, 10); } - fn_1_A704(work->window[0]); - fn_1_A704(work->window[1]); + OptionWinAnimOut(work->window[0]); + OptionWinAnimOut(work->window[1]); Hu3DModelAttrSet(work->hand->model[0], 1); object->unk10 = 6; /* fallthrough */ case 6: - if (work->window[1]->state == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { + if (work->window[1]->state == 0 && OptionRumbleMotionCheck(optionRumble) == 0) { for (i = 0; i < 10; i++) { - fn_1_A6AC(work->window[i]); + OptionWinKill(work->window[i]); } - 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(object, MODE_DISABLED); + HideBoard(object); + HideMG(object); + HideTotal(object); + OptionCameraFocusSet(optionCamera, 519.62f, 120.0f, 300.0f, 40); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28); + OptionRecordExecModeSet(object, MODE_DISABLED); } break; } @@ -308,29 +308,29 @@ static void HandleRecord(omObjData *object) static omObjData *CreateSystem(void) { - omObjData *system; + omObjData *object; - 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; + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1)); + Hu3DModelAttrSet(object->model[0], 0x40000002); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DMotionStartEndSet(object->model[0], 0.0f, 6.0f); + Hu3DMotionTimeSet(object->model[0], 6.0f); + return object; } -static void KillSystem(omObjData *system) +static void KillSystem(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(system->model[i]); + Hu3DModelKill(object->model[i]); } } -static void StartSystemMotion(omObjData *system, s32 type) +static void StartSystemMotion(omObjData *object, s32 type) { - s16 model = system->model[0]; + s16 model = object->model[0]; switch (type) { case RECORD_TYPE_BOARD: @@ -342,29 +342,29 @@ static void StartSystemMotion(omObjData *system, s32 type) Hu3DMotionTimeSet(model, 6.0f); break; } - Hu3DModelAttrReset(system->model[0], 0x40000002); + Hu3DModelAttrReset(object->model[0], 0x40000002); } static omObjData *CreateHand(void) { - omObjData *hand; + omObjData *object; - 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; + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); + Hu3DModelLayerSet(object->model[0], 2); + Hu3DModelAttrSet(object->model[0], 0x40000001); + omSetRot(object, 30.0f, 190.0f, 0.0f); + omSetSca(object, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(object->model[0], 1); + return object; } -static void KillHand(omObjData *hand) +static void KillHand(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(hand->model[i]); + Hu3DModelKill(object->model[i]); } } @@ -551,18 +551,18 @@ static void KillSpr(omObjData *object) } } -static s32 GetDigitSprAt(s32 n, s32 offsetFromRight) +static s32 GetDigit(s32 value, s32 place) { s32 i; i = 1; - while (offsetFromRight-- != 0) { + while (place-- != 0) { i *= 10; } - return (n % (i * 10)) / i; + return (value % (i * 10)) / i; } -static void DisplayBoardRecord(omObjData *object, s32 board) +static void ShowBoard(omObjData *object, s32 board) { RecordWork *work = object->data; s32 value; @@ -570,36 +570,36 @@ static void DisplayBoardRecord(omObjData *object, s32 board) s32 j; espPosSet(work->sprList[board], 275.0f, 72.0f); - value = work->boardRecords[work->board].playCount; + value = work->boardRecord[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)); + espBankSet(work->sprList[i + 11], GetDigit(value, 3 - i)); } } espPosSet(work->sprList[8], 416.0f, 120.0f); - value = work->boardRecords[work->board].maxCoins; + value = work->boardRecord[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)); + espBankSet(work->sprList[i + 15], GetDigit(value, 3 - i)); } } espPosSet(work->sprList[9], 456.0f, 268.0f); - value = work->boardRecords[work->board].maxStars; + value = work->boardRecord[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)); + espBankSet(work->sprList[i + 19], GetDigit(value, 3 - i)); } } espPosSet(work->sprList[10], 456.0f, 312.0f); @@ -607,7 +607,7 @@ static void DisplayBoardRecord(omObjData *object, s32 board) 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)); + espBankSet(work->sprList[i * 3 + 23 + j], GetDigit(work->boardRecord[work->board].winCount[i], 2 - j)); } } espPosSet(work->sprList[47], 48.0f, 240.0f); @@ -632,37 +632,52 @@ static void DisplayBoardRecord(omObjData *object, s32 board) } } for (i = 0; i < 4; i++) { - fn_1_A7F0(work->window[i + 2]); + OptionWinDispOn(work->window[i + 2]); } - 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)); + OptionWinPosSet(work->window[2], 64.0f, 96.0f); + OptionWinMesSet(work->window[2], MAKE_MESSID(47, 19)); + OptionWinPosSet(work->window[3], 64.0f, 140.0f); + OptionWinMesSet(work->window[3], MAKE_MESSID(47, 20)); + OptionWinPosSet(work->window[4], 64.0f, 248.0f); + OptionWinMesSet(work->window[4], MAKE_MESSID(47, 21)); + OptionWinPosSet(work->window[5], 64.0f, 292.0f); + OptionWinMesSet(work->window[5], MAKE_MESSID(47, 22)); } -#define BOARD_RECORD_SPR_IDX_TBL_SIZE 53 +#define BOARD_SPR_HIDE_COUNT 53 -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 const s32 boardSprHideTbl[BOARD_SPR_HIDE_COUNT] = +{ + 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) +static void HideBoard(omObjData *object) { RecordWork *work = object->data; s32 i; - for (i = 0; i < BOARD_RECORD_SPR_IDX_TBL_SIZE; i++) { - espDispOff(work->sprList[boardRecordSprIdxTbl[i]]); + for (i = 0; i < BOARD_SPR_HIDE_COUNT; i++) { + espDispOff(work->sprList[boardSprHideTbl[i]]); } for (i = 0; i < 4; i++) { - fn_1_A828(work->window[i + 2]); + OptionWinDispOff(work->window[i + 2]); } } -static void DisplayTotalResults(omObjData *object) +static void ShowTotal(omObjData *object) { RecordWork *work = object->data; s32 winCount; @@ -673,11 +688,11 @@ static void DisplayTotalResults(omObjData *object) 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]; + winCount += work->boardRecord[j].winCount[i]; } 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)); + espBankSet(work->sprList[i * 3 + 65 + j], GetDigit(winCount, 2 - j)); } } espDispOn(work->sprList[6]); @@ -687,48 +702,59 @@ static void DisplayTotalResults(omObjData *object) espDispOn(work->sprList[i * 3 + 65 + j]); } } - 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]); + OptionWinPosSet(work->window[2], 136.0f, 96.0f); + OptionWinMesSet(work->window[2], MAKE_MESSID(47, 23)); + OptionWinDispOn(work->window[2]); } -#define TOTAL_RESULTS_SPR_IDX_TBL_SIZE 33 +#define TOTAL_SPR_HIDE_COUNT 33 -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 const s32 totalSprHideTbl[TOTAL_SPR_HIDE_COUNT] = +{ + 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) +static void HideTotal(omObjData *object) { RecordWork *work = object->data; s32 i; - for (i = 0; i < TOTAL_RESULTS_SPR_IDX_TBL_SIZE; i++) { - espDispOff(work->sprList[totalResultsSprIdxTbl[i]]); + for (i = 0; i < TOTAL_SPR_HIDE_COUNT; i++) { + espDispOff(work->sprList[totalSprHideTbl[i]]); } - fn_1_A828(work->window[2]); + OptionWinDispOff(work->window[2]); } static const MGTable mgTbl[6] = { { 405, MAKE_MESSID(23, 5), DISPLAY_TYPE_TIME }, - { 407, MAKE_MESSID(23, 7), DISPLAY_TYPE_DECIMAL }, + { 407, MAKE_MESSID(23, 7), DISPLAY_TYPE_SCORE }, { 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 ShowMGRecord(omObjData *object, s32 page) +static void ShowMG(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 timeDigit; + s32 timeCenti; + s32 scoreDigit; + s32 timeMin; + s32 timeSec; s32 mgAvail; - BOOL digitDrawnF; + BOOL dispZeroF; s32 nameMess; s32 i; s32 j; @@ -738,99 +764,108 @@ static void ShowMGRecord(omObjData *object, s32 page) espPosSet(work->sprList[48], 492.0f, 240.0f); espDispOn(work->sprList[7]); for (i = 0; i < 8; i++) { - digitDrawnF = FALSE; + dispZeroF = FALSE; mg = i + page * 8; if (mg >= 6) { break; } mgAvail = GWMGAvailGet(mgTbl[mg].id); - value = work->mgRecords[mg]; + value = work->mgRecord[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) { + case DISPLAY_TYPE_SCORE: + for (j = 0; j < MG_SCORE_NUM_DIGITS; j++) { + scoreDigit = GetDigit(value, 7 - j); + if (scoreDigit != 0 || dispZeroF || 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); + espBankSet(work->sprList[i * 8 + 89 + j], scoreDigit); espDispOn(work->sprList[i * 8 + 89 + j]); - digitDrawnF = TRUE; + dispZeroF = TRUE; } } break; case DISPLAY_TYPE_TIME: - sp5C = value / 3600; - sp58 = (value % 3600) / 60; - var_r26 = (value % 3600) % 60; + timeMin = value / 3600; + timeSec = (value % 3600) / 60; + timeCenti = (value % 3600) % 60; if (mgTbl[mg].id == 405 || mgTbl[mg].id == 432) { - var_r26 *= 1.6916667f; + timeCenti *= 1.6916667f; } else { - var_r26 *= 1.6666666f; + timeCenti *= 1.6666666f; } 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: - digit = GetDigitSprAt(sp5C, 1); + timeDigit = GetDigit(timeMin, 1); break; case 1: - digit = GetDigitSprAt(sp5C, 0); + timeDigit = GetDigit(timeMin, 0); break; case 3: - digit = GetDigitSprAt(sp58, 1); + timeDigit = GetDigit(timeSec, 1); break; case 4: - digit = GetDigitSprAt(sp58, 0); + timeDigit = GetDigit(timeSec, 0); break; case 6: - digit = GetDigitSprAt(var_r26, 1); + timeDigit = GetDigit(timeCenti, 1); break; case 7: - digit = GetDigitSprAt(var_r26, 0); + timeDigit = GetDigit(timeCenti, 0); break; case 2: - digit = 11; + timeDigit = 11; break; case 5: - digit = 12; + timeDigit = 12; break; } - espBankSet(work->sprList[i * 8 + 89 + j], digit); + espBankSet(work->sprList[i * 8 + 89 + j], timeDigit); espDispOn(work->sprList[i * 8 + 89 + j]); } break; } } else { - for (j = 0; j < MG_DECIMAL_NUM_DIGITS; j++) { + for (j = 0; j < MG_SCORE_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(work->window[i + 2], 60.0f, 96.0f + 40.0f * i); + OptionWinPosSet(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]); + OptionWinMesSet(work->window[i + 2], nameMess); + OptionWinDispOn(work->window[i + 2]); } } -#define MG_RECORD_SPR_IDX_TBL_SIZE 65 +#define MG_SPR_HIDE_COUNT 65 -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 const s32 mgSprHideTbl[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) +static void HideMG(omObjData *object) { RecordWork *temp_r30 = object->data; s32 i; - for (i = 0; i < MG_RECORD_SPR_IDX_TBL_SIZE; i++) { - espDispOff(temp_r30->sprList[mgRecordSprIdxTbl[i]]); + for (i = 0; i < MG_SPR_HIDE_COUNT; i++) { + espDispOff(temp_r30->sprList[mgSprHideTbl[i]]); } for (i = 0; i < 8; i++) { - fn_1_A828(temp_r30->window[i + 2]); + OptionWinDispOff(temp_r30->window[i + 2]); } } diff --git a/src/REL/option/room.c b/src/REL/option/room.c index 65a6fa9c..8a9e5d15 100755 --- a/src/REL/option/room.c +++ b/src/REL/option/room.c @@ -7,13 +7,13 @@ typedef struct { /* 0x00 */ omObjData *background; - /* 0x04 */ omObjData *rumbleArrowPair; - /* 0x08 */ omObjData *soundArrowPair; - /* 0x0C */ omObjData *recordArrowPair; - /* 0x10 */ WindowWork *optionDescWindow; - /* 0x14 */ WindowWork *btnLegendWindow; - /* 0x18 */ s32 selectedOption; - /* 0x1C */ s32 mode; + /* 0x04 */ omObjData *rumbleArrow; + /* 0x08 */ omObjData *soundArrow; + /* 0x0C */ omObjData *recordArrow; + /* 0x10 */ OptionWindow *optionDescWindow; + /* 0x14 */ OptionWindow *btnLegendWindow; + /* 0x18 */ s32 optionIdx; + /* 0x1C */ s32 execMode; /* 0x20 */ s16 unk20; /* 0x22 */ char unk22[6]; /* 0x28 */ BOOL cameraDoneF; @@ -22,162 +22,160 @@ typedef struct { #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); +static void MoveOption(omObjData *object, BOOL rightF); +static void ExecRoom(omObjData *object); +static omObjData *CreateRoomBG(void); +static void KillRoomBG(omObjData *background); +static omObjData *CreateArrow(void); +static void KillArrow(omObjData *arrow); -omObjData *lbl_1_bss_18; +omObjData *optionRoom; -static omObjFunc modes[] = { NULL, HandleRoom }; +static omObjFunc execModeTbl[] = { NULL, ExecRoom }; -omObjData *fn_1_15A4(void) +omObjData *OptionRoomCreate(void) { omObjData *object; RoomWork *work; - object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM); object->data = work; - work->selectedOption = 0; + work->optionIdx = 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); - 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(); - 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); + OptionCameraViewSet(optionCamera, 600.0f, 60.0f, 120.0f, 1); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 1); + work->background = CreateRoomBG(); + optionSound = OptionSoundCreate(); + optionRecord = OptionRecordCreate(); + optionRumble = OptionRumbleCreate(); + optionGuide = OptionGuideCreate(); + work->rumbleArrow = CreateArrow(); + work->soundArrow = CreateArrow(); + work->recordArrow = CreateArrow(); + omSetRot(work->rumbleArrow, 0.0f, 0.0f, 0.0f); + omSetRot(work->soundArrow, 0.0f, 120.0f, 0.0f); + omSetRot(work->recordArrow, 0.0f, 240.0f, 0.0f); + work->optionDescWindow = OptionWinCreate(0); + work->btnLegendWindow = OptionWinCreate(1); return object; } -void fn_1_1798(omObjData *object) +void OptionRoomKill(omObjData *object) { RoomWork *work = object->data; - 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); - KillArrowPair(work->rumbleArrowPair); - KillArrowPair(work->soundArrowPair); - KillArrowPair(work->recordArrowPair); - fn_1_A6AC(work->optionDescWindow); - fn_1_A6AC(work->btnLegendWindow); + KillRoomBG(work->background); + OptionSoundKill(optionSound); + OptionRumbleKill(optionRumble); + OptionRecordKill(optionRecord); + OptionGuideKill(optionGuide); + KillArrow(work->rumbleArrow); + KillArrow(work->soundArrow); + KillArrow(work->recordArrow); + OptionWinKill(work->optionDescWindow); + OptionWinKill(work->btnLegendWindow); HuMemDirectFree(work); } -static const float guidePosTbl[3] = { 45.0f, 165.0f, 285.0f }; +static const float guideAngleTbl[3] = { 45.0f, 165.0f, 285.0f }; -static void ChangeSelection(omObjData *object, s32 selChange) +static void MoveOption(omObjData *object, BOOL rightF) { RoomWork *work = object->data; - float sp10; - float spC; - float sp8; - float guideDestPos; + float x; + float y; + float z; + float guideAngle; - work->selectedOption += (selChange == SEL_CHANGE_LEFT) ? -1 : 1; - if (work->selectedOption < 0) { - work->selectedOption = 2; + work->optionIdx += (rightF == FALSE) ? -1 : 1; + if (work->optionIdx < 0) { + work->optionIdx = 2; } - else if (work->selectedOption >= 3) { - work->selectedOption = 0; + else if (work->optionIdx >= 3) { + work->optionIdx = 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) + (selChange == SEL_CHANGE_LEFT ? -120.0f : 120.0f), spC, 96); - if (work->selectedOption == 2 && selChange == SEL_CHANGE_LEFT) { - guideDestPos = guidePosTbl[2] - 360.0f; + OptionCameraTargetGet(optionCamera, &x, &y, &z); + OptionCameraViewSet(optionCamera, OptionCameraZoomGet(optionCamera), OptionCameraRotGet(optionCamera) + (rightF == FALSE ? -120.0f : 120.0f), y, 96); + if (work->optionIdx == 2 && rightF == FALSE) { + guideAngle = guideAngleTbl[2] - 360.0f; } - else if (work->selectedOption == 0 && selChange == SEL_CHANGE_RIGHT) { - guideDestPos = 360.0f + guidePosTbl[0]; + else if (work->optionIdx == 0 && rightF == TRUE) { + guideAngle = 360.0f + guideAngleTbl[0]; } else { - guideDestPos = guidePosTbl[work->selectedOption]; + guideAngle = guideAngleTbl[work->optionIdx]; } - fn_1_2508(lbl_1_bss_20, guideDestPos, 430.0f, 96); + OptionGuideWalkExec(optionGuide, guideAngle, 430.0f, 96); } -void fn_1_1A2C(omObjData *object, s32 mode) +void OptionRoomExecModeSet(omObjData *object, s32 execMode) { RoomWork *work = object->data; - work->mode = mode; - object->func = modes[mode]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -s32 fn_1_1A70(omObjData *object) +s32 OptionRoomExecModeGet(omObjData *object) { RoomWork *work = object->data; - return work->mode; + return work->execMode; } static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) }; -static void HandleRoom(omObjData *object) +static void ExecRoom(omObjData *object) { RoomWork *work = object->data; switch (object->unk10) { case 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); + OptionCameraViewSet(optionCamera, 600.0f, 60.0f, 120.0f, 1); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 1); work->cameraDoneF = TRUE; } object->unk10 = 1; /* fallthrough */ case 1: - if (fn_1_CB8(lbl_1_bss_10) != 0) { + if (OptionCameraDoneCheck(optionCamera) != 0) { break; } - 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)); + OptionWinAnimIn(work->optionDescWindow); + OptionWinMesSet(work->optionDescWindow, optionDescTbl[work->optionIdx]); + OptionWinAnimIn(work->btnLegendWindow); + OptionWinMesSet(work->btnLegendWindow, MAKE_MESSID(47, 14)); object->unk10 = 2; /* fallthrough */ case 2: if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { - if (fn_1_550(PAD_BUTTON_B)) { + if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); object->unk10 = 7; } - else if (fn_1_584(1)) { - ChangeSelection(object, SEL_CHANGE_LEFT); - fn_1_A704(work->optionDescWindow); - fn_1_A704(work->btnLegendWindow); + else if (OptionPadDStkRepCheck(1)) { + MoveOption(object, FALSE); + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(work->btnLegendWindow); HuAudFXPlay(0); object->unk10 = 1; } - else if (fn_1_584(2)) { - ChangeSelection(object, SEL_CHANGE_RIGHT); - fn_1_A704(work->optionDescWindow); - fn_1_A704(work->btnLegendWindow); + else if (OptionPadDStkRepCheck(2)) { + MoveOption(object, TRUE); + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(work->btnLegendWindow); HuAudFXPlay(0); object->unk10 = 1; } - else if (fn_1_550(PAD_BUTTON_A)) { - fn_1_A704(work->optionDescWindow); - fn_1_A704(work->btnLegendWindow); + else if (OptionPadCheck(PAD_BUTTON_A)) { + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(work->btnLegendWindow); HuAudFXPlay(2); object->unk10 = 3; } @@ -185,77 +183,77 @@ static void HandleRoom(omObjData *object) break; case 3: if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { - switch (work->selectedOption) { + switch (work->optionIdx) { case 0: - fn_1_3290(lbl_1_bss_30, 1); + OptionRumbleExecModeSet(optionRumble, 1); object->unk10 = 4; break; case 1: - fn_1_4388(lbl_1_bss_38, 1); + OptionSoundExecModeSet(optionSound, 1); object->unk10 = 5; break; case 2: - fn_1_82B0(lbl_1_bss_40, 1); + OptionRecordExecModeSet(optionRecord, 1); object->unk10 = 6; break; } } break; case 4: - if (fn_1_39D4(lbl_1_bss_30) == 0) { + if (OptionRumbleExecModeGet(optionRumble) == 0) { object->unk10 = 1; } break; case 5: - if (fn_1_43CC(lbl_1_bss_38) == 0) { + if (OptionSoundExecModeGet(optionSound) == 0) { object->unk10 = 1; } break; case 6: - if (fn_1_82F4(lbl_1_bss_40) == 0) { + if (OptionRecordExecModeGet(optionRecord) == 0) { object->unk10 = 1; } break; case 7: - fn_1_A704(work->optionDescWindow); - fn_1_A704(work->btnLegendWindow); + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(work->btnLegendWindow); object->unk10 = 8; /* fallthrough */ case 8: if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { - fn_1_1A2C(object, MODE_DISABLED); + OptionRoomExecModeSet(object, MODE_DISABLED); } break; } } -static omObjData *CreateBackground(void) +static omObjData *CreateRoomBG(void) { - omObjData *background; + omObjData *object; - 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; + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelShadowMapSet(object->model[0]); + return object; } -static void KillBackground(omObjData *background) +static void KillRoomBG(omObjData *object) { - Hu3DModelKill(background->model[0]); + Hu3DModelKill(object->model[0]); } -static omObjData *CreateArrowPair(void) +static omObjData *CreateArrow(void) { - omObjData *arrowPair; + omObjData *arrow; - 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; + arrow = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + Hu3DModelLayerSet(arrow->model[0], 0); + arrow->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); + return arrow; } -static void KillArrowPair(omObjData *arrow) +static void KillArrow(omObjData *arrow) { Hu3DModelKill(arrow->model[0]); } diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c index 813497f3..af0397ff 100755 --- a/src/REL/option/rumble.c +++ b/src/REL/option/rumble.c @@ -12,9 +12,9 @@ typedef struct { /* 0x04 */ omObjData *pad; /* 0x08 */ omObjData *padFilter; /* 0x0C */ omObjData *hand; - /* 0x10 */ omObjData *highlightOn; - /* 0x14 */ WindowWork *window[2]; - /* 0x20 */ s32 mode; + /* 0x10 */ omObjData *hiliteOn; + /* 0x14 */ OptionWindow *window[2]; + /* 0x20 */ s32 execMode; /* 0x20 */ BOOL rumbleF; /* 0x24 */ BOOL cameraDoneF; /* 0x28 */ s32 changeTimer; @@ -23,7 +23,7 @@ typedef struct { #define MODE_DISABLED 0 #define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this -static void HandleRumble(omObjData *object); +static void ExecRumble(omObjData *object); static omObjData *CreateHand(void); static void KillHand(omObjData *hand); static omObjData *CreateSystem(void); @@ -33,20 +33,20 @@ 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); +static void KillPadFilter(omObjData *object); +static omObjData *CreateHiliteOn(void); +static void KillHiliteOn(omObjData *object); -omObjData *lbl_1_bss_30; +omObjData *optionRumble; -static omObjFunc modes[] = { NULL, HandleRumble }; +static omObjFunc execModeTbl[] = { NULL, ExecRumble }; -omObjData *fn_1_3158(void) +omObjData *OptionRumbleCreate(void) { omObjData *object; RumbleWork *work; - object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM); object->data = work; work->rumbleF = GWGameStat.rumble; @@ -55,60 +55,60 @@ omObjData *fn_1_3158(void) work->pad = CreatePad(); ShakePad(work->pad, work->rumbleF); work->padFilter = CreatePadFilter(); - work->highlightOn = CreateHighlightOn(); + work->hiliteOn = CreateHiliteOn(); work->hand = CreateHand(); - fn_1_3290(object, MODE_DISABLED); + OptionRumbleExecModeSet(object, MODE_DISABLED); return object; } -void fn_1_322C(omObjData *object) +void OptionRumbleKill(omObjData *object) { RumbleWork *work = object->data; KillHand(work->hand); KillSystem(work->system); KillPad(work->pad); - KillHighlightOn(work->highlightOn); + KillHiliteOn(work->hiliteOn); KillPadFilter(work->padFilter); HuMemDirectFree(work); } -// SetMode -void fn_1_3290(omObjData *object, s32 mode) + +void OptionRumbleExecModeSet(omObjData *object, s32 execMode) { RumbleWork *work = object->data; - work->mode = mode; - object->func = modes[mode]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -// GetMode -s32 fn_1_39D4(omObjData *object) + +s32 OptionRumbleExecModeGet(omObjData *object) { RumbleWork *work = object->data; - return work->mode; + return work->execMode; } -static void HandleRumble(omObjData *object) +static void ExecRumble(omObjData *object) { RumbleWork *work = object->data; s32 i; switch (object->unk10) { case 0: - 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(object); + work->window[0] = OptionWinCreate(0); + work->window[1] = OptionWinCreate(1); + OptionCameraFocusSet(optionCamera, -519.62f, 135.0f, 300.0f, 0x28); + OptionCameraTargetSet(optionCamera, -315.64f, 135.0f, 182.25f, 0x28); + OptionRumbleMotionShowStart(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) { + if (OptionCameraDoneCheck(optionCamera) != 0) { break; } if (!work->cameraDoneF) { @@ -116,31 +116,31 @@ static void HandleRumble(omObjData *object) work->cameraDoneF = TRUE; Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]); } - fn_1_A6EC(work->window[1]); - fn_1_A71C(work->window[1], MAKE_MESSID(47, 15)); - fn_1_A6EC(work->window[0]); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 15)); + OptionWinAnimIn(work->window[0]); if (work->rumbleF) { - fn_1_A71C(work->window[0], MAKE_MESSID(47, 2)); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 2)); } else { - fn_1_A71C(work->window[0], MAKE_MESSID(47, 3)); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 3)); } object->unk10 = 2; /* fallthrough */ case 2: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - if (fn_1_550(PAD_BUTTON_B)) { + if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); object->unk10 = 4; } - else if (fn_1_584(8) && !work->rumbleF) { + else if (OptionPadDStkRepCheck(8) && !work->rumbleF) { StartSystemMotion(work->system, 1, TRUE); work->rumbleF = TRUE; work->changeTimer = 0; GWRumbleSet(1); object->unk10 = 3; } - else if (fn_1_584(4) && work->rumbleF) { + else if (OptionPadDStkRepCheck(4) && work->rumbleF) { StartSystemMotion(work->system, 0, TRUE); work->rumbleF = FALSE; work->changeTimer = 0; @@ -155,31 +155,31 @@ static void HandleRumble(omObjData *object) 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); + Hu3DMotionTimeSet(work->hiliteOn->model[0], 0.0f); + Hu3DModelAttrReset(work->hiliteOn->model[0], 1); } else { - Hu3DModelAttrSet(work->highlightOn->model[0], 1); + Hu3DModelAttrSet(work->hiliteOn->model[0], 1); } object->unk10 = 1; } break; case 4: - fn_1_A704(work->window[1]); - fn_1_A704(work->window[0]); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); Hu3DModelAttrSet(work->hand->model[0], 1); - fn_1_3E1C(object); + OptionRumbleMotionHideStart(object); object->unk10 = 5; /* fallthrough */ case 5: - if (work->window[1]->state == 0 && work->window[0]->state == 0 && !fn_1_3ED0(lbl_1_bss_30)) { + if (work->window[1]->state == 0 && work->window[0]->state == 0 && !OptionRumbleMotionCheck(optionRumble)) { for (i = 0; i < 2; i++) { - fn_1_A6AC(work->window[i]); + OptionWinKill(work->window[i]); } 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(object, MODE_DISABLED); + OptionCameraFocusSet(optionCamera, -519.62f, 120.0f, 300.0f, 0x28); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28); + OptionRumbleExecModeSet(object, MODE_DISABLED); } break; } @@ -189,7 +189,7 @@ static omObjData *CreateHand(void) { omObjData *hand; - hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + hand = omAddObjEx(optionObjMan, 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); @@ -210,7 +210,7 @@ static omObjData *CreateSystem(void) { omObjData *system; - system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + system = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); Hu3DModelAttrSet(system->model[0], 0x40000002); if (GWRumbleGet()) { @@ -261,7 +261,7 @@ static omObjData *CreatePad(void) { omObjData *pad; - pad = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + pad = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); Hu3DModelAttrSet(pad->model[0], 0x40000001); return pad; @@ -292,7 +292,7 @@ static omObjData *CreatePadFilter(void) { omObjData *object; - object = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 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); @@ -300,16 +300,16 @@ static omObjData *CreatePadFilter(void) return object; } -static void KillPadFilter(omObjData *padFilter) +static void KillPadFilter(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(padFilter->model[i]); + Hu3DModelKill(object->model[i]); } } -// ZoomIn -void fn_1_3D54(omObjData *object) + +void OptionRumbleMotionShowStart(omObjData *object) { RumbleWork *work = object->data; s16 model = work->padFilter->model[0]; @@ -321,8 +321,8 @@ void fn_1_3D54(omObjData *object) Hu3DModelLayerSet(work->padFilter->model[0], 2); HuAudFXPlay(0x83D); } -// ZoomOut -void fn_1_3E1C(omObjData *object) + +void OptionRumbleMotionHideStart(omObjData *object) { RumbleWork *work = object->data; s16 model = work->padFilter->model[0]; @@ -333,8 +333,8 @@ void fn_1_3E1C(omObjData *object) Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001); HuAudFXPlay(0x83E); } -// GetPadFilterMotionDone -BOOL fn_1_3ED0(omObjData *object) + +BOOL OptionRumbleMotionCheck(omObjData *object) { RumbleWork *work = object->data; s16 padFilterModel = work->padFilter->model[0]; @@ -342,26 +342,26 @@ BOOL fn_1_3ED0(omObjData *object) return !Hu3DMotionEndCheck(padFilterModel); } -static omObjData *CreateHighlightOn(void) +static omObjData *CreateHiliteOn(void) { - omObjData *highlightOn; + omObjData *object; - highlightOn = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - highlightOn->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); if (GWRumbleGet()) { - Hu3DModelAttrReset(highlightOn->model[0], 1); + Hu3DModelAttrReset(object->model[0], 1); } else { - Hu3DModelAttrSet(highlightOn->model[0], 1); + Hu3DModelAttrSet(object->model[0], 1); } - return highlightOn; + return object; } -static void KillHighlightOn(omObjData *highlightOn) +static void KillHiliteOn(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(highlightOn->model[i]); + Hu3DModelKill(object->model[i]); } } diff --git a/src/REL/option/scene.c b/src/REL/option/scene.c index b99bd621..733c324f 100755 --- a/src/REL/option/scene.c +++ b/src/REL/option/scene.c @@ -15,149 +15,147 @@ #include "rel_sqrt_consts.h" typedef struct { - /* 0x00 */ s16 spr; - /* 0x02 */ char unk02[2]; - /* 0x04 */ float opacity; - /* 0x08 */ float opacityChange; -} LRButtonWork; // Size 0xC + /* 0x00 */ s16 id; + /* 0x04 */ float tplvl; + /* 0x08 */ float speed; +} FaderWork; // Size 0xC -static void HandleLRBtn(void); +static void FadeSprite(void); static void fn_1_354(s16 arg0, s32 arg1, s32 arg2); -static void fn_1_468(void); -static void HandleScene(omObjData *arg0); +static void FadeModel(void); +static void SceneMain(omObjData *arg0); static void KillScene(void); -Process *lbl_1_bss_8; +Process *optionObjMan; static omObjData *scene; static s32 rumbleF; void ModuleProlog(void) { - lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); - omGameSysInit(lbl_1_bss_8); + optionObjMan = omInitObjMan(0x40, 0x2000); + omGameSysInit(optionObjMan); HuWinInit(1); rumbleF = GWGameStat.rumble; - scene = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, HandleScene); + scene = omAddObjEx(optionObjMan, 1000, 0, 0, 0, SceneMain); scene->unk10 = 0; - lbl_1_bss_28 = fn_1_2E04(); + optionState = OptionStateCreate(); } -void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime) +void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration) { - LRButtonWork *work; + FaderWork *work; Process *process; - 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; + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM); + work->id = sprite; + work->speed = 1.0f / duration; + if (inF) { + work->speed = work->speed; + work->tplvl = 0.0f; + } else { + work->speed = -work->speed; + work->tplvl = 1.0f; } - else { - work->opacityChange = -work->opacityChange; - work->opacity = 1.0f; - } - espDispOn(work->spr); - espTPLvlSet(work->spr, work->opacity); - process = HuPrcChildCreate(HandleLRBtn, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + espDispOn(work->id); + espTPLvlSet(work->id, work->tplvl); + process = HuPrcChildCreate(FadeSprite, 0x3000, 0x1500, 0, HuPrcCurrentGet()); process->user_data = work; } -static void HandleLRBtn(void) +static void FadeSprite(void) { - LRButtonWork *work = HuPrcCurrentGet()->user_data; + FaderWork *work = HuPrcCurrentGet()->user_data; while (TRUE) { - work->opacity += work->opacityChange; - if (work->opacity > 1.0f) { - work->opacity = 1.0f; + work->tplvl += work->speed; + if (work->tplvl > 1.0f) { + work->tplvl = 1.0f; break; } - if (work->opacity < 0.0f) { - work->opacity = 0.0f; + if (work->tplvl < 0.0f) { + work->tplvl = 0.0f; break; } - espTPLvlSet(work->spr, work->opacity); + espTPLvlSet(work->id, work->tplvl); HuPrcVSleep(); } - espTPLvlSet(work->spr, work->opacity); - if (work->opacity <= 0.0f) { - espDispOff(work->spr); + espTPLvlSet(work->id, work->tplvl); + if (work->tplvl <= 0.0f) { + espDispOff(work->id); } HuMemDirectFree(work); HuPrcEnd(); } -static void fn_1_354(s16 sprite, s32 arg1, s32 arg2) +void OptionFadeModel(s16 model, BOOL inF, s32 duration) { - LRButtonWork *work; + FaderWork *work; Process *process; - work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM); - work->spr = sprite; - work->opacityChange = 1.0f / arg2; - if (arg1 != 0) { - work->opacityChange = work->opacityChange; - work->opacity = 0.0f; + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM); + work->id = model; + work->speed = 1.0f / duration; + if (inF) { + work->speed = work->speed; + work->tplvl = 0.0f; } else { - work->opacityChange = -work->opacityChange; - work->opacity = 1.0f; + work->speed = -work->speed; + work->tplvl = 1.0f; } - Hu3DModelAttrReset(work->spr, 1); - Hu3DModelTPLvlSet(work->spr, work->opacity); - process = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + Hu3DModelAttrReset(work->id, 1); + Hu3DModelTPLvlSet(work->id, work->tplvl); + process = HuPrcChildCreate(FadeModel, 0x3000, 0x1500, 0, HuPrcCurrentGet()); process->user_data = work; } -static void fn_1_468(void) +static void FadeModel(void) { - LRButtonWork *work = HuPrcCurrentGet()->user_data; + FaderWork *work = HuPrcCurrentGet()->user_data; while (TRUE) { - work->opacity += work->opacityChange; - if (work->opacity > 1.0f) { - work->opacity = 1.0f; + work->tplvl += work->speed; + if (work->tplvl > 1.0f) { + work->tplvl = 1.0f; break; } - if (work->opacity < 0.0f) { - work->opacity = 0.0f; + if (work->tplvl < 0.0f) { + work->tplvl = 0.0f; break; } - Hu3DModelTPLvlSet(work->spr, work->opacity); + Hu3DModelTPLvlSet(work->id, work->tplvl); HuPrcVSleep(); } - Hu3DModelTPLvlSet(work->spr, work->opacity); - if (work->opacity <= 0.0f) { - Hu3DModelAttrSet(work->spr, 1); + Hu3DModelTPLvlSet(work->id, work->tplvl); + if (work->tplvl <= 0.0f) { + Hu3DModelAttrSet(work->id, 1); } HuMemDirectFree(work); HuPrcEnd(); } -BOOL fn_1_550(u16 btn) +BOOL OptionPadCheck(u16 btn) { u32 temp_r31 = HuPadBtnDown[0] & btn; return (temp_r31 != 0); } -BOOL fn_1_584(u16 arg0) +BOOL OptionPadDStkRepCheck(u16 dir) { - u32 temp_r31 = HuPadDStkRep[0] & arg0; + u32 temp_r31 = HuPadDStkRep[0] & dir; return (temp_r31 != 0); } -BOOL fn_1_5B8(u16 arg0) +BOOL OptionPadDStkCheck(u16 dir) { - u32 temp_r31 = HuPadDStk[0] & arg0; + u32 temp_r31 = HuPadDStk[0] & dir; return (temp_r31 != 0); } -static void HandleScene(omObjData *object) +static void SceneMain(omObjData *object) { switch (object->unk10) { case 0: @@ -176,7 +174,7 @@ static void HandleScene(omObjData *object) /* fallthrough */ case 3: if (WipeStatGet() == 0) { - fn_1_2F4C(lbl_1_bss_28); + OptionStateKill(optionState); if (rumbleF != GWGameStat.rumble) { omSysExitReq = 0; KillScene(); @@ -189,7 +187,7 @@ static void HandleScene(omObjData *object) static void KillScene(void) { - s16 temp_r31; + s16 sprite; if (SLSaveFlagGet() == 0) { return; @@ -199,9 +197,9 @@ static void KillScene(void) HuSprInit(); espInit(); HuPrcVSleep(); - temp_r31 = espEntry(0x860020, 0x1388, 0); - espPosSet(temp_r31, 288.0f, 240.0f); - espAttrReset(temp_r31, 4); + sprite = espEntry(0x860020, 0x1388, 0); + espPosSet(sprite, 288.0f, 240.0f); + espAttrReset(sprite, 4); Hu3DBGColorSet(0, 0, 0); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); while (WipeStatGet() != 0) { diff --git a/src/REL/option/sound.c b/src/REL/option/sound.c index 9f0e4090..64d2e379 100755 --- a/src/REL/option/sound.c +++ b/src/REL/option/sound.c @@ -14,38 +14,36 @@ #include "math.h" typedef struct { - /* 0x000 */ omObjData *objects[26]; - /* 0x068 */ WindowWork *window[13]; - /* 0x09C */ s32 mode; - /* 0x0A0 */ s16 sprList[19]; - /* 0x0C6 */ char unkC6[2]; + /* 0x000 */ omObjData *object[26]; + /* 0x068 */ OptionWindow *window[13]; + /* 0x09C */ s32 execMode; + /* 0x0A0 */ s16 sprite[19]; /* 0x0C8 */ s32 changeTimer; /* 0x0CC */ s32 selectedOption; /* 0x0D0 */ s32 soundMode; /* 0x0D4 */ s32 page; - /* 0x0D8 */ s32 lSelection; // list selection - /* 0x0DC */ s32 prevLSelection; + /* 0x0D8 */ s32 cursorPos; + /* 0x0DC */ s32 prevCursorPos; /* 0x0E0 */ s16 sndGrpSet; - /* 0x0E2 */ char unkE2[2]; /* 0x0E4 */ BOOL optionSelected; - /* 0x0E8 */ BOOL unkE8; + /* 0x0E8 */ BOOL doneF; /* 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; + /* 0x0F2 */ s16 seqStat; + /* 0x0F4 */ s16 streamStat; + /* 0x0F6 */ s16 fxStat; + /* 0x0F8 */ s32 cursorDelay; + /* 0x0FC */ s32 pageDelta; + /* 0x100 */ s32 cursorDelta; + /* 0x104 */ float cursorTime; + /* 0x108 */ float cursorSpeed; + /* 0x10C */ Process *noteSpawner; } SoundWork; // Size 0x110 typedef struct { /* 0x00 */ BOOL enabled; - /* 0x04 */ s32 noteType; - /* 0x08 */ s32 speakerId; + /* 0x04 */ s32 type; + /* 0x08 */ s32 side; /* 0x0C */ float pos; /* 0x10 */ float speed; } NoteWork; // Size 0x14 @@ -53,9 +51,9 @@ typedef struct { typedef struct { /* 0x00 */ BOOL enabled; /* 0x04 */ s32 nameMess; - /* 0x08 */ s16 audType; + /* 0x08 */ s16 type; /* 0x0A */ s16 sndGrpSet; - /* 0x0C */ s32 fxId; + /* 0x0C */ s32 id; } SndSelData; // Size 0x10 #define NUM_NOTES 16 @@ -75,47 +73,47 @@ typedef struct { #define NOTE_TYPE_QUAVER 0 #define NOTE_TYPE_QUARTER 1 -#define SPEAKER_LEFT 0 -#define SPEAKER_RIGHT 1 +#define NOTE_SIDE_LEFT 0 +#define NOTE_SIDE_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 void ExecZoom(omObjData *object); +static void ExecOptionSel(omObjData *object); +static void ExecOutputMode(omObjData *object); +static void ExecMusic(omObjData *object); +static void ExecVoice(omObjData *object); +static void LightSetCurr(omObjData *object, s32 id); +static void LightSetNone(omObjData *object); +static omObjData *CreateHand(void); +static void KillHand(omObjData *object); +static omObjData *CreateOutputModeHand(void); +static void KillOutputModeHand(omObjData *object); 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 omObjData *CreateLightObj(s32 id, BOOL off); +static void KillLightObj(omObjData *indicator); +static void LightDispOff(omObjData *object); +static void LightDispOn(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 OptionSelDisp(omObjData *object); +static void OptionSelHide(omObjData *object); +static void OutputModeDisp(omObjData *object); +static void OutputModeHide(omObjData *object); +static void MusicPageDisp(omObjData *object, s32 page); +static void MusicPageHide(omObjData *object); +static void VoicePageDisp(omObjData *object, s32 character); +static void VoicePageHide(omObjData *object); +static omObjData *CreateNoteObj(s32 type); 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 CreateNote(omObjData *object, s32 type, s32 side, s32 color); +static void CreateNoteSpawner(omObjData *object); +static void KillNoteSpawner(omObjData *object); +static void ExecNoteSpawner(void); static void PlaySound(omObjData *object); -static void FadeOutCurrSound(omObjData *object); +static void FadeSound(omObjData *object); -omObjData *lbl_1_bss_38; +omObjData *optionSound; static const s32 musicPageNameTbl[] = { MAKE_MESSID(47, 70), @@ -467,29 +465,29 @@ static const SndSelData voiceTbl[12][10] = { }, }; -static BOOL musicPageEnabledTbl[14] = { TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE }; +static BOOL musicPageOn[14] = { TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE }; -static omObjFunc modes[] = { NULL, HandleInitialScreen, HandleOptionSel, HandleSoundSettings, HandleMusic, HandleVoice }; +static omObjFunc execModeTbl[] = { NULL, ExecZoom, ExecOptionSel, ExecOutputMode, ExecMusic, ExecVoice }; -static s32 optionTextTbl[] = { MAKE_MESSID(47, 8), MAKE_MESSID(47, 10), MAKE_MESSID(47, 9) }; +static s32 choiceMess[] = { MAKE_MESSID(47, 8), MAKE_MESSID(47, 10), MAKE_MESSID(47, 9) }; -omObjData *fn_1_4028(void) +omObjData *OptionSoundCreate(void) { omObjData *object; SoundWork *work; s32 i; - object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(SoundWork), MEMORY_DEFAULT_NUM); object->data = work; work->selectedOption = 0; - work->unkE8 = FALSE; + work->doneF = FALSE; work->optionSelected = FALSE; work->bgMusicStat = -2; - work->audSeqStat = -1; - work->audSStreamStat = -1; - work->audFxStat = -1; - work->speakerNoteProcess = NULL; + work->seqStat = -1; + work->streamStat = -1; + work->fxStat = -1; + work->noteSpawner = NULL; switch (GWGameStat.sound_mode) { case 0: work->soundMode = SOUND_MODE_MONO; @@ -500,79 +498,79 @@ omObjData *fn_1_4028(void) break; } - work->objects[0] = CreateSystem(); + work->object[0] = CreateSystem(); for (i = 0; i < 6; i++) { - work->objects[i + 1] = CreateIndicator(i % 3, (i / 3) > 0); + work->object[i + 1] = CreateLightObj(i % 3, (i / 3) > 0); } - TurnOffIndicators(object); - work->objects[7] = CreateOptionHand(); - work->objects[8] = CreateSoundSettingsHand(); + LightSetNone(object); + work->object[7] = CreateHand(); + work->object[8] = CreateOutputModeHand(); for (i = 0; i < NUM_NOTES; i++) { - work->objects[i + 10] = CreateNote((i / 8) == 0 ? NOTE_TYPE_QUAVER : NOTE_TYPE_QUARTER); + work->object[i + 10] = CreateNoteObj((i / 8) == 0 ? NOTE_TYPE_QUAVER : NOTE_TYPE_QUARTER); } CreateSpr(object); - fn_1_4388(object, MODE_DISABLED); + OptionSoundExecModeSet(object, MODE_DISABLED); for (i = 0; i < NUM_BOARDS; i++) { - musicPageEnabledTbl[i + 3] = (GWGameStat.board_play_count[i] != 0) ? TRUE : FALSE; + musicPageOn[i + 3] = (GWGameStat.board_play_count[i] != 0) ? TRUE : FALSE; } - musicPageEnabledTbl[11] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; - musicPageEnabledTbl[12] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; - musicPageEnabledTbl[13] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + musicPageOn[11] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + musicPageOn[12] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; + musicPageOn[13] = (GWGameStat.field10E_bit6 != 0) ? TRUE : FALSE; return object; } -void fn_1_42DC(omObjData *object) +void OptionSoundKill(omObjData *object) { SoundWork *work = object->data; s32 i; - KillOptionHand(work->objects[7]); - KillSoundSettingsHand(work->objects[8]); - KillSystem(work->objects[0]); + KillHand(work->object[7]); + KillOutputModeHand(work->object[8]); + KillSystem(work->object[0]); for (i = 0; i < 6; i++) { - KillIndicator(work->objects[i + 1]); + KillLightObj(work->object[i + 1]); } for (i = 0; i < 16; i++) { - KillNote(work->objects[i + 10]); + KillNote(work->object[i + 10]); } KillSpr(object); HuMemDirectFree(work); } -void fn_1_4388(omObjData *object, s32 mode) +void OptionSoundExecModeSet(omObjData *object, s32 execMode) { SoundWork *work = object->data; - work->mode = mode; - object->func = modes[mode]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -s32 fn_1_43CC(omObjData *object) +s32 OptionSoundExecModeGet(omObjData *object) { SoundWork *work = object->data; - return work->mode; + return work->execMode; } -static void HandleInitialScreen(omObjData *object) +static void ExecZoom(omObjData *object) { SoundWork *work = object->data; s32 i; switch (object->unk10) { case 0: - if (!work->unkE8) { - work->window[0] = fn_1_A44C(0); - work->window[1] = fn_1_A44C(1); - work->window[2] = fn_1_A44C(2); + if (!work->doneF) { + work->window[0] = OptionWinCreate(0); + work->window[1] = OptionWinCreate(1); + work->window[2] = OptionWinCreate(2); for (i = 0; i < 10; i++) { - work->window[i + 3] = fn_1_A44C(3); + work->window[i + 3] = OptionWinCreate(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); - work->unkE8 = TRUE; + OptionCameraFocusSet(optionCamera, 0.0f, 120.0f, -600.0f, 0x28); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, -350.0f, 0x28); + work->doneF = TRUE; work->selectedOption = 0; work->optionSelected = FALSE; object->unk10 = 1; @@ -582,108 +580,108 @@ static void HandleInitialScreen(omObjData *object) } break; case 1: - if (fn_1_CB8(lbl_1_bss_10) == 0) { - fn_1_4388(object, MODE_HANDLE_OPTION_SEL); + if (OptionCameraDoneCheck(optionCamera) == 0) { + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; case 2: for (i = 0; i < 13; i++) { - fn_1_A6AC(work->window[i]); + OptionWinKill(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); - work->unkE8 = FALSE; + OptionCameraFocusSet(optionCamera, 0.0f, 120.0f, -600.0f, 0x28); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28); + work->doneF = FALSE; work->optionSelected = FALSE; - fn_1_4388(object, MODE_DISABLED); + OptionSoundExecModeSet(object, MODE_DISABLED); break; } } -static void HandleOptionSel(omObjData *object) +static void ExecOptionSel(omObjData *object) { SoundWork *work = object->data; switch (object->unk10) { case 0: - TurnOffIndicators(object); - work->lSelection = work->selectedOption; + LightSetNone(object); + work->cursorPos = work->selectedOption; if (!work->optionSelected) { - fn_1_3D54(lbl_1_bss_30); + OptionRumbleMotionShowStart(optionRumble); } else { - HideSoundSettings(object); - HideMusicTitle(object); - HideVoiceTitle(object); + OutputModeHide(object); + MusicPageHide(object); + VoicePageHide(object); } work->optionSelected = FALSE; work->cameraDoneF = FALSE; object->unk10 = 1; /* fallthrough */ case 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]); + OptionSelDisp(object); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 168)); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], choiceMess[work->cursorPos]); if (!work->cameraDoneF) { - Hu3DModelAttrReset(work->objects[7]->model[0], 1); + Hu3DModelAttrReset(work->object[7]->model[0], 1); work->cameraDoneF = TRUE; } - omSetTra(work->objects[7], -34.0f + 40.0f * work->lSelection, 120.0f, -500.0f); + omSetTra(work->object[7], -34.0f + 40.0f * work->cursorPos, 120.0f, -500.0f); object->unk10 = 2; /* fallthrough */ case 2: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - if (fn_1_550(PAD_BUTTON_A)) { - work->selectedOption = work->lSelection; + if (OptionPadCheck(PAD_BUTTON_A)) { + work->selectedOption = work->cursorPos; work->optionSelected = TRUE; - TurnOnIndicator(object, work->selectedOption); + LightSetCurr(object, work->selectedOption); HuAudFXPlay(2); object->unk10 = 3; } - else if (fn_1_550(PAD_BUTTON_B)) { + else if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); object->unk10 = 3; } - else if (fn_1_584(1) && work->lSelection > 0) { - work->lSelection--; + else if (OptionPadDStkRepCheck(1) && work->cursorPos > 0) { + work->cursorPos--; HuAudFXPlay(0); object->unk10 = 1; } - else if (fn_1_584(2) && work->lSelection < 2) { - work->lSelection++; + else if (OptionPadDStkRepCheck(2) && work->cursorPos < 2) { + work->cursorPos++; HuAudFXPlay(0); object->unk10 = 1; } } break; case 3: - fn_1_A704(work->window[1]); - fn_1_A704(work->window[0]); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); if (!work->optionSelected) { - fn_1_3E1C(lbl_1_bss_30); + OptionRumbleMotionHideStart(optionRumble); } - Hu3DModelAttrSet(work->objects[7]->model[0], 1); + Hu3DModelAttrSet(work->object[7]->model[0], 1); object->unk10 = 4; /* fallthrough */ case 4: - if ((work->optionSelected || !fn_1_3ED0(lbl_1_bss_30)) && work->window[0]->state == 0 && work->window[1]->state == 0) { + if ((work->optionSelected || !OptionRumbleMotionCheck(optionRumble)) && work->window[0]->state == 0 && work->window[1]->state == 0) { if (work->optionSelected) { switch (work->selectedOption) { case 0: - fn_1_4388(object, MODE_HANDLE_SOUND); + OptionSoundExecModeSet(object, MODE_HANDLE_SOUND); break; case 1: - fn_1_4388(object, MODE_HANDLE_MUSIC); + OptionSoundExecModeSet(object, MODE_HANDLE_MUSIC); break; case 2: - fn_1_4388(object, MODE_HANDLE_VOICE); + OptionSoundExecModeSet(object, MODE_HANDLE_VOICE); break; } } else { - HideOptionSel(object); - fn_1_4388(object, MODE_HANDLE_INITIAL_SCREEN); + OptionSelHide(object); + OptionSoundExecModeSet(object, MODE_HANDLE_INITIAL_SCREEN); } } break; @@ -695,66 +693,66 @@ static const s32 soundModeTbl[] = { 1, 0 }; static const s32 soundModeNameTbl[] = { MAKE_MESSID(47, 11), MAKE_MESSID(47, 12) }; -static void HandleSoundSettings(omObjData *object) +static void ExecOutputMode(omObjData *object) { SoundWork *work = object->data; - Vec sp8; + Vec pos; switch (object->unk10) { case 0: - HideOptionSel(object); + OptionSelHide(object); work->optionSelected = FALSE; - work->lSelection = work->soundMode; + work->cursorPos = work->soundMode; work->cameraDoneF = FALSE; work->optionSelected = FALSE; - CreateNoteProcess(object); + CreateNoteSpawner(object); object->unk10 = 1; /* fallthrough */ case 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]); + OutputModeDisp(object); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 168)); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], soundModeNameTbl[work->soundMode]); if (!work->cameraDoneF) { - Hu3DModelAttrReset(work->objects[8]->model[0], 1); + Hu3DModelAttrReset(work->object[8]->model[0], 1); work->cameraDoneF = TRUE; } - sp8.x = -38.0f; - sp8.y = 140.0f - 15.0f * work->lSelection; - sp8.z = -500.0f; - omSetTra(work->objects[8], sp8.x, sp8.y, sp8.z); + pos.x = -38.0f; + pos.y = 140.0f - 15.0f * work->cursorPos; + pos.z = -500.0f; + omSetTra(work->object[8], pos.x, pos.y, pos.z); object->unk10 = 2; /* fallthrough */ case 2: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - if (fn_1_550(PAD_BUTTON_A)) { - work->soundMode = work->lSelection; + if (OptionPadCheck(PAD_BUTTON_A)) { + work->soundMode = work->cursorPos; if (work->soundMode == SOUND_MODE_STEREO) { HuAudFXPlay(0x841); } else { HuAudFXPlay(0x842); } - GWGameStat.sound_mode = outputModeTbl[work->lSelection]; - msmSysSetOutputMode(outputModeTbl[work->lSelection]); - OSSetSoundMode(soundModeTbl[work->lSelection]); + GWGameStat.sound_mode = outputModeTbl[work->cursorPos]; + msmSysSetOutputMode(outputModeTbl[work->cursorPos]); + OSSetSoundMode(soundModeTbl[work->cursorPos]); work->optionSelected = TRUE; - DisplaySoundSettings(object); + OutputModeDisp(object); work->changeTimer = 0; object->unk10 = 3; } - else if (fn_1_550(PAD_BUTTON_B)) { + else if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); object->unk10 = 4; } - else if (fn_1_584(8) != 0 && work->lSelection > 0) { - work->lSelection--; + else if (OptionPadDStkRepCheck(8) != 0 && work->cursorPos > 0) { + work->cursorPos--; HuAudFXPlay(0); object->unk10 = 1; } - else if (fn_1_584(4) != 0 && work->lSelection < 1) { - work->lSelection++; + else if (OptionPadDStkRepCheck(4) != 0 && work->cursorPos < 1) { + work->cursorPos++; HuAudFXPlay(0); object->unk10 = 1; } @@ -767,121 +765,121 @@ static void HandleSoundSettings(omObjData *object) } break; case 4: - KillNoteProcess(object); - fn_1_A704(work->window[1]); - fn_1_A704(work->window[0]); - Hu3DModelAttrSet(work->objects[8]->model[0], 1); + KillNoteSpawner(object); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + Hu3DModelAttrSet(work->object[8]->model[0], 1); object->unk10 = 5; /* fallthrough */ case 5: if (work->window[0]->state == 0 && work->window[1]->state == 0) { work->optionSelected = FALSE; - DisplaySoundSettings(object); + OutputModeDisp(object); work->optionSelected = TRUE; - fn_1_4388(object, MODE_HANDLE_OPTION_SEL); + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void HandleMusic(omObjData *object) +static void ExecMusic(omObjData *object) { SoundWork *work = object->data; - float temp_f31; - float temp_f30; - float temp_f29; - float temp_f28; - float temp_f27; - float temp_f26; + float oldX; + float oldY; + float x; + float y; + float newX; + float newY; s32 i; - s32 newSelection; - s32 sp8; + s32 cursorPosNew; + s32 cursorPosOld; - sp8 = work->lSelection; + cursorPosOld = work->cursorPos; switch (object->unk10) { case 0: - HideOptionSel(object); + OptionSelHide(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; + work->cursorDelta = 0; + work->pageDelta = 0; + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[15], 2); + espPosSet(work->sprite[14], 36.0f, 222.0f); + espPosSet(work->sprite[15], 544.0f, 222.0f); + OptionFadeSprite(work->sprite[14], 1, 5); + OptionFadeSprite(work->sprite[15], 1, 5); + work->cursorDelay = 0; object->unk10 = 1; /* fallthrough */ case 1: - work->lSelection = 0; - work->prevLSelection = 0; - if (work->pageChange != 0) { + work->cursorPos = 0; + work->prevCursorPos = 0; + if (work->pageDelta != 0) { do { - work->page += work->pageChange; + work->page += work->pageDelta; if (work->page >= 14) { work->page = 0; } else if (work->page < 0) { work->page = 13; } - } while (!musicPageEnabledTbl[work->page]); + } while (!musicPageOn[work->page]); HuAudFXPlay(0x840); - if (work->pageChange > 0) { - espBankSet(work->sprList[15], 3); + if (work->pageDelta > 0) { + espBankSet(work->sprite[15], 3); } else { - espBankSet(work->sprList[14], 1); + espBankSet(work->sprite[14], 1); } - work->selectionChangeTimer = 5; - work->pageChange = 0; + work->cursorDelay = 5; + work->pageDelta = 0; } object->unk10 = 2; /* fallthrough */ case 2: - if (work->lSelectionChange != 0) { - newSelection = work->lSelection + work->lSelectionChange; - if (newSelection > 9) { - newSelection = 9; + if (work->cursorDelta != 0) { + cursorPosNew = work->cursorPos + work->cursorDelta; + if (cursorPosNew > 9) { + cursorPosNew = 9; } - else if (newSelection < 0) { - newSelection = 0; + else if (cursorPosNew < 0) { + cursorPosNew = 0; } - if (!musicTbl[work->page][newSelection].enabled) { - if (work->lSelection < 5) { - for (i = newSelection; i >= 5; i--) { + if (!musicTbl[work->page][cursorPosNew].enabled) { + if (work->cursorPos < 5) { + for (i = cursorPosNew; i >= 5; i--) { if (musicTbl[work->page][i].enabled) { - newSelection = i; + cursorPosNew = i; break; } } if (i < 5) { - newSelection = work->lSelection; + cursorPosNew = work->cursorPos; } } else { - newSelection = work->lSelection; + cursorPosNew = work->cursorPos; } } - work->prevLSelection = work->lSelection; - if (work->lSelection != newSelection) { - work->lSelection = newSelection; + work->prevCursorPos = work->cursorPos; + if (work->cursorPos != cursorPosNew) { + work->cursorPos = cursorPosNew; HuAudFXPlay(0x840); } - work->lSelectionChange = 0; + work->cursorDelta = 0; } object->unk10 = 3; /* fallthrough */ case 3: - 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) { + MusicPageDisp(object, work->page); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 10)); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 18)); + espDispOn(work->sprite[18]); + work->cursorTime = 0.0f; + work->cursorSpeed = 0.0625f; + if (work->cursorDelay > 0) { object->unk10 = 5; } else { @@ -889,31 +887,31 @@ static void HandleMusic(omObjData *object) } /* fallthrough */ case 4: - 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) { + oldX = 166.0f + 244.0f * (work->prevCursorPos / 5); + oldY = 144.0f + 29.0f * (work->prevCursorPos % 5); + newX = 166.0f + 244.0f * (work->cursorPos / 5); + newY = 144.0f + 29.0f * (work->cursorPos % 5); + x = oldX + work->cursorTime * (newX - oldX); + y = oldY + work->cursorTime * (newY - oldY); + espPosSet(work->sprite[18], x, y); + if ((work->cursorTime += work->cursorSpeed) < 1.0f) { break; } - espPosSet(work->sprList[18], 166.0f + 244.0f * (work->lSelection / 5), 144.0f + 29.0f * (work->lSelection % 5)); + espPosSet(work->sprite[18], 166.0f + 244.0f * (work->cursorPos / 5), 144.0f + 29.0f * (work->cursorPos % 5)); object->unk10 = 6; break; case 5: - if (work->selectionChangeTimer > 0) { - work->selectionChangeTimer--; + if (work->cursorDelay > 0) { + work->cursorDelay--; break; } - espBankSet(work->sprList[14], 0); - espBankSet(work->sprList[15], 2); + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[15], 2); object->unk10 = 6; /* fallthrough */ case 6: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - if (fn_1_550(PAD_BUTTON_A)) { + if (OptionPadCheck(PAD_BUTTON_A)) { if (work->bgMusicStat == -2) { HuAudFadeOut(0x64); work->bgMusicStat = -1; @@ -924,91 +922,91 @@ static void HandleMusic(omObjData *object) } PlaySound(object); } - else if (fn_1_550(PAD_BUTTON_B)) { + else if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); work->changeTimer = 0; object->unk10 = 7; } else { - if (fn_1_5B8(1) != 0 && work->lSelection >= 5) { - work->lSelectionChange -= 5; + if (OptionPadDStkCheck(1) != 0 && work->cursorPos >= 5) { + work->cursorDelta -= 5; } - else if (fn_1_5B8(2) != 0 && work->lSelection < 5) { - work->lSelectionChange += 5; + else if (OptionPadDStkCheck(2) != 0 && work->cursorPos < 5) { + work->cursorDelta += 5; } - if (fn_1_5B8(8) != 0 && work->lSelection % 5 > 0) { - work->lSelectionChange--; + if (OptionPadDStkCheck(8) != 0 && work->cursorPos % 5 > 0) { + work->cursorDelta--; } - else if (fn_1_5B8(4) != 0 && work->lSelection % 5 < 4) { - work->lSelectionChange++; + else if (OptionPadDStkCheck(4) != 0 && work->cursorPos % 5 < 4) { + work->cursorDelta++; } - if (work->lSelectionChange != 0) { + if (work->cursorDelta != 0) { object->unk10 = 2; } - else if (fn_1_550(PAD_TRIGGER_L)) { - work->pageChange = -1; + else if (OptionPadCheck(PAD_TRIGGER_L)) { + work->pageDelta = -1; } - else if (fn_1_550(PAD_TRIGGER_R)) { - work->pageChange = 1; + else if (OptionPadCheck(PAD_TRIGGER_R)) { + work->pageDelta = 1; } - if (work->pageChange != 0) { + if (work->pageDelta != 0) { object->unk10 = 1; } } } break; case 7: - 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); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + FadeSound(object); + OptionFadeSprite(work->sprite[14], 0, 5); + OptionFadeSprite(work->sprite[15], 0, 5); object->unk10 = 8; /* fallthrough */ case 8: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - espDispOff(work->sprList[18]); + espDispOff(work->sprite[18]); if (work->bgMusicStat == -1) { work->bgMusicStat = HuAudSeqPlay(0x2D); } - fn_1_4388(object, MODE_HANDLE_OPTION_SEL); + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void HandleVoice(omObjData *object) +static void ExecVoice(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 newSelection; + float oldX; + float oldY; + float x; + float y; + float newX; + float newY; + s32 i; + s32 cursorPosNew; switch (object->unk10) { case 0: - HideOptionSel(object); + OptionSelHide(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; + work->cursorDelta = 0; + work->pageDelta = 0; + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[15], 2); + espPosSet(work->sprite[14], 36.0f, 222.0f); + espPosSet(work->sprite[15], 544.0f, 222.0f); + OptionFadeSprite(work->sprite[14], 1, 5); + OptionFadeSprite(work->sprite[15], 1, 5); + work->cursorDelay = 0; object->unk10 = 3; /* fallthrough */ case 1: - work->lSelection = 0; - work->prevLSelection = 0; - if (work->pageChange != 0) { - work->page += work->pageChange; + work->cursorPos = 0; + work->prevCursorPos = 0; + if (work->pageDelta != 0) { + work->page += work->pageDelta; if (work->page > 11) { work->page = 0; } @@ -1016,61 +1014,61 @@ static void HandleVoice(omObjData *object) work->page = 11; } HuAudFXPlay(0x840); - if (work->pageChange > 0) { - espBankSet(work->sprList[15], 3); + if (work->pageDelta > 0) { + espBankSet(work->sprite[15], 3); } else { - espBankSet(work->sprList[14], 1); + espBankSet(work->sprite[14], 1); } - work->selectionChangeTimer = 5; - work->pageChange = 0; + work->cursorDelay = 5; + work->pageDelta = 0; } object->unk10 = 2; /* fallthrough */ case 2: - if (work->lSelectionChange != 0) { - newSelection = work->lSelection + work->lSelectionChange; - if (newSelection > 9) { - newSelection = 9; + if (work->cursorDelta != 0) { + cursorPosNew = work->cursorPos + work->cursorDelta; + if (cursorPosNew > 9) { + cursorPosNew = 9; } - else if (newSelection < 0) { - newSelection = 0; + else if (cursorPosNew < 0) { + cursorPosNew = 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; + if (!voiceTbl[work->page][cursorPosNew].enabled) { + if (work->cursorPos < 5) { + for (i = cursorPosNew; i >= 5; i--) { + if (voiceTbl[work->page][i].enabled) { + cursorPosNew = i; break; } } - if (var_r28 < 5) { - newSelection = work->lSelection; + if (i < 5) { + cursorPosNew = work->cursorPos; } } else { - newSelection = work->lSelection; + cursorPosNew = work->cursorPos; } } - work->prevLSelection = work->lSelection; - if (work->lSelection != newSelection) { - work->lSelection = newSelection; + work->prevCursorPos = work->cursorPos; + if (work->cursorPos != cursorPosNew) { + work->cursorPos = cursorPosNew; HuAudFXPlay(0x840); } - work->lSelectionChange = 0; + work->cursorDelta = 0; } object->unk10 = 3; /* fallthrough */ case 3: - 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) { + VoicePageDisp(object, work->page); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 9)); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 18)); + espDispOn(work->sprite[18]); + work->cursorTime = 0.0f; + work->cursorSpeed = 0.0625f; + if (work->cursorDelay > 0) { object->unk10 = 5; } else { @@ -1078,170 +1076,170 @@ static void HandleVoice(omObjData *object) } /* fallthrough */ case 4: - 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) { + oldX = 166.0f + 244.0f * (work->prevCursorPos / 5); + oldY = 144.0f + 29.0f * (work->prevCursorPos % 5); + newX = 166.0f + 244.0f * (work->cursorPos / 5); + newY = 144.0f + 29.0f * (work->cursorPos % 5); + x = oldX + work->cursorTime * (newX - oldX); + y = oldY + work->cursorTime * (newY - oldY); + espPosSet(work->sprite[18], x, y); + if ((work->cursorTime += work->cursorSpeed) < 1.0f) { break; } - espPosSet(work->sprList[18], 166.0f + 244.0f * (work->lSelection / 5), 144.0f + 29.0f * (work->lSelection % 5)); + espPosSet(work->sprite[18], 166.0f + 244.0f * (work->cursorPos / 5), 144.0f + 29.0f * (work->cursorPos % 5)); object->unk10 = 6; break; case 5: - if (work->selectionChangeTimer > 0) { - work->selectionChangeTimer--; + if (work->cursorDelay > 0) { + work->cursorDelay--; break; } - espBankSet(work->sprList[14], 0); - espBankSet(work->sprList[15], 2); + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[15], 2); object->unk10 = 6; /* fallthrough */ case 6: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - if (fn_1_550(PAD_BUTTON_A)) { + if (OptionPadCheck(PAD_BUTTON_A)) { PlaySound(object); } - else if (fn_1_550(PAD_BUTTON_B)) { + else if (OptionPadCheck(PAD_BUTTON_B)) { HuAudFXPlay(3); work->changeTimer = 0; object->unk10 = 7; } else { - if (fn_1_5B8(1) != 0 && work->lSelection >= 5) { - work->lSelectionChange -= 5; + if (OptionPadDStkCheck(1) != 0 && work->cursorPos >= 5) { + work->cursorDelta -= 5; } - else if (fn_1_5B8(2) != 0 && work->lSelection < 5) { - work->lSelectionChange += 5; + else if (OptionPadDStkCheck(2) != 0 && work->cursorPos < 5) { + work->cursorDelta += 5; } - if (fn_1_5B8(8) != 0 && work->lSelection % 5 > 0) { - work->lSelectionChange--; + if (OptionPadDStkCheck(8) != 0 && work->cursorPos % 5 > 0) { + work->cursorDelta--; } - else if (fn_1_5B8(4) != 0 && work->lSelection % 5 < 4) { - work->lSelectionChange++; + else if (OptionPadDStkCheck(4) != 0 && work->cursorPos % 5 < 4) { + work->cursorDelta++; } - if (work->lSelectionChange != 0) { + if (work->cursorDelta != 0) { object->unk10 = 2; } - else if (fn_1_550(PAD_TRIGGER_L)) { - work->pageChange = -1; + else if (OptionPadCheck(PAD_TRIGGER_L)) { + work->pageDelta = -1; } - else if (fn_1_550(PAD_TRIGGER_R)) { - work->pageChange = 1; + else if (OptionPadCheck(PAD_TRIGGER_R)) { + work->pageDelta = 1; } - if (work->pageChange != 0) { + if (work->pageDelta != 0) { object->unk10 = 1; } } } break; case 7: - 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); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + FadeSound(object); + OptionFadeSprite(work->sprite[14], 0, 5); + OptionFadeSprite(work->sprite[15], 0, 5); object->unk10 = 8; /* fallthrough */ case 8: if (work->window[0]->state == 0 && work->window[1]->state == 0) { - espDispOff(work->sprList[18]); - fn_1_4388(object, MODE_HANDLE_OPTION_SEL); + espDispOff(work->sprite[18]); + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void TurnOnIndicator(omObjData *object, s32 id) +static void LightSetCurr(omObjData *object, s32 id) { SoundWork *work = object->data; switch (id) { case 0: - HideIndicator(work->objects[1]); - HideIndicator(work->objects[5]); - HideIndicator(work->objects[6]); - ShowIndicator(work->objects[4]); - ShowIndicator(work->objects[2]); - ShowIndicator(work->objects[3]); + LightDispOff(work->object[1]); + LightDispOff(work->object[5]); + LightDispOff(work->object[6]); + LightDispOn(work->object[4]); + LightDispOn(work->object[2]); + LightDispOn(work->object[3]); break; case 1: - HideIndicator(work->objects[4]); - HideIndicator(work->objects[2]); - HideIndicator(work->objects[6]); - ShowIndicator(work->objects[1]); - ShowIndicator(work->objects[5]); - ShowIndicator(work->objects[3]); + LightDispOff(work->object[4]); + LightDispOff(work->object[2]); + LightDispOff(work->object[6]); + LightDispOn(work->object[1]); + LightDispOn(work->object[5]); + LightDispOn(work->object[3]); break; case 2: - HideIndicator(work->objects[4]); - HideIndicator(work->objects[5]); - HideIndicator(work->objects[3]); - ShowIndicator(work->objects[1]); - ShowIndicator(work->objects[2]); - ShowIndicator(work->objects[6]); + LightDispOff(work->object[4]); + LightDispOff(work->object[5]); + LightDispOff(work->object[3]); + LightDispOn(work->object[1]); + LightDispOn(work->object[2]); + LightDispOn(work->object[6]); break; } } -static void TurnOffIndicators(omObjData *object) +static void LightSetNone(omObjData *object) { SoundWork *work = object->data; - HideIndicator(work->objects[4]); - HideIndicator(work->objects[5]); - HideIndicator(work->objects[6]); - ShowIndicator(work->objects[1]); - ShowIndicator(work->objects[2]); - ShowIndicator(work->objects[3]); + LightDispOff(work->object[4]); + LightDispOff(work->object[5]); + LightDispOff(work->object[6]); + LightDispOn(work->object[1]); + LightDispOn(work->object[2]); + LightDispOn(work->object[3]); } -static omObjData *CreateOptionHand(void) +static omObjData *CreateHand(void) { - omObjData *optionHand; + omObjData *object; - 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; + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 13)); + Hu3DModelLayerSet(object->model[0], 2); + Hu3DModelAttrSet(object->model[0], 0x40000001); + omSetRot(object, -80.0f, 45.0f, 0.0f); + omSetSca(object, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(object->model[0], 1); + return object; } -static void KillOptionHand(omObjData *optionHand) +static void KillHand(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(optionHand->model[i]); + Hu3DModelKill(object->model[i]); } } -static omObjData *CreateSoundSettingsHand(void) +static omObjData *CreateOutputModeHand(void) { - omObjData *soundSettingsHand; + omObjData *object; - 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; + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); + Hu3DModelLayerSet(object->model[0], 2); + Hu3DModelAttrSet(object->model[0], 0x40000001); + omSetRot(object, 0.0f, -90.0f, 0.0f); + omSetSca(object, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(object->model[0], 1); + return object; } -static void KillSoundSettingsHand(omObjData *settingsHand) +static void KillOutputModeHand(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(settingsHand->model[i]); + Hu3DModelKill(object->model[i]); } } @@ -1249,7 +1247,7 @@ static omObjData *CreateSystem(void) { omObjData *system; - system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + system = omAddObjEx(optionObjMan, 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); @@ -1265,45 +1263,45 @@ static void KillSystem(omObjData *system) } } -static const Vec indicatorPosTbl[3] = { { -40.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 40.0f, 0.0f, 0.0f } }; +static const Vec lightPosTbl[3] = { { -40.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 40.0f, 0.0f, 0.0f } }; -static omObjData *CreateIndicator(s32 id, BOOL off) +static omObjData *CreateLightObj(s32 id, BOOL off) { - omObjData *indicator; + omObjData *object; - indicator = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); if (off) { - indicator->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 5)); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 5)); } else { - indicator->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 4)); + object->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; + Hu3DModelAttrSet(object->model[0], 0x40000001); + Hu3DModelLayerSet(object->model[0], 0); + omSetTra(object, lightPosTbl[id].x, lightPosTbl[id].y, lightPosTbl[id].z); + return object; } -static void KillIndicator(omObjData *indicator) +static void KillLightObj(omObjData *object) { s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(indicator->model[i]); + Hu3DModelKill(object->model[i]); } } -static void HideIndicator(omObjData *indicator) +static void LightDispOff(omObjData *indicator) { Hu3DModelAttrReset(indicator->model[0], 1); } -static void ShowIndicator(omObjData *indicator) +static void LightDispOn(omObjData *indicator) { Hu3DModelAttrSet(indicator->model[0], 1); } -static s32 sprTbl[] = { +static s32 spriteDataTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 38), DATA_MAKE_NUM(DATADIR_OPTION, 39), DATA_MAKE_NUM(DATADIR_OPTION, 40), @@ -1331,12 +1329,12 @@ static void CreateSpr(omObjData *object) s32 i; for (i = 0; i < 19; i++) { - work->sprList[i] = espEntry(sprTbl[i], 0, 0); - espDrawNoSet(work->sprList[i], 0x40); - espDispOff(work->sprList[i]); + work->sprite[i] = espEntry(spriteDataTbl[i], 0, 0); + espDrawNoSet(work->sprite[i], 0x40); + espDispOff(work->sprite[i]); } - espBankSet(work->sprList[14], 0); - espBankSet(work->sprList[15], 2); + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[15], 2); HuSprExecLayerSet(0x40, 1); } @@ -1346,199 +1344,200 @@ static void KillSpr(omObjData *object) s32 i; for (i = 0; i < 19; i++) { - espKill(work->sprList[i]); + espKill(work->sprite[i]); } } -static void DisplayOptionSel(omObjData *object) +static void OptionSelDisp(omObjData *object) { SoundWork *work = object->data; - float temp_f31 = 288.0f; - float temp_f30 = 188.0f; + float x = 288.0f; + float y = 188.0f; - 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) { + espPosSet(work->sprite[12], 288.0f, 72.0f); + espPosSet(work->sprite[0], x + -112.0f, y); + espPosSet(work->sprite[3], x + -112.0f, y); + espPosSet(work->sprite[1], x, y); + espPosSet(work->sprite[4], x, y); + espPosSet(work->sprite[2], x + 112.0f, y); + espPosSet(work->sprite[5], x + 112.0f, y); + espDispOn(work->sprite[12]); + switch (work->cursorPos) { case 0: - espDispOn(work->sprList[3]); - espDispOn(work->sprList[1]); - espDispOn(work->sprList[2]); - espDispOff(work->sprList[0]); - espDispOff(work->sprList[4]); - espDispOff(work->sprList[5]); + espDispOn(work->sprite[3]); + espDispOn(work->sprite[1]); + espDispOn(work->sprite[2]); + espDispOff(work->sprite[0]); + espDispOff(work->sprite[4]); + espDispOff(work->sprite[5]); break; case 1: - espDispOn(work->sprList[0]); - espDispOn(work->sprList[4]); - espDispOn(work->sprList[2]); - espDispOff(work->sprList[3]); - espDispOff(work->sprList[1]); - espDispOff(work->sprList[5]); + espDispOn(work->sprite[0]); + espDispOn(work->sprite[4]); + espDispOn(work->sprite[2]); + espDispOff(work->sprite[3]); + espDispOff(work->sprite[1]); + espDispOff(work->sprite[5]); break; case 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]); + espDispOn(work->sprite[0]); + espDispOn(work->sprite[1]); + espDispOn(work->sprite[5]); + espDispOff(work->sprite[3]); + espDispOff(work->sprite[4]); + espDispOff(work->sprite[2]); break; } } -static const s32 optionSelSprIdxTbl[] = { 12, 0, 1, 2, 3, 4, 5 }; - -static void HideOptionSel(omObjData *object) +static void OptionSelHide(omObjData *object) { + static const s32 sprHideTbl[] = { 12, 0, 1, 2, 3, 4, 5 }; SoundWork *work = object->data; s32 i; for (i = 0; i < 7; i++) { - espDispOff(work->sprList[optionSelSprIdxTbl[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } } -static void DisplaySoundSettings(omObjData *object) +static void OutputModeDisp(omObjData *object) { SoundWork *work = object->data; - float temp_f31 = 290.0f; - float temp_f30 = 192.0f; + float x = 290.0f; + float y = 192.0f; - 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) { + espPosSet(work->sprite[13], 288.0f, 72.0f); + espPosSet(work->sprite[6], x, y - 32.0f); + espPosSet(work->sprite[7], x, y - 32.0f); + espPosSet(work->sprite[8], x, y + 32.0f); + espPosSet(work->sprite[9], x, y + 32.0f); + switch (work->cursorPos) { case 0: - espPosSet(work->sprList[17], temp_f31, temp_f30 - 32.0f); + espPosSet(work->sprite[17], x, y - 32.0f); break; case 1: - espPosSet(work->sprList[17], temp_f31, temp_f30 + 32.0f); + espPosSet(work->sprite[17], x, y + 32.0f); break; } - espDispOn(work->sprList[13]); - switch (work->lSelection) { + espDispOn(work->sprite[13]); + switch (work->cursorPos) { case 0: - espDispOn(work->sprList[6]); - espDispOn(work->sprList[9]); - espDispOff(work->sprList[7]); - espDispOff(work->sprList[8]); + espDispOn(work->sprite[6]); + espDispOn(work->sprite[9]); + espDispOff(work->sprite[7]); + espDispOff(work->sprite[8]); break; case 1: - espDispOn(work->sprList[7]); - espDispOn(work->sprList[8]); - espDispOff(work->sprList[6]); - espDispOff(work->sprList[9]); + espDispOn(work->sprite[7]); + espDispOn(work->sprite[8]); + espDispOff(work->sprite[6]); + espDispOff(work->sprite[9]); break; } if (work->optionSelected) { - espDispOn(work->sprList[17]); + espDispOn(work->sprite[17]); } else { - espDispOff(work->sprList[17]); + espDispOff(work->sprite[17]); } } -static const s32 soundSettingsSprTbl[] = { 13, 6, 7, 8, 9 }; -static void HideSoundSettings(omObjData *object) + +static void OutputModeHide(omObjData *object) { + static const s32 sprHideTbl[] = { 13, 6, 7, 8, 9 }; SoundWork *work = object->data; s32 i; for (i = 0; i < 5; i++) { - espDispOff(work->sprList[soundSettingsSprTbl[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } } -static void DisplayMusicTitle(omObjData *object, s32 page) +static void MusicPageDisp(omObjData *object, s32 page) { SoundWork *work = object->data; s32 i; - espPosSet(work->sprList[10], 288.0f, 72.0f); - espDispOn(work->sprList[10]); - fn_1_A7F0(work->window[2]); + espPosSet(work->sprite[10], 288.0f, 72.0f); + espDispOn(work->sprite[10]); + OptionWinDispOn(work->window[2]); for (i = 0; i < 10; i++) { - 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)); + OptionWinDispOn(work->window[i + 3]); + OptionWinPosSet(work->window[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); } - fn_1_A71C(work->window[2], musicPageNameTbl[page]); + OptionWinMesSet(work->window[2], musicPageNameTbl[page]); for (i = 0; i < 10; i++) { - fn_1_A71C(work->window[i + 3], musicTbl[page][i].nameMess); + OptionWinMesSet(work->window[i + 3], musicTbl[page][i].nameMess); } } -static const s32 musicTitleSprIdxTbl[] = { 10 }; -static void HideMusicTitle(omObjData *object) +static void MusicPageHide(omObjData *object) { + static const s32 sprHideTbl[] = { 10 }; SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(work->sprList[musicTitleSprIdxTbl[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } - fn_1_A828(work->window[2]); + OptionWinDispOff(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(work->window[i + 3]); + OptionWinDispOff(work->window[i + 3]); } } -static void DisplayVoice(omObjData *object, s32 character) +static void VoicePageDisp(omObjData *object, s32 character) { SoundWork *work = object->data; s32 i; - espPosSet(work->sprList[11], 288.0f, 72.0f); - espDispOn(work->sprList[11]); - fn_1_A7F0(work->window[2]); + espPosSet(work->sprite[11], 288.0f, 72.0f); + espDispOn(work->sprite[11]); + OptionWinDispOn(work->window[2]); for (i = 0; i < 10; i++) { - 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)); + OptionWinDispOn(work->window[i + 3]); + OptionWinPosSet(work->window[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); } - fn_1_A71C(work->window[2], voiceCharNameTbl[character]); + OptionWinMesSet(work->window[2], voiceCharNameTbl[character]); for (i = 0; i < 10; i++) { - fn_1_A71C(work->window[i + 3], voiceTbl[character][i].nameMess); + OptionWinMesSet(work->window[i + 3], voiceTbl[character][i].nameMess); } } -static const s32 voiceTitleSprIdxTbl[] = { 11, 0 }; -static void HideVoiceTitle(omObjData *object) + +static void VoicePageHide(omObjData *object) { + static const s32 sprHideTbl[] = { 11, 0 }; SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(work->sprList[voiceTitleSprIdxTbl[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } - fn_1_A828(work->window[2]); + OptionWinDispOff(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(work->window[i + 3]); + OptionWinDispOff(work->window[i + 3]); } } -static s32 noteSprTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 7), DATA_MAKE_NUM(DATADIR_OPTION, 8) }; +static s32 noteMdlTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 7), DATA_MAKE_NUM(DATADIR_OPTION, 8) }; -static omObjData *CreateNote(s32 noteType) +static omObjData *CreateNoteObj(s32 type) { omObjData *note; NoteWork *noteWork; - note = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + note = omAddObjEx(optionObjMan, 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]); + noteWork->type = type; + note->model[0] = Hu3DModelCreateFile(noteMdlTbl[type]); Hu3DModelAttrSet(note->model[0], 0x40000001); Hu3DModelLayerSet(note->model[0], 2); Hu3DModelAttrReset(note->model[0], 2); @@ -1559,39 +1558,39 @@ static void KillNote(omObjData *note) static void HandleNote(omObjData *note) { NoteWork *noteWork = note->data; - float temp_f31; + float time; float scale; - float var_f29; - float rot; - float temp_f27; + float angle; + float zRot; + float radius; float x; float z; float y; - float temp_f23; + float tplvl; Hu3DModelAttrReset(note->model[0], 1); - temp_f31 = sind(45.0f * noteWork->pos); - temp_f31 = temp_f31 * temp_f31; - switch (noteWork->speakerId) { - case SPEAKER_LEFT: - var_f29 = 174.5f + 7.0f * temp_f31; - rot = -15.0 + 30.0 * sind(1440.0f * temp_f31); + time = sind(45.0f * noteWork->pos); + time = time * time; + switch (noteWork->side) { + case NOTE_SIDE_LEFT: + angle = 174.5f + 7.0f * time; + zRot = -15.0 + 30.0 * sind(1440.0f * time); break; - case SPEAKER_RIGHT: - var_f29 = 185.5f - (7.0f * temp_f31); - rot = 15.0 - 30.0 * sind(1440.0f * temp_f31); + case NOTE_SIDE_RIGHT: + angle = 185.5f - (7.0f * time); + zRot = 15.0 - 30.0 * sind(1440.0f * time); break; } - temp_f23 = sind(180.0f * noteWork->pos); - temp_f27 = 500.0f - 25.0f * temp_f31; - x = temp_f27 * -sind(var_f29); - z = temp_f27 * cosd(var_f29); + tplvl = sind(180.0f * noteWork->pos); + radius = 500.0f - 25.0f * time; + x = radius * -sind(angle); + z = radius * cosd(angle); y = 160.0f - 15.0f * noteWork->pos; - scale = 0.5 + 2.0 * sind(90.0f * temp_f31); + scale = 0.5 + 2.0 * sind(90.0f * time); omSetTra(note, x, y, z); - Hu3DModelTPLvlSet(note->model[0], temp_f23); + Hu3DModelTPLvlSet(note->model[0], tplvl); omSetSca(note, scale, scale, scale); - omSetRot(note, 0.0f, 0.0f, rot); + omSetRot(note, 0.0f, 0.0f, zRot); if ((noteWork->pos += noteWork->speed) < 1.0f) { return; } @@ -1601,70 +1600,70 @@ static void HandleNote(omObjData *note) note->unk10 = 0; } -static void SpawnNote(omObjData *object, s32 noteType, s32 speakerId, s32 color) +static void CreateNote(omObjData *object, s32 type, s32 side, s32 color) { - omObjData *note; - NoteWork *var_r31; + omObjData *noteObj; + NoteWork *note; s32 i; 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) { + noteObj = ((SoundWork *)object->data)->object[i + 10]; + note = noteObj->data; + if (!note->enabled && note->type == type) { break; } } 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; + Hu3DMotionTimeSet(noteObj->model[0], 2.0f * color); + Hu3DMotionStartEndSet(noteObj->model[0], 2.0f * color, 2.0f * color + 1.0f); + note->enabled = TRUE; + note->side = side; + note->pos = 0.0f; + note->speed = 0.011111111f; + noteObj->func = HandleNote; + noteObj->unk10 = 0; } } -static void CreateNoteProcess(omObjData *object) +static void CreateNoteSpawner(omObjData *object) { SoundWork *work = object->data; - work->speakerNoteProcess = HuPrcChildCreate(HandleNoteProcess, 0x64, 0x2000, 0, HuPrcCurrentGet()); - work->speakerNoteProcess->user_data = object; + work->noteSpawner = HuPrcChildCreate(ExecNoteSpawner, 0x64, 0x2000, 0, HuPrcCurrentGet()); + work->noteSpawner->user_data = object; } -static void KillNoteProcess(omObjData *object) +static void KillNoteSpawner(omObjData *object) { SoundWork *work = object->data; - HuPrcKill(work->speakerNoteProcess); + HuPrcKill(work->noteSpawner); } -static void HandleNoteProcess(void) +static void ExecNoteSpawner(void) { omObjData *object; SoundWork *work; - s32 noteType; + s32 type; s32 color; object = HuPrcCurrentGet()->user_data; work = object->data; while (TRUE) { - switch (work->lSelection) { + switch (work->cursorPos) { case 0: - noteType = NOTE_TYPE_QUARTER; + type = NOTE_TYPE_QUARTER; color = frandmod(7); - SpawnNote(object, noteType, SPEAKER_LEFT, color); - noteType = NOTE_TYPE_QUAVER; + CreateNote(object, type, NOTE_SIDE_LEFT, color); + type = NOTE_TYPE_QUAVER; color = frandmod(7); - SpawnNote(object, noteType, SPEAKER_RIGHT, color); + CreateNote(object, type, NOTE_SIDE_RIGHT, color); break; case 1: - noteType = NOTE_TYPE_QUAVER; + type = NOTE_TYPE_QUAVER; color = frandmod(7); - SpawnNote(object, noteType, SPEAKER_LEFT, color); - SpawnNote(object, noteType, SPEAKER_RIGHT, color); + CreateNote(object, type, NOTE_SIDE_LEFT, color); + CreateNote(object, type, NOTE_SIDE_RIGHT, color); break; } HuPrcSleep(24); @@ -1677,28 +1676,28 @@ static void PlaySound(omObjData *object) SndSelData *sndSelData; if (work->selectedOption == 1) { - sndSelData = (SndSelData *)&musicTbl[work->page][work->lSelection]; + sndSelData = (SndSelData *)&musicTbl[work->page][work->cursorPos]; } else { - sndSelData = (SndSelData *)&voiceTbl[work->page][work->lSelection]; + sndSelData = (SndSelData *)&voiceTbl[work->page][work->cursorPos]; } if (sndSelData->enabled) { - FadeOutCurrSound(object); - switch (sndSelData->audType) { + FadeSound(object); + switch (sndSelData->type) { case 1: - work->audSStreamStat = HuAudSStreamPlay(sndSelData->fxId); + work->streamStat = HuAudSStreamPlay(sndSelData->id); break; case 28: if (sndSelData->sndGrpSet != work->sndGrpSet) { HuAudSndGrpSetSet(sndSelData->sndGrpSet); } - work->audFxStat = HuAudFXPlay(sndSelData->fxId); + work->fxStat = HuAudFXPlay(sndSelData->id); break; default: if (sndSelData->sndGrpSet != work->sndGrpSet && sndSelData->sndGrpSet != 2) { HuAudSndGrpSetSet(sndSelData->sndGrpSet); } - work->audSeqStat = HuAudSeqPlay(sndSelData->fxId); + work->seqStat = HuAudSeqPlay(sndSelData->id); break; } work->sndGrpSet = sndSelData->sndGrpSet; @@ -1706,21 +1705,21 @@ static void PlaySound(omObjData *object) } } -static void FadeOutCurrSound(omObjData *object) +static void FadeSound(omObjData *object) { SoundWork *work = object->data; - if (work->audSeqStat != -1) { - HuAudSeqFadeOut(work->audSeqStat, 0x64); - work->audSeqStat = -1; + if (work->seqStat != -1) { + HuAudSeqFadeOut(work->seqStat, 0x64); + work->seqStat = -1; } - if (work->audSStreamStat != -1) { - HuAudSStreamFadeOut(work->audSStreamStat, 0x64); - work->audSStreamStat = -1; + if (work->streamStat != -1) { + HuAudSStreamFadeOut(work->streamStat, 0x64); + work->streamStat = -1; } - if (work->audFxStat != -1) { - HuAudFXFadeOut(work->audFxStat, 0x64); - work->audFxStat = -1; + if (work->fxStat != -1) { + HuAudFXFadeOut(work->fxStat, 0x64); + work->fxStat = -1; } HuPrcSleep(20); } diff --git a/src/REL/option/state.c b/src/REL/option/state.c index 86b6ed63..a2fc6f37 100755 --- a/src/REL/option/state.c +++ b/src/REL/option/state.c @@ -7,7 +7,7 @@ #include "dolphin.h" typedef struct { - /* 0x00 */ WindowWork *window; + /* 0x00 */ OptionWindow *window; /* 0x04 */ s32 quitTimer; /* 0x08 */ s16 light; } StateWork; // Size 0xC @@ -18,9 +18,9 @@ typedef struct { GXColor color; } UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 -static void HandleState(omObjData *object); +static void ExecState(omObjData *object); -omObjData *lbl_1_bss_28; +omObjData *optionState; static UnkLightDataStruct lightTbl = { { 0.0f, 300.0f, 0.0f }, @@ -34,18 +34,18 @@ static Vec shadowPosTbl[3] = { { 0.0f, 0.0f, 0.0f }, }; -omObjData *fn_1_2E04(void) +omObjData *OptionStateCreate(void) { omObjData *object; StateWork *work; LightData *lightData; - object = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, HandleState); + object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); 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(); - work->window = fn_1_A44C(0); + optionCamera = OptionCameraCreate(); + optionRoom = OptionRoomCreate(); + work->window = OptionWinCreate(0); Hu3DLighInit(); work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color); Hu3DGLightInfinitytSet(work->light); @@ -56,17 +56,17 @@ omObjData *fn_1_2E04(void) return object; } -void fn_1_2F4C(omObjData *object) +void OptionStateKill(omObjData *object) { StateWork *work = object->data; - fn_1_A3C(lbl_1_bss_10); - fn_1_1798(lbl_1_bss_18); - fn_1_A6AC(work->window); + OptionCameraKill(optionCamera); + OptionRoomKill(optionRoom); + OptionWinKill(work->window); HuMemDirectFree(work); } -static void HandleState(omObjData *object) +static void ExecState(omObjData *object) { StateWork *work = object->data; @@ -82,32 +82,32 @@ static void HandleState(omObjData *object) if (WipeStatGet() != 0 || work->window->state != 0) { break; } - fn_1_1A2C(lbl_1_bss_18, 1); + OptionRoomExecModeSet(optionRoom, 1); object->unk10 = 3; /* fallthrough */ case 3: - if (fn_1_1A70(lbl_1_bss_18) != 0) { + if (OptionRoomExecModeGet(optionRoom) != 0) { break; } object->unk10 = 4; /* fallthrough */ case 4: - fn_1_A6EC(work->window); - fn_1_A71C(work->window, MAKE_MESSID(47, 167)); // Would you like to leave? + OptionWinAnimIn(work->window); + OptionWinMesSet(work->window, MAKE_MESSID(47, 167)); // Would you like to leave? object->unk10 = 5; /* fallthrough */ case 5: if (work->window->state != 0) { break; } - fn_1_A880(work->window, 1); + OptionWinChoiceSet(work->window, 1); object->unk10 = 6; /* fallthrough */ case 6: if (work->window->state != 0) { break; } - fn_1_A704(work->window); + OptionWinAnimOut(work->window); if (work->window->choice == 0) { work->quitTimer = 0; object->unk10 = 7; diff --git a/src/REL/option/window.c b/src/REL/option/window.c index e401f0fd..6bb32d8d 100755 --- a/src/REL/option/window.c +++ b/src/REL/option/window.c @@ -5,18 +5,18 @@ #include "game/process.h" #include "game/sprite.h" -static void HandleWindow(void); +static void ExecWindow(void); -WindowWork *fn_1_A44C(s32 id) +OptionWindow *OptionWinCreate(s32 id) { - WindowWork *work; + OptionWindow *work; - work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WindowWork), MEMORY_DEFAULT_NUM); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(OptionWindow), 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 = HuPrcChildCreate(ExecWindow, 0x2000, 0x2000, 0, optionObjMan); work->process->user_data = work; work->id = id; switch (work->id) { @@ -45,33 +45,33 @@ WindowWork *fn_1_A44C(s32 id) break; } HuWinDrawNoSet(work->window, 0x3F); - fn_1_A828(work); + OptionWinDispOff(work); HuSprExecLayerSet(0x3F, 2); return work; } -void fn_1_A6AC(WindowWork *work) +void OptionWinKill(OptionWindow *work) { HuWinExCleanup(work->window); HuPrcKill(work->process); HuMemDirectFree(work); } -void fn_1_A6EC(WindowWork *work) +void OptionWinAnimIn(OptionWindow *work) { if (!work->visible) { work->state = 1; } } -void fn_1_A704(WindowWork *work) +void OptionWinAnimOut(OptionWindow *work) { if (work->visible) { work->state = 2; } } -void fn_1_A71C(WindowWork *work, s32 mess) +void OptionWinMesSet(OptionWindow *work, s32 mess) { if (work->state == 0) { HuWinMesSet(work->window, mess); @@ -81,32 +81,29 @@ void fn_1_A71C(WindowWork *work, s32 mess) } } -static void fn_1_A770(WindowWork *work, s32 mess, s16 index) +void OptionWinInsertMesSet(OptionWindow *work, s32 mess, s16 index) { HuWinInsertMesSet(work->window, mess, index); } -// SetWindowPosition -void fn_1_A7B0(WindowWork *work, float x, float y) +void OptionWinPosSet(OptionWindow *work, float x, float y) { HuWinPosSet(work->window, x, y); } -// DisplayWindow -void fn_1_A7F0(WindowWork *work) +void OptionWinDispOn(OptionWindow *work) { HuWinDispOn(work->window); work->visible = TRUE; } -// HideWindow -void fn_1_A828(WindowWork *work) +void OptionWinDispOff(OptionWindow *work) { HuWinDispOff(work->window); work->visible = FALSE; } -static void fn_1_A860(WindowWork *work) +void OptionWinMesWait(OptionWindow *work) { if (work->state == 0) { work->state = 3; @@ -114,7 +111,7 @@ static void fn_1_A860(WindowWork *work) work->messWaitSignal = TRUE; } -void fn_1_A880(WindowWork *work, s32 choice) +void OptionWinChoiceSet(OptionWindow *work, s32 choice) { if (work->state == 0) { work->state = 4; @@ -123,19 +120,19 @@ void fn_1_A880(WindowWork *work, s32 choice) work->choice = choice; } -static void HandleWindow(void) +static void ExecWindow(void) { - WindowWork *work = HuPrcCurrentGet()->user_data; + OptionWindow *work = HuPrcCurrentGet()->user_data; while (TRUE) { switch (work->state) { case 1: - fn_1_A7F0(work); + OptionWinDispOn(work); HuWinExAnimIn(work->window); break; case 2: HuWinExAnimOut(work->window); - fn_1_A828(work); + OptionWinDispOff(work); break; case 3: HuWinMesWait(work->window); From 1f98b52170aa54e8f6d7e669f9d7592e976a05c9 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 22 Jun 2024 13:23:09 -0500 Subject: [PATCH 3/4] Add acosf --- include/math.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/math.h b/include/math.h index 540b5f3d..419d4d50 100644 --- a/include/math.h +++ b/include/math.h @@ -54,6 +54,7 @@ _MATH_INLINE float cosf(float x) { return (float)cos((double)x); } _MATH_INLINE float atan2f(float y, float x) { return (float)atan2((double)y, (double)x); } _MATH_INLINE float atanf(float x) { return (float)atan((double)x); } _MATH_INLINE float asinf(float x) { return (float)asin((double)x); } +_MATH_INLINE float acosf(float x) { return (float)acos((double)x); } _MATH_INLINE float fmodf(float x, float m) { return (float)fmod((double)x, (double)m); } From cfb483324858b02e6195bb11746fea27a3678158 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 22 Jun 2024 13:25:01 -0500 Subject: [PATCH 4/4] Adjust hsfdraw to use acosf --- src/game/hsfdraw.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 7018f952..36bba085 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -2171,10 +2171,7 @@ void Hu3DDrawPost(void) { PSMTXIdentity(spC0); } else { PSVECCrossProduct(&sp3C, &sp54, &sp48); - temp_f27 = PSVECDotProduct(&sp54, &sp3C); - temp_f26 = acos(temp_f27); - temp_f25 = temp_f26; - temp_f28 = temp_f25; + temp_f28 = acosf(PSVECDotProduct(&sp54, &sp3C)); PSMTXRotAxisRad(spC0, &sp48, temp_f28); } PSMTXConcat(spC0, sp90, sp60); @@ -2313,10 +2310,7 @@ static void ObjDraw(HsfDrawObject *arg0) { PSMTXIdentity(spB0); } else { PSVECCrossProduct(&sp2C, &sp44, &sp38); - temp_f28 = PSVECDotProduct(&sp44, &sp2C); - temp_f27 = acos(temp_f28); - temp_f26 = temp_f27; - temp_f29 = temp_f26; + temp_f29 = acosf(PSVECDotProduct(&sp44, &sp2C)); PSMTXRotAxisRad(spB0, &sp38, temp_f29); } PSMTXConcat(spB0, sp80, sp50);