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_FE0 = .data:0x00000FE0; // type:object size:0x34
lbl_1_data_1014 = .data:0x00001014; // type:object size:0x60
lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18
lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30
lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204
lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204
lbl_1_data_14C4 = .data:0x000014C4; // type:object size:0x204
lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18 data:2byte
lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30 data:float
lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204 data:float
lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204 data:float
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_16D4 = .data:0x000016D4; // type:object size:0x4
lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4
lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4
lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4
lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120
lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120
lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120
lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0
lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0
lbl_1_data_2194 = .data:0x00002194; // type:object size:0xF0
lbl_1_data_16D4 = .data:0x000016D4; // type:object size:0x4 data:4byte
lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4 data:float
lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4 data:float
lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4 data:float
lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120 data:float
lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120 data:float
lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120 data:float
lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0 data:float
lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0 data:float
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_22A8 = .data:0x000022A8; // type:object size:0xC
lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174
lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174
lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174
lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144
lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144
lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144
lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4
lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4
lbl_1_data_2E24 = .data:0x00002E24; // type:object size:0x1A4
lbl_1_data_22A8 = .data:0x000022A8; // type:object size:0xC data:4byte
lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174 data:float
lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174 data:float
lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174 data:float
lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144 data:float
lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144 data:float
lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144 data:float
lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4 data:float
lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4 data:float
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_2FEC = .data:0x00002FEC; // type:object size:0xC
lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294
lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294
lbl_1_data_3520 = .data:0x00003520; // type:object size:0x294
lbl_1_data_2FEC = .data:0x00002FEC; // type:object size:0xC data:4byte
lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294 data:float
lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294 data:float
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_37C0 = .data:0x000037C0; // type:object size:0x4
lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198
lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198
lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198
lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198
lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198
lbl_1_data_3FBC = .data:0x00003FBC; // type:object size:0x198
lbl_1_data_37C0 = .data:0x000037C0; // type:object size:0x4 data:4byte
lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198 data:float
lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198 data:float
lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198 data:float
lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198 data:float
lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198 data:float
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_416C = .data:0x0000416C; // type:object size:0x8
lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210
lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210
lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210
lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210
lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210
lbl_1_data_4BC4 = .data:0x00004BC4; // type:object size:0x210
lbl_1_data_416C = .data:0x0000416C; // type:object size:0x8 data:4byte
lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210 data:float
lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210 data:float
lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210 data:float
lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210 data:float
lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210 data:float
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_4DEC = .data:0x00004DEC; // type:object size:0x8
lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4
lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4
lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4
lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4
lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4
lbl_1_data_5718 = .data:0x00005718; // type:object size:0x1D4
lbl_1_data_4DEC = .data:0x00004DEC; // type:object size:0x8 data:4byte
lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4 data:float
lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4 data:float
lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4 data:float
lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4 data:float
lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4 data:float
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_5904 = .data:0x00005904; // type:object size:0x8
lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C
lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C
lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C
lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168
lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168
lbl_1_data_6080 = .data:0x00006080; // type:object size:0x168
lbl_1_data_5904 = .data:0x00005904; // type:object size:0x8 data:4byte
lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C data:float
lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C data:float
lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C data:float
lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168 data:float
lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168 data:float
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_6200 = .data:0x00006200; // type:object size:0x8
lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174
lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174
lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174
lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C
lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C
lbl_1_data_691C = .data:0x0000691C; // type:object size:0x15C
lbl_1_data_6200 = .data:0x00006200; // type:object size:0x8 data:4byte
lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174 data:float
lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174 data:float
lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174 data:float
lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C data:float
lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C data:float
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_6A90 = .data:0x00006A90; // type:object size:0x8
lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C
lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C
lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C
lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174
lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174
lbl_1_data_7224 = .data:0x00007224; // type:object size:0x174
lbl_1_data_6A90 = .data:0x00006A90; // type:object size:0x8 data:4byte
lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C data:float
lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C data:float
lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C data:float
lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174 data:float
lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174 data:float
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_73B0 = .data:0x000073B0; // type:object size:0x8
lbl_1_data_73B8 = .data:0x000073B8; // type:object size:0x14
lbl_1_data_73B0 = .data:0x000073B0; // type:object size:0x8 data:4byte
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_73F4 = .data:0x000073F4; // type:object size:0x28
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
_epilog = .text:0x00000054; // type:function size:0x4C scope:global
ObjectSetup = .text:0x000000A0; // type:function size:0xA4
fn_1_144 = .text:0x00000144; // type:function size:0x110
fn_1_254 = .text:0x00000254; // type:function size:0xE0
fn_1_334 = .text:0x00000334; // type:function size:0x128
fn_1_45C = .text:0x0000045C; // type:function size:0xF4
fn_1_550 = .text:0x00000550; // type:function size:0x34
fn_1_584 = .text:0x00000584; // type:function size:0x34
fn_1_5B8 = .text:0x000005B8; // type:function size:0x34
fn_1_5EC = .text:0x000005EC; // type:function size:0xC8
fn_1_6B4 = .text:0x000006B4; // type:function size:0x23C
fn_1_8F0 = .text:0x000008F0; // type:function size:0x30
fn_1_920 = .text:0x00000920; // type:function size:0x84
fn_1_9A4 = .text:0x000009A4; // type:function size:0x84
fn_1_A28 = .text:0x00000A28; // type:function size:0x84
fn_1_AAC = .text:0x00000AAC; // type:function size:0x30
fn_1_ADC = .text:0x00000ADC; // type:function size:0x30
fn_1_B0C = .text:0x00000B0C; // type:function size:0x30
fn_1_B3C = .text:0x00000B3C; // type:function size:0x30
fn_1_B6C = .text:0x00000B6C; // type:function size:0x8C
fn_1_BF8 = .text:0x00000BF8; // type:function size:0x28
fn_1_C20 = .text:0x00000C20; // type:function size:0x578
fn_1_1198 = .text:0x00001198; // type:function size:0x200
fn_1_1398 = .text:0x00001398; // type:function size:0xC0
fn_1_1458 = .text:0x00001458; // type:function size:0x32C
fn_1_1784 = .text:0x00001784; // type:function size:0x88
fn_1_180C = .text:0x0000180C; // type:function size:0x44
fn_1_1850 = .text:0x00001850; // type:function size:0x1C
fn_1_186C = .text:0x0000186C; // type:function size:0xBC
fn_1_1928 = .text:0x00001928; // type:function size:0x680
fn_1_1FA8 = .text:0x00001FA8; // type:function size:0x140
fn_1_20E8 = .text:0x000020E8; // type:function size:0x5A4
fn_1_268C = .text:0x0000268C; // type:function size:0x7C
fn_1_2708 = .text:0x00002708; // type:function size:0x6C
fn_1_2774 = .text:0x00002774; // type:function size:0x17C
fn_1_28F0 = .text:0x000028F0; // type:function size:0x34
fn_1_2924 = .text:0x00002924; // type:function size:0x260
fn_1_2B84 = .text:0x00002B84; // type:function size:0x48
fn_1_2BCC = .text:0x00002BCC; // type:function size:0x90
fn_1_2C5C = .text:0x00002C5C; // type:function size:0x738
fn_1_3394 = .text:0x00003394; // type:function size:0x18
fn_1_33AC = .text:0x000033AC; // type:function size:0x590
fn_1_393C = .text:0x0000393C; // type:function size:0x6C
fn_1_39A8 = .text:0x000039A8; // type:function size:0x170
fn_1_3B18 = .text:0x00003B18; // type:function size:0x74
fn_1_3B8C = .text:0x00003B8C; // type:function size:0x22C
fn_1_3DB8 = .text:0x00003DB8; // type:function size:0xEC
fn_1_3EA4 = .text:0x00003EA4; // type:function size:0x19C
fn_1_4040 = .text:0x00004040; // type:function size:0x40
fn_1_4080 = .text:0x00004080; // type:function size:0x18
fn_1_4098 = .text:0x00004098; // type:function size:0x18
fn_1_40B0 = .text:0x000040B0; // type:function size:0x54
fn_1_4104 = .text:0x00004104; // type:function size:0x40
fn_1_4144 = .text:0x00004144; // type:function size:0x40
fn_1_4184 = .text:0x00004184; // type:function size:0xC
fn_1_4190 = .text:0x00004190; // type:function size:0xC
fn_1_419C = .text:0x0000419C; // type:function size:0x20
fn_1_41BC = .text:0x000041BC; // type:function size:0x24
fn_1_41E0 = .text:0x000041E0; // type:function size:0x114
fn_1_42F4 = .text:0x000042F4; // type:function size:0x240
fn_1_4534 = .text:0x00004534; // type:function size:0x8C
fn_1_45C0 = .text:0x000045C0; // type:function size:0x44
fn_1_4604 = .text:0x00004604; // type:function size:0x1C
fn_1_4620 = .text:0x00004620; // type:function size:0x260
fn_1_4880 = .text:0x00004880; // type:function size:0x184
fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8
fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104
PresentFadeSprite = .text:0x00000144; // type:function size:0x110
FadeSprite = .text:0x00000254; // type:function size:0xE0 scope:local
FadeSpriteWithMultiplier = .text:0x00000334; // type:function size:0x128
FadeModel = .text:0x0000045C; // type:function size:0xF4 scope:local
PresentPadCheck = .text:0x00000550; // type:function size:0x34
PresentPadDStkRepCheck = .text:0x00000584; // type:function size:0x34
PresentPadDStkCheck = .text:0x000005B8; // type:function size:0x34
SceneMain = .text:0x000005EC; // type:function size:0xC8 scope:local
PresentCameraCreate = .text:0x000006B4; // type:function size:0x23C
PresentCameraKill = .text:0x000008F0; // type:function size:0x30
PresentCameraTargetSet = .text:0x00000920; // type:function size:0x84
PresentCameraFocusSet = .text:0x000009A4; // type:function size:0x84
PresentCameraViewSet = .text:0x00000A28; // type:function size:0x84
PresentCameraZoomGet = .text:0x00000AAC; // type:function size:0x30
PresentCameraRotGet = .text:0x00000ADC; // type:function size:0x30
PresentCameraPosGet = .text:0x00000B0C; // type:function size:0x30
PresentCameraTargetGet = .text:0x00000B3C; // type:function size:0x30
PresentCameraDoneCheck = .text:0x00000B6C; // type:function size:0x8C
ExecCameraObj = .text:0x00000BF8; // type:function size:0x28 scope:local
ExecCamera = .text:0x00000C20; // type:function size:0x578 scope:local
CameraExecDebug = .text:0x00001198; // type:function size:0x200 scope:local
CameraPrintDebug = .text:0x00001398; // type:function size:0xC0 scope:local
PresentCreate = .text:0x00001458; // type:function size:0x32C
PresentKill = .text:0x00001784; // type:function size:0x88
PresentExecModeSet = .text:0x0000180C; // type:function size:0x44
PresentExecModeGet = .text:0x00001850; // type:function size:0x1C
PresentSelectedIDSet = .text:0x0000186C; // type:function size:0xBC
ExecSelectRoom = .text:0x00001928; // type:function size:0x680 scope:local
ChangeRoom = .text:0x00001FA8; // type:function size:0x140 scope:local
ExecSelectPresent = .text:0x000020E8; // type:function size:0x5A4 scope:local
GetCursorPos = .text:0x0000268C; // type:function size:0x7C scope:local
SetCameraRot = .text:0x00002708; // type:function size:0x6C scope:local
RotateCamera = .text:0x00002774; // type:function size:0x17C scope:local
CameraRotationDoneCheck = .text:0x000028F0; // type:function size:0x34 scope:local
ShowHidePresents = .text:0x00002924; // type:function size:0x260 scope:local
PresentUnlocked = .text:0x00002B84; // type:function size:0x48 scope:local
UnlockedPresents = .text:0x00002BCC; // type:function size:0x90 scope:local
MoveCursor = .text:0x00002C5C; // type:function size:0x738 scope:local
TotalPresentsInRoom = .text:0x00003394; // type:function size:0x18 scope:local
ExecPresentGet = .text:0x000033AC; // type:function size:0x590 scope:local
fn_1_393C = .text:0x0000393C; // type:function size:0x6C scope:local
PresentStateCreate = .text:0x000039A8; // type:function size:0x170
PresentStateKill = .text:0x00003B18; // type:function size:0x74
ExecPresentView = .text:0x00003B8C; // type:function size:0x22C scope:local
ExecPresentGet = .text:0x00003DB8; // type:function size:0xEC scope:local
PresentWinCreate = .text:0x00003EA4; // type:function size:0x19C
PresentWinKill = .text:0x00004040; // type:function size:0x40
PresentWinAnimIn = .text:0x00004080; // type:function size:0x18
PresentWinAnimOut = .text:0x00004098; // type:function size:0x18
PresentWinMesSet = .text:0x000040B0; // type:function size:0x54
PresentWinInsertMesSet = .text:0x00004104; // type:function size:0x40
PresentWinPosSet = .text:0x00004144; // type:function size:0x40
PresentWinDispOn = .text:0x00004184; // type:function size:0xC
PresentWinDispOff = .text:0x00004190; // type:function size:0xC
PresentWinMesWait = .text:0x0000419C; // type:function size:0x20
PresentWinChoiceSet = .text:0x000041BC; // type:function size:0x24
ExecWindow = .text:0x000041E0; // type:function size:0x114 scope:local
PresentGuideCreate = .text:0x000042F4; // type:function size:0x240
PresentGuideKill = .text:0x00004534; // type:function size:0x8C
PresentGuideExecModeSet = .text:0x000045C0; // type:function size:0x44
PresentGuideExecModeGet = .text:0x00004604; // type:function size:0x1C
ExecGuideEnter = .text:0x00004620; // type:function size:0x260 scope:local
ExecGuideLeave = .text:0x00004880; // type:function size:0x184 scope:local
UpdateGuide = .text:0x00004A04; // type:function size:0x2E8 scope:local
LerpAngle = .text:0x00004CEC; // type:function size:0x104 scope:local
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors:0x00000000; // type:label scope:global data:4byte
__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float
__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float
__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double
__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float
lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data: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_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_A0 = .rodata:0x000000A0; // type:object size:0x218 scope:local
lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 scope:local
presentMdlTbl = .rodata:0x000000A0; // type:object size:0x218 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_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_9D0 = .rodata:0x000009D0; // type:object size:0x8 scope:local data:float
lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 scope:local
lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 scope:local
roomIdxTbl = .rodata:0x000009D8; // type:object size:0x20 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_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
@ -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_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_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_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
@ -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_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_AC8 = .rodata:0x00000AC8; // type:object size:0x28 scope:local
lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 scope:local
totalPresentCntTbl = .rodata:0x00000AC8; // 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_B40 = .rodata:0x00000B40; // type:object size:0x28 scope:local
lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 scope:local
constellationIdxTbl = .rodata:0x00000B40; // 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_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
@ -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_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_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_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
@ -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_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_50 = .data:0x00000050; // type:object size:0x1C data:4byte
lbl_1_data_6C = .data:0x0000006C; // type:object size:0x10 data:4byte
lightTbl = .data:0x00000050; // type:object size:0x1C scope:local 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_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_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_13E = .data:0x0000013E; // type:object size:0x2E scope:local data:string
jumptable_1_data_16C = .data:0x0000016C; // type:object size:0x34 scope:local
lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0xC data:4byte
lbl_1_bss_14 = .bss:0x00000000; // type:object size:0x4 data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte
execModeTbl = .data:0x000001A0; // type:object size:0xC scope:local data:4byte
scene = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte
presentObjMan = .bss:0x00000004; // 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_10 = .bss:0x00000010; // type:object size:0x4 data:4byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte
lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte
present = .bss:0x00000010; // type:object size:0x4 data:4byte
lbl_1_bss_14 = .bss:0x00000014; // 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_D558(DataListModel *model_list);
void fn_1_D588(DataListModel *model_list);
void fn_1_D818(DataListSprite *sprite_list);
void fn_1_D950(void);
void fn_1_D9C8(void);
@ -70,4 +71,4 @@ extern float lbl_1_bss_288[2];
extern DataListModel lbl_1_data_470[];
#endif
#endif

