This commit is contained in:
CreateSource 2024-06-22 14:26:46 -04:00
commit 5e1d6d6f8a
13 changed files with 2955 additions and 2715 deletions

View file

@ -1,143 +1,145 @@
_prolog = .text:0x00000000; // type:function size:0x54 scope:global _prolog = .text:0x00000000; // type:function size:0x54 scope:global
_epilog = .text:0x00000054; // type:function size:0x4C scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global
ModuleProlog = .text:0x000000A0; // type:function size:0xC0 ModuleProlog = .text:0x000000A0; // type:function size:0xC0
fn_1_160 = .text:0x00000160; // type:function size:0x110 OptionFadeSprite = .text:0x00000160; // type:function size:0x110
fn_1_270 = .text:0x00000270; // type:function size:0xE4 scope:local FadeSprite = .text:0x00000270; // type:function size:0xE4 scope:local
fn_1_354 = .text:0x00000354; // type:function size:0x114 scope:local OptionFadeModel = .text:0x00000354; // type:function size:0x114 scope:local
fn_1_468 = .text:0x00000468; // type:function size:0xE8 scope:local FadeModel = .text:0x00000468; // type:function size:0xE8 scope:local
fn_1_550 = .text:0x00000550; // type:function size:0x34 OptionPadCheck = .text:0x00000550; // type:function size:0x34
fn_1_584 = .text:0x00000584; // type:function size:0x34 OptionPadDStkRepCheck = .text:0x00000584; // type:function size:0x34
fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 OptionPadDStkCheck = .text:0x000005B8; // type:function size:0x34
fn_1_5EC = .text:0x000005EC; // type:function size:0xFC scope:local SceneMain = .text:0x000005EC; // type:function size:0xFC scope:local
fn_1_6E8 = .text:0x000006E8; // type:function size:0x110 scope:local KillScene = .text:0x000006E8; // type:function size:0x110 scope:local
fn_1_7F8 = .text:0x000007F8; // type:function size:0x244 OptionCameraCreate = .text:0x000007F8; // type:function size:0x244
fn_1_A3C = .text:0x00000A3C; // type:function size:0x30 OptionCameraKill = .text:0x00000A3C; // type:function size:0x30
fn_1_A6C = .text:0x00000A6C; // type:function size:0x84 OptionCameraTargetSet = .text:0x00000A6C; // type:function size:0x84
fn_1_AF0 = .text:0x00000AF0; // type:function size:0x84 OptionCameraFocusSet = .text:0x00000AF0; // type:function size:0x84
fn_1_B74 = .text:0x00000B74; // type:function size:0x84 OptionCameraViewSet = .text:0x00000B74; // type:function size:0x84
fn_1_BF8 = .text:0x00000BF8; // type:function size:0x30 OptionCameraZoomGet = .text:0x00000BF8; // type:function size:0x30
fn_1_C28 = .text:0x00000C28; // type:function size:0x30 OptionCameraRotGet = .text:0x00000C28; // type:function size:0x30
fn_1_C58 = .text:0x00000C58; // type:function size:0x30 scope:local OptionCameraPosGet = .text:0x00000C58; // type:function size:0x30
fn_1_C88 = .text:0x00000C88; // type:function size:0x30 OptionCameraTargetGet = .text:0x00000C88; // type:function size:0x30
fn_1_CB8 = .text:0x00000CB8; // type:function size:0x8C OptionCameraDoneCheck = .text:0x00000CB8; // type:function size:0x8C
fn_1_D44 = .text:0x00000D44; // type:function size:0x28 scope:local ExecCameraObj = .text:0x00000D44; // type:function size:0x28 scope:local
fn_1_D6C = .text:0x00000D6C; // type:function size:0x578 scope:local ExecCamera = .text:0x00000D6C; // type:function size:0x578 scope:local
fn_1_12E4 = .text:0x000012E4; // type:function size:0x200 scope:local CameraExecDebug = .text:0x000012E4; // type:function size:0x200 scope:local
fn_1_14E4 = .text:0x000014E4; // type:function size:0xC0 scope:local CameraPrintDebug = .text:0x000014E4; // type:function size:0xC0 scope:local
fn_1_15A4 = .text:0x000015A4; // type:function size:0x1F4 OptionRoomCreate = .text:0x000015A4; // type:function size:0x1F4
fn_1_1798 = .text:0x00001798; // type:function size:0xAC OptionRoomKill = .text:0x00001798; // type:function size:0xAC
fn_1_1844 = .text:0x00001844; // type:function size:0x1E8 scope:local MoveOption = .text:0x00001844; // type:function size:0x1E8 scope:local
fn_1_1A2C = .text:0x00001A2C; // type:function size:0x44 OptionRoomExecModeSet = .text:0x00001A2C; // type:function size:0x44
fn_1_1A70 = .text:0x00001A70; // type:function size:0x1C OptionRoomExecModeGet = .text:0x00001A70; // type:function size:0x1C
fn_1_1A8C = .text:0x00001A8C; // type:function size:0x5FC scope:local ExecRoom = .text:0x00001A8C; // type:function size:0x5FC scope:local
fn_1_2088 = .text:0x00002088; // type:function size:0x88 scope:local CreateRoomBG = .text:0x00002088; // type:function size:0x88 scope:local
fn_1_2110 = .text:0x00002110; // type:function size:0x34 scope:local KillRoomBG = .text:0x00002110; // type:function size:0x34 scope:local
fn_1_2144 = .text:0x00002144; // type:function size:0x80 scope:local CreateArrow = .text:0x00002144; // type:function size:0x80 scope:local
fn_1_21C4 = .text:0x000021C4; // type:function size:0x34 scope:local KillArrow = .text:0x000021C4; // type:function size:0x34 scope:local
fn_1_21F8 = .text:0x000021F8; // type:function size:0x224 OptionGuideCreate = .text:0x000021F8; // type:function size:0x224
fn_1_241C = .text:0x0000241C; // type:function size:0x8C OptionGuideKill = .text:0x0000241C; // type:function size:0x8C
fn_1_24A8 = .text:0x000024A8; // type:function size:0x44 scope:local SetExecMode = .text:0x000024A8; // type:function size:0x44 scope:local
fn_1_24EC = .text:0x000024EC; // type:function size:0x1C scope:local GetExecMode = .text:0x000024EC; // type:function size:0x1C scope:local
fn_1_2508 = .text:0x00002508; // type:function size:0xA4 OptionGuideWalkExec = .text:0x00002508; // type:function size:0xA4
fn_1_25AC = .text:0x000025AC; // type:function size:0x46C scope:local ExecGuide = .text:0x000025AC; // type:function size:0x46C scope:local
fn_1_2A18 = .text:0x00002A18; // type:function size:0x2E8 scope:local UpdateGuide = .text:0x00002A18; // type:function size:0x2E8 scope:local
fn_1_2D00 = .text:0x00002D00; // type:function size:0x104 scope:local LerpAngle = .text:0x00002D00; // type:function size:0x104 scope:local
fn_1_2E04 = .text:0x00002E04; // type:function size:0x148 OptionStateCreate = .text:0x00002E04; // type:function size:0x148
fn_1_2F4C = .text:0x00002F4C; // type:function size:0x64 OptionStateKill = .text:0x00002F4C; // type:function size:0x64
fn_1_2FB0 = .text:0x00002FB0; // type:function size:0x1A8 scope:local ExecState = .text:0x00002FB0; // type:function size:0x1A8 scope:local
fn_1_3158 = .text:0x00003158; // type:function size:0xD4 OptionRumbleCreate = .text:0x00003158; // type:function size:0xD4
fn_1_322C = .text:0x0000322C; // type:function size:0x64 OptionRumbleKill = .text:0x0000322C; // type:function size:0x64
fn_1_3290 = .text:0x00003290; // type:function size:0x44 OptionRumbleExecModeSet = .text:0x00003290; // type:function size:0x44
fn_1_32D4 = .text:0x000032D4; // type:function size:0x1C OptionRumbleExecModeGet = .text:0x000032D4; // type:function size:0x1C
fn_1_32F0 = .text:0x000032F0; // type:function size:0x4BC scope:local ExecRumble = .text:0x000032F0; // type:function size:0x4BC scope:local
fn_1_37AC = .text:0x000037AC; // type:function size:0xBC scope:local CreateHand = .text:0x000037AC; // type:function size:0xBC scope:local
fn_1_3868 = .text:0x00003868; // type:function size:0x54 scope:local KillHand = .text:0x00003868; // type:function size:0x54 scope:local
fn_1_38BC = .text:0x000038BC; // type:function size:0xD0 scope:local CreateSystem = .text:0x000038BC; // type:function size:0xD0 scope:local
fn_1_398C = .text:0x0000398C; // type:function size:0x54 scope:local KillSystem = .text:0x0000398C; // type:function size:0x54 scope:local
fn_1_39E0 = .text:0x000039E0; // type:function size:0x128 scope:local StartSystemMotion = .text:0x000039E0; // type:function size:0x128 scope:local
fn_1_3B08 = .text:0x00003B08; // type:function size:0x84 scope:local CreatePad = .text:0x00003B08; // type:function size:0x84 scope:local
fn_1_3B8C = .text:0x00003B8C; // type:function size:0x54 scope:local KillPad = .text:0x00003B8C; // type:function size:0x54 scope:local
fn_1_3BE0 = .text:0x00003BE0; // type:function size:0x8C scope:local ShakePad = .text:0x00003BE0; // type:function size:0x8C scope:local
fn_1_3C6C = .text:0x00003C6C; // type:function size:0x94 scope:local CreatePadFilter = .text:0x00003C6C; // type:function size:0x94 scope:local
fn_1_3D00 = .text:0x00003D00; // type:function size:0x54 scope:local KillPadFilter = .text:0x00003D00; // type:function size:0x54 scope:local
fn_1_3D54 = .text:0x00003D54; // type:function size:0xC8 OptionRumbleMotionShowStart = .text:0x00003D54; // type:function size:0xC8
fn_1_3E1C = .text:0x00003E1C; // type:function size:0xB4 OptionRumbleMotionHideStart = .text:0x00003E1C; // type:function size:0xB4
fn_1_3ED0 = .text:0x00003ED0; // type:function size:0x58 OptionRumbleMotionCheck = .text:0x00003ED0; // type:function size:0x58
fn_1_3F28 = .text:0x00003F28; // type:function size:0xAC scope:local CreateHiliteOn = .text:0x00003F28; // type:function size:0xAC scope:local
fn_1_3FD4 = .text:0x00003FD4; // type:function size:0x54 scope:local KillHiliteOn = .text:0x00003FD4; // type:function size:0x54 scope:local
fn_1_4028 = .text:0x00004028; // type:function size:0x2B4 OptionSoundCreate = .text:0x00004028; // type:function size:0x2B4
fn_1_42DC = .text:0x000042DC; // type:function size:0xAC OptionSoundKill = .text:0x000042DC; // type:function size:0xAC
fn_1_4388 = .text:0x00004388; // type:function size:0x44 OptionSoundExecModeSet = .text:0x00004388; // type:function size:0x44
fn_1_43CC = .text:0x000043CC; // type:function size:0x1C OptionSoundExecModeGet = .text:0x000043CC; // type:function size:0x1C
fn_1_43E8 = .text:0x000043E8; // type:function size:0x270 scope:local ExecZoom = .text:0x000043E8; // type:function size:0x270 scope:local
fn_1_4658 = .text:0x00004658; // type:function size:0x424 scope:local ExecOptionSel = .text:0x00004658; // type:function size:0x424 scope:local
fn_1_4A7C = .text:0x00004A7C; // type:function size:0x3D4 scope:local ExecOutputMode = .text:0x00004A7C; // type:function size:0x3D4 scope:local
fn_1_4E50 = .text:0x00004E50; // type:function size:0x93C scope:local ExecMusic = .text:0x00004E50; // type:function size:0x93C scope:local
fn_1_578C = .text:0x0000578C; // type:function size:0x8B8 scope:local ExecVoice = .text:0x0000578C; // type:function size:0x8B8 scope:local
fn_1_6044 = .text:0x00006044; // type:function size:0xF8 scope:local LightSetCurr = .text:0x00006044; // type:function size:0xF8 scope:local
fn_1_613C = .text:0x0000613C; // type:function size:0x64 scope:local LightSetNone = .text:0x0000613C; // type:function size:0x64 scope:local
fn_1_61A0 = .text:0x000061A0; // type:function size:0xFC scope:local CreateHand = .text:0x000061A0; // type:function size:0xFC scope:local
fn_1_629C = .text:0x0000629C; // type:function size:0x54 scope:local KillHand = .text:0x0000629C; // type:function size:0x54 scope:local
fn_1_62F0 = .text:0x000062F0; // type:function size:0xFC scope:local CreateOutputModeHand = .text:0x000062F0; // type:function size:0xFC scope:local
fn_1_63EC = .text:0x000063EC; // type:function size:0x54 scope:local KillOutputModeHand = .text:0x000063EC; // type:function size:0x54 scope:local
fn_1_6440 = .text:0x00006440; // type:function size:0x94 scope:local CreateSystem = .text:0x00006440; // type:function size:0x94 scope:local
fn_1_64D4 = .text:0x000064D4; // type:function size:0x54 scope:local KillSystem = .text:0x000064D4; // type:function size:0x54 scope:local
fn_1_6528 = .text:0x00006528; // type:function size:0x118 scope:local CreateLightObj = .text:0x00006528; // type:function size:0x118 scope:local
fn_1_6640 = .text:0x00006640; // type:function size:0x54 scope:local KillLightObj = .text:0x00006640; // type:function size:0x54 scope:local
fn_1_6694 = .text:0x00006694; // type:function size:0x38 scope:local LightDispOff = .text:0x00006694; // type:function size:0x38 scope:local
fn_1_66CC = .text:0x000066CC; // type:function size:0x38 scope:local LightDispOn = .text:0x000066CC; // type:function size:0x38 scope:local
fn_1_6704 = .text:0x00006704; // type:function size:0xC4 scope:local CreateSpr = .text:0x00006704; // type:function size:0xC4 scope:local
fn_1_67C8 = .text:0x000067C8; // type:function size:0x60 scope:local KillSpr = .text:0x000067C8; // type:function size:0x60 scope:local
fn_1_6828 = .text:0x00006828; // type:function size:0x1E4 scope:local OptionSelDisp = .text:0x00006828; // type:function size:0x1E4 scope:local
fn_1_6A0C = .text:0x00006A0C; // type:function size:0x74 scope:local OptionSelHide = .text:0x00006A0C; // type:function size:0x74 scope:local
fn_1_6A80 = .text:0x00006A80; // type:function size:0x1DC scope:local OutputModeDisp = .text:0x00006A80; // type:function size:0x1DC scope:local
fn_1_6C5C = .text:0x00006C5C; // type:function size:0x74 scope:local OutputModeHide = .text:0x00006C5C; // type:function size:0x74 scope:local
fn_1_6CD0 = .text:0x00006CD0; // type:function size:0x1D4 scope:local MusicPageDisp = .text:0x00006CD0; // type:function size:0x1D4 scope:local
fn_1_6EA4 = .text:0x00006EA4; // type:function size:0xA4 scope:local MusicPageHide = .text:0x00006EA4; // type:function size:0xA4 scope:local
fn_1_6F48 = .text:0x00006F48; // type:function size:0x1D4 scope:local VoicePageDisp = .text:0x00006F48; // type:function size:0x1D4 scope:local
fn_1_711C = .text:0x0000711C; // type:function size:0xA4 scope:local VoicePageHide = .text:0x0000711C; // type:function size:0xA4 scope:local
fn_1_71C0 = .text:0x000071C0; // type:function size:0xE8 scope:local CreateNoteObj = .text:0x000071C0; // type:function size:0xE8 scope:local
fn_1_72A8 = .text:0x000072A8; // type:function size:0x68 scope:local KillNote = .text:0x000072A8; // type:function size:0x68 scope:local
fn_1_7310 = .text:0x00007310; // type:function size:0x400 scope:local HandleNote = .text:0x00007310; // type:function size:0x400 scope:local
fn_1_7710 = .text:0x00007710; // type:function size:0x190 scope:local CreateNote = .text:0x00007710; // type:function size:0x190 scope:local
fn_1_78A0 = .text:0x000078A0; // type:function size:0x60 scope:local CreateNoteSpawner = .text:0x000078A0; // type:function size:0x60 scope:local
fn_1_7900 = .text:0x00007900; // type:function size:0x3C scope:local KillNoteSpawner = .text:0x00007900; // type:function size:0x3C scope:local
fn_1_793C = .text:0x0000793C; // type:function size:0x5C4 scope:local ExecNoteSpawner = .text:0x0000793C; // type:function size:0x5C4 scope:local
fn_1_7F00 = .text:0x00007F00; // type:function size:0x148 scope:local PlaySound = .text:0x00007F00; // type:function size:0x148 scope:local
fn_1_8048 = .text:0x00008048; // type:function size:0x9C scope:local FadeSound = .text:0x00008048; // type:function size:0x9C scope:local
fn_1_80E4 = .text:0x000080E4; // type:function size:0x178 OptionRecordCreate = .text:0x000080E4; // type:function size:0x178
fn_1_825C = .text:0x0000825C; // type:function size:0x54 OptionRecordKill = .text:0x0000825C; // type:function size:0x54
fn_1_82B0 = .text:0x000082B0; // type:function size:0x44 OptionRecordExecModeSet = .text:0x000082B0; // type:function size:0x44
fn_1_82F4 = .text:0x000082F4; // type:function size:0x1C OptionRecordExecModeGet = .text:0x000082F4; // type:function size:0x1C
fn_1_8310 = .text:0x00008310; // type:function size:0x778 scope:local ExecRecord = .text:0x00008310; // type:function size:0x778 scope:local
fn_1_8A88 = .text:0x00008A88; // type:function size:0xD0 scope:local CreateSystem = .text:0x00008A88; // type:function size:0xD0 scope:local
fn_1_8B58 = .text:0x00008B58; // type:function size:0x54 scope:local KillSystem = .text:0x00008B58; // type:function size:0x54 scope:local
fn_1_8BAC = .text:0x00008BAC; // type:function size:0xD8 scope:local StartSystemMotion = .text:0x00008BAC; // type:function size:0xD8 scope:local
fn_1_8C84 = .text:0x00008C84; // type:function size:0xFC scope:local CreateHand = .text:0x00008C84; // type:function size:0xFC scope:local
fn_1_8D80 = .text:0x00008D80; // type:function size:0x54 scope:local KillHand = .text:0x00008D80; // type:function size:0x54 scope:local
fn_1_8DD4 = .text:0x00008DD4; // type:function size:0xC4 scope:local CreateSpr = .text:0x00008DD4; // type:function size:0xC4 scope:local
fn_1_8E98 = .text:0x00008E98; // type:function size:0x60 scope:local KillSpr = .text:0x00008E98; // type:function size:0x60 scope:local
fn_1_8EF8 = .text:0x00008EF8; // type:function size:0x40 scope:local GetDigit = .text:0x00008EF8; // type:function size:0x40 scope:local
fn_1_8F38 = .text:0x00008F38; // type:function size:0x77C scope:local ShowBoard = .text:0x00008F38; // type:function size:0x77C scope:local
fn_1_96B4 = .text:0x000096B4; // type:function size:0x9C scope:local HideBoard = .text:0x000096B4; // type:function size:0x9C scope:local
fn_1_9750 = .text:0x00009750; // type:function size:0x344 scope:local ShowTotal = .text:0x00009750; // type:function size:0x344 scope:local
fn_1_9A94 = .text:0x00009A94; // type:function size:0x7C scope:local HideTotal = .text:0x00009A94; // type:function size:0x7C scope:local
fn_1_9B10 = .text:0x00009B10; // type:function size:0x8A0 scope:local ShowMG = .text:0x00009B10; // type:function size:0x8A0 scope:local
fn_1_A3B0 = .text:0x0000A3B0; // type:function size:0x9C scope:local HideMG = .text:0x0000A3B0; // type:function size:0x9C scope:local
fn_1_A44C = .text:0x0000A44C; // type:function size:0x260 OptionWinCreate = .text:0x0000A44C; // type:function size:0x260
fn_1_A6AC = .text:0x0000A6AC; // type:function size:0x40 OptionWinKill = .text:0x0000A6AC; // type:function size:0x40
fn_1_A6EC = .text:0x0000A6EC; // type:function size:0x18 OptionWinAnimIn = .text:0x0000A6EC; // type:function size:0x18
fn_1_A704 = .text:0x0000A704; // type:function size:0x18 OptionWinAnimOut = .text:0x0000A704; // type:function size:0x18
fn_1_A71C = .text:0x0000A71C; // type:function size:0x54 OptionWinMesSet = .text:0x0000A71C; // type:function size:0x54
fn_1_A770 = .text:0x0000A770; // type:function size:0x40 scope:local OptionWinInsertMesSet = .text:0x0000A770; // type:function size:0x40
fn_1_A7B0 = .text:0x0000A7B0; // type:function size:0x40 OptionWinPosSet = .text:0x0000A7B0; // type:function size:0x40
fn_1_A7F0 = .text:0x0000A7F0; // type:function size:0x38 OptionWinDispOn = .text:0x0000A7F0; // type:function size:0x38
fn_1_A828 = .text:0x0000A828; // type:function size:0x38 OptionWinDispOff = .text:0x0000A828; // type:function size:0x38
fn_1_A860 = .text:0x0000A860; // type:function size:0x20 scope:local OptionWinMesWait = .text:0x0000A860; // type:function size:0x20
fn_1_A880 = .text:0x0000A880; // type:function size:0x24 OptionWinChoiceSet = .text:0x0000A880; // type:function size:0x24
fn_1_A8A4 = .text:0x0000A8A4; // type:function size:0x108 scope:local ExecWindow = .text:0x0000A8A4; // type:function size:0x108 scope:local
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte _ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors: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_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_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 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_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_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_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_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_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_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0xC scope:local optionDescTbl = .rodata:0x000000D4; // type:object size:0xC scope:local
lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC scope:local 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_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_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 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_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_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_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:float
lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x38 scope:local musicPageNameTbl = .rodata:0x000001A8; // type:object size:0x38 scope:local
lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8C0 scope:local musicTbl = .rodata:0x000001E0; // type:object size:0x8C0 scope:local
lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x30 scope:local voiceCharNameTbl = .rodata:0x00000AA0; // type:object size:0x30 scope:local
lbl_1_rodata_AD0 = .rodata:0x00000AD0; // type:object size:0x780 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_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_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 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_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_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_1270 = .rodata:0x00001270; // type:object size:0x8 scope:local data:double
lbl_1_rodata_1278 = .rodata:0x00001278; // type:object size:0x8 scope:local outputModeTbl = .rodata:0x00001278; // type:object size:0x8 scope:local
lbl_1_rodata_1280 = .rodata:0x00001280; // type:object size:0x8 scope:local soundModeTbl = .rodata:0x00001280; // type:object size:0x8 scope:local
lbl_1_rodata_1288 = .rodata:0x00001288; // 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_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_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 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_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_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_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_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_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_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_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_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_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_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_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_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_1348 = .rodata:0x00001348; // type:object size:0x4 scope:local data:float
lbl_1_rodata_134C = .rodata:0x0000134C; // type:object size:0x4 scope:local sprHideTbl$821 = .rodata:0x0000134C; // type:object size:0x4 scope:local
lbl_1_rodata_1350 = .rodata:0x00001350; // type:object size:0x8 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_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_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 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_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_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_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_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_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 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_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_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_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_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_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 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_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_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_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_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_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 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_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_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_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_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_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_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_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_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_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_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_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 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_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_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_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 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 execModeTbl = .data:0x00000098; // type:object size:0x8 scope:local data:4byte
lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x1C scope:local lightTbl = .data:0x000000A0; // type:object size:0x1C scope:local
lbl_1_data_BC = .data:0x000000BC; // type:object size:0x24 scope:local shadowPosTbl = .data:0x000000BC; // type:object size:0x24 scope:local
jumptable_1_data_E0 = .data:0x000000E0; // 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_110 = .data:0x00000110; // type:object size:0x8 scope:local
lbl_1_data_118 = .data:0x00000118; // type:object size:0x38 scope:local data:4byte musicPageOn = .data:0x00000118; // type:object size:0x38 scope:local data:4byte
lbl_1_data_150 = .data:0x00000150; // type:object size:0x18 scope:local data:4byte execModeTbl = .data:0x00000150; // type:object size:0x18 scope:local data:4byte
lbl_1_data_168 = .data:0x00000168; // type:object size:0xC scope:local choiceMess = .data:0x00000168; // type:object size:0xC scope:local
jumptable_1_data_174 = .data:0x00000174; // type:object size:0x24 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 jumptable_1_data_198 = .data:0x00000198; // type:object size:0x24 scope:local
lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x4C scope:local spriteDataTbl = .data:0x000001BC; // type:object size:0x4C scope:local
lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 scope:local noteMdlTbl = .data:0x00000208; // type:object size:0x8 scope:local
lbl_1_data_210 = .data:0x00000210; // type:object size:0x8 scope:local data:4byte 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_218 = .data:0x00000218; // type:object size:0x1C scope:local
jumptable_1_data_234 = .data:0x00000234; // type:object size:0x20 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 rumbleF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte scene = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte optionObjMan = .bss:0x00000008; // type:object size:0x8 data:4byte
lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte optionCamera = .bss:0x00000010; // type:object size:0x8 data:4byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x8 data:4byte optionRoom = .bss:0x00000018; // type:object size:0x8 data:4byte
lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:4byte optionGuide = .bss:0x00000020; // type:object size:0x8 data:4byte
lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x8 data:4byte optionState = .bss:0x00000028; // type:object size:0x8 data:4byte
lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x8 data:4byte optionRumble = .bss:0x00000030; // type:object size:0x8 data:4byte
lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x8 data:4byte optionSound = .bss:0x00000038; // type:object size:0x8 data:4byte
lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 data:4byte optionRecord = .bss:0x00000040; // type:object size:0x4 data:4byte

