diff --git a/config/GMPE01_00/rels/present/splits.txt b/config/GMPE01_00/rels/present/splits.txt index 5ac9cc92..3c65c150 100644 --- a/config/GMPE01_00/rels/present/splits.txt +++ b/config/GMPE01_00/rels/present/splits.txt @@ -10,12 +10,12 @@ REL/executor.c: .text start:0x00000000 end:0x000000A0 REL/present/init.c: - .text start:0x000000A0 end:0x00000920 + .text start:0x000000A0 end:0x000006B4 .rodata start:0x00000000 end:0x00000020 .bss start:0x00000000 end:0x00000020 REL/present/camera.c: - .text start:0x00000920 end:0x00001458 + .text start:0x000006B4 end:0x00001458 .rodata start:0x00000020 end:0x000000A0 .data start:0x00000000 end:0x00000050 diff --git a/config/GMPE01_00/rels/present/symbols.txt b/config/GMPE01_00/rels/present/symbols.txt index fb21664c..d6e7f4bc 100644 --- a/config/GMPE01_00/rels/present/symbols.txt +++ b/config/GMPE01_00/rels/present/symbols.txt @@ -68,122 +68,125 @@ fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x218 -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 -lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 data:float -lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 data:float -lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 data:float -lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 data:double -lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 -lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 -lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 data:float -lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 data:float -lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 data:float -lbl_1_rodata_A2C = .rodata:0x00000A2C; // type:object size:0x4 data:float -lbl_1_rodata_A30 = .rodata:0x00000A30; // type:object size:0x4 data:float -lbl_1_rodata_A34 = .rodata:0x00000A34; // type:object size:0x4 data:float -lbl_1_rodata_A38 = .rodata:0x00000A38; // type:object size:0x4 data:float -lbl_1_rodata_A3C = .rodata:0x00000A3C; // type:object size:0x4 data:float -lbl_1_rodata_A40 = .rodata:0x00000A40; // type:object size:0x4 data:float -lbl_1_rodata_A44 = .rodata:0x00000A44; // type:object size:0x4 data:float -lbl_1_rodata_A48 = .rodata:0x00000A48; // type:object size:0x4 data:float -lbl_1_rodata_A50 = .rodata:0x00000A50; // type:object size:0x8 data:double -lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 data:float -lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 data:double -lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 data:double -lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 data:float -lbl_1_rodata_A74 = .rodata:0x00000A74; // type:object size:0x28 -lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 data:float -lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 data:float -lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 data:float -lbl_1_rodata_AA8 = .rodata:0x00000AA8; // type:object size:0x4 data:float -lbl_1_rodata_AAC = .rodata:0x00000AAC; // type:object size:0x4 data:float -lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 data:float -lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 data:double -lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 data:double -lbl_1_rodata_AC8 = .rodata:0x00000AC8; // type:object size:0x28 -lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 -lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 -lbl_1_rodata_B40 = .rodata:0x00000B40; // type:object size:0x28 -lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 -lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 data:float -lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 data:float -lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 data:float -lbl_1_rodata_B9C = .rodata:0x00000B9C; // type:object size:0x4 data:float -lbl_1_rodata_BA0 = .rodata:0x00000BA0; // type:object size:0x4 data:float -lbl_1_rodata_BA4 = .rodata:0x00000BA4; // type:object size:0xC -lbl_1_rodata_BB0 = .rodata:0x00000BB0; // type:object size:0x4 data:float -lbl_1_rodata_BB4 = .rodata:0x00000BB4; // type:object size:0x4 data:float -lbl_1_rodata_BB8 = .rodata:0x00000BB8; // type:object size:0x4 data:float -lbl_1_rodata_BBC = .rodata:0x00000BBC; // type:object size:0x4 data:float -lbl_1_rodata_BC0 = .rodata:0x00000BC0; // type:object size:0x4 data:float -lbl_1_rodata_BC4 = .rodata:0x00000BC4; // type:object size:0x4 data:float -lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 data:float -lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 data:float -lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x8 data:float -lbl_1_rodata_BD8 = .rodata:0x00000BD8; // type:object size:0xC -lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 data:float -lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 data:float -lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 data:float -lbl_1_rodata_BF0 = .rodata:0x00000BF0; // type:object size:0x4 data:float -lbl_1_rodata_BF4 = .rodata:0x00000BF4; // type:object size:0x4 data:float -lbl_1_rodata_BF8 = .rodata:0x00000BF8; // type:object size:0x8 data:double -lbl_1_rodata_C00 = .rodata:0x00000C00; // type:object size:0x4 data:float -lbl_1_rodata_C08 = .rodata:0x00000C08; // type:object size:0x8 data:double -lbl_1_rodata_C10 = .rodata:0x00000C10; // type:object size:0x4 data:float -lbl_1_rodata_C14 = .rodata:0x00000C14; // type:object size:0x4 data:float -lbl_1_rodata_C18 = .rodata:0x00000C18; // type:object size:0x4 data:float -lbl_1_rodata_C1C = .rodata:0x00000C1C; // type:object size:0x4 data:float -lbl_1_rodata_C20 = .rodata:0x00000C20; // type:object size:0x8 data:double -lbl_1_rodata_C28 = .rodata:0x00000C28; // type:object size:0x8 data:double -lbl_1_rodata_C30 = .rodata:0x00000C30; // type:object size:0x4 data:float -lbl_1_rodata_C34 = .rodata:0x00000C34; // type:object size:0x4 data:float -lbl_1_rodata_C38 = .rodata:0x00000C38; // type:object size:0x4 data:float -lbl_1_rodata_C40 = .rodata:0x00000C40; // type:object size:0x8 data:double -lbl_1_rodata_C48 = .rodata:0x00000C48; // type:object size:0x4 data:float -lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B data:string -lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B data:string -lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A -lbl_1_data_50 = .data:0x00000050; // type:object size:0x1C +__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float +__fakeThree = .rodata:0x00000004; // type:object size:0x4 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_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // 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_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 +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 +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 +lbl_1_rodata_A2C = .rodata:0x00000A2C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A30 = .rodata:0x00000A30; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A34 = .rodata:0x00000A34; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A38 = .rodata:0x00000A38; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A3C = .rodata:0x00000A3C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A40 = .rodata:0x00000A40; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A44 = .rodata:0x00000A44; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A48 = .rodata:0x00000A48; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A50 = .rodata:0x00000A50; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 scope:local data:float +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 +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 +lbl_1_rodata_AA8 = .rodata:0x00000AA8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AAC = .rodata:0x00000AAC; // 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_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 +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 +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 +lbl_1_rodata_B9C = .rodata:0x00000B9C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BA0 = .rodata:0x00000BA0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BA4 = .rodata:0x00000BA4; // type:object size:0x8 scope:local +lbl_1_rodata_BB0 = .rodata:0x00000BB0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BB4 = .rodata:0x00000BB4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BB8 = .rodata:0x00000BB8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BBC = .rodata:0x00000BBC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC0 = .rodata:0x00000BC0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC4 = .rodata:0x00000BC4; // 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_BD0 = .rodata:0x00000BD0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BD8 = .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 +lbl_1_rodata_BF0 = .rodata:0x00000BF0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BF4 = .rodata:0x00000BF4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BF8 = .rodata:0x00000BF8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C00 = .rodata:0x00000C00; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C08 = .rodata:0x00000C08; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C10 = .rodata:0x00000C10; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C14 = .rodata:0x00000C14; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C18 = .rodata:0x00000C18; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C1C = .rodata:0x00000C1C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C20 = .rodata:0x00000C20; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C28 = .rodata:0x00000C28; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C30 = .rodata:0x00000C30; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C34 = .rodata:0x00000C34; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C38 = .rodata:0x00000C38; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C40 = .rodata:0x00000C40; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C48 = .rodata:0x00000C48; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 scope:local data:float +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 -lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 +lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 scope:local data:string lbl_1_data_84 = .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 -lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A data:string -lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E +lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x24 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_0 = .bss:0x00000000; // type:object size:0x4 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:0x8 data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x8 data:4byte +lbl_1_bss_8 = .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 diff --git a/configure.py b/configure.py index a224261f..c77657bc 100644 --- a/configure.py +++ b/configure.py @@ -1326,11 +1326,11 @@ config.libs = [ Rel('present', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/present/init.c"), - Object(NonMatching, "REL/present/camera.c"), + Object(Matching, "REL/present/init.c"), + Object(Matching, "REL/present/camera.c"), Object(NonMatching, "REL/present/present.c"), - Object(NonMatching, "REL/present/main.c"), - Object(NonMatching, "REL/present/common.c"), + Object(Matching, "REL/present/main.c"), + Object(Matching, "REL/present/common.c"), } ), Rel('resultDll', diff --git a/include/REL/present.h b/include/REL/present.h new file mode 100644 index 00000000..59c8fc88 --- /dev/null +++ b/include/REL/present.h @@ -0,0 +1,166 @@ +#ifndef PRESENT_H +#define PRESENT_H + +#include "game/object.h" +// #include "REL/option.h" // this causes problems because of the extern bsses + +typedef struct UnkWindowDataStruct { + /* 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; + /* 0x1C */ s32 choice; + /* 0x20 */ s32 unk_20; +} UnkWindowDataStruct; // this already exists in option.h + +typedef struct UnkPresentStruct { + /* 0x00 */ UnkWindowDataStruct *unk_00; + /* 0x04 */ s32 unk_04; +} UnkPresentStruct; + +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; + +typedef struct UnkPresentStruct3 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ GXColor unk_18; +} UnkPresentStruct3; + +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 */ UnkPresentNestedInnerStruct unk_00[11]; + /* 0xB0 */ s32 unkB0; +} 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 diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c new file mode 100644 index 00000000..95c6a85a --- /dev/null +++ b/src/REL/present/camera.c @@ -0,0 +1,235 @@ +#include "ext_math.h" +#include "game/hsfman.h" +#include "game/pad.h" +#include "game/printfunc.h" + +#include "REL/present.h" + +void fn_1_C20(omObjData *object); + +omObjData *fn_1_6B4(void) +{ + omObjData *var_r30; + UnkPresentCameraStruct *var_r31; + + 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; + + var_r31->pos.x = 0.0f; + var_r31->pos.y = 0.0f; + var_r31->pos.z = 0.0f; + + var_r31->target.x = 0.0f; + var_r31->target.y = 0.0f; + var_r31->target.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; + 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); + + return var_r30; +} + +void fn_1_8F0(omObjData *object) +{ + HuMemDirectFree(object->data); +} + +void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_58.x = arg8; + var_r31->unk_58.y = arg9; + var_r31->unk_58.z = argA; + + var_r31->unk_2C = var_r31->pos; + var_r31->unk_84 = 0.0f; + var_r31->unk_88 = 1.0f / arg1; +} + +void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_64.x = arg8; + var_r31->unk_64.y = arg9; + var_r31->unk_64.z = argA; + + var_r31->unk_38 = var_r31->target; + var_r31->unk_8C = 0.0f; + var_r31->unk_90 = 1.0f / arg1; +} + +void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + var_r31->unk_64.y = argA; + var_r31->unk_7C = arg8; + var_r31->unk_80 = arg9; + + 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; +} + +float fn_1_AAC(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + + var_r31 = object->data; + var_f31 = var_r31->unk_24; + return var_f31; +} + +float fn_1_ADC(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + + var_r31 = object->data; + var_f31 = var_r31->unk_28; + return var_f31; +} + +void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + *arg1 = var_r31->pos.x; + *arg2 = var_r31->pos.y; + *arg3 = var_r31->pos.z; +} + +void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + UnkPresentCameraStruct *var_r31; + + var_r31 = object->data; + *arg1 = var_r31->target.x; + *arg2 = var_r31->target.y; + *arg3 = var_r31->target.z; +} + +s32 fn_1_B6C(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + + var_r31 = object->data; + var_r30 = 1; + var_r29 = 1; + if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) { + var_r29 = 0; + } + if (!var_r29 && !(var_r31->unk_84 < 1.0f)) { + var_r30 = 0; + } + return var_r30; +} + +void fn_1_BF8(omObjData *object) +{ + fn_1_C20(object); +} + +void fn_1_C20(omObjData *object) +{ + UnkPresentCameraStruct *var_r31; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + + 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 ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) { + var_r31->pos = var_r31->unk_58; + } + } + 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 ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) { + var_r31->target = var_r31->unk_64; + } + } + 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 ((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; + } + 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); + } + var_f31 = var_r31->target.x - var_r31->pos.x; + var_f30 = var_r31->target.z - var_r31->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; + } + 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); +} + +void fn_1_1198(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]); + } +} + +void fn_1_1398(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); +} diff --git a/src/REL/present/common.c b/src/REL/present/common.c new file mode 100644 index 00000000..fa2aff10 --- /dev/null +++ b/src/REL/present/common.c @@ -0,0 +1,228 @@ +#include "ext_math.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "REL/present.h" + +void fn_1_4620(omObjData *arg0); +void fn_1_4880(omObjData *arg0); + +omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; + +static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B }; + +void fn_1_4A04(omObjData *object); +float fn_1_4CEC(float arg8, float arg9, float argA); + +omObjData *fn_1_42F4(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); + + 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)); + } + 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); + CharModelLayerSetAll(1); + Hu3DModelShadowSet(var_r31->model[0]); + fn_1_45C0(var_r31, 0); + fn_1_4A04(var_r31); + Hu3DModelAttrSet(var_r31->model[0], 1); + + return var_r31; +} + +void fn_1_4534(omObjData *object) +{ + s32 var_r31; + void *var_r29; + void *var_r30; + + var_r29 = object->data; + + for (var_r31 = 0; var_r31 < 1; var_r31++) { + Hu3DModelKill(object->model[var_r31]); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + Hu3DMotionKill(object->motion[var_r31]); + } + HuMemDirectFree(var_r29); +} + +void fn_1_45C0(omObjData *object, s32 arg1) +{ + UnkPresentStruct5 *var_r31; + + var_r31 = object->data; + var_r31->unk_00 = arg1; + object->func = lbl_1_data_1A0[arg1]; + object->unk10 = 0; + object->unk10 = 0; +} + +s32 fn_1_4604(omObjData *object) +{ + s32 *var_r31; + + var_r31 = object->data; + return *var_r31; +} + +void fn_1_4620(omObjData *object) +{ + float var_f31; + omObjData *var_r30; + void *var_r29; + UnkPresentStruct5 *var_r31; + + 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) { + 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) { + 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); +} + +void fn_1_4880(omObjData *object) +{ + float var_f31; + UnkPresentStruct5 *var_r30; + void *var_r29; + + var_r30 = 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) { + break; + } + object->unk10 = 2; + case 2: + Hu3DModelAttrSet(object->model[0], 1); + fn_1_45C0(object, 0); + break; + default: + break; + } + fn_1_4A04(object); + (void)object; +} + +void fn_1_4A04(omObjData *object) +{ + float var_f29; + float var_f30; + double var_f31; + s16 var_r29; + UnkPresentStruct5 *var_r31; + + 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; + } + var_r31->unk_24 = fn_1_4CEC(var_r31->unk_24, atan2d(var_r31->unk_2C, var_r31->unk_34), 0.4f); + + if (8.0f <= var_r31->unk_38) { + var_r29 = 2; + } else { + var_r29 = 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 + } + 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); +} + +float fn_1_4CEC(float arg8, float arg9, float argA) +{ + float var_f30; + float var_f31; + + var_f31 = fmod(arg9 - arg8, 360.0f); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg8 + (var_f31 * argA), 360.0f); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} diff --git a/src/REL/present/init.c b/src/REL/present/init.c new file mode 100644 index 00000000..fabc34fa --- /dev/null +++ b/src/REL/present/init.c @@ -0,0 +1,176 @@ +#include "game/audio.h" +#include "game/esprite.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#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; + +void fn_1_254(void); +void fn_1_45C(void); +void fn_1_5EC(omObjData *object); + +void ModuleProlog(void) +{ + lbl_1_bss_4 = omInitObjMan(150, 8192); + omGameSysInit(lbl_1_bss_4); + 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(); +} + +void fn_1_144(s16 arg0, s32 arg1, s32 arg2) +{ + Process *var_r30; + UnkPresentStruct6 *var_r31; + + 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; + } + 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; +} + +void fn_1_254(void) +{ + UnkPresentStruct6 *var_r31; + + 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; + break; + } else if (var_r31->unk_04 < 0.0f) { + var_r31->unk_04 = 0.0f; + break; + } else { + espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + HuPrcVSleep(); + } + } + espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + if (var_r31->unk_08 < 0.0f) { + espDispOff(var_r31->unk_00); + } + HuMemDirectFree(var_r31); + HuPrcEnd(); +} + +void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) +{ + 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; + return var_r31 != 0; +} + +u32 fn_1_584(u16 arg0) +{ + u32 var_r31; + + var_r31 = HuPadDStkRep[0] & arg0; + return var_r31 != 0; +} + +u32 fn_1_5B8(u16 arg0) +{ + u32 var_r31; + + var_r31 = HuPadDStk[0] & arg0; + return var_r31 != 0; +} + +void fn_1_5EC(omObjData *object) +{ + switch (object->unk10) { + case 0: + object->unk10 = 1; + case 1: + if (!omSysExitReq) { + break; + } + object->unk10 = 2; + case 2: + WipeCreate(2, 0, 60); + HuAudFadeOut(1000); + object->unk10 = 3; + break; + case 3: + if (!WipeStatGet()) { + fn_1_3B18(lbl_1_bss_18); + omOvlReturnEx(1, 1); + } + break; + default: + break; + } +} diff --git a/src/REL/present/main.c b/src/REL/present/main.c new file mode 100644 index 00000000..6542a7b7 --- /dev/null +++ b/src/REL/present/main.c @@ -0,0 +1,311 @@ +#include "game/audio.h" +#include "game/hsfman.h" +#include "game/object.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" + +#include "REL/present.h" + +omObjData *lbl_1_bss_20; + +UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; + +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 *fn_1_39A8(void) +{ + omObjData *object; + UnkPresentStruct *var_r30; + + 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); + 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); + if (omovlevtno > 0) { + OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n"); + object->func = fn_1_3DB8; + object->unk10 = 0; + } else { + OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n"); + object->func = fn_1_3B8C; + object->unk10 = 0; + } + + return object; +} + +void fn_1_3B18(omObjData *object) +{ + UnkWindowDataStruct **var_r31; + + 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); + HuMemDirectFree(var_r31); +} + +void fn_1_3B8C(omObjData *object) +{ + UnkPresentStruct *var_r30; + + var_r30 = object->data; + + switch (object->unk10) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + object->unk10 = 1; + case 1: + if (WipeStatGet()) { + 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)) { + 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) { + 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; + } +} + +UnkWindowDataStruct *fn_1_3EA4(s32 arg0) +{ + UnkWindowDataStruct *var_r31; + + 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->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; + } + HuWinDrawNoSet(var_r31->window, 63); + fn_1_4190(var_r31); + HuSprExecLayerSet(63, 2); + return var_r31; +} + +void fn_1_4040(UnkWindowDataStruct *windowData) +{ + HuWinExCleanup(windowData->window); + HuPrcKill(windowData->process); + HuMemDirectFree(windowData); +} + +void fn_1_4080(UnkWindowDataStruct *windowData) +{ + if (!windowData->unk0C) { + windowData->unk_20 = 1; + } +} + +void fn_1_4098(UnkWindowDataStruct *windowData) +{ + if (windowData->unk0C) { + windowData->unk_20 = 2; + } +} + +void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess) +{ + if (!windowData->unk_20) { + HuWinMesSet(windowData->window, mess); + return; + } + windowData->unk18 = mess; +} + +void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index) +{ + HuWinInsertMesSet(windowData->window, mess, index); +} + +void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) +{ + HuWinPosSet(windowData->window, x, y); +} + +void fn_1_4184(UnkWindowDataStruct *windowData) +{ + windowData->unk0C = 1; +} + +void fn_1_4190(UnkWindowDataStruct *windowData) +{ + windowData->unk0C = 0; +} + +void fn_1_419C(UnkWindowDataStruct *windowData) +{ + if (!windowData->unk_20) { + windowData->unk_20 = 3; + } + windowData->unk10 = 1; +} + +void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) +{ + if (!windowData->unk_20) { + windowData->unk_20 = 4; + } + windowData->unk14 = 1; + windowData->choice = arg1; +} + +void fn_1_41E0(void) +{ + UnkWindowDataStruct *windowData; + + 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; + } + if (windowData->unk18 != 0) { + HuWinMesSet(windowData->window, windowData->unk18); + windowData->unk18 = 0; + } + windowData->unk_20 = 0; + if (windowData->unk10 != 0) { + windowData->unk_20 = 3; + } + if (windowData->unk14 != 0) { + windowData->unk_20 = 4; + } + HuPrcVSleep(); + } +} diff --git a/src/REL/present/present.c b/src/REL/present/present.c new file mode 100644 index 00000000..374eb215 --- /dev/null +++ b/src/REL/present/present.c @@ -0,0 +1,897 @@ +#include "ext_math.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" +#include "game/hsfman.h" +#include "game/wipe.h" + +#include "REL/present.h" + +void fn_1_180C(omObjData *object, s32 arg1); +void fn_1_1928(omObjData *arg0); +void fn_1_1FA8(omObjData *object, s32 arg1); +void fn_1_20E8(omObjData *arg0); +void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3); +void fn_1_2708(omObjData *arg0, float arg8, s32 arg1); +void fn_1_2774(omObjData *arg0); +s32 fn_1_28F0(omObjData *object); +void fn_1_2924(omObjData *object); +s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2); +s32 fn_1_2BCC(omObjData *object, s32 arg1); +s32 fn_1_2C5C(omObjData *object, s32 arg1); +s32 fn_1_3394(s32 arg0); +void fn_1_33AC(omObjData *arg0); +s32 fn_1_393C(s32 arg0, s32 arg1); + +UnkPresentStruct3 lbl_1_data_50 = { { 0.0f, 400.0f, 0.0f }, { 0.0f, -400.0f, -500.0f }, { 255, 255, 255, 255 } }; +omObjFunc lbl_1_data_6C[] = { NULL, fn_1_1928, fn_1_20E8, fn_1_33AC }; + +static const s32 lbl_1_rodata_A0[] = { 0x006E006C, 0x006E006B, 0x006E0000, 0x006E0001, 0x006E0002, 0x006E0003, 0x006E0004, 0x006E0005, 0x006E0006, + 0x006E0007, 0x006E0008, 0x006E0009, 0x006E000A, 0x006E000B, 0x006E000C, 0x006E000D, 0x006E000E, 0x006E000F, 0x006E0010, 0x006E0011, 0x006E0012, + 0x006E0013, 0x006E0014, 0x006E0015, 0x006E0016, 0x006E0017, 0x006E0018, 0x006E0019, 0x006E001A, 0x006E001B, 0x006E001C, 0x006E001D, 0x006E001E, + 0x006E001F, 0x006E0020, 0x006E0021, 0x006E0022, 0x006E0023, 0x006E0024, 0x006E0025, 0x006E0026, 0x006E0027, 0x006E0028, 0x006E0029, 0x006E002A, + 0x006E002B, 0x006E002C, 0x006E002D, 0x006E002E, 0x006E002F, 0x006E0030, 0x006E0031, 0x006E0032, 0x006E0033, 0x006E0034, 0x006E0035, 0x006E0036, + 0x006E0037, 0x006E0038, 0x006E0039, 0x006E003A, 0x006E003B, 0x006E003C, 0x006E003D, 0x006E003E, 0x006E003F, 0x006E0040, 0x006E0041, 0x006E0042, + 0x006E0043, 0x006E0044, 0x006E0045, 0x006E0046, 0x006E0047, 0x006E0048, 0x006E0049, 0x006E004A, 0x006E004B, 0x006E004C, 0x006E004D, 0x006E004E, + 0x006E004F, 0x006E0050, 0x006E0051, 0x006E0052, 0x006E0053, 0x006E0054, 0x006E0055, 0x006E0056, 0x006E0057, 0x006E0058, 0x006E0059, 0x006E005A, + 0x006E005B, 0x006E005C, 0x006E005D, 0x006E005E, 0x006E005F, 0x006E0060, 0x006E0061, 0x006E0062, 0x006E0063, 0x006E0064, 0x006E0065, 0x006E0066, + 0x006E0067, 0x006E0068, 0x006E0069, 0x006E006A, 0x006E006D, 0x006E006F, 0x006E0071, 0x006E0073, 0x006E0075, 0x006E0077, 0x006E0079, 0x006E007B, + 0x006E007D, 0x006E006E, 0x006E0070, 0x006E0072, 0x006E0074, 0x006E0076, 0x006E0078, 0x006E007A, 0x006E007C, 0x006E007F, 0x006E0080, 0x006E0081, + 0x006E0082, 0x006E0083, 0x006E0084, 0x006E0085, 0x006E0086 }; + +static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { + { { { 0x00000006, 0x00000002, 0x00000008, 0x00320006 }, { 0x00320042, 0x00000003, 0x00000009, 0x00320007 }, + { 0x00320043, 0x00000004, 0x0000000A, 0x00320008 }, { 0x00320044, 0x00000005, 0x0000000B, 0x00320009 }, + { 0x00320045, 0x00000006, 0x0000000C, 0x0032000A }, { 0x00320046, 0x00000007, 0x0000000D, 0x0032000B }, + { 0x00320047, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000000E, 0x00000014, 0x0032000C }, { 0x00320048, 0x0000000F, 0x00000015, 0x0032000D }, + { 0x00320049, 0x00000010, 0x00000016, 0x0032000E }, { 0x0032004A, 0x00000011, 0x00000017, 0x0032000F }, + { 0x0032004B, 0x00000012, 0x00000018, 0x00320010 }, { 0x0032004C, 0x00000013, 0x00000019, 0x00320011 }, + { 0x0032004D, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000001A, 0x00000020, 0x00320012 }, { 0x0032004E, 0x0000001B, 0x00000021, 0x00320013 }, + { 0x0032004F, 0x0000001C, 0x00000022, 0x00320014 }, { 0x00320050, 0x0000001D, 0x00000023, 0x00320015 }, + { 0x00320051, 0x0000001E, 0x00000024, 0x00320016 }, { 0x00320052, 0x0000001F, 0x00000025, 0x00320017 }, + { 0x00320053, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000026, 0x0000002C, 0x00320018 }, { 0x00320054, 0x00000027, 0x0000002D, 0x00320019 }, + { 0x00320055, 0x00000028, 0x0000002E, 0x0032001A }, { 0x00320056, 0x00000029, 0x0000002F, 0x0032001B }, + { 0x00320057, 0x0000002A, 0x00000030, 0x0032001C }, { 0x00320058, 0x0000002B, 0x00000031, 0x0032001D }, + { 0x00320059, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000032, 0x00000038, 0x0032001E }, { 0x0032005A, 0x00000033, 0x00000039, 0x0032001F }, + { 0x0032005B, 0x00000034, 0x0000003A, 0x00320020 }, { 0x0032005C, 0x00000035, 0x0000003B, 0x00320021 }, + { 0x0032005D, 0x00000036, 0x0000003C, 0x00320022 }, { 0x0032005E, 0x00000037, 0x0000003D, 0x00320023 }, + { 0x0032005F, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000001, 0x00000001, 0xFFFFFFFF, 0x00320041 }, { 0x00320041, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000003E, 0x00000044, 0x00320024 }, { 0x00320060, 0x0000003F, 0x00000045, 0x00320025 }, + { 0x00320061, 0x00000040, 0x00000046, 0x00320026 }, { 0x00320062, 0x00000041, 0x00000047, 0x00320027 }, + { 0x00320063, 0x00000042, 0x00000048, 0x00320028 }, { 0x00320064, 0x00000043, 0x00000049, 0x00320029 }, + { 0x00320065, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x0000004A, 0x00000050, 0x0032002A }, { 0x00320066, 0x0000004B, 0x00000051, 0x0032002B }, + { 0x00320067, 0x0000004C, 0x00000052, 0x0032002C }, { 0x00320068, 0x0000004D, 0x00000053, 0x0032002D }, + { 0x00320069, 0x0000004E, 0x00000054, 0x0032002E }, { 0x0032006A, 0x0000004F, 0x00000055, 0x0032002F }, + { 0x0032006B, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x00000006, 0x00000056, 0x0000005C, 0x00320030 }, { 0x0032006C, 0x00000057, 0x0000005D, 0x00320031 }, + { 0x0032006D, 0x00000058, 0x0000005E, 0x00320032 }, { 0x0032006E, 0x00000059, 0x0000005F, 0x00320033 }, + { 0x0032006F, 0x0000005A, 0x00000060, 0x00320034 }, { 0x00320070, 0x0000005B, 0x00000061, 0x00320035 }, + { 0x00320071, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }, + 0x00000000 }, + { { { 0x0000000B, 0x00000062, 0xFFFFFFFF, 0x00320036 }, { 0x00320072, 0x00000063, 0xFFFFFFFF, 0x00320037 }, + { 0x00320073, 0x00000064, 0xFFFFFFFF, 0x00320038 }, { 0x00320074, 0x00000065, 0xFFFFFFFF, 0x00320039 }, + { 0x00320075, 0x00000066, 0xFFFFFFFF, 0x0032003A }, { 0x00320076, 0x00000067, 0xFFFFFFFF, 0x0032003B }, + { 0x00320077, 0x00000068, 0xFFFFFFFF, 0x0032003C }, { 0x00320078, 0x00000069, 0xFFFFFFFF, 0x0032003D }, + { 0x00320079, 0x0000006A, 0xFFFFFFFF, 0x0032003E }, { 0x0032007A, 0x0000006B, 0xFFFFFFFF, 0x0032003F }, + { 0x0032007B, 0x0000006C, 0xFFFFFFFF, 0x00320040 } }, + 0x0032007C }, +}; + +omObjData *fn_1_1458(void) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + omObjData *var_r29; + s32 var_r28; + s16 var_r27; + LightData *var_r26; + + var_r29 = omAddObjEx(lbl_1_bss_4, 1003, 0, 0, 1, NULL); + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 868, MEMORY_DEFAULT_NUM); + var_r29->data = var_r31; + var_r31->unk_234 = 0; + var_r31->unk_238 = 0; + var_r31->unk_23C = 0.0f; + var_r31->unk_248 = 1.0f; + var_r31->unk_250 = 0.0f; + + for (var_r30 = 0; var_r30 < 60; var_r30++) { + var_r31->unk_270[var_r30] = GWGameStat.present[var_r30]; + } + + for (var_r30 = 0; var_r30 < 59; var_r30++) { + if (!var_r31->unk_270[var_r30]) { + break; + } + } + if (var_r30 == 59) { + var_r31->unk_270[59] = 1; + } + Hu3DLighInit(); + var_r27 = Hu3DGLightCreateV(&lbl_1_data_50.unk_00, &lbl_1_data_50.unk_0C, &lbl_1_data_50.unk_18); + Hu3DGLightInfinitytSet(var_r27); + Hu3DGLightStaticSet(var_r27, 1); + var_r26 = &Hu3DGlobalLight[var_r27]; + var_r26->unk_00 = var_r26->unk_00 | 0x8000; + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + var_r31->unk_10[var_r30] = omAddObjEx(lbl_1_bss_4, 1003, 1, 0, 1, NULL); + var_r31->unk_10[var_r30]->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_rodata_A0[var_r30], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelLayerSet(var_r31->unk_10[var_r30]->model[0], 0); + Hu3DModelAttrSet(var_r31->unk_10[var_r30]->model[0], 1); + } + + for (var_r28 = 0; var_r28 < 8; var_r28++) { + for (var_r30 = 0; var_r30 < 6; var_r30++) { + Hu3DModelLayerSet(var_r31->unk_10[var_r30 + 2 + var_r28 * 6 * 2]->model[0], 1); + } + } + Hu3DModelShadowMapSet(var_r31->unk_10[0]->model[0]); + fn_1_2924(var_r29); + var_r31->sprite = espEntry(7209095, 0, 0); + espDispOff(var_r31->sprite); + var_r31->unk_228 = fn_1_3EA4(0); + var_r31->unk_22C = fn_1_3EA4(1); + fn_1_2708(var_r29, var_r31->unk_234 * 36.0f, 1); + fn_1_2774(var_r29); + fn_1_180C(var_r29, 0); + + (void)var_r27; + return var_r29; +} + +void fn_1_1784(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + void *var_r29; + + var_r31 = object->data; + fn_1_4040(var_r31->unk_228); + fn_1_4040(var_r31->unk_22C); + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + Hu3DModelKill(var_r31->unk_10[var_r30]->model[0]); + } + espKill(var_r31->sprite); + HuMemDirectFree(var_r31); +} + +void fn_1_180C(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + var_r31->unk_0C = arg1; + object->func = lbl_1_data_6C[arg1]; + object->unk10 = 0; + object->unk10 = 0; +} + +s32 fn_1_1850(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + return var_r31->unk_0C; +} + +static const s32 lbl_1_rodata_9D8[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; +static const s32 lbl_1_rodata_9F8[] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 0 }; + +void fn_1_186C(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + if (arg1 < 48) { + var_r31->unk_234 = lbl_1_rodata_9D8[arg1 / 6]; + var_r31->unk_238 = arg1 % 6; + return; + } + if (arg1 < 59) { + var_r31->unk_234 = 9; + var_r31->unk_238 = (arg1 - 48) % 11; + return; + } + var_r31->unk_234 = 5; + var_r31->unk_238 = 0; +} + +void fn_1_1928(omObjData *object) +{ + Vec sp8; + UnkPresentStruct2 *var_r31; + s32 var_r29; + UnkPresentStruct2 *var_r28; + + var_r31 = object->data; + switch (object->unk10) { + case 0: + var_r31->unk_00 = 0; + var_r31->unk_08 = 0; + object->unk10 = 1; + case 1: + if (var_r31->unk_08) { + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 420.0f, -600.0f, 30); + } else { + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + } + object->unk10 = 2; + case 2: + if (!fn_1_B6C(lbl_1_bss_8) && !var_r31->unk_228->unk_20 && !fn_1_28F0(object)) { + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); + if (var_r31->unk_08) { + var_r29 = 0x320080; + } else if (var_r31->unk_234 == 5) { + var_r29 = 0x320085; + } else { + var_r29 = 0x32007e; + } + fn_1_40B0(var_r31->unk_22C, var_r29); + switch (var_r31->unk_234) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: + case 8: + if (var_r31->unk_08) { + if (fn_1_2B84(object, var_r31->unk_234, 5)) { + var_r29 = 0x320005; + } else { + var_r29 = 0x320082; + } + } else if (fn_1_2BCC(object, var_r31->unk_234) > 0) { + var_r29 = 0x320001; + } else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_9F8[var_r31->unk_234], 0); + break; + case 5: + if (fn_1_2B84(object, 5, 0)) { + var_r29 = 0x320041; + } else { + var_r29 = 0x320084; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + case 9: + if (fn_1_2BCC(object, 9) > 0) { + var_r29 = 0x320083; + } else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + default: + break; + } + if (var_r31->unk_08) { + sp8.x = 0.0f; + sp8.y = 600.0f; + sp8.z = -500.0f; + } else { + sp8.x = 0.0f; + sp8.y = 210.0f; + sp8.z = -500.0f; + } + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + espPosSet(var_r31->sprite, sp8.x, sp8.y); + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + } + object->unk10 = 3; + } + break; + case 3: + if (!var_r31->unk_228->unk_20) { + if (fn_1_550(512) && !var_r31->unk_08) { + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(3); + object->unk10 = 4; + } else if (fn_1_550(256) && !var_r31->unk_08) { + if (var_r31->unk_234 != 5) { + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(2); + fn_1_180C(object, 2); + } + } else if (fn_1_584(8) && !var_r31->unk_08) { + if ((var_r31->unk_234 != 5) && (var_r31->unk_234 != 9)) { + var_r31->unk_08 = 1; + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(0); + object->unk10 = 1; + } + } else if (fn_1_584(4) && var_r31->unk_08) { + var_r31->unk_08 = 0; + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(0); + object->unk10 = 1; + } else if (fn_1_584(1)) { + fn_1_1FA8(object, 1); + HuAudFXPlay(0); + object->unk10 = 2; + } else if (fn_1_584(2)) { + fn_1_1FA8(object, 2); + HuAudFXPlay(0); + object->unk10 = 2; + } + } + break; + case 4: + fn_1_180C(object, 0); + break; + } + fn_1_2774(object); +} + +void fn_1_1FA8(omObjData *object, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + float var_f30; + float var_f31; + float var_f29; + + var_r31 = object->data; + + for (var_r30 = 0, var_f31 = 0.0f;; var_r30++) { + var_f31 += 36.0f; + if (arg1 == 1) { + var_r29 = -1; + } else { + var_r29 = 1; + } + var_r31->unk_234 = var_r31->unk_234 + var_r29; + if (var_r31->unk_234 < 0) { + var_r31->unk_234 = 9; + } else if (var_r31->unk_234 >= 10) { + var_r31->unk_234 = 0; + } + if (!((var_r31->unk_08) && ((var_r31->unk_234 == 5) || (var_r31->unk_234 == 9)))) { + break; + } + } + if (arg1 == 1) { + var_f30 = -var_f31; + } else { + var_f30 = var_f31; + } + var_f29 = var_r31->unk_23C + var_f30; + if (!var_r30) { + var_r28 = 30; + } else { + var_r28 = 45; + } + fn_1_2708(object, var_f29, var_r28); +} + +void fn_1_20E8(omObjData *object) +{ + Vec sp8; + UnkPresentStruct2 *var_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r25; + float var_f31; + float var_f30; + + var_r31 = object->data; + var_r29 = var_r31->unk_238; + var_r27 = var_r31->unk_234; + switch (object->unk10) { + case 0: + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, -120.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + var_r31->unk_04 = fn_1_2BCC(object, var_r27) > 0; + var_r31->unk_00 = 0; + var_r31->unk_238 = 0; + if (var_r31->unk_04) { + var_r25 = fn_1_3394(var_r31->unk_234); + for (var_r28 = 0; var_r28 < var_r25; var_r28++) { + if (fn_1_2B84(object, var_r27, var_r28)) { + var_r31->unk_238 = var_r28; + break; + } + } + } + object->unk10 = 1; + case 1: + if (fn_1_B6C(lbl_1_bss_8)) { + break; + } + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); + fn_1_40B0(var_r31->unk_22C, 0x32007F); + + if (var_r31->unk_04) { + // fn_1_40B0(var_r31->unk_228, ((((u8 *)lbl_1_rodata_2B8) + var_r27 * 180 + var_r29 * 16))->unk10); + // fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_00->unk10); // TODO match + } else { + fn_1_40B0(var_r31->unk_228, 0x320003); + } + var_r31->unk_258 = 0.0f; + var_r31->unk_25C = 5.0f / 30.0f; + if (var_r31->unk_04) { + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_00[var_r29].unk_04], &sp8.x, &sp8.y, &sp8.z); + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + var_r31->unk_260 = sp8.x; + var_r31->unk_264 = sp8.y; + } else { + var_r31->unk_260 = var_r31->unk_268; + var_r31->unk_264 = var_r31->unk_26C; + } + var_r31->unk_268 = sp8.x; + var_r31->unk_26C = sp8.y; + object->unk10 = 2; + } else { + object->unk10 = 3; + break; + } + case 2: + var_f31 = var_r31->unk_260 + (var_r31->unk_258 * (var_r31->unk_268 - var_r31->unk_260)); + var_f30 = var_r31->unk_264 + (var_r31->unk_258 * (var_r31->unk_26C - var_r31->unk_264)); + espPosSet(var_r31->sprite, var_f31, var_f30); + if ((var_r31->unk_258 = var_r31->unk_258 + var_r31->unk_25C) < 1.0f) { + break; + } + espPosSet(var_r31->sprite, var_r31->unk_268, var_r31->unk_26C); + object->unk10 = 3; + case 3: + if (fn_1_550(512)) { + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(3); + object->unk10 = 4; + } else if (var_r31->unk_04) { + if (fn_1_584(1) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 5); + } else if (fn_1_584(1) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 9); + } else if (fn_1_584(2) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 6); + } else if (fn_1_584(2) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 10); + } else if (fn_1_584(1)) { + var_r29 = fn_1_2C5C(object, 1); + } else if (fn_1_584(2)) { + var_r29 = fn_1_2C5C(object, 2); + } else if (fn_1_584(8)) { + var_r29 = fn_1_2C5C(object, 4); + } else if (fn_1_584(4)) { + var_r29 = fn_1_2C5C(object, 8); + } + } else { + break; + } + if (var_r29 == -1) { + var_r29 = var_r31->unk_238; + } + if (var_r29 != var_r31->unk_238) { + var_r31->unk_238 = var_r29; + object->unk10 = 1; + HuAudFXPlay(0); + } + break; + case 4: + if (var_r31->unk_00) { + fn_1_144(var_r31->sprite, 0, 5); + } + fn_1_180C(object, 1); + break; + default: + break; + } +} + +void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) +{ + Mtx sp8; + + Hu3DModelObjMtxGet(object->model[0], "cursor", sp8); + *arg1 = sp8[0][3]; + *arg2 = sp8[1][3]; + *arg3 = sp8[2][3]; +} + +void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = arg0->data; + var_r31->unk_244 = arg8; + var_r31->unk_240 = var_r31->unk_23C; + var_r31->unk_248 = 0.0f; + var_r31->unk_250 = 1.0f / arg1; +} + +void fn_1_2774(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + float var_f31; + s32 var_r30; + + var_r31 = object->data; + + if (var_r31->unk_248 < 1.0f) { + var_f31 = sin(90.0f * var_r31->unk_248 * M_PI / 180.0f); + var_f31 *= var_f31; + var_r31->unk_23C = var_r31->unk_240 + (var_f31 * (var_r31->unk_244 - var_r31->unk_240)); + + if ((var_r31->unk_248 = var_r31->unk_248 + var_r31->unk_250) >= 1.0f) { + var_r31->unk_23C = var_r31->unk_244; + } + } + var_r31->unk_23C = fmod(var_r31->unk_23C, 360.0); + + if (var_r31->unk_23C < 0.0f) { + var_r31->unk_23C += 360.0f; + } + + for (var_r30 = 0; var_r30 < 134; var_r30++) { + omSetRot(var_r31->unk_10[var_r30], 0.0f, var_r31->unk_23C, 0.0f); + } +} + +s32 fn_1_28F0(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = object->data; + return var_r31->unk_248 < 1.0f; +} + +s32 lbl_1_data_84[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; + +void fn_1_2924(omObjData *object) +{ + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r27; + s32 var_r29; + + var_r31 = object->data; + Hu3DModelAttrReset(var_r31->unk_10[0]->model[0], 1); + + for (var_r29 = 0; var_r29 < 8; var_r29++) { + if (fn_1_2BCC(object, lbl_1_data_84[var_r29]) > 0) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 109]->model[0], 1); + } + + for (var_r27 = 0, var_r30 = 0; var_r30 < 6; var_r30++) { + if (fn_1_2B84(object, lbl_1_data_84[var_r29], var_r30)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 2 + var_r30]->model[0], 1); + Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 8 + var_r30]->model[0], 1); + var_r27++; + } + } + if (var_r27 >= 6) { + Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 118]->model[0], 1); + } + } + if (fn_1_2BCC(object, 9) > 0) { + Hu3DModelAttrReset(var_r31->unk_10[117]->model[0], 1); + } + for (var_r30 = 0; var_r30 < 11; var_r30++) { + if (fn_1_2B84(object, 9, var_r30)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 98]->model[0], 1); + } + } + if (fn_1_2B84(object, 5, 0)) { + Hu3DModelAttrReset(var_r31->unk_10[1]->model[0], 1); + } + for (var_r30 = 0; var_r30 < 8; var_r30++) { + if (fn_1_2B84(object, lbl_1_data_84[var_r30], 5)) { + Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 126]->model[0], 1); + } + } +} + +static const s32 lbl_1_rodata_A74[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; + +s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) +{ + UnkPresentStruct2 *var_r31; + + var_r31 = arg0->data; + return var_r31->unk_270[arg2 + lbl_1_rodata_A74[arg1]] != 0; +} + +s32 fn_1_2BCC(omObjData *object, s32 arg1) +{ + s32 var_r31; + s32 var_r30; + UnkPresentStruct2 *var_r29; + s32 var_r28; + + var_r28 = fn_1_3394(arg1); + + for (var_r30 = 0, var_r31 = 0; var_r31 < var_r28; var_r31++) { + if (fn_1_2B84(object, arg1, var_r31)) { + var_r30++; + } + } + + return var_r30; +} + +s32 fn_1_2C5C(omObjData *object, s32 arg1) +{ + UnkPresentStruct7 spA4[10]; + Vec sp38; + Vec sp2C; + UnkPresentStruct7 sp24; + float var_f31; + float var_f30; + float var_f29; + UnkPresentStruct2 *var_r31; + s32 var_r30; + s32 var_r28; + s32 var_r26; + s32 var_r23; + s32 var_r22; + omObjData *var_r21; + omObjData *var_r19; + s32 var_r18; + s32 var_r17; + + var_r31 = object->data; + + var_r22 = fn_1_3394(var_r31->unk_234); + + var_r18 = fn_1_2BCC(object, var_r31->unk_234); + if (var_r18 == 1) { + return var_r31->unk_238; + } + var_r21 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_04]; + + fn_1_268C(var_r21, &sp38.x, &sp38.y, &sp38.z); + Hu3D3Dto2D(&sp38, 1, &sp38); + for (var_r28 = 0, var_r26 = 0; !var_r28 && (var_r26 < 1); var_r26++) { + for (var_r28 = 0, var_r30 = 0; var_r30 < var_r22; var_r30++) { + if (var_r30 == var_r31->unk_238) { + continue; + } + if (!fn_1_2B84(object, var_r30, var_r31->unk_234)) { + continue; + } + var_r19 = var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r30].unk_04]; + fn_1_268C(var_r19, &sp2C.x, &sp2C.y, &sp2C.z); + Hu3D3Dto2D(&sp2C, 1, &sp2C); + var_f30 = sp38.x - sp2C.x; + var_f29 = sp38.y - sp2C.y; + var_f31 = fmod(atan2d(var_f30, var_f29), 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if ((arg1 == 1 && var_f31 >= 45.0f && var_f31 < 135.0f) || (arg1 == 2 && var_f31 >= 225.0f && var_f31 < 315.0f) + || (arg1 == 8 && var_f31 >= 135.0f && var_f31 < 225.0f) + || (arg1 == 4 && (var_f31 >= 0.0f && var_f31 < 45.0f || var_f31 >= 315.0f && var_f31 < 360.0f)) + || (arg1 == 5 && var_f31 >= 0.0f && var_f31 < 90.0f) || (arg1 == 9 && var_f31 >= 90.0f && var_f31 < 180.0f) + || (arg1 == 6 && var_f31 >= 270.0f && var_f31 < 360.0f) || (arg1 == 10 && var_f31 >= 180.0f && var_f31 < 270.0f)) { + spA4[var_r28].unk_00 = var_r30; + spA4[var_r28].unk_04 = sqrtf(var_f30 * var_f30 + var_f29 * var_f29); + var_r28++; + } + } + + if (var_r28) { + continue; + } + switch (arg1) { + case 0: + break; + case 1: + L_00003218: + arg1 = 2; + break; + case 2: + L_00003220: + arg1 = 1; + break; + case 3: + break; + case 4: + L_00003228: + arg1 = 8; + break; + case 7: + break; + case 8: + L_00003230: + arg1 = 4; + break; + case 5: + L_00003238: + arg1 = 10; + break; + case 9: + L_00003240: + arg1 = 6; + break; + case 6: + L_00003248: + arg1 = 9; + break; + case 10: + L_00003250: + arg1 = 5; + break; + default: + break; + } + // L_00003254: + } + if (!var_r28) { + return var_r31->unk_238; + } + do { + for (var_r23 = 0, var_r30 = 0; var_r30 < (var_r28 - 1); var_r30++) { + if (spA4[var_r30].unk_04 > spA4[var_r30 + 1].unk_04) { + sp24 = spA4[var_r30 + 1]; + spA4[var_r30 + 1] = spA4[var_r30]; + spA4[var_r30] = sp24; + var_r23 = 1; + } + } + } while (var_r23); + if (var_r26 <= 1) { + var_r17 = 0; + } else { + var_r17 = var_r28 - 1; + } + return spA4[var_r17].unk_00; +} + +static const s32 lbl_1_rodata_AC8[] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; + +s32 fn_1_3394(s32 arg0) +{ + return lbl_1_rodata_AC8[arg0]; +} + +static const s32 lbl_1_rodata_AF0[] = { 2, 14, 26, 38, 50, 0, 62, 74, 86, 0 }; +static const s32 lbl_1_rodata_B18[] = { 8, 20, 32, 44, 56, 0, 68, 80, 92, 0 }; +static const s32 lbl_1_rodata_B40[] = { 126, 127, 128, 129, 130, 0, 131, 132, 133, 0 }; +static const s32 lbl_1_rodata_B68[] = { 118, 119, 120, 121, 122, 0, 123, 124, 125, 0 }; + +void fn_1_33AC(omObjData *object) +{ + f32 var_f29; + f32 var_f30; + f32 var_f31; + UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r30; + UnkPresentStruct2 *var_r28; + s32 var_r27; + + var_r31 = object->data; + switch (object->unk10) { + case 0: + var_f29 = 36.0f * var_r31->unk_234; + fn_1_2708(object, var_f29, 1); + fn_1_2774(object); + Hu3DModelAttrSet(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B68[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B40[var_r31->unk_234]]->model[0], 1); + var_r31->unk_24C = 0.0f; + var_r31->unk_254 = 1.0f / 360.0f; + object->unk10 = 1; + case 1: + WipeCreate(1, 0, 120); + object->unk10 = 2; + case 2: + var_f31 = sind(90.0f * var_r31->unk_24C); + var_f31 *= var_f31; + fn_1_920(lbl_1_bss_8, 0.0f, 820.0f - (600.0f * var_f31), -120.0f, 1); + fn_1_9A4(lbl_1_bss_8, 0.0f, 680.0f - (680.0f * var_f31), -600.0f, 1); + omSetTra(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_AF0[var_r31->unk_234]], 0.0f, 840.0f - (840.0f * var_f31), 0.0f); + if ((var_r31->unk_24C = var_r31->unk_24C + var_r31->unk_254) < 1.0f) { + return; + } + if (fn_1_393C(var_r31->unk_234, var_r31->unk_238)) { + fn_1_334(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1, 0.4f, 30); + } + object->unk10 = 3; + case 3: + fn_1_4080(var_r31->unk_228); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_00[var_r31->unk_238].unk_0C, 0); + fn_1_40B0(var_r31->unk_228, 0x320004); + fn_1_419C(var_r31->unk_228); + object->unk10 = 4; + case 4: + if (var_r31->unk_228->unk_20) { + break; + } + object->unk10 = 5; + case 5: + fn_1_4098(var_r31->unk_228); + object->unk10 = 6; + case 6: + if (!var_r31->unk_228->unk_20) { + fn_1_180C(object, 0); + } + break; + } +} + +static const s32 lbl_1_rodata_BA4[][2] = { { 7, 1 } }; + +s32 fn_1_393C(s32 arg0, s32 arg1) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 1; var_r31++) { + if (arg0 == lbl_1_rodata_BA4[var_r31][0] && arg1 == lbl_1_rodata_BA4[var_r31][1]) { + return 0; + } + } + return 1; +}