Merge pull request #381 from dbalatoni13/main

New function in m444dll.h, types in m439 symbols file, present dll cleanups
This commit is contained in:
Liam Coleman 2024-08-04 11:51:34 -05:00 committed by GitHub
commit 5da66370b2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 1863 additions and 1690 deletions

View file

@ -173,89 +173,89 @@ lbl_1_data_EA8 = .data:0x00000EA8; // type:object size:0x9C
lbl_1_data_F44 = .data:0x00000F44; // type:object size:0x9C lbl_1_data_F44 = .data:0x00000F44; // type:object size:0x9C
lbl_1_data_FE0 = .data:0x00000FE0; // type:object size:0x34 lbl_1_data_FE0 = .data:0x00000FE0; // type:object size:0x34
lbl_1_data_1014 = .data:0x00001014; // type:object size:0x60 lbl_1_data_1014 = .data:0x00001014; // type:object size:0x60
lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18 lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18 data:2byte
lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30 lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30 data:float
lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204 lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204 data:float
lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204 lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204 data:float
lbl_1_data_14C4 = .data:0x000014C4; // type:object size:0x204 lbl_1_data_14C4 = .data:0x000014C4; // type:object size:0x204 data:float
lbl_1_data_16C8 = .data:0x000016C8; // type:object size:0xC lbl_1_data_16C8 = .data:0x000016C8; // type:object size:0xC
lbl_1_data_16D4 = .data:0x000016D4; // type:object size:0x4 lbl_1_data_16D4 = .data:0x000016D4; // type:object size:0x4 data:4byte
lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4 lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4 data:float
lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4 lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4 data:float
lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4 lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4 data:float
lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120 lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120 data:float
lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120 lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120 data:float
lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120 lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120 data:float
lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0 lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0 data:float
lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0 lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0 data:float
lbl_1_data_2194 = .data:0x00002194; // type:object size:0xF0 lbl_1_data_2194 = .data:0x00002194; // type:object size:0xF0 data:float
lbl_1_data_2284 = .data:0x00002284; // type:object size:0x24 lbl_1_data_2284 = .data:0x00002284; // type:object size:0x24
lbl_1_data_22A8 = .data:0x000022A8; // type:object size:0xC lbl_1_data_22A8 = .data:0x000022A8; // type:object size:0xC data:4byte
lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174 lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174 data:float
lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174 lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174 data:float
lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174 lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174 data:float
lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144 lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144 data:float
lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144 lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144 data:float
lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144 lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144 data:float
lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4 lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4 data:float
lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4 lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4 data:float
lbl_1_data_2E24 = .data:0x00002E24; // type:object size:0x1A4 lbl_1_data_2E24 = .data:0x00002E24; // type:object size:0x1A4 data:float
lbl_1_data_2FC8 = .data:0x00002FC8; // type:object size:0x24 lbl_1_data_2FC8 = .data:0x00002FC8; // type:object size:0x24
lbl_1_data_2FEC = .data:0x00002FEC; // type:object size:0xC lbl_1_data_2FEC = .data:0x00002FEC; // type:object size:0xC data:4byte
lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294 lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294 data:float
lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294 lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294 data:float
lbl_1_data_3520 = .data:0x00003520; // type:object size:0x294 lbl_1_data_3520 = .data:0x00003520; // type:object size:0x294 data:float
lbl_1_data_37B4 = .data:0x000037B4; // type:object size:0xC lbl_1_data_37B4 = .data:0x000037B4; // type:object size:0xC
lbl_1_data_37C0 = .data:0x000037C0; // type:object size:0x4 lbl_1_data_37C0 = .data:0x000037C0; // type:object size:0x4 data:4byte
lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198 lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198 data:float
lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198 lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198 data:float
lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198 lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198 data:float
lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198 lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198 data:float
lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198 lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198 data:float
lbl_1_data_3FBC = .data:0x00003FBC; // type:object size:0x198 lbl_1_data_3FBC = .data:0x00003FBC; // type:object size:0x198 data:float
lbl_1_data_4154 = .data:0x00004154; // type:object size:0x18 lbl_1_data_4154 = .data:0x00004154; // type:object size:0x18
lbl_1_data_416C = .data:0x0000416C; // type:object size:0x8 lbl_1_data_416C = .data:0x0000416C; // type:object size:0x8 data:4byte
lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210 lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210 data:float
lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210 lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210 data:float
lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210 lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210 data:float
lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210 lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210 data:float
lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210 lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210 data:float
lbl_1_data_4BC4 = .data:0x00004BC4; // type:object size:0x210 lbl_1_data_4BC4 = .data:0x00004BC4; // type:object size:0x210 data:float
lbl_1_data_4DD4 = .data:0x00004DD4; // type:object size:0x18 lbl_1_data_4DD4 = .data:0x00004DD4; // type:object size:0x18
lbl_1_data_4DEC = .data:0x00004DEC; // type:object size:0x8 lbl_1_data_4DEC = .data:0x00004DEC; // type:object size:0x8 data:4byte
lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4 lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4 data:float
lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4 lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4 data:float
lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4 lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4 data:float
lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4 lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4 data:float
lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4 lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4 data:float
lbl_1_data_5718 = .data:0x00005718; // type:object size:0x1D4 lbl_1_data_5718 = .data:0x00005718; // type:object size:0x1D4 data:float
lbl_1_data_58EC = .data:0x000058EC; // type:object size:0x18 lbl_1_data_58EC = .data:0x000058EC; // type:object size:0x18
lbl_1_data_5904 = .data:0x00005904; // type:object size:0x8 lbl_1_data_5904 = .data:0x00005904; // type:object size:0x8 data:4byte
lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C data:float
lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C data:float
lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C data:float
lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168 lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168 data:float
lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168 lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168 data:float
lbl_1_data_6080 = .data:0x00006080; // type:object size:0x168 lbl_1_data_6080 = .data:0x00006080; // type:object size:0x168 data:float
lbl_1_data_61E8 = .data:0x000061E8; // type:object size:0x18 lbl_1_data_61E8 = .data:0x000061E8; // type:object size:0x18
lbl_1_data_6200 = .data:0x00006200; // type:object size:0x8 lbl_1_data_6200 = .data:0x00006200; // type:object size:0x8 data:4byte
lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174 lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174 data:float
lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174 lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174 data:float
lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174 lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174 data:float
lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C data:float
lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C data:float
lbl_1_data_691C = .data:0x0000691C; // type:object size:0x15C lbl_1_data_691C = .data:0x0000691C; // type:object size:0x15C data:float
lbl_1_data_6A78 = .data:0x00006A78; // type:object size:0x18 lbl_1_data_6A78 = .data:0x00006A78; // type:object size:0x18
lbl_1_data_6A90 = .data:0x00006A90; // type:object size:0x8 lbl_1_data_6A90 = .data:0x00006A90; // type:object size:0x8 data:4byte
lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C data:float
lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C data:float
lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C data:float
lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174 lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174 data:float
lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174 lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174 data:float
lbl_1_data_7224 = .data:0x00007224; // type:object size:0x174 lbl_1_data_7224 = .data:0x00007224; // type:object size:0x174 data:float
lbl_1_data_7398 = .data:0x00007398; // type:object size:0x18 lbl_1_data_7398 = .data:0x00007398; // type:object size:0x18
lbl_1_data_73B0 = .data:0x000073B0; // type:object size:0x8 lbl_1_data_73B0 = .data:0x000073B0; // type:object size:0x8 data:4byte
lbl_1_data_73B8 = .data:0x000073B8; // type:object size:0x14 lbl_1_data_73B8 = .data:0x000073B8; // type:object size:0x14 data:4byte
lbl_1_data_73CC = .data:0x000073CC; // type:object size:0x28 lbl_1_data_73CC = .data:0x000073CC; // type:object size:0x28
lbl_1_data_73F4 = .data:0x000073F4; // type:object size:0x28 lbl_1_data_73F4 = .data:0x000073F4; // type:object size:0x28
lbl_1_data_741C = .data:0x0000741C; // type:object size:0x70 data:float lbl_1_data_741C = .data:0x0000741C; // type:object size:0x70 data:float

View file