View file

@ -6,80 +6,85 @@
#include "dolphin/types.h" #include "dolphin/types.h"
typedef struct { typedef struct {
/* 0x00 */ Process *unk00; /* 0x00 */ Process *process;
/* 0x04 */ s16 unk04; /* 0x04 */ s16 window;
/* 0x06 */ char unk06[2]; /* 0x08 */ s32 id;
/* 0x08 */ s32 unk08; /* 0x0C */ s32 visible;
/* 0x0C */ s32 unk0C; /* 0x10 */ BOOL messWaitSignal;
/* 0x10 */ s32 unk10; /* 0x14 */ BOOL choiceSignal;
/* 0x14 */ s32 unk14; /* 0x18 */ u32 messToBeSet;
/* 0x18 */ u32 unk18; /* 0x1C */ s32 choice;
/* 0x1C */ s32 unk1C; /* 0x20 */ s32 state; // TODO add defines
/* 0x20 */ s32 unk20; } OptionWindow; // Size 0x24
} UnkWindowDataStruct; // Size 0x24
void fn_1_160(s16 arg0, s32 arg1, s32 arg2); void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration);
s32 fn_1_550(u16 arg0); void OptionFadeModel(s16 model, BOOL inF, s32 duration);
s32 fn_1_584(u16 arg0);
s32 fn_1_5B8(u16 arg0);
omObjData *fn_1_7F8(void); BOOL OptionPadCheck(u16 btn);
void fn_1_A3C(omObjData *arg0); BOOL OptionPadDStkRepCheck(u16 arg0);
void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); BOOL OptionPadDStkCheck(u16 arg0);
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);
omObjData *fn_1_15A4(void); omObjData *OptionCameraCreate(void);
void fn_1_1798(omObjData *arg0); void OptionCameraKill(omObjData *object);
void fn_1_1A2C(omObjData *arg0, s32 arg1); void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration);
s32 fn_1_1A70(omObjData *arg0); 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 OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z);
void fn_1_241C(omObjData *arg0); s32 OptionCameraDoneCheck(omObjData *object);
void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3);
omObjData *fn_1_2E04(void); omObjData *OptionRoomCreate(void);
void fn_1_2F4C(omObjData *arg0); void OptionRoomKill(omObjData *object);
void OptionRoomExecModeSet(omObjData *object, s32 execMode);
s32 OptionRoomExecModeGet(omObjData *object);
omObjData *fn_1_3158(void); omObjData *OptionGuideCreate(void);
void fn_1_322C(omObjData *arg0); void OptionGuideKill(omObjData *object);
void fn_1_3290(omObjData *arg0, s32 arg1); void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration);
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 *fn_1_4028(void); omObjData *OptionStateCreate(void);
void fn_1_42DC(omObjData *arg0); void OptionStateKill(omObjData *object);
void fn_1_4388(omObjData *arg0, s32 arg1);
s32 fn_1_43CC(omObjData *arg0);
omObjData *fn_1_80E4(void); omObjData *OptionRumbleCreate(void);
void fn_1_825C(omObjData *arg0); void OptionRumbleKill(omObjData *object);
void fn_1_82B0(omObjData *arg0, s32 arg1); void OptionRumbleExecModeSet(omObjData *object, s32 execMode);
s32 fn_1_82F4(omObjData *arg0); s32 OptionRumbleExecModeGet(omObjData *object);
void OptionRumbleMotionShowStart(omObjData *object);
void OptionRumbleMotionHideStart(omObjData *object);
BOOL OptionRumbleMotionCheck(omObjData *object);
UnkWindowDataStruct *fn_1_A44C(s32 arg0); omObjData *OptionSoundCreate(void);
void fn_1_A6AC(UnkWindowDataStruct *arg0); void OptionSoundKill(omObjData *object);
void fn_1_A6EC(UnkWindowDataStruct *arg0); void OptionSoundExecModeSet(omObjData *object, s32 execMode);
void fn_1_A704(UnkWindowDataStruct *arg0); s32 OptionSoundExecModeGet(omObjData *object);
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);
extern Process *lbl_1_bss_8; omObjData *OptionRecordCreate(void);
extern omObjData *lbl_1_bss_10; void OptionRecordKill(omObjData *object);
extern omObjData *lbl_1_bss_18; void OptionRecordExecModeSet(omObjData *object, s32 execMode);
extern omObjData *lbl_1_bss_20; s32 OptionRecordExecModeGet(omObjData *object);
extern omObjData *lbl_1_bss_28;
extern omObjData *lbl_1_bss_30; OptionWindow *OptionWinCreate(s32 id);
extern omObjData *lbl_1_bss_38; void OptionWinKill(OptionWindow *work);
extern omObjData *lbl_1_bss_40; 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 #endif

