diff --git a/config/GMPE01_00/rels/option/symbols.txt b/config/GMPE01_00/rels/option/symbols.txt index d5ad45af..eba33444 100644 --- a/config/GMPE01_00/rels/option/symbols.txt +++ b/config/GMPE01_00/rels/option/symbols.txt @@ -1,143 +1,145 @@ _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 -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 -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 -fn_1_D44 = .text:0x00000D44; // type:function size:0x28 scope:local -fn_1_D6C = .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 -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 -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 -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 -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 -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 -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_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 -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 -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 -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 -fn_1_A8A4 = .text:0x0000A8A4; // type:function size:0x108 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +__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,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 -lbl_1_rodata_BC = .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 -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0xC scope:local -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC scope:local +optionDescTbl = .rodata:0x000000D4; // 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 @@ -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 +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 -lbl_1_rodata_1308 = .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 -lbl_1_rodata_1330 = .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 -lbl_1_rodata_134C = .rodata:0x0000134C; // type:object size:0x4 scope:local -lbl_1_rodata_1350 = .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 @@ -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,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 -lbl_1_data_68 = .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 -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 +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 -lbl_1_data_108 = .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 -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 +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 -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 +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 -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 -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 +rumbleF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte +scene = .bss:0x00000004; // type:object size:0x4 scope:local 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 8334ff77..3052b323 100755 --- a/include/REL/option.h +++ b/include/REL/option.h @@ -6,80 +6,85 @@ #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 +} OptionWindow; // 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 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 *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); +BOOL OptionPadCheck(u16 btn); +BOOL OptionPadDStkRepCheck(u16 arg0); +BOOL OptionPadDStkCheck(u16 arg0); -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); +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 *arg0); -void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3); +void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z); +s32 OptionCameraDoneCheck(omObjData *object); -omObjData *fn_1_2E04(void); -void fn_1_2F4C(omObjData *arg0); +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 *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); +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 *arg0); -void fn_1_4388(omObjData *arg0, s32 arg1); -s32 fn_1_43CC(omObjData *arg0); +omObjData *OptionStateCreate(void); +void OptionStateKill(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); +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); -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); +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/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); } diff --git a/src/REL/option/camera.c b/src/REL/option/camera.c index a9d3d31d..99e2aa68 100755 --- a/src/REL/option/camera.c +++ b/src/REL/option/camera.c @@ -6,232 +6,247 @@ #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 pos; + /* 0x0C */ Vec target; + /* 0x18 */ Vec up; + /* 0x24 */ float zoom; + /* 0x28 */ float rot; + /* 0x2C */ Vec posPrev; + /* 0x38 */ Vec targetPrev; /* 0x44 */ char unk44[0xC]; - /* 0x50 */ float unk50; - /* 0x54 */ float unk54; - /* 0x58 */ Vec unk58; - /* 0x64 */ Vec unk64; + /* 0x50 */ float prevZoom; + /* 0x54 */ float prevRot; + /* 0x58 */ Vec posTarget; + /* 0x64 */ Vec posFocus; /* 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 timeEye; + /* 0x88 */ float eyeSpeed; + /* 0x8C */ float timeTarget; + /* 0x90 */ float targetSpeed; + /* 0x94 */ float timeRot; + /* 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 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 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 *OptionCameraCreate(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(optionObjMan, 1001, 0, 0, 3, ExecCameraObj); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM); + object->data = work; + 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->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(var_r30, 600.0f, 60.0f, 120.0f, 1); - fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1); - return var_r30; + 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 *arg0) { - HuMemDirectFree(arg0->data); +void OptionCameraKill(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 OptionCameraTargetSet(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->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 *arg0, float arg1, float arg2, float arg3, s32 arg4) { - UnkCameraDataStruct *temp_r31 = arg0->data; +void OptionCameraFocusSet(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->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 *arg0, float arg1, float arg2, float arg3, s32 arg4) { - UnkCameraDataStruct *temp_r31 = arg0->data; +void OptionCameraViewSet(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->posFocus.y = y; + work->zoomTarget = zoom; + work->rotTarget = rot; + work->targetPrev.y = work->target.y; + work->prevZoom = work->zoom; + work->prevRot = work->rot; + work->timeRot = 0.0f; + work->rotSpeed = 1.0f / duration; } -float fn_1_BF8(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; - float temp_f31; +// GetZoom +float OptionCameraZoomGet(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 OptionCameraRotGet(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; +// Getpos +void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) +{ + CameraWork *temp_r31 = object->data; - *arg1 = temp_r31->unk00.x; - *arg2 = temp_r31->unk00.y; - *arg3 = temp_r31->unk00.z; + *x = temp_r31->pos.x; + *y = temp_r31->pos.y; + *z = temp_r31->pos.z; } -void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) { - UnkCameraDataStruct *temp_r31 = arg0->data; +// Gettarget +void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) +{ + CameraWork *work = object->data; - *arg1 = temp_r31->unk0C.x; - *arg2 = temp_r31->unk0C.y; - *arg3 = temp_r31->unk0C.z; + *x = work->target.x; + *y = work->target.y; + *z = work->target.z; } -s32 fn_1_CB8(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; +// CameraDone +s32 OptionCameraDoneCheck(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->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) { var_r29 = 0; } - if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) { + if (var_r29 == 0 && !(work->timeEye < 1.0f)) { var_r30 = 0; } return var_r30; } -static void fn_1_D44(omObjData *arg0) { - fn_1_D6C(arg0); +static void ExecCameraObj(omObjData *object) +{ + ExecCamera(object); } -static void fn_1_D6C(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; - float temp_f28; - float temp_f31; - float temp_f30; +static void ExecCamera(omObjData *object) +{ + CameraWork *work = object->data; + float weight; + float dx; + float dz; - 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->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 (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->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 (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->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; } - 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->target.x = work->zoom * -sind(work->rot); + work->target.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; + 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, 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->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 *arg0) { - UnkCameraDataStruct *temp_r31; +static void CameraExecDebug(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->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 fn_1_14E4(omObjData *arg0) { - UnkCameraDataStruct *temp_r31 = arg0->data; +static void CameraPrintDebug(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->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 c48edf1f..2487f72c 100755 --- a/src/REL/option/guide.c +++ b/src/REL/option/guide.c @@ -6,225 +6,231 @@ #include "game/memory.h" #include "dolphin.h" -#include "math.h" +#include "ext_math.h" typedef struct { - /* 0x00 */ s32 unk00; - /* 0x04 */ s16 unk04; - /* 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; + /* 0x00 */ s32 execMode; + /* 0x04 */ s16 motion; + /* 0x08 */ Vec pos; + /* 0x14 */ Vec newPos; + /* 0x20 */ Vec rot; + /* 0x2C */ Vec posDelta; + /* 0x38 */ float distRemain; + /* 0x3C */ float angle; + /* 0x40 */ float angleEnd; + /* 0x44 */ float camDist; /* 0x48 */ char unk48[0xC]; - /* 0x54 */ float unk54; - /* 0x58 */ float unk58; + /* 0x54 */ float time; + /* 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); -static float fn_1_2D00(float arg0, float arg1, float arg2); +#define MODE_DISABLED 0 +#define MODE_HANDLE_GUIDE 1 -omObjData *lbl_1_bss_20; +static void SetExecMode(omObjData *object, s32 mode); +static s32 GetExecMode(omObjData *object); +static void ExecGuide(omObjData *object); +static void UpdateGuide(omObjData *object); +static float LerpAngle(float arg0, float arg1, float arg2); -static const s32 lbl_1_rodata_E0[] = { +omObjData *optionGuide; + +static const s32 guideMotTbl[] = { 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 execModeTbl[] = { NULL, ExecGuide }; -omObjData *fn_1_21F8(void) { - omObjData *var_r31; - UnkGuideDataStruct *temp_r30; +omObjData *OptionGuideCreate(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(optionObjMan, 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->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++) { - 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(guideMotTbl[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); + SetExecMode(object, MODE_DISABLED); + UpdateGuide(object); + return object; } -void fn_1_241C(omObjData *arg0) { - UnkGuideDataStruct *temp_r29 = arg0->data; +void OptionGuideKill(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 SetExecMode(omObjData *object, s32 execMode) +{ + GuideWork *work = object->data; - temp_r31->unk00 = arg1; - arg0->func = lbl_1_data_98[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->execMode = execMode; + object->func = execModeTbl[execMode]; + object->unk10 = 0; + object->unk10 = 0; } -static s32 fn_1_24EC(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; +static s32 GetExecMode(omObjData *object) +{ + GuideWork *work = object->data; - return temp_r31->unk00; + return work->execMode; } -void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) { - UnkGuideDataStruct *temp_r31 = arg0->data; +void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration) +{ + 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->angleEnd = angleEnd; + work->camDist = camDist; + work->time = 0.0f; + work->speed = 1.0f / duration; + work->motion = 0; + SetExecMode(object, MODE_HANDLE_GUIDE); } -static void fn_1_25AC(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; - float var_f31; - float var_f30; +static void ExecGuide(omObjData *object) +{ + GuideWork *work = object->data; + float angle; + float weight; - 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->angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); + if (work->angle < 0.0f) { + work->angle += 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; + 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->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 ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + if ((work->time += work->speed) < 1.0f) { break; } - var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 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; } - 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(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->time = 0.0f; + object->unk10 = 2; /* fallthrough */ case 2: - if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + if ((work->time += 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->posDelta.x = 0.0f; + work->posDelta.y = 0.0f; + work->posDelta.z = 0.0f; + UpdateGuide(object); + SetExecMode(object, MODE_DISABLED); break; } - fn_1_2A18(arg0); + UpdateGuide(object); } -static void fn_1_2A18(omObjData *arg0) { - UnkGuideDataStruct *temp_r31 = arg0->data; - s16 var_r29; +static void UpdateGuide(omObjData *object) +{ + GuideWork *work = object->data; + s16 motion; - 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; + 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; } - 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) { - var_r29 = 2; - } else { - var_r29 = 1; + work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f); + if (8.0f <= work->distRemain) { + motion = 2; + } + else { + motion = 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->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(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) { - float var_f30; - float var_f31; +static float LerpAngle(float start, float end, float time) +{ + 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 27c98655..d625d764 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_SCORE_NUM_DIGITS 8 +#define MG_TIME_NUM_DIGITS 8 + +#define DISPLAY_TYPE_TIME 0 +#define DISPLAY_TYPE_SCORE 1 typedef struct { - /* 0x000 */ omObjData *unk00; - /* 0x004 */ omObjData *unk04; - /* 0x008 */ UnkWindowDataStruct *unk08[10]; - /* 0x030 */ s32 unk30; - /* 0x034 */ s16 unk34[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 + /* 0x00 */ s32 playCount; + /* 0x04 */ s32 winCount[8]; + /* 0x24 */ s32 maxCoins; + /* 0x28 */ s32 maxStars; +} BoardRecordData; // Size 0x2C -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 { + /* 0x000 */ omObjData *system; + /* 0x004 */ omObjData *hand; + /* 0x008 */ OptionWindow *window[10]; + /* 0x030 */ s32 execMode; + /* 0x034 */ s16 sprList[153]; + /* 0x166 */ s16 unk166[3]; + /* 0x16C */ s32 recordType; + /* 0x170 */ s32 board; + /* 0x174 */ s32 mgPage; + /* 0x178 */ BoardRecordData boardRecord[6]; + /* 0x280 */ s32 mgRecord[6]; + /* 0x298 */ s32 cameraDoneF; + /* 0x29C */ s32 changeTimer; +} RecordWork; // Size 0x2A0 -omObjData *lbl_1_bss_40; +typedef struct { + /* 0x00 */ s32 id; + /* 0x04 */ s32 mess; + /* 0x08 */ s32 displayType; +} MGTable; // Size 0x0C -static const s32 lbl_1_rodata_13C0[] = { 0, 1, 2, 3, 5, 10 }; +#define MODE_DISABLED 0 +#define MODE_HANDLE_RECORD 1 -static omObjFunc lbl_1_data_210[] = { - NULL, - fn_1_8310 -}; +static void ExecRecord(omObjData *object); +static omObjData *CreateSystem(void); +static void KillSystem(omObjData *object); +static void StartSystemMotion(omObjData *object, s32 type); +static omObjData *CreateHand(void); +static void KillHand(omObjData *object); +static void CreateSpr(omObjData *object); +static void KillSpr(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 *fn_1_80E4(void) { - omObjData *temp_r29; - UnkRecordDataStruct01 *temp_r3; +omObjData *optionRecord; + +static const s32 mgRecordIdxTbl[] = { 0, 1, 2, 3, 5, 10 }; + +static omObjFunc execModeTbl[] = { NULL, ExecRecord }; + +omObjData *OptionRecordCreate(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(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->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->boardRecord[i].winCount[character] = GWBoardWinCountGet(character, i); } } for (i = 0; i < 6; i++) { - temp_r3->unk280[i] = GWMGRecordGet(lbl_1_rodata_13C0[i]); + work->mgRecord[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); + OptionRecordExecModeSet(object, MODE_DISABLED); + return object; } -void fn_1_825C(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +void OptionRecordKill(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 OptionRecordExecModeSet(omObjData *object, s32 execMode) +{ + RecordWork *work = object->data; - temp_r31->unk30 = arg1; - arg0->func = lbl_1_data_210[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->execMode = execMode; + object->func = execModeTbl[execMode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_82F4(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +s32 OptionRecordExecModeGet(omObjData *object) +{ + RecordWork *work = object->data; - return temp_r31->unk30; + return work->execMode; } -static void fn_1_8310(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - Vec sp8; +static void ExecRecord(omObjData *object) +{ + RecordWork *work = object->data; + Vec pos; 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] = OptionWinCreate(0); + work->window[1] = OptionWinCreate(1); for (i = 0; i < 8; i++) { - temp_r31->unk08[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); - temp_r31->unk170 = 0; - temp_r31->unk174 = 0; - temp_r31->unk298 = 0; - arg0->unk10 = 1; + 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); - 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; + 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) { + OptionFadeSprite(work->sprList[47], 1, 10); + OptionFadeSprite(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); + HideBoard(object); + HideMG(object); + HideTotal(object); + switch (work->recordType) { + case RECORD_TYPE_BOARD: + if (work->board < 6) { + ShowBoard(object, work->board); } - fn_1_A6EC(temp_r31->unk08[0]); - fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 5)); + else { + ShowTotal(object); + } + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(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: + ShowMG(object, work->mgPage); + OptionWinAnimIn(work->window[0]); + OptionWinMesSet(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; + 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 * temp_r31->unk16C; - omSetTra(temp_r31->unk04, sp8.x, sp8.y, sp8.z); - arg0->unk10 = 3; + 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: - 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 (OptionPadCheck(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 (OptionPadDStkRepCheck(8) != 0 && work->recordType == RECORD_TYPE_MG) { + work->recordType = RECORD_TYPE_BOARD; + work->board = 0; + StartSystemMotion(work->system, work->recordType); + OptionFadeSprite(work->sprList[47], 1, 5); + OptionFadeSprite(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 (OptionPadDStkRepCheck(4) != 0 && work->recordType == RECORD_TYPE_BOARD) { + work->recordType = RECORD_TYPE_MG; + work->mgPage = 0; + StartSystemMotion(work->system, work->recordType); + OptionFadeSprite(work->sprList[47], 0, 5); + OptionFadeSprite(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 (OptionPadCheck(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 (OptionPadCheck(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); + OptionRumbleMotionHideStart(optionRumble); + if (work->recordType == RECORD_TYPE_BOARD) { + OptionFadeSprite(work->sprList[47], 0, 10); + OptionFadeSprite(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; + OptionWinAnimOut(work->window[0]); + OptionWinAnimOut(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 && OptionRumbleMotionCheck(optionRumble) == 0) { for (i = 0; i < 10; i++) { - fn_1_A6AC(temp_r31->unk08[i]); + OptionWinKill(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); - fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); - fn_1_82B0(arg0, 0); + 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; } } -static omObjData *fn_1_8A88(void) { - omObjData *temp_r31; +static omObjData *CreateSystem(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, 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; + 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 fn_1_8B58(omObjData *arg0) { +static void KillSystem(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } } -static void fn_1_8BAC(omObjData *arg0, s32 arg1) { - s16 temp_r31 = arg0->model[0]; +static void StartSystemMotion(omObjData *object, s32 type) +{ + s16 model = object->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(object->model[0], 0x40000002); } -static omObjData *fn_1_8C84(void) { - omObjData *temp_r31; +static omObjData *CreateHand(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, 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; + 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 fn_1_8D80(omObjData *arg0) { +static void KillHand(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->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,349 @@ 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 GetDigit(s32 value, s32 place) +{ + s32 i; - var_r31 = 1; - while (arg1-- != 0) { - var_r31 *= 10; + i = 1; + while (place-- != 0) { + i *= 10; } - return (arg0 % (var_r31 * 10)) / var_r31; + return (value % (i * 10)) / i; } -static void fn_1_8F38(omObjData *arg0, s32 arg1) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 temp_r28; +static void ShowBoard(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->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], GetDigit(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->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], GetDigit(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->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], GetDigit(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], GetDigit(work->boardRecord[work->board].winCount[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]); + OptionWinDispOn(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)); + 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)); } -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_SPR_HIDE_COUNT 53 + +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 fn_1_96B4(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static void HideBoard(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_SPR_HIDE_COUNT; i++) { + espDispOff(work->sprList[boardSprHideTbl[i]]); } for (i = 0; i < 4; i++) { - fn_1_A828(temp_r31->unk08[i + 2]); + OptionWinDispOff(work->window[i + 2]); } } -static void fn_1_9750(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 var_r27; +static void ShowTotal(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->boardRecord[j].winCount[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], GetDigit(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]); + OptionWinPosSet(work->window[2], 136.0f, 96.0f); + OptionWinMesSet(work->window[2], MAKE_MESSID(47, 23)); + OptionWinDispOn(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_SPR_HIDE_COUNT 33 + +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 fn_1_9A94(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; +static void HideTotal(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_SPR_HIDE_COUNT; i++) { + espDispOff(work->sprList[totalSprHideTbl[i]]); } - fn_1_A828(temp_r31->unk08[2]); + OptionWinDispOff(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_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 fn_1_9B10(omObjData *arg0, s32 arg1) { - UnkRecordDataStruct01 *temp_r31 = arg0->data; - s32 temp_r25; - s32 temp_r27; - s32 var_r28; - s32 var_r26; - s32 var_r17; - s32 sp5C; - s32 sp58; - s32 sp54; - s32 sp50; - s32 sp4C; +static void ShowMG(omObjData *object, s32 page) +{ + RecordWork *work = object->data; + s32 value; + s32 mg; + s32 timeDigit; + s32 timeCenti; + s32 scoreDigit; + s32 timeMin; + s32 timeSec; + s32 mgAvail; + BOOL dispZeroF; + 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) { + dispZeroF = 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->mgRecord[mg]; + if (mgAvail) { + switch (mgTbl[mg].displayType) { + 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], scoreDigit); + espDispOn(work->sprList[i * 8 + 89 + j]); + dispZeroF = 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) { - var_r26 *= 1.6916667f; - } else { - var_r26 *= 1.6666666f; + case DISPLAY_TYPE_TIME: + timeMin = value / 3600; + timeSec = (value % 3600) / 60; + timeCenti = (value % 3600) % 60; + if (mgTbl[mg].id == 405 || mgTbl[mg].id == 432) { + timeCenti *= 1.6916667f; } - for (j = 1; j < 8; j++) { - espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + else { + 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: - var_r28 = fn_1_8EF8(sp5C, 1); + timeDigit = GetDigit(timeMin, 1); break; case 1: - var_r28 = fn_1_8EF8(sp5C, 0); + timeDigit = GetDigit(timeMin, 0); break; case 3: - var_r28 = fn_1_8EF8(sp58, 1); + timeDigit = GetDigit(timeSec, 1); break; case 4: - var_r28 = fn_1_8EF8(sp58, 0); + timeDigit = GetDigit(timeSec, 0); break; case 6: - var_r28 = fn_1_8EF8(var_r26, 1); + timeDigit = GetDigit(timeCenti, 1); break; case 7: - var_r28 = fn_1_8EF8(var_r26, 0); + timeDigit = GetDigit(timeCenti, 0); break; case 2: - var_r28 = 11; + timeDigit = 11; break; case 5: - var_r28 = 12; + timeDigit = 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], timeDigit); + 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_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(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]); + OptionWinPosSet(work->window[i + 2], 60.0f, 96.0f + 40.0f * i); + nameMess = mgAvail ? mgTbl[mg].mess : MAKE_MESSID(35, 0); + OptionWinMesSet(work->window[i + 2], nameMess); + OptionWinDispOn(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_SPR_HIDE_COUNT 65 + +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 fn_1_A3B0(omObjData *arg0) { - UnkRecordDataStruct01 *temp_r30 = arg0->data; +static void HideMG(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_SPR_HIDE_COUNT; i++) { + espDispOff(temp_r30->sprList[mgSprHideTbl[i]]); } for (i = 0; i < 8; i++) { - fn_1_A828(temp_r30->unk08[i + 2]); + OptionWinDispOff(temp_r30->window[i + 2]); } } diff --git a/src/REL/option/room.c b/src/REL/option/room.c index a697e0e4..8a9e5d15 100755 --- a/src/REL/option/room.c +++ b/src/REL/option/room.c @@ -6,241 +6,254 @@ #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 *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 */ 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 -omObjData *lbl_1_bss_18; -static omObjFunc lbl_1_data_68[] = { - NULL, - fn_1_1A8C -}; +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 *fn_1_15A4(void) { - omObjData *var_r30; - UnkRoomDataStruct *temp_r31; +omObjData *optionRoom; - 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; - 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(); - 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; +static omObjFunc execModeTbl[] = { NULL, ExecRoom }; + +omObjData *OptionRoomCreate(void) +{ + omObjData *object; + RoomWork *work; + + object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->optionIdx = 0; + work->unk20 = -1; + work->cameraDoneF = 0; + 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 *arg0) { - UnkRoomDataStruct *temp_r31 = arg0->data; +void OptionRoomKill(omObjData *object) +{ + RoomWork *work = object->data; - fn_1_2110(temp_r31->unk00); - 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); + 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 lbl_1_rodata_BC[3] = { 45.0f, 165.0f, 285.0f }; +static const float guideAngleTbl[3] = { 45.0f, 165.0f, 285.0f }; -static void fn_1_1844(omObjData *arg0, s32 arg1) { - UnkRoomDataStruct *temp_r31 = arg0->data; - float sp10; - float spC; - float sp8; - float var_f31; +static void MoveOption(omObjData *object, BOOL rightF) +{ + RoomWork *work = object->data; + float x; + float y; + float z; + float guideAngle; - 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->optionIdx += (rightF == FALSE) ? -1 : 1; + if (work->optionIdx < 0) { + work->optionIdx = 2; } - 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]; + else if (work->optionIdx >= 3) { + work->optionIdx = 0; } - fn_1_2508(lbl_1_bss_20, var_f31, 430.0f, 0x60); + 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->optionIdx == 0 && rightF == TRUE) { + guideAngle = 360.0f + guideAngleTbl[0]; + } + else { + guideAngle = guideAngleTbl[work->optionIdx]; + } + OptionGuideWalkExec(optionGuide, guideAngle, 430.0f, 96); } -void fn_1_1A2C(omObjData *arg0, s32 arg1) { - UnkRoomDataStruct *temp_r31 = arg0->data; +void OptionRoomExecModeSet(omObjData *object, s32 execMode) +{ + RoomWork *work = object->data; - temp_r31->unk1C = arg1; - arg0->func = lbl_1_data_68[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->execMode = execMode; + object->func = execModeTbl[execMode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_1A70(omObjData *arg0) { - UnkRoomDataStruct *temp_r31 = arg0->data; +s32 OptionRoomExecModeGet(omObjData *object) +{ + RoomWork *work = object->data; - return temp_r31->unk1C; + return work->execMode; } -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 ExecRoom(omObjData *object) +{ + RoomWork *work = object->data; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - if (temp_r31->unk28 == 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->unk28 = 1; + if (!work->cameraDoneF) { + OptionCameraViewSet(optionCamera, 600.0f, 60.0f, 120.0f, 1); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 1); + work->cameraDoneF = TRUE; } - arg0->unk10 = 1; + object->unk10 = 1; /* fallthrough */ case 1: - if (fn_1_CB8(lbl_1_bss_10) != 0) { + if (OptionCameraDoneCheck(optionCamera) != 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; + 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 (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 (OptionPadCheck(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 (OptionPadDStkRepCheck(1)) { + MoveOption(object, FALSE); + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(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 (OptionPadDStkRepCheck(2)) { + MoveOption(object, TRUE); + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(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 (OptionPadCheck(PAD_BUTTON_A)) { + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(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->optionIdx) { case 0: - fn_1_3290(lbl_1_bss_30, 1); - arg0->unk10 = 4; + OptionRumbleExecModeSet(optionRumble, 1); + object->unk10 = 4; break; case 1: - fn_1_4388(lbl_1_bss_38, 1); - arg0->unk10 = 5; + OptionSoundExecModeSet(optionSound, 1); + object->unk10 = 5; break; case 2: - fn_1_82B0(lbl_1_bss_40, 1); - arg0->unk10 = 6; + OptionRecordExecModeSet(optionRecord, 1); + object->unk10 = 6; break; } } break; case 4: - if (fn_1_32D4(lbl_1_bss_30) == 0) { - arg0->unk10 = 1; + if (OptionRumbleExecModeGet(optionRumble) == 0) { + object->unk10 = 1; } break; case 5: - if (fn_1_43CC(lbl_1_bss_38) == 0) { - arg0->unk10 = 1; + if (OptionSoundExecModeGet(optionSound) == 0) { + object->unk10 = 1; } break; case 6: - if (fn_1_82F4(lbl_1_bss_40) == 0) { - arg0->unk10 = 1; + if (OptionRecordExecModeGet(optionRecord) == 0) { + object->unk10 = 1; } break; case 7: - fn_1_A704(temp_r31->unk10); - fn_1_A704(temp_r31->unk14); - arg0->unk10 = 8; + OptionWinAnimOut(work->optionDescWindow); + OptionWinAnimOut(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) { + OptionRoomExecModeSet(object, MODE_DISABLED); } break; } } -static omObjData *fn_1_2088(void) { - omObjData *temp_r31; +static omObjData *CreateRoomBG(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, 0)); - Hu3DModelLayerSet(temp_r31->model[0], 0); - Hu3DModelShadowMapSet(temp_r31->model[0]); - return temp_r31; + 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 fn_1_2110(omObjData *arg0) { - Hu3DModelKill(arg0->model[0]); +static void KillRoomBG(omObjData *object) +{ + Hu3DModelKill(object->model[0]); } -static omObjData *fn_1_2144(void) { - omObjData *temp_r31; +static omObjData *CreateArrow(void) +{ + omObjData *arrow; - 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; + 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 fn_1_21C4(omObjData *arg0) { - Hu3DModelKill(arg0->model[0]); +static void KillArrow(omObjData *arrow) +{ + Hu3DModelKill(arrow->model[0]); } diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c index 5bb0ae3a..af0397ff 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 *hiliteOn; + /* 0x14 */ OptionWindow *window[2]; + /* 0x20 */ s32 execMode; + /* 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 -omObjData *lbl_1_bss_30; +static void ExecRumble(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 *object); +static omObjData *CreateHiliteOn(void); +static void KillHiliteOn(omObjData *object); -static omObjFunc lbl_1_data_108[] = { - NULL, - fn_1_32F0 -}; +omObjData *optionRumble; -omObjData *fn_1_3158(void) { - omObjData *temp_r30; - UnkRumbleDataStruct *temp_r3; +static omObjFunc execModeTbl[] = { NULL, ExecRumble }; - 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; +omObjData *OptionRumbleCreate(void) +{ + omObjData *object; + RumbleWork *work; + + object = omAddObjEx(optionObjMan, 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->hiliteOn = CreateHiliteOn(); + work->hand = CreateHand(); + OptionRumbleExecModeSet(object, MODE_DISABLED); + + return object; } -void fn_1_322C(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +void OptionRumbleKill(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); + KillHiliteOn(work->hiliteOn); + KillPadFilter(work->padFilter); + HuMemDirectFree(work); } -void fn_1_3290(omObjData *arg0, s32 arg1) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +void OptionRumbleExecModeSet(omObjData *object, s32 execMode) +{ + RumbleWork *work = object->data; - temp_r31->unk1C = arg1; - arg0->func = lbl_1_data_108[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->execMode = execMode; + object->func = execModeTbl[execMode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_32D4(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +s32 OptionRumbleExecModeGet(omObjData *object) +{ + RumbleWork *work = object->data; - return temp_r31->unk1C; + return work->execMode; } -static void fn_1_32F0(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; +static void ExecRumble(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); - 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; + 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 (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)); + OptionWinAnimIn(work->window[1]); + OptionWinMesSet(work->window[1], MAKE_MESSID(47, 15)); + OptionWinAnimIn(work->window[0]); + if (work->rumbleF) { + OptionWinMesSet(work->window[0], MAKE_MESSID(47, 2)); } - arg0->unk10 = 2; + else { + OptionWinMesSet(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 (OptionPadCheck(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 (OptionPadDStkRepCheck(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 (OptionPadDStkRepCheck(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->hiliteOn->model[0], 0.0f); + Hu3DModelAttrReset(work->hiliteOn->model[0], 1); } - arg0->unk10 = 1; + else { + Hu3DModelAttrSet(work->hiliteOn->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; + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + Hu3DModelAttrSet(work->hand->model[0], 1); + OptionRumbleMotionHideStart(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 && !OptionRumbleMotionCheck(optionRumble)) { for (i = 0; i < 2; i++) { - fn_1_A6AC(temp_r31->unk14[i]); + OptionWinKill(work->window[i]); } - Hu3DModelHookReset(temp_r31->unk00->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); + Hu3DModelHookReset(work->system->model[0]); + OptionCameraFocusSet(optionCamera, -519.62f, 120.0f, 300.0f, 0x28); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28); + OptionRumbleExecModeSet(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(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); + 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(optionObjMan, 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(optionObjMan, 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(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); + + return object; } -static void fn_1_3D00(omObjData *arg0) { +static void KillPadFilter(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } } -void fn_1_3D54(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; +void OptionRumbleMotionShowStart(omObjData *object) +{ + RumbleWork *work = object->data; + s16 model = work->padFilter->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); } -void fn_1_3E1C(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; +void OptionRumbleMotionHideStart(omObjData *object) +{ + RumbleWork *work = object->data; + s16 model = work->padFilter->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); } -s32 fn_1_3ED0(omObjData *arg0) { - UnkRumbleDataStruct *temp_r31 = arg0->data; - s16 temp_r30 = temp_r31->unk08->model[0]; +BOOL OptionRumbleMotionCheck(omObjData *object) +{ + RumbleWork *work = object->data; + s16 padFilterModel = work->padFilter->model[0]; - return !Hu3DMotionEndCheck(temp_r30); + return !Hu3DMotionEndCheck(padFilterModel); } -static omObjData *fn_1_3F28(void) { - omObjData *temp_r31; +static omObjData *CreateHiliteOn(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, 11)); + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + object->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(object->model[0], 1); } - return temp_r31; + else { + Hu3DModelAttrSet(object->model[0], 1); + } + return object; } -static void fn_1_3FD4(omObjData *arg0) { +static void KillHiliteOn(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } } diff --git a/src/REL/option/scene.c b/src/REL/option/scene.c index 6713e5fe..733c324f 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,169 @@ #include "rel_sqrt_consts.h" typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ char unk02[2]; - /* 0x04 */ float unk04; - /* 0x08 */ float unk08; -} UnkSceneDataStruct; // Size 0xC + /* 0x00 */ s16 id; + /* 0x04 */ float tplvl; + /* 0x08 */ float speed; +} FaderWork; // Size 0xC -static void fn_1_270(void); +static void FadeSprite(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 FadeModel(void); +static void SceneMain(omObjData *arg0); +static void KillScene(void); -Process *lbl_1_bss_8; -static omObjData *lbl_1_bss_4; -static s32 lbl_1_bss_0; +Process *optionObjMan; +static omObjData *scene; +static s32 rumbleF; -void ModuleProlog(void) { - lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); - omGameSysInit(lbl_1_bss_8); +void ModuleProlog(void) +{ + optionObjMan = omInitObjMan(0x40, 0x2000); + omGameSysInit(optionObjMan); 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; - lbl_1_bss_28 = fn_1_2E04(); + rumbleF = GWGameStat.rumble; + scene = omAddObjEx(optionObjMan, 1000, 0, 0, 0, SceneMain); + scene->unk10 = 0; + optionState = OptionStateCreate(); } -void fn_1_160(s16 arg0, s32 arg1, s32 arg2) { - UnkSceneDataStruct *temp_r31; - Process *temp_r30; +void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration) +{ + FaderWork *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; + 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 { - temp_r31->unk08 = -temp_r31->unk08; - temp_r31->unk04 = 1.0f; + work->speed = -work->speed; + work->tplvl = 1.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; + espDispOn(work->id); + espTPLvlSet(work->id, work->tplvl); + process = HuPrcChildCreate(FadeSprite, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + process->user_data = work; } -static void fn_1_270(void) { - UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; +static void FadeSprite(void) +{ + FaderWork *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->tplvl += work->speed; + if (work->tplvl > 1.0f) { + work->tplvl = 1.0f; break; } - if (temp_r31->unk04 < 0.0f) { - temp_r31->unk04 = 0.0f; + if (work->tplvl < 0.0f) { + work->tplvl = 0.0f; break; } - espTPLvlSet(temp_r31->unk00, temp_r31->unk04); + espTPLvlSet(work->id, work->tplvl); HuPrcVSleep(); } - espTPLvlSet(temp_r31->unk00, temp_r31->unk04); - if (temp_r31->unk04 <= 0.0f) { - espDispOff(temp_r31->unk00); + espTPLvlSet(work->id, work->tplvl); + if (work->tplvl <= 0.0f) { + espDispOff(work->id); } - HuMemDirectFree(temp_r31); + HuMemDirectFree(work); HuPrcEnd(); } -static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) { - UnkSceneDataStruct *temp_r31; - Process *temp_r30; +void OptionFadeModel(s16 model, BOOL inF, s32 duration) +{ + FaderWork *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(FaderWork), MEMORY_DEFAULT_NUM); + work->id = model; + work->speed = 1.0f / duration; + if (inF) { + work->speed = work->speed; + work->tplvl = 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->speed = -work->speed; + work->tplvl = 1.0f; + } + 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) { - UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; +static void FadeModel(void) +{ + FaderWork *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->tplvl += work->speed; + if (work->tplvl > 1.0f) { + work->tplvl = 1.0f; break; } - if (temp_r31->unk04 < 0.0f) { - temp_r31->unk04 = 0.0f; + if (work->tplvl < 0.0f) { + work->tplvl = 0.0f; break; } - Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); + Hu3DModelTPLvlSet(work->id, work->tplvl); HuPrcVSleep(); } - Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); - if (temp_r31->unk04 <= 0.0f) { - Hu3DModelAttrSet(temp_r31->unk00, 1); + Hu3DModelTPLvlSet(work->id, work->tplvl); + if (work->tplvl <= 0.0f) { + Hu3DModelAttrSet(work->id, 1); } - HuMemDirectFree(temp_r31); + HuMemDirectFree(work); HuPrcEnd(); } -s32 fn_1_550(u16 arg0) { - u32 temp_r31 = HuPadBtnDown[0] & arg0; +BOOL OptionPadCheck(u16 btn) +{ + u32 temp_r31 = HuPadBtnDown[0] & btn; return (temp_r31 != 0); } -s32 fn_1_584(u16 arg0) { - u32 temp_r31 = HuPadDStkRep[0] & arg0; +BOOL OptionPadDStkRepCheck(u16 dir) +{ + u32 temp_r31 = HuPadDStkRep[0] & dir; return (temp_r31 != 0); } -s32 fn_1_5B8(u16 arg0) { - u32 temp_r31 = HuPadDStk[0] & arg0; +BOOL OptionPadDStkCheck(u16 dir) +{ + u32 temp_r31 = HuPadDStk[0] & dir; return (temp_r31 != 0); } -static void fn_1_5EC(omObjData *arg0) { - switch (arg0->unk10) { +static void SceneMain(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) { + OptionStateKill(optionState); + if (rumbleF != GWGameStat.rumble) { omSysExitReq = 0; - fn_1_6E8(); + KillScene(); } omOvlReturnEx(1, 1); } @@ -176,8 +185,9 @@ static void fn_1_5EC(omObjData *arg0) { } } -static void fn_1_6E8(void) { - s16 temp_r31; +static void KillScene(void) +{ + s16 sprite; if (SLSaveFlagGet() == 0) { return; @@ -187,9 +197,9 @@ static void fn_1_6E8(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 b9f9e628..64d2e379 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,112 @@ #include "math.h" typedef struct { - /* 0x000 */ omObjData *unk00[26]; - /* 0x068 */ UnkWindowDataStruct *unk68[13]; - /* 0x09C */ s32 unk9C; - /* 0x0A0 */ s16 unkA0[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; - /* 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 + /* 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 cursorPos; + /* 0x0DC */ s32 prevCursorPos; + /* 0x0E0 */ s16 sndGrpSet; + /* 0x0E4 */ BOOL optionSelected; + /* 0x0E8 */ BOOL doneF; + /* 0x0EC */ BOOL cameraDoneF; + /* 0x0F0 */ s16 bgMusicStat; + /* 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 */ s32 unk00; - /* 0x04 */ s32 unk04; - /* 0x08 */ s32 unk08; - /* 0x0C */ float unk0C; - /* 0x10 */ float unk10; -} UnkSoundDataStruct01; // Size 0x14 + /* 0x00 */ BOOL enabled; + /* 0x04 */ s32 type; + /* 0x08 */ s32 side; + /* 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 type; + /* 0x0A */ s16 sndGrpSet; + /* 0x0C */ s32 id; +} 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 -omObjData *lbl_1_bss_38; +#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 -static const s32 lbl_1_rodata_1A8[] = { - MAKE_MESSID(47, 70), - MAKE_MESSID(47, 81), +#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 NOTE_SIDE_LEFT 0 +#define NOTE_SIDE_RIGHT 1 + +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 *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 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 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 FadeSound(omObjData *object); + +omObjData *optionSound; + +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 +129,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,838 +437,871 @@ 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 musicPageOn[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 execModeTbl[] = { NULL, ExecZoom, ExecOptionSel, ExecOutputMode, ExecMusic, ExecVoice }; -static s32 lbl_1_data_168[] = { - 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 *temp_r29; - UnkSoundDataStruct00 *temp_r3; +omObjData *OptionSoundCreate(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(optionObjMan, 1003, 0, 0, 1, NULL); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(SoundWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->selectedOption = 0; + work->doneF = FALSE; + work->optionSelected = FALSE; + work->bgMusicStat = -2; + work->seqStat = -1; + work->streamStat = -1; + work->fxStat = -1; + work->noteSpawner = 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->object[0] = CreateSystem(); for (i = 0; i < 6; i++) { - temp_r3->unk00[i + 1] = fn_1_6528(i % 3, (i / 3) > 0); + work->object[i + 1] = CreateLightObj(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); + LightSetNone(object); + work->object[7] = CreateHand(); + work->object[8] = CreateOutputModeHand(); + for (i = 0; i < NUM_NOTES; i++) { + work->object[i + 10] = CreateNoteObj((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); + OptionSoundExecModeSet(object, MODE_DISABLED); + for (i = 0; i < NUM_BOARDS; i++) { + musicPageOn[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; + 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 *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +void OptionSoundKill(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]); + KillHand(work->object[7]); + KillOutputModeHand(work->object[8]); + KillSystem(work->object[0]); for (i = 0; i < 6; i++) { - fn_1_6640(temp_r31->unk00[i + 1]); + KillLightObj(work->object[i + 1]); } for (i = 0; i < 16; i++) { - fn_1_72A8(temp_r31->unk00[i + 10]); + KillNote(work->object[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 OptionSoundExecModeSet(omObjData *object, s32 execMode) +{ + SoundWork *work = object->data; - temp_r31->unk9C = arg1; - arg0->func = lbl_1_data_150[arg1]; - arg0->unk10 = 0; - arg0->unk10 = 0; + work->execMode = execMode; + object->func = execModeTbl[execMode]; + object->unk10 = 0; + object->unk10 = 0; } -s32 fn_1_43CC(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +s32 OptionSoundExecModeGet(omObjData *object) +{ + SoundWork *work = object->data; - return temp_r31->unk9C; + return work->execMode; } -static void fn_1_43E8(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void ExecZoom(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->doneF) { + work->window[0] = OptionWinCreate(0); + work->window[1] = OptionWinCreate(1); + work->window[2] = OptionWinCreate(2); for (i = 0; i < 10; i++) { - temp_r30->unk68[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); - temp_r30->unkE8 = 1; - temp_r30->unkCC = 0; - temp_r30->unkE4 = 0; - arg0->unk10 = 1; - } else { - arg0->unk10 = 2; + 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; + } + else { + object->unk10 = 2; } break; case 1: - if (fn_1_CB8(lbl_1_bss_10) == 0) { - fn_1_4388(arg0, 2); + if (OptionCameraDoneCheck(optionCamera) == 0) { + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; case 2: for (i = 0; i < 13; i++) { - fn_1_A6AC(temp_r30->unk68[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); - temp_r30->unkE8 = 0; - temp_r30->unkE4 = 0; - fn_1_4388(arg0, 0); + OptionCameraFocusSet(optionCamera, 0.0f, 120.0f, -600.0f, 0x28); + OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28); + work->doneF = FALSE; + work->optionSelected = FALSE; + OptionSoundExecModeSet(object, MODE_DISABLED); break; } } -static void fn_1_4658(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void ExecOptionSel(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) { - fn_1_3D54(lbl_1_bss_30); - } else { - fn_1_6C5C(arg0); - fn_1_6EA4(arg0); - fn_1_711C(arg0); + LightSetNone(object); + work->cursorPos = work->selectedOption; + if (!work->optionSelected) { + OptionRumbleMotionShowStart(optionRumble); } - temp_r31->unkE4 = 0; - temp_r31->unkEC = 0; - arg0->unk10 = 1; + else { + OutputModeHide(object); + MusicPageHide(object); + VoicePageHide(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; + 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->object[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->object[7], -34.0f + 40.0f * work->cursorPos, 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 (OptionPadCheck(PAD_BUTTON_A)) { + work->selectedOption = work->cursorPos; + work->optionSelected = TRUE; + LightSetCurr(object, work->selectedOption); HuAudFXPlay(2); - arg0->unk10 = 3; - } else if (fn_1_550(0x200) != 0) { + object->unk10 = 3; + } + else if (OptionPadCheck(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 (OptionPadDStkRepCheck(1) && work->cursorPos > 0) { + work->cursorPos--; HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_584(2) != 0 && temp_r31->unkD8 < 2) { - temp_r31->unkD8++; + object->unk10 = 1; + } + else if (OptionPadDStkRepCheck(2) && work->cursorPos < 2) { + work->cursorPos++; 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_3E1C(lbl_1_bss_30); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + if (!work->optionSelected) { + OptionRumbleMotionHideStart(optionRumble); } - Hu3DModelAttrSet(temp_r31->unk00[7]->model[0], 1); - arg0->unk10 = 4; + Hu3DModelAttrSet(work->object[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 || !OptionRumbleMotionCheck(optionRumble)) && work->window[0]->state == 0 && work->window[1]->state == 0) { + if (work->optionSelected) { + switch (work->selectedOption) { case 0: - fn_1_4388(arg0, 3); + OptionSoundExecModeSet(object, MODE_HANDLE_SOUND); break; case 1: - fn_1_4388(arg0, 4); + OptionSoundExecModeSet(object, MODE_HANDLE_MUSIC); break; case 2: - fn_1_4388(arg0, 5); + OptionSoundExecModeSet(object, MODE_HANDLE_VOICE); break; } - } else { - fn_1_6A0C(arg0); - fn_1_4388(arg0, 1); + } + else { + OptionSelHide(object); + OptionSoundExecModeSet(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; - Vec sp8; +static void ExecOutputMode(omObjData *object) +{ + SoundWork *work = object->data; + Vec pos; - 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; + OptionSelHide(object); + work->optionSelected = FALSE; + work->cursorPos = work->soundMode; + work->cameraDoneF = FALSE; + work->optionSelected = FALSE; + CreateNoteSpawner(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; + 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->object[8]->model[0], 1); + work->cameraDoneF = TRUE; } - sp8.x = -38.0f; - sp8.y = 140.0f - 15.0f * temp_r31->unkD8; - sp8.z = -500.0f; - omSetTra(temp_r31->unk00[8], sp8.x, sp8.y, sp8.z); - arg0->unk10 = 2; + 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 (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 (OptionPadCheck(PAD_BUTTON_A)) { + work->soundMode = work->cursorPos; + 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->cursorPos]; + msmSysSetOutputMode(outputModeTbl[work->cursorPos]); + OSSetSoundMode(soundModeTbl[work->cursorPos]); + work->optionSelected = TRUE; + OutputModeDisp(object); + work->changeTimer = 0; + object->unk10 = 3; + } + else if (OptionPadCheck(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 (OptionPadDStkRepCheck(8) != 0 && work->cursorPos > 0) { + work->cursorPos--; HuAudFXPlay(0); - arg0->unk10 = 1; - } else if (fn_1_584(4) != 0 && temp_r31->unkD8 < 1) { - temp_r31->unkD8++; + object->unk10 = 1; + } + else if (OptionPadDStkRepCheck(4) != 0 && work->cursorPos < 1) { + work->cursorPos++; 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; + KillNoteSpawner(object); + OptionWinAnimOut(work->window[1]); + OptionWinAnimOut(work->window[0]); + Hu3DModelAttrSet(work->object[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; + OutputModeDisp(object); + work->optionSelected = TRUE; + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_4E50(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->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 sp8; +static void ExecMusic(omObjData *object) +{ + SoundWork *work = object->data; + float oldX; + float oldY; + float x; + float y; + float newX; + float newY; + s32 i; + s32 cursorPosNew; + s32 cursorPosOld; - sp8 = temp_r31->unkD8; - switch (arg0->unk10) { + cursorPosOld = work->cursorPos; + 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; + OptionSelHide(object); + work->page = 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: - temp_r31->unkD8 = 0; - temp_r31->unkDC = 0; - if (temp_r31->unkFC != 0) { + work->cursorPos = 0; + work->prevCursorPos = 0; + if (work->pageDelta != 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->pageDelta; + 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 (!musicPageOn[work->page]); HuAudFXPlay(0x840); - if (temp_r31->unkFC > 0) { - espBankSet(temp_r31->unkA0[15], 3); - } else { - espBankSet(temp_r31->unkA0[14], 1); + if (work->pageDelta > 0) { + espBankSet(work->sprite[15], 3); } - temp_r31->unkF8 = 5; - temp_r31->unkFC = 0; + else { + espBankSet(work->sprite[14], 1); + } + work->cursorDelay = 5; + work->pageDelta = 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->cursorDelta != 0) { + cursorPosNew = work->cursorPos + work->cursorDelta; + if (cursorPosNew > 9) { + cursorPosNew = 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 (cursorPosNew < 0) { + cursorPosNew = 0; + } + if (!musicTbl[work->page][cursorPosNew].enabled) { + if (work->cursorPos < 5) { + for (i = cursorPosNew; i >= 5; i--) { + if (musicTbl[work->page][i].enabled) { + cursorPosNew = i; break; } } - if (var_r28 < 5) { - var_r29 = temp_r31->unkD8; + if (i < 5) { + cursorPosNew = work->cursorPos; } - } else { - var_r29 = temp_r31->unkD8; + } + else { + cursorPosNew = work->cursorPos; } } - temp_r31->unkDC = temp_r31->unkD8; - if (temp_r31->unkD8 != var_r29) { - temp_r31->unkD8 = var_r29; + work->prevCursorPos = work->cursorPos; + if (work->cursorPos != cursorPosNew) { + work->cursorPos = cursorPosNew; HuAudFXPlay(0x840); } - temp_r31->unk100 = 0; + work->cursorDelta = 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; + 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 { + 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) { + 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(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->sprite[18], 166.0f + 244.0f * (work->cursorPos / 5), 144.0f + 29.0f * (work->cursorPos % 5)); + object->unk10 = 6; break; case 5: - if (temp_r31->unkF8 > 0) { - temp_r31->unkF8--; + if (work->cursorDelay > 0) { + work->cursorDelay--; break; } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - arg0->unk10 = 6; + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[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 (OptionPadCheck(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 (OptionPadCheck(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 (OptionPadDStkCheck(1) != 0 && work->cursorPos >= 5) { + work->cursorDelta -= 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 (OptionPadDStkCheck(2) != 0 && work->cursorPos < 5) { + work->cursorDelta += 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 (OptionPadDStkCheck(8) != 0 && work->cursorPos % 5 > 0) { + work->cursorDelta--; } - if (temp_r31->unkFC != 0) { - arg0->unk10 = 1; + else if (OptionPadDStkCheck(4) != 0 && work->cursorPos % 5 < 4) { + work->cursorDelta++; + } + if (work->cursorDelta != 0) { + object->unk10 = 2; + } + else if (OptionPadCheck(PAD_TRIGGER_L)) { + work->pageDelta = -1; + } + else if (OptionPadCheck(PAD_TRIGGER_R)) { + work->pageDelta = 1; + } + if (work->pageDelta != 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; + 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 (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->sprite[18]); + if (work->bgMusicStat == -1) { + work->bgMusicStat = HuAudSeqPlay(0x2D); } - fn_1_4388(arg0, 2); + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_578C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->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; +static void ExecVoice(omObjData *object) +{ + SoundWork *work = object->data; + float oldX; + float oldY; + float x; + float y; + float newX; + float newY; + s32 i; + s32 cursorPosNew; - 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; + OptionSelHide(object); + work->page = 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: - 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->cursorPos = 0; + work->prevCursorPos = 0; + if (work->pageDelta != 0) { + work->page += work->pageDelta; + 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->pageDelta > 0) { + espBankSet(work->sprite[15], 3); } - temp_r31->unkF8 = 5; - temp_r31->unkFC = 0; + else { + espBankSet(work->sprite[14], 1); + } + work->cursorDelay = 5; + work->pageDelta = 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->cursorDelta != 0) { + cursorPosNew = work->cursorPos + work->cursorDelta; + if (cursorPosNew > 9) { + cursorPosNew = 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 (cursorPosNew < 0) { + cursorPosNew = 0; + } + 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) { - var_r29 = temp_r31->unkD8; + if (i < 5) { + cursorPosNew = work->cursorPos; } - } else { - var_r29 = temp_r31->unkD8; + } + else { + cursorPosNew = work->cursorPos; } } - temp_r31->unkDC = temp_r31->unkD8; - if (temp_r31->unkD8 != var_r29) { - temp_r31->unkD8 = var_r29; + work->prevCursorPos = work->cursorPos; + if (work->cursorPos != cursorPosNew) { + work->cursorPos = cursorPosNew; HuAudFXPlay(0x840); } - temp_r31->unk100 = 0; + work->cursorDelta = 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; + 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 { + 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) { + 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(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->sprite[18], 166.0f + 244.0f * (work->cursorPos / 5), 144.0f + 29.0f * (work->cursorPos % 5)); + object->unk10 = 6; break; case 5: - if (temp_r31->unkF8 > 0) { - temp_r31->unkF8--; + if (work->cursorDelay > 0) { + work->cursorDelay--; break; } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); - arg0->unk10 = 6; + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[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 (OptionPadCheck(PAD_BUTTON_A)) { + PlaySound(object); + } + else if (OptionPadCheck(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 (OptionPadDStkCheck(1) != 0 && work->cursorPos >= 5) { + work->cursorDelta -= 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 (OptionPadDStkCheck(2) != 0 && work->cursorPos < 5) { + work->cursorDelta += 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 (OptionPadDStkCheck(8) != 0 && work->cursorPos % 5 > 0) { + work->cursorDelta--; } - if (temp_r31->unkFC != 0) { - arg0->unk10 = 1; + else if (OptionPadDStkCheck(4) != 0 && work->cursorPos % 5 < 4) { + work->cursorDelta++; + } + if (work->cursorDelta != 0) { + object->unk10 = 2; + } + else if (OptionPadCheck(PAD_TRIGGER_L)) { + work->pageDelta = -1; + } + else if (OptionPadCheck(PAD_TRIGGER_R)) { + work->pageDelta = 1; + } + if (work->pageDelta != 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; + 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 (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->sprite[18]); + OptionSoundExecModeSet(object, MODE_HANDLE_OPTION_SEL); } break; } } -static void fn_1_6044(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void LightSetCurr(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]); + 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: - 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]); + 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: - 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]); + 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 fn_1_613C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void LightSetNone(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]); + 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 *fn_1_61A0(void) { - omObjData *temp_r31; +static omObjData *CreateHand(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, 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; + 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 fn_1_629C(omObjData *arg0) { +static void KillHand(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } } -static omObjData *fn_1_62F0(void) { - omObjData *temp_r31; +static omObjData *CreateOutputModeHand(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, 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; + 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 fn_1_63EC(omObjData *arg0) { +static void KillOutputModeHand(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->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(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); + 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 lightPosTbl[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 *CreateLightObj(s32 id, BOOL off) +{ + omObjData *object; - 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)); + object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL); + if (off) { + object->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 { + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 4)); + } + 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 fn_1_6640(omObjData *arg0) { +static void KillLightObj(omObjData *object) +{ s32 i; for (i = 0; i < 1; i++) { - Hu3DModelKill(arg0->model[i]); + Hu3DModelKill(object->model[i]); } } -static void fn_1_6694(omObjData *arg0) { - Hu3DModelAttrReset(arg0->model[0], 1); +static void LightDispOff(omObjData *indicator) +{ + Hu3DModelAttrReset(indicator->model[0], 1); } -static void fn_1_66CC(omObjData *arg0) { - Hu3DModelAttrSet(arg0->model[0], 1); +static void LightDispOn(omObjData *indicator) +{ + Hu3DModelAttrSet(indicator->model[0], 1); } -static s32 lbl_1_data_1BC[] = { +static s32 spriteDataTbl[] = { DATA_MAKE_NUM(DATADIR_OPTION, 38), DATA_MAKE_NUM(DATADIR_OPTION, 39), DATA_MAKE_NUM(DATADIR_OPTION, 40), @@ -1268,387 +1320,406 @@ 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->sprite[i] = espEntry(spriteDataTbl[i], 0, 0); + espDrawNoSet(work->sprite[i], 0x40); + espDispOff(work->sprite[i]); } - espBankSet(temp_r31->unkA0[14], 0); - espBankSet(temp_r31->unkA0[15], 2); + espBankSet(work->sprite[14], 0); + espBankSet(work->sprite[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->sprite[i]); } } -static void fn_1_6828(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; - float temp_f31 = 288.0f; - float temp_f30 = 188.0f; +static void OptionSelDisp(omObjData *object) +{ + SoundWork *work = object->data; + float x = 288.0f; + float y = 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->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(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->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(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->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(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->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 lbl_1_rodata_1308[] = { 12, 0, 1, 2, 3, 4, 5 }; - -static void fn_1_6A0C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +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(temp_r30->unkA0[lbl_1_rodata_1308[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } } -static void fn_1_6A80(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; - float temp_f31 = 290.0f; - float temp_f30 = 192.0f; +static void OutputModeDisp(omObjData *object) +{ + SoundWork *work = object->data; + float x = 290.0f; + float y = 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->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(temp_r31->unkA0[17], temp_f31, temp_f30 - 32.0f); + espPosSet(work->sprite[17], x, y - 32.0f); break; case 1: - espPosSet(temp_r31->unkA0[17], temp_f31, temp_f30 + 32.0f); + espPosSet(work->sprite[17], x, y + 32.0f); break; } - espDispOn(temp_r31->unkA0[13]); - switch (temp_r31->unkD8) { + espDispOn(work->sprite[13]); + switch (work->cursorPos) { case 0: - espDispOn(temp_r31->unkA0[6]); - espDispOn(temp_r31->unkA0[9]); - espDispOff(temp_r31->unkA0[7]); - espDispOff(temp_r31->unkA0[8]); + espDispOn(work->sprite[6]); + espDispOn(work->sprite[9]); + espDispOff(work->sprite[7]); + espDispOff(work->sprite[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->sprite[7]); + espDispOn(work->sprite[8]); + espDispOff(work->sprite[6]); + espDispOff(work->sprite[9]); break; } - if (temp_r31->unkE4 != 0) { - espDispOn(temp_r31->unkA0[17]); - } else { - espDispOff(temp_r31->unkA0[17]); + if (work->optionSelected) { + espDispOn(work->sprite[17]); + } + else { + espDispOff(work->sprite[17]); } } -static const s32 lbl_1_rodata_1330[] = { 13, 6, 7, 8, 9 }; -static void fn_1_6C5C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; + +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(temp_r30->unkA0[lbl_1_rodata_1330[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } } -static void fn_1_6CD0(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void MusicPageDisp(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->sprite[10], 288.0f, 72.0f); + espDispOn(work->sprite[10]); + OptionWinDispOn(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)); + 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(temp_r31->unk68[2], lbl_1_rodata_1A8[arg1]); + OptionWinMesSet(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); + OptionWinMesSet(work->window[i + 3], musicTbl[page][i].nameMess); } } -static const s32 lbl_1_rodata_134C[] = { 10 }; -static void fn_1_6EA4(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; +static void MusicPageHide(omObjData *object) +{ + static const s32 sprHideTbl[] = { 10 }; + SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_134C[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } - fn_1_A828(temp_r30->unk68[2]); + OptionWinDispOff(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(temp_r30->unk68[i + 3]); + OptionWinDispOff(work->window[i + 3]); } } -static void fn_1_6F48(omObjData *arg0, s32 arg1) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void VoicePageDisp(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->sprite[11], 288.0f, 72.0f); + espDispOn(work->sprite[11]); + OptionWinDispOn(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)); + 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(temp_r31->unk68[2], lbl_1_rodata_AA0[arg1]); + OptionWinMesSet(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); + OptionWinMesSet(work->window[i + 3], voiceTbl[character][i].nameMess); } } -static const s32 lbl_1_rodata_1350[] = { 11, 0 }; -static void fn_1_711C(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r30 = arg0->data; + +static void VoicePageHide(omObjData *object) +{ + static const s32 sprHideTbl[] = { 11, 0 }; + SoundWork *work = object->data; s32 i; for (i = 0; i < 1; i++) { - espDispOff(temp_r30->unkA0[lbl_1_rodata_1350[i]]); + espDispOff(work->sprite[sprHideTbl[i]]); } - fn_1_A828(temp_r30->unk68[2]); + OptionWinDispOff(work->window[2]); for (i = 0; i < 10; i++) { - fn_1_A828(temp_r30->unk68[i + 3]); + OptionWinDispOff(work->window[i + 3]); } } -static s32 lbl_1_data_208[] = { - 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 *fn_1_71C0(s32 arg0) { - omObjData *temp_r31; - UnkSoundDataStruct01 *temp_r3; +static omObjData *CreateNoteObj(s32 type) +{ + 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(optionObjMan, 1003, 1, 0, 1, NULL); + noteWork = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(NoteWork), MEMORY_DEFAULT_NUM); + note->data = noteWork; + noteWork->enabled = FALSE; + noteWork->type = type; + note->model[0] = Hu3DModelCreateFile(noteMdlTbl[type]); + 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; - float temp_f31; - float temp_f30; - float var_f29; - float var_f28; - float temp_f27; - float temp_f26; - float temp_f25; - float temp_f24; - float temp_f23; +static void HandleNote(omObjData *note) +{ + NoteWork *noteWork = note->data; + float time; + float scale; + float angle; + float zRot; + float radius; + float x; + float z; + float y; + float tplvl; - Hu3DModelAttrReset(arg0->model[0], 1); - temp_f31 = sin(45.0f * temp_r31->unk0C * M_PI / 180.0); - temp_f31 = temp_f31 * temp_f31; - switch (temp_r31->unk08) { - case 0: - var_f29 = 174.5f + 7.0f * temp_f31; - var_f28 = -15.0 + 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + Hu3DModelAttrReset(note->model[0], 1); + 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 1: - var_f29 = 185.5f - (7.0f * temp_f31); - var_f28 = 15.0 - 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + case NOTE_SIDE_RIGHT: + angle = 185.5f - (7.0f * time); + zRot = 15.0 - 30.0 * sind(1440.0f * time); break; } - temp_f23 = sin(180.0f * temp_r31->unk0C * M_PI / 180.0); - 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) { + 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 * time); + omSetTra(note, x, y, z); + Hu3DModelTPLvlSet(note->model[0], tplvl); + omSetSca(note, scale, scale, scale); + omSetRot(note, 0.0f, 0.0f, zRot); + 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 CreateNote(omObjData *object, s32 type, s32 side, s32 color) +{ + omObjData *noteObj; + NoteWork *note; 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++) { + noteObj = ((SoundWork *)object->data)->object[i + 10]; + note = noteObj->data; + if (!note->enabled && note->type == type) { 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(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 fn_1_78A0(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void CreateNoteSpawner(omObjData *object) +{ + SoundWork *work = object->data; - temp_r31->unk10C = HuPrcChildCreate(fn_1_793C, 0x64, 0x2000, 0, HuPrcCurrentGet()); - temp_r31->unk10C->user_data = arg0; + work->noteSpawner = HuPrcChildCreate(ExecNoteSpawner, 0x64, 0x2000, 0, HuPrcCurrentGet()); + work->noteSpawner->user_data = object; } -static void fn_1_7900(omObjData *arg0) { - UnkSoundDataStruct00 *temp_r31 = arg0->data; +static void KillNoteSpawner(omObjData *object) +{ + SoundWork *work = object->data; - HuPrcKill(temp_r31->unk10C); + HuPrcKill(work->noteSpawner); } -static void fn_1_793C(void) { - omObjData *temp_r26; - UnkSoundDataStruct00 *sp8; - s32 var_r21; - s32 temp_r31; +static void ExecNoteSpawner(void) +{ + omObjData *object; + SoundWork *work; + s32 type; + 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->cursorPos) { 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); + type = NOTE_TYPE_QUARTER; + color = frandmod(7); + CreateNote(object, type, NOTE_SIDE_LEFT, color); + type = NOTE_TYPE_QUAVER; + color = frandmod(7); + CreateNote(object, type, NOTE_SIDE_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); + type = NOTE_TYPE_QUAVER; + color = frandmod(7); + CreateNote(object, type, NOTE_SIDE_LEFT, color); + CreateNote(object, type, NOTE_SIDE_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->cursorPos]; } - if (var_r31->unk00 != 0) { - fn_1_8048(arg0); - switch (var_r31->unk08) { + else { + sndSelData = (SndSelData *)&voiceTbl[work->page][work->cursorPos]; + } + if (sndSelData->enabled) { + FadeSound(object); + switch (sndSelData->type) { case 1: - temp_r30->unkF4 = HuAudSStreamPlay(var_r31->unk0C); + work->streamStat = HuAudSStreamPlay(sndSelData->id); 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->fxStat = HuAudFXPlay(sndSelData->id); 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->seqStat = HuAudSeqPlay(sndSelData->id); 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 FadeSound(omObjData *object) +{ + SoundWork *work = object->data; - if (temp_r31->unkF2 != -1) { - HuAudSeqFadeOut(temp_r31->unkF2, 0x64); - temp_r31->unkF2 = -1; + if (work->seqStat != -1) { + HuAudSeqFadeOut(work->seqStat, 0x64); + work->seqStat = -1; } - if (temp_r31->unkF4 != -1) { - HuAudSStreamFadeOut(temp_r31->unkF4, 0x64); - temp_r31->unkF4 = -1; + if (work->streamStat != -1) { + HuAudSStreamFadeOut(work->streamStat, 0x64); + work->streamStat = -1; } - if (temp_r31->unkF6 != -1) { - HuAudFXFadeOut(temp_r31->unkF6, 0x64); - temp_r31->unkF6 = -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 2b952b61..a2fc6f37 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 */ OptionWindow *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 ExecState(omObjData *object); -omObjData *lbl_1_bss_28; +omObjData *optionState; -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 *OptionStateCreate(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; - lbl_1_bss_10 = fn_1_7F8(); - lbl_1_bss_18 = fn_1_15A4(); - temp_r3->unk00 = fn_1_A44C(0); + object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); + object->data = work; + optionCamera = OptionCameraCreate(); + optionRoom = OptionRoomCreate(); + work->window = OptionWinCreate(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 OptionStateKill(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); + OptionCameraKill(optionCamera); + OptionRoomKill(optionRoom); + OptionWinKill(work->window); + HuMemDirectFree(work); } -static void fn_1_2FB0(omObjData *arg0) { - UnkStateDataStruct *temp_r31 = arg0->data; +static void ExecState(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; + OptionRoomExecModeSet(optionRoom, 1); + object->unk10 = 3; /* fallthrough */ case 3: - if (fn_1_1A70(lbl_1_bss_18) != 0) { + if (OptionRoomExecModeGet(optionRoom) != 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; + OptionWinAnimIn(work->window); + OptionWinMesSet(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; + OptionWinChoiceSet(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; + OptionWinAnimOut(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..6bb32d8d 100755 --- a/src/REL/option/window.c +++ b/src/REL/option/window.c @@ -1,147 +1,158 @@ +#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 ExecWindow(void); -UnkWindowDataStruct *fn_1_A44C(s32 arg0) { - UnkWindowDataStruct *temp_r31; +OptionWindow *OptionWinCreate(s32 id) +{ + OptionWindow *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(OptionWindow), MEMORY_DEFAULT_NUM); + work->messToBeSet = 0; + work->messWaitSignal = 0; + work->choiceSignal = 0; + work->state = 0; + work->process = HuPrcChildCreate(ExecWindow, 0x2000, 0x2000, 0, optionObjMan); + 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); + OptionWinDispOff(work); HuSprExecLayerSet(0x3F, 2); - return temp_r31; + return work; } -void fn_1_A6AC(UnkWindowDataStruct *arg0) { - HuWinExCleanup(arg0->unk04); - HuPrcKill(arg0->unk00); - HuMemDirectFree(arg0); +void OptionWinKill(OptionWindow *work) +{ + HuWinExCleanup(work->window); + HuPrcKill(work->process); + HuMemDirectFree(work); } -void fn_1_A6EC(UnkWindowDataStruct *arg0) { - if (arg0->unk0C == 0) { - arg0->unk20 = 1; +void OptionWinAnimIn(OptionWindow *work) +{ + if (!work->visible) { + work->state = 1; } } -void fn_1_A704(UnkWindowDataStruct *arg0) { - if (arg0->unk0C != 0) { - arg0->unk20 = 2; +void OptionWinAnimOut(OptionWindow *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 OptionWinMesSet(OptionWindow *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); +void OptionWinInsertMesSet(OptionWindow *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); +void OptionWinPosSet(OptionWindow *work, float x, float y) +{ + HuWinPosSet(work->window, x, y); } -void fn_1_A7F0(UnkWindowDataStruct *arg0) { - HuWinDispOn(arg0->unk04); - arg0->unk0C = 1; +void OptionWinDispOn(OptionWindow *work) +{ + HuWinDispOn(work->window); + work->visible = TRUE; } -void fn_1_A828(UnkWindowDataStruct *arg0) { - HuWinDispOff(arg0->unk04); - arg0->unk0C = 0; +void OptionWinDispOff(OptionWindow *work) +{ + HuWinDispOff(work->window); + work->visible = FALSE; } -static void fn_1_A860(UnkWindowDataStruct *arg0) { - if (arg0->unk20 == 0) { - arg0->unk20 = 3; +void OptionWinMesWait(OptionWindow *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 OptionWinChoiceSet(OptionWindow *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 ExecWindow(void) +{ + OptionWindow *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); + OptionWinDispOn(work); + HuWinExAnimIn(work->window); break; case 2: - HuWinExAnimOut(temp_r31->unk04); - fn_1_A828(temp_r31); + HuWinExAnimOut(work->window); + OptionWinDispOff(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(); } 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);