@ -1,75 +1,75 @@
_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
ObjectSetup = .text:0x000000A0; // type:function size:0xA4 ObjectSetup = .text:0x000000A0; // type:function size:0xA4
fn_1_144 = .text:0x00000144; // type:function size:0x110 PresentFadeSprite = .text:0x00000144; // type:function size:0x110
fn_1_254 = .text:0x00000254; // type:function size:0xE0 FadeSprite = .text:0x00000254; // type:function size:0xE0 scope:local
fn_1_334 = .text:0x00000334; // type:function size:0x128 FadeSpriteWithMultiplier = .text:0x00000334; // type:function size:0x128
fn_1_45C = .text:0x0000045C; // type:function size:0xF4 FadeModel = .text:0x0000045C; // type:function size:0xF4 scope:local
fn_1_550 = .text:0x00000550; // type:function size:0x34 PresentPadCheck = .text:0x00000550; // type:function size:0x34
fn_1_584 = .text:0x00000584; // type:function size:0x34 PresentPadDStkRepCheck = .text:0x00000584; // type:function size:0x34
fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 PresentPadDStkCheck = .text:0x000005B8; // type:function size:0x34
fn_1_5EC = .text:0x000005EC; // type:function size:0xC8 SceneMain = .text:0x000005EC; // type:function size:0xC8 scope:local
fn_1_6B4 = .text:0x000006B4; // type:function size:0x23C PresentCameraCreate = .text:0x000006B4; // type:function size:0x23C
fn_1_8F0 = .text:0x000008F0; // type:function size:0x30 PresentCameraKill = .text:0x000008F0; // type:function size:0x30
fn_1_920 = .text:0x00000920; // type:function size:0x84 PresentCameraTargetSet = .text:0x00000920; // type:function size:0x84
fn_1_9A4 = .text:0x000009A4; // type:function size:0x84 PresentCameraFocusSet = .text:0x000009A4; // type:function size:0x84
fn_1_A28 = .text:0x00000A28; // type:function size:0x84 PresentCameraViewSet = .text:0x00000A28; // type:function size:0x84
fn_1_AAC = .text:0x00000AAC; // type:function size:0x30 PresentCameraZoomGet = .text:0x00000AAC; // type:function size:0x30
fn_1_ADC = .text:0x00000ADC; // type:function size:0x30 PresentCameraRotGet = .text:0x00000ADC; // type:function size:0x30
fn_1_B0C = .text:0x00000B0C; // type:function size:0x30 PresentCameraPosGet = .text:0x00000B0C; // type:function size:0x30
fn_1_B3C = .text:0x00000B3C; // type:function size:0x30 PresentCameraTargetGet = .text:0x00000B3C; // type:function size:0x30
fn_1_B6C = .text:0x00000B6C; // type:function size:0x8C PresentCameraDoneCheck = .text:0x00000B6C; // type:function size:0x8C
fn_1_BF8 = .text:0x00000BF8; // type:function size:0x28 ExecCameraObj = .text:0x00000BF8; // type:function size:0x28 scope:local
fn_1_C20 = .text:0x00000C20; // type:function size:0x578 ExecCamera = .text:0x00000C20; // type:function size:0x578 scope:local
fn_1_1198 = .text:0x00001198; // type:function size:0x200 CameraExecDebug = .text:0x00001198; // type:function size:0x200 scope:local
fn_1_1398 = .text:0x00001398; // type:function size:0xC0 CameraPrintDebug = .text:0x00001398; // type:function size:0xC0 scope:local
fn_1_1458 = .text:0x00001458; // type:function size:0x32C PresentCreate = .text:0x00001458; // type:function size:0x32C
fn_1_1784 = .text:0x00001784; // type:function size:0x88 PresentKill = .text:0x00001784; // type:function size:0x88
fn_1_180C = .text:0x0000180C; // type:function size:0x44 PresentExecModeSet = .text:0x0000180C; // type:function size:0x44
fn_1_1850 = .text:0x00001850; // type:function size:0x1C PresentExecModeGet = .text:0x00001850; // type:function size:0x1C
fn_1_186C = .text:0x0000186C; // type:function size:0xBC PresentSelectedIDSet = .text:0x0000186C; // type:function size:0xBC
fn_1_1928 = .text:0x00001928; // type:function size:0x680 ExecSelectRoom = .text:0x00001928; // type:function size:0x680 scope:local
fn_1_1FA8 = .text:0x00001FA8; // type:function size:0x140 ChangeRoom = .text:0x00001FA8; // type:function size:0x140 scope:local
fn_1_20E8 = .text:0x000020E8; // type:function size:0x5A4 ExecSelectPresent = .text:0x000020E8; // type:function size:0x5A4 scope:local
fn_1_268C = .text:0x0000268C; // type:function size:0x7C GetCursorPos = .text:0x0000268C; // type:function size:0x7C scope:local
fn_1_2708 = .text:0x00002708; // type:function size:0x6C SetCameraRot = .text:0x00002708; // type:function size:0x6C scope:local
fn_1_2774 = .text:0x00002774; // type:function size:0x17C RotateCamera = .text:0x00002774; // type:function size:0x17C scope:local
fn_1_28F0 = .text:0x000028F0; // type:function size:0x34 CameraRotationDoneCheck = .text:0x000028F0; // type:function size:0x34 scope:local
fn_1_2924 = .text:0x00002924; // type:function size:0x260 ShowHidePresents = .text:0x00002924; // type:function size:0x260 scope:local
fn_1_2B84 = .text:0x00002B84; // type:function size:0x48 PresentUnlocked = .text:0x00002B84; // type:function size:0x48 scope:local
fn_1_2BCC = .text:0x00002BCC; // type:function size:0x90 UnlockedPresents = .text:0x00002BCC; // type:function size:0x90 scope:local
fn_1_2C5C = .text:0x00002C5C; // type:function size:0x738 MoveCursor = .text:0x00002C5C; // type:function size:0x738 scope:local
fn_1_3394 = .text:0x00003394; // type:function size:0x18 TotalPresentsInRoom = .text:0x00003394; // type:function size:0x18 scope:local
fn_1_33AC = .text:0x000033AC; // type:function size:0x590 ExecPresentGet = .text:0x000033AC; // type:function size:0x590 scope:local
fn_1_393C = .text:0x0000393C; // type:function size:0x6C fn_1_393C = .text:0x0000393C; // type:function size:0x6C scope:local
fn_1_39A8 = .text:0x000039A8; // type:function size:0x170 PresentStateCreate = .text:0x000039A8; // type:function size:0x170
fn_1_3B18 = .text:0x00003B18; // type:function size:0x74 PresentStateKill = .text:0x00003B18; // type:function size:0x74
fn_1_3B8C = .text:0x00003B8C; // type:function size:0x22C ExecPresentView = .text:0x00003B8C; // type:function size:0x22C scope:local
fn_1_3DB8 = .text:0x00003DB8; // type:function size:0xEC ExecPresentGet = .text:0x00003DB8; // type:function size:0xEC scope:local
fn_1_3EA4 = .text:0x00003EA4; // type:function size:0x19C PresentWinCreate = .text:0x00003EA4; // type:function size:0x19C
fn_1_4040 = .text:0x00004040; // type:function size:0x40 PresentWinKill = .text:0x00004040; // type:function size:0x40
fn_1_4080 = .text:0x00004080; // type:function size:0x18 PresentWinAnimIn = .text:0x00004080; // type:function size:0x18
fn_1_4098 = .text:0x00004098; // type:function size:0x18 PresentWinAnimOut = .text:0x00004098; // type:function size:0x18
fn_1_40B0 = .text:0x000040B0; // type:function size:0x54 PresentWinMesSet = .text:0x000040B0; // type:function size:0x54
fn_1_4104 = .text:0x00004104; // type:function size:0x40 PresentWinInsertMesSet = .text:0x00004104; // type:function size:0x40
fn_1_4144 = .text:0x00004144; // type:function size:0x40 PresentWinPosSet = .text:0x00004144; // type:function size:0x40
fn_1_4184 = .text:0x00004184; // type:function size:0xC PresentWinDispOn = .text:0x00004184; // type:function size:0xC
fn_1_4190 = .text:0x00004190; // type:function size:0xC PresentWinDispOff = .text:0x00004190; // type:function size:0xC
fn_1_419C = .text:0x0000419C; // type:function size:0x20 PresentWinMesWait = .text:0x0000419C; // type:function size:0x20
fn_1_41BC = .text:0x000041BC; // type:function size:0x24 PresentWinChoiceSet = .text:0x000041BC; // type:function size:0x24
fn_1_41E0 = .text:0x000041E0; // type:function size:0x114 ExecWindow = .text:0x000041E0; // type:function size:0x114 scope:local
fn_1_42F4 = .text:0x000042F4; // type:function size:0x240 PresentGuideCreate = .text:0x000042F4; // type:function size:0x240
fn_1_4534 = .text:0x00004534; // type:function size:0x8C PresentGuideKill = .text:0x00004534; // type:function size:0x8C
fn_1_45C0 = .text:0x000045C0; // type:function size:0x44 PresentGuideExecModeSet = .text:0x000045C0; // type:function size:0x44
fn_1_4604 = .text:0x00004604; // type:function size:0x1C PresentGuideExecModeGet = .text:0x00004604; // type:function size:0x1C
fn_1_4620 = .text:0x00004620; // type:function size:0x260 ExecGuideEnter = .text:0x00004620; // type:function size:0x260 scope:local
fn_1_4880 = .text:0x00004880; // type:function size:0x184 ExecGuideLeave = .text:0x00004880; // type:function size:0x184 scope:local
fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 UpdateGuide = .text:0x00004A04; // type:function size:0x2E8 scope:local
fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 LerpAngle = .text:0x00004CEC; // type:function size:0x104 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:0x4 data:float __fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double
__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float __fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float
lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:float lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:float
@ -95,14 +95,14 @@ lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:f
lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double
lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float
lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x218 scope:local presentMdlTbl = .rodata:0x000000A0; // type:object size:0x218 scope:local
lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 scope:local roomTbl = .rodata:0x000002B8; // type:object size:0x708 scope:local
lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 scope:local data:float lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 scope:local data:float
lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 scope:local data:float
lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 scope:local data:float lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 scope:local data:float
lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 scope:local roomIdxTbl = .rodata:0x000009D8; // type:object size:0x20 scope:local
lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 scope:local roomMessTbl = .rodata:0x000009F8; // type:object size:0x28 scope:local
lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 scope:local data:float lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 scope:local data:float
lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 scope:local data:float lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 scope:local data:float
lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 scope:local data:float lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 scope:local data:float
@ -119,7 +119,7 @@ lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 scope:local data:
lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 scope:local data:double lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 scope:local data:double
lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 scope:local data:double lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 scope:local data:double
lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 scope:local data:float lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 scope:local data:float
lbl_1_rodata_A74 = .rodata:0x00000A74; // type:object size:0x28 scope:local roomPresentOffsetTbl = .rodata:0x00000A74; // type:object size:0x28 scope:local
lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 scope:local data:float lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 scope:local data:float lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 scope:local data:float lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 scope:local data:float
@ -128,11 +128,11 @@ lbl_1_rodata_AAC = .rodata:0x00000AAC; // type:object size:0x4 scope:local data:
lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 scope:local data:float lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 scope:local data:double lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 scope:local data:double
lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 scope:local data:double lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 scope:local data:double
lbl_1_rodata_AC8 = .rodata:0x00000AC8; // type:object size:0x28 scope:local totalPresentCntTbl = .rodata:0x00000AC8; // type:object size:0x28 scope:local
lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 scope:local presentItemIdxTbl = .rodata:0x00000AF0; // type:object size:0x28 scope:local
lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 scope:local lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 scope:local
lbl_1_rodata_B40 = .rodata:0x00000B40; // type:object size:0x28 scope:local constellationIdxTbl = .rodata:0x00000B40; // type:object size:0x28 scope:local
lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 scope:local roofIdxTbl = .rodata:0x00000B68; // type:object size:0x28 scope:local
lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 scope:local data:float lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 scope:local data:float
lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 scope:local data:float lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 scope:local data:float
lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 scope:local data:float lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 scope:local data:float
@ -148,7 +148,7 @@ lbl_1_rodata_BC4 = .rodata:0x00000BC4; // type:object size:0x4 scope:local data:
lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 scope:local data:float lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 scope:local data:float
lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 scope:local data:float lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 scope:local data:float
lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x4 scope:local data:float lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_BD8 = .rodata:0x00000BD8; // type:object size:0xC scope:local guideMotTbl = .rodata:0x00000BD8; // type:object size:0xC scope:local
lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 scope:local data:float lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 scope:local data:float
lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 scope:local data:float lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 scope:local data:float
lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 scope:local data:float lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 scope:local data:float
@ -172,21 +172,22 @@ lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 scope:local data:
lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B scope:local data:string lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B scope:local data:string
lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B scope:local data:string lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B scope:local data:string
lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A scope:local data:string lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A scope:local data:string
lbl_1_data_50 = .data:0x00000050; // type:object size:0x1C data:4byte lightTbl = .data:0x00000050; // type:object size:0x1C scope:local data:4byte
lbl_1_data_6C = .data:0x0000006C; // type:object size:0x10 data:4byte execModeTbl = .data:0x0000006C; // type:object size:0x10 scope:local data:4byte
lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 scope:local data:string lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 scope:local data:string
lbl_1_data_84 = .data:0x00000084; // type:object size:0x20 roomIdxTbl2 = .data:0x00000084; // type:object size:0x20
jumptable_1_data_A4 = .data:0x000000A4; // type:object size:0x2C scope:local jumptable_1_data_A4 = .data:0x000000A4; // type:object size:0x2C scope:local
jumptable_1_data_D0 = .data:0x000000D0; // type:object size:0x1C scope:local jumptable_1_data_D0 = .data:0x000000D0; // type:object size:0x1C scope:local
lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x24 data:float shadowPosTbl = .data:0x000000F0; // type:object size:0x24 scope:local data:float
lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A scope:local data:string lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A scope:local data:string
lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E scope:local data:string lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E scope:local data:string
jumptable_1_data_16C = .data:0x0000016C; // type:object size:0x34 scope:local jumptable_1_data_16C = .data:0x0000016C; // type:object size:0x34 scope:local
lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0xC data:4byte execModeTbl = .data:0x000001A0; // type:object size:0xC scope:local data:4byte
lbl_1_bss_14 = .bss:0x00000000; // type:object size:0x4 data:4byte scene = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte presentObjMan = .bss:0x00000004; // type:object size:0x4 data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte presentCamera = .bss:0x00000008; // type:object size:0x4 data:4byte
lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte
lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte present = .bss:0x00000010; // type:object size:0x4 data:4byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte
lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte presentState = .bss:0x00000018; // type:object size:0x4 data:4byte
presentGuide = .bss:0x00000020; // type:object size:0x4 data:4byte