View file

@ -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 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 atanf(float x) { return (float)atan((double)x); }
_MATH_INLINE float asinf(float x) { return (float)asin((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); } _MATH_INLINE float fmodf(float x, float m) { return (float)fmod((double)x, (double)m); }

View file

@ -6,232 +6,247 @@
#include "game/process.h" #include "game/process.h"
#include "dolphin.h" #include "dolphin.h"
#include "math.h" #include "ext_math.h"
typedef struct { typedef struct {
/* 0x00 */ Vec unk00; /* 0x00 */ Vec pos;
/* 0x0C */ Vec unk0C; /* 0x0C */ Vec target;
/* 0x18 */ float unk18; /* 0x18 */ Vec up;
/* 0x1C */ float unk1C; /* 0x24 */ float zoom;
/* 0x20 */ float unk20; /* 0x28 */ float rot;
/* 0x24 */ float unk24; /* 0x2C */ Vec posPrev;
/* 0x28 */ float unk28; /* 0x38 */ Vec targetPrev;
/* 0x2C */ Vec unk2C;
/* 0x38 */ Vec unk38;
/* 0x44 */ char unk44[0xC]; /* 0x44 */ char unk44[0xC];
/* 0x50 */ float unk50; /* 0x50 */ float prevZoom;
/* 0x54 */ float unk54; /* 0x54 */ float prevRot;
/* 0x58 */ Vec unk58; /* 0x58 */ Vec posTarget;
/* 0x64 */ Vec unk64; /* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC]; /* 0x70 */ char unk70[0xC];
/* 0x7C */ float unk7C; /* 0x7C */ float zoomTarget;
/* 0x80 */ float unk80; /* 0x80 */ float rotTarget;
/* 0x84 */ float unk84; /* 0x84 */ float timeEye;
/* 0x88 */ float unk88; /* 0x88 */ float eyeSpeed;
/* 0x8C */ float unk8C; /* 0x8C */ float timeTarget;
/* 0x90 */ float unk90; /* 0x90 */ float targetSpeed;
/* 0x94 */ float unk94; /* 0x94 */ float timeRot;
/* 0x98 */ float unk98; /* 0x98 */ float rotSpeed;
} UnkCameraDataStruct; // Size 0x9C } CameraWork; // Size 0x9C
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3); static void ExecCameraObj(omObjData *object);
static void fn_1_D44(omObjData *arg0); static void ExecCamera(omObjData *object);
static void fn_1_D6C(omObjData *arg0); static void fn_1_12E4(omObjData *object);
static void fn_1_12E4(omObjData *arg0); static void PrintDebugInfo(omObjData *object);
static void fn_1_14E4(omObjData *arg0);
omObjData *lbl_1_bss_10; omObjData *optionCamera;
static float pad_04_00000000_data[] = { static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f };
0.0f, 500.0f, 0.0f,
0.0f, -1.0f, 0.0f
};
static s32 pad_04_00000018_data = -1; static s32 pad_04_00000018_data = -1;
omObjData *fn_1_7F8(void) { omObjData *OptionCameraCreate(void)
omObjData *var_r30; {
UnkCameraDataStruct *temp_r31; omObjData *object;
CameraWork *work;
var_r30 = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, fn_1_D44); object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkCameraDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r31; object->data = work;
temp_r31->unk00.x = 0.0f; work->pos.x = 0.0f;
temp_r31->unk00.y = 0.0f; work->pos.y = 0.0f;
temp_r31->unk00.z = 0.0f; work->pos.z = 0.0f;
temp_r31->unk0C.x = 0.0f; work->target.x = 0.0f;
temp_r31->unk0C.y = 0.0f; work->target.y = 0.0f;
temp_r31->unk0C.z = 0.0f; work->target.z = 0.0f;
temp_r31->unk18 = 0.0f; work->up.x = 0.0f;
temp_r31->unk1C = 1.0f; work->up.y = 1.0f;
temp_r31->unk20 = 0.0f; work->up.z = 0.0f;
temp_r31->unk24 = 0.0f; work->zoom = 0.0f;
temp_r31->unk28 = 0.0f; work->rot = 0.0f;
temp_r31->unk8C = 1.0f; work->timeTarget = 1.0f;
temp_r31->unk84 = 1.0f; work->timeEye = 1.0f;
temp_r31->unk94 = 1.0f; work->timeRot = 1.0f;
Hu3DCameraCreate(1); Hu3DCameraCreate(1);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f); Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f);
fn_1_B74(var_r30, 600.0f, 60.0f, 120.0f, 1); OptionCameraViewSet(object, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1); OptionCameraTargetSet(object, 180.0f, 120.0f, 0.0f, 1);
return var_r30; return object;
} }
void fn_1_A3C(omObjData *arg0) { void OptionCameraKill(omObjData *object)
HuMemDirectFree(arg0->data); {
HuMemDirectFree(object->data);
} }
void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration)
UnkCameraDataStruct *temp_r31 = arg0->data; {
CameraWork *work = object->data;
temp_r31->unk58.x = arg1; work->posTarget.x = x;
temp_r31->unk58.y = arg2; work->posTarget.y = y;
temp_r31->unk58.z = arg3; work->posTarget.z = z;
temp_r31->unk2C = temp_r31->unk00; work->posPrev = work->pos;
temp_r31->unk84 = 0.0f; work->timeEye = 0.0f;
temp_r31->unk88 = 1.0f / arg4; work->eyeSpeed = 1.0f / duration;
} }
void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { void OptionCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration)
UnkCameraDataStruct *temp_r31 = arg0->data; {
CameraWork *work = object->data;
temp_r31->unk64.x = arg1; work->posFocus.x = x;
temp_r31->unk64.y = arg2; work->posFocus.y = y;
temp_r31->unk64.z = arg3; work->posFocus.z = z;
temp_r31->unk38 = temp_r31->unk0C; work->targetPrev = work->target;
temp_r31->unk8C = 0.0f; work->timeTarget = 0.0f;
temp_r31->unk90 = 1.0f / arg4; work->targetSpeed = 1.0f / duration;
} }
void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration)
UnkCameraDataStruct *temp_r31 = arg0->data; {
CameraWork *work = object->data;
temp_r31->unk64.y = arg3; work->posFocus.y = y;
temp_r31->unk7C = arg1; work->zoomTarget = zoom;
temp_r31->unk80 = arg2; work->rotTarget = rot;
temp_r31->unk38.y = temp_r31->unk0C.y; work->targetPrev.y = work->target.y;
temp_r31->unk50 = temp_r31->unk24; work->prevZoom = work->zoom;
temp_r31->unk54 = temp_r31->unk28; work->prevRot = work->rot;
temp_r31->unk94 = 0.0f; work->timeRot = 0.0f;
temp_r31->unk98 = 1.0f / arg4; work->rotSpeed = 1.0f / duration;
} }
float fn_1_BF8(omObjData *arg0) { // GetZoom
UnkCameraDataStruct *temp_r31 = arg0->data; float OptionCameraZoomGet(omObjData *object)
float temp_f31; {
CameraWork *work = object->data;
float zoom;
temp_f31 = temp_r31->unk24; zoom = work->zoom;
return temp_f31; return zoom;
} }
float fn_1_C28(omObjData *arg0) { // GetRot
UnkCameraDataStruct *temp_r31 = arg0->data; float OptionCameraRotGet(omObjData *object)
float temp_f31; {
CameraWork *work = object->data;
float rot;
temp_f31 = temp_r31->unk28; rot = work->rot;
return temp_f31; return rot;
} }
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3) { // Getpos
UnkCameraDataStruct *temp_r31 = arg0->data; void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
{
CameraWork *temp_r31 = object->data;
*arg1 = temp_r31->unk00.x; *x = temp_r31->pos.x;
*arg2 = temp_r31->unk00.y; *y = temp_r31->pos.y;
*arg3 = temp_r31->unk00.z; *z = temp_r31->pos.z;
} }
void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) { // Gettarget
UnkCameraDataStruct *temp_r31 = arg0->data; void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{
CameraWork *work = object->data;
*arg1 = temp_r31->unk0C.x; *x = work->target.x;
*arg2 = temp_r31->unk0C.y; *y = work->target.y;
*arg3 = temp_r31->unk0C.z; *z = work->target.z;
} }
s32 fn_1_CB8(omObjData *arg0) { // CameraDone
UnkCameraDataStruct *temp_r31 = arg0->data; s32 OptionCameraDoneCheck(omObjData *object)
{
CameraWork *work = object->data;
s32 var_r30 = 1; s32 var_r30 = 1;
s32 var_r29 = 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; var_r29 = 0;
} }
if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) { if (var_r29 == 0 && !(work->timeEye < 1.0f)) {
var_r30 = 0; var_r30 = 0;
} }
return var_r30; return var_r30;
} }
static void fn_1_D44(omObjData *arg0) { static void ExecCameraObj(omObjData *object)
fn_1_D6C(arg0); {
ExecCamera(object);
} }
static void fn_1_D6C(omObjData *arg0) { static void ExecCamera(omObjData *object)
UnkCameraDataStruct *temp_r31 = arg0->data; {
float temp_f28; CameraWork *work = object->data;
float temp_f31; float weight;
float temp_f30; float dx;
float dz;
if (temp_r31->unk84 < 1.0f) { if (work->timeEye < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk84 * M_PI / 180.0); weight = sind(90.0f * work->timeEye);
temp_r31->unk00.x = temp_r31->unk2C.x + temp_f28 * (temp_r31->unk58.x - temp_r31->unk2C.x); work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
temp_r31->unk00.y = temp_r31->unk2C.y + temp_f28 * (temp_r31->unk58.y - temp_r31->unk2C.y); work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
temp_r31->unk00.z = temp_r31->unk2C.z + temp_f28 * (temp_r31->unk58.z - temp_r31->unk2C.z); work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
if ((temp_r31->unk84 += temp_r31->unk88) >= 1.0f) { if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
temp_r31->unk00 = temp_r31->unk58; work->pos = work->posTarget;
} }
} }
if (temp_r31->unk8C < 1.0f) { if (work->timeTarget < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk8C * M_PI / 180.0); weight = sind(90.0f * work->timeTarget);
temp_r31->unk0C.x = temp_r31->unk38.x + temp_f28 * (temp_r31->unk64.x - temp_r31->unk38.x); work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
temp_r31->unk0C.z = temp_r31->unk38.z + temp_f28 * (temp_r31->unk64.z - temp_r31->unk38.z); work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((temp_r31->unk8C += temp_r31->unk90) >= 1.0f) { if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
temp_r31->unk0C = temp_r31->unk64; work->target = work->posFocus;
} }
} }
if (temp_r31->unk94 < 1.0f) { if (work->timeRot < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk94 * M_PI / 180.0); weight = sind(90.0f * work->timeRot);
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
temp_r31->unk24 = temp_r31->unk50 + temp_f28 * (temp_r31->unk7C - temp_r31->unk50); work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom);
temp_r31->unk28 = temp_r31->unk54 + temp_f28 * (temp_r31->unk80 - temp_r31->unk54); work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot);
if ((temp_r31->unk94 += temp_r31->unk98) >= 1.0f) { if ((work->timeRot += work->rotSpeed) >= 1.0f) {
temp_r31->unk0C.y = temp_r31->unk64.y; work->target.y = work->posFocus.y;
temp_r31->unk24 = temp_r31->unk7C; work->zoom = work->zoomTarget;
temp_r31->unk28 = temp_r31->unk80; work->rot = work->rotTarget;
} }
temp_r31->unk0C.x = temp_r31->unk24 * -sin(temp_r31->unk28 * M_PI / 180.0); work->target.x = work->zoom * -sind(work->rot);
temp_r31->unk0C.z = temp_r31->unk24 * cos(temp_r31->unk28 * M_PI / 180.0); work->target.z = work->zoom * cosd(work->rot);
} }
temp_f31 = temp_r31->unk0C.x - temp_r31->unk00.x; dx = work->target.x - work->pos.x;
temp_f30 = temp_r31->unk0C.z - temp_r31->unk00.z; dz = work->target.z - work->pos.z;
temp_r31->unk24 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); work->zoom = sqrtf(dx * dx + dz * dz);
temp_r31->unk28 = fmod(-(180.0 * (atan2(temp_f31, temp_f30) / M_PI)), 360.0); work->rot = fmod(-atan2d(dx, dz), 360.0);
if (temp_r31->unk28 < 0.0f) { if (work->rot < 0.0f) {
temp_r31->unk28 += 360.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);
} }
static void fn_1_12E4(omObjData *arg0) { Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x,
UnkCameraDataStruct *temp_r31; work->target.y, work->target.z);
}
static void CameraExecDebug(omObjData *object)
{
CameraWork *work;
if (HuPadBtn[0] & 0xF) { if (HuPadBtn[0] & 0xF) {
temp_r31 = arg0->data; work = object->data;
temp_r31->unk0C.x += 0.5f * HuPadStkX[0]; work->target.x += 0.5f * HuPadStkX[0];
temp_r31->unk0C.y += 0.5f * HuPadStkY[0]; work->target.y += 0.5f * HuPadStkY[0];
temp_r31->unk00.z += 0.5f * HuPadTrigL[0]; work->pos.z += 0.5f * HuPadTrigL[0];
temp_r31->unk00.z -= 0.5f * HuPadTrigR[0]; work->pos.z -= 0.5f * HuPadTrigR[0];
temp_r31->unk00.x += 0.5f * HuPadSubStkY[0]; work->pos.x += 0.5f * HuPadSubStkY[0];
temp_r31->unk00.y += 0.5f * HuPadSubStkX[0]; work->pos.y += 0.5f * HuPadSubStkX[0];
} }
} }
static void fn_1_14E4(omObjData *arg0) { static void CameraPrintDebug(omObjData *object)
UnkCameraDataStruct *temp_r31 = arg0->data; {
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, 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", temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.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", temp_r31->unk24, temp_r31->unk28); print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
} }

