Finish naming option REL

This commit is contained in:
gamemasterplc 2024-06-18 08:11:20 -05:00
parent 997cd0bf4c
commit 0687fd8abb
11 changed files with 1493 additions and 1462 deletions

View file

@ -1,55 +1,55 @@
_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
HandleLRBtn = .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
HandleScene = .text:0x000005EC; // type:function size:0xFC scope:local SceneMain = .text:0x000005EC; // type:function size:0xFC scope:local
KillScene = .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
HandlerWrapper = .text:0x00000D44; // type:function size:0x28 scope:local ExecCameraObj = .text:0x00000D44; // type:function size:0x28 scope:local
HandleCamera = .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
PrintDebugInfo = .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
ChangeSelection = .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
HandleRoom = .text:0x00001A8C; // type:function size:0x5FC scope:local ExecRoom = .text:0x00001A8C; // type:function size:0x5FC scope:local
CreateBackground = .text:0x00002088; // type:function size:0x88 scope:local CreateRoomBG = .text:0x00002088; // type:function size:0x88 scope:local
KillBackground = .text:0x00002110; // type:function size:0x34 scope:local KillRoomBG = .text:0x00002110; // type:function size:0x34 scope:local
CreateArrowPair = .text:0x00002144; // type:function size:0x80 scope:local CreateArrow = .text:0x00002144; // type:function size:0x80 scope:local
KillArrowPair = .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
ChangeMode = .text:0x000024A8; // type:function size:0x44 scope:local SetExecMode = .text:0x000024A8; // type:function size:0x44 scope:local
GetMode = .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
HandleGuide = .text:0x000025AC; // type:function size:0x46C scope:local ExecGuide = .text:0x000025AC; // type:function size:0x46C scope:local
UpdateGuide = .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
HandleState = .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_39D4 = .text:0x000032D4; // type:function size:0x1C OptionRumbleExecModeGet = .text:0x000032D4; // type:function size:0x1C
HandleRumble = .text:0x000032F0; // type:function size:0x4BC scope:local ExecRumble = .text:0x000032F0; // type:function size:0x4BC scope:local
CreateHand = .text:0x000037AC; // type:function size:0xBC scope:local CreateHand = .text:0x000037AC; // type:function size:0xBC scope:local
KillHand = .text:0x00003868; // type:function size:0x54 scope:local KillHand = .text:0x00003868; // type:function size:0x54 scope:local
CreateSystem = .text:0x000038BC; // type:function size:0xD0 scope:local CreateSystem = .text:0x000038BC; // type:function size:0xD0 scope:local
@ -60,56 +60,56 @@ KillPad = .text:0x00003B8C; // type:function size:0x54 scope:local
ShakePad = .text:0x00003BE0; // type:function size:0x8C scope:local ShakePad = .text:0x00003BE0; // type:function size:0x8C scope:local
CreatePadFilter = .text:0x00003C6C; // type:function size:0x94 scope:local CreatePadFilter = .text:0x00003C6C; // type:function size:0x94 scope:local
KillPadFilter = .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
CreateHighlightOn = .text:0x00003F28; // type:function size:0xAC scope:local CreateHiliteOn = .text:0x00003F28; // type:function size:0xAC scope:local
KillHighlightOn = .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
HandleInitialScreen = .text:0x000043E8; // type:function size:0x270 scope:local ExecZoom = .text:0x000043E8; // type:function size:0x270 scope:local
HandleOptionSel = .text:0x00004658; // type:function size:0x424 scope:local ExecOptionSel = .text:0x00004658; // type:function size:0x424 scope:local
HandleSoundSettings = .text:0x00004A7C; // type:function size:0x3D4 scope:local ExecOutputMode = .text:0x00004A7C; // type:function size:0x3D4 scope:local
HandleMusic = .text:0x00004E50; // type:function size:0x93C scope:local ExecMusic = .text:0x00004E50; // type:function size:0x93C scope:local
HandleVoice = .text:0x0000578C; // type:function size:0x8B8 scope:local ExecVoice = .text:0x0000578C; // type:function size:0x8B8 scope:local
TurnOnIndicator = .text:0x00006044; // type:function size:0xF8 scope:local LightSetCurr = .text:0x00006044; // type:function size:0xF8 scope:local
TurnOffIndicators = .text:0x0000613C; // type:function size:0x64 scope:local LightSetNone = .text:0x0000613C; // type:function size:0x64 scope:local
CreateOptionHand = .text:0x000061A0; // type:function size:0xFC scope:local CreateHand = .text:0x000061A0; // type:function size:0xFC scope:local
KillOptionHand = .text:0x0000629C; // type:function size:0x54 scope:local KillHand = .text:0x0000629C; // type:function size:0x54 scope:local
CreateSoundSettingsHand = .text:0x000062F0; // type:function size:0xFC scope:local CreateOutputModeHand = .text:0x000062F0; // type:function size:0xFC scope:local
KillSoundSettingsHand = .text:0x000063EC; // type:function size:0x54 scope:local KillOutputModeHand = .text:0x000063EC; // type:function size:0x54 scope:local
CreateSystem = .text:0x00006440; // type:function size:0x94 scope:local CreateSystem = .text:0x00006440; // type:function size:0x94 scope:local
KillSystem = .text:0x000064D4; // type:function size:0x54 scope:local KillSystem = .text:0x000064D4; // type:function size:0x54 scope:local
CreateIndicator = .text:0x00006528; // type:function size:0x118 scope:local CreateLightObj = .text:0x00006528; // type:function size:0x118 scope:local
KillIndicator = .text:0x00006640; // type:function size:0x54 scope:local KillLightObj = .text:0x00006640; // type:function size:0x54 scope:local
HideIndicator = .text:0x00006694; // type:function size:0x38 scope:local LightDispOff = .text:0x00006694; // type:function size:0x38 scope:local
ShowIndicator = .text:0x000066CC; // type:function size:0x38 scope:local LightDispOn = .text:0x000066CC; // type:function size:0x38 scope:local
CreateSpr = .text:0x00006704; // type:function size:0xC4 scope:local CreateSpr = .text:0x00006704; // type:function size:0xC4 scope:local
KillSpr = .text:0x000067C8; // type:function size:0x60 scope:local KillSpr = .text:0x000067C8; // type:function size:0x60 scope:local
DisplayOptionSel = .text:0x00006828; // type:function size:0x1E4 scope:local OptionSelDisp = .text:0x00006828; // type:function size:0x1E4 scope:local
HideOptionSel = .text:0x00006A0C; // type:function size:0x74 scope:local OptionSelHide = .text:0x00006A0C; // type:function size:0x74 scope:local
DisplaySoundSettings = .text:0x00006A80; // type:function size:0x1DC scope:local OutputModeDisp = .text:0x00006A80; // type:function size:0x1DC scope:local
HideSoundSettings = .text:0x00006C5C; // type:function size:0x74 scope:local OutputModeHide = .text:0x00006C5C; // type:function size:0x74 scope:local
DisplayMusicTitle = .text:0x00006CD0; // type:function size:0x1D4 scope:local MusicPageDisp = .text:0x00006CD0; // type:function size:0x1D4 scope:local
HideMusicTitle = .text:0x00006EA4; // type:function size:0xA4 scope:local MusicPageHide = .text:0x00006EA4; // type:function size:0xA4 scope:local
DisplayVoice = .text:0x00006F48; // type:function size:0x1D4 scope:local VoicePageDisp = .text:0x00006F48; // type:function size:0x1D4 scope:local
HideVoiceTitle = .text:0x0000711C; // type:function size:0xA4 scope:local VoicePageHide = .text:0x0000711C; // type:function size:0xA4 scope:local
CreateNote = .text:0x000071C0; // type:function size:0xE8 scope:local CreateNoteObj = .text:0x000071C0; // type:function size:0xE8 scope:local
KillNote = .text:0x000072A8; // type:function size:0x68 scope:local KillNote = .text:0x000072A8; // type:function size:0x68 scope:local
HandleNote = .text:0x00007310; // type:function size:0x400 scope:local HandleNote = .text:0x00007310; // type:function size:0x400 scope:local
SpawnNote = .text:0x00007710; // type:function size:0x190 scope:local CreateNote = .text:0x00007710; // type:function size:0x190 scope:local
CreateNoteProcess = .text:0x000078A0; // type:function size:0x60 scope:local CreateNoteSpawner = .text:0x000078A0; // type:function size:0x60 scope:local
KillNoteProcess = .text:0x00007900; // type:function size:0x3C scope:local KillNoteSpawner = .text:0x00007900; // type:function size:0x3C scope:local
HandleNoteProcess = .text:0x0000793C; // type:function size:0x5C4 scope:local ExecNoteSpawner = .text:0x0000793C; // type:function size:0x5C4 scope:local
PlaySound = .text:0x00007F00; // type:function size:0x148 scope:local PlaySound = .text:0x00007F00; // type:function size:0x148 scope:local
FadeOutCurrSound = .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
HandleRecord = .text:0x00008310; // type:function size:0x778 scope:local ExecRecord = .text:0x00008310; // type:function size:0x778 scope:local
CreateSystem = .text:0x00008A88; // type:function size:0xD0 scope:local CreateSystem = .text:0x00008A88; // type:function size:0xD0 scope:local
KillSystem = .text:0x00008B58; // type:function size:0x54 scope:local KillSystem = .text:0x00008B58; // type:function size:0x54 scope:local
StartSystemMotion = .text:0x00008BAC; // type:function size:0xD8 scope:local StartSystemMotion = .text:0x00008BAC; // type:function size:0xD8 scope:local
@ -117,25 +117,25 @@ CreateHand = .text:0x00008C84; // type:function size:0xFC scope:local
KillHand = .text:0x00008D80; // type:function size:0x54 scope:local KillHand = .text:0x00008D80; // type:function size:0x54 scope:local
CreateSpr = .text:0x00008DD4; // type:function size:0xC4 scope:local CreateSpr = .text:0x00008DD4; // type:function size:0xC4 scope:local
KillSpr = .text:0x00008E98; // type:function size:0x60 scope:local KillSpr = .text:0x00008E98; // type:function size:0x60 scope:local
GetDigitSprAt = .text:0x00008EF8; // type:function size:0x40 scope:local GetDigit = .text:0x00008EF8; // type:function size:0x40 scope:local
DisplayBoardRecord = .text:0x00008F38; // type:function size:0x77C scope:local ShowBoard = .text:0x00008F38; // type:function size:0x77C scope:local
HideBoardRecordSpr = .text:0x000096B4; // type:function size:0x9C scope:local HideBoard = .text:0x000096B4; // type:function size:0x9C scope:local
DisplayTotalResults = .text:0x00009750; // type:function size:0x344 scope:local ShowTotal = .text:0x00009750; // type:function size:0x344 scope:local
HideTotalResultsSpr = .text:0x00009A94; // type:function size:0x7C scope:local HideTotal = .text:0x00009A94; // type:function size:0x7C scope:local
ShowMGRecord = .text:0x00009B10; // type:function size:0x8A0 scope:local ShowMG = .text:0x00009B10; // type:function size:0x8A0 scope:local
HideMGRecordSpr = .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
HandleWindow = .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 __fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double
@ -173,12 +173,12 @@ lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:f
lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
guidePosTbl = .rodata:0x000000BC; // type:object size:0xC scope:local data:float guideAngleTbl = .rodata:0x000000BC; // type:object size:0xC scope:local data:float
lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
optionDescTbl = .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
@ -248,21 +248,21 @@ lbl_1_rodata_12C0 = .rodata:0x000012C0; // type:object size:0x4 scope:local data
lbl_1_rodata_12C4 = .rodata:0x000012C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
indicatorPosTbl = .rodata:0x000012D0; // type:object size:0x24 scope:local lightPosTbl = .rodata:0x000012D0; // type:object size:0x24 scope:local
lbl_1_rodata_12F4 = .rodata:0x000012F4; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
optionSelSprIdxTbl = .rodata:0x00001308; // type:object size:0x1C scope:local sprHideTbl$767 = .rodata:0x00001308; // type:object size:0x1C scope:local
lbl_1_rodata_1324 = .rodata:0x00001324; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
soundSettingsSprTbl = .rodata:0x00001330; // type:object size:0x14 scope:local sprHideTbl$793 = .rodata:0x00001330; // type:object size:0x14 scope:local
lbl_1_rodata_1344 = .rodata:0x00001344; // type:object size:0x4 scope:local data:float lbl_1_rodata_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
musicTitleSprIdxTbl = .rodata:0x0000134C; // type:object size:0x4 scope:local sprHideTbl$821 = .rodata:0x0000134C; // type:object size:0x4 scope:local
voiceTitleSprIdxTbl = .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
@ -353,31 +353,31 @@ lbl_1_rodata_19EC = .rodata:0x000019EC; // type:object size:0x4 scope:local data
lbl_1_data_1C = .data:0x0000001C; // type:object size:0x1B scope:local data:string lbl_1_data_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
modes = .data:0x00000068; // type:object size:0x8 scope:local data:4byte execModeTbl = .data:0x00000068; // type:object size:0x8 scope:local data:4byte
jumptable_1_data_70 = .data:0x00000070; // type:object size:0x24 scope:local jumptable_1_data_70 = .data:0x00000070; // type:object size:0x24 scope:local
modes = .data:0x00000098; // type:object size:0x8 scope:local data:4byte execModeTbl = .data:0x00000098; // type:object size:0x8 scope:local data:4byte
lightTbl = .data:0x000000A0; // type:object size:0x1C scope:local lightTbl = .data:0x000000A0; // type:object size:0x1C scope:local
shadowPosTbl = .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
modes = .data:0x00000108; // type:object size:0x8 scope:local data:4byte execModeTbl = .data:0x00000108; // type:object size:0x8 scope:local data:4byte
lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 scope:local lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 scope:local
musicPageEnabledTbl = .data:0x00000118; // type:object size:0x38 scope:local data:4byte musicPageOn = .data:0x00000118; // type:object size:0x38 scope:local data:4byte
modes = .data:0x00000150; // type:object size:0x18 scope:local data:4byte execModeTbl = .data:0x00000150; // type:object size:0x18 scope:local data:4byte
optionTextTbl = .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
sprTbl = .data:0x000001BC; // type:object size:0x4C scope:local spriteDataTbl = .data:0x000001BC; // type:object size:0x4C scope:local
noteSprTbl = .data:0x00000208; // type:object size:0x8 scope:local noteMdlTbl = .data:0x00000208; // type:object size:0x8 scope:local
modes = .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
rumbleF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte rumbleF = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
scene = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte 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

