diff --git a/config/GMPE01_00/rels/mgmodedll/splits.txt b/config/GMPE01_00/rels/mgmodedll/splits.txt index a4f47392..03ca2331 100644 --- a/config/GMPE01_00/rels/mgmodedll/splits.txt +++ b/config/GMPE01_00/rels/mgmodedll/splits.txt @@ -43,7 +43,7 @@ REL/mgmodedll/main.c: .text start:0x00018DF8 end:0x000267E8 .rodata start:0x000005B0 end:0x00000718 .data start:0x000001E0 end:0x00000490 - .bss start:0x000003C0 end:0x00002C9A + .bss start:0x000003C0 end:0x000020A8 REL/mgmodedll/datalist.c: .text start:0x000267E8 end:0x00026C28 @@ -54,3 +54,4 @@ REL/mgmodedll/minigame.c: .text start:0x00026C28 end:0x00027CF0 .rodata start:0x00000728 end:0x00000790 .data start:0x000009C0 end:0x00000A02 + .bss start:0x000020A8 end:0x00002C9A diff --git a/config/GMPE01_00/rels/mgmodedll/symbols.txt b/config/GMPE01_00/rels/mgmodedll/symbols.txt index 227d63cf..57287710 100644 --- a/config/GMPE01_00/rels/mgmodedll/symbols.txt +++ b/config/GMPE01_00/rels/mgmodedll/symbols.txt @@ -184,9 +184,9 @@ lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0xC data:4byte -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0xC data:4byte -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0xC data:4byte +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0xC data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0xC data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0xC data:float lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float @@ -447,8 +447,8 @@ lbl_1_rodata_6FC = .rodata:0x000006FC; // type:object size:0x4 data:float lbl_1_rodata_700 = .rodata:0x00000700; // type:object size:0x4 data:float lbl_1_rodata_708 = .rodata:0x00000708; // type:object size:0x8 data:double lbl_1_rodata_710 = .rodata:0x00000710; // type:object size:0x8 data:float -lbl_1_rodata_718 = .rodata:0x00000718; // type:object size:0x4 data:float -lbl_1_rodata_720 = .rodata:0x00000720; // type:object size:0x8 data:double +lbl_1_rodata_718 = .rodata:0x00000718; // type:object size:0x4 scope:local data:float +lbl_1_rodata_720 = .rodata:0x00000720; // type:object size:0x8 scope:local data:double lbl_1_rodata_728 = .rodata:0x00000728; // type:object size:0x4 data:float lbl_1_rodata_72C = .rodata:0x0000072C; // type:object size:0x4 data:float lbl_1_rodata_730 = .rodata:0x00000730; // type:object size:0x4 data:float @@ -466,8 +466,8 @@ lbl_1_rodata_780 = .rodata:0x00000780; // type:object size:0x8 data:double lbl_1_rodata_788 = .rodata:0x00000788; // type:object size:0x4 data:float lbl_1_rodata_78C = .rodata:0x0000078C; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x1C -lbl_1_data_1C = .data:0x0000001C; // type:object size:0x24 -lbl_1_data_40 = .data:0x00000040; // type:object size:0x30 data:4byte +lbl_1_data_1C = .data:0x0000001C; // type:object size:0x22 data:string +lbl_1_data_40 = .data:0x00000040; // type:object size:0x30 data:float lbl_1_data_70 = .data:0x00000070; // type:object size:0x16 data:string lbl_1_data_86 = .data:0x00000086; // type:object size:0x6 lbl_1_data_8C = .data:0x0000008C; // type:object size:0x4 @@ -509,7 +509,7 @@ lbl_1_data_36C = .data:0x0000036C; // type:object size:0x60 lbl_1_data_3CC = .data:0x000003CC; // type:object size:0x18 data:4byte lbl_1_data_3E4 = .data:0x000003E4; // type:object size:0x64 lbl_1_data_448 = .data:0x00000448; // type:object size:0x40 -lbl_1_data_488 = .data:0x00000488; // type:object size:0x8 data:4byte +lbl_1_data_488 = .data:0x00000488; // type:object size:0x4 data:4byte lbl_1_data_490 = .data:0x00000490; // type:object size:0x2D8 lbl_1_data_768 = .data:0x00000768; // type:object size:0x258 lbl_1_data_9C0 = .data:0x000009C0; // type:object size:0x20 @@ -522,13 +522,15 @@ lbl_1_bss_26C = .bss:0x0000026C; // type:object size:0x8 data:float lbl_1_bss_274 = .bss:0x00000274; // type:object size:0x18 data:4byte lbl_1_bss_28C = .bss:0x0000028C; // type:object size:0x18 data:4byte lbl_1_bss_2A4 = .bss:0x000002A4; // type:object size:0x2 data:2byte -lbl_1_bss_2A6 = .bss:0x000002A6; // type:object size:0xA data:2byte +lbl_1_bss_2A6 = .bss:0x000002A6; // type:object size:0x2 data:2byte +lbl_1_bss_2A8 = .bss:0x000002A8; // type:object size:0x8 data:2byte lbl_1_bss_2B0 = .bss:0x000002B0; // type:object size:0x4 data:float lbl_1_bss_2B4 = .bss:0x000002B4; // type:object size:0xC data:4byte lbl_1_bss_2C0 = .bss:0x000002C0; // type:object size:0xC data:4byte lbl_1_bss_2CC = .bss:0x000002CC; // type:object size:0x2 data:2byte lbl_1_bss_2CE = .bss:0x000002CE; // type:object size:0x2 data:2byte -lbl_1_bss_2D0 = .bss:0x000002D0; // type:object size:0x8 data:4byte +lbl_1_bss_2D0 = .bss:0x000002D0; // type:object size:0x4 data:4byte +lbl_1_bss_2D4 = .bss:0x000002D4; // type:object size:0x4 data:4byte lbl_1_bss_2D8 = .bss:0x000002D8; // type:object size:0x4 data:4byte lbl_1_bss_2DC = .bss:0x000002DC; // type:object size:0x4 data:4byte lbl_1_bss_2E2 = .bss:0x000002E2; // type:object size:0x2 data:2byte @@ -568,7 +570,8 @@ lbl_1_bss_3C8 = .bss:0x000003C8; // type:object size:0x4 data:4byte lbl_1_bss_3CC = .bss:0x000003CC; // type:object size:0x1A40 lbl_1_bss_1E0C = .bss:0x00001E0C; // type:object size:0x4 data:4byte lbl_1_bss_1E10 = .bss:0x00001E10; // type:object size:0x240 data:4byte -lbl_1_bss_2050 = .bss:0x00002050; // type:object size:0x5A +lbl_1_bss_2050 = .bss:0x00002050; // type:object size:0x58 data:4byte +lbl_1_bss_20A8 = .bss:0x000020A8; // type:object size:0x2 data:2byte lbl_1_bss_20AA = .bss:0x000020AA; // type:object size:0x2 data:2byte lbl_1_bss_20AC = .bss:0x000020AC; // type:object size:0x14 data:2byte lbl_1_bss_20C0 = .bss:0x000020C0; // type:object size:0x578 diff --git a/configure.py b/configure.py index 1a02fc7c..08d6561b 100644 --- a/configure.py +++ b/configure.py @@ -1331,14 +1331,14 @@ config.libs = [ "mgmodedll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/mgmodedll/mgmode.c"), + Object(Matching, "REL/mgmodedll/mgmode.c"), Object(NonMatching, "REL/mgmodedll/free_play.c"), Object(NonMatching, "REL/mgmodedll/record.c"), Object(NonMatching, "REL/mgmodedll/battle.c"), Object(NonMatching, "REL/mgmodedll/tictactoe.c"), Object(NonMatching, "REL/mgmodedll/main.c"), - Object(NonMatching, "REL/mgmodedll/datalist.c"), - Object(NonMatching, "REL/mgmodedll/minigame.c"), + Object(Matching, "REL/mgmodedll/datalist.c"), + Object(Matching, "REL/mgmodedll/minigame.c"), }, ), Rel( diff --git a/include/REL/mgmodedll.h b/include/REL/mgmodedll.h new file mode 100644 index 00000000..31959a41 --- /dev/null +++ b/include/REL/mgmodedll.h @@ -0,0 +1,91 @@ +#ifndef MGMODEDLL_H +#define MGMODEDLL_H + +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/object.h" +#include "game/objsub.h" + +#include "game/sprite.h" +#include "game/window.h" +#include "game/pad.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; + +typedef struct struct_bss8_24 { + u8 unk0[0x5C]; + s32 unk5C; + s32 unk60; + s32 unk64; + s32 unk68; + s32 unk6C; + u8 unk70[0x20]; +} StructBss8_24; + +typedef struct struct_bss8 { + s32 unk0; + s32 unk4; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1C; + s32 unk20; + StructBss8_24 unk24[4]; +} StructBss8; + +extern s16 lbl_1_bss_2C80[13]; +extern s16 lbl_1_bss_2C66[13]; +extern s16 lbl_1_bss_2C2C[29]; +extern s16 lbl_1_bss_20C0[10][70]; +extern s16 lbl_1_bss_20AC[10]; +extern StructBss8 lbl_1_bss_8; + +extern s16 lbl_1_data_A2[]; +extern DataListModel lbl_1_data_490[]; +extern DataListSprite lbl_1_data_768[]; + +s32 fn_1_6D28(void); +void fn_1_D8D0(void); +s32 fn_1_E72C(void); +s32 fn_1_13418(void); + +void fn_1_18DF8(Process *arg0, StructBss8 *arg1); + +void fn_1_19018(void); +s32 fn_1_194C8(s32 arg0); + +void fn_1_25584(s16 arg0); +s32 fn_1_2530C(s32 arg0, s32 arg1, s32 arg2); +void fn_1_25838(s16 arg0, u32 arg1, s32 arg2, s32 arg3); +s32 fn_1_2592C(u32 arg0, s32 arg1, s32 arg2); +s32 fn_1_25CA8(u32 arg0); +void fn_1_25E74(s16 arg0); + +void fn_1_267E8(DataListModel *model_list); +void fn_1_26A78(DataListSprite *sprite_list); +void fn_1_26C28(void); + +void fn_1_279FC(s32 coinSkipF); + +#endif \ No newline at end of file diff --git a/src/REL/mgmodedll/datalist.c b/src/REL/mgmodedll/datalist.c new file mode 100644 index 00000000..8afb7b0a --- /dev/null +++ b/src/REL/mgmodedll/datalist.c @@ -0,0 +1,131 @@ +#include "REL/mgmodedll.h" + +DataListModel lbl_1_data_490[] = { + { 0x620000, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620001, 0x40000001, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620002, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620003, 0, 1, -1, 2, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620004, 0, 1, -1, 2, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x62005E, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x62005F, 0, 1, -1, 5, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620060, 0, 1, -1, 5, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620061, 0, 1, -1, 5, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620005, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620006, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620007, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x620008, 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_768[] = { + { 0x62000C, 0, 10, 288, -200, { 255, 255, 255, 255 } }, + { 0x620009, 0, 10, 288, -200, { 255, 255, 255, 255 } }, + { 0x62000A, 0, 10, 288, -200, { 255, 255, 255, 255 } }, + { 0x62000D, 4, 100, 288, 240, { 255, 255, 255, 255 } }, + { 0x620018, 4, 200, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001A, 4, 20, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001B, 4, 30, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001C, 4, 40, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001D, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001E, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x62001F, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x620020, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x620021, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x620025, 4, 200, 288, 240, { 255, 255, 255, 255 } }, + { 0x62000E, 4, 210, 288, 240, { 255, 255, 255, 255 } }, + { 0x62000F, 4, 210, 288, 240, { 255, 255, 255, 255 } }, + { 0x620019, 4, 200, 288, 240, { 255, 255, 255, 255 } }, + { 0x620028, 4, 10, 288, 240, { 255, 255, 255, 255 } }, + { 0x620028, 4, 10, 288, 240, { 255, 255, 255, 255 } }, + { 0x62002A, 4, 10, 288, 240, { 255, 255, 255, 255 } }, + { 0x62002E, 4, 200, 288, 240, { 255, 255, 255, 255 } }, + { 0x62002F, 4, 200, 288, 240, { 255, 255, 255, 255 } }, + { 0x620032, 4, 5, 288, 240, { 255, 255, 255, 255 } }, + { 0x620031, 4, 4, 288, 240, { 255, 255, 255, 255 } }, + { 0x620030, 4, 4, 288, 240, { 255, 255, 255, 255 } }, + { 0x620029, 4, 4, 288, 240, { 255, 255, 255, 255 } }, + { 0x620029, 4, 4, 288, 240, { 255, 255, 255, 255 } }, + { 0x620033, 4, 50, 288, 240, { 255, 255, 255, 255 } }, + { 0x620034, 4, 50, 288, 256, { 255, 255, 255, 255 } }, + { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } }, +}; + +void fn_1_267E8(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<13; clear_i++) { + lbl_1_bss_2C80[clear_i] = lbl_1_bss_2C66[clear_i] = -1; + } + for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) { + if(list->type == 0) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + model = Hu3DModelCreate(data); + lbl_1_bss_2C80[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_2C66[i] = model_ptr->unk_08; + } + } else if(list->type == 1) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_2C66[i] = Hu3DJointMotion(lbl_1_bss_2C80[list->mot_link], data); + + } + (void)i; + } + list = model_list; + for(i=0; list->datanum != DATA_NUM_LISTEND; list++, i++) { + if(list->type == 2) { + model = Hu3DModelLink(lbl_1_bss_2C80[list->link]); + lbl_1_bss_2C80[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_2C80[i], lbl_1_bss_2C66[list->mot_link]); + } + (void)i; + } +} + +void fn_1_26A78(DataListSprite *sprite_list) +{ + DataListSprite *list; + s16 sprite; + s16 clear_i; + s16 i; + list = sprite_list; + for(clear_i=0; clear_i<29; clear_i++) { + lbl_1_bss_2C2C[clear_i] = -1; + } + for(i=0; list->datanum; i++, list++) { + sprite = espEntry(list->datanum, 100, 0); + lbl_1_bss_2C2C[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); + } +} + +void fn_1_26BB0(void) +{ + s16 i; + for(i=0; i<29; i++) { + if(lbl_1_bss_2C2C[i] != -1) { + espKill(lbl_1_bss_2C2C[i]); + } + } +} \ No newline at end of file diff --git a/src/REL/mgmodedll/mgmode.c b/src/REL/mgmodedll/mgmode.c new file mode 100644 index 00000000..763a8cd3 --- /dev/null +++ b/src/REL/mgmodedll/mgmode.c @@ -0,0 +1,1340 @@ +#include "REL/mgmodedll.h" +#include "game/gamework_data.h" +#include "game/esprite.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/saveload.h" + +#include "rel_sqrt_consts.h" +#include "ext_math.h" + +typedef struct camera_view_params { + Vec rot; + Vec pos; + float zoom; +} CameraViewParams; + +CameraViewParams lbl_1_data_0[1] = { + { + { -5, 0, 0 }, + { 0, 125, 0 }, + 1750 + } +}; + +omObjData *lbl_1_bss_2DC; +Process *lbl_1_bss_2D8; +s32 lbl_1_bss_2D4; +s32 lbl_1_bss_2D0; +s16 lbl_1_bss_2CE; +s16 lbl_1_bss_2CC; +Vec lbl_1_bss_2C0; +Vec lbl_1_bss_2B4; +float lbl_1_bss_2B0; +s16 lbl_1_bss_2A8[4]; +s16 lbl_1_bss_2A6; +s16 lbl_1_bss_2A4; +Vec lbl_1_bss_28C[2]; +Vec lbl_1_bss_274[2]; +float lbl_1_bss_26C[2]; +StructBss8 lbl_1_bss_8; +s16 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void fn_1_464(void); +void fn_1_54F4(void); + +void ObjectSetup(void) +{ + s32 glight; + + OSReport("******* MG ObjectSetup *********\n"); + lbl_1_bss_2D8 = omInitObjMan(50, 8192); + lbl_1_bss_28C[0].x = -70; + lbl_1_bss_28C[0].y = 0; + lbl_1_bss_28C[0].z = 0; + lbl_1_bss_274[0].x = 0; + lbl_1_bss_274[0].y = 130; + lbl_1_bss_274[0].z = -186; + lbl_1_bss_26C[0] = 1360; + lbl_1_bss_2C0 = lbl_1_bss_28C[0]; + lbl_1_bss_2B4 = lbl_1_bss_274[0]; + lbl_1_bss_2B0 = lbl_1_bss_26C[0]; + lbl_1_bss_2D0 = 0; + _ClearFlag(0x10000); + _ClearFlag(0x10008); + GWSystem.mg_type = -1; + GWSystem.player_curr = 0; + lbl_1_bss_4 = omovlevtno; + if(lbl_1_bss_4 == 0) { + mgGameStatBackup = GWGameStat; + } + lbl_1_bss_2CE = -1; + mgBoardHostEnableF = 1; + mgPracticeEnableF = 0; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 42, 20, 15000, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + glight = Hu3DGLightCreate(0, 100, 1000, 0, -0.5, -1, 255, 255, 255); + Hu3DGLightInfinitytSet(glight); + HuPrcChildCreate(fn_1_464, 100, 12288, 0, lbl_1_bss_2D8); + HuPrcChildCreate(fn_1_54F4, 200, 4096, 0, lbl_1_bss_2D8); + lbl_1_bss_2DC = omAddObjEx(lbl_1_bss_2D8, 32730, 0, 0, -1, omOutView); + Hu3DBGColorSet(0, 0, 0); + HuWinInit(1); + fn_1_279FC(0); +} + +void fn_1_52DC(void); + +void fn_1_6F8(void); + +void fn_1_464(void) +{ + s16 i; + fn_1_52DC(); + if(lbl_1_bss_4 == 0) { + HuAudSStreamPlay(12); + fn_1_19018(); + } else { + HuAudSeqPlay(44); + for(i=0; i<4; i++) { + lbl_1_bss_8.unk24[i].unk68 = GWPlayerCfg[i].character; + lbl_1_bss_8.unk24[i].unk60 = GWPlayerCfg[i].iscom; + lbl_1_bss_8.unk24[i].unk6C = GWPlayerCfg[i].pad_idx; + lbl_1_bss_8.unk24[i].unk64 = GWPlayerCfg[i].diff; + } + CZoom = 1600; + Center.x = Center.z = 0; + Center.y = 215; + CRot.x = 0; + CRot.y = CRot.z = 0; + if(lbl_1_bss_4 == 1 || lbl_1_bss_4 == 2 || lbl_1_bss_4 == 3 || lbl_1_bss_4 == 4) { + Hu3DModelPosSet(lbl_1_bss_2C80[5], 0, 0, 640); + Hu3DMotionSet(lbl_1_bss_2C80[5], lbl_1_bss_2C66[6]); + Hu3DModelAttrSet(lbl_1_bss_2C80[5], 0x40000001); + HuPrcVSleep(); + } + } + fn_1_6F8(); + fn_1_2592C(0x1E0035, 3, 0); + fn_1_25584(lbl_1_bss_2CE); + while(1) { + HuPrcVSleep(); + } +} + +Vec lbl_1_data_40[4] = { + { 108, 190, 0 }, + { 228, 190, 0 }, + { 348, 190, 0 }, + { 468, 190, 0 }, +}; + +void fn_1_DF0(void); +void fn_1_38D8(void); +void fn_1_4010(void); + +s32 fn_1_487C(void); +void fn_1_4ADC(void); + +void fn_1_6F8(void) +{ + s16 i; + s16 time; + if(lbl_1_bss_4 == 1 || lbl_1_bss_4 == 2 || lbl_1_bss_4 == 3 || lbl_1_bss_4 == 4) { + lbl_1_bss_2A6 = 0; + goto freeplay; + } + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_2C80[9], 0); + for(time=0; time<=30; time++) { + for(i=0; i<4; i++) { + if(time > i*2 && time < (i*2)+20) { + float weight = (time-(i*2))/20.0; + Vec pos2D = lbl_1_data_40[i]; + Vec pos3D; + pos2D.z = 800; + pos2D.y -= (1.0-sind(weight*90.0f))*300.0; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + HuPrcVSleep(); + } + while(1) { + if(lbl_1_bss_2CE == -1) { + lbl_1_bss_2CE = fn_1_2530C(0, 0, 0); + } + HuWinPushKeySet(lbl_1_bss_2CE, PAD_BUTTON_A|PAD_BUTTON_B); + HuWinMesSpeedSet(lbl_1_bss_2CE, 1); + HuAudFXPlay(68); + fn_1_25838(lbl_1_bss_2CE, 0x280001, -1, -1); + lbl_1_bss_2CC = fn_1_25CA8(0x280018); + lbl_1_bss_2A6 = 0; + espPosSet(lbl_1_bss_2C2C[0], -20+lbl_1_data_40[lbl_1_bss_2A6].x, -10+lbl_1_data_40[lbl_1_bss_2A6].y); + espAttrReset(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + HuWinMesSpeedSet(lbl_1_bss_2CE, 0); + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A6+0x280002, -1, -999); + while(1) { + s16 delta = 0; + if((HuPadDStkRep[0] & PAD_BUTTON_LEFT) && lbl_1_bss_2A6 > 0) { + delta = -1; + } else if((HuPadDStkRep[0] & PAD_BUTTON_RIGHT) && lbl_1_bss_2A6 < 3) { + delta = 1; + } + if(delta != 0) { + HuAudFXPlay(0); + lbl_1_bss_2A6 += delta; + espPosSet(lbl_1_bss_2C2C[0], -20+lbl_1_data_40[lbl_1_bss_2A6].x, -10+lbl_1_data_40[lbl_1_bss_2A6].y); + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A6+0x280002, -1, -999); + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + HuAudFXPlay(2); + if(lbl_1_bss_2A6 != 2) { + break; + } + if(fn_1_487C() == 0) { + continue; + } + break; + } + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + s16 choice; + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + fn_1_25838(lbl_1_bss_2CE, 0x280006, -1, -1); + choice = HuWinChoiceGet(lbl_1_bss_2CE, 1); + if(choice != 0) { + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A6+0x280002, -1, -999); + espAttrReset(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + continue; + } else { + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2D0 = 1; + while(1) { + HuPrcVSleep(); + } + } + } + HuPrcVSleep(); + } + fn_1_25E74(lbl_1_bss_2CC); + lbl_1_bss_4 = 0; + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + if(lbl_1_bss_2A6 == 0) { + freeplay: + fn_1_DF0(); + } else if(lbl_1_bss_2A6 == 1) { + fn_1_38D8(); + } else if(lbl_1_bss_2A6 == 2) { + fn_1_4010(); + } else if(lbl_1_bss_2A6 == 3) { + fn_1_4ADC(); + } + + } + + +} + +s32 fn_1_1B0C(void); +s32 fn_1_21C4(void); +s32 fn_1_2940(void); +s32 fn_1_3150(void); + +void fn_1_DF0(void) +{ + s16 exitF = 0; + s16 time; + s16 i; + ModelData *modelP; + Vec pos2D; + Vec pos3D; + + Vec posModel; + float weight; + + if(lbl_1_bss_4 == 1) { + lbl_1_bss_2A4 = 0; + goto freeplay; + } + if(lbl_1_bss_4 == 2) { + lbl_1_bss_2A4 = 1; + goto teamplay; + } + if(lbl_1_bss_4 == 3) { + lbl_1_bss_2A4 = 2; + goto battle; + } + if(lbl_1_bss_4 == 4) { + lbl_1_bss_2A4 = 3; + goto tictactoe; + } + pos2D.x = 168; + pos2D.y = 190; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(time=0; time<=30; time++) { + for(i=1; i<4; i++) { + if(time > i*2 && time < (i*2)+10) { + Vec pos; + weight = (time-(i*2))/10.0; + pos = lbl_1_data_40[i]; + pos.z = 800; + pos.x += (1.0-cosd(weight*90.0f))*500.0; + Hu3D2Dto3D(&pos, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + if(time > 10) { + weight = (time-10)/20.0; + VECScale(&pos2D, &pos3D, sind(weight*90.0f)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + } + if(time == 20) { + HuAudFXPlay(2173); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000006); + } + HuPrcVSleep(); + } + while(Hu3DMotionEndCheck(lbl_1_bss_2C80[9]) == 0) { + HuPrcVSleep(); + } + while(1) { + HuWinMesSpeedSet(lbl_1_bss_2CE, 1); + HuAudFXPlay(68); + fn_1_25838(lbl_1_bss_2CE, 0x280007, -1, -1); + lbl_1_bss_2CC = fn_1_25CA8(0x1A0020); + fn_1_25838(lbl_1_bss_2CE, 0x280008, -1, -999); + espAttrReset(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + lbl_1_bss_2A4 = 0; + espPosSet(lbl_1_bss_2C2C[0], -20+(168.0f+(lbl_1_bss_2A4*80)), 180); + while(1) { + s16 delta = 0; + if((HuPadDStkRep[0] & PAD_BUTTON_LEFT) && lbl_1_bss_2A4 > 0) { + delta = -1; + } else if((HuPadDStkRep[0] & PAD_BUTTON_RIGHT) && lbl_1_bss_2A4 < 3) { + delta = 1; + } + if(delta != 0) { + HuAudFXPlay(0); + lbl_1_bss_2A4 += delta; + espPosSet(lbl_1_bss_2C2C[0], -20+(168.0f+(lbl_1_bss_2A4*80)), 180); + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A4+0x280008, -1, -999); + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + HuAudFXPlay(2); + if(lbl_1_bss_2A4 == 0 && lbl_1_bss_20AC[0] == 0 && lbl_1_bss_20AC[1] == 0 && lbl_1_bss_20AC[2] == 0 && lbl_1_bss_20AC[3] == 0 && lbl_1_bss_20AC[4] == 0) { + fn_1_25838(lbl_1_bss_2CE, 0x280031, -1, -1); + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A4+0x280008, -1, -999); + continue; + } + if(lbl_1_bss_2A4 == 2 && lbl_1_bss_20AC[0] == 0 && lbl_1_bss_20AC[1] == 0 && lbl_1_bss_20AC[2] == 0 && lbl_1_bss_20AC[4] == 0) { + fn_1_25838(lbl_1_bss_2CE, 0x280033, -1, -1); + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A4+0x280008, -1, -999); + continue; + } + if((lbl_1_bss_2A4 == 1 || lbl_1_bss_2A4 == 3) && lbl_1_bss_20AC[2] == 0) { + if(lbl_1_bss_2A4 == 1) { + fn_1_25838(lbl_1_bss_2CE, 0x280032, -1, -1); + } else { + fn_1_25838(lbl_1_bss_2CE, 0x28002F, -1, -1); + } + fn_1_25838(lbl_1_bss_2CE, lbl_1_bss_2A4+0x280008, -1, -999); + continue; + } + break; + } + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + HuAudFXPlay(3); + exitF = 1; + break; + } + HuPrcVSleep(); + } + fn_1_25E74(lbl_1_bss_2CC); + if(exitF != 0) { + break; + } + if(lbl_1_bss_2A4 == 0) { + freeplay: + fn_1_1B0C(); + } else if(lbl_1_bss_2A4 == 1) { + teamplay: + fn_1_21C4(); + } else if(lbl_1_bss_2A4 == 2) { + battle: + fn_1_2940(); + } else if(lbl_1_bss_2A4 == 3) { + tictactoe: + fn_1_3150(); + } + if(lbl_1_bss_2CE == -1) { + lbl_1_bss_2CE = fn_1_2530C(0, 0, 0); + } + HuWinPushKeySet(lbl_1_bss_2CE, PAD_BUTTON_A|PAD_BUTTON_B); + } + lbl_1_bss_4 = 0; + pos2D = lbl_1_data_40[0]; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000004); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + HuAudFXPlay(2174); + for(time=0; time<=20; time++) { + VECScale(&pos2D, &pos3D, sind(time*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + HuPrcVSleep(); + } + for(time=0; time<=20; time++) { + for(i=1; i<4; i++) { + if(time > i*2 && time < (i*2)+10) { + weight = (time-(i*2))/10.0; + pos2D = lbl_1_data_40[i]; + pos2D.z = 800; + pos2D.x += (1.0-sind(weight*90.0f))*500.0; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + HuPrcVSleep(); + } +} + +s32 fn_1_1B0C(void) +{ + Vec pos2D; + Vec posModel; + Vec pos3D; + s16 i; + ModelData *modelP; + s16 temp_r29 = 0; + + if(lbl_1_bss_4 == 1) { + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], -90, 0, 0); + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 1); + } else { + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000004); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000002); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + HuAudFXPlay(2174); + HuPrcSleep(40); + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(i=0; i<=20; i++) { + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], -90.0*(i/20.0), 0, 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } + charsel: + if(fn_1_194C8(temp_r29) == 0) { + goto exit; + } + temp_r29 = 4; + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = lbl_1_bss_8.unk24[i].unk68; + GWPlayerCfg[i].iscom = lbl_1_bss_8.unk24[i].unk60; + GWPlayerCfg[i].diff = lbl_1_bss_8.unk24[i].unk64; + } + } + mgPracticeEnableF = 1; + if(fn_1_6D28()) { + lbl_1_bss_4 = 0; + goto charsel; + } + exit: + mgPracticeEnableF = 0; + lbl_1_bss_4 = 0; + pos2D.x = 168; + pos2D.y = 190; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000006); + for(i=0; i<=20; i++) { + if(i == 10) { + HuAudFXPlay(2173); + } + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], -90.0*(1-(i/20.0)), 0, 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } +} + +s32 fn_1_21C4(void) +{ + Vec pos2D; + Vec posModel; + Vec pos3D; + s16 i; + ModelData *modelP; + s16 temp_r29 = 1; + if(lbl_1_bss_4 == 2) { + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 0, -90, 90); + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 1); + } else { + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000004); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000002); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + HuAudFXPlay(2174); + HuPrcSleep(40); + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(i=0; i<=20; i++) { + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 0, -90.0*(i/20.0), 90.0*(i/20.0)); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } + charsel: + if(fn_1_194C8(temp_r29) == 0) { + goto exit; + } + temp_r29 = 4; + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = lbl_1_bss_8.unk24[i].unk68; + GWPlayerCfg[i].group = lbl_1_bss_8.unk24[i].unk5C; + GWPlayerCfg[i].diff = lbl_1_bss_8.unk24[i].unk64; + GWPlayerCfg[i].iscom = lbl_1_bss_8.unk24[i].unk60; + + } + } + mgPracticeEnableF = 1; + if(fn_1_6D28()) { + lbl_1_bss_4 = 0; + goto charsel; + } + exit: + mgPracticeEnableF = 0; + lbl_1_bss_4 = 0; + pos2D.x = 168; + pos2D.y = 190; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000006); + for(i=0; i<=20; i++) { + if(i == 10) { + HuAudFXPlay(2173); + } + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 0, -90.0*(1.0-(i/20.0)), 90.0*(1.0-(i/20.0))); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } +} + +s32 fn_1_2940(void) +{ + Vec pos2D; + Vec posModel; + Vec pos3D; + s16 temp_r29 = 2; + s16 i; + ModelData *modelP; + for(i=0; i<4; i++) { + Hu3DModelLayerSet(lbl_1_bss_2C80[i+9], 2); + } + if(lbl_1_bss_4 == 3) { + OSReport("Eliminate Play STart\n"); + pos2D.x = 50; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], -90, 180, 0); + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 1); + } else { + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000004); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000002); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + HuAudFXPlay(2174); + HuPrcSleep(40); + pos2D.x = 50; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(i=0; i<=20; i++) { + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 90.0*-(i/20.0), 180.0*(i/20.0), 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } + charsel: + if(fn_1_194C8(temp_r29) == 0) { + goto exit; + } + temp_r29 = 4; + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = lbl_1_bss_8.unk24[i].unk68; + GWPlayerCfg[i].group = lbl_1_bss_8.unk24[i].unk5C; + GWPlayerCfg[i].iscom = lbl_1_bss_8.unk24[i].unk60; + GWPlayerCfg[i].diff = lbl_1_bss_8.unk24[i].unk64; + } + mgBattleStarMax = lbl_1_bss_8.unk20; + } + + if(fn_1_E72C() == 0) { + lbl_1_bss_4 = 0; + goto charsel; + } + exit: + HuDataDirClose(DATADIR_INSTPIC); + for(i=0; i<4; i++) { + Hu3DModelLayerSet(lbl_1_bss_2C80[i+9], 3); + } + lbl_1_bss_4 = 0; + pos2D.x = 168; + pos2D.y = 190; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000006); + for(i=0; i<=20; i++) { + if(i == 10) { + HuAudFXPlay(2173); + } + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 90.0*-(1-(i/20.0)), 180.0*(1-(i/20.0)), 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } +} + +s32 fn_1_3150(void) +{ + Vec pos2D; + Vec posModel; + Vec pos3D; + s16 i; + ModelData *modelP; + s16 temp_r29 = 1; + if(lbl_1_bss_4 == 4) { + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], -90, 90, 0); + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 1); + } else { + Hu3DModelAttrSet(lbl_1_bss_2C80[9], 0x40000004); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000002); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + HuAudFXPlay(2174); + HuPrcSleep(40); + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(i=0; i<=20; i++) { + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 90.0*-(i/20.0), 90.0*(i/20.0), 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } + charsel: + if(fn_1_194C8(temp_r29) == 0) { + goto exit; + } + temp_r29 = 4; + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = lbl_1_bss_8.unk24[i].unk68; + GWPlayerCfg[i].group = lbl_1_bss_8.unk24[i].unk5C; + GWPlayerCfg[i].iscom = lbl_1_bss_8.unk24[i].unk60; + GWPlayerCfg[i].diff = lbl_1_bss_8.unk24[i].unk64; + } + mgBattleStarMax = lbl_1_bss_8.unk20; + } + + if(fn_1_13418() == 0) { + lbl_1_bss_4 = 0; + goto charsel; + } + exit: + HuDataDirClose(DATADIR_INSTPIC); + lbl_1_bss_4 = 0; + pos2D.x = 168; + pos2D.y = 190; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50; + modelP = &Hu3DData[lbl_1_bss_2C80[9]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + Hu3DModelAttrReset(lbl_1_bss_2C80[9], 0x40000006); + for(i=0; i<=20; i++) { + if(i == 10) { + HuAudFXPlay(2173); + } + VECScale(&pos2D, &pos3D, sind(i*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[9], &pos3D); + Hu3DModelRotSet(lbl_1_bss_2C80[9], 90.0*-(1-(i/20.0)), 90.0*(1-(i/20.0)), 0); + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(lbl_1_bss_2C80[9])) { + HuPrcVSleep(); + } +} + +void fn_1_38D8(void) +{ + Vec pos2D; + Vec pos3D; + Vec posModel; + + s16 sp8 = 0; + s16 time; + s16 i; + float weight; + ModelData *modelP; + + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[10]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(time=0; time<=30; time++) { + for(i=0; i<4; i++) { + if(i == 1) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + Vec posBox; + weight = (time-(i*2))/10.0; + posBox = lbl_1_data_40[i]; + posBox.z = 800; + posBox.x += ((i < 2) ? -1 : 1)*(500.0*(1.0-cosd(90.0f*weight))); + Hu3D2Dto3D(&posBox, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + if(time > 10) { + weight = (time-10)/20.0; + VECScale(&pos2D, &pos3D, sind(weight*90.0f)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[10], &pos3D); + } + HuPrcVSleep(); + } + fn_1_6D28(); + pos2D = lbl_1_data_40[1]; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[10]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + for(time=0; time<=20; time++) { + VECScale(&pos2D, &pos3D, sind(time*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[10], &pos3D); + HuPrcVSleep(); + } + for(time=0; time<=20; time++) { + for(i=0; i<4; i++) { + if(i == 1) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + weight = (time-(i*2))/10.0; + pos2D = lbl_1_data_40[i]; + pos2D.z = 800; + pos2D.x += ((i < 2) ? -1 : 1)*((1.0-sind(weight*90.0f))*500.0); + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + HuPrcVSleep(); + } +} + +void fn_1_4010(void) +{ + Vec pos2D; + Vec pos3D; + Vec posModel; + + s16 spA[4]; + s16 sp8 = 0; + s16 time; + s16 i; + float weight; + ModelData *modelP; + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + pos2D.x = 60; + pos2D.y = 70; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[11]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(time=0; time<=30; time++) { + for(i=0; i<4; i++) { + if(i == 2) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + Vec posBox; + weight = (time-(i*2))/10.0; + posBox = lbl_1_data_40[i]; + posBox.z = 800; + posBox.x += ((i < 3) ? -1 : 1)*(500.0*(1.0-cosd(90.0f*weight))); + Hu3D2Dto3D(&posBox, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + if(time > 10) { + weight = (time-10)/20.0; + VECScale(&pos2D, &pos3D, sind(weight*90.0f)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[11], &pos3D); + } + HuPrcVSleep(); + } + fn_1_6D28(); + for(i=0; i<4; i++) { + spA[i] = 0; + for(time=0; time= 4 && spA[1] >= 3 && spA[2] >= 3 && spA[3] >= 2) { + GWGameStat.field10E_bit5 = 1; + } else { + GWGameStat.field10E_bit5 = 0; + } + pos2D = lbl_1_data_40[2]; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[11]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + for(time=0; time<=20; time++) { + VECScale(&pos2D, &pos3D, sind(time*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[11], &pos3D); + HuPrcVSleep(); + } + for(time=0; time<=20; time++) { + for(i=0; i<4; i++) { + if(i == 2) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + weight = (time-(i*2))/10.0; + pos2D = lbl_1_data_40[i]; + pos2D.z = 800; + pos2D.x += ((i < 3) ? -1 : 1)*((1.0-sind(weight*90.0f))*500.0); + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + HuPrcVSleep(); + } +} + +s32 fn_1_487C(void) +{ + s16 i; + char str[4][6]; + + for(i=0; i<4; i++) { + strcpy(&str[i][0], "\x1E\x03""0""\x1E\x08"); + } + if(lbl_1_bss_20AC[0] >= 4 && lbl_1_bss_20AC[1] >= 3 && lbl_1_bss_20AC[2] >= 3 && lbl_1_bss_20AC[4] >= 2) { + return 1; + } + if(lbl_1_bss_20AC[0] >= 4) { + str[0][1] = 5; + } else { + str[0][2] = '4'-lbl_1_bss_20AC[0]; + } + HuWinInsertMesSet(lbl_1_bss_2CE, MAKE_MESSID_PTR(&str[0][0]), 0); + if(lbl_1_bss_20AC[1] >= 3) { + str[1][1] = 5; + } else { + str[1][2] = '3'-lbl_1_bss_20AC[1]; + } + HuWinInsertMesSet(lbl_1_bss_2CE, MAKE_MESSID_PTR(&str[1][0]), 1); + if(lbl_1_bss_20AC[2] >= 3) { + str[2][1] = 5; + } else { + str[2][2] = '3'-lbl_1_bss_20AC[2]; + } + HuWinInsertMesSet(lbl_1_bss_2CE, MAKE_MESSID_PTR(&str[2][0]), 2); + if(lbl_1_bss_20AC[4] >= 2) { + str[3][1] = 5; + } else { + str[3][2] = '2'-lbl_1_bss_20AC[4]; + } + HuWinInsertMesSet(lbl_1_bss_2CE, MAKE_MESSID_PTR(&str[3][0]), 3); + fn_1_25838(lbl_1_bss_2CE, 0x28002A, -1, -1); + fn_1_25838(lbl_1_bss_2CE, 0x28002B, -1, -1); + fn_1_25838(lbl_1_bss_2CE, 0x280002+lbl_1_bss_2A6, -1, -999); + return 0; +} + +void fn_1_4ADC(void) +{ + Vec pos2D; + Vec pos3D; + Vec posModel; + + s16 spA[4]; + s16 sp8 = 0; + s16 time; + s16 i; + float weight; + ModelData *modelP; + fn_1_25E74(lbl_1_bss_2CC); + fn_1_25584(lbl_1_bss_2CE); + lbl_1_bss_2CE = lbl_1_bss_2CC = -1; + pos2D.x = 50; + pos2D.y = 64; + pos2D.z = 1000; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[11]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + for(time=0; time<=30; time++) { + for(i=0; i<4; i++) { + if(i == 3) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + Vec posBox; + weight = (time-(i*2))/10.0; + posBox = lbl_1_data_40[i]; + posBox.z = 800; + posBox.x += ((i < 3) ? -1 : 1)*(500.0*(1.0-cosd(90.0f*weight))); + Hu3D2Dto3D(&posBox, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + if(time > 10) { + weight = (time-10)/20.0; + VECScale(&pos2D, &pos3D, sind(weight*90.0f)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[12], &pos3D); + weight = (1.0-(weight*0.1)); + Hu3DModelScaleSet(lbl_1_bss_2C80[12], weight, weight, weight); + } + HuPrcVSleep(); + } + fn_1_D8D0(); + pos2D = lbl_1_data_40[3]; + pos2D.z = 800; + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + modelP = &Hu3DData[lbl_1_bss_2C80[12]]; + posModel = modelP->pos; + VECSubtract(&pos3D, &posModel, &pos2D); + espAttrSet(lbl_1_bss_2C2C[0], HUSPR_ATTR_DISPOFF); + for(time=0; time<=20; time++) { + VECScale(&pos2D, &pos3D, sind(time*4.5)); + VECAdd(&posModel, &pos3D, &pos3D); + Hu3DModelPosSetV(lbl_1_bss_2C80[12], &pos3D); + weight = 1.0-(0.1*(1.0-(time/20.0))); + Hu3DModelScaleSet(lbl_1_bss_2C80[12], weight, weight, weight); + HuPrcVSleep(); + } + for(time=0; time<=20; time++) { + for(i=0; i<4; i++) { + if(i == 3) { + continue; + } + if(time > i*2 && time < (i*2)+10) { + weight = (time-(i*2))/10.0; + pos2D = lbl_1_data_40[i]; + pos2D.z = 800; + pos2D.x += ((i < 3) ? -1 : 1)*((1.0-sind(weight*90.0f))*500.0); + Hu3D2Dto3D(&pos2D, 1, &pos3D); + pos3D.z -= 50.0f; + Hu3DModelPosSetV(lbl_1_bss_2C80[i+9], &pos3D); + Hu3DModelAttrReset(lbl_1_bss_2C80[i+9], 1); + } + } + HuPrcVSleep(); + } +} + +void fn_1_65EC(void); + +void fn_1_52DC(void) +{ + s16 i; + fn_1_65EC(); + fn_1_267E8(lbl_1_data_490); + fn_1_26A78(lbl_1_data_768); + Hu3DMotionSet(lbl_1_bss_2C80[2], lbl_1_bss_2C66[4]); + Hu3DMotionTimeSet(lbl_1_bss_2C80[0], 0); + Hu3DModelAttrSet(lbl_1_bss_2C80[0], 0x40000002); + HuSprExecLayerSet(64, 3); + espDrawNoSet(lbl_1_bss_2C2C[3], 64); + for(i=0; i<4; i++) { + Hu3DModelLayerSet(lbl_1_bss_2C80[i+9], 3); + } + fn_1_26C28(); + espDrawNoSet(lbl_1_bss_2C2C[28], 64); + Hu3DModelPosSet(lbl_1_bss_2C80[5], 0, 0, 500); + lbl_1_bss_8.unk0 = lbl_1_bss_2C80[2]; + lbl_1_bss_8.unk8 = lbl_1_bss_2C66[4]; + lbl_1_bss_8.unk4 = lbl_1_bss_2C66[3]; + lbl_1_bss_8.unkC = lbl_1_bss_2C80[5]; + lbl_1_bss_8.unk10 = lbl_1_bss_2C66[6]; + lbl_1_bss_8.unk14 = lbl_1_bss_2C66[7]; + lbl_1_bss_8.unk18 = lbl_1_bss_2C66[6]; + fn_1_18DF8(lbl_1_bss_2D8, &lbl_1_bss_8); + Hu3DModelShadowSet(lbl_1_bss_2C80[5]); + Hu3DModelShadowMapSet(lbl_1_bss_2C80[0]); +} + +void fn_1_6C18(void); + +void fn_1_54F4(void) +{ + while(1) { + if(lbl_1_bss_2D0) { + break; + } + if(omSysExitReq) { + break; + } + HuPrcVSleep(); + } + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqAllFadeOut(1000); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuDataDirClose(DATADIR_INSTPIC); + if(memcmp(&mgGameStatBackup, &GWGameStat, sizeof(GWGameStat))) { + fn_1_6C18(); + } + BoardStatusKill(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + + +static u16 lbl_1_data_8C[2] = { + 1, + 2 +}; + +void fn_1_55C0(omObjData *object) +{ + s16 i; + for(i=0; i<1; i++) { + Vec pos, target, up; + float x, y, z; + + x = lbl_1_bss_28C[i].x; + y = lbl_1_bss_28C[i].y; + z = lbl_1_bss_28C[i].z; + + pos.x = (((sind(y)*cosd(x))*lbl_1_bss_26C[i])+lbl_1_bss_274[i].x); + pos.y = (-sind(x)*lbl_1_bss_26C[i])+lbl_1_bss_274[i].y; + pos.z = ((cosd(y)*cosd(x))*lbl_1_bss_26C[i])+lbl_1_bss_274[i].z; + target.x = lbl_1_bss_274[i].x; + target.y = lbl_1_bss_274[i].y; + target.z = lbl_1_bss_274[i].z; + up.x = sind(y)*sind(x); + up.y = cosd(x); + up.z = cosd(y)*sind(x); + Hu3DCameraPosSet(lbl_1_data_8C[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } +} + +void fn_1_66B0(void); + +void fn_1_5974(omObjData *object) +{ + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + if(HuPadBtnDown[0] & PAD_BUTTON_Y) { + lbl_1_bss_0 = (lbl_1_bss_0) ? 0 : 1; + } + if(lbl_1_bss_0 == 0) { + fn_1_66B0(); + return; + } + lbl_1_bss_28C[0].y += 0.1f * HuPadStkX[0]; + lbl_1_bss_28C[0].x += 0.1f * HuPadStkY[0]; + lbl_1_bss_26C[0] += HuPadTrigL[0] / 2; + lbl_1_bss_26C[0] -= HuPadTrigR[0] / 2; + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + OSReport("%f,%f,%f\n", lbl_1_bss_28C[0].x, lbl_1_bss_28C[0].y, lbl_1_bss_28C[0].z); + OSReport("%f,%f,%f\n", lbl_1_bss_274[0].x, lbl_1_bss_274[0].y, lbl_1_bss_274[0].z); + OSReport("%f\n", lbl_1_bss_26C[0]); + } + if (lbl_1_bss_26C[0] < 100.0f) { + lbl_1_bss_26C[0] = 100.0f; + } + pos.x = lbl_1_bss_274[0].x + (lbl_1_bss_26C[0] * (sind(lbl_1_bss_28C[0].y) * cosd(lbl_1_bss_28C[0].x))); + pos.y = (lbl_1_bss_274[0].y + (lbl_1_bss_26C[0] * -sind(lbl_1_bss_28C[0].x))); + pos.z = (lbl_1_bss_274[0].z + (lbl_1_bss_26C[0] * (cosd(lbl_1_bss_28C[0].y) * cosd(lbl_1_bss_28C[0].x)))); + offset.x = lbl_1_bss_274[0].x - pos.x; + offset.y = lbl_1_bss_274[0].y - pos.y; + offset.z = lbl_1_bss_274[0].z - pos.z; + dir.x = (sind(lbl_1_bss_28C[0].y) * sind(lbl_1_bss_28C[0].x)); + dir.y = cosd(lbl_1_bss_28C[0].x); + dir.z = (cosd(lbl_1_bss_28C[0].y) * sind(lbl_1_bss_28C[0].x)); + z_rot = lbl_1_bss_28C[0].z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); + + PSVECCrossProduct(&dir, &offset, &offset); + PSVECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_274[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_274[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_274[0].z += 0.05f * (offset.z * stick_pos); + } + PSVECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_274[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_274[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_274[0].z += 0.05f * (offset.z * stick_pos); + } +} + +void fn_1_65EC(void) +{ + Vec pos = { 0, 3000, 800 }; + Vec target = { 0, 0, 640 }; + Vec up = { 0, 1, 0 }; + Hu3DShadowCreate(45, 2000, 25000); + Hu3DShadowTPLvlSet(0.8f); + Hu3DShadowPosSet(&pos, &up, &target); +} + +void fn_1_66B0(void) +{ + Vec deltaVec; + float delta; + + if(lbl_1_bss_2D0) { + return; + } + VECSubtract(&lbl_1_bss_2C0, &lbl_1_bss_28C[0], &deltaVec); + if(VECMag(&deltaVec) > 0.2) { + VECScale(&deltaVec, &deltaVec, 0.05f); + VECAdd(&lbl_1_bss_28C[0], &deltaVec, &lbl_1_bss_28C[0]); + } else { + lbl_1_bss_28C[0] = lbl_1_bss_2C0; + } + VECSubtract(&lbl_1_bss_2B4, &lbl_1_bss_274[0], &deltaVec); + if(VECMag(&deltaVec) > 0.2) { + VECScale(&deltaVec, &deltaVec, 0.05f); + VECAdd(&lbl_1_bss_274[0], &deltaVec, &lbl_1_bss_274[0]); + } else { + lbl_1_bss_274[0] = lbl_1_bss_2B4; + } + delta = lbl_1_bss_2B0-lbl_1_bss_26C[0]; + if(sqrtf(delta*delta) > 0.2) { + delta *= 0.05f; + lbl_1_bss_26C[0] += delta; + } else { + lbl_1_bss_26C[0] = lbl_1_bss_2B0; + } +} + +void fn_1_6974(s16 arg0) +{ + lbl_1_bss_2C0 = lbl_1_data_0[arg0].rot; + lbl_1_bss_2B4 = lbl_1_data_0[arg0].pos; + lbl_1_bss_2B0 = lbl_1_data_0[arg0].zoom; +} + +void fn_1_6A04(s16 arg0) +{ + lbl_1_bss_2C0 = lbl_1_bss_28C[0] = lbl_1_data_0[arg0].rot; + lbl_1_bss_2B4 = lbl_1_bss_274[0] = lbl_1_data_0[arg0].pos; + lbl_1_bss_2B0 = lbl_1_bss_26C[0] = lbl_1_data_0[arg0].zoom; +} + +float fn_1_6AF0(void) +{ + float delta = lbl_1_bss_2B0-lbl_1_bss_26C[0]; + return sqrtf(delta*delta); +} + +void fn_1_6C18(void) +{ + s16 sprite; + if(!SLSaveFlagGet()) { + return; + } + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + espInit(); + HuPrcVSleep(); + sprite = espEntry(0x860020, 5000, 0); + espPosSet(sprite, 288.0, 240.0); + espAttrReset(sprite, 4); + Hu3DBGColorSet(0, 0, 0); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + SLCommonSet(); + if(!SLSave()) { + GWSaveModeSet(1); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } +} \ No newline at end of file diff --git a/src/REL/mgmodedll/minigame.c b/src/REL/mgmodedll/minigame.c new file mode 100644 index 00000000..b11c24a8 --- /dev/null +++ b/src/REL/mgmodedll/minigame.c @@ -0,0 +1,276 @@ +#include "REL/mgmodedll.h" +#include "game/gamework_data.h" +#include "game/gamework.h" +#include "game/wipe.h" +#include "game/audio.h" + +#include "game/chrman.h" + +#include "math.h" + + +s16 lbl_1_bss_2C80[13]; +s16 lbl_1_bss_2C66[13]; +s16 lbl_1_bss_2C2C[29]; +s16 lbl_1_bss_2C24[4]; +s16 lbl_1_bss_2C1C[4]; +s16 lbl_1_bss_2C14[4]; +s16 lbl_1_bss_2BC4[4][10]; +s16 lbl_1_bss_264C[10][70]; +s16 lbl_1_bss_2638[10]; +s16 lbl_1_bss_20C0[10][70]; +s16 lbl_1_bss_20AC[10]; +s16 lbl_1_bss_20AA; +s16 lbl_1_bss_20A8; + +s32 lbl_1_data_9C0[8] = { + 0x005F0000, + 0x001A0000, + 0x006D0000, + 0x008A0000, + 0x00850000, + 0x00110000, + 0x000D0000, + 0x00810000 +}; + +s32 lbl_1_data_9E0[8] = { + 0x005E0000, + 0x00190000, + 0x006C0000, + 0x00890000, + 0x00840000, + 0x00100000, + 0x000C0000, + 0x00800000 +}; + +s16 lbl_1_data_A00 = -1; + +void fn_1_26C54(s16 layer); + +void fn_1_26C28(void) +{ + Hu3DLayerHookSet(2, fn_1_26C54); +} + +void fn_1_26C54(s16 layer) +{ + Mtx44 proj; + Mtx modelview; + Vec pos, target, up; + GXColor color; + CameraData *camera = &Hu3DCamera[0]; + MTXPerspective(proj, camera->fov, camera->aspect, camera->near, camera->far); + GXSetProjection(proj, GX_PERSPECTIVE); + GXSetViewport(0, 0, 640, 480, 0, 1); + GXSetScissor(0, 0, 640, 480); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + color.a = 255; + GXSetTevColor(GX_TEVREG0, color); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumTexGens(0); + GXSetNumTevStages(01); + GXSetCullMode(GX_CULL_NONE); + GXSetAlphaCompare(GX_GEQUAL, 0, GX_AOP_AND, GX_GEQUAL, 0); + GXSetZMode(GX_TRUE, GX_ALWAYS, GX_TRUE); + pos.x = pos.y = pos.z = 0; + target.x = target.y = 0; + target.z = -100; + up.x = up.z = 0; + up.y = 1; + MTXLookAt(modelview, &pos, &up, &target); + GXLoadPosMtxImm(modelview, GX_PNMTX0); + pos.x = (10000.0f*(-sin(camera->fov/2.0f)))*1.2f; + pos.y = (10000.0f*(-sin(camera->fov/2.0f)))*(5.0f/6.0f); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-pos.x, -pos.y, -10000.0f); + GXPosition3f32(pos.x, -pos.y, -10000.0f); + GXPosition3f32(pos.x, pos.y, -10000.0f); + GXPosition3f32(-pos.x, pos.y, -10000.0f); + GXEnd(); +} + +void fn_1_27080(void) +{ + s16 i; + s32 status; + CharModelDataClose(-1); + CharKill(-1); + for(i=0; i<4; i++) { + status = HuDataDirReadAsync(lbl_1_data_9C0[GWPlayerCfg[i].character]); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + CharARAMOpen(GWPlayerCfg[i].character); + } + for(i=0; i<2; i++) { + status = HuDataDirReadAsync(lbl_1_data_9E0[GWPlayerCfg[i].character]); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + } + lbl_1_bss_20AA = 0; + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + + +s16 fn_1_271B4(s16 mgNo, s16 x, s16 y) +{ + s16 time; + AnimData *anim; + s16 sprite; + s32 mgpic; + if(mgNo == -1) { + if(lbl_1_data_A00 == -1) { + return; + } + for(time=0; time<=10; time++) { + HuSprGrpTPLvlSet(lbl_1_data_A00, 1.0-(time/10.0)); + HuPrcVSleep(); + } + HuSprGrpKill(lbl_1_data_A00); + lbl_1_data_A00 = -1; + return; + } + + if(lbl_1_data_A00 != -1) { + HuSprGrpKill(lbl_1_data_A00); + } + lbl_1_data_A00 = HuSprGrpCreate(1); + mgpic = mgInfoTbl[mgNo].mg_pic[0]; + if(GWMGAvailGet(mgNo+401)) { + anim = HuSprAnimReadFile(mgpic); + } else { + anim = HuSprAnimReadFile(0x62002C); + } + sprite = HuSprCreate(anim, 100, 0); + HuSprGrpMemberSet(lbl_1_data_A00, 0, sprite); + HuSprGrpPosSet(lbl_1_data_A00, x, y); + HuSprGrpScaleSet(lbl_1_data_A00, 0.55f, 0.55f); + HuSprGrpDrawNoSet(lbl_1_data_A00, 64); + return lbl_1_data_A00; +} + +void fn_1_27418(void) +{ + s16 i; + s16 j; + for(i=0; i<4; i++) { + lbl_1_bss_2C1C[i] = i; + } + for(i=0; i<4; i++) { + for(j=0; j<3-i; j++) { + if(GWPlayerCfg[lbl_1_bss_2C1C[j]].group > GWPlayerCfg[lbl_1_bss_2C1C[j+1]].group) { + s16 temp = lbl_1_bss_2C1C[j]; + lbl_1_bss_2C1C[j] = lbl_1_bss_2C1C[j+1]; + lbl_1_bss_2C1C[j+1] = temp; + } + } + } + for(i=0; i<4; i++) { + s16 charNo; + lbl_1_bss_2C24[i] = charNo = GWPlayerCfg[lbl_1_bss_2C1C[i]].character; + lbl_1_bss_2C14[i] = CharModelCreate(charNo, 2); + lbl_1_bss_2BC4[i][0] = CharModelMotionCreate(charNo, 0x5F0000); + lbl_1_bss_2BC4[i][1] = CharModelMotionCreate(charNo, 0x5F0002); + lbl_1_bss_2BC4[i][2] = CharModelMotionCreate(charNo, 0x5F0003); + lbl_1_bss_2BC4[i][3] = CharModelMotionCreate(charNo, 0x5F0048); + lbl_1_bss_2BC4[i][4] = CharModelMotionCreate(charNo, 0x5F0049); + lbl_1_bss_2BC4[i][5] = CharModelMotionCreate(charNo, 0x5F0017); + lbl_1_bss_2BC4[i][6] = CharModelMotionCreate(charNo, 0x5F0018); + CharModelVoiceEnableSet(GWPlayerCfg[lbl_1_bss_2C1C[i]].character, lbl_1_bss_2BC4[i][1], 0); + CharModelVoiceEnableSet(GWPlayerCfg[lbl_1_bss_2C1C[i]].character, lbl_1_bss_2BC4[i][2], 0); + Hu3DModelPosSet(lbl_1_bss_2C14[i], 600, 0, 800); + Hu3DModelLayerSet(lbl_1_bss_2C14[i], 3); + CharModelDataClose(charNo); + Hu3DModelShadowSet(lbl_1_bss_2C14[i]); + } +} + +void fn_1_2783C(s16 evtno) +{ + s16 i; + omOvlHisData *his; + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = lbl_1_bss_8.unk24[i].unk68; + GWPlayerCfg[i].iscom = lbl_1_bss_8.unk24[i].unk60; + GWPlayerCfg[i].pad_idx = lbl_1_bss_8.unk24[i].unk6C; + GWPlayerCfg[i].diff = lbl_1_bss_8.unk24[i].unk64; + } + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqAllFadeOut(1000); + while(WipeStatGet()) { + HuPrcVSleep(); + } + CharKill(-1); + for(i=0; i<4; i++) { + CharARAMOpen(GWPlayerCfg[i].character); + } + HuAudVoiceInit(-1); + his = omOvlHisGet(0); + omOvlHisChg(0, OVL_MGMODE, evtno, his->stat); + omOvlCallEx(OVL_INST, 1, 0, 0); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_279FC(s32 coinSkipF) +{ + s16 i; + s16 mgNum; + for(mgNum=0; mgInfoTbl[mgNum].ovl != 65535; mgNum++); + for(i=0; i<9; i++) { + lbl_1_bss_2638[i] = lbl_1_bss_20AC[i] = 0; + } + for(i=0; i= 0 && type < 9) { + if(coinSkipF) { + s16 ovl = mgInfoTbl[i].ovl; + if(ovl == OVL_M408 || ovl == OVL_M422 || ovl == OVL_M430) { + continue; + } + } + lbl_1_bss_264C[type][lbl_1_bss_2638[type]] = i; + lbl_1_bss_2638[type]++; + if(GWMGAvailGet(i+401)) { + lbl_1_bss_20C0[type][lbl_1_bss_20AC[type]] = i; + lbl_1_bss_20AC[type]++; + } + } + } +} + +void fn_1_27C0C(s16 type) +{ + s16 i; + s16 j; + for(i=0; i<256;) { + for(j=0; j 256) { + break; + } + mgIndexList[i] = lbl_1_bss_20C0[type][j]; + } + } + for(i=0; i<256; i++) { + mgIndexList[i]; + } + lbl_801D3E94 = 0; +} \ No newline at end of file