View file

@ -41,6 +41,7 @@ void fn_1_C214(void);
void fn_1_D1E0(s16 model); void fn_1_D1E0(s16 model);
void fn_1_D558(DataListModel *model_list); void fn_1_D558(DataListModel *model_list);
void fn_1_D588(DataListModel *model_list);
void fn_1_D818(DataListSprite *sprite_list); void fn_1_D818(DataListSprite *sprite_list);
void fn_1_D950(void); void fn_1_D950(void);
void fn_1_D9C8(void); void fn_1_D9C8(void);

View file

@ -9,7 +9,7 @@ typedef struct {
/* 0x00 */ Process *process; /* 0x00 */ Process *process;
/* 0x04 */ s16 window; /* 0x04 */ s16 window;
/* 0x08 */ s32 id; /* 0x08 */ s32 id;
/* 0x0C */ s32 visible; /* 0x0C */ BOOL visible;
/* 0x10 */ BOOL messWaitSignal; /* 0x10 */ BOOL messWaitSignal;
/* 0x14 */ BOOL choiceSignal; /* 0x14 */ BOOL choiceSignal;
/* 0x18 */ u32 messToBeSet; /* 0x18 */ u32 messToBeSet;

View file

@ -2,165 +2,59 @@
#define PRESENT_H #define PRESENT_H
#include "game/object.h" #include "game/object.h"
// #include "REL/option.h" // this causes problems because of the extern bsses
typedef struct UnkWindowDataStruct { typedef struct PresentWindow {
/* 0x00 */ Process *process; /* 0x00 */ Process *process;
/* 0x04 */ s16 window; /* 0x04 */ s16 window;
/* 0x06 */ char unk06[2]; /* 0x08 */ s32 id;
/* 0x08 */ s32 unk08; /* 0x0C */ BOOL visible;
/* 0x0C */ s32 unk0C; /* 0x10 */ s32 messWaitSignal;
/* 0x10 */ s32 unk10; /* 0x14 */ s32 choiceSignal;
/* 0x14 */ s32 unk14; /* 0x18 */ u32 messToBeSet;
/* 0x18 */ u32 unk18;
/* 0x1C */ s32 choice; /* 0x1C */ s32 choice;
/* 0x20 */ s32 unk_20; /* 0x20 */ s32 state;
} UnkWindowDataStruct; // this already exists in option.h } PresentWindow; /* size 0x24 */ // this already exists in option.h
typedef struct UnkPresentStruct { #define PRESENT_GUIDE_MODE_NONE 0
/* 0x00 */ UnkWindowDataStruct *unk_00; #define PRESENT_GUIDE_MODE_ENTER 1
/* 0x04 */ s32 unk_04; #define PRESENT_GUIDE_MODE_LEAVE 2
} UnkPresentStruct;
typedef struct UnkPresentStruct2 { #define PRESENT_MODE_NONE 0
/* 0x00 */ s32 unk_00; #define PRESENT_MODE_SELECT_ROOM 1
/* 0x04 */ s32 unk_04; #define PRESENT_MODE_SELECT_PRESENT 2
/* 0x08 */ s32 unk_08; #define PRESENT_MODE_GET 3
/* 0x0C */ s32 unk_0C;
/* 0x10 */ omObjData *unk_10[134];
/* 0x228 */ UnkWindowDataStruct *unk_228;
/* 0x22C */ UnkWindowDataStruct *unk_22C;
/* 0x230 */ s16 sprite;
/* 0x234 */ s32 unk_234;
/* 0x238 */ s32 unk_238;
/* 0x23C */ float unk_23C;
/* 0x240 */ float unk_240;
/* 0x244 */ float unk_244;
/* 0x248 */ float unk_248;
/* 0x24C */ float unk_24C;
/* 0x250 */ float unk_250;
/* 0x254 */ float unk_254;
/* 0x258 */ float unk_258;
/* 0x25C */ float unk_25C;
/* 0x260 */ float unk_260;
/* 0x264 */ float unk_264;
/* 0x268 */ float unk_268;
/* 0x26C */ float unk_26C;
/* 0x270 */ s32 unk_270[60];
} UnkPresentStruct2;
typedef struct UnkPresentStruct3 { extern omObjData *present;
/* 0x00 */ Vec unk_00; extern omObjData *presentCamera;
/* 0x0C */ Vec unk_0C; extern Process *presentObjMan;
/* 0x18 */ GXColor unk_18;
} UnkPresentStruct3;
typedef struct UnkPresentStruct4 { void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration);
/* 0x00 */ Vec unk_00; void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration);
/* 0x0C */ Vec unk_0C; BOOL PresentPadCheck(u16 btn);
/* 0x18 */ Vec unk_18; BOOL PresentPadDStkRepCheck(u16 dir);
} UnkPresentStruct4; BOOL PresentPadDStkCheck(u16 dir);
omObjData *PresentCameraCreate();
typedef struct UnkPresentStruct5 { void PresentCameraKill(omObjData *object);
/* 0x00 */ s32 unk_00; void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration);
/* 0x04 */ s16 unk_04; void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration);
/* 0x08 */ float x; s32 PresentCameraDoneCheck(omObjData *object);
/* 0x0C */ float y; omObjData *PresentCreate(void);
/* 0x10 */ float z; void PresentKill(omObjData *object);
/* 0x14 */ float unk_14; void PresentExecModeSet(omObjData *object, s32 execMode);
/* 0x18 */ s32 unk18[2]; s32 PresentExecModeGet(omObjData *object);
/* 0x20 */ float unk_20; void PresentSelectedIDSet(omObjData *object, s32 id);
/* 0x24 */ float unk_24; void PresentStateKill(omObjData *object);
/* 0x28 */ float unk_28; omObjData *PresentStateCreate(void);
/* 0x2C */ float unk_2C; PresentWindow *PresentWinCreate(s32 id);
/* 0x30 */ float unk_30; void PresentWinKill(PresentWindow *work);
/* 0x34 */ float unk_34; void PresentWinAnimIn(PresentWindow *work);
/* 0x38 */ float unk_38; void PresentWinAnimOut(PresentWindow *work);
/* 0x3C */ s32 unk3C[3]; void PresentWinMesSet(PresentWindow *work, u32 mess);
/* 0x48 */ float unk_48; void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index);
/* 0x4C */ float unk_4C; void PresentWinMesWait(PresentWindow *work);
/* 0x50 */ s32 unk_50; omObjData *PresentGuideCreate(void);
/* 0x54 */ s32 unk_54; void PresentGuideKill(omObjData *object);
} UnkPresentStruct5; void PresentGuideExecModeSet(omObjData *object, s32 execMode);
s32 PresentGuideExecModeGet(omObjData *object);
typedef struct UnkPresentStruct6 {
/* 0x00 */ s16 unk_00;
/* 0x04 */ float unk_04;
/* 0x08 */ float unk_08;
} UnkPresentStruct6; // looks like a struct in option/scene.c
typedef struct UnkPresentStruct6Weird {
/* 0x00 */ s16 unk_00;
/* 0x04 */ float unk_04;
/* 0x08 */ float unk_08;
/* 0x0C */ float unk_0C;
} UnkPresentStruct6Weird; // looks like a struct in option/scene.c
typedef struct UnkPresentCameraStruct {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec target;
/* 0x18 */ Vec up;
/* 0x24 */ float unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ Vec unk_2C;
/* 0x38 */ Vec unk_38;
/* 0x44 */ float unk44;
/* 0x48 */ float unk48;
/* 0x4C */ float unk4C;
/* 0x50 */ float unk_50;
/* 0x54 */ float unk_54;
/* 0x58 */ Vec unk_58;
/* 0x64 */ Vec unk_64;
/* 0x70 */ float unk70;
/* 0x74 */ float unk74;
/* 0x78 */ float unk78;
/* 0x7C */ float unk_7C;
/* 0x80 */ float unk_80;
/* 0x84 */ float unk_84;
/* 0x88 */ float unk_88;
/* 0x8C */ float unk_8C;
/* 0x90 */ float unk_90;
/* 0x94 */ float unk_94;
/* 0x98 */ float unk_98;
} UnkPresentCameraStruct;
typedef struct UnkPresentNestedInnerStruct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk08;
/* 0x0C */ s32 unk_0C;
} UnkPresentNestedInnerStruct;
typedef struct UnkPresentNestedOuterStruct {
/* 0x00 */ s32 unk00;
/* 0x04 */ UnkPresentNestedInnerStruct unk_04[11];
} UnkPresentNestedOuterStruct;
typedef struct UnkPresentStruct7 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ float unk_04;
} UnkPresentStruct7;
extern omObjData *lbl_1_bss_10;
extern omObjData *lbl_1_bss_8;
extern Process *lbl_1_bss_4;
void fn_1_144(s16 arg0, s32 arg1, s32 arg2);
void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2);
omObjData *fn_1_6B4();
void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1);
void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1);
void fn_1_BF8(omObjData *object);
omObjData *fn_1_1458(void);
void fn_1_180C(omObjData *object, s32 arg1);
s32 fn_1_1850(omObjData *object);
omObjData *fn_1_39A8(void);
UnkWindowDataStruct *fn_1_3EA4(s32 arg0);
void fn_1_4080(UnkWindowDataStruct *windowData);
void fn_1_4098(UnkWindowDataStruct *windowData);
void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess);
omObjData *fn_1_42F4(void);
void fn_1_45C0(omObjData *arg0, s32 arg1);
s32 fn_1_4604(omObjData *object);
#endif #endif