@ -15,70 +15,76 @@ typedef struct {
/* 0x18 */ u32 messToBeSet; /* 0x18 */ u32 messToBeSet;
/* 0x1C */ s32 choice; /* 0x1C */ s32 choice;
/* 0x20 */ s32 state; // TODO add defines /* 0x20 */ s32 state; // TODO add defines
} WindowWork; // Size 0x24 } OptionWindow; // Size 0x24
void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime); void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration);
BOOL fn_1_550(u16 btn); void OptionFadeModel(s16 model, BOOL inF, s32 duration);
BOOL fn_1_584(u16 arg0);
BOOL fn_1_5B8(u16 arg0);
omObjData *fn_1_7F8(void); BOOL OptionPadCheck(u16 btn);
void fn_1_A3C(omObjData *object); BOOL OptionPadDStkRepCheck(u16 arg0);
void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration); BOOL OptionPadDStkCheck(u16 arg0);
void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration);
void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration);
float fn_1_BF8(omObjData *object);
float fn_1_C28(omObjData *object);
void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ);
s32 fn_1_CB8(omObjData *object);
omObjData *fn_1_15A4(void); omObjData *OptionCameraCreate(void);
void fn_1_1798(omObjData *object); void OptionCameraKill(omObjData *object);
void fn_1_1A2C(omObjData *object, s32 mode); void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration);
s32 fn_1_1A70(omObjData *object); 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 *object); s32 OptionCameraDoneCheck(omObjData *object);
void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration);
omObjData *fn_1_2E04(void); omObjData *OptionRoomCreate(void);
void fn_1_2F4C(omObjData *object); 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 *object); void OptionGuideKill(omObjData *object);
void fn_1_3290(omObjData *object, s32 mode); void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration);
s32 fn_1_39D4(omObjData *object);
void fn_1_3D54(omObjData *object);
void fn_1_3E1C(omObjData *object);
BOOL fn_1_3ED0(omObjData *object);
omObjData *fn_1_4028(void); omObjData *OptionStateCreate(void);
void fn_1_42DC(omObjData *object); void OptionStateKill(omObjData *object);
void fn_1_4388(omObjData *object, s32 arg1);
s32 fn_1_43CC(omObjData *object);
omObjData *fn_1_80E4(void); omObjData *OptionRumbleCreate(void);
void fn_1_825C(omObjData *object); void OptionRumbleKill(omObjData *object);
void fn_1_82B0(omObjData *object, s32 arg1); void OptionRumbleExecModeSet(omObjData *object, s32 execMode);
s32 fn_1_82F4(omObjData *object); s32 OptionRumbleExecModeGet(omObjData *object);
void OptionRumbleMotionShowStart(omObjData *object);
void OptionRumbleMotionHideStart(omObjData *object);
BOOL OptionRumbleMotionCheck(omObjData *object);
WindowWork *fn_1_A44C(s32 id); omObjData *OptionSoundCreate(void);
void fn_1_A6AC(WindowWork *work); void OptionSoundKill(omObjData *object);
void fn_1_A6EC(WindowWork *work); void OptionSoundExecModeSet(omObjData *object, s32 execMode);
void fn_1_A704(WindowWork *work); s32 OptionSoundExecModeGet(omObjData *object);
void fn_1_A71C(WindowWork *work, s32 mess);
void fn_1_A7B0(WindowWork *work, float x, float y);
void fn_1_A7F0(WindowWork *work);
void fn_1_A828(WindowWork *work);
void fn_1_A880(WindowWork *work, s32 choice);
extern Process *lbl_1_bss_8; 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

@ -9,116 +9,115 @@
#include "ext_math.h" #include "ext_math.h"
typedef struct { typedef struct {
/* 0x00 */ Vec eyePos; /* 0x00 */ Vec pos;
/* 0x0C */ Vec lookingAt; /* 0x0C */ Vec target;
/* 0x18 */ Vec tilt; /* 0x18 */ Vec up;
/* 0x24 */ float zoom; /* 0x24 */ float zoom;
/* 0x28 */ float rot; /* 0x28 */ float rot;
/* 0x2C */ Vec prevEyePos; /* 0x2C */ Vec posPrev;
/* 0x38 */ Vec prevLookingAt; /* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC]; /* 0x44 */ char unk44[0xC];
/* 0x50 */ float prevZoom; /* 0x50 */ float prevZoom;
/* 0x54 */ float prevRot; /* 0x54 */ float prevRot;
/* 0x58 */ Vec eyePosTarget; /* 0x58 */ Vec posTarget;
/* 0x64 */ Vec lookingAtTarget; /* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC]; /* 0x70 */ char unk70[0xC];
/* 0x7C */ float zoomTarget; /* 0x7C */ float zoomTarget;
/* 0x80 */ float rotTarget; /* 0x80 */ float rotTarget;
/* 0x84 */ float eyeVelocity; /* 0x84 */ float timeEye;
/* 0x88 */ float eyeSpeed; /* 0x88 */ float eyeSpeed;
/* 0x8C */ float lookingAtVelocity; /* 0x8C */ float timeTarget;
/* 0x90 */ float lookingAtSpeed; /* 0x90 */ float targetSpeed;
/* 0x94 */ float rotVelocity; /* 0x94 */ float timeRot;
/* 0x98 */ float rotSpeed; /* 0x98 */ float rotSpeed;
} CameraWork; // Size 0x9C } CameraWork; // Size 0x9C
static void fn_1_C58(omObjData *object, float *arg1, float *arg2, float *arg3); static void ExecCameraObj(omObjData *object);
static void HandlerWrapper(omObjData *object); static void ExecCamera(omObjData *object);
static void HandleCamera(omObjData *object);
static void fn_1_12E4(omObjData *object); static void fn_1_12E4(omObjData *object);
static void PrintDebugInfo(omObjData *object); static void PrintDebugInfo(omObjData *object);
omObjData *lbl_1_bss_10; omObjData *optionCamera;
static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f }; static float pad_04_00000000_data[] = { 0.0f, 500.0f, 0.0f, 0.0f, -1.0f, 0.0f };
static s32 pad_04_00000018_data = -1; static s32 pad_04_00000018_data = -1;
omObjData *fn_1_7F8(void) omObjData *OptionCameraCreate(void)
{ {
omObjData *object; omObjData *object;
CameraWork *work; CameraWork *work;
object = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, HandlerWrapper); object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->eyePos.x = 0.0f; work->pos.x = 0.0f;
work->eyePos.y = 0.0f; work->pos.y = 0.0f;
work->eyePos.z = 0.0f; work->pos.z = 0.0f;
work->lookingAt.x = 0.0f; work->target.x = 0.0f;
work->lookingAt.y = 0.0f; work->target.y = 0.0f;
work->lookingAt.z = 0.0f; work->target.z = 0.0f;
work->tilt.x = 0.0f; work->up.x = 0.0f;
work->tilt.y = 1.0f; work->up.y = 1.0f;
work->tilt.z = 0.0f; work->up.z = 0.0f;
work->zoom = 0.0f; work->zoom = 0.0f;
work->rot = 0.0f; work->rot = 0.0f;
work->lookingAtVelocity = 1.0f; work->timeTarget = 1.0f;
work->eyeVelocity = 1.0f; work->timeEye = 1.0f;
work->rotVelocity = 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(object, 600.0f, 60.0f, 120.0f, 1); OptionCameraViewSet(object, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(object, 180.0f, 120.0f, 0.0f, 1); OptionCameraTargetSet(object, 180.0f, 120.0f, 0.0f, 1);
return object; return object;
} }
void fn_1_A3C(omObjData *object) void OptionCameraKill(omObjData *object)
{ {
HuMemDirectFree(object->data); HuMemDirectFree(object->data);
} }
void fn_1_A6C(omObjData *object, float x, float y, float z, s32 duration) void OptionCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
work->eyePosTarget.x = x; work->posTarget.x = x;
work->eyePosTarget.y = y; work->posTarget.y = y;
work->eyePosTarget.z = z; work->posTarget.z = z;
work->prevEyePos = work->eyePos; work->posPrev = work->pos;
work->eyeVelocity = 0.0f; work->timeEye = 0.0f;
work->eyeSpeed = 1.0f / duration; work->eyeSpeed = 1.0f / duration;
} }
void fn_1_AF0(omObjData *object, float x, float y, float z, s32 duration) void OptionCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
work->lookingAtTarget.x = x; work->posFocus.x = x;
work->lookingAtTarget.y = y; work->posFocus.y = y;
work->lookingAtTarget.z = z; work->posFocus.z = z;
work->prevLookingAt = work->lookingAt; work->targetPrev = work->target;
work->lookingAtVelocity = 0.0f; work->timeTarget = 0.0f;
work->lookingAtSpeed = 1.0f / duration; work->targetSpeed = 1.0f / duration;
} }
void fn_1_B74(omObjData *object, float zoom, float rot, float y, s32 duration) void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
work->lookingAtTarget.y = y; work->posFocus.y = y;
work->zoomTarget = zoom; work->zoomTarget = zoom;
work->rotTarget = rot; work->rotTarget = rot;
work->prevLookingAt.y = work->lookingAt.y; work->targetPrev.y = work->target.y;
work->prevZoom = work->zoom; work->prevZoom = work->zoom;
work->prevRot = work->rot; work->prevRot = work->rot;
work->rotVelocity = 0.0f; work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration; work->rotSpeed = 1.0f / duration;
} }
// GetZoom // GetZoom
float fn_1_BF8(omObjData *object) float OptionCameraZoomGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float zoom; float zoom;
@ -128,7 +127,7 @@ float fn_1_BF8(omObjData *object)
} }
// GetRot // GetRot
float fn_1_C28(omObjData *object) float OptionCameraRotGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float rot; float rot;
@ -137,117 +136,117 @@ float fn_1_C28(omObjData *object)
return rot; return rot;
} }
// GetEyePos // Getpos
static void fn_1_C58(omObjData *object, float *eyePosX, float *eyePosY, float *eyePosZ) void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *temp_r31 = object->data; CameraWork *temp_r31 = object->data;
*eyePosX = temp_r31->eyePos.x; *x = temp_r31->pos.x;
*eyePosY = temp_r31->eyePos.y; *y = temp_r31->pos.y;
*eyePosZ = temp_r31->eyePos.z; *z = temp_r31->pos.z;
} }
// GetLookingAt // Gettarget
void fn_1_C88(omObjData *object, float *lookingAtX, float *lookingAtY, float *lookingAtZ) void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
*lookingAtX = work->lookingAt.x; *x = work->target.x;
*lookingAtY = work->lookingAt.y; *y = work->target.y;
*lookingAtZ = work->lookingAt.z; *z = work->target.z;
} }
// CameraDone // CameraDone
s32 fn_1_CB8(omObjData *object) s32 OptionCameraDoneCheck(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
s32 var_r30 = 1; s32 var_r30 = 1;
s32 var_r29 = 1; s32 var_r29 = 1;
if (!(work->lookingAtVelocity < 1.0f) && !(work->rotVelocity < 1.0f)) { if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) {
var_r29 = 0; var_r29 = 0;
} }
if (var_r29 == 0 && !(work->eyeVelocity < 1.0f)) { if (var_r29 == 0 && !(work->timeEye < 1.0f)) {
var_r30 = 0; var_r30 = 0;
} }
return var_r30; return var_r30;
} }
static void HandlerWrapper(omObjData *object) static void ExecCameraObj(omObjData *object)
{ {
HandleCamera(object); ExecCamera(object);
} }
static void HandleCamera(omObjData *object) static void ExecCamera(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float temp_f28; float weight;
float xDiff; float dx;
float zDiff; float dz;
if (work->eyeVelocity < 1.0f) { if (work->timeEye < 1.0f) {
temp_f28 = sind(90.0f * work->eyeVelocity); weight = sind(90.0f * work->timeEye);
work->eyePos.x = work->prevEyePos.x + temp_f28 * (work->eyePosTarget.x - work->prevEyePos.x); work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
work->eyePos.y = work->prevEyePos.y + temp_f28 * (work->eyePosTarget.y - work->prevEyePos.y); work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
work->eyePos.z = work->prevEyePos.z + temp_f28 * (work->eyePosTarget.z - work->prevEyePos.z); work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
if ((work->eyeVelocity += work->eyeSpeed) >= 1.0f) { if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
work->eyePos = work->eyePosTarget; work->pos = work->posTarget;
} }
} }
if (work->lookingAtVelocity < 1.0f) { if (work->timeTarget < 1.0f) {
temp_f28 = sind(90.0f * work->lookingAtVelocity); weight = sind(90.0f * work->timeTarget);
work->lookingAt.x = work->prevLookingAt.x + temp_f28 * (work->lookingAtTarget.x - work->prevLookingAt.x); work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->lookingAt.z = work->prevLookingAt.z + temp_f28 * (work->lookingAtTarget.z - work->prevLookingAt.z); work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((work->lookingAtVelocity += work->lookingAtSpeed) >= 1.0f) { if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
work->lookingAt = work->lookingAtTarget; work->target = work->posFocus;
} }
} }
if (work->rotVelocity < 1.0f) { if (work->timeRot < 1.0f) {
temp_f28 = sind(90.0f * work->rotVelocity); weight = sind(90.0f * work->timeRot);
work->lookingAt.y = work->prevLookingAt.y + temp_f28 * (work->lookingAtTarget.y - work->prevLookingAt.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->zoom = work->prevZoom + temp_f28 * (work->zoomTarget - work->prevZoom); work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom);
work->rot = work->prevRot + temp_f28 * (work->rotTarget - work->prevRot); work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot);
if ((work->rotVelocity += work->rotSpeed) >= 1.0f) { if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->lookingAt.y = work->lookingAtTarget.y; work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget; work->zoom = work->zoomTarget;
work->rot = work->rotTarget; work->rot = work->rotTarget;
} }
work->lookingAt.x = work->zoom * -sind(work->rot); work->target.x = work->zoom * -sind(work->rot);
work->lookingAt.z = work->zoom * cosd(work->rot); work->target.z = work->zoom * cosd(work->rot);
} }
xDiff = work->lookingAt.x - work->eyePos.x; dx = work->target.x - work->pos.x;
zDiff = work->lookingAt.z - work->eyePos.z; dz = work->target.z - work->pos.z;
work->zoom = sqrtf(xDiff * xDiff + zDiff * zDiff); work->zoom = sqrtf(dx * dx + dz * dz);
work->rot = fmod(-atan2d(xDiff, zDiff), 360.0); work->rot = fmod(-atan2d(dx, dz), 360.0);
if (work->rot < 0.0f) { if (work->rot < 0.0f) {
work->rot += 360.0f; work->rot += 360.0f;
} }
Hu3DCameraPosSet(1, work->eyePos.x, work->eyePos.y, work->eyePos.z, work->tilt.x, work->tilt.y, work->tilt.z, work->lookingAt.x, Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x,
work->lookingAt.y, work->lookingAt.z); work->target.y, work->target.z);
} }
static void fn_1_12E4(omObjData *object) static void CameraExecDebug(omObjData *object)
{ {
CameraWork *work; CameraWork *work;
if (HuPadBtn[0] & 0xF) { if (HuPadBtn[0] & 0xF) {
work = object->data; work = object->data;
work->lookingAt.x += 0.5f * HuPadStkX[0]; work->target.x += 0.5f * HuPadStkX[0];
work->lookingAt.y += 0.5f * HuPadStkY[0]; work->target.y += 0.5f * HuPadStkY[0];
work->eyePos.z += 0.5f * HuPadTrigL[0]; work->pos.z += 0.5f * HuPadTrigL[0];
work->eyePos.z -= 0.5f * HuPadTrigR[0]; work->pos.z -= 0.5f * HuPadTrigR[0];
work->eyePos.x += 0.5f * HuPadSubStkY[0]; work->pos.x += 0.5f * HuPadSubStkY[0];
work->eyePos.y += 0.5f * HuPadSubStkX[0]; work->pos.y += 0.5f * HuPadSubStkX[0];
} }
} }
static void PrintDebugInfo(omObjData *object) static void CameraPrintDebug(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->lookingAt.x, work->lookingAt.y, work->lookingAt.z); print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->eyePos.x, work->eyePos.y, work->eyePos.z); print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot); print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
} }