View file

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

View file

@ -2,165 +2,59 @@
#define PRESENT_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;
/* 0x04 */ s16 window;
/* 0x06 */ char unk06[2];
/* 0x08 */ s32 unk08;
/* 0x0C */ s32 unk0C;
/* 0x10 */ s32 unk10;
/* 0x14 */ s32 unk14;
/* 0x18 */ u32 unk18;
/* 0x08 */ s32 id;
/* 0x0C */ BOOL visible;
/* 0x10 */ s32 messWaitSignal;
/* 0x14 */ s32 choiceSignal;
/* 0x18 */ u32 messToBeSet;
/* 0x1C */ s32 choice;
/* 0x20 */ s32 unk_20;
} UnkWindowDataStruct; // this already exists in option.h
/* 0x20 */ s32 state;
} PresentWindow; /* size 0x24 */ // this already exists in option.h
typedef struct UnkPresentStruct {
/* 0x00 */ UnkWindowDataStruct *unk_00;
/* 0x04 */ s32 unk_04;
} UnkPresentStruct;
#define PRESENT_GUIDE_MODE_NONE 0
#define PRESENT_GUIDE_MODE_ENTER 1
#define PRESENT_GUIDE_MODE_LEAVE 2
typedef struct UnkPresentStruct2 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 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;
#define PRESENT_MODE_NONE 0
#define PRESENT_MODE_SELECT_ROOM 1
#define PRESENT_MODE_SELECT_PRESENT 2
#define PRESENT_MODE_GET 3
typedef struct UnkPresentStruct3 {
/* 0x00 */ Vec unk_00;
/* 0x0C */ Vec unk_0C;
/* 0x18 */ GXColor unk_18;
} UnkPresentStruct3;
extern omObjData *present;
extern omObjData *presentCamera;
extern Process *presentObjMan;
typedef struct UnkPresentStruct4 {
/* 0x00 */ Vec unk_00;
/* 0x0C */ Vec unk_0C;
/* 0x18 */ Vec unk_18;
} UnkPresentStruct4;
typedef struct UnkPresentStruct5 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s16 unk_04;
/* 0x08 */ float x;
/* 0x0C */ float y;
/* 0x10 */ float z;
/* 0x14 */ float unk_14;
/* 0x18 */ s32 unk18[2];
/* 0x20 */ float unk_20;
/* 0x24 */ float unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ float unk_2C;
/* 0x30 */ float unk_30;
/* 0x34 */ float unk_34;
/* 0x38 */ float unk_38;
/* 0x3C */ s32 unk3C[3];
/* 0x48 */ float unk_48;
/* 0x4C */ float unk_4C;
/* 0x50 */ s32 unk_50;
/* 0x54 */ s32 unk_54;
} UnkPresentStruct5;
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);
void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration);
void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration);
BOOL PresentPadCheck(u16 btn);
BOOL PresentPadDStkRepCheck(u16 dir);
BOOL PresentPadDStkCheck(u16 dir);
omObjData *PresentCameraCreate();
void PresentCameraKill(omObjData *object);
void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration);
void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration);
s32 PresentCameraDoneCheck(omObjData *object);
omObjData *PresentCreate(void);
void PresentKill(omObjData *object);
void PresentExecModeSet(omObjData *object, s32 execMode);
s32 PresentExecModeGet(omObjData *object);
void PresentSelectedIDSet(omObjData *object, s32 id);
void PresentStateKill(omObjData *object);
omObjData *PresentStateCreate(void);
PresentWindow *PresentWinCreate(s32 id);
void PresentWinKill(PresentWindow *work);
void PresentWinAnimIn(PresentWindow *work);
void PresentWinAnimOut(PresentWindow *work);
void PresentWinMesSet(PresentWindow *work, u32 mess);
void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index);
void PresentWinMesWait(PresentWindow *work);
omObjData *PresentGuideCreate(void);
void PresentGuideKill(omObjData *object);
void PresentGuideExecModeSet(omObjData *object, s32 execMode);
s32 PresentGuideExecModeGet(omObjData *object);
#endif