View file

@ -6,225 +6,231 @@
#include "game/memory.h" #include "game/memory.h"
#include "dolphin.h" #include "dolphin.h"
#include "math.h" #include "ext_math.h"
typedef struct { typedef struct {
/* 0x00 */ s32 unk00; /* 0x00 */ s32 execMode;
/* 0x04 */ s16 unk04; /* 0x04 */ s16 motion;
/* 0x06 */ char unk06[2]; /* 0x08 */ Vec pos;
/* 0x08 */ Vec unk08; /* 0x14 */ Vec newPos;
/* 0x14 */ Vec unk14; /* 0x20 */ Vec rot;
/* 0x20 */ float unk20; /* 0x2C */ Vec posDelta;
/* 0x24 */ float unk24; /* 0x38 */ float distRemain;
/* 0x28 */ float unk28; /* 0x3C */ float angle;
/* 0x2C */ float unk2C; /* 0x40 */ float angleEnd;
/* 0x30 */ float unk30; /* 0x44 */ float camDist;
/* 0x34 */ float unk34;
/* 0x38 */ float unk38;
/* 0x3C */ float unk3C;
/* 0x40 */ float unk40;
/* 0x44 */ float unk44;
/* 0x48 */ char unk48[0xC]; /* 0x48 */ char unk48[0xC];
/* 0x54 */ float unk54; /* 0x54 */ float time;
/* 0x58 */ float unk58; /* 0x58 */ float speed;
/* 0x5C */ s32 unk5C; /* 0x5C */ s32 unk5C;
/* 0x60 */ s32 unk60; /* 0x60 */ s32 unk60;
} UnkGuideDataStruct; // Size 0x64 } GuideWork; // Size 0x64
static void fn_1_24A8(omObjData *arg0, s32 arg1); #define MODE_DISABLED 0
static s32 fn_1_24EC(omObjData *arg0); #define MODE_HANDLE_GUIDE 1
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);
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, 16),
DATA_MAKE_NUM(DATADIR_OPTION, 17), DATA_MAKE_NUM(DATADIR_OPTION, 17),
DATA_MAKE_NUM(DATADIR_OPTION, 18) DATA_MAKE_NUM(DATADIR_OPTION, 18),
}; };
static omObjFunc lbl_1_data_98[] = { static omObjFunc execModeTbl[] = { NULL, ExecGuide };
NULL,
fn_1_25AC
};
omObjData *fn_1_21F8(void) { omObjData *OptionGuideCreate(void)
omObjData *var_r31; {
UnkGuideDataStruct *temp_r30; omObjData *object;
GuideWork *work;
s32 i; s32 i;
var_r31 = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); object = omAddObjEx(optionObjMan, 1002, 1, 3, 2, NULL);
temp_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkGuideDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
var_r31->data = temp_r30; object->data = work;
temp_r30->unk08.x = -298.59f; work->pos.x = -298.59f;
temp_r30->unk08.z = 298.21f; work->pos.z = 298.21f;
temp_r30->unk08.y = 0.0f; work->pos.y = 0.0f;
temp_r30->unk20 = 0.0f;
temp_r30->unk24 = 134.42f; work->rot.x = 0.0f;
temp_r30->unk28 = 0.0f; work->rot.y = 134.42f;
temp_r30->unk2C = 0.0f; work->rot.z = 0.0f;
temp_r30->unk34 = 0.0f;
temp_r30->unk30 = 0.0f; work->posDelta.x = 0.0f;
var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); work->posDelta.z = 0.0f;
Hu3DModelLayerSet(var_r31->model[0], 1); 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++) { 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); work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC);
temp_r30->unk60 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 0xC); work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC);
CharModelLayerSetAll(1); CharModelLayerSetAll(1);
Hu3DModelShadowSet(var_r31->model[0]); Hu3DModelShadowSet(object->model[0]);
Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[0], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001);
fn_1_24A8(var_r31, 0); SetExecMode(object, MODE_DISABLED);
fn_1_2A18(var_r31); UpdateGuide(object);
return var_r31; return object;
} }
void fn_1_241C(omObjData *arg0) { void OptionGuideKill(omObjData *object)
UnkGuideDataStruct *temp_r29 = arg0->data; {
GuideWork *work = object->data;
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]); Hu3DModelKill(object->model[i]);
} }
for (i = 0; i < 3; 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) { static void SetExecMode(omObjData *object, s32 execMode)
UnkGuideDataStruct *temp_r31 = arg0->data; {
GuideWork *work = object->data;
temp_r31->unk00 = arg1; work->execMode = execMode;
arg0->func = lbl_1_data_98[arg1]; object->func = execModeTbl[execMode];
arg0->unk10 = 0; object->unk10 = 0;
arg0->unk10 = 0; object->unk10 = 0;
} }
static s32 fn_1_24EC(omObjData *arg0) { static s32 GetExecMode(omObjData *object)
UnkGuideDataStruct *temp_r31 = arg0->data; {
GuideWork *work = object->data;
return temp_r31->unk00; return work->execMode;
} }
void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) { void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration)
UnkGuideDataStruct *temp_r31 = arg0->data; {
GuideWork *work = object->data;
temp_r31->unk40 = arg1; work->angleEnd = angleEnd;
temp_r31->unk44 = arg2; work->camDist = camDist;
temp_r31->unk54 = 0.0f; work->time = 0.0f;
temp_r31->unk58 = 1.0f / arg3; work->speed = 1.0f / duration;
temp_r31->unk04 = 0; work->motion = 0;
fn_1_24A8(arg0, 1); SetExecMode(object, MODE_HANDLE_GUIDE);
} }
static void fn_1_25AC(omObjData *arg0) { static void ExecGuide(omObjData *object)
UnkGuideDataStruct *temp_r31 = arg0->data; {
float var_f31; GuideWork *work = object->data;
float var_f30; float angle;
float weight;
switch (arg0->unk10) { switch (object->unk10) {
case 0: case 0:
temp_r31->unk3C = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); work->angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0);
if (temp_r31->unk3C < 0.0f) { if (work->angle < 0.0f) {
temp_r31->unk3C += 360.0f; work->angle += 360.0f;
} }
arg0->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
var_f30 = sin(90.0f * temp_r31->unk54 * M_PI / 180.0); weight = sind(90.0f * work->time);
var_f31 = temp_r31->unk3C + var_f30 * (temp_r31->unk40 - temp_r31->unk3C); angle = work->angle + weight * (work->angleEnd - work->angle);
temp_r31->unk14.x = temp_r31->unk44 * -sin(var_f31 * M_PI / 180.0); work->newPos.x = work->camDist * -sind(angle);
temp_r31->unk14.z = temp_r31->unk44 * cos(var_f31 * M_PI / 180.0); work->newPos.z = work->camDist * cosd(angle);
temp_r31->unk14.y = 0.0f; work->newPos.y = 0.0f;
temp_r31->unk2C = temp_r31->unk14.x - temp_r31->unk08.x; work->posDelta.x = work->newPos.x - work->pos.x;
temp_r31->unk34 = temp_r31->unk14.z - temp_r31->unk08.z; work->posDelta.z = work->newPos.z - work->pos.z;
if (temp_r31->unk54 <= 0.0f) { if (work->time <= 0.0f) {
temp_r31->unk2C = 0.0f; work->posDelta.x = 0.0f;
temp_r31->unk34 = 0.0f; work->posDelta.z = 0.0f;
temp_r31->unk08 = temp_r31->unk14; work->pos = work->newPos;
} }
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break; break;
} }
var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0);
if (var_f31 < 0.0f) { if (angle < 0.0f) {
var_f31 += 360.0f; angle += 360.0f;
} }
temp_r31->unk14.x = 422.0 * -sin(var_f31 * M_PI / 180.0); work->newPos.x = 422.0 * -sind(angle);
temp_r31->unk14.z = 422.0 * cos(var_f31 * M_PI / 180.0); work->newPos.z = 422.0 * cosd(angle);
temp_r31->unk2C = (temp_r31->unk14.x - temp_r31->unk08.x) / 10.0f; work->posDelta.x = (work->newPos.x - work->pos.x) / 10.0f;
temp_r31->unk34 = (temp_r31->unk14.z - temp_r31->unk08.z) / 10.0f; work->posDelta.z = (work->newPos.z - work->pos.z) / 10.0f;
temp_r31->unk58 = 0.1f; work->speed = 0.1f;
temp_r31->unk54 = 0.0f; work->time = 0.0f;
arg0->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break; break;
} }
arg0->unk10 = 3; object->unk10 = 3;
/* fallthrough */ /* fallthrough */
case 3: case 3:
temp_r31->unk08 = temp_r31->unk14; work->pos = work->newPos;
temp_r31->unk2C = 0.0f; work->posDelta.x = 0.0f;
temp_r31->unk30 = 0.0f; work->posDelta.y = 0.0f;
temp_r31->unk34 = 0.0f; work->posDelta.z = 0.0f;
fn_1_2A18(arg0); UpdateGuide(object);
fn_1_24A8(arg0, 0); SetExecMode(object, MODE_DISABLED);
break; break;
} }
fn_1_2A18(arg0); UpdateGuide(object);
} }
static void fn_1_2A18(omObjData *arg0) { static void UpdateGuide(omObjData *object)
UnkGuideDataStruct *temp_r31 = arg0->data; {
s16 var_r29; GuideWork *work = object->data;
s16 motion;
var_r29 = 0; motion = 0;
temp_r31->unk38 = sqrtf(temp_r31->unk2C * temp_r31->unk2C + temp_r31->unk34 * temp_r31->unk34); work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= temp_r31->unk38) { if (0.001f <= work->distRemain) {
if (14.0f <= temp_r31->unk38) { if (14.0f <= work->distRemain) {
temp_r31->unk2C /= temp_r31->unk38; work->posDelta.x /= work->distRemain;
temp_r31->unk34 /= temp_r31->unk38; work->posDelta.z /= work->distRemain;
temp_r31->unk38 = 14.0f; work->distRemain = 14.0f;
temp_r31->unk2C = 14.0f * temp_r31->unk2C; work->posDelta.x = 14.0f * work->posDelta.x;
temp_r31->unk34 = 14.0f * temp_r31->unk34; 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); work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f);
if (8.0f <= temp_r31->unk38) { if (8.0f <= work->distRemain) {
var_r29 = 2; motion = 2;
} else { }
var_r29 = 1; else {
motion = 1;
} }
} }
temp_r31->unk08.x += temp_r31->unk2C; work->pos.x += work->posDelta.x;
temp_r31->unk08.z += temp_r31->unk34; work->pos.z += work->posDelta.z;
if (temp_r31->unk04 != var_r29) { if (work->motion != motion) {
Hu3DMotionShiftSet(*arg0->model, arg0->motion[var_r29], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(*object->model, object->motion[motion], 0.0f, 8.0f, 0x40000001);
temp_r31->unk04 = var_r29; work->motion = motion;
} }
omSetTra(arg0, temp_r31->unk08.x, temp_r31->unk08.y, temp_r31->unk08.z); omSetTra(object, work->pos.x, work->pos.y, work->pos.z);
omSetRot(arg0, temp_r31->unk20, temp_r31->unk24, temp_r31->unk28); omSetRot(object, work->rot.x, work->rot.y, work->rot.z);
} }
static float fn_1_2D00(float arg0, float arg1, float arg2) { static float LerpAngle(float start, float end, float time)
float var_f30; {
float var_f31; float angle;
float delta;
var_f31 = fmod(arg1 - arg0, 360.0); delta = fmod(end - start, 360.0);
if (0.0f > var_f31) { if (0.0f > delta) {
var_f31 += 360.0f; delta += 360.0f;
} }
if (180.0f < var_f31) { if (180.0f < delta) {
var_f31 -= 360.0f; delta -= 360.0f;
} }
var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); angle = fmod(start + delta * time, 360.0);
if (0.0f > var_f30) { if (0.0f > angle) {
var_f30 += 360.0f; angle += 360.0f;
} }
return var_f30; return angle;
} }