View file

@ -9,19 +9,18 @@
#include "ext_math.h" #include "ext_math.h"
typedef struct { typedef struct {
/* 0x00 */ s32 mode; /* 0x00 */ s32 execMode;
/* 0x04 */ s16 motionIdx; /* 0x04 */ s16 motion;
/* 0x06 */ char unk06[2];
/* 0x08 */ Vec pos; /* 0x08 */ Vec pos;
/* 0x14 */ Vec newPos; /* 0x14 */ Vec newPos;
/* 0x20 */ Vec rot; /* 0x20 */ Vec rot;
/* 0x2C */ Vec posChange; /* 0x2C */ Vec posDelta;
/* 0x38 */ float distanceToMove; /* 0x38 */ float distRemain;
/* 0x3C */ float unkAngle; /* 0x3C */ float angle;
/* 0x40 */ float posToMoveTo; /* 0x40 */ float angleEnd;
/* 0x44 */ float distFromCam; /* 0x44 */ float camDist;
/* 0x48 */ char unk48[0xC]; /* 0x48 */ char unk48[0xC];
/* 0x54 */ float velocity; /* 0x54 */ float time;
/* 0x58 */ float speed; /* 0x58 */ float speed;
/* 0x5C */ s32 unk5C; /* 0x5C */ s32 unk5C;
/* 0x60 */ s32 unk60; /* 0x60 */ s32 unk60;
@ -30,29 +29,29 @@ typedef struct {
#define MODE_DISABLED 0 #define MODE_DISABLED 0
#define MODE_HANDLE_GUIDE 1 #define MODE_HANDLE_GUIDE 1
static void ChangeMode(omObjData *object, s32 mode); static void SetExecMode(omObjData *object, s32 mode);
static s32 GetMode(omObjData *object); static s32 GetExecMode(omObjData *object);
static void HandleGuide(omObjData *object); static void ExecGuide(omObjData *object);
static void UpdateGuide(omObjData *object); static void UpdateGuide(omObjData *object);
static float fn_1_2D00(float arg0, float arg1, float arg2); static float LerpAngle(float arg0, float arg1, float arg2);
omObjData *lbl_1_bss_20; omObjData *optionGuide;
static const s32 lbl_1_rodata_E0[] = { static const s32 guideMotTbl[] = {
DATA_MAKE_NUM(DATADIR_OPTION, 16), DATA_MAKE_NUM(DATADIR_OPTION, 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 modes[] = { NULL, HandleGuide }; static omObjFunc execModeTbl[] = { NULL, ExecGuide };
omObjData *fn_1_21F8(void) omObjData *OptionGuideCreate(void)
{ {
omObjData *object; omObjData *object;
GuideWork *work; GuideWork *work;
s32 i; s32 i;
object = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); object = omAddObjEx(optionObjMan, 1002, 1, 3, 2, NULL);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->pos.x = -298.59f; work->pos.x = -298.59f;
@ -63,25 +62,25 @@ omObjData *fn_1_21F8(void)
work->rot.y = 134.42f; work->rot.y = 134.42f;
work->rot.z = 0.0f; work->rot.z = 0.0f;
work->posChange.x = 0.0f; work->posDelta.x = 0.0f;
work->posChange.z = 0.0f; work->posDelta.z = 0.0f;
work->posChange.y = 0.0f; work->posDelta.y = 0.0f;
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12));
Hu3DModelLayerSet(object->model[0], 1); Hu3DModelLayerSet(object->model[0], 1);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA));
} }
work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC); work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC);
work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC);
CharModelLayerSetAll(1); CharModelLayerSetAll(1);
Hu3DModelShadowSet(object->model[0]); Hu3DModelShadowSet(object->model[0]);
Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001);
ChangeMode(object, MODE_DISABLED); SetExecMode(object, MODE_DISABLED);
UpdateGuide(object); UpdateGuide(object);
return object; return object;
} }
void fn_1_241C(omObjData *object) void OptionGuideKill(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
s32 i; s32 i;
@ -95,90 +94,90 @@ void fn_1_241C(omObjData *object)
HuMemDirectFree(work); HuMemDirectFree(work);
} }
static void ChangeMode(omObjData *object, s32 mode) static void SetExecMode(omObjData *object, s32 execMode)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
work->mode = mode; work->execMode = execMode;
object->func = modes[mode]; object->func = execModeTbl[execMode];
object->unk10 = 0; object->unk10 = 0;
object->unk10 = 0; object->unk10 = 0;
} }
static s32 GetMode(omObjData *object) static s32 GetExecMode(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
return work->mode; return work->execMode;
} }
void fn_1_2508(omObjData *object, float destPos, float distFromCam, s32 walkDuration) void OptionGuideWalkExec(omObjData *object, float angleEnd, float camDist, s32 duration)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
work->posToMoveTo = destPos; work->angleEnd = angleEnd;
work->distFromCam = distFromCam; work->camDist = camDist;
work->velocity = 0.0f; work->time = 0.0f;
work->speed = 1.0f / walkDuration; work->speed = 1.0f / duration;
work->motionIdx = 0; work->motion = 0;
ChangeMode(object, MODE_HANDLE_GUIDE); SetExecMode(object, MODE_HANDLE_GUIDE);
} }
static void HandleGuide(omObjData *object) static void ExecGuide(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
float var_f31; float angle;
float var_f30; float weight;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
work->unkAngle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0); work->angle = fmod(-atan2d(work->pos.x, work->pos.z), 360.0);
if (work->unkAngle < 0.0f) { if (work->angle < 0.0f) {
work->unkAngle += 360.0f; work->angle += 360.0f;
} }
object->unk10 = 1; object->unk10 = 1;
/* fallthrough */ /* fallthrough */
case 1: case 1:
var_f30 = sind(90.0f * work->velocity); weight = sind(90.0f * work->time);
var_f31 = work->unkAngle + var_f30 * (work->posToMoveTo - work->unkAngle); angle = work->angle + weight * (work->angleEnd - work->angle);
work->newPos.x = work->distFromCam * -sind(var_f31); work->newPos.x = work->camDist * -sind(angle);
work->newPos.z = work->distFromCam * cosd(var_f31); work->newPos.z = work->camDist * cosd(angle);
work->newPos.y = 0.0f; work->newPos.y = 0.0f;
work->posChange.x = work->newPos.x - work->pos.x; work->posDelta.x = work->newPos.x - work->pos.x;
work->posChange.z = work->newPos.z - work->pos.z; work->posDelta.z = work->newPos.z - work->pos.z;
if (work->velocity <= 0.0f) { if (work->time <= 0.0f) {
work->posChange.x = 0.0f; work->posDelta.x = 0.0f;
work->posChange.z = 0.0f; work->posDelta.z = 0.0f;
work->pos = work->newPos; work->pos = work->newPos;
} }
if ((work->velocity += work->speed) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break; break;
} }
var_f31 = fmod(-atan2d(work->pos.x, work->pos.z), 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;
} }
work->newPos.x = 422.0 * -sind(var_f31); work->newPos.x = 422.0 * -sind(angle);
work->newPos.z = 422.0 * cosd(var_f31); work->newPos.z = 422.0 * cosd(angle);
work->posChange.x = (work->newPos.x - work->pos.x) / 10.0f; work->posDelta.x = (work->newPos.x - work->pos.x) / 10.0f;
work->posChange.z = (work->newPos.z - work->pos.z) / 10.0f; work->posDelta.z = (work->newPos.z - work->pos.z) / 10.0f;
work->speed = 0.1f; work->speed = 0.1f;
work->velocity = 0.0f; work->time = 0.0f;
object->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if ((work->velocity += work->speed) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break; break;
} }
object->unk10 = 3; object->unk10 = 3;
/* fallthrough */ /* fallthrough */
case 3: case 3:
work->pos = work->newPos; work->pos = work->newPos;
work->posChange.x = 0.0f; work->posDelta.x = 0.0f;
work->posChange.y = 0.0f; work->posDelta.y = 0.0f;
work->posChange.z = 0.0f; work->posDelta.z = 0.0f;
UpdateGuide(object); UpdateGuide(object);
ChangeMode(object, MODE_DISABLED); SetExecMode(object, MODE_DISABLED);
break; break;
} }
UpdateGuide(object); UpdateGuide(object);
@ -187,51 +186,51 @@ static void HandleGuide(omObjData *object)
static void UpdateGuide(omObjData *object) static void UpdateGuide(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
s16 var_r29; s16 motion;
var_r29 = 0; motion = 0;
work->distanceToMove = sqrtf(work->posChange.x * work->posChange.x + work->posChange.z * work->posChange.z); work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= work->distanceToMove) { if (0.001f <= work->distRemain) {
if (14.0f <= work->distanceToMove) { if (14.0f <= work->distRemain) {
work->posChange.x /= work->distanceToMove; work->posDelta.x /= work->distRemain;
work->posChange.z /= work->distanceToMove; work->posDelta.z /= work->distRemain;
work->distanceToMove = 14.0f; work->distRemain = 14.0f;
work->posChange.x = 14.0f * work->posChange.x; work->posDelta.x = 14.0f * work->posDelta.x;
work->posChange.z = 14.0f * work->posChange.z; work->posDelta.z = 14.0f * work->posDelta.z;
} }
work->rot.y = fn_1_2D00(work->rot.y, atan2d(work->posChange.x, work->posChange.z), 0.4f); work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f);
if (8.0f <= work->distanceToMove) { if (8.0f <= work->distRemain) {
var_r29 = 2; motion = 2;
} }
else { else {
var_r29 = 1; motion = 1;
} }
} }
work->pos.x += work->posChange.x; work->pos.x += work->posDelta.x;
work->pos.z += work->posChange.z; work->pos.z += work->posDelta.z;
if (work->motionIdx != var_r29) { if (work->motion != motion) {
Hu3DMotionShiftSet(*object->model, object->motion[var_r29], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(*object->model, object->motion[motion], 0.0f, 8.0f, 0x40000001);
work->motionIdx = var_r29; work->motion = motion;
} }
omSetTra(object, work->pos.x, work->pos.y, work->pos.z); omSetTra(object, work->pos.x, work->pos.y, work->pos.z);
omSetRot(object, work->rot.x, work->rot.y, work->rot.z); omSetRot(object, work->rot.x, work->rot.y, work->rot.z);
} }
static float fn_1_2D00(float arg0, float arg1, float arg2) static float LerpAngle(float start, float end, float time)
{ {
float var_f30; float angle;
float var_f31; 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;
} }

View file