View file

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

View file

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

View file

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

View file

@ -5,231 +5,235 @@
#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;
UnkPresentCameraStruct *var_r31;
omObjData *object = omAddObjEx(presentObjMan, 1001, 0, 0, 3, ExecCameraObj);
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);
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM);
var_r30->data = var_r31;
work->pos.x = 0.0f;
work->pos.y = 0.0f;
work->pos.z = 0.0f;
var_r31->pos.x = 0.0f;
var_r31->pos.y = 0.0f;
var_r31->pos.z = 0.0f;
work->target.x = 0.0f;
work->target.y = 0.0f;
work->target.z = 0.0f;
var_r31->target.x = 0.0f;
var_r31->target.y = 0.0f;
var_r31->target.z = 0.0f;
work->up.x = 0.0f;
work->up.y = 1.0f;
work->up.z = 0.0f;
var_r31->up.x = 0.0f;
var_r31->up.y = 1.0f;
var_r31->up.z = 0.0f;
var_r31->unk_24 = 0.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;
work->zoom = 0.0f;
work->rot = 0.0f;
work->timeTarget = 1.0f;
work->timeEye = 1.0f;
work->timeRot = 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);
fn_1_9A4(var_r30, 0.0f, 0.0f, -600.0f, 1);
fn_1_920(var_r30, 0.0f, 220.0f, 250.0f, 1);
PresentCameraFocusSet(object, 0.0f, 0.0f, -600.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);
}
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;
var_r31->unk_58.x = arg8;
var_r31->unk_58.y = arg9;
var_r31->unk_58.z = argA;
work->posTarget.x = x;
work->posTarget.y = y;
work->posTarget.z = z;
var_r31->unk_2C = var_r31->pos;
var_r31->unk_84 = 0.0f;
var_r31->unk_88 = 1.0f / arg1;
work->posPrev = work->pos;
work->timeEye = 0.0f;
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;
var_r31->unk_64.x = arg8;
var_r31->unk_64.y = arg9;
var_r31->unk_64.z = argA;
work->posFocus.x = x;
work->posFocus.y = y;
work->posFocus.z = z;
var_r31->unk_38 = var_r31->target;
var_r31->unk_8C = 0.0f;
var_r31->unk_90 = 1.0f / arg1;
work->targetPrev = work->target;
work->timeTarget = 0.0f;
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;
var_r31->unk_64.y = argA;
var_r31->unk_7C = arg8;
var_r31->unk_80 = arg9;
work->posFocus.y = y;
work->zoomTarget = zoom;
work->rotTarget = rot;
var_r31->unk_38.y = var_r31->target.y;
var_r31->unk_50 = var_r31->unk_24;
var_r31->unk_54 = var_r31->unk_28;
var_r31->unk_94 = 0.0f;
var_r31->unk_98 = 1.0f / arg1;
work->targetPrev.y = work->target.y;
work->zoomPrev = work->zoom;
work->rotPrev = work->rot;
work->timeRot = 0.0f;
work->rotSpeed = 1.0f / duration;
}
float fn_1_AAC(omObjData *object)
float PresentCameraZoomGet(omObjData *object)
{
UnkPresentCameraStruct *var_r31;
float var_f31;
CameraWork *work = object->data;
var_r31 = object->data;
var_f31 = var_r31->unk_24;
float var_f31 = work->zoom;
return var_f31;
}
float fn_1_ADC(omObjData *object)
float PresentCameraRotGet(omObjData *object)
{
UnkPresentCameraStruct *var_r31;
float var_f31;
CameraWork *work = object->data;
var_r31 = object->data;
var_f31 = var_r31->unk_28;
float var_f31 = work->rot;
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;
*arg1 = var_r31->pos.x;
*arg2 = var_r31->pos.y;
*arg3 = var_r31->pos.z;
*x = work->pos.x;
*y = work->pos.y;
*z = work->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;
*arg1 = var_r31->target.x;
*arg2 = var_r31->target.y;
*arg3 = var_r31->target.z;
*x = work->target.x;
*y = work->target.y;
*z = work->target.z;
}
s32 fn_1_B6C(omObjData *object)
s32 PresentCameraDoneCheck(omObjData *object)
{
UnkPresentCameraStruct *var_r31;
s32 var_r30;
s32 var_r29;
CameraWork *work = object->data;
var_r31 = object->data;
var_r30 = 1;
var_r29 = 1;
if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) {
s32 var_r30 = 1;
s32 var_r29 = 1;
if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) {
var_r29 = 0;
}
if (!var_r29 && !(var_r31->unk_84 < 1.0f)) {
if (!var_r29 && !(work->timeEye < 1.0f)) {
var_r30 = 0;
}
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;
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
CameraWork *work = object->data;
float weight;
float dx;
float dz;
var_r31 = object->data;
if (var_r31->unk_84 < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_84);
var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x);
var_r31->pos.y = var_r31->unk_2C.y + var_f28 * (var_r31->unk_58.y - var_r31->unk_2C.y);
var_r31->pos.z = var_r31->unk_2C.z + var_f28 * (var_r31->unk_58.z - var_r31->unk_2C.z);
if (work->timeEye < 1.0f) {
weight = sind(90.0f * work->timeEye);
work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x);
work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y);
work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z);
if ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) {
var_r31->pos = var_r31->unk_58;
if ((work->timeEye += work->eyeSpeed) >= 1.0f) {
work->pos = work->posTarget;
}
}
if (var_r31->unk_8C < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_8C);
var_r31->target.x = var_r31->unk_38.x + var_f28 * (var_r31->unk_64.x - var_r31->unk_38.x);
var_r31->target.y = var_r31->unk_38.y + var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y);
var_r31->target.z = var_r31->unk_38.z + var_f28 * (var_r31->unk_64.z - var_r31->unk_38.z);
if (work->timeTarget < 1.0f) {
weight = sind(90.0f * work->timeTarget);
work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x);
work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y);
work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z);
if ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) {
var_r31->target = var_r31->unk_64;
if ((work->timeTarget += work->targetSpeed) >= 1.0f) {
work->target = work->posFocus;
}
}
if (var_r31->unk_94 < 1.0f) {
var_f28 = sind(90.0f * var_r31->unk_94);
var_r31->target.y = var_r31->unk_38.y + (var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y));
var_r31->unk_24 = var_r31->unk_50 + (var_f28 * (var_r31->unk_7C - var_r31->unk_50));
var_r31->unk_28 = var_r31->unk_54 + (var_f28 * (var_r31->unk_80 - var_r31->unk_54));
if (work->timeRot < 1.0f) {
weight = sind(90.0f * work->timeRot);
work->target.y = work->targetPrev.y + (weight * (work->posFocus.y - work->targetPrev.y));
work->zoom = work->zoomPrev + (weight * (work->zoomTarget - work->zoomPrev));
work->rot = work->rotPrev + (weight * (work->rotTarget - work->rotPrev));
if ((var_r31->unk_94 += var_r31->unk_98) >= 1.0f) {
var_r31->target.y = var_r31->unk_64.y;
var_r31->unk_24 = var_r31->unk_7C;
var_r31->unk_28 = var_r31->unk_80;
if ((work->timeRot += work->rotSpeed) >= 1.0f) {
work->target.y = work->posFocus.y;
work->zoom = work->zoomTarget;
work->rot = work->rotTarget;
}
var_r31->target.x = var_r31->unk_24 * -sind(var_r31->unk_28);
var_r31->target.z = var_r31->unk_24 * cosd(var_r31->unk_28);
work->target.x = work->zoom * -sind(work->rot);
work->target.z = work->zoom * cosd(work->rot);
}
var_f31 = var_r31->target.x - var_r31->pos.x;
var_f30 = var_r31->target.z - var_r31->pos.z;
dx = work->target.x - work->pos.x;
dz = work->target.z - work->pos.z;
var_r31->unk_24 = sqrtf(var_f31 * var_f31 + var_f30 * var_f30);
var_r31->unk_28 = fmod(-atan2d(var_f31, var_f30), 360.0);
if (var_r31->unk_28 < 0.0f) {
var_r31->unk_28 += 360.0f;
work->zoom = sqrtf(dx * dx + dz * dz);
work->rot = fmod(-atan2d(dx, dz), 360.0);
if (work->rot < 0.0f) {
work->rot += 360.0f;
}
Hu3DCameraPosSet(1, 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,
var_r31->target.y, var_r31->target.z);
Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, work->target.y, work->target.z);
}
void fn_1_1198(omObjData *object)
static void CameraExecDebug(omObjData *object)
{
UnkPresentCameraStruct *var_r31;
if (HuPadBtn[0] & PAD_BUTTON_B) {
var_r31 = 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]);
var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]);
var_r31->pos.z = var_r31->pos.z - (0.5f * HuPadTrigR[0]);
var_r31->pos.x = var_r31->pos.x + (0.5f * HuPadSubStkY[0]);
var_r31->pos.y = var_r31->pos.y + (0.5f * HuPadSubStkX[0]);
CameraWork *work = object->data;
work->target.x += (0.5f * HuPadStkX[0]);
work->target.y += (0.5f * HuPadStkY[0]);
work->pos.z += (0.5f * HuPadTrigL[0]);
work->pos.z -= (0.5f * HuPadTrigR[0]);
work->pos.x += (0.5f * HuPadSubStkY[0]);
work->pos.y += (0.5f * HuPadSubStkX[0]);
}
}
void fn_1_1398(omObjData *object)
static void CameraPrintDebug(omObjData *object)
{
UnkPresentCameraStruct *var_r31;
var_r31 = object->data;
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, 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);
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);
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);
}