File diff suppressed because it is too large Load diff

View file

@ -6,241 +6,254 @@
#include "game/window.h" #include "game/window.h"
typedef struct { typedef struct {
/* 0x00 */ omObjData *unk00; /* 0x00 */ omObjData *background;
/* 0x04 */ omObjData *unk04; /* 0x04 */ omObjData *rumbleArrow;
/* 0x08 */ omObjData *unk08; /* 0x08 */ omObjData *soundArrow;
/* 0x0C */ omObjData *unk0C; /* 0x0C */ omObjData *recordArrow;
/* 0x10 */ UnkWindowDataStruct *unk10; /* 0x10 */ OptionWindow *optionDescWindow;
/* 0x14 */ UnkWindowDataStruct *unk14; /* 0x14 */ OptionWindow *btnLegendWindow;
/* 0x18 */ s32 unk18; /* 0x18 */ s32 optionIdx;
/* 0x1C */ s32 unk1C; /* 0x1C */ s32 execMode;
/* 0x20 */ s16 unk20; /* 0x20 */ s16 unk20;
/* 0x22 */ char unk22[6]; /* 0x22 */ char unk22[6];
/* 0x28 */ s32 unk28; /* 0x28 */ BOOL cameraDoneF;
} UnkRoomDataStruct; // Size 0x2C } RoomWork; // Size 0x2C
static void fn_1_1844(omObjData *arg0, s32 arg1); #define MODE_DISABLED 0
static void fn_1_1A8C(omObjData *arg0); #define MODE_HANDLE_ROOM 1
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);
omObjData *lbl_1_bss_18;
static omObjFunc lbl_1_data_68[] = { static void MoveOption(omObjData *object, BOOL rightF);
NULL, static void ExecRoom(omObjData *object);
fn_1_1A8C static omObjData *CreateRoomBG(void);
}; static void KillRoomBG(omObjData *background);
static omObjData *CreateArrow(void);
static void KillArrow(omObjData *arrow);
omObjData *fn_1_15A4(void) { omObjData *optionRoom;
omObjData *var_r30;
UnkRoomDataStruct *temp_r31;
var_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); static omObjFunc execModeTbl[] = { NULL, ExecRoom };
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRoomDataStruct), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r31; omObjData *OptionRoomCreate(void)
temp_r31->unk18 = 0; {
temp_r31->unk20 = -1; omObjData *object;
temp_r31->unk28 = 0; RoomWork *work;
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); object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
temp_r31->unk00 = fn_1_2088(); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM);
lbl_1_bss_38 = fn_1_4028(); object->data = work;
lbl_1_bss_40 = fn_1_80E4(); work->optionIdx = 0;
lbl_1_bss_30 = fn_1_3158(); work->unk20 = -1;
lbl_1_bss_20 = fn_1_21F8(); work->cameraDoneF = 0;
temp_r31->unk04 = fn_1_2144(); OptionCameraViewSet(optionCamera, 600.0f, 60.0f, 120.0f, 1);
temp_r31->unk08 = fn_1_2144(); OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 1);
temp_r31->unk0C = fn_1_2144(); work->background = CreateRoomBG();
omSetRot(temp_r31->unk04, 0.0f, 0.0f, 0.0f); optionSound = OptionSoundCreate();
omSetRot(temp_r31->unk08, 0.0f, 120.0f, 0.0f); optionRecord = OptionRecordCreate();
omSetRot(temp_r31->unk0C, 0.0f, 240.0f, 0.0f); optionRumble = OptionRumbleCreate();
temp_r31->unk10 = fn_1_A44C(0); optionGuide = OptionGuideCreate();
temp_r31->unk14 = fn_1_A44C(1); work->rumbleArrow = CreateArrow();
return var_r30; 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) { void OptionRoomKill(omObjData *object)
UnkRoomDataStruct *temp_r31 = arg0->data; {
RoomWork *work = object->data;
fn_1_2110(temp_r31->unk00); KillRoomBG(work->background);
fn_1_42DC(lbl_1_bss_38); OptionSoundKill(optionSound);
fn_1_322C(lbl_1_bss_30); OptionRumbleKill(optionRumble);
fn_1_825C(lbl_1_bss_40); OptionRecordKill(optionRecord);
fn_1_241C(lbl_1_bss_20); OptionGuideKill(optionGuide);
fn_1_21C4(temp_r31->unk04); KillArrow(work->rumbleArrow);
fn_1_21C4(temp_r31->unk08); KillArrow(work->soundArrow);
fn_1_21C4(temp_r31->unk0C); KillArrow(work->recordArrow);
fn_1_A6AC(temp_r31->unk10); OptionWinKill(work->optionDescWindow);
fn_1_A6AC(temp_r31->unk14); OptionWinKill(work->btnLegendWindow);
HuMemDirectFree(temp_r31); 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) { static void MoveOption(omObjData *object, BOOL rightF)
UnkRoomDataStruct *temp_r31 = arg0->data; {
float sp10; RoomWork *work = object->data;
float spC; float x;
float sp8; float y;
float var_f31; float z;
float guideAngle;
temp_r31->unk18 += (arg1 == 0) ? -1 : 1; work->optionIdx += (rightF == FALSE) ? -1 : 1;
if (temp_r31->unk18 < 0) { if (work->optionIdx < 0) {
temp_r31->unk18 = 2; work->optionIdx = 2;
} else if (temp_r31->unk18 >= 3) {
temp_r31->unk18 = 0;
} }
fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8); else if (work->optionIdx >= 3) {
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); work->optionIdx = 0;
if (temp_r31->unk18 == 2 && arg1 == 0) {
var_f31 = lbl_1_rodata_BC[2] - 360.0f;
} else if (temp_r31->unk18 == 0 && arg1 == 1) {
var_f31 = 360.0f + lbl_1_rodata_BC[0];
} else {
var_f31 = lbl_1_rodata_BC[temp_r31->unk18];
} }
fn_1_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) { void OptionRoomExecModeSet(omObjData *object, s32 execMode)
UnkRoomDataStruct *temp_r31 = arg0->data; {
RoomWork *work = object->data;
temp_r31->unk1C = arg1; work->execMode = execMode;
arg0->func = lbl_1_data_68[arg1]; object->func = execModeTbl[execMode];
arg0->unk10 = 0; object->unk10 = 0;
arg0->unk10 = 0; object->unk10 = 0;
} }
s32 fn_1_1A70(omObjData *arg0) { s32 OptionRoomExecModeGet(omObjData *object)
UnkRoomDataStruct *temp_r31 = arg0->data; {
RoomWork *work = object->data;
return temp_r31->unk1C; return work->execMode;
} }
static const s32 lbl_1_rodata_D4[] = { static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) };
MAKE_MESSID(47, 1),
MAKE_MESSID(47, 7),
MAKE_MESSID(47, 4)
};
static void fn_1_1A8C(omObjData *arg0) { static void ExecRoom(omObjData *object)
UnkRoomDataStruct *temp_r31 = arg0->data; {
RoomWork *work = object->data;
switch (arg0->unk10) { switch (object->unk10) {
case 0: case 0:
if (temp_r31->unk28 == 0) { if (!work->cameraDoneF) {
fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1); OptionCameraViewSet(optionCamera, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1); OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 1);
temp_r31->unk28 = 1; work->cameraDoneF = TRUE;
} }
arg0->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
if (fn_1_CB8(lbl_1_bss_10) != 0) { if (OptionCameraDoneCheck(optionCamera) != 0) {
break; break;
} }
fn_1_A6EC(temp_r31->unk10); OptionWinAnimIn(work->optionDescWindow);
fn_1_A71C(temp_r31->unk10, lbl_1_rodata_D4[temp_r31->unk18]); OptionWinMesSet(work->optionDescWindow, optionDescTbl[work->optionIdx]);
fn_1_A6EC(temp_r31->unk14); OptionWinAnimIn(work->btnLegendWindow);
fn_1_A71C(temp_r31->unk14, MAKE_MESSID(47, 14)); OptionWinMesSet(work->btnLegendWindow, MAKE_MESSID(47, 14));
arg0->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
if (fn_1_550(0x200) != 0) { if (OptionPadCheck(PAD_BUTTON_B)) {
HuAudFXPlay(3); HuAudFXPlay(3);
arg0->unk10 = 7; object->unk10 = 7;
} else if (fn_1_584(1) != 0) { }
fn_1_1844(arg0, 0); else if (OptionPadDStkRepCheck(1)) {
fn_1_A704(temp_r31->unk10); MoveOption(object, FALSE);
fn_1_A704(temp_r31->unk14); OptionWinAnimOut(work->optionDescWindow);
OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(0); HuAudFXPlay(0);
arg0->unk10 = 1; object->unk10 = 1;
} else if (fn_1_584(2) != 0) { }
fn_1_1844(arg0, 1); else if (OptionPadDStkRepCheck(2)) {
fn_1_A704(temp_r31->unk10); MoveOption(object, TRUE);
fn_1_A704(temp_r31->unk14); OptionWinAnimOut(work->optionDescWindow);
OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(0); HuAudFXPlay(0);
arg0->unk10 = 1; object->unk10 = 1;
} else if (fn_1_550(0x100) != 0) { }
fn_1_A704(temp_r31->unk10); else if (OptionPadCheck(PAD_BUTTON_A)) {
fn_1_A704(temp_r31->unk14); OptionWinAnimOut(work->optionDescWindow);
OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(2); HuAudFXPlay(2);
arg0->unk10 = 3; object->unk10 = 3;
} }
} }
break; break;
case 3: case 3:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
switch (temp_r31->unk18) { switch (work->optionIdx) {
case 0: case 0:
fn_1_3290(lbl_1_bss_30, 1); OptionRumbleExecModeSet(optionRumble, 1);
arg0->unk10 = 4; object->unk10 = 4;
break; break;
case 1: case 1:
fn_1_4388(lbl_1_bss_38, 1); OptionSoundExecModeSet(optionSound, 1);
arg0->unk10 = 5; object->unk10 = 5;
break; break;
case 2: case 2:
fn_1_82B0(lbl_1_bss_40, 1); OptionRecordExecModeSet(optionRecord, 1);
arg0->unk10 = 6; object->unk10 = 6;
break; break;
} }
} }
break; break;
case 4: case 4:
if (fn_1_32D4(lbl_1_bss_30) == 0) { if (OptionRumbleExecModeGet(optionRumble) == 0) {
arg0->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 5: case 5:
if (fn_1_43CC(lbl_1_bss_38) == 0) { if (OptionSoundExecModeGet(optionSound) == 0) {
arg0->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 6: case 6:
if (fn_1_82F4(lbl_1_bss_40) == 0) { if (OptionRecordExecModeGet(optionRecord) == 0) {
arg0->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 7: case 7:
fn_1_A704(temp_r31->unk10); OptionWinAnimOut(work->optionDescWindow);
fn_1_A704(temp_r31->unk14); OptionWinAnimOut(work->btnLegendWindow);
arg0->unk10 = 8; object->unk10 = 8;
/* fallthrough */ /* fallthrough */
case 8: case 8:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
fn_1_1A2C(arg0, 0); OptionRoomExecModeSet(object, MODE_DISABLED);
} }
break; break;
} }
} }
static omObjData *fn_1_2088(void) { static omObjData *CreateRoomBG(void)
omObjData *temp_r31; {
omObjData *object;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0));
Hu3DModelLayerSet(temp_r31->model[0], 0); Hu3DModelLayerSet(object->model[0], 0);
Hu3DModelShadowMapSet(temp_r31->model[0]); Hu3DModelShadowMapSet(object->model[0]);
return temp_r31; return object;
} }
static void fn_1_2110(omObjData *arg0) { static void KillRoomBG(omObjData *object)
Hu3DModelKill(arg0->model[0]); {
Hu3DModelKill(object->model[0]);
} }
static omObjData *fn_1_2144(void) { static omObjData *CreateArrow(void)
omObjData *temp_r31; {
omObjData *arrow;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); arrow = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
Hu3DModelLayerSet(temp_r31->model[0], 0); Hu3DModelLayerSet(arrow->model[0], 0);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); arrow->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6));
return temp_r31; return arrow;
} }
static void fn_1_21C4(omObjData *arg0) { static void KillArrow(omObjData *arrow)
Hu3DModelKill(arg0->model[0]); {
Hu3DModelKill(arrow->model[0]);
} }