@ -21,15 +21,15 @@
#define WIN_COUNT_NUM_DIGITS 3 #define WIN_COUNT_NUM_DIGITS 3
#define MAX_COINS_NUM_DIGITS 4 #define MAX_COINS_NUM_DIGITS 4
#define MAX_STARS_NUM_DIGITS 4 #define MAX_STARS_NUM_DIGITS 4
#define MG_DECIMAL_NUM_DIGITS 8 #define MG_SCORE_NUM_DIGITS 8
#define MG_TIME_NUM_DIGITS 8 #define MG_TIME_NUM_DIGITS 8
#define DISPLAY_TYPE_TIME 0 #define DISPLAY_TYPE_TIME 0
#define DISPLAY_TYPE_DECIMAL 1 #define DISPLAY_TYPE_SCORE 1
typedef struct { typedef struct {
/* 0x00 */ s32 playCount; /* 0x00 */ s32 playCount;
/* 0x04 */ s32 winCounts[8]; /* 0x04 */ s32 winCount[8];
/* 0x24 */ s32 maxCoins; /* 0x24 */ s32 maxCoins;
/* 0x28 */ s32 maxStars; /* 0x28 */ s32 maxStars;
} BoardRecordData; // Size 0x2C } BoardRecordData; // Size 0x2C
@ -37,15 +37,15 @@ typedef struct {
typedef struct { typedef struct {
/* 0x000 */ omObjData *system; /* 0x000 */ omObjData *system;
/* 0x004 */ omObjData *hand; /* 0x004 */ omObjData *hand;
/* 0x008 */ WindowWork *window[10]; /* 0x008 */ OptionWindow *window[10];
/* 0x030 */ s32 mode; /* 0x030 */ s32 execMode;
/* 0x034 */ s16 sprList[153]; /* 0x034 */ s16 sprList[153];
/* 0x166 */ char unk166[6]; /* 0x166 */ s16 unk166[3];
/* 0x16C */ s32 recordType; /* 0x16C */ s32 recordType;
/* 0x170 */ s32 board; /* 0x170 */ s32 board;
/* 0x174 */ s32 mgPage; /* 0x174 */ s32 mgPage;
/* 0x178 */ BoardRecordData boardRecords[6]; /* 0x178 */ BoardRecordData boardRecord[6];
/* 0x280 */ s32 mgRecords[6]; /* 0x280 */ s32 mgRecord[6];
/* 0x298 */ s32 cameraDoneF; /* 0x298 */ s32 cameraDoneF;
/* 0x29C */ s32 changeTimer; /* 0x29C */ s32 changeTimer;
} RecordWork; // Size 0x2A0 } RecordWork; // Size 0x2A0
@ -59,48 +59,48 @@ typedef struct {
#define MODE_DISABLED 0 #define MODE_DISABLED 0
#define MODE_HANDLE_RECORD 1 #define MODE_HANDLE_RECORD 1
static void HandleRecord(omObjData *object); static void ExecRecord(omObjData *object);
static omObjData *CreateSystem(void); static omObjData *CreateSystem(void);
static void KillSystem(omObjData *system); static void KillSystem(omObjData *object);
static void StartSystemMotion(omObjData *system, s32 type); static void StartSystemMotion(omObjData *object, s32 type);
static omObjData *CreateHand(void); static omObjData *CreateHand(void);
static void KillHand(omObjData *hand); static void KillHand(omObjData *object);
static void CreateSpr(omObjData *object); static void CreateSpr(omObjData *object);
static void KillSpr(omObjData *object); static void KillSpr(omObjData *object);
static s32 GetDigitSprAt(s32 n, s32 offsetFromRight); static s32 GetDigit(s32 value, s32 place);
static void DisplayBoardRecord(omObjData *object, s32 board); static void ShowBoard(omObjData *object, s32 board);
static void HideBoardRecordSpr(omObjData *object); static void HideBoard(omObjData *object);
static void DisplayTotalResults(omObjData *object); static void ShowTotal(omObjData *object);
static void HideTotalResultsSpr(omObjData *object); static void HideTotal(omObjData *object);
static void ShowMGRecord(omObjData *object, s32 page); static void ShowMG(omObjData *object, s32 page);
static void HideMGRecordSpr(omObjData *object); static void HideMG(omObjData *object);
omObjData *lbl_1_bss_40; omObjData *optionRecord;
static const s32 mgRecordIdxTbl[] = { 0, 1, 2, 3, 5, 10 }; static const s32 mgRecordIdxTbl[] = { 0, 1, 2, 3, 5, 10 };
static omObjFunc modes[] = { NULL, HandleRecord }; static omObjFunc execModeTbl[] = { NULL, ExecRecord };
omObjData *fn_1_80E4(void) omObjData *OptionRecordCreate(void)
{ {
omObjData *object; omObjData *object;
RecordWork *work; RecordWork *work;
s32 i; s32 i;
s32 character; s32 character;
object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RecordWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RecordWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
for (i = 0; i < NUM_BOARDS; i++) { for (i = 0; i < NUM_BOARDS; i++) {
work->boardRecords[i].playCount = GWBoardPlayCountGet(i); work->boardRecord[i].playCount = GWBoardPlayCountGet(i);
work->boardRecords[i].maxStars = GWBoardMaxStarsGet(i); work->boardRecord[i].maxStars = GWBoardMaxStarsGet(i);
work->boardRecords[i].maxCoins = GWBoardMaxCoinsGet(i); work->boardRecord[i].maxCoins = GWBoardMaxCoinsGet(i);
for (character = 0; character < NUM_CHARACTERS; character++) { for (character = 0; character < NUM_CHARACTERS; character++) {
work->boardRecords[i].winCounts[character] = GWBoardWinCountGet(character, i); work->boardRecord[i].winCount[character] = GWBoardWinCountGet(character, i);
} }
} }
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
work->mgRecords[i] = GWMGRecordGet(mgRecordIdxTbl[i]); work->mgRecord[i] = GWMGRecordGet(mgRecordIdxTbl[i]);
} }
work->board = 0; work->board = 0;
work->mgPage = 0; work->mgPage = 0;
@ -108,11 +108,11 @@ omObjData *fn_1_80E4(void)
work->system = CreateSystem(); work->system = CreateSystem();
work->hand = CreateHand(); work->hand = CreateHand();
CreateSpr(object); CreateSpr(object);
fn_1_82B0(object, MODE_DISABLED); OptionRecordExecModeSet(object, MODE_DISABLED);
return object; return object;
} }
void fn_1_825C(omObjData *object) void OptionRecordKill(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
@ -122,90 +122,90 @@ void fn_1_825C(omObjData *object)
HuMemDirectFree(work); HuMemDirectFree(work);
} }
void fn_1_82B0(omObjData *object, s32 mode) void OptionRecordExecModeSet(omObjData *object, s32 execMode)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
work->mode = mode; work->execMode = execMode;
object->func = modes[mode]; object->func = execModeTbl[execMode];
object->unk10 = 0; object->unk10 = 0;
object->unk10 = 0; object->unk10 = 0;
} }
s32 fn_1_82F4(omObjData *object) s32 OptionRecordExecModeGet(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
return work->mode; return work->execMode;
} }
static void HandleRecord(omObjData *object) static void ExecRecord(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
Vec sp8; Vec pos;
s32 i; s32 i;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
work->window[0] = fn_1_A44C(0); work->window[0] = OptionWinCreate(0);
work->window[1] = fn_1_A44C(1); work->window[1] = OptionWinCreate(1);
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
work->window[i + 2] = fn_1_A44C(3); work->window[i + 2] = OptionWinCreate(3);
} }
fn_1_AF0(lbl_1_bss_10, 519.0f, 125.0f, 300.0f, 0x28); OptionCameraFocusSet(optionCamera, 519.0f, 125.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, 308.98f, 125.0f, 178.74f, 0x28); OptionCameraTargetSet(optionCamera, 308.98f, 125.0f, 178.74f, 0x28);
work->board = 0; work->board = 0;
work->mgPage = 0; work->mgPage = 0;
work->cameraDoneF = 0; work->cameraDoneF = 0;
object->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_3D54(lbl_1_bss_30); OptionRumbleMotionShowStart(optionRumble);
espBankSet(work->sprList[47], 0); espBankSet(work->sprList[47], 0);
espBankSet(work->sprList[48], 2); espBankSet(work->sprList[48], 2);
espPosSet(work->sprList[47], 46.0f, 240.0f); espPosSet(work->sprList[47], 46.0f, 240.0f);
espPosSet(work->sprList[48], 494.0f, 240.0f); espPosSet(work->sprList[48], 494.0f, 240.0f);
if (work->recordType == RECORD_TYPE_BOARD) { if (work->recordType == RECORD_TYPE_BOARD) {
fn_1_160(work->sprList[47], 1, 10); OptionFadeSprite(work->sprList[47], 1, 10);
fn_1_160(work->sprList[48], 1, 10); OptionFadeSprite(work->sprList[48], 1, 10);
work->changeTimer = 0; work->changeTimer = 0;
} }
object->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
HideBoardRecordSpr(object); HideBoard(object);
HideMGRecordSpr(object); HideMG(object);
HideTotalResultsSpr(object); HideTotal(object);
switch (work->recordType) { switch (work->recordType) {
case RECORD_TYPE_BOARD: case RECORD_TYPE_BOARD:
if (work->board < 6) { if (work->board < 6) {
DisplayBoardRecord(object, work->board); ShowBoard(object, work->board);
} }
else { else {
DisplayTotalResults(object); ShowTotal(object);
} }
fn_1_A6EC(work->window[0]); OptionWinAnimIn(work->window[0]);
fn_1_A71C(work->window[0], MAKE_MESSID(47, 5)); OptionWinMesSet(work->window[0], MAKE_MESSID(47, 5));
break; break;
case RECORD_TYPE_MG: case RECORD_TYPE_MG:
ShowMGRecord(object, work->mgPage); ShowMG(object, work->mgPage);
fn_1_A6EC(work->window[0]); OptionWinAnimIn(work->window[0]);
fn_1_A71C(work->window[0], MAKE_MESSID(47, 6)); OptionWinMesSet(work->window[0], MAKE_MESSID(47, 6));
break; break;
} }
fn_1_A6EC(work->window[1]); OptionWinAnimIn(work->window[1]);
fn_1_A71C(work->window[1], MAKE_MESSID(47, 169)); OptionWinMesSet(work->window[1], MAKE_MESSID(47, 169));
if (!work->cameraDoneF) { if (!work->cameraDoneF) {
Hu3DModelAttrReset(work->hand->model[0], 1); Hu3DModelAttrReset(work->hand->model[0], 1);
work->cameraDoneF = TRUE; work->cameraDoneF = TRUE;
} }
sp8.x = 505.0 * -sin(305 * M_PI / 180.0); pos.x = 505.0 * -sin(305 * M_PI / 180.0);
sp8.z = 505.0 * cos(305 * M_PI / 180.0); pos.z = 505.0 * cos(305 * M_PI / 180.0);
sp8.y = 144.0f - 14.0f * work->recordType; pos.y = 144.0f - 14.0f * work->recordType;
omSetTra(work->hand, sp8.x, sp8.y, sp8.z); omSetTra(work->hand, pos.x, pos.y, pos.z);
object->unk10 = 3; object->unk10 = 3;
/* fallthrough */ /* fallthrough */
case 3: case 3:
@ -221,26 +221,26 @@ static void HandleRecord(omObjData *object)
if (work->window[1]->state != 0) { if (work->window[1]->state != 0) {
break; break;
} }
if (fn_1_550(PAD_BUTTON_B)) { if (OptionPadCheck(PAD_BUTTON_B)) {
HuAudFXPlay(3); HuAudFXPlay(3);
object->unk10 = 5; object->unk10 = 5;
} }
else if (fn_1_584(8) != 0 && work->recordType == RECORD_TYPE_MG) { else if (OptionPadDStkRepCheck(8) != 0 && work->recordType == RECORD_TYPE_MG) {
work->recordType = RECORD_TYPE_BOARD; work->recordType = RECORD_TYPE_BOARD;
work->board = 0; work->board = 0;
StartSystemMotion(work->system, work->recordType); StartSystemMotion(work->system, work->recordType);
fn_1_160(work->sprList[47], 1, 5); OptionFadeSprite(work->sprList[47], 1, 5);
fn_1_160(work->sprList[48], 1, 5); OptionFadeSprite(work->sprList[48], 1, 5);
work->changeTimer = 5; work->changeTimer = 5;
HuAudFXPlay(0x83F); HuAudFXPlay(0x83F);
object->unk10 = 2; object->unk10 = 2;
} }
else if (fn_1_584(4) != 0 && work->recordType == RECORD_TYPE_BOARD) { else if (OptionPadDStkRepCheck(4) != 0 && work->recordType == RECORD_TYPE_BOARD) {
work->recordType = RECORD_TYPE_MG; work->recordType = RECORD_TYPE_MG;
work->mgPage = 0; work->mgPage = 0;
StartSystemMotion(work->system, work->recordType); StartSystemMotion(work->system, work->recordType);
fn_1_160(work->sprList[47], 0, 5); OptionFadeSprite(work->sprList[47], 0, 5);
fn_1_160(work->sprList[48], 0, 5); OptionFadeSprite(work->sprList[48], 0, 5);
work->changeTimer = 5; work->changeTimer = 5;
HuAudFXPlay(0x83F); HuAudFXPlay(0x83F);
object->unk10 = 2; object->unk10 = 2;
@ -248,7 +248,7 @@ static void HandleRecord(omObjData *object)
else { else {
switch (work->recordType) { switch (work->recordType) {
case RECORD_TYPE_BOARD: case RECORD_TYPE_BOARD:
if (fn_1_550(PAD_TRIGGER_L)) { if (OptionPadCheck(PAD_TRIGGER_L)) {
if (--work->board < 0) { if (--work->board < 0) {
work->board = 6; work->board = 6;
} }
@ -261,7 +261,7 @@ static void HandleRecord(omObjData *object)
object->unk10 = 2; object->unk10 = 2;
return; return;
} }
if (fn_1_550(PAD_TRIGGER_R)) { if (OptionPadCheck(PAD_TRIGGER_R)) {
if (++work->board >= 7) { if (++work->board >= 7) {
work->board = 0; work->board = 0;
} }
@ -280,27 +280,27 @@ static void HandleRecord(omObjData *object)
} }
break; break;
case 5: case 5:
fn_1_3E1C(lbl_1_bss_30); OptionRumbleMotionHideStart(optionRumble);
if (work->recordType == RECORD_TYPE_BOARD) { if (work->recordType == RECORD_TYPE_BOARD) {
fn_1_160(work->sprList[47], 0, 10); OptionFadeSprite(work->sprList[47], 0, 10);
fn_1_160(work->sprList[48], 0, 10); OptionFadeSprite(work->sprList[48], 0, 10);
} }
fn_1_A704(work->window[0]); OptionWinAnimOut(work->window[0]);
fn_1_A704(work->window[1]); OptionWinAnimOut(work->window[1]);
Hu3DModelAttrSet(work->hand->model[0], 1); Hu3DModelAttrSet(work->hand->model[0], 1);
object->unk10 = 6; object->unk10 = 6;
/* fallthrough */ /* fallthrough */
case 6: case 6:
if (work->window[1]->state == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { if (work->window[1]->state == 0 && OptionRumbleMotionCheck(optionRumble) == 0) {
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
fn_1_A6AC(work->window[i]); OptionWinKill(work->window[i]);
} }
HideBoardRecordSpr(object); HideBoard(object);
HideMGRecordSpr(object); HideMG(object);
HideTotalResultsSpr(object); HideTotal(object);
fn_1_AF0(lbl_1_bss_10, 519.62f, 120.0f, 300.0f, 40); OptionCameraFocusSet(optionCamera, 519.62f, 120.0f, 300.0f, 40);
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_82B0(object, MODE_DISABLED); OptionRecordExecModeSet(object, MODE_DISABLED);
} }
break; break;
} }
@ -308,29 +308,29 @@ static void HandleRecord(omObjData *object)
static omObjData *CreateSystem(void) static omObjData *CreateSystem(void)
{ {
omObjData *system; omObjData *object;
system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1));
Hu3DModelAttrSet(system->model[0], 0x40000002); Hu3DModelAttrSet(object->model[0], 0x40000002);
Hu3DModelLayerSet(system->model[0], 0); Hu3DModelLayerSet(object->model[0], 0);
Hu3DMotionStartEndSet(system->model[0], 0.0f, 6.0f); Hu3DMotionStartEndSet(object->model[0], 0.0f, 6.0f);
Hu3DMotionTimeSet(system->model[0], 6.0f); Hu3DMotionTimeSet(object->model[0], 6.0f);
return system; return object;
} }
static void KillSystem(omObjData *system) static void KillSystem(omObjData *object)
{ {
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(system->model[i]); Hu3DModelKill(object->model[i]);
} }
} }
static void StartSystemMotion(omObjData *system, s32 type) static void StartSystemMotion(omObjData *object, s32 type)
{ {
s16 model = system->model[0]; s16 model = object->model[0];
switch (type) { switch (type) {
case RECORD_TYPE_BOARD: case RECORD_TYPE_BOARD:
@ -342,29 +342,29 @@ static void StartSystemMotion(omObjData *system, s32 type)
Hu3DMotionTimeSet(model, 6.0f); Hu3DMotionTimeSet(model, 6.0f);
break; break;
} }
Hu3DModelAttrReset(system->model[0], 0x40000002); Hu3DModelAttrReset(object->model[0], 0x40000002);
} }
static omObjData *CreateHand(void) static omObjData *CreateHand(void)
{ {
omObjData *hand; omObjData *object;
hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14));
Hu3DModelLayerSet(hand->model[0], 2); Hu3DModelLayerSet(object->model[0], 2);
Hu3DModelAttrSet(hand->model[0], 0x40000001); Hu3DModelAttrSet(object->model[0], 0x40000001);
omSetRot(hand, 30.0f, 190.0f, 0.0f); omSetRot(object, 30.0f, 190.0f, 0.0f);
omSetSca(hand, 0.6f, 0.6f, 0.6f); omSetSca(object, 0.6f, 0.6f, 0.6f);
Hu3DModelAttrSet(hand->model[0], 1); Hu3DModelAttrSet(object->model[0], 1);
return hand; return object;
} }
static void KillHand(omObjData *hand) static void KillHand(omObjData *object)
{ {
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(hand->model[i]); Hu3DModelKill(object->model[i]);
} }
} }
@ -551,18 +551,18 @@ static void KillSpr(omObjData *object)
} }
} }
static s32 GetDigitSprAt(s32 n, s32 offsetFromRight) static s32 GetDigit(s32 value, s32 place)
{ {
s32 i; s32 i;
i = 1; i = 1;
while (offsetFromRight-- != 0) { while (place-- != 0) {
i *= 10; i *= 10;
} }
return (n % (i * 10)) / i; return (value % (i * 10)) / i;
} }
static void DisplayBoardRecord(omObjData *object, s32 board) static void ShowBoard(omObjData *object, s32 board)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
s32 value; s32 value;
@ -570,36 +570,36 @@ static void DisplayBoardRecord(omObjData *object, s32 board)
s32 j; s32 j;
espPosSet(work->sprList[board], 275.0f, 72.0f); espPosSet(work->sprList[board], 275.0f, 72.0f);
value = work->boardRecords[work->board].playCount; value = work->boardRecord[work->board].playCount;
for (i = 0; i < PLAY_COUNT_NUM_DIGITS; i++) { for (i = 0; i < PLAY_COUNT_NUM_DIGITS; i++) {
espPosSet(work->sprList[i + 11], 323.0f + 20.0f * i, 116.0f); espPosSet(work->sprList[i + 11], 323.0f + 20.0f * i, 116.0f);
if (value > 999) { if (value > 999) {
espBankSet(work->sprList[i + 11], i + 10); espBankSet(work->sprList[i + 11], i + 10);
} }
else { else {
espBankSet(work->sprList[i + 11], GetDigitSprAt(value, 3 - i)); espBankSet(work->sprList[i + 11], GetDigit(value, 3 - i));
} }
} }
espPosSet(work->sprList[8], 416.0f, 120.0f); espPosSet(work->sprList[8], 416.0f, 120.0f);
value = work->boardRecords[work->board].maxCoins; value = work->boardRecord[work->board].maxCoins;
for (i = 0; i < MAX_COINS_NUM_DIGITS; i++) { for (i = 0; i < MAX_COINS_NUM_DIGITS; i++) {
espPosSet(work->sprList[i + 15], 364.0f + 20.0f * i, 268.0f); espPosSet(work->sprList[i + 15], 364.0f + 20.0f * i, 268.0f);
if (value > 999) { if (value > 999) {
espBankSet(work->sprList[i + 15], i + 10); espBankSet(work->sprList[i + 15], i + 10);
} }
else { else {
espBankSet(work->sprList[i + 15], GetDigitSprAt(value, 3 - i)); espBankSet(work->sprList[i + 15], GetDigit(value, 3 - i));
} }
} }
espPosSet(work->sprList[9], 456.0f, 268.0f); espPosSet(work->sprList[9], 456.0f, 268.0f);
value = work->boardRecords[work->board].maxStars; value = work->boardRecord[work->board].maxStars;
for (i = 0; i < MAX_STARS_NUM_DIGITS; i++) { for (i = 0; i < MAX_STARS_NUM_DIGITS; i++) {
espPosSet(work->sprList[i + 19], 364.0f + 20.0f * i, 312.0f); espPosSet(work->sprList[i + 19], 364.0f + 20.0f * i, 312.0f);
if (value > 999) { if (value > 999) {
espBankSet(work->sprList[i + 19], i + 10); espBankSet(work->sprList[i + 19], i + 10);
} }
else { else {
espBankSet(work->sprList[i + 19], GetDigitSprAt(value, 3 - i)); espBankSet(work->sprList[i + 19], GetDigit(value, 3 - i));
} }
} }
espPosSet(work->sprList[10], 456.0f, 312.0f); espPosSet(work->sprList[10], 456.0f, 312.0f);
@ -607,7 +607,7 @@ static void DisplayBoardRecord(omObjData *object, s32 board)
espPosSet(work->sprList[i + 49], 92.0f + 50.0f * i, 200.0f); espPosSet(work->sprList[i + 49], 92.0f + 50.0f * i, 200.0f);
for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) { for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) {
espPosSet(work->sprList[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f); espPosSet(work->sprList[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f);
espBankSet(work->sprList[i * 3 + 23 + j], GetDigitSprAt(work->boardRecords[work->board].winCounts[i], 2 - j)); espBankSet(work->sprList[i * 3 + 23 + j], GetDigit(work->boardRecord[work->board].winCount[i], 2 - j));
} }
} }
espPosSet(work->sprList[47], 48.0f, 240.0f); espPosSet(work->sprList[47], 48.0f, 240.0f);
@ -632,37 +632,52 @@ static void DisplayBoardRecord(omObjData *object, s32 board)
} }
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
fn_1_A7F0(work->window[i + 2]); OptionWinDispOn(work->window[i + 2]);
} }
fn_1_A7B0(work->window[2], 64.0f, 96.0f); OptionWinPosSet(work->window[2], 64.0f, 96.0f);
fn_1_A71C(work->window[2], MAKE_MESSID(47, 19)); OptionWinMesSet(work->window[2], MAKE_MESSID(47, 19));
fn_1_A7B0(work->window[3], 64.0f, 140.0f); OptionWinPosSet(work->window[3], 64.0f, 140.0f);
fn_1_A71C(work->window[3], MAKE_MESSID(47, 20)); OptionWinMesSet(work->window[3], MAKE_MESSID(47, 20));
fn_1_A7B0(work->window[4], 64.0f, 248.0f); OptionWinPosSet(work->window[4], 64.0f, 248.0f);
fn_1_A71C(work->window[4], MAKE_MESSID(47, 21)); OptionWinMesSet(work->window[4], MAKE_MESSID(47, 21));
fn_1_A7B0(work->window[5], 64.0f, 292.0f); OptionWinPosSet(work->window[5], 64.0f, 292.0f);
fn_1_A71C(work->window[5], MAKE_MESSID(47, 22)); OptionWinMesSet(work->window[5], MAKE_MESSID(47, 22));
} }
#define BOARD_RECORD_SPR_IDX_TBL_SIZE 53 #define BOARD_SPR_HIDE_COUNT 53
static const s32 boardRecordSprIdxTbl[BOARD_RECORD_SPR_IDX_TBL_SIZE] = { 0, 1, 2, 3, 4, 5, 49, 50, 51, 52, 53, 54, 55, 56, 8, 9, 10, 11, 12, 13, 14, static const s32 boardSprHideTbl[BOARD_SPR_HIDE_COUNT] =
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 38, 39, 40, 35, 36, 37, 41, 42, 43, 44, 45, 46, 15, 16, 17, 18, 19, 20, 21, 22 }; {
0, 1, 2, 3, 4, 5,
49, 50, 51, 52, 53, 54, 55, 56,
8, 9, 10,
11, 12, 13, 14,
23, 24, 25,
26, 27, 28,
29, 30, 31,
32, 33, 34,
38, 39, 40,
35, 36, 37,
41, 42, 43,
44, 45, 46,
15, 16, 17, 18,
19, 20, 21, 22
};
static void HideBoardRecordSpr(omObjData *object) static void HideBoard(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
s32 i; s32 i;
for (i = 0; i < BOARD_RECORD_SPR_IDX_TBL_SIZE; i++) { for (i = 0; i < BOARD_SPR_HIDE_COUNT; i++) {
espDispOff(work->sprList[boardRecordSprIdxTbl[i]]); espDispOff(work->sprList[boardSprHideTbl[i]]);
} }
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
fn_1_A828(work->window[i + 2]); OptionWinDispOff(work->window[i + 2]);
} }
} }
static void DisplayTotalResults(omObjData *object) static void ShowTotal(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
s32 winCount; s32 winCount;
@ -673,11 +688,11 @@ static void DisplayTotalResults(omObjData *object)
for (i = 0; i < NUM_CHARACTERS; i++) { for (i = 0; i < NUM_CHARACTERS; i++) {
espPosSet(work->sprList[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4)); espPosSet(work->sprList[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4));
for (j = 0, winCount = 0; j < NUM_BOARDS; j++) { for (j = 0, winCount = 0; j < NUM_BOARDS; j++) {
winCount += work->boardRecords[j].winCounts[i]; winCount += work->boardRecord[j].winCount[i];
} }
for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) { for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) {
espPosSet(work->sprList[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4)); espPosSet(work->sprList[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4));
espBankSet(work->sprList[i * 3 + 65 + j], GetDigitSprAt(winCount, 2 - j)); espBankSet(work->sprList[i * 3 + 65 + j], GetDigit(winCount, 2 - j));
} }
} }
espDispOn(work->sprList[6]); espDispOn(work->sprList[6]);
@ -687,48 +702,59 @@ static void DisplayTotalResults(omObjData *object)
espDispOn(work->sprList[i * 3 + 65 + j]); espDispOn(work->sprList[i * 3 + 65 + j]);
} }
} }
fn_1_A7B0(work->window[2], 136.0f, 96.0f); OptionWinPosSet(work->window[2], 136.0f, 96.0f);
fn_1_A71C(work->window[2], MAKE_MESSID(47, 23)); OptionWinMesSet(work->window[2], MAKE_MESSID(47, 23));
fn_1_A7F0(work->window[2]); OptionWinDispOn(work->window[2]);
} }
#define TOTAL_RESULTS_SPR_IDX_TBL_SIZE 33 #define TOTAL_SPR_HIDE_COUNT 33
static const s32 totalResultsSprIdxTbl[TOTAL_RESULTS_SPR_IDX_TBL_SIZE] static const s32 totalSprHideTbl[TOTAL_SPR_HIDE_COUNT] =
= { 6, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88 }; {
6,
57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67,
68, 69, 70,
71, 72, 73,
74, 75, 76,
77, 78, 79,
80, 81, 82,
83, 84, 85,
86, 87, 88
};
static void HideTotalResultsSpr(omObjData *object) static void HideTotal(omObjData *object)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
s32 i; s32 i;
for (i = 0; i < TOTAL_RESULTS_SPR_IDX_TBL_SIZE; i++) { for (i = 0; i < TOTAL_SPR_HIDE_COUNT; i++) {
espDispOff(work->sprList[totalResultsSprIdxTbl[i]]); espDispOff(work->sprList[totalSprHideTbl[i]]);
} }
fn_1_A828(work->window[2]); OptionWinDispOff(work->window[2]);
} }
static const MGTable mgTbl[6] = { static const MGTable mgTbl[6] = {
{ 405, MAKE_MESSID(23, 5), DISPLAY_TYPE_TIME }, { 405, MAKE_MESSID(23, 5), DISPLAY_TYPE_TIME },
{ 407, MAKE_MESSID(23, 7), DISPLAY_TYPE_DECIMAL }, { 407, MAKE_MESSID(23, 7), DISPLAY_TYPE_SCORE },
{ 427, MAKE_MESSID(23, 27), DISPLAY_TYPE_TIME }, { 427, MAKE_MESSID(23, 27), DISPLAY_TYPE_TIME },
{ 432, MAKE_MESSID(23, 32), DISPLAY_TYPE_TIME }, { 432, MAKE_MESSID(23, 32), DISPLAY_TYPE_TIME },
{ 443, MAKE_MESSID(23, 43), DISPLAY_TYPE_TIME }, { 443, MAKE_MESSID(23, 43), DISPLAY_TYPE_TIME },
{ 456, MAKE_MESSID(23, 54), DISPLAY_TYPE_TIME }, { 456, MAKE_MESSID(23, 54), DISPLAY_TYPE_TIME },
}; };
static void ShowMGRecord(omObjData *object, s32 page) static void ShowMG(omObjData *object, s32 page)
{ {
RecordWork *work = object->data; RecordWork *work = object->data;
s32 value; s32 value;
s32 mg; s32 mg;
s32 digit; s32 timeDigit;
s32 var_r26; s32 timeCenti;
s32 var_r17; s32 scoreDigit;
s32 sp5C; s32 timeMin;
s32 sp58; s32 timeSec;
s32 mgAvail; s32 mgAvail;
BOOL digitDrawnF; BOOL dispZeroF;
s32 nameMess; s32 nameMess;
s32 i; s32 i;
s32 j; s32 j;
@ -738,99 +764,108 @@ static void ShowMGRecord(omObjData *object, s32 page)
espPosSet(work->sprList[48], 492.0f, 240.0f); espPosSet(work->sprList[48], 492.0f, 240.0f);
espDispOn(work->sprList[7]); espDispOn(work->sprList[7]);
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
digitDrawnF = FALSE; dispZeroF = FALSE;
mg = i + page * 8; mg = i + page * 8;
if (mg >= 6) { if (mg >= 6) {
break; break;
} }
mgAvail = GWMGAvailGet(mgTbl[mg].id); mgAvail = GWMGAvailGet(mgTbl[mg].id);
value = work->mgRecords[mg]; value = work->mgRecord[mg];
if (mgAvail) { if (mgAvail) {
switch (mgTbl[mg].displayType) { switch (mgTbl[mg].displayType) {
case DISPLAY_TYPE_DECIMAL: case DISPLAY_TYPE_SCORE:
for (j = 0; j < MG_DECIMAL_NUM_DIGITS; j++) { for (j = 0; j < MG_SCORE_NUM_DIGITS; j++) {
var_r17 = GetDigitSprAt(value, 7 - j); scoreDigit = GetDigit(value, 7 - j);
if (var_r17 != 0 || digitDrawnF || j >= 7) { if (scoreDigit != 0 || dispZeroF || j >= 7) {
espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
espBankSet(work->sprList[i * 8 + 89 + j], var_r17); espBankSet(work->sprList[i * 8 + 89 + j], scoreDigit);
espDispOn(work->sprList[i * 8 + 89 + j]); espDispOn(work->sprList[i * 8 + 89 + j]);
digitDrawnF = TRUE; dispZeroF = TRUE;
} }
} }
break; break;
case DISPLAY_TYPE_TIME: case DISPLAY_TYPE_TIME:
sp5C = value / 3600; timeMin = value / 3600;
sp58 = (value % 3600) / 60; timeSec = (value % 3600) / 60;
var_r26 = (value % 3600) % 60; timeCenti = (value % 3600) % 60;
if (mgTbl[mg].id == 405 || mgTbl[mg].id == 432) { if (mgTbl[mg].id == 405 || mgTbl[mg].id == 432) {
var_r26 *= 1.6916667f; timeCenti *= 1.6916667f;
} }
else { else {
var_r26 *= 1.6666666f; timeCenti *= 1.6666666f;
} }
for (j = 1; j < MG_TIME_NUM_DIGITS; j++) { for (j = 1; j < MG_TIME_NUM_DIGITS; j++) {
espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
switch (j) { switch (j) {
case 0: case 0:
digit = GetDigitSprAt(sp5C, 1); timeDigit = GetDigit(timeMin, 1);
break; break;
case 1: case 1:
digit = GetDigitSprAt(sp5C, 0); timeDigit = GetDigit(timeMin, 0);
break; break;
case 3: case 3:
digit = GetDigitSprAt(sp58, 1); timeDigit = GetDigit(timeSec, 1);
break; break;
case 4: case 4:
digit = GetDigitSprAt(sp58, 0); timeDigit = GetDigit(timeSec, 0);
break; break;
case 6: case 6:
digit = GetDigitSprAt(var_r26, 1); timeDigit = GetDigit(timeCenti, 1);
break; break;
case 7: case 7:
digit = GetDigitSprAt(var_r26, 0); timeDigit = GetDigit(timeCenti, 0);
break; break;
case 2: case 2:
digit = 11; timeDigit = 11;
break; break;
case 5: case 5:
digit = 12; timeDigit = 12;
break; break;
} }
espBankSet(work->sprList[i * 8 + 89 + j], digit); espBankSet(work->sprList[i * 8 + 89 + j], timeDigit);
espDispOn(work->sprList[i * 8 + 89 + j]); espDispOn(work->sprList[i * 8 + 89 + j]);
} }
break; break;
} }
} }
else { else {
for (j = 0; j < MG_DECIMAL_NUM_DIGITS; j++) { for (j = 0; j < MG_SCORE_NUM_DIGITS; j++) {
espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); espPosSet(work->sprList[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
espBankSet(work->sprList[i * 8 + 89 + j], 0); espBankSet(work->sprList[i * 8 + 89 + j], 0);
espDispOn(work->sprList[i * 8 + 89 + j]); espDispOn(work->sprList[i * 8 + 89 + j]);
} }
} }
fn_1_A7B0(work->window[i + 2], 60.0f, 96.0f + 40.0f * i); OptionWinPosSet(work->window[i + 2], 60.0f, 96.0f + 40.0f * i);
nameMess = mgAvail ? mgTbl[mg].mess : MAKE_MESSID(35, 0); nameMess = mgAvail ? mgTbl[mg].mess : MAKE_MESSID(35, 0);
fn_1_A71C(work->window[i + 2], nameMess); OptionWinMesSet(work->window[i + 2], nameMess);
fn_1_A7F0(work->window[i + 2]); OptionWinDispOn(work->window[i + 2]);
} }
} }
#define MG_RECORD_SPR_IDX_TBL_SIZE 65 #define MG_SPR_HIDE_COUNT 65
static const s32 mgRecordSprIdxTbl[65] = { 7, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, static const s32 mgSprHideTbl[65] =
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, {
141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152 }; 7,
89, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 109, 110, 111, 112,
113, 114, 115, 116, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128,
129, 130, 131, 132, 133, 134, 135, 136,
137, 138, 139, 140, 141, 142, 143, 144,
145, 146, 147, 148, 149, 150, 151, 152
};
static void HideMGRecordSpr(omObjData *object) static void HideMG(omObjData *object)
{ {
RecordWork *temp_r30 = object->data; RecordWork *temp_r30 = object->data;
s32 i; s32 i;
for (i = 0; i < MG_RECORD_SPR_IDX_TBL_SIZE; i++) { for (i = 0; i < MG_SPR_HIDE_COUNT; i++) {
espDispOff(temp_r30->sprList[mgRecordSprIdxTbl[i]]); espDispOff(temp_r30->sprList[mgSprHideTbl[i]]);
} }
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
fn_1_A828(temp_r30->window[i + 2]); OptionWinDispOff(temp_r30->window[i + 2]);
} }
} }