View file

@ -17,8 +17,8 @@ typedef struct {
/* 0x2C */ Vec posPrev; /* 0x2C */ Vec posPrev;
/* 0x38 */ Vec targetPrev; /* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC]; /* 0x44 */ char unk44[0xC];
/* 0x50 */ float prevZoom; /* 0x50 */ float zoomPrev;
/* 0x54 */ float prevRot; /* 0x54 */ float rotPrev;
/* 0x58 */ Vec posTarget; /* 0x58 */ Vec posTarget;
/* 0x64 */ Vec posFocus; /* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC]; /* 0x70 */ char unk70[0xC];
@ -34,8 +34,6 @@ typedef struct {
static void ExecCameraObj(omObjData *object); static void ExecCameraObj(omObjData *object);
static void ExecCamera(omObjData *object); static void ExecCamera(omObjData *object);
static void fn_1_12E4(omObjData *object);
static void PrintDebugInfo(omObjData *object);
omObjData *optionCamera; omObjData *optionCamera;
@ -45,11 +43,8 @@ static s32 pad_04_00000018_data = -1;
omObjData *OptionCameraCreate(void) omObjData *OptionCameraCreate(void)
{ {
omObjData *object; omObjData *object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
CameraWork *work; CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
work->pos.x = 0.0f; work->pos.x = 0.0f;
work->pos.y = 0.0f; work->pos.y = 0.0f;
@ -110,33 +105,26 @@ void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32
work->zoomTarget = zoom; work->zoomTarget = zoom;
work->rotTarget = rot; work->rotTarget = rot;
work->targetPrev.y = work->target.y; work->targetPrev.y = work->target.y;
work->prevZoom = work->zoom; work->zoomPrev = work->zoom;
work->prevRot = work->rot; work->rotPrev = work->rot;
work->timeRot = 0.0f; work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration; work->rotSpeed = 1.0f / duration;
} }
// GetZoom
float OptionCameraZoomGet(omObjData *object) float OptionCameraZoomGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float zoom; float zoom = work->zoom;
zoom = work->zoom;
return zoom; return zoom;
} }
// GetRot
float OptionCameraRotGet(omObjData *object) float OptionCameraRotGet(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
float rot; float rot = work->rot;
rot = work->rot;
return rot; return rot;
} }
// Getpos
void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *temp_r31 = object->data; CameraWork *temp_r31 = object->data;
@ -146,7 +134,6 @@ void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z)
*z = temp_r31->pos.z; *z = temp_r31->pos.z;
} }
// Gettarget
void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
@ -156,7 +143,6 @@ void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z)
*z = work->target.z; *z = work->target.z;
} }
// CameraDone
s32 OptionCameraDoneCheck(omObjData *object) s32 OptionCameraDoneCheck(omObjData *object)
{ {
CameraWork *work = object->data; CameraWork *work = object->data;
@ -205,8 +191,8 @@ static void ExecCamera(omObjData *object)
if (work->timeRot < 1.0f) { if (work->timeRot < 1.0f) {
weight = sind(90.0f * work->timeRot); weight = sind(90.0f * work->timeRot);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom); work->zoom = work->zoomPrev + weight * (work->zoomTarget - work->zoomPrev);
work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot); work->rot = work->rotPrev + weight * (work->rotTarget - work->rotPrev);
if ((work->timeRot += work->rotSpeed) >= 1.0f) { if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->target.y = work->posFocus.y; work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget; work->zoom = work->zoomTarget;
@ -223,8 +209,7 @@ static void ExecCamera(omObjData *object)
work->rot += 360.0f; work->rot += 360.0f;
} }
Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.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->target.y, work->target.z);
work->target.y, work->target.z);
} }
static void CameraExecDebug(omObjData *object) static void CameraExecDebug(omObjData *object)

View file