View file

@ -8,328 +8,360 @@
#include "game/window.h" #include "game/window.h"
typedef struct { typedef struct {
/* 0x00 */ omObjData *unk00; /* 0x00 */ omObjData *system;
/* 0x04 */ omObjData *unk04; /* 0x04 */ omObjData *pad;
/* 0x08 */ omObjData *unk08; /* 0x08 */ omObjData *padFilter;
/* 0x0C */ omObjData *unk0C; /* 0x0C */ omObjData *hand;
/* 0x10 */ omObjData *unk10; /* 0x10 */ omObjData *hiliteOn;
/* 0x14 */ UnkWindowDataStruct *unk14[2]; /* 0x14 */ OptionWindow *window[2];
/* 0x20 */ s32 unk1C; /* 0x20 */ s32 execMode;
/* 0x20 */ s32 unk20; /* 0x20 */ BOOL rumbleF;
/* 0x24 */ s32 unk24; /* 0x24 */ BOOL cameraDoneF;
/* 0x28 */ s32 unk28; /* 0x28 */ s32 changeTimer;
} UnkRumbleDataStruct; // Size 0x2C } RumbleWork; // Size 0x2C
static void fn_1_32F0(omObjData *arg0); #define MODE_DISABLED 0
static omObjData *fn_1_37AC(void); #define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this
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);
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[] = { omObjData *optionRumble;
NULL,
fn_1_32F0
};
omObjData *fn_1_3158(void) { static omObjFunc execModeTbl[] = { NULL, ExecRumble };
omObjData *temp_r30;
UnkRumbleDataStruct *temp_r3;
temp_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); omObjData *OptionRumbleCreate(void)
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRumbleDataStruct), MEMORY_DEFAULT_NUM); {
temp_r30->data = temp_r3; omObjData *object;
temp_r3->unk20 = GWGameStat.rumble; RumbleWork *work;
temp_r3->unk00 = fn_1_38BC();
fn_1_39E0(temp_r3->unk00, temp_r3->unk20, 0); object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
temp_r3->unk04 = fn_1_3B08(); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM);
fn_1_3BE0(temp_r3->unk04, temp_r3->unk20); object->data = work;
temp_r3->unk08 = fn_1_3C6C(); work->rumbleF = GWGameStat.rumble;
temp_r3->unk10 = fn_1_3F28(); work->system = CreateSystem();
temp_r3->unk0C = fn_1_37AC(); StartSystemMotion(work->system, work->rumbleF, 0);
fn_1_3290(temp_r30, 0); work->pad = CreatePad();
return temp_r30; 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) { void OptionRumbleKill(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
RumbleWork *work = object->data;
fn_1_3868(temp_r31->unk0C); KillHand(work->hand);
fn_1_398C(temp_r31->unk00); KillSystem(work->system);
fn_1_3B8C(temp_r31->unk04); KillPad(work->pad);
fn_1_3FD4(temp_r31->unk10); KillHiliteOn(work->hiliteOn);
fn_1_3D00(temp_r31->unk08); KillPadFilter(work->padFilter);
HuMemDirectFree(temp_r31); HuMemDirectFree(work);
} }
void fn_1_3290(omObjData *arg0, s32 arg1) { void OptionRumbleExecModeSet(omObjData *object, s32 execMode)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
RumbleWork *work = object->data;
temp_r31->unk1C = arg1; work->execMode = execMode;
arg0->func = lbl_1_data_108[arg1]; object->func = execModeTbl[execMode];
arg0->unk10 = 0; object->unk10 = 0;
arg0->unk10 = 0; object->unk10 = 0;
} }
s32 fn_1_32D4(omObjData *arg0) { s32 OptionRumbleExecModeGet(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
RumbleWork *work = object->data;
return temp_r31->unk1C; return work->execMode;
} }
static void fn_1_32F0(omObjData *arg0) { static void ExecRumble(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
RumbleWork *work = object->data;
s32 i; s32 i;
switch (arg0->unk10) { switch (object->unk10) {
case 0: case 0:
temp_r31->unk14[0] = fn_1_A44C(0); work->window[0] = OptionWinCreate(0);
temp_r31->unk14[1] = fn_1_A44C(1); work->window[1] = OptionWinCreate(1);
fn_1_AF0(lbl_1_bss_10, -519.62f, 135.0f, 300.0f, 0x28); OptionCameraFocusSet(optionCamera, -519.62f, 135.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, -315.64f, 135.0f, 182.25f, 0x28); OptionCameraTargetSet(optionCamera, -315.64f, 135.0f, 182.25f, 0x28);
fn_1_3D54(arg0); OptionRumbleMotionShowStart(object);
Hu3DModelLayerSet(temp_r31->unk08->model[0], 1); Hu3DModelLayerSet(work->padFilter->model[0], 1);
temp_r31->unk24 = 0; work->cameraDoneF = FALSE;
arg0->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
if (fn_1_CB8(lbl_1_bss_10) != 0) { if (OptionCameraDoneCheck(optionCamera) != 0) {
break; break;
} }
if (temp_r31->unk24 == 0) { if (!work->cameraDoneF) {
Hu3DModelAttrReset(temp_r31->unk0C->model[0], 1); Hu3DModelAttrReset(work->hand->model[0], 1);
temp_r31->unk24 = 1; work->cameraDoneF = TRUE;
Hu3DModelHookSet(temp_r31->unk00->model[0], "target", temp_r31->unk0C->model[0]); Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]);
} }
fn_1_A6EC(temp_r31->unk14[1]); OptionWinAnimIn(work->window[1]);
fn_1_A71C(temp_r31->unk14[1], MAKE_MESSID(47, 15)); OptionWinMesSet(work->window[1], MAKE_MESSID(47, 15));
fn_1_A6EC(temp_r31->unk14[0]); OptionWinAnimIn(work->window[0]);
if (temp_r31->unk20 != 0) { if (work->rumbleF) {
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 2)); OptionWinMesSet(work->window[0], MAKE_MESSID(47, 2));
} else {
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 3));
} }
arg0->unk10 = 2; else {
OptionWinMesSet(work->window[0], MAKE_MESSID(47, 3));
}
object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if (temp_r31->unk14[0]->unk20 == 0 && temp_r31->unk14[1]->unk20 == 0) { if (work->window[0]->state == 0 && work->window[1]->state == 0) {
if (fn_1_550(0x200) != 0) { if (OptionPadCheck(PAD_BUTTON_B)) {
HuAudFXPlay(3); HuAudFXPlay(3);
arg0->unk10 = 4; object->unk10 = 4;
} else if (fn_1_584(8) != 0 && temp_r31->unk20 == 0) { }
fn_1_39E0(temp_r31->unk00, 1, 1); else if (OptionPadDStkRepCheck(8) && !work->rumbleF) {
temp_r31->unk20 = 1; StartSystemMotion(work->system, 1, TRUE);
temp_r31->unk28 = 0; work->rumbleF = TRUE;
work->changeTimer = 0;
GWRumbleSet(1); GWRumbleSet(1);
arg0->unk10 = 3; object->unk10 = 3;
} else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) { }
fn_1_39E0(temp_r31->unk00, 0, 1); else if (OptionPadDStkRepCheck(4) && work->rumbleF) {
temp_r31->unk20 = 0; StartSystemMotion(work->system, 0, TRUE);
temp_r31->unk28 = 0; work->rumbleF = FALSE;
work->changeTimer = 0;
GWRumbleSet(0); GWRumbleSet(0);
arg0->unk10 = 3; object->unk10 = 3;
} }
} }
break; break;
case 3: case 3:
if (temp_r31->unk28++ >= 60) { if (work->changeTimer++ >= 60) {
HuAudFXPlay(0x83C); HuAudFXPlay(0x83C);
fn_1_3BE0(temp_r31->unk04, temp_r31->unk20); ShakePad(work->pad, work->rumbleF);
if (temp_r31->unk20 != 0) { if (work->rumbleF) {
HuPadRumbleSet(0, 0x3C, 0xA, 5); HuPadRumbleSet(0, 60, 10, 5);
Hu3DMotionTimeSet(temp_r31->unk10->model[0], 0.0f); Hu3DMotionTimeSet(work->hiliteOn->model[0], 0.0f);
Hu3DModelAttrReset(temp_r31->unk10->model[0], 1); Hu3DModelAttrReset(work->hiliteOn->model[0], 1);
} else {
Hu3DModelAttrSet(temp_r31->unk10->model[0], 1);
} }
arg0->unk10 = 1; else {
Hu3DModelAttrSet(work->hiliteOn->model[0], 1);
}
object->unk10 = 1;
} }
break; break;
case 4: case 4:
fn_1_A704(temp_r31->unk14[1]); OptionWinAnimOut(work->window[1]);
fn_1_A704(temp_r31->unk14[0]); OptionWinAnimOut(work->window[0]);
Hu3DModelAttrSet(temp_r31->unk0C->model[0], 1); Hu3DModelAttrSet(work->hand->model[0], 1);
fn_1_3E1C(arg0); OptionRumbleMotionHideStart(object);
arg0->unk10 = 5; object->unk10 = 5;
/* fallthrough */ /* fallthrough */
case 5: 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++) { for (i = 0; i < 2; i++) {
fn_1_A6AC(temp_r31->unk14[i]); OptionWinKill(work->window[i]);
} }
Hu3DModelHookReset(temp_r31->unk00->model[0]); Hu3DModelHookReset(work->system->model[0]);
fn_1_AF0(lbl_1_bss_10, -519.62f, 120.0f, 300.0f, 0x28); OptionCameraFocusSet(optionCamera, -519.62f, 120.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); OptionCameraTargetSet(optionCamera, 0.0f, 120.0f, 0.0f, 0x28);
fn_1_3290(arg0, 0); OptionRumbleExecModeSet(object, MODE_DISABLED);
} }
break; break;
} }
} }
static omObjData *fn_1_37AC(void) { static omObjData *CreateHand(void)
omObjData *temp_r31; {
omObjData *hand;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); hand = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15)); hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15));
Hu3DModelLayerSet(temp_r31->model[0], 3); Hu3DModelLayerSet(hand->model[0], 3);
omSetRot(temp_r31, 0.0f, 180.0f, 0.0f); omSetRot(hand, 0.0f, 180.0f, 0.0f);
Hu3DModelAttrSet(temp_r31->model[0], 1); Hu3DModelAttrSet(hand->model[0], 1);
return temp_r31; return hand;
} }
static void fn_1_3868(omObjData *arg0) { static void KillHand(omObjData *hand)
{
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]); Hu3DModelKill(hand->model[i]);
} }
} }
static omObjData *fn_1_38BC(void) { static omObjData *CreateSystem(void)
omObjData *temp_r31; {
omObjData *system;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); system = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); Hu3DModelAttrSet(system->model[0], 0x40000002);
if (GWRumbleGet()) { if (GWRumbleGet()) {
Hu3DMotionTimeSet(temp_r31->model[0], 60.0f); Hu3DMotionTimeSet(system->model[0], 60.0f);
} else {
Hu3DMotionTimeSet(temp_r31->model[0], 0.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; s32 i;
for (i = 0; i < 1; 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) { static void StartSystemMotion(omObjData *system, s32 rumbleF, BOOL slowF)
s16 temp_r31 = arg0->model[0]; {
s16 model = system->model[0];
Hu3DModelAttrReset(arg0->model[0], 0x40000002); Hu3DModelAttrReset(system->model[0], 0x40000002);
Hu3DModelAttrReset(arg0->model[0], 0x40000001); Hu3DModelAttrReset(system->model[0], 0x40000001);
if (arg1 != 0) { if (rumbleF) {
Hu3DMotionStartEndSet(temp_r31, 60.0f, 120.0f); Hu3DMotionStartEndSet(model, 60.0f, 120.0f);
if (arg2 != 0) { if (slowF) {
Hu3DMotionTimeSet(temp_r31, 60.0f); Hu3DMotionTimeSet(model, 60.0f);
} else {
Hu3DMotionTimeSet(temp_r31, 119.0f);
} }
} else { else {
Hu3DMotionStartEndSet(temp_r31, 0.0f, 60.0f); Hu3DMotionTimeSet(model, 119.0f);
if (arg2 != 0) { }
Hu3DMotionTimeSet(temp_r31, 0.0f); }
} else { else {
Hu3DMotionTimeSet(temp_r31, 59.0f); Hu3DMotionStartEndSet(model, 0.0f, 60.0f);
if (slowF) {
Hu3DMotionTimeSet(model, 0.0f);
}
else {
Hu3DMotionTimeSet(model, 59.0f);
} }
} }
} }
static omObjData *fn_1_3B08(void) { static omObjData *CreatePad(void)
omObjData *temp_r31; {
omObjData *pad;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); pad = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); Hu3DModelAttrSet(pad->model[0], 0x40000001);
return temp_r31; return pad;
} }
static void fn_1_3B8C(omObjData *arg0) { static void KillPad(omObjData *pad)
{
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]); Hu3DModelKill(pad->model[i]);
} }
} }
static void fn_1_3BE0(omObjData *arg0, s32 arg1) { static void ShakePad(omObjData *pad, BOOL on)
if (arg1 != 0) { {
Hu3DModelAttrReset(arg0->model[0], 0x40000002); if (on) {
Hu3DModelAttrSet(arg0->model[0], 0x40000001); Hu3DModelAttrReset(pad->model[0], 0x40000002);
} else { Hu3DModelAttrSet(pad->model[0], 0x40000001);
Hu3DModelAttrSet(arg0->model[0], 0x40000002); }
Hu3DModelAttrReset(arg0->model[0], 0x40000001); else {
Hu3DModelAttrSet(pad->model[0], 0x40000002);
Hu3DModelAttrReset(pad->model[0], 0x40000001);
} }
} }
static omObjData *fn_1_3C6C(void) { static omObjData *CreatePadFilter(void)
omObjData *temp_r31; {
omObjData *object;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); Hu3DModelAttrSet(object->model[0], 0x40000002);
Hu3DModelLayerSet(temp_r31->model[0], 2); Hu3DModelLayerSet(object->model[0], 2);
return temp_r31;
return object;
} }
static void fn_1_3D00(omObjData *arg0) { static void KillPadFilter(omObjData *object)
{
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]); Hu3DModelKill(object->model[i]);
} }
} }
void fn_1_3D54(omObjData *arg0) { void OptionRumbleMotionShowStart(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
s16 temp_r30 = temp_r31->unk08->model[0]; RumbleWork *work = object->data;
s16 model = work->padFilter->model[0];
Hu3DMotionStartEndSet(temp_r30, 0.0f, 40.0f); Hu3DMotionStartEndSet(model, 0.0f, 40.0f);
Hu3DMotionTimeSet(temp_r30, 0.0f); Hu3DMotionTimeSet(model, 0.0f);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001);
Hu3DModelLayerSet(temp_r31->unk08->model[0], 2); Hu3DModelLayerSet(work->padFilter->model[0], 2);
HuAudFXPlay(0x83D); HuAudFXPlay(0x83D);
} }
void fn_1_3E1C(omObjData *arg0) { void OptionRumbleMotionHideStart(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
s16 temp_r30 = temp_r31->unk08->model[0]; RumbleWork *work = object->data;
s16 model = work->padFilter->model[0];
Hu3DMotionStartEndSet(temp_r30, 40.0f, 80.0f); Hu3DMotionStartEndSet(model, 40.0f, 80.0f);
Hu3DMotionTimeSet(temp_r30, 40.0f); Hu3DMotionTimeSet(model, 40.0f);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); Hu3DModelAttrReset(work->padFilter->model[0], 0x40000002);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001);
HuAudFXPlay(0x83E); HuAudFXPlay(0x83E);
} }
s32 fn_1_3ED0(omObjData *arg0) { BOOL OptionRumbleMotionCheck(omObjData *object)
UnkRumbleDataStruct *temp_r31 = arg0->data; {
s16 temp_r30 = temp_r31->unk08->model[0]; RumbleWork *work = object->data;
s16 padFilterModel = work->padFilter->model[0];
return !Hu3DMotionEndCheck(temp_r30); return !Hu3DMotionEndCheck(padFilterModel);
} }
static omObjData *fn_1_3F28(void) { static omObjData *CreateHiliteOn(void)
omObjData *temp_r31; {
omObjData *object;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11));
if (GWRumbleGet()) { if (GWRumbleGet()) {
Hu3DModelAttrReset(temp_r31->model[0], 1); Hu3DModelAttrReset(object->model[0], 1);
} else {
Hu3DModelAttrSet(temp_r31->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; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]); Hu3DModelKill(object->model[i]);
} }
} }