View file

@ -7,13 +7,13 @@
typedef struct { typedef struct {
/* 0x00 */ omObjData *background; /* 0x00 */ omObjData *background;
/* 0x04 */ omObjData *rumbleArrowPair; /* 0x04 */ omObjData *rumbleArrow;
/* 0x08 */ omObjData *soundArrowPair; /* 0x08 */ omObjData *soundArrow;
/* 0x0C */ omObjData *recordArrowPair; /* 0x0C */ omObjData *recordArrow;
/* 0x10 */ WindowWork *optionDescWindow; /* 0x10 */ OptionWindow *optionDescWindow;
/* 0x14 */ WindowWork *btnLegendWindow; /* 0x14 */ OptionWindow *btnLegendWindow;
/* 0x18 */ s32 selectedOption; /* 0x18 */ s32 optionIdx;
/* 0x1C */ s32 mode; /* 0x1C */ s32 execMode;
/* 0x20 */ s16 unk20; /* 0x20 */ s16 unk20;
/* 0x22 */ char unk22[6]; /* 0x22 */ char unk22[6];
/* 0x28 */ BOOL cameraDoneF; /* 0x28 */ BOOL cameraDoneF;
@ -22,162 +22,160 @@ typedef struct {
#define MODE_DISABLED 0 #define MODE_DISABLED 0
#define MODE_HANDLE_ROOM 1 #define MODE_HANDLE_ROOM 1
#define SEL_CHANGE_LEFT 0
#define SEL_CHANGE_RIGHT 1
static void ChangeSelection(omObjData *object, s32 selChange); static void MoveOption(omObjData *object, BOOL rightF);
static void HandleRoom(omObjData *object); static void ExecRoom(omObjData *object);
static omObjData *CreateBackground(void); static omObjData *CreateRoomBG(void);
static void KillBackground(omObjData *background); static void KillRoomBG(omObjData *background);
static omObjData *CreateArrowPair(void); static omObjData *CreateArrow(void);
static void KillArrowPair(omObjData *arrowPair); static void KillArrow(omObjData *arrow);
omObjData *lbl_1_bss_18; omObjData *optionRoom;
static omObjFunc modes[] = { NULL, HandleRoom }; static omObjFunc execModeTbl[] = { NULL, ExecRoom };
omObjData *fn_1_15A4(void) omObjData *OptionRoomCreate(void)
{ {
omObjData *object; omObjData *object;
RoomWork *work; RoomWork *work;
object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RoomWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->selectedOption = 0; work->optionIdx = 0;
work->unk20 = -1; work->unk20 = -1;
work->cameraDoneF = 0; work->cameraDoneF = 0;
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);
work->background = CreateBackground(); work->background = CreateRoomBG();
lbl_1_bss_38 = fn_1_4028(); optionSound = OptionSoundCreate();
lbl_1_bss_40 = fn_1_80E4(); optionRecord = OptionRecordCreate();
lbl_1_bss_30 = fn_1_3158(); optionRumble = OptionRumbleCreate();
lbl_1_bss_20 = fn_1_21F8(); optionGuide = OptionGuideCreate();
work->rumbleArrowPair = CreateArrowPair(); work->rumbleArrow = CreateArrow();
work->soundArrowPair = CreateArrowPair(); work->soundArrow = CreateArrow();
work->recordArrowPair = CreateArrowPair(); work->recordArrow = CreateArrow();
omSetRot(work->rumbleArrowPair, 0.0f, 0.0f, 0.0f); omSetRot(work->rumbleArrow, 0.0f, 0.0f, 0.0f);
omSetRot(work->soundArrowPair, 0.0f, 120.0f, 0.0f); omSetRot(work->soundArrow, 0.0f, 120.0f, 0.0f);
omSetRot(work->recordArrowPair, 0.0f, 240.0f, 0.0f); omSetRot(work->recordArrow, 0.0f, 240.0f, 0.0f);
work->optionDescWindow = fn_1_A44C(0); work->optionDescWindow = OptionWinCreate(0);
work->btnLegendWindow = fn_1_A44C(1); work->btnLegendWindow = OptionWinCreate(1);
return object; return object;
} }
void fn_1_1798(omObjData *object) void OptionRoomKill(omObjData *object)
{ {
RoomWork *work = object->data; RoomWork *work = object->data;
KillBackground(work->background); 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);
KillArrowPair(work->rumbleArrowPair); KillArrow(work->rumbleArrow);
KillArrowPair(work->soundArrowPair); KillArrow(work->soundArrow);
KillArrowPair(work->recordArrowPair); KillArrow(work->recordArrow);
fn_1_A6AC(work->optionDescWindow); OptionWinKill(work->optionDescWindow);
fn_1_A6AC(work->btnLegendWindow); OptionWinKill(work->btnLegendWindow);
HuMemDirectFree(work); HuMemDirectFree(work);
} }
static const float guidePosTbl[3] = { 45.0f, 165.0f, 285.0f }; static const float guideAngleTbl[3] = { 45.0f, 165.0f, 285.0f };
static void ChangeSelection(omObjData *object, s32 selChange) static void MoveOption(omObjData *object, BOOL rightF)
{ {
RoomWork *work = object->data; RoomWork *work = object->data;
float sp10; float x;
float spC; float y;
float sp8; float z;
float guideDestPos; float guideAngle;
work->selectedOption += (selChange == SEL_CHANGE_LEFT) ? -1 : 1; work->optionIdx += (rightF == FALSE) ? -1 : 1;
if (work->selectedOption < 0) { if (work->optionIdx < 0) {
work->selectedOption = 2; work->optionIdx = 2;
} }
else if (work->selectedOption >= 3) { else if (work->optionIdx >= 3) {
work->selectedOption = 0; work->optionIdx = 0;
} }
fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8); OptionCameraTargetGet(optionCamera, &x, &y, &z);
fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (selChange == SEL_CHANGE_LEFT ? -120.0f : 120.0f), spC, 96); OptionCameraViewSet(optionCamera, OptionCameraZoomGet(optionCamera), OptionCameraRotGet(optionCamera) + (rightF == FALSE ? -120.0f : 120.0f), y, 96);
if (work->selectedOption == 2 && selChange == SEL_CHANGE_LEFT) { if (work->optionIdx == 2 && rightF == FALSE) {
guideDestPos = guidePosTbl[2] - 360.0f; guideAngle = guideAngleTbl[2] - 360.0f;
} }
else if (work->selectedOption == 0 && selChange == SEL_CHANGE_RIGHT) { else if (work->optionIdx == 0 && rightF == TRUE) {
guideDestPos = 360.0f + guidePosTbl[0]; guideAngle = 360.0f + guideAngleTbl[0];
} }
else { else {
guideDestPos = guidePosTbl[work->selectedOption]; guideAngle = guideAngleTbl[work->optionIdx];
} }
fn_1_2508(lbl_1_bss_20, guideDestPos, 430.0f, 96); OptionGuideWalkExec(optionGuide, guideAngle, 430.0f, 96);
} }
void fn_1_1A2C(omObjData *object, s32 mode) void OptionRoomExecModeSet(omObjData *object, s32 execMode)
{ {
RoomWork *work = object->data; RoomWork *work = object->data;
work->mode = mode; work->execMode = execMode;
object->func = modes[mode]; object->func = execModeTbl[execMode];
object->unk10 = 0; object->unk10 = 0;
object->unk10 = 0; object->unk10 = 0;
} }
s32 fn_1_1A70(omObjData *object) s32 OptionRoomExecModeGet(omObjData *object)
{ {
RoomWork *work = object->data; RoomWork *work = object->data;
return work->mode; return work->execMode;
} }
static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) }; static const s32 optionDescTbl[] = { MAKE_MESSID(47, 1), MAKE_MESSID(47, 7), MAKE_MESSID(47, 4) };
static void HandleRoom(omObjData *object) static void ExecRoom(omObjData *object)
{ {
RoomWork *work = object->data; RoomWork *work = object->data;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
if (!work->cameraDoneF) { 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);
work->cameraDoneF = TRUE; work->cameraDoneF = TRUE;
} }
object->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(work->optionDescWindow); OptionWinAnimIn(work->optionDescWindow);
fn_1_A71C(work->optionDescWindow, optionDescTbl[work->selectedOption]); OptionWinMesSet(work->optionDescWindow, optionDescTbl[work->optionIdx]);
fn_1_A6EC(work->btnLegendWindow); OptionWinAnimIn(work->btnLegendWindow);
fn_1_A71C(work->btnLegendWindow, MAKE_MESSID(47, 14)); OptionWinMesSet(work->btnLegendWindow, MAKE_MESSID(47, 14));
object->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
if (fn_1_550(PAD_BUTTON_B)) { if (OptionPadCheck(PAD_BUTTON_B)) {
HuAudFXPlay(3); HuAudFXPlay(3);
object->unk10 = 7; object->unk10 = 7;
} }
else if (fn_1_584(1)) { else if (OptionPadDStkRepCheck(1)) {
ChangeSelection(object, SEL_CHANGE_LEFT); MoveOption(object, FALSE);
fn_1_A704(work->optionDescWindow); OptionWinAnimOut(work->optionDescWindow);
fn_1_A704(work->btnLegendWindow); OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(0); HuAudFXPlay(0);
object->unk10 = 1; object->unk10 = 1;
} }
else if (fn_1_584(2)) { else if (OptionPadDStkRepCheck(2)) {
ChangeSelection(object, SEL_CHANGE_RIGHT); MoveOption(object, TRUE);
fn_1_A704(work->optionDescWindow); OptionWinAnimOut(work->optionDescWindow);
fn_1_A704(work->btnLegendWindow); OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(0); HuAudFXPlay(0);
object->unk10 = 1; object->unk10 = 1;
} }
else if (fn_1_550(PAD_BUTTON_A)) { else if (OptionPadCheck(PAD_BUTTON_A)) {
fn_1_A704(work->optionDescWindow); OptionWinAnimOut(work->optionDescWindow);
fn_1_A704(work->btnLegendWindow); OptionWinAnimOut(work->btnLegendWindow);
HuAudFXPlay(2); HuAudFXPlay(2);
object->unk10 = 3; object->unk10 = 3;
} }
@ -185,77 +183,77 @@ static void HandleRoom(omObjData *object)
break; break;
case 3: case 3:
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
switch (work->selectedOption) { switch (work->optionIdx) {
case 0: case 0:
fn_1_3290(lbl_1_bss_30, 1); OptionRumbleExecModeSet(optionRumble, 1);
object->unk10 = 4; object->unk10 = 4;
break; break;
case 1: case 1:
fn_1_4388(lbl_1_bss_38, 1); OptionSoundExecModeSet(optionSound, 1);
object->unk10 = 5; object->unk10 = 5;
break; break;
case 2: case 2:
fn_1_82B0(lbl_1_bss_40, 1); OptionRecordExecModeSet(optionRecord, 1);
object->unk10 = 6; object->unk10 = 6;
break; break;
} }
} }
break; break;
case 4: case 4:
if (fn_1_39D4(lbl_1_bss_30) == 0) { if (OptionRumbleExecModeGet(optionRumble) == 0) {
object->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 5: case 5:
if (fn_1_43CC(lbl_1_bss_38) == 0) { if (OptionSoundExecModeGet(optionSound) == 0) {
object->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 6: case 6:
if (fn_1_82F4(lbl_1_bss_40) == 0) { if (OptionRecordExecModeGet(optionRecord) == 0) {
object->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 7: case 7:
fn_1_A704(work->optionDescWindow); OptionWinAnimOut(work->optionDescWindow);
fn_1_A704(work->btnLegendWindow); OptionWinAnimOut(work->btnLegendWindow);
object->unk10 = 8; object->unk10 = 8;
/* fallthrough */ /* fallthrough */
case 8: case 8:
if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) { if (work->optionDescWindow->state == 0 && work->btnLegendWindow->state == 0) {
fn_1_1A2C(object, MODE_DISABLED); OptionRoomExecModeSet(object, MODE_DISABLED);
} }
break; break;
} }
} }
static omObjData *CreateBackground(void) static omObjData *CreateRoomBG(void)
{ {
omObjData *background; omObjData *object;
background = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
background->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0));
Hu3DModelLayerSet(background->model[0], 0); Hu3DModelLayerSet(object->model[0], 0);
Hu3DModelShadowMapSet(background->model[0]); Hu3DModelShadowMapSet(object->model[0]);
return background; return object;
} }
static void KillBackground(omObjData *background) static void KillRoomBG(omObjData *object)
{ {
Hu3DModelKill(background->model[0]); Hu3DModelKill(object->model[0]);
} }
static omObjData *CreateArrowPair(void) static omObjData *CreateArrow(void)
{ {
omObjData *arrowPair; omObjData *arrow;
arrowPair = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); arrow = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
Hu3DModelLayerSet(arrowPair->model[0], 0); Hu3DModelLayerSet(arrow->model[0], 0);
arrowPair->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); arrow->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6));
return arrowPair; return arrow;
} }
static void KillArrowPair(omObjData *arrow) static void KillArrow(omObjData *arrow)
{ {
Hu3DModelKill(arrow->model[0]); Hu3DModelKill(arrow->model[0]);
} }