View file

@ -6,222 +6,224 @@
#include "REL/present.h"
void fn_1_4620(omObjData *arg0);
void fn_1_4880(omObjData *arg0);
typedef struct GuideWork {
/* 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);
float fn_1_4CEC(float arg8, float arg9, float argA);
static const s32 guideMotTbl[] = {
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;
UnkPresentStruct5 *var_r30;
var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL);
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM);
var_r31->data = var_r30;
var_r30->x = 0.0f;
var_r30->z = 0.0f;
var_r30->y = 0.0f;
var_r30->unk_20 = 0.0f;
var_r30->unk_24 = 0.0f;
var_r30->unk_28 = 0.0f;
var_r30->unk_2C = 0.0f;
var_r30->unk_34 = 0.0f;
var_r30->unk_30 = 0.0f;
var_r31->model[0] = Hu3DModelCreate(HuDataReadNum(0x6E0088, MEMORY_DEFAULT_NUM));
Hu3DModelLayerSet(var_r31->model[0], 1);
omObjData *object = omAddObjEx(presentObjMan, 1002, 1, 3, 2, NULL);
GuideWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM);
object->data = work;
work->pos.x = 0.0f;
work->pos.z = 0.0f;
work->pos.y = 0.0f;
work->rot.x = 0.0f;
work->rot.y = 0.0f;
work->rot.z = 0.0f;
work->posDelta.x = 0.0f;
work->posDelta.z = 0.0f;
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++) {
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);
var_r30->unk_50 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 10);
var_r30->unk_54 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 10);
Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = 0], 0.0f, 8.0f, 0x40000001);
work->unk_50 = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 10);
work->unk_54 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 10);
CharModelLayerSetAll(1);
Hu3DModelShadowSet(var_r31->model[0]);
fn_1_45C0(var_r31, 0);
fn_1_4A04(var_r31);
Hu3DModelAttrSet(var_r31->model[0], 1);
Hu3DModelShadowSet(object->model[0]);
PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE);
UpdateGuide(object);
Hu3DModelAttrSet(object->model[0], 1);
return var_r31;
return object;
}
void fn_1_4534(omObjData *object)
void PresentGuideKill(omObjData *object)
{
s32 var_r31;
void *var_r29;
void *var_r30;
void *work = object->data;
var_r29 = object->data;
for (var_r31 = 0; var_r31 < 1; var_r31++) {
Hu3DModelKill(object->model[var_r31]);
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(object->model[i]);
}
for (var_r31 = 0; var_r31 < 3; var_r31++) {
Hu3DMotionKill(object->motion[var_r31]);
for (i = 0; i < 3; i++) {
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;
var_r31->unk_00 = arg1;
object->func = lbl_1_data_1A0[arg1];
work->execMode = execMode;
object->func = execModeTbl[execMode];
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 *var_r31;
return work->execMode;
}
void fn_1_4620(omObjData *object)
static void ExecGuideEnter(omObjData *object)
{
float var_f31;
omObjData *var_r30;
void *var_r29;
UnkPresentStruct5 *var_r31;
GuideWork *work = object->data;
var_r31 = object->data;
switch (object->unk10) {
case 0:
Hu3DModelAttrReset(object->model[0], 1);
var_r31->x = -300.0f;
var_r31->z = -180.0f;
var_r31->unk_48 = 0.0f;
var_r31->unk_4C = 0.025f;
object->unk10 = 1;
case 1:
var_f31 = sind(90.0f * var_r31->unk_48);
var_f31 *= var_f31;
var_r31->unk_14 = -300.0f + (300.0f * var_f31);
var_r31->unk_2C = var_r31->unk_14 - var_r31->x;
if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) {
case 0:
Hu3DModelAttrReset(object->model[0], 1);
work->pos.x = -300.0f;
work->pos.z = -180.0f;
work->time = 0.0f;
work->speed = 0.025f;
object->unk10 = 1;
case 1:
var_f31 = sind(90.0f * work->time);
var_f31 *= var_f31;
work->newPos.x = -300.0f + (300.0f * var_f31);
work->posDelta.x = work->newPos.x - work->pos.x;
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;
}
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) {
default:
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;
UnkPresentStruct5 *var_r30;
void *var_r29;
float weight;
var_r30 = object->data;
GuideWork *work = object->data;
switch (object->unk10) {
case 0:
var_r30->unk_48 = 0.0f;
var_r30->unk_4C = 0.025f;
Hu3DModelAttrReset(object->model[0], 1);
object->unk10 = 1;
case 1:
var_f31 = sind(90.0f * var_r30->unk_48);
var_f31 *= var_f31;
var_r30->unk_14 = -(300.0f * var_f31);
var_r30->unk_2C = var_r30->unk_14 - var_r30->x;
if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) {
case 0:
work->time = 0.0f;
work->speed = 0.025f;
Hu3DModelAttrReset(object->model[0], 1);
object->unk10 = 1;
case 1:
weight = sind(90.0f * work->time);
weight *= weight;
work->newPos.x = -(300.0f * weight);
work->posDelta.x = work->newPos.x - work->pos.x;
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;
}
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 fn_1_4A04(omObjData *object)
static void UpdateGuide(omObjData *object)
{
float var_f29;
float var_f30;
s16 var_r29;
UnkPresentStruct5 *var_r31;
GuideWork *work = object->data;
s16 motion = 0;
var_r31 = object->data;
var_r29 = 0;
var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34;
var_r31->unk_38 = sqrtf(var_f30);
if (0.001f <= var_r31->unk_38) {
if (12.0f <= var_r31->unk_38) {
var_r31->unk_2C = var_r31->unk_2C / var_r31->unk_38;
var_r31->unk_34 = var_r31->unk_34 / var_r31->unk_38;
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;
work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z);
if (0.001f <= work->distRemain) {
if (12.0f <= work->distRemain) {
work->posDelta.x /= work->distRemain;
work->posDelta.z /= work->distRemain;
work->distRemain = 12.0f;
work->posDelta.x = 12.0f * work->posDelta.x;
work->posDelta.z = 12.0f * work->posDelta.z;
}
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) {
var_r29 = 2;
} else {
var_r29 = 1;
if (8.0f <= work->distRemain) {
motion = 2;
}
else {
motion = 1;
}
}
var_r31->x = var_r31->x + var_r31->unk_2C;
var_r31->z = var_r31->z + var_r31->unk_34;
if (var_r31->unk_04 != var_r29) {
Hu3DMotionShiftSet(object->model[0], object->motion[var_r31->unk_04 = var_r29], 0.0f, 8.0f, 0x40000001); // or 0x41000000
work->pos.x += work->posDelta.x;
work->pos.z += work->posDelta.z;
if (work->motion != motion) {
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);
omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28);
omSetTra(object, work->pos.x, work->pos.y, work->pos.z);
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 var_f31;
float angle;
var_f31 = fmod(arg9 - arg8, 360.0f);
if (0.0f > var_f31) {
var_f31 += 360.0f;
float delta = fmod(end - start, 360.0f);
if (0.0f > delta) {
delta += 360.0f;
}
if (180.0f < var_f31) {
var_f31 -= 360.0f;
if (180.0f < delta) {
delta -= 360.0f;
}
var_f30 = fmod(arg8 + (var_f31 * argA), 360.0f);
if (0.0f > var_f30) {
var_f30 += 360.0f;
angle = fmod(start + (delta * time), 360.0f);
if (0.0f > angle) {
angle += 360.0f;
}
return var_f30;
return angle;
}

View file

@ -8,169 +8,179 @@
#include "REL/present.h"
omObjData *lbl_1_bss_18;
omObjData *lbl_1_bss_14;
omObjData *lbl_1_bss_10;
omObjData *lbl_1_bss_C;
omObjData *lbl_1_bss_8;
Process *lbl_1_bss_4;
omObjData *lbl_1_bss_0;
typedef struct FaderWork {
/* 0x00 */ s16 id;
/* 0x04 */ float tplvl;
/* 0x08 */ float speed;
} FaderWork; /* size 0x0C */ // same as in option/scene.c
void fn_1_254(void);
void fn_1_45C(void);
void fn_1_5EC(omObjData *object);
typedef struct FaderWork2 {
/* 0x00 */ s16 id;
/* 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)
{
lbl_1_bss_4 = omInitObjMan(150, 8192);
omGameSysInit(lbl_1_bss_4);
presentObjMan = omInitObjMan(150, 8192);
omGameSysInit(presentObjMan);
HuWinInit(1);
lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC);
lbl_1_bss_0->unk10 = 0;
lbl_1_bss_18 = fn_1_39A8();
scene = omAddObjEx(presentObjMan, 1000, 0, 0, 0, SceneMain);
scene->unk10 = 0;
presentState = PresentStateCreate();
}
void fn_1_144(s16 arg0, s32 arg1, s32 arg2)
void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration)
{
Process *var_r30;
UnkPresentStruct6 *var_r31;
Process *process;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_08 = 1.0f / arg2;
if (arg1) {
var_r31->unk_08 = var_r31->unk_08;
var_r31->unk_04 = 0.0f;
} else {
var_r31->unk_08 = -var_r31->unk_08;
var_r31->unk_04 = 1.0f;
FaderWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM);
work->id = sprite;
work->speed = 1.0f / duration;
if (inF) {
work->speed = work->speed;
work->tplvl = 0.0f;
}
espDispOn(var_r31->unk_00);
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
else {
work->speed = -work->speed;
work->tplvl = 1.0f;
}
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) {
var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08;
if (var_r31->unk_04 > 1.0f) {
var_r31->unk_04 = 1.0f;
work->tplvl = work->tplvl + work->speed;
if (work->tplvl > 1.0f) {
work->tplvl = 1.0f;
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;
} else {
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
}
else {
espTPLvlSet(work->id, work->tplvl);
HuPrcVSleep();
}
}
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
if (var_r31->unk_08 < 0.0f) {
espDispOff(var_r31->unk_00);
espTPLvlSet(work->id, work->tplvl);
if (work->speed < 0.0f) {
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);
HuPrcEnd();
}
void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2)
BOOL PresentPadCheck(u16 btn)
{
Process *var_r30;
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;
u32 var_r31 = HuPadBtnDown[0] & btn;
return var_r31 != 0;
}
u32 fn_1_584(u16 arg0)
BOOL PresentPadDStkRepCheck(u16 dir)
{
u32 var_r31;
var_r31 = HuPadDStkRep[0] & arg0;
u32 var_r31 = HuPadDStkRep[0] & dir;
return var_r31 != 0;
}
u32 fn_1_5B8(u16 arg0)
BOOL PresentPadDStkCheck(u16 dir)
{
u32 var_r31;
var_r31 = HuPadDStk[0] & arg0;
u32 var_r31 = HuPadDStk[0] & dir;
return var_r31 != 0;
}
void fn_1_5EC(omObjData *object)
static void SceneMain(omObjData *object)
{
switch (object->unk10) {
case 0:
object->unk10 = 1;
case 1:
if (!omSysExitReq) {
case 0:
object->unk10 = 1;
case 1:
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;
}
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"
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);
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 *presentGuide;
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;
UnkPresentStruct *var_r30;
omObjData *object = omAddObjEx(presentObjMan, 1000, 0, 0, 4, NULL);
StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM);
object->data = work;
object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL);
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM);
object->data = var_r30;
var_r30->unk_04 = 0;
lbl_1_bss_8 = fn_1_6B4();
lbl_1_bss_10 = fn_1_1458();
lbl_1_bss_20 = fn_1_42F4();
var_r30->unk_00 = fn_1_3EA4(0);
work->quitTimer = 0;
presentCamera = PresentCameraCreate();
present = PresentCreate();
presentGuide = PresentGuideCreate();
work->window = PresentWinCreate(0);
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
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) {
OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n");
object->func = fn_1_3DB8;
object->func = ExecPresentGet;
object->unk10 = 0;
} else {
}
else {
OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n");
object->func = fn_1_3B8C;
object->func = ExecPresentView;
object->unk10 = 0;
}
return object;
}
void fn_1_3B18(omObjData *object)
void PresentStateKill(omObjData *object)
{
UnkWindowDataStruct **var_r31;
PresentWindow **var_r31 = object->data;
var_r31 = object->data;
fn_1_8F0(lbl_1_bss_8);
fn_1_1784(lbl_1_bss_10);
fn_1_4534(lbl_1_bss_20);
fn_1_4040(*var_r31);
PresentCameraKill(presentCamera);
PresentKill(present);
PresentGuideKill(presentGuide);
PresentWinKill(*var_r31);
HuMemDirectFree(var_r31);
}
void fn_1_3B8C(omObjData *object)
static void ExecPresentView(omObjData *object)
{
UnkPresentStruct *var_r30;
var_r30 = object->data;
StateWork *work = object->data;
switch (object->unk10) {
case 0:
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
object->unk10 = 1;
case 1:
if (WipeStatGet()) {
case 0:
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
object->unk10 = 1;
case 1:
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;
}
object->unk10 = 2;
case 2:
fn_1_180C(lbl_1_bss_10, 1);
object->unk10 = 3;
case 3:
if (fn_1_1850(lbl_1_bss_10)) {
case 10:
if (PresentGuideExecModeGet(presentGuide)) {
return;
}
object->unk10 = 2;
return;
}
object->unk10 = 4;
case 4:
fn_1_45C0(lbl_1_bss_20, 1);
object->unk10 = 5;
case 5:
if (fn_1_4604(lbl_1_bss_20)) {
return;
}
object->unk10 = 6;
case 6:
HuAudFXPlay(66);
fn_1_4080(var_r30->unk_00);
fn_1_40B0(var_r30->unk_00, 0x320002);
object->unk10 = 7;
case 7:
if (var_r30->unk_00->unk_20) {
return;
}
fn_1_41BC(var_r30->unk_00, 1);
object->unk10 = 8;
case 8:
if (var_r30->unk_00->unk_20) {
return;
}
fn_1_4098(var_r30->unk_00);
if (!var_r30->unk_00->choice) {
var_r30->unk_04 = 0;
object->unk10 = 11;
return;
} else {
object->unk10 = 9;
return;
}
case 9:
fn_1_45C0(lbl_1_bss_20, 2);
object->unk10 = 10;
return;
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) {
case 11:
object->unk10 = 12;
work->quitTimer = 0;
case 12:
if (work->window->state) {
return;
}
if (work->quitTimer++ >= 60) {
omSysExitReq = 1;
object->func = NULL;
object->unk10 = 0;
}
default:
break;
}
}
static void ExecPresentGet(omObjData *object)
{
void *sp8 = object->data;
switch (object->unk10) {
case 0:
PresentSelectedIDSet(present, omovlevtno - 1);
object->unk10 = 1;
case 1:
PresentExecModeSet(present, PRESENT_MODE_GET);
object->unk10 = 2;
case 2:
if (PresentExecModeGet(present) == PRESENT_MODE_NONE) {
object->unk10 = 3;
}
else {
break;
}
case 3:
object->unk10 = 4;
case 4:
omSysExitReq = 1;
object->func = NULL;
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;
}
case 3:
arg0->unk10 = 4;
case 4:
omSysExitReq = 1;
arg0->func = NULL;
arg0->unk10 = 0;
break;
default:
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->unk18 = 0;
var_r31->unk10 = 0;
var_r31->unk14 = 0;
var_r31->unk_20 = 0;
var_r31->process = HuPrcChildCreate(fn_1_41E0, 1000, 8192, 0, lbl_1_bss_4);
var_r31->messToBeSet = 0;
var_r31->messWaitSignal = 0;
var_r31->choiceSignal = 0;
var_r31->state = 0;
var_r31->process = HuPrcChildCreate(ExecWindow, 1000, 8192, 0, presentObjMan);
var_r31->process->user_data = var_r31;
var_r31->unk08 = arg0;
switch (arg0) {
case 0:
var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(var_r31->window, 0.8f);
HuWinMesSpeedSet(var_r31->window, 0);
HuWinMesPalSet(var_r31->window, 7, 0, 0, 0);
break;
case 1:
var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0);
HuWinAttrSet(var_r31->window, 2048);
HuWinBGTPLvlSet(var_r31->window, 0.0f);
HuWinMesSpeedSet(var_r31->window, 0);
break;
var_r31->id = id;
switch (id) {
case 0:
var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(var_r31->window, 0.8f);
HuWinMesSpeedSet(var_r31->window, 0);
HuWinMesPalSet(var_r31->window, 7, 0, 0, 0);
break;
case 1:
var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0);
HuWinAttrSet(var_r31->window, 2048);
HuWinBGTPLvlSet(var_r31->window, 0.0f);
HuWinMesSpeedSet(var_r31->window, 0);
break;
}
HuWinDrawNoSet(var_r31->window, 63);
fn_1_4190(var_r31);
PresentWinDispOff(var_r31);
HuSprExecLayerSet(63, 2);
return var_r31;
}
void fn_1_4040(UnkWindowDataStruct *windowData)
void PresentWinKill(PresentWindow *work)
{
HuWinExCleanup(windowData->window);
HuPrcKill(windowData->process);
HuMemDirectFree(windowData);
HuWinExCleanup(work->window);
HuPrcKill(work->process);
HuMemDirectFree(work);
}
void fn_1_4080(UnkWindowDataStruct *windowData)
void PresentWinAnimIn(PresentWindow *work)
{
if (!windowData->unk0C) {
windowData->unk_20 = 1;
if (!work->visible) {
work->state = 1;
}
}
void fn_1_4098(UnkWindowDataStruct *windowData)
void PresentWinAnimOut(PresentWindow *work)
{
if (windowData->unk0C) {
windowData->unk_20 = 2;
if (work->visible) {
work->state = 2;
}
}
void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess)
void PresentWinMesSet(PresentWindow *work, u32 mess)
{
if (!windowData->unk_20) {
HuWinMesSet(windowData->window, mess);
if (!work->state) {
HuWinMesSet(work->window, mess);
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) {
windowData->unk_20 = 3;
if (!work->state) {
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) {
windowData->unk_20 = 4;
if (!work->state) {
work->state = 4;
}
windowData->unk14 = 1;
windowData->choice = arg1;
work->choiceSignal = 1;
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) {
switch (windowData->unk_20) {
case 1:
windowData->unk0C = 1;
HuWinExAnimIn(windowData->window);
break;
case 2:
HuWinExAnimOut(windowData->window);
windowData->unk0C = 0;
break;
case 3:
winData[windowData->window].active_pad = 1;
HuWinMesWait(windowData->window);
windowData->unk10 = 0;
break;
case 4:
windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice);
windowData->unk14 = 0;
break;
switch (work->state) {
case 1:
work->visible = 1;
HuWinExAnimIn(work->window);
break;
case 2:
HuWinExAnimOut(work->window);
work->visible = 0;
break;
case 3:
winData[work->window].active_pad = 1;
HuWinMesWait(work->window);
work->messWaitSignal = 0;
break;
case 4:
work->choice = HuWinChoiceGet(work->window, work->choice);
work->choiceSignal = 0;
break;
}
if (windowData->unk18 != 0) {
HuWinMesSet(windowData->window, windowData->unk18);
windowData->unk18 = 0;
if (work->messToBeSet != 0) {
HuWinMesSet(work->window, work->messToBeSet);
work->messToBeSet = 0;
}
windowData->unk_20 = 0;
if (windowData->unk10 != 0) {
windowData->unk_20 = 3;
work->state = 0;
if (work->messWaitSignal != 0) {
work->state = 3;
}
if (windowData->unk14 != 0) {
windowData->unk_20 = 4;
if (work->choiceSignal != 0) {
work->state = 4;
}
HuPrcVSleep();
}

File diff suppressed because it is too large Load diff