From e58c88841e4e1d5a11c26f627feb171bd3430bea Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 7 Apr 2024 20:03:26 -0500 Subject: [PATCH] Start decompiling modeseldll --- config/GMPE01_00/rels/modeseldll/symbols.txt | 76 ++-- configure.py | 4 +- include/REL/modeseldll.h | 45 +++ src/REL/modeseldll/datalist.c | 130 +++++++ src/REL/modeseldll/main.c | 366 +++++++++++++++++++ 5 files changed, 581 insertions(+), 40 deletions(-) create mode 100644 include/REL/modeseldll.h create mode 100644 src/REL/modeseldll/datalist.c create mode 100644 src/REL/modeseldll/main.c diff --git a/config/GMPE01_00/rels/modeseldll/symbols.txt b/config/GMPE01_00/rels/modeseldll/symbols.txt index bc128524..486752e2 100644 --- a/config/GMPE01_00/rels/modeseldll/symbols.txt +++ b/config/GMPE01_00/rels/modeseldll/symbols.txt @@ -41,38 +41,38 @@ fn_1_C168 = .text:0x0000C168; // type:function size:0x154 fn_1_C2BC = .text:0x0000C2BC; // type:function size:0x78 _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:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -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_4C = .rodata:0x0000004C; // 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:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:double -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // 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:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 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_4C = .rodata:0x0000004C; // 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:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double @@ -176,14 +176,14 @@ lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:byte -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x38 -lbl_1_data_38 = .data:0x00000038; // type:object size:0x22 data:string -lbl_1_data_5A = .data:0x0000005A; // type:object size:0x14 data:string +lbl_1_data_38 = .data:0x00000038; // type:object size:0x22 scope:local data:string +lbl_1_data_5A = .data:0x0000005A; // type:object size:0x14 scope:local data:string lbl_1_data_6E = .data:0x0000006E; // type:object size:0x4 -lbl_1_data_72 = .data:0x00000072; // type:object size:0xA data:string -lbl_1_data_7C = .data:0x0000007C; // type:object size:0x4 data:string +lbl_1_data_72 = .data:0x00000072; // type:object size:0xA scope:local data:string +lbl_1_data_7C = .data:0x0000007C; // type:object size:0x4 scope:local data:string lbl_1_data_80 = .data:0x00000080; // type:object size:0xC lbl_1_data_8C = .data:0x0000008C; // type:object size:0x18 lbl_1_data_A4 = .data:0x000000A4; // type:object size:0x18 diff --git a/configure.py b/configure.py index 14010b8e..caa5145b 100644 --- a/configure.py +++ b/configure.py @@ -1131,10 +1131,10 @@ config.libs = [ Rel('modeseldll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/modeseldll/main.c"), + Object(Matching, "REL/modeseldll/main.c"), Object(NonMatching, "REL/modeseldll/modesel.c"), Object(NonMatching, "REL/modeseldll/filesel.c"), - Object(NonMatching, "REL/modeseldll/datalist.c"), + Object(Matching, "REL/modeseldll/datalist.c"), } ), Rel('mpexDll', diff --git a/include/REL/modeseldll.h b/include/REL/modeseldll.h new file mode 100644 index 00000000..db80185b --- /dev/null +++ b/include/REL/modeseldll.h @@ -0,0 +1,45 @@ +#ifndef MODESELDLL_H +#define MODESELDLL_H + +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/sprite.h" + +typedef struct datalist_model { + s32 datanum; + u32 attr; + s16 type; + s16 link; + s16 mot_link; + Vec pos; + Vec rot; + Vec scale; +} DataListModel; + +typedef struct datalist_sprite { + u32 datanum; + s16 attr; + s16 prio; + float x; + float y; + GXColor color; +} DataListSprite; + +s32 fn_1_2490(void); +s32 fn_1_37DC(void); + +void fn_1_BED8(DataListModel *model_list); +void fn_1_C168(DataListSprite *sprite_list); +void fn_1_C2BC(void); + +extern s16 lbl_1_bss_19A[24]; +extern s16 lbl_1_bss_16A[24]; +extern s16 lbl_1_bss_152[12]; +extern s16 lbl_1_bss_150; +extern s16 lbl_1_data_100; +extern DataListModel lbl_1_data_428[]; +extern DataListSprite lbl_1_data_93C[]; + +#endif \ No newline at end of file diff --git a/src/REL/modeseldll/datalist.c b/src/REL/modeseldll/datalist.c new file mode 100644 index 00000000..40471638 --- /dev/null +++ b/src/REL/modeseldll/datalist.c @@ -0,0 +1,130 @@ +#include "REL/modeseldll.h" + +s16 lbl_1_bss_19A[24]; +s16 lbl_1_bss_16A[24]; +s16 lbl_1_bss_152[12]; +s16 lbl_1_bss_150; + +DataListModel lbl_1_data_428[] = { + { 0x630000, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630000, 0x1, 2, 0, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630001, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630001, 0x1, 2, 2, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630002, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630002, 0x1, 2, 4, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630003, 0x1, 1, -1, 4, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630004, 0x1, 1, -1, 4, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630005, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630005, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630005, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630006, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630006, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630006, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630026, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630027, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630028, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630029, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x63002A, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x63002B, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x63002C, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x63002D, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x63002E, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x630007, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, +}; + +DataListSprite lbl_1_data_93C[] = { + { 0x630009, 4, 2000, 288, 240, { 255, 255, 255, 255 } }, + { 0x630008, 4, 2000, 288, 100, { 255, 255, 255, 255 } }, + { 0x63000A, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x63000B, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x63000C, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x63001F, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x630020, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x630021, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x630022, 4, 2000, 288, 300, { 255, 255, 255, 255 } }, + { 0x63002F, 4, 2000, 288, 240, { 255, 255, 255, 255 } }, + { 0x63003C, 4, 2000, 288, 240, { 255, 255, 255, 255 } }, + { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } }, +}; + +void fn_1_BED8(DataListModel *model_list) +{ + DataListModel *list; + s16 i; + s16 model; + s16 clear_i; + ModelData *model_ptr; + void *data; + list = model_list; + for(clear_i=0; clear_i<24; clear_i++) { + lbl_1_bss_19A[clear_i] = lbl_1_bss_16A[clear_i] = -1; + } + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 0) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + model = Hu3DModelCreate(data); + lbl_1_bss_19A[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + model_ptr = &Hu3DData[model]; + if(model_ptr->unk_08 != -1) { + lbl_1_bss_16A[i] = model_ptr->unk_08; + } + } else if(list->type == 1) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_16A[i] = Hu3DJointMotion(lbl_1_bss_19A[list->mot_link], data); + + } + (void)i; + } + list = model_list; + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 2) { + model = Hu3DModelLink(lbl_1_bss_19A[list->link]); + lbl_1_bss_19A[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + } + if(list->type == 0 && list->mot_link != -1) { + Hu3DMotionSet(lbl_1_bss_19A[i], lbl_1_bss_16A[list->mot_link]); + } + (void)i; + } +} + +void fn_1_C168(DataListSprite *sprite_list) +{ + DataListSprite *list; + s16 sprite; + s16 clear_i; + s16 i; + list = sprite_list; + for(clear_i=0; clear_i<11; clear_i++) { + lbl_1_bss_152[clear_i] = -1; + } + for(i=0; list->datanum; i++, list++) { + sprite = espEntry(list->datanum, 100, 0); + lbl_1_bss_152[i] = sprite; + espPosSet(sprite, list->x, list->y); + espColorSet(sprite, list->color.r, list->color.g, list->color.b); + espTPLvlSet(sprite, list->color.a/255.0f); + espPriSet(sprite, list->prio); + espAttrSet(sprite, list->attr); + } + HuSprGrpScissorSet(espGrpIDGet(), 0, 16, 640, 448); +} + +void fn_1_C2BC(void) +{ + s16 i; + for(i=0; i<11; i++) { + if(lbl_1_bss_152[i] != -1) { + espKill(lbl_1_bss_152[i]); + } + } +} \ No newline at end of file diff --git a/src/REL/modeseldll/main.c b/src/REL/modeseldll/main.c new file mode 100644 index 00000000..d464464c --- /dev/null +++ b/src/REL/modeseldll/main.c @@ -0,0 +1,366 @@ +#include "game/object.h" +#include "game/hsfman.h" +#include "game/process.h" +#include "game/window.h" +#include "game/objsub.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "math.h" +#include "game/gamework_data.h" +#include "REL/modeseldll.h" +#include "rel_sqrt_consts.h" + +typedef struct camera_view_params { + Vec rot; + Vec pos; + float zoom; +} CameraViewParams; + +CameraViewParams lbl_1_data_0[] = { + { { 0, 0, 0 }, { 0, 0, 0 }, 1500 }, + { { 0, 0, 0 }, { 0, 0, 0 }, 524 } +}; + +omObjData *lbl_1_bss_7C; +Process *lbl_1_bss_78; +s32 lbl_1_bss_70[2]; +Vec lbl_1_bss_64; +Vec lbl_1_bss_58; +float lbl_1_bss_54; +Vec lbl_1_bss_24[4]; +Vec lbl_1_bss_C[2]; +float lbl_1_bss_4[2]; +s32 lbl_1_bss_0; + +void fn_1_414(void); +void fn_1_9F4(void); +void fn_1_AF0(void); +void fn_1_B8C(omObjData *object); +void fn_1_F40(omObjData *object); +void fn_1_1B6C(void); + +void ModuleProlog(void) +{ + s32 light; + OSReport("******* MS ObjectSetup *********\n"); + lbl_1_bss_78 = omInitObjMan(50, 8192); + omGameSysInit(lbl_1_bss_78); + lbl_1_bss_24[0].x = -70; + lbl_1_bss_24[0].y = 0; + lbl_1_bss_24[0].z = 0; + lbl_1_bss_C[0].x = 0; + lbl_1_bss_C[0].y = 130; + lbl_1_bss_C[0].z = -186; + lbl_1_bss_4[0] = 1360; + lbl_1_bss_64 = lbl_1_bss_24[0]; + lbl_1_bss_58 = lbl_1_bss_C[0]; + lbl_1_bss_54 = lbl_1_bss_4[0]; + lbl_1_bss_70[0] = 0; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 30, 20, 8000, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + Hu3DCameraScissorSet(1, 0, 16, 640, 448); + light = Hu3DGLightCreate(0, 100, 1000, 0, -0.5, -1, 255, 255, 255); + Hu3DGLightInfinitytSet(light); + HuPrcChildCreate(fn_1_414, 100, 16384, 0, lbl_1_bss_78); + HuPrcChildCreate(fn_1_AF0, 200, 4096, 0, lbl_1_bss_78); + lbl_1_bss_7C = omAddObjEx(lbl_1_bss_78, 32730, 0, 0, -1, fn_1_B8C); + omAddObjEx(lbl_1_bss_78, 0, 32, 32, -1, fn_1_F40); + Hu3DBGColorSet(0, 0, 0); + mgBoardHostEnableF = 0; + HuWinInit(1); + mgPracticeEnableF = 0; + mgQuitExtraF = 0; +} + +void fn_1_414(void) +{ + fn_1_9F4(); + if(omovlevtno) { + HuAudSeqPlay(43); + } else { + if(!fn_1_37DC()) { + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + HuAudSeqAllFadeOut(1000); + while(WipeStatGet()) { + HuPrcVSleep(); + } + omOvlReturnEx(1, 1); + while(1) { + HuPrcVSleep(); + } + } else { + s16 group = HuSprGrpCreate(1); + s16 sprite = HuTHPSprCreateVol("movie/opmov_s00.thp", 0, 3000, 70.0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + HuSprDrawNoSet(group, 0, 127); + HuPrcSleep(2); + espAttrSet(lbl_1_bss_152[0], 4); + HuAudFXStop(lbl_1_data_100); + while(!HuTHPEndCheck()) { + HuPrcVSleep(); + } + HuTHPClose(); + HuSprGrpKill(group); + } + } + espAttrReset(lbl_1_bss_152[9], 4); + espDrawNoSet(lbl_1_bss_152[9], 127); + { + s16 result = fn_1_2490(); + if(result == -1) { + HuAudSeqAllFadeOut(1000); + WipeColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + + while(WipeStatGet()) { + HuPrcVSleep(); + } + omOvlGotoEx(OVL_MODESEL, 1, 0, 0); + while(1) { + HuPrcVSleep(); + } + } else { + s16 i; + omOvlHisData *his; + for(i=0; i<4; i++) { + GWPlayerCfg[i].pad_idx = i; + if(!HuPadStatGet(i)) { + GWPlayerCfg[i].iscom = 0; + } else { + GWPlayerCfg[i].iscom = 1; + } + } + his = omOvlHisGet(0); + omOvlHisChg(0, his->overlay, 1, his->stat); + _ClearFlag(0x10000); + _ClearFlag(0x10008); + _ClearFlag(0x1000C); + _ClearFlag(0x1000B); + GWGameStat.sound_mode = msmSysGetOutputMode(); + switch(result) { + case 0: + GWMGExplainSet(GWGameStat.party_pause.explain_mg); + GWMGShowComSet(GWGameStat.party_pause.show_com_mg); + GWMGListSet(GWGameStat.party_pause.mg_list); + GWMessSpeedSet(GWGameStat.party_pause.mess_speed); + GWSaveModeSet(GWGameStat.party_pause.save_mode); + omOvlCallEx(OVL_MENT, 1, 0, 0); + break; + + case 1: + GWMGExplainSet(GWGameStat.story_pause.explain_mg); + GWMGShowComSet(GWGameStat.story_pause.show_com_mg); + GWMGListSet(GWGameStat.story_pause.mg_list); + GWMessSpeedSet(GWGameStat.story_pause.mess_speed); + GWSaveModeSet(GWGameStat.story_pause.save_mode); + omOvlCallEx(OVL_MENT, 1, 1, 0); + break; + + case 2: + omOvlCallEx(OVL_MGMODE, 1, 0, 0); + break; + + case 3: + omOvlCallEx(OVL_MENT, 1, 3, 0); + break; + + case 4: + omOvlCallEx(OVL_MENT, 1, 4, 0); + break; + + case 5: + omOvlCallEx(OVL_MPEX, 1, 0, 0); + break; + } + while(1) { + HuPrcVSleep(); + } + } + } +} + +void fn_1_9F4(void) +{ + Vec pos; + Vec target; + Vec up; + Hu3DShadowCreate(20, 100, 5000); + Hu3DShadowTPLvlSet(0.3f); + Hu3DShadowSizeSet(192); + target.x = target.y = target.z = 0; + pos.x = 500; + pos.z = 1000; + pos.y = 2000; + up.x = 0; + up.y = 1; + up.z = 0; + Hu3DShadowPosSet(&pos, &up, &target); + fn_1_BED8(lbl_1_data_428); + fn_1_C168(lbl_1_data_93C); +} + +void fn_1_AF0(void) +{ + s16 i; + while(1) { + if(lbl_1_bss_70[0] || omSysExitReq) { + break; + } + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = -1; + } + BoardStatusKill(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + +u16 lbl_1_data_6E[] = { 1, 2 }; + +void fn_1_B8C(omObjData *object) +{ + s16 i; + for(i=0; i<1; i++) { + Vec pos, target, up; + float x, y, z; + + x = lbl_1_bss_24[i].x; + y = lbl_1_bss_24[i].y; + z = lbl_1_bss_24[i].z; + + pos.x = (((sin((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_4[i])+lbl_1_bss_C[i].x); + pos.y = (-sin((M_PI*x)/180.0)*lbl_1_bss_4[i])+lbl_1_bss_C[i].y; + pos.z = ((cos((M_PI*y)/180.0)*cos((M_PI*x)/180.0))*lbl_1_bss_4[i])+lbl_1_bss_C[i].z; + target.x = lbl_1_bss_C[i].x; + target.y = lbl_1_bss_C[i].y; + target.z = lbl_1_bss_C[i].z; + up.x = sin((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + up.y = cos((M_PI*x)/180.0); + up.z = cos((M_PI*y)/180.0)*sin((M_PI*x)/180.0); + Hu3DCameraPosSet(lbl_1_data_6E[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } +} + +void fn_1_F40(omObjData *object) +{ + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + + if (!lbl_1_bss_0) { + fn_1_1B6C(); + return; + } + lbl_1_bss_24[0].y += 0.1f * HuPadStkX[0]; + lbl_1_bss_24[0].x += 0.1f * HuPadStkY[0]; + lbl_1_bss_4[0] += HuPadTrigL[0] / 2; + lbl_1_bss_4[0] -= HuPadTrigR[0] / 2; + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + OSReport("%f,%f,%f\n", lbl_1_bss_24[0].x, lbl_1_bss_24[0].y, lbl_1_bss_24[0].z); + OSReport("%f,%f,%f\n", lbl_1_bss_C[0].x, lbl_1_bss_C[0].y, lbl_1_bss_C[0].z); + OSReport("%f\n", lbl_1_bss_4[0]); + } + if (lbl_1_bss_4[0] < 100.0f) { + lbl_1_bss_4[0] = 100.0f; + } + pos.x = lbl_1_bss_C[0].x + (lbl_1_bss_4[0] * (sin((M_PI * lbl_1_bss_24[0].y) / 180.0) * cos((M_PI * lbl_1_bss_24[0].x) / 180.0))); + pos.y = (lbl_1_bss_C[0].y + (lbl_1_bss_4[0] * -sin((M_PI * lbl_1_bss_24[0].x) / 180.0))); + pos.z = (lbl_1_bss_C[0].z + (lbl_1_bss_4[0] * (cos((M_PI * lbl_1_bss_24[0].y) / 180.0) * cos((M_PI * lbl_1_bss_24[0].x) / 180.0)))); + offset.x = lbl_1_bss_C[0].x - pos.x; + offset.y = lbl_1_bss_C[0].y - pos.y; + offset.z = lbl_1_bss_C[0].z - pos.z; + dir.x = (sin((M_PI * lbl_1_bss_24[0].y) / 180.0) * sin((M_PI * lbl_1_bss_24[0].x) / 180.0)); + dir.y = cos((M_PI * lbl_1_bss_24[0].x) / 180.0); + dir.z = (cos((M_PI * lbl_1_bss_24[0].y) / 180.0) * sin((M_PI * lbl_1_bss_24[0].x) / 180.0)); + z_rot = lbl_1_bss_24[0].z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cos((M_PI * z_rot) / 180.0)) + + dir.y * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.x * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.y * sin((M_PI * z_rot) / 180.0)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cos((M_PI * z_rot) / 180.0)) + + dir.x * (offset.x * offset.y * (1.0f - cos((M_PI * z_rot) / 180.0)) + offset.z * sin((M_PI * z_rot) / 180.0)) + + dir.z * (offset.y * offset.z * (1.0f - cos((M_PI * z_rot) / 180.0)) - offset.x * sin((M_PI * z_rot) / 180.0)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cos((M_PI * z_rot) / 180.0)) + + (dir.x * (offset.x * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) - offset.y * sin((M_PI * z_rot) / 180.0)) + + dir.y * (offset.y * offset.z * (1.0 - cos((M_PI * z_rot) / 180.0)) + offset.x * sin((M_PI * z_rot) / 180.0))); + + PSVECCrossProduct(&dir, &offset, &offset); + PSVECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_C[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_C[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_C[0].z += 0.05f * (offset.z * stick_pos); + } + PSVECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_C[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_C[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_C[0].z += 0.05f * (offset.z * stick_pos); + } +} + +void fn_1_1B6C(void) +{ + Vec delta_vec; + float delta_zoom; + if(lbl_1_bss_70[0]) { + return; + } + VECSubtract(&lbl_1_bss_64, &lbl_1_bss_24[0], &delta_vec); + if(VECMag(&delta_vec) > 0.2) { + VECScale(&delta_vec, &delta_vec, 0.05f); + VECAdd(&lbl_1_bss_24[0], &delta_vec, &lbl_1_bss_24[0]); + } else { + lbl_1_bss_24[0] = lbl_1_bss_64; + } + VECSubtract(&lbl_1_bss_58, &lbl_1_bss_C[0], &delta_vec); + if(VECMag(&delta_vec) > 0.2) { + VECScale(&delta_vec, &delta_vec, 0.05f); + VECAdd(&lbl_1_bss_C[0], &delta_vec, &lbl_1_bss_C[0]); + } else { + lbl_1_bss_C[0] = lbl_1_bss_58; + } + delta_zoom = lbl_1_bss_54-lbl_1_bss_4[0]; + if(sqrtf(delta_zoom*delta_zoom) > 0.2) { + delta_zoom *= 0.05f; + lbl_1_bss_4[0] += delta_zoom; + } else { + lbl_1_bss_4[0] = lbl_1_bss_54; + } +} + +void fn_1_1E30(s16 view) +{ + lbl_1_bss_64 = lbl_1_data_0[view].rot; + lbl_1_bss_58 = lbl_1_data_0[view].pos; + lbl_1_bss_54 = lbl_1_data_0[view].zoom; +} + +void fn_1_1EC0(s16 view) +{ + s16 i; + lbl_1_bss_24[0] = lbl_1_data_0[view].rot; + lbl_1_bss_64 = lbl_1_bss_24[0]; + lbl_1_bss_C[0] = lbl_1_data_0[view].pos; + lbl_1_bss_58 = lbl_1_bss_C[0]; + lbl_1_bss_54 = lbl_1_bss_4[0] = lbl_1_data_0[view].zoom; + fn_1_B8C(NULL); +} + +float fn_1_2368(void) +{ + float delta_zoom = lbl_1_bss_54-lbl_1_bss_4[0]; + return sqrtf(delta_zoom*delta_zoom); +} \ No newline at end of file