@ -22,8 +22,8 @@ typedef struct {
/* 0x48 */ char unk48[0xC]; /* 0x48 */ char unk48[0xC];
/* 0x54 */ float time; /* 0x54 */ float time;
/* 0x58 */ float speed; /* 0x58 */ float speed;
/* 0x5C */ s32 unk5C; /* 0x5C */ s32 unk_5C;
/* 0x60 */ s32 unk60; /* 0x60 */ s32 unk_60;
} GuideWork; // Size 0x64 } GuideWork; // Size 0x64
#define MODE_DISABLED 0 #define MODE_DISABLED 0
@ -70,8 +70,8 @@ omObjData *OptionGuideCreate(void)
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[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->unk_5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC);
work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); work->unk_60 = 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);
@ -186,9 +186,7 @@ static void ExecGuide(omObjData *object)
static void UpdateGuide(omObjData *object) static void UpdateGuide(omObjData *object)
{ {
GuideWork *work = object->data; GuideWork *work = object->data;
s16 motion; s16 motion = 0;
motion = 0;
work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z); work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= work->distRemain) { if (0.001f <= work->distRemain) {
if (14.0f <= work->distRemain) { if (14.0f <= work->distRemain) {
@ -219,9 +217,8 @@ static void UpdateGuide(omObjData *object)
static float LerpAngle(float start, float end, float time) static float LerpAngle(float start, float end, float time)
{ {
float angle; float angle;
float delta;
delta = fmod(end - start, 360.0); float delta = fmod(end - start, 360.0);
if (0.0f > delta) { if (0.0f > delta) {
delta += 360.0f; delta += 360.0f;
} }

View file

@ -10,13 +10,19 @@ typedef struct {
/* 0x00 */ OptionWindow *window; /* 0x00 */ OptionWindow *window;
/* 0x04 */ s32 quitTimer; /* 0x04 */ s32 quitTimer;
/* 0x08 */ s16 light; /* 0x08 */ s16 light;
} StateWork; // Size 0xC } StateWork; /* size = 0x0C */
typedef struct { typedef struct {
Vec src; /* 0x00 */ Vec src;
Vec dest; /* 0x0C */ Vec dest;
GXColor color; /* 0x18 */ GXColor color;
} UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 } UnkLightDataStruct; /* size = 0x1C */ // TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3
typedef struct UnkShadowDataStruct {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec up;
/* 0x18 */ Vec target;
} UnkShadowDataStruct; /* size = 0x24 */
static void ExecState(omObjData *object); static void ExecState(omObjData *object);
@ -28,7 +34,7 @@ static UnkLightDataStruct lightTbl = {
{ 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF },
}; };
static Vec shadowPosTbl[3] = { static UnkShadowDataStruct shadowPosTbl = {
{ 0.0f, 3000.0f, 1.0f }, { 0.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f },
@ -36,12 +42,10 @@ static Vec shadowPosTbl[3] = {
omObjData *OptionStateCreate(void) omObjData *OptionStateCreate(void)
{ {
omObjData *object;
StateWork *work;
LightData *lightData; LightData *lightData;
object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); omObjData *object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work; object->data = work;
optionCamera = OptionCameraCreate(); optionCamera = OptionCameraCreate();
optionRoom = OptionRoomCreate(); optionRoom = OptionRoomCreate();
@ -52,7 +56,7 @@ omObjData *OptionStateCreate(void)
lightData = &Hu3DGlobalLight[work->light]; lightData = &Hu3DGlobalLight[work->light];
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f); Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]); Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target);
return object; return object;
} }

View file

@ -5,231 +5,235 @@
#include "REL/present.h" #include "REL/present.h"
void fn_1_C20(omObjData *object); typedef struct CameraWork {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec target;
/* 0x18 */ Vec up;
/* 0x24 */ float zoom;
/* 0x28 */ float rot;
/* 0x2C */ Vec posPrev;
/* 0x38 */ Vec targetPrev;
/* 0x44 */ char unk44[0xC];
/* 0x50 */ float zoomPrev;
/* 0x54 */ float rotPrev;
/* 0x58 */ Vec posTarget;
/* 0x64 */ Vec posFocus;
/* 0x70 */ char unk70[0xC];
/* 0x7C */ float zoomTarget;
/* 0x80 */ float rotTarget;
/* 0x84 */ float timeEye;
/* 0x88 */ float eyeSpeed;
/* 0x8C */ float timeTarget;
/* 0x90 */ float targetSpeed;
/* 0x94 */ float timeRot;
/* 0x98 */ float rotSpeed;
} CameraWork; /* size = 0x9C */ // same as in option/camera.c
omObjData *fn_1_6B4(void) static void ExecCameraObj(omObjData *object);
static void ExecCamera(omObjData *object);
omObjData *PresentCameraCreate(void)
{ {
omObjData *var_r30; omObjData *object = omAddObjEx(presentObjMan, 1001, 0, 0, 3, ExecCameraObj);
UnkPresentCameraStruct *var_r31; CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM);
object->data = work;
var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8); work->pos.x = 0.0f;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); work->pos.y = 0.0f;
var_r30->data = var_r31; work->pos.z = 0.0f;
var_r31->pos.x = 0.0f; work->target.x = 0.0f;
var_r31->pos.y = 0.0f; work->target.y = 0.0f;
var_r31->pos.z = 0.0f; work->target.z = 0.0f;
var_r31->target.x = 0.0f; work->up.x = 0.0f;
var_r31->target.y = 0.0f; work->up.y = 1.0f;
var_r31->target.z = 0.0f; work->up.z = 0.0f;
var_r31->up.x = 0.0f; work->zoom = 0.0f;
var_r31->up.y = 1.0f; work->rot = 0.0f;
var_r31->up.z = 0.0f; work->timeTarget = 1.0f;
work->timeEye = 1.0f;
var_r31->unk_24 = 0.0f; work->timeRot = 1.0f;
var_r31->unk_28 = 0.0f;
var_r31->unk_8C = 1.0f;
var_r31->unk_84 = 1.0f;
var_r31->unk_94 = 1.0f;
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_9A4(var_r30, 0.0f, 0.0f, -600.0f, 1); PresentCameraFocusSet(object, 0.0f, 0.0f, -600.0f, 1);
fn_1_920(var_r30, 0.0f, 220.0f, 250.0f, 1); PresentCameraTargetSet(object, 0.0f, 220.0f, 250.0f, 1);
return var_r30; return object;
} }
void fn_1_8F0(omObjData *object) void PresentCameraKill(omObjData *object)
{ {
HuMemDirectFree(object->data); HuMemDirectFree(object->data);
} }
void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
var_r31 = object->data; work->posTarget.x = x;
var_r31->unk_58.x = arg8; work->posTarget.y = y;
var_r31->unk_58.y = arg9; work->posTarget.z = z;
var_r31->unk_58.z = argA;
var_r31->unk_2C = var_r31->pos; work->posPrev = work->pos;
var_r31->unk_84 = 0.0f; work->timeEye = 0.0f;
var_r31->unk_88 = 1.0f / arg1; work->eyeSpeed = 1.0f / duration;
} }
void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
var_r31 = object->data; work->posFocus.x = x;
var_r31->unk_64.x = arg8; work->posFocus.y = y;
var_r31->unk_64.y = arg9; work->posFocus.z = z;
var_r31->unk_64.z = argA;
var_r31->unk_38 = var_r31->target; work->targetPrev = work->target;
var_r31->unk_8C = 0.0f; work->timeTarget = 0.0f;
var_r31->unk_90 = 1.0f / arg1; work->targetSpeed = 1.0f / duration;
} }
void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) void PresentCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
var_r31 = object->data; work->posFocus.y = y;
var_r31->unk_64.y = argA; work->zoomTarget = zoom;
var_r31->unk_7C = arg8; work->rotTarget = rot;
var_r31->unk_80 = arg9;
var_r31->unk_38.y = var_r31->target.y; work->targetPrev.y = work->target.y;
var_r31->unk_50 = var_r31->unk_24; work->zoomPrev = work->zoom;
var_r31->unk_54 = var_r31->unk_28; work->rotPrev = work->rot;
var_r31->unk_94 = 0.0f; work->timeRot = 0.0f;
var_r31->unk_98 = 1.0f / arg1; work->rotSpeed = 1.0f / duration;
} }
float fn_1_AAC(omObjData *object) float PresentCameraZoomGet(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
float var_f31;
var_r31 = object->data; float var_f31 = work->zoom;
var_f31 = var_r31->unk_24;
return var_f31; return var_f31;
} }
float fn_1_ADC(omObjData *object) float PresentCameraRotGet(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
float var_f31;
var_r31 = object->data; float var_f31 = work->rot;
var_f31 = var_r31->unk_28;
return var_f31; return var_f31;
} }
void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) void PresentCameraPosGet(omObjData *object, float *x, float *y, float *z)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
var_r31 = object->data; *x = work->pos.x;
*arg1 = var_r31->pos.x; *y = work->pos.y;
*arg2 = var_r31->pos.y; *z = work->pos.z;
*arg3 = var_r31->pos.z;
} }
void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) void PresentCameraTargetGet(omObjData *object, float *x, float *y, float *z)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
var_r31 = object->data; *x = work->target.x;
*arg1 = var_r31->target.x; *y = work->target.y;
*arg2 = var_r31->target.y; *z = work->target.z;
*arg3 = var_r31->target.z;
} }
s32 fn_1_B6C(omObjData *object) s32 PresentCameraDoneCheck(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
s32 var_r30;
s32 var_r29;
var_r31 = object->data; s32 var_r30 = 1;
var_r30 = 1; s32 var_r29 = 1;
var_r29 = 1;
if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) { if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) {
var_r29 = 0; var_r29 = 0;
} }
if (!var_r29 && !(var_r31->unk_84 < 1.0f)) { if (!var_r29 && !(work->timeEye < 1.0f)) {
var_r30 = 0; var_r30 = 0;
} }
return var_r30; return var_r30;
} }
void fn_1_BF8(omObjData *object) static void ExecCameraObj(omObjData *object)
{ {
fn_1_C20(object); ExecCamera(object);
} }
void fn_1_C20(omObjData *object) static void ExecCamera(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
float var_f31; float weight;
float var_f30; float dx;
float var_f29; float dz;
float var_f28;
float var_f27;
var_r31 = object->data; if (work->timeEye < 1.0f) {
if (var_r31->unk_84 < 1.0f) { weight = sind(90.0f * work->timeEye);
var_f28 = sind(90.0f * var_r31->unk_84); work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x); work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
var_r31->pos.y = var_r31->unk_2C.y + var_f28 * (var_r31->unk_58.y - var_r31->unk_2C.y); work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
var_r31->pos.z = var_r31->unk_2C.z + var_f28 * (var_r31->unk_58.z - var_r31->unk_2C.z);
if ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) { if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
var_r31->pos = var_r31->unk_58; work->pos = work->posTarget;
} }
} }
if (var_r31->unk_8C < 1.0f) { if (work->timeTarget < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_8C); weight = sind(90.0f * work->timeTarget);
var_r31->target.x = var_r31->unk_38.x + var_f28 * (var_r31->unk_64.x - var_r31->unk_38.x); work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
var_r31->target.y = var_r31->unk_38.y + var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
var_r31->target.z = var_r31->unk_38.z + var_f28 * (var_r31->unk_64.z - var_r31->unk_38.z); work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) { if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
var_r31->target = var_r31->unk_64; work->target = work->posFocus;
} }
} }
if (var_r31->unk_94 < 1.0f) { if (work->timeRot < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_94); weight = sind(90.0f * work->timeRot);
var_r31->target.y = var_r31->unk_38.y + (var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y)); work->target.y = work->targetPrev.y + (weight * (work->posFocus.y - work->targetPrev.y));
var_r31->unk_24 = var_r31->unk_50 + (var_f28 * (var_r31->unk_7C - var_r31->unk_50)); work->zoom = work->zoomPrev + (weight * (work->zoomTarget - work->zoomPrev));
var_r31->unk_28 = var_r31->unk_54 + (var_f28 * (var_r31->unk_80 - var_r31->unk_54)); work->rot = work->rotPrev + (weight * (work->rotTarget - work->rotPrev));
if ((var_r31->unk_94 += var_r31->unk_98) >= 1.0f) { if ((work->timeRot += work->rotSpeed) >= 1.0f) {
var_r31->target.y = var_r31->unk_64.y; work->target.y = work->posFocus.y;
var_r31->unk_24 = var_r31->unk_7C; work->zoom = work->zoomTarget;
var_r31->unk_28 = var_r31->unk_80; work->rot = work->rotTarget;
} }
var_r31->target.x = var_r31->unk_24 * -sind(var_r31->unk_28); work->target.x = work->zoom * -sind(work->rot);
var_r31->target.z = var_r31->unk_24 * cosd(var_r31->unk_28); work->target.z = work->zoom * cosd(work->rot);
} }
var_f31 = var_r31->target.x - var_r31->pos.x; dx = work->target.x - work->pos.x;
var_f30 = var_r31->target.z - var_r31->pos.z; dz = work->target.z - work->pos.z;
var_r31->unk_24 = sqrtf(var_f31 * var_f31 + var_f30 * var_f30); work->zoom = sqrtf(dx * dx + dz * dz);
var_r31->unk_28 = fmod(-atan2d(var_f31, var_f30), 360.0); work->rot = fmod(-atan2d(dx, dz), 360.0);
if (var_r31->unk_28 < 0.0f) { if (work->rot < 0.0f) {
var_r31->unk_28 += 360.0f; work->rot += 360.0f;
} }
Hu3DCameraPosSet(1, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z, var_r31->up.x, var_r31->up.y, var_r31->up.z, var_r31->target.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->target.y, work->target.z);
var_r31->target.y, var_r31->target.z);
} }
void fn_1_1198(omObjData *object) static void CameraExecDebug(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31;
if (HuPadBtn[0] & PAD_BUTTON_B) { if (HuPadBtn[0] & PAD_BUTTON_B) {
var_r31 = object->data; CameraWork *work = object->data;
var_r31->target.x = var_r31->target.x + (0.5f * HuPadStkX[0]);
var_r31->target.y = var_r31->target.y + (0.5f * HuPadStkY[0]); work->target.x += (0.5f * HuPadStkX[0]);
var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]); work->target.y += (0.5f * HuPadStkY[0]);
var_r31->pos.z = var_r31->pos.z - (0.5f * HuPadTrigR[0]); work->pos.z += (0.5f * HuPadTrigL[0]);
var_r31->pos.x = var_r31->pos.x + (0.5f * HuPadSubStkY[0]); work->pos.z -= (0.5f * HuPadTrigR[0]);
var_r31->pos.y = var_r31->pos.y + (0.5f * HuPadSubStkX[0]); work->pos.x += (0.5f * HuPadSubStkY[0]);
work->pos.y += (0.5f * HuPadSubStkX[0]);
} }
} }
void fn_1_1398(omObjData *object) static void CameraPrintDebug(omObjData *object)
{ {
UnkPresentCameraStruct *var_r31; CameraWork *work = object->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z);
var_r31 = object->data; print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.z);
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z); print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", var_r31->pos.x, var_r31->pos.y, var_r31->pos.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", var_r31->unk_24, var_r31->unk_28);
} }

View file