View file

@ -12,9 +12,9 @@ typedef struct {
/* 0x04 */ omObjData *pad; /* 0x04 */ omObjData *pad;
/* 0x08 */ omObjData *padFilter; /* 0x08 */ omObjData *padFilter;
/* 0x0C */ omObjData *hand; /* 0x0C */ omObjData *hand;
/* 0x10 */ omObjData *highlightOn; /* 0x10 */ omObjData *hiliteOn;
/* 0x14 */ WindowWork *window[2]; /* 0x14 */ OptionWindow *window[2];
/* 0x20 */ s32 mode; /* 0x20 */ s32 execMode;
/* 0x20 */ BOOL rumbleF; /* 0x20 */ BOOL rumbleF;
/* 0x24 */ BOOL cameraDoneF; /* 0x24 */ BOOL cameraDoneF;
/* 0x28 */ s32 changeTimer; /* 0x28 */ s32 changeTimer;
@ -23,7 +23,7 @@ typedef struct {
#define MODE_DISABLED 0 #define MODE_DISABLED 0
#define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this #define MODE_HANDLE_RUMBLE 1 // TODO room.c should have access to this
static void HandleRumble(omObjData *object); static void ExecRumble(omObjData *object);
static omObjData *CreateHand(void); static omObjData *CreateHand(void);
static void KillHand(omObjData *hand); static void KillHand(omObjData *hand);
static omObjData *CreateSystem(void); static omObjData *CreateSystem(void);
@ -33,20 +33,20 @@ static omObjData *CreatePad(void);
static void KillPad(omObjData *pad); static void KillPad(omObjData *pad);
static void ShakePad(omObjData *pad, BOOL on); static void ShakePad(omObjData *pad, BOOL on);
static omObjData *CreatePadFilter(void); static omObjData *CreatePadFilter(void);
static void KillPadFilter(omObjData *padFilter); static void KillPadFilter(omObjData *object);
static omObjData *CreateHighlightOn(void); static omObjData *CreateHiliteOn(void);
static void KillHighlightOn(omObjData *highlightOn); static void KillHiliteOn(omObjData *object);
omObjData *lbl_1_bss_30; omObjData *optionRumble;
static omObjFunc modes[] = { NULL, HandleRumble }; static omObjFunc execModeTbl[] = { NULL, ExecRumble };
omObjData *fn_1_3158(void) omObjData *OptionRumbleCreate(void)
{ {
omObjData *object; omObjData *object;
RumbleWork *work; RumbleWork *work;
object = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RumbleWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->rumbleF = GWGameStat.rumble; work->rumbleF = GWGameStat.rumble;
@ -55,60 +55,60 @@ omObjData *fn_1_3158(void)
work->pad = CreatePad(); work->pad = CreatePad();
ShakePad(work->pad, work->rumbleF); ShakePad(work->pad, work->rumbleF);
work->padFilter = CreatePadFilter(); work->padFilter = CreatePadFilter();
work->highlightOn = CreateHighlightOn(); work->hiliteOn = CreateHiliteOn();
work->hand = CreateHand(); work->hand = CreateHand();
fn_1_3290(object, MODE_DISABLED); OptionRumbleExecModeSet(object, MODE_DISABLED);
return object; return object;
} }
void fn_1_322C(omObjData *object) void OptionRumbleKill(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
KillHand(work->hand); KillHand(work->hand);
KillSystem(work->system); KillSystem(work->system);
KillPad(work->pad); KillPad(work->pad);
KillHighlightOn(work->highlightOn); KillHiliteOn(work->hiliteOn);
KillPadFilter(work->padFilter); KillPadFilter(work->padFilter);
HuMemDirectFree(work); HuMemDirectFree(work);
} }
// SetMode
void fn_1_3290(omObjData *object, s32 mode) void OptionRumbleExecModeSet(omObjData *object, s32 execMode)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
work->mode = mode; work->execMode = execMode;
object->func = modes[mode]; object->func = execModeTbl[execMode];
object->unk10 = 0; object->unk10 = 0;
object->unk10 = 0; object->unk10 = 0;
} }
// GetMode
s32 fn_1_39D4(omObjData *object) s32 OptionRumbleExecModeGet(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
return work->mode; return work->execMode;
} }
static void HandleRumble(omObjData *object) static void ExecRumble(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
s32 i; s32 i;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
work->window[0] = fn_1_A44C(0); work->window[0] = OptionWinCreate(0);
work->window[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(object); OptionRumbleMotionShowStart(object);
Hu3DModelLayerSet(work->padFilter->model[0], 1); Hu3DModelLayerSet(work->padFilter->model[0], 1);
work->cameraDoneF = FALSE; work->cameraDoneF = FALSE;
object->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 (!work->cameraDoneF) { if (!work->cameraDoneF) {
@ -116,31 +116,31 @@ static void HandleRumble(omObjData *object)
work->cameraDoneF = TRUE; work->cameraDoneF = TRUE;
Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]); Hu3DModelHookSet(work->system->model[0], "target", work->hand->model[0]);
} }
fn_1_A6EC(work->window[1]); OptionWinAnimIn(work->window[1]);
fn_1_A71C(work->window[1], MAKE_MESSID(47, 15)); OptionWinMesSet(work->window[1], MAKE_MESSID(47, 15));
fn_1_A6EC(work->window[0]); OptionWinAnimIn(work->window[0]);
if (work->rumbleF) { if (work->rumbleF) {
fn_1_A71C(work->window[0], MAKE_MESSID(47, 2)); OptionWinMesSet(work->window[0], MAKE_MESSID(47, 2));
} }
else { else {
fn_1_A71C(work->window[0], MAKE_MESSID(47, 3)); OptionWinMesSet(work->window[0], MAKE_MESSID(47, 3));
} }
object->unk10 = 2; object->unk10 = 2;
/* fallthrough */ /* fallthrough */
case 2: case 2:
if (work->window[0]->state == 0 && work->window[1]->state == 0) { if (work->window[0]->state == 0 && work->window[1]->state == 0) {
if (fn_1_550(PAD_BUTTON_B)) { if (OptionPadCheck(PAD_BUTTON_B)) {
HuAudFXPlay(3); HuAudFXPlay(3);
object->unk10 = 4; object->unk10 = 4;
} }
else if (fn_1_584(8) && !work->rumbleF) { else if (OptionPadDStkRepCheck(8) && !work->rumbleF) {
StartSystemMotion(work->system, 1, TRUE); StartSystemMotion(work->system, 1, TRUE);
work->rumbleF = TRUE; work->rumbleF = TRUE;
work->changeTimer = 0; work->changeTimer = 0;
GWRumbleSet(1); GWRumbleSet(1);
object->unk10 = 3; object->unk10 = 3;
} }
else if (fn_1_584(4) && work->rumbleF) { else if (OptionPadDStkRepCheck(4) && work->rumbleF) {
StartSystemMotion(work->system, 0, TRUE); StartSystemMotion(work->system, 0, TRUE);
work->rumbleF = FALSE; work->rumbleF = FALSE;
work->changeTimer = 0; work->changeTimer = 0;
@ -155,31 +155,31 @@ static void HandleRumble(omObjData *object)
ShakePad(work->pad, work->rumbleF); ShakePad(work->pad, work->rumbleF);
if (work->rumbleF) { if (work->rumbleF) {
HuPadRumbleSet(0, 60, 10, 5); HuPadRumbleSet(0, 60, 10, 5);
Hu3DMotionTimeSet(work->highlightOn->model[0], 0.0f); Hu3DMotionTimeSet(work->hiliteOn->model[0], 0.0f);
Hu3DModelAttrReset(work->highlightOn->model[0], 1); Hu3DModelAttrReset(work->hiliteOn->model[0], 1);
} }
else { else {
Hu3DModelAttrSet(work->highlightOn->model[0], 1); Hu3DModelAttrSet(work->hiliteOn->model[0], 1);
} }
object->unk10 = 1; object->unk10 = 1;
} }
break; break;
case 4: case 4:
fn_1_A704(work->window[1]); OptionWinAnimOut(work->window[1]);
fn_1_A704(work->window[0]); OptionWinAnimOut(work->window[0]);
Hu3DModelAttrSet(work->hand->model[0], 1); Hu3DModelAttrSet(work->hand->model[0], 1);
fn_1_3E1C(object); OptionRumbleMotionHideStart(object);
object->unk10 = 5; object->unk10 = 5;
/* fallthrough */ /* fallthrough */
case 5: case 5:
if (work->window[1]->state == 0 && work->window[0]->state == 0 && !fn_1_3ED0(lbl_1_bss_30)) { if (work->window[1]->state == 0 && work->window[0]->state == 0 && !OptionRumbleMotionCheck(optionRumble)) {
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
fn_1_A6AC(work->window[i]); OptionWinKill(work->window[i]);
} }
Hu3DModelHookReset(work->system->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(object, MODE_DISABLED); OptionRumbleExecModeSet(object, MODE_DISABLED);
} }
break; break;
} }
@ -189,7 +189,7 @@ static omObjData *CreateHand(void)
{ {
omObjData *hand; omObjData *hand;
hand = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); hand = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15)); hand->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15));
Hu3DModelLayerSet(hand->model[0], 3); Hu3DModelLayerSet(hand->model[0], 3);
omSetRot(hand, 0.0f, 180.0f, 0.0f); omSetRot(hand, 0.0f, 180.0f, 0.0f);
@ -210,7 +210,7 @@ static omObjData *CreateSystem(void)
{ {
omObjData *system; omObjData *system;
system = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); system = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); system->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2));
Hu3DModelAttrSet(system->model[0], 0x40000002); Hu3DModelAttrSet(system->model[0], 0x40000002);
if (GWRumbleGet()) { if (GWRumbleGet()) {
@ -261,7 +261,7 @@ static omObjData *CreatePad(void)
{ {
omObjData *pad; omObjData *pad;
pad = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); pad = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); pad->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9));
Hu3DModelAttrSet(pad->model[0], 0x40000001); Hu3DModelAttrSet(pad->model[0], 0x40000001);
return pad; return pad;
@ -292,7 +292,7 @@ static omObjData *CreatePadFilter(void)
{ {
omObjData *object; omObjData *object;
object = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10));
Hu3DModelAttrSet(object->model[0], 0x40000002); Hu3DModelAttrSet(object->model[0], 0x40000002);
Hu3DModelLayerSet(object->model[0], 2); Hu3DModelLayerSet(object->model[0], 2);
@ -300,16 +300,16 @@ static omObjData *CreatePadFilter(void)
return object; return object;
} }
static void KillPadFilter(omObjData *padFilter) static void KillPadFilter(omObjData *object)
{ {
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(padFilter->model[i]); Hu3DModelKill(object->model[i]);
} }
} }
// ZoomIn
void fn_1_3D54(omObjData *object) void OptionRumbleMotionShowStart(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
s16 model = work->padFilter->model[0]; s16 model = work->padFilter->model[0];
@ -321,8 +321,8 @@ void fn_1_3D54(omObjData *object)
Hu3DModelLayerSet(work->padFilter->model[0], 2); Hu3DModelLayerSet(work->padFilter->model[0], 2);
HuAudFXPlay(0x83D); HuAudFXPlay(0x83D);
} }
// ZoomOut
void fn_1_3E1C(omObjData *object) void OptionRumbleMotionHideStart(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
s16 model = work->padFilter->model[0]; s16 model = work->padFilter->model[0];
@ -333,8 +333,8 @@ void fn_1_3E1C(omObjData *object)
Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001); Hu3DModelAttrReset(work->padFilter->model[0], 0x40000001);
HuAudFXPlay(0x83E); HuAudFXPlay(0x83E);
} }
// GetPadFilterMotionDone
BOOL fn_1_3ED0(omObjData *object) BOOL OptionRumbleMotionCheck(omObjData *object)
{ {
RumbleWork *work = object->data; RumbleWork *work = object->data;
s16 padFilterModel = work->padFilter->model[0]; s16 padFilterModel = work->padFilter->model[0];
@ -342,26 +342,26 @@ BOOL fn_1_3ED0(omObjData *object)
return !Hu3DMotionEndCheck(padFilterModel); return !Hu3DMotionEndCheck(padFilterModel);
} }
static omObjData *CreateHighlightOn(void) static omObjData *CreateHiliteOn(void)
{ {
omObjData *highlightOn; omObjData *object;
highlightOn = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); object = omAddObjEx(optionObjMan, 1003, 1, 0, 1, NULL);
highlightOn->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11));
if (GWRumbleGet()) { if (GWRumbleGet()) {
Hu3DModelAttrReset(highlightOn->model[0], 1); Hu3DModelAttrReset(object->model[0], 1);
} }
else { else {
Hu3DModelAttrSet(highlightOn->model[0], 1); Hu3DModelAttrSet(object->model[0], 1);
} }
return highlightOn; return object;
} }
static void KillHighlightOn(omObjData *highlightOn) static void KillHiliteOn(omObjData *object)
{ {
s32 i; s32 i;
for (i = 0; i < 1; i++) { for (i = 0; i < 1; i++) {
Hu3DModelKill(highlightOn->model[i]); Hu3DModelKill(object->model[i]);
} }
} }