View file

@ -1,5 +1,5 @@
#include "REL/option.h"
#include "REL/executor.h" #include "REL/executor.h"
#include "REL/option.h"
#include "game/audio.h" #include "game/audio.h"
#include "game/esprite.h" #include "game/esprite.h"
#include "game/gamework_data.h" #include "game/gamework_data.h"
@ -15,160 +15,169 @@
#include "rel_sqrt_consts.h" #include "rel_sqrt_consts.h"
typedef struct { typedef struct {
/* 0x00 */ s16 unk00; /* 0x00 */ s16 id;
/* 0x02 */ char unk02[2]; /* 0x04 */ float tplvl;
/* 0x04 */ float unk04; /* 0x08 */ float speed;
/* 0x08 */ float unk08; } FaderWork; // Size 0xC
} UnkSceneDataStruct; // 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_354(s16 arg0, s32 arg1, s32 arg2);
static void fn_1_468(void); static void FadeModel(void);
static void fn_1_5EC(omObjData *arg0); static void SceneMain(omObjData *arg0);
static void fn_1_6E8(void); static void KillScene(void);
Process *lbl_1_bss_8; Process *optionObjMan;
static omObjData *lbl_1_bss_4; static omObjData *scene;
static s32 lbl_1_bss_0; static s32 rumbleF;
void ModuleProlog(void) { void ModuleProlog(void)
lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); {
omGameSysInit(lbl_1_bss_8); optionObjMan = omInitObjMan(0x40, 0x2000);
omGameSysInit(optionObjMan);
HuWinInit(1); HuWinInit(1);
lbl_1_bss_0 = GWGameStat.rumble; rumbleF = GWGameStat.rumble;
lbl_1_bss_4 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, fn_1_5EC); scene = omAddObjEx(optionObjMan, 1000, 0, 0, 0, SceneMain);
lbl_1_bss_4->unk10 = 0; scene->unk10 = 0;
lbl_1_bss_28 = fn_1_2E04(); optionState = OptionStateCreate();
} }
void fn_1_160(s16 arg0, s32 arg1, s32 arg2) { void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration)
UnkSceneDataStruct *temp_r31; {
Process *temp_r30; FaderWork *work;
Process *process;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
temp_r31->unk00 = arg0; work->id = sprite;
temp_r31->unk08 = 1.0f / arg2; work->speed = 1.0f / duration;
if (arg1 != 0) { if (inF) {
temp_r31->unk08 = temp_r31->unk08; work->speed = work->speed;
temp_r31->unk04 = 0.0f; work->tplvl = 0.0f;
} else { } else {
temp_r31->unk08 = -temp_r31->unk08; work->speed = -work->speed;
temp_r31->unk04 = 1.0f; work->tplvl = 1.0f;
} }
espDispOn(temp_r31->unk00); espDispOn(work->id);
espTPLvlSet(temp_r31->unk00, temp_r31->unk04); espTPLvlSet(work->id, work->tplvl);
temp_r30 = HuPrcChildCreate(fn_1_270, 0x3000, 0x1500, 0, HuPrcCurrentGet()); process = HuPrcChildCreate(FadeSprite, 0x3000, 0x1500, 0, HuPrcCurrentGet());
temp_r30->user_data = temp_r31; process->user_data = work;
} }
static void fn_1_270(void) { static void FadeSprite(void)
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; {
FaderWork *work = HuPrcCurrentGet()->user_data;
while (1) { while (TRUE) {
temp_r31->unk04 += temp_r31->unk08; work->tplvl += work->speed;
if (temp_r31->unk04 > 1.0f) { if (work->tplvl > 1.0f) {
temp_r31->unk04 = 1.0f; work->tplvl = 1.0f;
break; break;
} }
if (temp_r31->unk04 < 0.0f) { if (work->tplvl < 0.0f) {
temp_r31->unk04 = 0.0f; work->tplvl = 0.0f;
break; break;
} }
espTPLvlSet(temp_r31->unk00, temp_r31->unk04); espTPLvlSet(work->id, work->tplvl);
HuPrcVSleep(); HuPrcVSleep();
} }
espTPLvlSet(temp_r31->unk00, temp_r31->unk04); espTPLvlSet(work->id, work->tplvl);
if (temp_r31->unk04 <= 0.0f) { if (work->tplvl <= 0.0f) {
espDispOff(temp_r31->unk00); espDispOff(work->id);
} }
HuMemDirectFree(temp_r31); HuMemDirectFree(work);
HuPrcEnd(); HuPrcEnd();
} }
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) { void OptionFadeModel(s16 model, BOOL inF, s32 duration)
UnkSceneDataStruct *temp_r31; {
Process *temp_r30; FaderWork *work;
Process *process;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
temp_r31->unk00 = arg0; work->id = model;
temp_r31->unk08 = 1.0f / arg2; work->speed = 1.0f / duration;
if (arg1 != 0) { if (inF) {
temp_r31->unk08 = temp_r31->unk08; work->speed = work->speed;
temp_r31->unk04 = 0.0f; work->tplvl = 0.0f;
} else {
temp_r31->unk08 = -temp_r31->unk08;
temp_r31->unk04 = 1.0f;
} }
Hu3DModelAttrReset(temp_r31->unk00, 1); else {
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); work->speed = -work->speed;
temp_r30 = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); work->tplvl = 1.0f;
temp_r30->user_data = temp_r31; }
Hu3DModelAttrReset(work->id, 1);
Hu3DModelTPLvlSet(work->id, work->tplvl);
process = HuPrcChildCreate(FadeModel, 0x3000, 0x1500, 0, HuPrcCurrentGet());
process->user_data = work;
} }
static void fn_1_468(void) { static void FadeModel(void)
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; {
FaderWork *work = HuPrcCurrentGet()->user_data;
while (1) { while (TRUE) {
temp_r31->unk04 += temp_r31->unk08; work->tplvl += work->speed;
if (temp_r31->unk04 > 1.0f) { if (work->tplvl > 1.0f) {
temp_r31->unk04 = 1.0f; work->tplvl = 1.0f;
break; break;
} }
if (temp_r31->unk04 < 0.0f) { if (work->tplvl < 0.0f) {
temp_r31->unk04 = 0.0f; work->tplvl = 0.0f;
break; break;
} }
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); Hu3DModelTPLvlSet(work->id, work->tplvl);
HuPrcVSleep(); HuPrcVSleep();
} }
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); Hu3DModelTPLvlSet(work->id, work->tplvl);
if (temp_r31->unk04 <= 0.0f) { if (work->tplvl <= 0.0f) {
Hu3DModelAttrSet(temp_r31->unk00, 1); Hu3DModelAttrSet(work->id, 1);
} }
HuMemDirectFree(temp_r31); HuMemDirectFree(work);
HuPrcEnd(); HuPrcEnd();
} }
s32 fn_1_550(u16 arg0) { BOOL OptionPadCheck(u16 btn)
u32 temp_r31 = HuPadBtnDown[0] & arg0; {
u32 temp_r31 = HuPadBtnDown[0] & btn;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
s32 fn_1_584(u16 arg0) { BOOL OptionPadDStkRepCheck(u16 dir)
u32 temp_r31 = HuPadDStkRep[0] & arg0; {
u32 temp_r31 = HuPadDStkRep[0] & dir;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
s32 fn_1_5B8(u16 arg0) { BOOL OptionPadDStkCheck(u16 dir)
u32 temp_r31 = HuPadDStk[0] & arg0; {
u32 temp_r31 = HuPadDStk[0] & dir;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
static void fn_1_5EC(omObjData *arg0) { static void SceneMain(omObjData *object)
switch (arg0->unk10) { {
switch (object->unk10) {
case 0: case 0:
arg0->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
if (omSysExitReq == 0) { if (!omSysExitReq) {
break; break;
} }
arg0->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuAudFadeOut(1000); HuAudFadeOut(1000);
arg0->unk10 = 3; object->unk10 = 3;
/* fallthrough */ /* fallthrough */
case 3: case 3:
if (WipeStatGet() == 0) { if (WipeStatGet() == 0) {
fn_1_2F4C(lbl_1_bss_28); OptionStateKill(optionState);
if (lbl_1_bss_0 != GWGameStat.rumble) { if (rumbleF != GWGameStat.rumble) {
omSysExitReq = 0; omSysExitReq = 0;
fn_1_6E8(); KillScene();
} }
omOvlReturnEx(1, 1); omOvlReturnEx(1, 1);
} }
@ -176,8 +185,9 @@ static void fn_1_5EC(omObjData *arg0) {
} }
} }
static void fn_1_6E8(void) { static void KillScene(void)
s16 temp_r31; {
s16 sprite;
if (SLSaveFlagGet() == 0) { if (SLSaveFlagGet() == 0) {
return; return;
@ -187,9 +197,9 @@ static void fn_1_6E8(void) {
HuSprInit(); HuSprInit();
espInit(); espInit();
HuPrcVSleep(); HuPrcVSleep();
temp_r31 = espEntry(0x860020, 0x1388, 0); sprite = espEntry(0x860020, 0x1388, 0);
espPosSet(temp_r31, 288.0f, 240.0f); espPosSet(sprite, 288.0f, 240.0f);
espAttrReset(temp_r31, 4); espAttrReset(sprite, 4);
Hu3DBGColorSet(0, 0, 0); Hu3DBGColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10);
while (WipeStatGet() != 0) { while (WipeStatGet() != 0) {

File diff suppressed because it is too large Load diff

View file

@ -7,118 +7,121 @@
#include "dolphin.h" #include "dolphin.h"
typedef struct { typedef struct {
/* 0x00 */ UnkWindowDataStruct *unk00; /* 0x00 */ OptionWindow *window;
/* 0x04 */ s32 unk04; /* 0x04 */ s32 quitTimer;
/* 0x08 */ s16 unk08; /* 0x08 */ s16 light;
/* 0x0A */ char unk0A[2]; } StateWork; // Size 0xC
} UnkStateDataStruct; // Size 0xC
typedef struct { typedef struct {
Vec unk00; Vec src;
Vec unk0C; Vec dest;
GXColor unk18; GXColor color;
} UnkLightDataStruct; // Size 0x1C } 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 = { static UnkLightDataStruct lightTbl = {
{ 0.0f, 300.0f, 0.0f }, { 0.0f, 300.0f, 0.0f },
{ 0.0f, -300.0f, -600.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, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f } { 0.0f, 0.0f, 0.0f },
}; };
omObjData *fn_1_2E04(void) { omObjData *OptionStateCreate(void)
omObjData *var_r30; {
UnkStateDataStruct *temp_r3; omObjData *object;
LightData *sp8; StateWork *work;
LightData *lightData;
var_r30 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, fn_1_2FB0); object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState);
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkStateDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r3; object->data = work;
lbl_1_bss_10 = fn_1_7F8(); optionCamera = OptionCameraCreate();
lbl_1_bss_18 = fn_1_15A4(); optionRoom = OptionRoomCreate();
temp_r3->unk00 = fn_1_A44C(0); work->window = OptionWinCreate(0);
Hu3DLighInit(); Hu3DLighInit();
temp_r3->unk08 = Hu3DGLightCreateV(&lbl_1_data_A0.unk00, &lbl_1_data_A0.unk0C, &lbl_1_data_A0.unk18); work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color);
Hu3DGLightInfinitytSet(temp_r3->unk08); Hu3DGLightInfinitytSet(work->light);
sp8 = &Hu3DGlobalLight[temp_r3->unk08]; lightData = &Hu3DGlobalLight[work->light];
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f); Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&lbl_1_data_BC[0], &lbl_1_data_BC[1], &lbl_1_data_BC[2]); Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]);
return var_r30; return object;
} }
void fn_1_2F4C(omObjData *arg0) { void OptionStateKill(omObjData *object)
UnkStateDataStruct *temp_r31 = arg0->data; {
StateWork *work = object->data;
fn_1_A3C(lbl_1_bss_10); OptionCameraKill(optionCamera);
fn_1_1798(lbl_1_bss_18); OptionRoomKill(optionRoom);
fn_1_A6AC(temp_r31->unk00); OptionWinKill(work->window);
HuMemDirectFree(temp_r31); HuMemDirectFree(work);
} }
static void fn_1_2FB0(omObjData *arg0) { static void ExecState(omObjData *object)
UnkStateDataStruct *temp_r31 = arg0->data; {
StateWork *work = object->data;
switch (arg0->unk10) { switch (object->unk10) {
case 0: case 0:
arg0->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
WipeCreate(WIPE_MODE_IN, -1, 60); WipeCreate(WIPE_MODE_IN, -1, 60);
arg0->unk10 = 2; object->unk10 = 2;
break; break;
case 2: case 2:
if (WipeStatGet() != 0 || temp_r31->unk00->unk20 != 0) { if (WipeStatGet() != 0 || work->window->state != 0) {
break; break;
} }
fn_1_1A2C(lbl_1_bss_18, 1); OptionRoomExecModeSet(optionRoom, 1);
arg0->unk10 = 3; object->unk10 = 3;
/* fallthrough */ /* fallthrough */
case 3: case 3:
if (fn_1_1A70(lbl_1_bss_18) != 0) { if (OptionRoomExecModeGet(optionRoom) != 0) {
break; break;
} }
arg0->unk10 = 4; object->unk10 = 4;
/* fallthrough */ /* fallthrough */
case 4: case 4:
fn_1_A6EC(temp_r31->unk00); OptionWinAnimIn(work->window);
fn_1_A71C(temp_r31->unk00, MAKE_MESSID(47, 167)); OptionWinMesSet(work->window, MAKE_MESSID(47, 167)); // Would you like to leave?
arg0->unk10 = 5; object->unk10 = 5;
/* fallthrough */ /* fallthrough */
case 5: case 5:
if (temp_r31->unk00->unk20 != 0) { if (work->window->state != 0) {
break; break;
} }
fn_1_A880(temp_r31->unk00, 1); OptionWinChoiceSet(work->window, 1);
arg0->unk10 = 6; object->unk10 = 6;
/* fallthrough */ /* fallthrough */
case 6: case 6:
if (temp_r31->unk00->unk20 != 0) { if (work->window->state != 0) {
break; break;
} }
fn_1_A704(temp_r31->unk00); OptionWinAnimOut(work->window);
if (temp_r31->unk00->unk1C == 0) { if (work->window->choice == 0) {
temp_r31->unk04 = 0; work->quitTimer = 0;
arg0->unk10 = 7; object->unk10 = 7;
} else { }
arg0->unk10 = 2; else {
object->unk10 = 2;
} }
break; break;
case 7: case 7:
arg0->unk10 = 8; object->unk10 = 8;
temp_r31->unk04 = 0; work->quitTimer = 0;
/* fallthrough */ /* fallthrough */
case 8: case 8:
if (temp_r31->unk00->unk20 == 0 && temp_r31->unk04++ >= 60) { if (work->window->state == 0 && work->quitTimer++ >= 60) {
omSysExitReq = 1; omSysExitReq = 1;
} }
break; break;

View file

@ -1,147 +1,158 @@
#include "game/window.h"
#include "REL/option.h" #include "REL/option.h"
#include "game/esprite.h" #include "game/esprite.h"
#include "game/memory.h" #include "game/memory.h"
#include "game/process.h" #include "game/process.h"
#include "game/sprite.h" #include "game/sprite.h"
#include "game/window.h"
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2); static void ExecWindow(void);
static void fn_1_A860(UnkWindowDataStruct *arg0);
static void fn_1_A8A4(void);
UnkWindowDataStruct *fn_1_A44C(s32 arg0) { OptionWindow *OptionWinCreate(s32 id)
UnkWindowDataStruct *temp_r31; {
OptionWindow *work;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(OptionWindow), MEMORY_DEFAULT_NUM);
temp_r31->unk18 = 0; work->messToBeSet = 0;
temp_r31->unk10 = 0; work->messWaitSignal = 0;
temp_r31->unk14 = 0; work->choiceSignal = 0;
temp_r31->unk20 = 0; work->state = 0;
temp_r31->unk00 = HuPrcChildCreate(fn_1_A8A4, 0x2000, 0x2000, 0, lbl_1_bss_8); work->process = HuPrcChildCreate(ExecWindow, 0x2000, 0x2000, 0, optionObjMan);
temp_r31->unk00->user_data = temp_r31; work->process->user_data = work;
temp_r31->unk08 = arg0; work->id = id;
switch (temp_r31->unk08) { switch (work->id) {
case 0: case 0:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); work->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(temp_r31->unk04, 0.8f); HuWinBGTPLvlSet(work->window, 0.8f);
HuWinMesSpeedSet(temp_r31->unk04, 0); HuWinMesSpeedSet(work->window, 0);
HuWinMesPalSet(temp_r31->unk04, 7, 0, 0, 0); HuWinMesPalSet(work->window, 7, 0, 0, 0);
break; break;
case 1: case 1:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0); work->window = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0);
HuWinAttrSet(temp_r31->unk04, 0x800); HuWinAttrSet(work->window, 0x800);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); HuWinBGTPLvlSet(work->window, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0); HuWinMesSpeedSet(work->window, 0);
break; break;
case 2: case 2:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0); work->window = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0);
HuWinAttrSet(temp_r31->unk04, 0x800); HuWinAttrSet(work->window, 0x800);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); HuWinBGTPLvlSet(work->window, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0); HuWinMesSpeedSet(work->window, 0);
break; break;
case 3: case 3:
temp_r31->unk04 = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0); work->window = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); HuWinBGTPLvlSet(work->window, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0); HuWinMesSpeedSet(work->window, 0);
break; break;
} }
HuWinDrawNoSet(temp_r31->unk04, 0x3F); HuWinDrawNoSet(work->window, 0x3F);
fn_1_A828(temp_r31); OptionWinDispOff(work);
HuSprExecLayerSet(0x3F, 2); HuSprExecLayerSet(0x3F, 2);
return temp_r31; return work;
} }
void fn_1_A6AC(UnkWindowDataStruct *arg0) { void OptionWinKill(OptionWindow *work)
HuWinExCleanup(arg0->unk04); {
HuPrcKill(arg0->unk00); HuWinExCleanup(work->window);
HuMemDirectFree(arg0); HuPrcKill(work->process);
HuMemDirectFree(work);
} }
void fn_1_A6EC(UnkWindowDataStruct *arg0) { void OptionWinAnimIn(OptionWindow *work)
if (arg0->unk0C == 0) { {
arg0->unk20 = 1; if (!work->visible) {
work->state = 1;
} }
} }
void fn_1_A704(UnkWindowDataStruct *arg0) { void OptionWinAnimOut(OptionWindow *work)
if (arg0->unk0C != 0) { {
arg0->unk20 = 2; if (work->visible) {
work->state = 2;
} }
} }
void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1) { void OptionWinMesSet(OptionWindow *work, s32 mess)
if (arg0->unk20 == 0) { {
HuWinMesSet(arg0->unk04, arg1); if (work->state == 0) {
} else { HuWinMesSet(work->window, mess);
arg0->unk18 = arg1; }
else {
work->messToBeSet = mess;
} }
} }
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2) { void OptionWinInsertMesSet(OptionWindow *work, s32 mess, s16 index)
HuWinInsertMesSet(arg0->unk04, arg1, arg2); {
HuWinInsertMesSet(work->window, mess, index);
} }
void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2) { void OptionWinPosSet(OptionWindow *work, float x, float y)
HuWinPosSet(arg0->unk04, arg1, arg2); {
HuWinPosSet(work->window, x, y);
} }
void fn_1_A7F0(UnkWindowDataStruct *arg0) { void OptionWinDispOn(OptionWindow *work)
HuWinDispOn(arg0->unk04); {
arg0->unk0C = 1; HuWinDispOn(work->window);
work->visible = TRUE;
} }
void fn_1_A828(UnkWindowDataStruct *arg0) { void OptionWinDispOff(OptionWindow *work)
HuWinDispOff(arg0->unk04); {
arg0->unk0C = 0; HuWinDispOff(work->window);
work->visible = FALSE;
} }
static void fn_1_A860(UnkWindowDataStruct *arg0) { void OptionWinMesWait(OptionWindow *work)
if (arg0->unk20 == 0) { {
arg0->unk20 = 3; if (work->state == 0) {
work->state = 3;
} }
arg0->unk10 = 1; work->messWaitSignal = TRUE;
} }
void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1) { void OptionWinChoiceSet(OptionWindow *work, s32 choice)
if (arg0->unk20 == 0) { {
arg0->unk20 = 4; if (work->state == 0) {
work->state = 4;
} }
arg0->unk14 = 1; work->choiceSignal = TRUE;
arg0->unk1C = arg1; work->choice = choice;
} }
static void fn_1_A8A4(void) { static void ExecWindow(void)
UnkWindowDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; {
OptionWindow *work = HuPrcCurrentGet()->user_data;
while (1) { while (TRUE) {
switch (temp_r31->unk20) { switch (work->state) {
case 1: case 1:
fn_1_A7F0(temp_r31); OptionWinDispOn(work);
HuWinExAnimIn(temp_r31->unk04); HuWinExAnimIn(work->window);
break; break;
case 2: case 2:
HuWinExAnimOut(temp_r31->unk04); HuWinExAnimOut(work->window);
fn_1_A828(temp_r31); OptionWinDispOff(work);
break; break;
case 3: case 3:
HuWinMesWait(temp_r31->unk04); HuWinMesWait(work->window);
temp_r31->unk10 = 0; work->messWaitSignal = FALSE;
break; break;
case 4: case 4:
temp_r31->unk1C = HuWinChoiceGet(temp_r31->unk04, temp_r31->unk1C); work->choice = HuWinChoiceGet(work->window, work->choice);
temp_r31->unk14 = 0; work->choiceSignal = FALSE;
break; break;
} }
if (temp_r31->unk18 != 0) { if (work->messToBeSet != 0) {
HuWinMesSet(temp_r31->unk04, temp_r31->unk18); HuWinMesSet(work->window, work->messToBeSet);
temp_r31->unk18 = 0; work->messToBeSet = 0;
} }
temp_r31->unk20 = 0; work->state = 0;
if (temp_r31->unk10 != 0) { if (work->messWaitSignal) {
temp_r31->unk20 = 3; work->state = 3;
} }
if (temp_r31->unk14 != 0) { if (work->choiceSignal) {
temp_r31->unk20 = 4; work->state = 4;
} }
HuPrcVSleep(); HuPrcVSleep();
} }

View file

@ -2171,10 +2171,7 @@ void Hu3DDrawPost(void) {
PSMTXIdentity(spC0); PSMTXIdentity(spC0);
} else { } else {
PSVECCrossProduct(&sp3C, &sp54, &sp48); PSVECCrossProduct(&sp3C, &sp54, &sp48);
temp_f27 = PSVECDotProduct(&sp54, &sp3C); temp_f28 = acosf(PSVECDotProduct(&sp54, &sp3C));
temp_f26 = acos(temp_f27);
temp_f25 = temp_f26;
temp_f28 = temp_f25;
PSMTXRotAxisRad(spC0, &sp48, temp_f28); PSMTXRotAxisRad(spC0, &sp48, temp_f28);
} }
PSMTXConcat(spC0, sp90, sp60); PSMTXConcat(spC0, sp90, sp60);
@ -2313,10 +2310,7 @@ static void ObjDraw(HsfDrawObject *arg0) {
PSMTXIdentity(spB0); PSMTXIdentity(spB0);
} else { } else {
PSVECCrossProduct(&sp2C, &sp44, &sp38); PSVECCrossProduct(&sp2C, &sp44, &sp38);
temp_f28 = PSVECDotProduct(&sp44, &sp2C); temp_f29 = acosf(PSVECDotProduct(&sp44, &sp2C));
temp_f27 = acos(temp_f28);
temp_f26 = temp_f27;
temp_f29 = temp_f26;
PSMTXRotAxisRad(spB0, &sp38, temp_f29); PSMTXRotAxisRad(spB0, &sp38, temp_f29);
} }
PSMTXConcat(spB0, sp80, sp50); PSMTXConcat(spB0, sp80, sp50);