@ -6,222 +6,224 @@
#include "REL/present.h" #include "REL/present.h"
void fn_1_4620(omObjData *arg0); typedef struct GuideWork {
void fn_1_4880(omObjData *arg0); /* 0x00 */ s32 execMode;
/* 0x04 */ s16 motion;
/* 0x08 */ Vec pos;
/* 0x14 */ Vec newPos;
/* 0x20 */ Vec rot;
/* 0x2C */ Vec posDelta;
/* 0x38 */ float distRemain;
/* 0x3C */ char unk3C[0xC];
/* 0x48 */ float time;
/* 0x4C */ float speed;
/* 0x50 */ s32 unk_50;
/* 0x54 */ s32 unk_54;
} GuideWork; /* size = 0x58 */
omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; static void ExecGuideEnter(omObjData *object);
static void ExecGuideLeave(omObjData *object);
static void UpdateGuide(omObjData *object);
static float LerpAngle(float start, float end, float time);
static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B }; static omObjFunc execModeTbl[] = { NULL, ExecGuideEnter, ExecGuideLeave };
void fn_1_4A04(omObjData *object); static const s32 guideMotTbl[] = {
float fn_1_4CEC(float arg8, float arg9, float argA); DATA_MAKE_NUM(DATADIR_PRESENT, 137),
DATA_MAKE_NUM(DATADIR_PRESENT, 138),
DATA_MAKE_NUM(DATADIR_PRESENT, 139),
};
omObjData *fn_1_42F4(void) omObjData *PresentGuideCreate(void)
{ {
omObjData *var_r31;
s32 var_lr;
s32 var_r29; s32 var_r29;
UnkPresentStruct5 *var_r30;
var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL); omObjData *object = omAddObjEx(presentObjMan, 1002, 1, 3, 2, NULL);
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM); GuideWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
var_r31->data = var_r30; object->data = work;
var_r30->x = 0.0f;
var_r30->z = 0.0f; work->pos.x = 0.0f;
var_r30->y = 0.0f; work->pos.z = 0.0f;
var_r30->unk_20 = 0.0f; work->pos.y = 0.0f;
var_r30->unk_24 = 0.0f; work->rot.x = 0.0f;
var_r30->unk_28 = 0.0f; work->rot.y = 0.0f;
var_r30->unk_2C = 0.0f; work->rot.z = 0.0f;
var_r30->unk_34 = 0.0f;
var_r30->unk_30 = 0.0f; work->posDelta.x = 0.0f;
var_r31->model[0] = Hu3DModelCreate(HuDataReadNum(0x6E0088, MEMORY_DEFAULT_NUM)); work->posDelta.z = 0.0f;
Hu3DModelLayerSet(var_r31->model[0], 1); work->posDelta.y = 0.0f;
object->model[0] = Hu3DModelCreate(HuDataReadNum(DATA_MAKE_NUM(DATADIR_PRESENT, 136), MEMORY_DEFAULT_NUM));
Hu3DModelLayerSet(object->model[0], 1);
for (var_r29 = 0; var_r29 < 3; var_r29++) { for (var_r29 = 0; var_r29 < 3; var_r29++) {
var_r31->motion[var_r29] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_BD8[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); object->motion[var_r29] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA));
} }
Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[var_r30->unk_04 = 0], 0.0f, 8.0f, 0x40000001); Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = 0], 0.0f, 8.0f, 0x40000001);
var_r30->unk_50 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 10); work->unk_50 = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 10);
var_r30->unk_54 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 10); work->unk_54 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 10);
CharModelLayerSetAll(1); CharModelLayerSetAll(1);
Hu3DModelShadowSet(var_r31->model[0]); Hu3DModelShadowSet(object->model[0]);
fn_1_45C0(var_r31, 0); PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
fn_1_4A04(var_r31); UpdateGuide(object);
Hu3DModelAttrSet(var_r31->model[0], 1); Hu3DModelAttrSet(object->model[0], 1);
return var_r31; return object;
} }
void fn_1_4534(omObjData *object) void PresentGuideKill(omObjData *object)
{ {
s32 var_r31; void *work = object->data;
void *var_r29;
void *var_r30;
var_r29 = object->data; s32 i;
for (i = 0; i < 1; i++) {
for (var_r31 = 0; var_r31 < 1; var_r31++) { Hu3DModelKill(object->model[i]);
Hu3DModelKill(object->model[var_r31]);
} }
for (var_r31 = 0; var_r31 < 3; var_r31++) { for (i = 0; i < 3; i++) {
Hu3DMotionKill(object->motion[var_r31]); Hu3DMotionKill(object->motion[i]);
} }
HuMemDirectFree(var_r29); HuMemDirectFree(work);
} }
void fn_1_45C0(omObjData *object, s32 arg1) void PresentGuideExecModeSet(omObjData *object, s32 execMode)
{ {
UnkPresentStruct5 *var_r31; GuideWork *work = object->data;
var_r31 = object->data; work->execMode = execMode;
var_r31->unk_00 = arg1; object->func = execModeTbl[execMode];
object->func = lbl_1_data_1A0[arg1];
object->unk10 = 0; object->unk10 = 0;
object->unk10 = 0; object->unk10 = 0;
} }
s32 fn_1_4604(omObjData *object) s32 PresentGuideExecModeGet(omObjData *object)
{ {
s32 *var_r31; GuideWork *work = object->data;
var_r31 = object->data; return work->execMode;
return *var_r31;
} }
void fn_1_4620(omObjData *object) static void ExecGuideEnter(omObjData *object)
{ {
float var_f31; float var_f31;
omObjData *var_r30; GuideWork *work = object->data;
void *var_r29;
UnkPresentStruct5 *var_r31;
var_r31 = object->data;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
Hu3DModelAttrReset(object->model[0], 1); Hu3DModelAttrReset(object->model[0], 1);
var_r31->x = -300.0f; work->pos.x = -300.0f;
var_r31->z = -180.0f; work->pos.z = -180.0f;
var_r31->unk_48 = 0.0f; work->time = 0.0f;
var_r31->unk_4C = 0.025f; work->speed = 0.025f;
object->unk10 = 1; object->unk10 = 1;
case 1: case 1:
var_f31 = sind(90.0f * var_r31->unk_48); var_f31 = sind(90.0f * work->time);
var_f31 *= var_f31; var_f31 *= var_f31;
var_r31->unk_14 = -300.0f + (300.0f * var_f31); work->newPos.x = -300.0f + (300.0f * var_f31);
var_r31->unk_2C = var_r31->unk_14 - var_r31->x; work->posDelta.x = work->newPos.x - work->pos.x;
if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break;
}
work->pos.x = 0.0f;
work->time = 0.0f;
work->speed = 0.05f;
object->unk10 = 2;
case 2:
work->posDelta.x = 0.0f;
work->posDelta.z = 0.01f;
if ((work->time += work->speed) < 1.0f) {
break;
}
work->rot.y = 0.0f;
work->posDelta.x = 0.0f;
work->posDelta.y = 0.0f;
work->posDelta.z = 0.0f;
object->unk10 = 3;
case 3:
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
break; break;
} default:
var_r31->x = 0.0f;
var_r31->unk_48 = 0.0f;
var_r31->unk_4C = 0.05f;
object->unk10 = 2;
case 2:
var_r31->unk_2C = 0.0f;
var_r31->unk_34 = 0.01f;
if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) {
break; break;
}
var_r31->unk_24 = 0.0f;
var_r31->unk_2C = 0.0f;
var_r31->unk_30 = 0.0f;
var_r31->unk_34 = 0.0f;
object->unk10 = 3;
case 3:
fn_1_45C0(object, 0);
break;
default:
break;
} }
fn_1_4A04(object); UpdateGuide(object);
} }
void fn_1_4880(omObjData *object) static void ExecGuideLeave(omObjData *object)
{ {
float var_f31; float weight;
UnkPresentStruct5 *var_r30;
void *var_r29;
var_r30 = object->data; GuideWork *work = object->data;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
var_r30->unk_48 = 0.0f; work->time = 0.0f;
var_r30->unk_4C = 0.025f; work->speed = 0.025f;
Hu3DModelAttrReset(object->model[0], 1); Hu3DModelAttrReset(object->model[0], 1);
object->unk10 = 1; object->unk10 = 1;
case 1: case 1:
var_f31 = sind(90.0f * var_r30->unk_48); weight = sind(90.0f * work->time);
var_f31 *= var_f31; weight *= weight;
var_r30->unk_14 = -(300.0f * var_f31); work->newPos.x = -(300.0f * weight);
var_r30->unk_2C = var_r30->unk_14 - var_r30->x; work->posDelta.x = work->newPos.x - work->pos.x;
if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) { if ((work->time += work->speed) < 1.0f) {
break;
}
object->unk10 = 2;
case 2:
Hu3DModelAttrSet(object->model[0], 1);
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
break;
default:
break; break;
}
object->unk10 = 2;
case 2:
Hu3DModelAttrSet(object->model[0], 1);
fn_1_45C0(object, 0);
break;
default:
break;
} }
fn_1_4A04(object); UpdateGuide(object);
(void)object; (void)object;
} }
void fn_1_4A04(omObjData *object) static void UpdateGuide(omObjData *object)
{ {
float var_f29; GuideWork *work = object->data;
float var_f30; s16 motion = 0;
s16 var_r29;
UnkPresentStruct5 *var_r31;
var_r31 = object->data; work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
var_r29 = 0; if (0.001f <= work->distRemain) {
var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34; if (12.0f <= work->distRemain) {
var_r31->unk_38 = sqrtf(var_f30); work->posDelta.x /= work->distRemain;
if (0.001f <= var_r31->unk_38) { work->posDelta.z /= work->distRemain;
if (12.0f <= var_r31->unk_38) { work->distRemain = 12.0f;
var_r31->unk_2C = var_r31->unk_2C / var_r31->unk_38; work->posDelta.x = 12.0f * work->posDelta.x;
var_r31->unk_34 = var_r31->unk_34 / var_r31->unk_38; work->posDelta.z = 12.0f * work->posDelta.z;
var_r31->unk_38 = 12.0f;
var_r31->unk_2C = 12.0f * var_r31->unk_2C;
var_r31->unk_34 = 12.0f * var_r31->unk_34;
} }
var_r31->unk_24 = fn_1_4CEC(var_r31->unk_24, atan2d(var_r31->unk_2C, var_r31->unk_34), 0.4f); work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f);
if (8.0f <= var_r31->unk_38) { if (8.0f <= work->distRemain) {
var_r29 = 2; motion = 2;
} else { }
var_r29 = 1; else {
motion = 1;
} }
} }
var_r31->x = var_r31->x + var_r31->unk_2C; work->pos.x += work->posDelta.x;
var_r31->z = var_r31->z + var_r31->unk_34; work->pos.z += work->posDelta.z;
if (var_r31->unk_04 != var_r29) { if (work->motion != motion) {
Hu3DMotionShiftSet(object->model[0], object->motion[var_r31->unk_04 = var_r29], 0.0f, 8.0f, 0x40000001); // or 0x41000000 Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = motion], 0.0f, 8.0f, 0x40000001);
} }
omSetTra(object, var_r31->x, var_r31->y, var_r31->z); omSetTra(object, work->pos.x, work->pos.y, work->pos.z);
omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28); omSetRot(object, work->rot.x, work->rot.y, work->rot.z);
} }
float fn_1_4CEC(float arg8, float arg9, float argA) static float LerpAngle(float start, float end, float time)
{ {
float var_f30; float angle;
float var_f31;
var_f31 = fmod(arg9 - arg8, 360.0f); float delta = fmod(end - start, 360.0f);
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(arg8 + (var_f31 * argA), 360.0f); angle = fmod(start + (delta * time), 360.0f);
if (0.0f > var_f30) { if (0.0f > angle) {
var_f30 += 360.0f; angle += 360.0f;
} }
return var_f30; return angle;
} }

View file