View file

@ -15,149 +15,147 @@
#include "rel_sqrt_consts.h" #include "rel_sqrt_consts.h"
typedef struct { typedef struct {
/* 0x00 */ s16 spr; /* 0x00 */ s16 id;
/* 0x02 */ char unk02[2]; /* 0x04 */ float tplvl;
/* 0x04 */ float opacity; /* 0x08 */ float speed;
/* 0x08 */ float opacityChange; } FaderWork; // Size 0xC
} LRButtonWork; // Size 0xC
static void HandleLRBtn(void); static void FadeSprite(void);
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2); static void fn_1_354(s16 arg0, s32 arg1, s32 arg2);
static void fn_1_468(void); static void FadeModel(void);
static void HandleScene(omObjData *arg0); static void SceneMain(omObjData *arg0);
static void KillScene(void); static void KillScene(void);
Process *lbl_1_bss_8; Process *optionObjMan;
static omObjData *scene; static omObjData *scene;
static s32 rumbleF; static s32 rumbleF;
void ModuleProlog(void) void ModuleProlog(void)
{ {
lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); optionObjMan = omInitObjMan(0x40, 0x2000);
omGameSysInit(lbl_1_bss_8); omGameSysInit(optionObjMan);
HuWinInit(1); HuWinInit(1);
rumbleF = GWGameStat.rumble; rumbleF = GWGameStat.rumble;
scene = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, HandleScene); scene = omAddObjEx(optionObjMan, 1000, 0, 0, 0, SceneMain);
scene->unk10 = 0; scene->unk10 = 0;
lbl_1_bss_28 = fn_1_2E04(); optionState = OptionStateCreate();
} }
void fn_1_160(s16 sprite, BOOL hiddenF, s32 fadeInTime) void OptionFadeSprite(s16 sprite, BOOL inF, s32 duration)
{ {
LRButtonWork *work; FaderWork *work;
Process *process; Process *process;
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->spr = sprite; work->id = sprite;
work->opacityChange = 1.0f / fadeInTime; work->speed = 1.0f / duration;
if (hiddenF) { if (inF) {
work->opacityChange = work->opacityChange; work->speed = work->speed;
work->opacity = 0.0f; work->tplvl = 0.0f;
} else {
work->speed = -work->speed;
work->tplvl = 1.0f;
} }
else { espDispOn(work->id);
work->opacityChange = -work->opacityChange; espTPLvlSet(work->id, work->tplvl);
work->opacity = 1.0f; process = HuPrcChildCreate(FadeSprite, 0x3000, 0x1500, 0, HuPrcCurrentGet());
}
espDispOn(work->spr);
espTPLvlSet(work->spr, work->opacity);
process = HuPrcChildCreate(HandleLRBtn, 0x3000, 0x1500, 0, HuPrcCurrentGet());
process->user_data = work; process->user_data = work;
} }
static void HandleLRBtn(void) static void FadeSprite(void)
{ {
LRButtonWork *work = HuPrcCurrentGet()->user_data; FaderWork *work = HuPrcCurrentGet()->user_data;
while (TRUE) { while (TRUE) {
work->opacity += work->opacityChange; work->tplvl += work->speed;
if (work->opacity > 1.0f) { if (work->tplvl > 1.0f) {
work->opacity = 1.0f; work->tplvl = 1.0f;
break; break;
} }
if (work->opacity < 0.0f) { if (work->tplvl < 0.0f) {
work->opacity = 0.0f; work->tplvl = 0.0f;
break; break;
} }
espTPLvlSet(work->spr, work->opacity); espTPLvlSet(work->id, work->tplvl);
HuPrcVSleep(); HuPrcVSleep();
} }
espTPLvlSet(work->spr, work->opacity); espTPLvlSet(work->id, work->tplvl);
if (work->opacity <= 0.0f) { if (work->tplvl <= 0.0f) {
espDispOff(work->spr); espDispOff(work->id);
} }
HuMemDirectFree(work); HuMemDirectFree(work);
HuPrcEnd(); HuPrcEnd();
} }
static void fn_1_354(s16 sprite, s32 arg1, s32 arg2) void OptionFadeModel(s16 model, BOOL inF, s32 duration)
{ {
LRButtonWork *work; FaderWork *work;
Process *process; Process *process;
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(LRButtonWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->spr = sprite; work->id = model;
work->opacityChange = 1.0f / arg2; work->speed = 1.0f / duration;
if (arg1 != 0) { if (inF) {
work->opacityChange = work->opacityChange; work->speed = work->speed;
work->opacity = 0.0f; work->tplvl = 0.0f;
} }
else { else {
work->opacityChange = -work->opacityChange; work->speed = -work->speed;
work->opacity = 1.0f; work->tplvl = 1.0f;
} }
Hu3DModelAttrReset(work->spr, 1); Hu3DModelAttrReset(work->id, 1);
Hu3DModelTPLvlSet(work->spr, work->opacity); Hu3DModelTPLvlSet(work->id, work->tplvl);
process = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); process = HuPrcChildCreate(FadeModel, 0x3000, 0x1500, 0, HuPrcCurrentGet());
process->user_data = work; process->user_data = work;
} }
static void fn_1_468(void) static void FadeModel(void)
{ {
LRButtonWork *work = HuPrcCurrentGet()->user_data; FaderWork *work = HuPrcCurrentGet()->user_data;
while (TRUE) { while (TRUE) {
work->opacity += work->opacityChange; work->tplvl += work->speed;
if (work->opacity > 1.0f) { if (work->tplvl > 1.0f) {
work->opacity = 1.0f; work->tplvl = 1.0f;
break; break;
} }
if (work->opacity < 0.0f) { if (work->tplvl < 0.0f) {
work->opacity = 0.0f; work->tplvl = 0.0f;
break; break;
} }
Hu3DModelTPLvlSet(work->spr, work->opacity); Hu3DModelTPLvlSet(work->id, work->tplvl);
HuPrcVSleep(); HuPrcVSleep();
} }
Hu3DModelTPLvlSet(work->spr, work->opacity); Hu3DModelTPLvlSet(work->id, work->tplvl);
if (work->opacity <= 0.0f) { if (work->tplvl <= 0.0f) {
Hu3DModelAttrSet(work->spr, 1); Hu3DModelAttrSet(work->id, 1);
} }
HuMemDirectFree(work); HuMemDirectFree(work);
HuPrcEnd(); HuPrcEnd();
} }
BOOL fn_1_550(u16 btn) BOOL OptionPadCheck(u16 btn)
{ {
u32 temp_r31 = HuPadBtnDown[0] & btn; u32 temp_r31 = HuPadBtnDown[0] & btn;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
BOOL fn_1_584(u16 arg0) BOOL OptionPadDStkRepCheck(u16 dir)
{ {
u32 temp_r31 = HuPadDStkRep[0] & arg0; u32 temp_r31 = HuPadDStkRep[0] & dir;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
BOOL fn_1_5B8(u16 arg0) BOOL OptionPadDStkCheck(u16 dir)
{ {
u32 temp_r31 = HuPadDStk[0] & arg0; u32 temp_r31 = HuPadDStk[0] & dir;
return (temp_r31 != 0); return (temp_r31 != 0);
} }
static void HandleScene(omObjData *object) static void SceneMain(omObjData *object)
{ {
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
@ -176,7 +174,7 @@ static void HandleScene(omObjData *object)
/* fallthrough */ /* fallthrough */
case 3: case 3:
if (WipeStatGet() == 0) { if (WipeStatGet() == 0) {
fn_1_2F4C(lbl_1_bss_28); OptionStateKill(optionState);
if (rumbleF != GWGameStat.rumble) { if (rumbleF != GWGameStat.rumble) {
omSysExitReq = 0; omSysExitReq = 0;
KillScene(); KillScene();
@ -189,7 +187,7 @@ static void HandleScene(omObjData *object)
static void KillScene(void) static void KillScene(void)
{ {
s16 temp_r31; s16 sprite;
if (SLSaveFlagGet() == 0) { if (SLSaveFlagGet() == 0) {
return; return;
@ -199,9 +197,9 @@ static void KillScene(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,7 +7,7 @@
#include "dolphin.h" #include "dolphin.h"
typedef struct { typedef struct {
/* 0x00 */ WindowWork *window; /* 0x00 */ OptionWindow *window;
/* 0x04 */ s32 quitTimer; /* 0x04 */ s32 quitTimer;
/* 0x08 */ s16 light; /* 0x08 */ s16 light;
} StateWork; // Size 0xC } StateWork; // Size 0xC
@ -18,9 +18,9 @@ typedef struct {
GXColor color; GXColor color;
} UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 } UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3
static void HandleState(omObjData *object); static void ExecState(omObjData *object);
omObjData *lbl_1_bss_28; omObjData *optionState;
static UnkLightDataStruct lightTbl = { static UnkLightDataStruct lightTbl = {
{ 0.0f, 300.0f, 0.0f }, { 0.0f, 300.0f, 0.0f },
@ -34,18 +34,18 @@ static Vec shadowPosTbl[3] = {
{ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f },
}; };
omObjData *fn_1_2E04(void) omObjData *OptionStateCreate(void)
{ {
omObjData *object; omObjData *object;
StateWork *work; StateWork *work;
LightData *lightData; LightData *lightData;
object = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, HandleState); object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
lbl_1_bss_10 = fn_1_7F8(); optionCamera = OptionCameraCreate();
lbl_1_bss_18 = fn_1_15A4(); optionRoom = OptionRoomCreate();
work->window = fn_1_A44C(0); work->window = OptionWinCreate(0);
Hu3DLighInit(); Hu3DLighInit();
work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color); work->light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color);
Hu3DGLightInfinitytSet(work->light); Hu3DGLightInfinitytSet(work->light);
@ -56,17 +56,17 @@ omObjData *fn_1_2E04(void)
return object; return object;
} }
void fn_1_2F4C(omObjData *object) void OptionStateKill(omObjData *object)
{ {
StateWork *work = object->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(work->window); OptionWinKill(work->window);
HuMemDirectFree(work); HuMemDirectFree(work);
} }
static void HandleState(omObjData *object) static void ExecState(omObjData *object)
{ {
StateWork *work = object->data; StateWork *work = object->data;
@ -82,32 +82,32 @@ static void HandleState(omObjData *object)
if (WipeStatGet() != 0 || work->window->state != 0) { if (WipeStatGet() != 0 || work->window->state != 0) {
break; break;
} }
fn_1_1A2C(lbl_1_bss_18, 1); OptionRoomExecModeSet(optionRoom, 1);
object->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;
} }
object->unk10 = 4; object->unk10 = 4;
/* fallthrough */ /* fallthrough */
case 4: case 4:
fn_1_A6EC(work->window); OptionWinAnimIn(work->window);
fn_1_A71C(work->window, MAKE_MESSID(47, 167)); // Would you like to leave? OptionWinMesSet(work->window, MAKE_MESSID(47, 167)); // Would you like to leave?
object->unk10 = 5; object->unk10 = 5;
/* fallthrough */ /* fallthrough */
case 5: case 5:
if (work->window->state != 0) { if (work->window->state != 0) {
break; break;
} }
fn_1_A880(work->window, 1); OptionWinChoiceSet(work->window, 1);
object->unk10 = 6; object->unk10 = 6;
/* fallthrough */ /* fallthrough */
case 6: case 6:
if (work->window->state != 0) { if (work->window->state != 0) {
break; break;
} }
fn_1_A704(work->window); OptionWinAnimOut(work->window);
if (work->window->choice == 0) { if (work->window->choice == 0) {
work->quitTimer = 0; work->quitTimer = 0;
object->unk10 = 7; object->unk10 = 7;

View file

@ -5,18 +5,18 @@
#include "game/process.h" #include "game/process.h"
#include "game/sprite.h" #include "game/sprite.h"
static void HandleWindow(void); static void ExecWindow(void);
WindowWork *fn_1_A44C(s32 id) OptionWindow *OptionWinCreate(s32 id)
{ {
WindowWork *work; OptionWindow *work;
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WindowWork), MEMORY_DEFAULT_NUM); work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(OptionWindow), MEMORY_DEFAULT_NUM);
work->messToBeSet = 0; work->messToBeSet = 0;
work->messWaitSignal = 0; work->messWaitSignal = 0;
work->choiceSignal = 0; work->choiceSignal = 0;
work->state = 0; work->state = 0;
work->process = HuPrcChildCreate(HandleWindow, 0x2000, 0x2000, 0, lbl_1_bss_8); work->process = HuPrcChildCreate(ExecWindow, 0x2000, 0x2000, 0, optionObjMan);
work->process->user_data = work; work->process->user_data = work;
work->id = id; work->id = id;
switch (work->id) { switch (work->id) {
@ -45,33 +45,33 @@ WindowWork *fn_1_A44C(s32 id)
break; break;
} }
HuWinDrawNoSet(work->window, 0x3F); HuWinDrawNoSet(work->window, 0x3F);
fn_1_A828(work); OptionWinDispOff(work);
HuSprExecLayerSet(0x3F, 2); HuSprExecLayerSet(0x3F, 2);
return work; return work;
} }
void fn_1_A6AC(WindowWork *work) void OptionWinKill(OptionWindow *work)
{ {
HuWinExCleanup(work->window); HuWinExCleanup(work->window);
HuPrcKill(work->process); HuPrcKill(work->process);
HuMemDirectFree(work); HuMemDirectFree(work);
} }
void fn_1_A6EC(WindowWork *work) void OptionWinAnimIn(OptionWindow *work)
{ {
if (!work->visible) { if (!work->visible) {
work->state = 1; work->state = 1;
} }
} }
void fn_1_A704(WindowWork *work) void OptionWinAnimOut(OptionWindow *work)
{ {
if (work->visible) { if (work->visible) {
work->state = 2; work->state = 2;
} }
} }
void fn_1_A71C(WindowWork *work, s32 mess) void OptionWinMesSet(OptionWindow *work, s32 mess)
{ {
if (work->state == 0) { if (work->state == 0) {
HuWinMesSet(work->window, mess); HuWinMesSet(work->window, mess);
@ -81,32 +81,29 @@ void fn_1_A71C(WindowWork *work, s32 mess)
} }
} }
static void fn_1_A770(WindowWork *work, s32 mess, s16 index) void OptionWinInsertMesSet(OptionWindow *work, s32 mess, s16 index)
{ {
HuWinInsertMesSet(work->window, mess, index); HuWinInsertMesSet(work->window, mess, index);
} }
// SetWindowPosition void OptionWinPosSet(OptionWindow *work, float x, float y)
void fn_1_A7B0(WindowWork *work, float x, float y)
{ {
HuWinPosSet(work->window, x, y); HuWinPosSet(work->window, x, y);
} }
// DisplayWindow void OptionWinDispOn(OptionWindow *work)
void fn_1_A7F0(WindowWork *work)
{ {
HuWinDispOn(work->window); HuWinDispOn(work->window);
work->visible = TRUE; work->visible = TRUE;
} }
// HideWindow void OptionWinDispOff(OptionWindow *work)
void fn_1_A828(WindowWork *work)
{ {
HuWinDispOff(work->window); HuWinDispOff(work->window);
work->visible = FALSE; work->visible = FALSE;
} }
static void fn_1_A860(WindowWork *work) void OptionWinMesWait(OptionWindow *work)
{ {
if (work->state == 0) { if (work->state == 0) {
work->state = 3; work->state = 3;
@ -114,7 +111,7 @@ static void fn_1_A860(WindowWork *work)
work->messWaitSignal = TRUE; work->messWaitSignal = TRUE;
} }
void fn_1_A880(WindowWork *work, s32 choice) void OptionWinChoiceSet(OptionWindow *work, s32 choice)
{ {
if (work->state == 0) { if (work->state == 0) {
work->state = 4; work->state = 4;
@ -123,19 +120,19 @@ void fn_1_A880(WindowWork *work, s32 choice)
work->choice = choice; work->choice = choice;
} }
static void HandleWindow(void) static void ExecWindow(void)
{ {
WindowWork *work = HuPrcCurrentGet()->user_data; OptionWindow *work = HuPrcCurrentGet()->user_data;
while (TRUE) { while (TRUE) {
switch (work->state) { switch (work->state) {
case 1: case 1:
fn_1_A7F0(work); OptionWinDispOn(work);
HuWinExAnimIn(work->window); HuWinExAnimIn(work->window);
break; break;
case 2: case 2:
HuWinExAnimOut(work->window); HuWinExAnimOut(work->window);
fn_1_A828(work); OptionWinDispOff(work);
break; break;
case 3: case 3:
HuWinMesWait(work->window); HuWinMesWait(work->window);