@ -8,169 +8,179 @@
#include "REL/present.h" #include "REL/present.h"
omObjData *lbl_1_bss_18; typedef struct FaderWork {
omObjData *lbl_1_bss_14; /* 0x00 */ s16 id;
omObjData *lbl_1_bss_10; /* 0x04 */ float tplvl;
omObjData *lbl_1_bss_C; /* 0x08 */ float speed;
omObjData *lbl_1_bss_8; } FaderWork; /* size 0x0C */ // same as in option/scene.c
Process *lbl_1_bss_4;
omObjData *lbl_1_bss_0;
void fn_1_254(void); typedef struct FaderWork2 {
void fn_1_45C(void); /* 0x00 */ s16 id;
void fn_1_5EC(omObjData *object); /* 0x04 */ float tpMultiplier;
/* 0x08 */ float tplvl;
/* 0x0C */ float speed;
} FaderWork2; /* size = 0x10 */
omObjData *presentState;
omObjData *lbl_1_bss_14;
omObjData *present;
omObjData *lbl_1_bss_C;
omObjData *presentCamera;
Process *presentObjMan;
static omObjData *scene;
static void FadeSprite(void);
static void FadeModel(void);
static void SceneMain(omObjData *object);
void ObjectSetup(void) void ObjectSetup(void)
{ {
lbl_1_bss_4 = omInitObjMan(150, 8192); presentObjMan = omInitObjMan(150, 8192);
omGameSysInit(lbl_1_bss_4); omGameSysInit(presentObjMan);
HuWinInit(1); HuWinInit(1);
lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC); scene = omAddObjEx(presentObjMan, 1000, 0, 0, 0, SceneMain);
lbl_1_bss_0->unk10 = 0; scene->unk10 = 0;
lbl_1_bss_18 = fn_1_39A8(); presentState = PresentStateCreate();
} }
void fn_1_144(s16 arg0, s32 arg1, s32 arg2) void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration)
{ {
Process *var_r30; Process *process;
UnkPresentStruct6 *var_r31;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM); FaderWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0; work->id = sprite;
var_r31->unk_08 = 1.0f / arg2; work->speed = 1.0f / duration;
if (arg1) { if (inF) {
var_r31->unk_08 = var_r31->unk_08; work->speed = work->speed;
var_r31->unk_04 = 0.0f; work->tplvl = 0.0f;
} else {
var_r31->unk_08 = -var_r31->unk_08;
var_r31->unk_04 = 1.0f;
} }
espDispOn(var_r31->unk_00); else {
espTPLvlSet(var_r31->unk_00, var_r31->unk_04); work->speed = -work->speed;
var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet()); work->tplvl = 1.0f;
var_r30->user_data = var_r31; }
espDispOn(work->id);
espTPLvlSet(work->id, work->tplvl);
process = HuPrcChildCreate(FadeSprite, 100, 5376, 0, HuPrcCurrentGet());
process->user_data = work;
} }
void fn_1_254(void) static void FadeSprite(void)
{ {
UnkPresentStruct6 *var_r31; FaderWork *work = HuPrcCurrentGet()->user_data;
var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) { while (TRUE) {
var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08; work->tplvl = work->tplvl + work->speed;
if (var_r31->unk_04 > 1.0f) { if (work->tplvl > 1.0f) {
var_r31->unk_04 = 1.0f; work->tplvl = 1.0f;
break; break;
} else if (var_r31->unk_04 < 0.0f) { }
var_r31->unk_04 = 0.0f; else if (work->tplvl < 0.0f) {
work->tplvl = 0.0f;
break; break;
} else { }
espTPLvlSet(var_r31->unk_00, var_r31->unk_04); else {
espTPLvlSet(work->id, work->tplvl);
HuPrcVSleep(); HuPrcVSleep();
} }
} }
espTPLvlSet(var_r31->unk_00, var_r31->unk_04); espTPLvlSet(work->id, work->tplvl);
if (var_r31->unk_08 < 0.0f) { if (work->speed < 0.0f) {
espDispOff(var_r31->unk_00); espDispOff(work->id);
}
HuMemDirectFree(work);
HuPrcEnd();
}
void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration)
{
Process *process;
// bug: wrong struct in sizeof
FaderWork2 *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->id = model;
work->speed = 1.0f / duration;
work->tpMultiplier = tpMultiplier;
if (inF) {
work->speed = work->speed;
work->tplvl = 0.0f;
}
else {
work->speed = -work->speed;
work->tplvl = 1.0f;
}
Hu3DModelTPLvlSet(work->id, work->tplvl * work->tpMultiplier);
Hu3DModelAttrReset(work->id, 1);
process = HuPrcChildCreate(FadeModel, 100, 5376, 0, HuPrcCurrentGet());
process->user_data = work;
}
static void FadeModel(void)
{
FaderWork2 *var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->tplvl += var_r31->speed;
if (var_r31->tplvl > 1.0f) {
var_r31->tplvl = 1.0f;
break;
}
else if (var_r31->tplvl < 0.0f) {
var_r31->tplvl = 0.0f;
break;
}
else {
Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier);
HuPrcVSleep();
}
}
Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier);
if (var_r31->speed < 0.0f) {
Hu3DModelAttrSet(var_r31->id, 1);
} }
HuMemDirectFree(var_r31); HuMemDirectFree(var_r31);
HuPrcEnd(); HuPrcEnd();
} }
void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) BOOL PresentPadCheck(u16 btn)
{ {
Process *var_r30; u32 var_r31 = HuPadBtnDown[0] & btn;
UnkPresentStruct6Weird *var_r31; // TODO correct type? why are only 12 bytes allocated?
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_0C = 1.0f / arg2;
var_r31->unk_04 = arg8;
if (arg1) {
var_r31->unk_0C = var_r31->unk_0C;
var_r31->unk_08 = 0.0f;
} else {
var_r31->unk_0C = -var_r31->unk_0C;
var_r31->unk_08 = 1.0f;
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
Hu3DModelAttrReset(var_r31->unk_00, 1);
var_r30 = HuPrcChildCreate(fn_1_45C, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
}
void fn_1_45C(void)
{
UnkPresentStruct6Weird *var_r31; // TODO correct type? how is 0C possible?
var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C;
if (var_r31->unk_08 > 1.0f) {
var_r31->unk_08 = 1.0f;
break;
} else if (var_r31->unk_08 < 0.0f) {
var_r31->unk_08 = 0.0f;
break;
} else {
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
HuPrcVSleep();
}
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
if (var_r31->unk_0C < 0.0f) {
Hu3DModelAttrSet(var_r31->unk_00, 1);
}
HuMemDirectFree(var_r31);
HuPrcEnd();
}
u32 fn_1_550(u16 arg0)
{
u32 var_r31;
var_r31 = HuPadBtnDown[0] & arg0;
return var_r31 != 0; return var_r31 != 0;
} }
u32 fn_1_584(u16 arg0) BOOL PresentPadDStkRepCheck(u16 dir)
{ {
u32 var_r31; u32 var_r31 = HuPadDStkRep[0] & dir;
var_r31 = HuPadDStkRep[0] & arg0;
return var_r31 != 0; return var_r31 != 0;
} }
u32 fn_1_5B8(u16 arg0) BOOL PresentPadDStkCheck(u16 dir)
{ {
u32 var_r31; u32 var_r31 = HuPadDStk[0] & dir;
var_r31 = HuPadDStk[0] & arg0;
return var_r31 != 0; return var_r31 != 0;
} }
void fn_1_5EC(omObjData *object) static void SceneMain(omObjData *object)
{ {
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
object->unk10 = 1; object->unk10 = 1;
case 1: case 1:
if (!omSysExitReq) { if (!omSysExitReq) {
break;
}
object->unk10 = 2;
case 2:
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuAudFadeOut(1000);
object->unk10 = 3;
break;
case 3:
if (!WipeStatGet()) {
PresentStateKill(presentState);
omOvlReturnEx(1, 1);
}
break;
default:
break; break;
}
object->unk10 = 2;
case 2:
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuAudFadeOut(1000);
object->unk10 = 3;
break;
case 3:
if (!WipeStatGet()) {
fn_1_3B18(lbl_1_bss_18);
omOvlReturnEx(1, 1);
}
break;
default:
break;
} }
} }

View file

@ -7,304 +7,314 @@
#include "REL/present.h" #include "REL/present.h"
omObjData *lbl_1_bss_20; typedef struct StateWork {
/* 0x00 */ PresentWindow *window;
/* 0x04 */ s32 quitTimer;
} StateWork; /* size = 0x08 */
UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; typedef struct UnkShadowDataStruct {
/* 0x00 */ Vec pos;
/* 0x0C */ Vec up;
/* 0x18 */ Vec target;
} UnkShadowDataStruct; /* size = 0x24 */
void fn_1_3B8C(omObjData *object); omObjData *presentGuide;
void fn_1_3DB8(omObjData *object);
void fn_1_4040(UnkWindowDataStruct *arg0);
void fn_1_4190(UnkWindowDataStruct *arg0);
void fn_1_41E0(void);
void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1);
omObjData *fn_1_39A8(void) static UnkShadowDataStruct shadowPosTbl = {
{ 0.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
};
static void ExecPresentView(omObjData *object);
static void ExecPresentGet(omObjData *object);
void PresentWinDispOff(PresentWindow *work);
void PresentWinChoiceSet(PresentWindow *work, s32 choice);
static void ExecWindow(void);
omObjData *PresentStateCreate(void)
{ {
omObjData *object; omObjData *object = omAddObjEx(presentObjMan, 1000, 0, 0, 4, NULL);
UnkPresentStruct *var_r30; StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work;
object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL); work->quitTimer = 0;
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM); presentCamera = PresentCameraCreate();
object->data = var_r30; present = PresentCreate();
var_r30->unk_04 = 0; presentGuide = PresentGuideCreate();
lbl_1_bss_8 = fn_1_6B4(); work->window = PresentWinCreate(0);
lbl_1_bss_10 = fn_1_1458();
lbl_1_bss_20 = fn_1_42F4();
var_r30->unk_00 = fn_1_3EA4(0);
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f); Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&lbl_1_data_F0.unk_00, &lbl_1_data_F0.unk_0C, &lbl_1_data_F0.unk_18); Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target);
if (omovlevtno > 0) { if (omovlevtno > 0) {
OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n"); OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n");
object->func = fn_1_3DB8; object->func = ExecPresentGet;
object->unk10 = 0; object->unk10 = 0;
} else { }
else {
OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n"); OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n");
object->func = fn_1_3B8C; object->func = ExecPresentView;
object->unk10 = 0; object->unk10 = 0;
} }
return object; return object;
} }
void fn_1_3B18(omObjData *object) void PresentStateKill(omObjData *object)
{ {
UnkWindowDataStruct **var_r31; PresentWindow **var_r31 = object->data;
var_r31 = object->data; PresentCameraKill(presentCamera);
fn_1_8F0(lbl_1_bss_8); PresentKill(present);
fn_1_1784(lbl_1_bss_10); PresentGuideKill(presentGuide);
fn_1_4534(lbl_1_bss_20); PresentWinKill(*var_r31);
fn_1_4040(*var_r31);
HuMemDirectFree(var_r31); HuMemDirectFree(var_r31);
} }
void fn_1_3B8C(omObjData *object) static void ExecPresentView(omObjData *object)
{ {
UnkPresentStruct *var_r30; StateWork *work = object->data;
var_r30 = object->data;
switch (object->unk10) { switch (object->unk10) {
case 0: case 0:
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
object->unk10 = 1; object->unk10 = 1;
case 1: case 1:
if (WipeStatGet()) { if (WipeStatGet()) {
return;
}
object->unk10 = 2;
case 2:
PresentExecModeSet(present, 1);
object->unk10 = 3;
case 3:
if (PresentExecModeGet(present)) {
return;
}
object->unk10 = 4;
case 4:
PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_ENTER);
object->unk10 = 5;
case 5:
if (PresentGuideExecModeGet(presentGuide)) {
return;
}
object->unk10 = 6;
case 6:
HuAudFXPlay(66);
PresentWinAnimIn(work->window);
PresentWinMesSet(work->window, 0x320002);
object->unk10 = 7;
case 7:
if (work->window->state) {
return;
}
PresentWinChoiceSet(work->window, 1);
object->unk10 = 8;
case 8:
if (work->window->state) {
return;
}
PresentWinAnimOut(work->window);
if (!work->window->choice) {
work->quitTimer = 0;
object->unk10 = 11;
return;
}
else {
object->unk10 = 9;
return;
}
case 9:
PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_LEAVE);
object->unk10 = 10;
return; return;
} case 10:
object->unk10 = 2; if (PresentGuideExecModeGet(presentGuide)) {
case 2: return;
fn_1_180C(lbl_1_bss_10, 1); }
object->unk10 = 3; object->unk10 = 2;
case 3:
if (fn_1_1850(lbl_1_bss_10)) {
return; return;
} case 11:
object->unk10 = 4; object->unk10 = 12;
case 4: work->quitTimer = 0;
fn_1_45C0(lbl_1_bss_20, 1); case 12:
object->unk10 = 5; if (work->window->state) {
case 5: return;
if (fn_1_4604(lbl_1_bss_20)) { }
return; if (work->quitTimer++ >= 60) {
} omSysExitReq = 1;
object->unk10 = 6; object->func = NULL;
case 6: object->unk10 = 0;
HuAudFXPlay(66); }
fn_1_4080(var_r30->unk_00); default:
fn_1_40B0(var_r30->unk_00, 0x320002); break;
object->unk10 = 7; }
case 7: }
if (var_r30->unk_00->unk_20) {
return; static void ExecPresentGet(omObjData *object)
} {
fn_1_41BC(var_r30->unk_00, 1); void *sp8 = object->data;
object->unk10 = 8;
case 8: switch (object->unk10) {
if (var_r30->unk_00->unk_20) { case 0:
return; PresentSelectedIDSet(present, omovlevtno - 1);
} object->unk10 = 1;
fn_1_4098(var_r30->unk_00); case 1:
if (!var_r30->unk_00->choice) { PresentExecModeSet(present, PRESENT_MODE_GET);
var_r30->unk_04 = 0; object->unk10 = 2;
object->unk10 = 11; case 2:
return; if (PresentExecModeGet(present) == PRESENT_MODE_NONE) {
} else { object->unk10 = 3;
object->unk10 = 9; }
return; else {
} break;
case 9: }
fn_1_45C0(lbl_1_bss_20, 2); case 3:
object->unk10 = 10; object->unk10 = 4;
return; case 4:
case 10:
if (fn_1_4604(lbl_1_bss_20)) {
return;
}
object->unk10 = 2;
return;
case 11:
object->unk10 = 12;
var_r30->unk_04 = 0;
case 12:
if (var_r30->unk_00->unk_20) {
return;
}
if (var_r30->unk_04++ >= 60) {
omSysExitReq = 1; omSysExitReq = 1;
object->func = NULL; object->func = NULL;
object->unk10 = 0; object->unk10 = 0;
}
default:
break;
}
}
void fn_1_3DB8(omObjData *arg0)
{
void *sp8;
sp8 = arg0->data;
switch (arg0->unk10) {
case 0:
fn_1_186C(lbl_1_bss_10, omovlevtno - 1);
arg0->unk10 = 1;
case 1:
fn_1_180C(lbl_1_bss_10, 3);
arg0->unk10 = 2;
case 2:
if (!fn_1_1850(lbl_1_bss_10)) {
arg0->unk10 = 3;
} else {
break; break;
} default:
case 3: break;
arg0->unk10 = 4;
case 4:
omSysExitReq = 1;
arg0->func = NULL;
arg0->unk10 = 0;
break;
default:
break;
} }
} }
UnkWindowDataStruct *fn_1_3EA4(s32 arg0) PresentWindow *PresentWinCreate(s32 id)
{ {
UnkWindowDataStruct *var_r31; PresentWindow *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(PresentWindow), MEMORY_DEFAULT_NUM);
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); var_r31->messToBeSet = 0;
var_r31->unk18 = 0; var_r31->messWaitSignal = 0;
var_r31->unk10 = 0; var_r31->choiceSignal = 0;
var_r31->unk14 = 0; var_r31->state = 0;
var_r31->unk_20 = 0; var_r31->process = HuPrcChildCreate(ExecWindow, 1000, 8192, 0, presentObjMan);
var_r31->process = HuPrcChildCreate(fn_1_41E0, 1000, 8192, 0, lbl_1_bss_4);
var_r31->process->user_data = var_r31; var_r31->process->user_data = var_r31;
var_r31->unk08 = arg0; var_r31->id = id;
switch (arg0) { switch (id) {
case 0: case 0:
var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(var_r31->window, 0.8f); HuWinBGTPLvlSet(var_r31->window, 0.8f);
HuWinMesSpeedSet(var_r31->window, 0); HuWinMesSpeedSet(var_r31->window, 0);
HuWinMesPalSet(var_r31->window, 7, 0, 0, 0); HuWinMesPalSet(var_r31->window, 7, 0, 0, 0);
break; break;
case 1: case 1:
var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0); var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0);
HuWinAttrSet(var_r31->window, 2048); HuWinAttrSet(var_r31->window, 2048);
HuWinBGTPLvlSet(var_r31->window, 0.0f); HuWinBGTPLvlSet(var_r31->window, 0.0f);
HuWinMesSpeedSet(var_r31->window, 0); HuWinMesSpeedSet(var_r31->window, 0);
break; break;
} }
HuWinDrawNoSet(var_r31->window, 63); HuWinDrawNoSet(var_r31->window, 63);
fn_1_4190(var_r31); PresentWinDispOff(var_r31);
HuSprExecLayerSet(63, 2); HuSprExecLayerSet(63, 2);
return var_r31; return var_r31;
} }
void fn_1_4040(UnkWindowDataStruct *windowData) void PresentWinKill(PresentWindow *work)
{ {
HuWinExCleanup(windowData->window); HuWinExCleanup(work->window);
HuPrcKill(windowData->process); HuPrcKill(work->process);
HuMemDirectFree(windowData); HuMemDirectFree(work);
} }
void fn_1_4080(UnkWindowDataStruct *windowData) void PresentWinAnimIn(PresentWindow *work)
{ {
if (!windowData->unk0C) { if (!work->visible) {
windowData->unk_20 = 1; work->state = 1;
} }
} }
void fn_1_4098(UnkWindowDataStruct *windowData) void PresentWinAnimOut(PresentWindow *work)
{ {
if (windowData->unk0C) { if (work->visible) {
windowData->unk_20 = 2; work->state = 2;
} }
} }
void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess) void PresentWinMesSet(PresentWindow *work, u32 mess)
{ {
if (!windowData->unk_20) { if (!work->state) {
HuWinMesSet(windowData->window, mess); HuWinMesSet(work->window, mess);
return; return;
} }
windowData->unk18 = mess; work->messToBeSet = mess;
} }
void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index) void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index)
{ {
HuWinInsertMesSet(windowData->window, mess, index); HuWinInsertMesSet(work->window, mess, index);
} }
void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) void PresentWinPosSet(PresentWindow *work, float x, float y)
{ {
HuWinPosSet(windowData->window, x, y); HuWinPosSet(work->window, x, y);
} }
void fn_1_4184(UnkWindowDataStruct *windowData) void PresentWinDispOn(PresentWindow *work)
{ {
windowData->unk0C = 1; work->visible = TRUE;
} }
void fn_1_4190(UnkWindowDataStruct *windowData) void PresentWinDispOff(PresentWindow *work)
{ {
windowData->unk0C = 0; work->visible = FALSE;
} }
void fn_1_419C(UnkWindowDataStruct *windowData) void PresentWinMesWait(PresentWindow *work)
{ {
if (!windowData->unk_20) { if (!work->state) {
windowData->unk_20 = 3; work->state = 3;
} }
windowData->unk10 = 1; work->messWaitSignal = 1;
} }
void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) void PresentWinChoiceSet(PresentWindow *work, s32 choice)
{ {
if (!windowData->unk_20) { if (!work->state) {
windowData->unk_20 = 4; work->state = 4;
} }
windowData->unk14 = 1; work->choiceSignal = 1;
windowData->choice = arg1; work->choice = choice;
} }
void fn_1_41E0(void) static void ExecWindow(void)
{ {
UnkWindowDataStruct *windowData; PresentWindow *work = HuPrcCurrentGet()->user_data;
windowData = HuPrcCurrentGet()->user_data;
while (TRUE) { while (TRUE) {
switch (windowData->unk_20) { switch (work->state) {
case 1: case 1:
windowData->unk0C = 1; work->visible = 1;
HuWinExAnimIn(windowData->window); HuWinExAnimIn(work->window);
break; break;
case 2: case 2:
HuWinExAnimOut(windowData->window); HuWinExAnimOut(work->window);
windowData->unk0C = 0; work->visible = 0;
break; break;
case 3: case 3:
winData[windowData->window].active_pad = 1; winData[work->window].active_pad = 1;
HuWinMesWait(windowData->window); HuWinMesWait(work->window);
windowData->unk10 = 0; work->messWaitSignal = 0;
break; break;
case 4: case 4:
windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice); work->choice = HuWinChoiceGet(work->window, work->choice);
windowData->unk14 = 0; work->choiceSignal = 0;
break; break;
} }
if (windowData->unk18 != 0) { if (work->messToBeSet != 0) {
HuWinMesSet(windowData->window, windowData->unk18); HuWinMesSet(work->window, work->messToBeSet);
windowData->unk18 = 0; work->messToBeSet = 0;
} }
windowData->unk_20 = 0; work->state = 0;
if (windowData->unk10 != 0) { if (work->messWaitSignal != 0) {
windowData->unk_20 = 3; work->state = 3;
} }
if (windowData->unk14 != 0) { if (work->choiceSignal != 0) {
windowData->unk_20 = 4; work->state = 4;
} }
HuPrcVSleep(); HuPrcVSleep();
} }

File diff suppressed because it is too large Load diff