diff --git a/config/GMPE01_00/rels/resultDll/symbols.txt b/config/GMPE01_00/rels/resultDll/symbols.txt index 64910ff2..b9d8c84d 100644 --- a/config/GMPE01_00/rels/resultDll/symbols.txt +++ b/config/GMPE01_00/rels/resultDll/symbols.txt @@ -95,43 +95,43 @@ lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data: lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 data:double -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 data:double -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 data:double -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x2A4 @@ -153,15 +153,17 @@ lbl_1_data_4C9 = .data:0x000004C9; // type:object size:0x11 scope:local data:str lbl_1_data_4DA = .data:0x000004DA; // type:object size:0xB scope:local data:string lbl_1_data_4E8 = .data:0x000004E8; // type:object size:0x270 lbl_1_data_758 = .data:0x00000758; // type:object size:0x28 -lbl_1_data_780 = .data:0x00000780; // type:object size:0x70 -lbl_1_data_7F0 = .data:0x000007F0; // type:object size:0x40 +lbl_1_data_780 = .data:0x00000780; // type:object size:0x50 +lbl_1_data_7D0 = .data:0x000007D0; // type:object size:0x20 +lbl_1_data_7F0 = .data:0x000007F0; // type:object size:0x30 +lbl_1_data_820 = .data:0x00000820; // type:object size:0x10 lbl_1_data_830 = .data:0x00000830; // type:object size:0x10 lbl_1_data_840 = .data:0x00000840; // type:object size:0x20 lbl_1_data_860 = .data:0x00000860; // type:object size:0x20 lbl_1_data_880 = .data:0x00000880; // type:object size:0x20 lbl_1_data_8A0 = .data:0x000008A0; // type:object size:0x6 data:2byte -lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 data:string -lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 data:string +lbl_1_data_8A6 = .data:0x000008A6; // type:object size:0x8 scope:local data:float +lbl_1_data_8AE = .data:0x000008AE; // type:object size:0x8 scope:local data:float lbl_1_data_8B8 = .data:0x000008B8; // type:object size:0x60 lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte @@ -192,7 +194,8 @@ lbl_1_bss_184 = .bss:0x00000184; // type:object size:0x4 data:4byte lbl_1_bss_188 = .bss:0x00000188; // type:object size:0x4 data:4byte lbl_1_bss_190 = .bss:0x00000190; // type:object size:0x4 data:4byte lbl_1_bss_194 = .bss:0x00000194; // type:object size:0x1680 -lbl_1_bss_1814 = .bss:0x00001814; // type:object size:0x14 +lbl_1_bss_1814 = .bss:0x00001814; // type:object size:0x8 +lbl_1_bss_181C = .bss:0x0000181C; // type:object size:0xC lbl_1_bss_1828 = .bss:0x00001828; // type:object size:0x168 data:2byte lbl_1_bss_1990 = .bss:0x00001990; // type:object size:0x20 lbl_1_bss_19B0 = .bss:0x000019B0; // type:object size:0x8 diff --git a/configure.py b/configure.py index 6d3d11c0..59909220 100644 --- a/configure.py +++ b/configure.py @@ -1054,7 +1054,7 @@ config.libs = [ objects = { Object(Matching, "REL/executor.c"), Object(Matching, "REL/resultDll/main.c"), - Object(NonMatching, "REL/resultDll/battle.c"), + Object(Matching, "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/datalist.c"), } ), diff --git a/include/REL/resultdll.h b/include/REL/resultdll.h index 7f8a60e4..afaf5df3 100644 --- a/include/REL/resultdll.h +++ b/include/REL/resultdll.h @@ -27,6 +27,10 @@ typedef struct datalist_sprite { GXColor color; } DataListSprite; +void fn_1_3FD8(void); +void fn_1_40DC(void); +void fn_1_423C(s16 *data); + void fn_1_6490(void); void fn_1_8FF8(DataListModel *model_list); @@ -37,5 +41,8 @@ extern s16 lbl_1_bss_1A9C[32]; extern s16 lbl_1_bss_1A5C[32]; extern s16 lbl_1_bss_1A1A[33]; extern s16 lbl_1_bss_1A18; +extern s32 lbl_1_bss_178; +extern s32 lbl_1_bss_174; +extern s16 lbl_1_bss_172; #endif \ No newline at end of file diff --git a/include/game/frand.h b/include/game/frand.h new file mode 100644 index 00000000..d688df99 --- /dev/null +++ b/include/game/frand.h @@ -0,0 +1,10 @@ +#ifndef _GAME_FRAND_H +#define _GAME_FRAND_H + +#include "dolphin/types.h" + +u32 frand(void); +f32 frandf(void); +u32 frandmod(u32 arg0); + +#endif \ No newline at end of file diff --git a/src/REL/resultDll/battle.c b/src/REL/resultDll/battle.c new file mode 100644 index 00000000..e582532a --- /dev/null +++ b/src/REL/resultDll/battle.c @@ -0,0 +1,718 @@ +#include "dolphin.h" +#include "math.h" + +#include "game/hsfanim.h" +#include "game/audio.h" +#include "game/process.h" +#include "game/wipe.h" +#include "game/window.h" +#include "game/pad.h" +#include "game/object.h" +#include "game/chrman.h" +#include "game/sprite.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/armem.h" +#include "game/frand.h" + +#include "game/gamework_data.h" + +#include "REL/resultdll.h" + +DataListModel lbl_1_data_4E8[] = { + { 0x6F0008, 0, 0, -1, -1, { -300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, + { 0x6F0009, 0, 0, -1, -1, { -100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, + { 0x6F000A, 0, 0, -1, -1, { 100, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, + { 0x6F000A, 0, 0, -1, -1, { 300, 0, 0 }, { 0, 0, 0 }, { 0.9f, 0.9f, 0.9f } }, + { 0x6F000B, 0, 0, -1, -1, { -300, 1000, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000B, 0, 0, -1, -1, { -100, 1000, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000B, 0, 0, -1, -1, { 100, 1000, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000B, 0, 0, -1, -1, { 300, 1000, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000D, 0, 0, -1, -1, { 5000, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000E, 0, 1, -1, 8, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x6F000F, 0x40000002, 0, -1, -1, { 5000, 0, 0 }, { 0, 0, 0 }, { 2.0f, 2.0f, 2.0f } }, + { -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } } +}; + +DataListSprite lbl_1_data_758[] = { + { 0x6F0043, 0, 10, 288, 240, { 255, 255, 255, 255 } }, + { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } }, +}; + +HsfanimStruct00 lbl_1_data_780 = { + 80, + { 0, 0 }, + 3, 30, 90, + { 0, -0.2, 0 }, + 5.0f, 0.95f, 10.0f, + 0.995f, + 2, + { + { 255, 192, 112, 255 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + }, + { + { 128, 128, 128, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + } +}; + + +s16 lbl_1_data_7D0[] = { + 320, 132, + 500, 132, + 320, 217, + 500, 217, + 320, 302, + 500, 302, + 320, 387, + 500, 387, +}; + +Vec lbl_1_data_7F0[] = { + { -300, 270, 0 }, + { -100, 180, 500 }, + { 100, 90, 500 }, + { 300, 0, 500 } +}; + +s16 lbl_1_data_820[] = { + -284, 148, + -84, 233, + 116, 318, + 316, 403 +}; + +s32 lbl_1_data_830[] = { + 0x6F0008, + 0x6F0009, + 0x6F000A, + 0x6F000A +}; + +float lbl_1_data_840[] = { + 130, + 150, + 170, + 150, + 150, + 130, + 170, + 190 +}; + +float lbl_1_data_860[] = { + 130, + 150, + 180, + 150, + 150, + 170, + 180, + 210 +}; + +float lbl_1_data_880[] = { + 140, + 160, + 180, + 150, + 150, + 120, + 180, + 210 +}; + +s16 lbl_1_data_8A0[] = { + 8, + 0, + -8 +}; + +typedef struct struct_unk194 { + s16 unk0; + s16 unk2; + Vec unk4; + Vec unk10; + float unk1C; +} StructUnk194; + +u8 lbl_1_bss_19F8[32]; +s16 lbl_1_bss_19F0[4]; +s16 lbl_1_bss_19E8[4]; +s16 lbl_1_bss_19E0[4]; +s16 lbl_1_bss_19B8[4][5]; +s16 lbl_1_bss_19B0[4]; +s16 lbl_1_bss_1990[4][4]; +s16 lbl_1_bss_1828[180]; +s16 lbl_1_bss_181C[6]; +s16 lbl_1_bss_1814[4]; +StructUnk194 lbl_1_bss_194[180]; +s32 lbl_1_bss_190; + +void fn_1_6760(void); +void fn_1_6824(void); +void fn_1_7544(void); + +void fn_1_6490(void) +{ + s16 player; + s16 i; + s16 window; + s16 button; + Process *process = HuPrcCurrentGet(); + HuAudSeqPlay(10); + for(i=player=0; i<4; i++) { + if(GWPlayerCfg[i].iscom) { + player++; + } + } + if(player == 4) { + lbl_1_bss_190 = 1; + } else { + lbl_1_bss_190 = 0; + } + fn_1_6824(); + HuPrcChildCreate(fn_1_6760, 100, 8192, 0, process); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while(WipeStatGet()) { + HuPrcVSleep(); + } + lbl_1_bss_178 = 0; + HuPrcChildCreate(fn_1_3FD8, 100, 12288, 0, process); + HuPrcSleep(10); + if(!lbl_1_bss_174) { + HuPrcSleep(20); + } + fn_1_7544(); + fn_1_40DC(); + window = HuWinCreate(-10000.0f, 400.0f, 320, 40, 0); + HuWinMesSpeedSet(window, 0); + HuWinBGTPLvlSet(window, 0); + HuWinAttrSet(window, 0x800); + HuWinMesSet(window, 0x240007); + i=0; + while(1) { + if(lbl_1_bss_190 && i > 120) { + break; + } + for(player=button=0; player<4; player++) { + if(!GWPlayerCfg[player].iscom) { + button |= HuPadBtnDown[GWPlayerCfg[player].pad_idx]; + } + } + if(button & PAD_BUTTON_A) { + HuAudFXPlay(28); + break; + } + HuPrcVSleep(); + i++; + } + HuWinKill(window); + while(!lbl_1_bss_178) { + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + HuAudSeqAllFadeOut(500); + while(WipeStatGet()) { + HuPrcVSleep(); + } + omSysPauseEnable(1); + Hu3DParManAllKill(); + omOvlReturnEx(1, 1); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_6760(void) +{ + Vec temp; + temp.z = 0.0f; + temp.y = 0.0f; + temp.x = 0.0f; + while(1) { + if (((HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3]) & 0x100) != 0 || lbl_1_bss_190 != 0) { + lbl_1_bss_174 = 1; + } else { + lbl_1_bss_174 = 0; + } + HuPrcVSleep(); + } +} + +void fn_1_7F98(void); +void fn_1_8338(s16 group, s16 value); +void fn_1_8484(void); +void fn_1_8658(void); +void fn_1_86DC(s16 player); +void fn_1_8CB8(struct model_data *model, Mtx matrix); + +void fn_1_6824(void) +{ + s16 i; + s16 character; + s16 player; + s16 x_ofs; + AnimData *anim; + AnimData *anim2; + AnimData *anim3; + s16 char_mdl; + Vec pos; + Vec target; + Vec up; + s16 gains[5]; + Process *process = HuPrcCurrentGet(); + CRot.x = 0; + CRot.y = 0; + CRot.z = 0; + Center.x = 0; + Center.y = 330; + Center.z = 0; + CZoom = 2210; + Hu3DShadowCreate(20, 100, 5000); + Hu3DShadowTPLvlSet(0.5f); + 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); + i = Hu3DHookFuncCreate(fn_1_8CB8); + Hu3DModelPosSet(i, 0, 0, 0); + fn_1_8484(); + fn_1_423C(gains); + gains[lbl_1_bss_172] += gains[4]; + for(i=0; i<4; i++) { + lbl_1_data_4E8[i].datanum = lbl_1_data_830[lbl_1_bss_19E8[i]]; + if(lbl_1_bss_19E8[i] == 3) { + lbl_1_data_4E8[i].attr = 1; + } + } + fn_1_8FF8(lbl_1_data_4E8); + fn_1_927C(lbl_1_data_758); + espDrawNoSet(lbl_1_bss_1A1A[0], 127); + for(i=0; i<4; i++) { + Hu3DModelShadowSet(lbl_1_bss_1A9C[i]); + } + for(i=0; i<4; i++) { + anim = HuSprAnimRead(HuDataReadNum(lbl_1_bss_19E8[i]+0x6F0044, MEMORY_DEFAULT_NUM));; + if(lbl_1_bss_19E8[i] <= 2) { + anim2 = HuSprAnimRead(HuDataReadNum(0x6F0048, MEMORY_DEFAULT_NUM)); + } else { + anim2 = HuSprAnimRead(HuDataReadNum(0x6F0048, MEMORY_DEFAULT_NUM)); + } + Hu3DAnimCreate(anim, lbl_1_bss_1A9C[i+4], "ys22_a0"); + Hu3DAnimCreate(anim2, lbl_1_bss_1A9C[i+4], "ys22_a1"); + Hu3DModelAttrSet(lbl_1_bss_1A9C[i+4], 0x40000002); + } + anim = HuSprAnimRead(HuDataReadNum(0x6F003D, MEMORY_DEFAULT_NUM)); + anim2 = HuSprAnimRead(HuDataReadNum(0x6F003B, MEMORY_DEFAULT_NUM)); + anim3 = HuSprAnimRead(HuDataReadNum(0x6F003C, MEMORY_DEFAULT_NUM)); + for(i=0; i<4; i++) { + if(gains[lbl_1_bss_19F0[i]] >= 100) { + x_ofs = lbl_1_data_8A0[2]; + } else if(gains[lbl_1_bss_19F0[i]] >= 10) { + x_ofs = lbl_1_data_8A0[1]; + } else { + x_ofs = lbl_1_data_8A0[0]; + } + lbl_1_bss_19E0[i] = HuSprGrpCreate(5); + lbl_1_bss_19B8[i][0] = HuSprCreate(anim, 10, 0); + HuSprGrpMemberSet(lbl_1_bss_19E0[i], 0, lbl_1_bss_19B8[i][0]); + HuSprPosSet(lbl_1_bss_19E0[i], 0, 17, -32); + lbl_1_bss_19B8[i][1] = HuSprCreate(anim2, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_19E0[i], 1, lbl_1_bss_19B8[i][1]); + HuSprPosSet(lbl_1_bss_19E0[i], 1, x_ofs, -36); + lbl_1_bss_19B8[i][2] = HuSprCreate(anim3, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_19E0[i], 2, lbl_1_bss_19B8[i][2]); + HuSprPosSet(lbl_1_bss_19E0[i], 2, x_ofs+16, -36); + lbl_1_bss_19B8[i][3] = HuSprCreate(anim3, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_19E0[i], 3, lbl_1_bss_19B8[i][3]); + HuSprPosSet(lbl_1_bss_19E0[i], 3, x_ofs+32, -36); + lbl_1_bss_19B8[i][4] = HuSprCreate(anim3, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_19E0[i], 4, lbl_1_bss_19B8[i][4]); + HuSprPosSet(lbl_1_bss_19E0[i], 4, x_ofs+48, -36); + HuSprGrpPosSet(lbl_1_bss_19E0[i], 0, 0); + fn_1_8338(lbl_1_bss_19E0[i], 9); + HuSprGrpScaleSet(lbl_1_bss_19E0[i], 0, 0); + } + (void)anim3; + Hu3DMotionSet(lbl_1_bss_1A9C[8], lbl_1_bss_1A5C[9]); + Hu3DModelAttrSet(lbl_1_bss_1A9C[8], 0x40000001); + Hu3DModelShadowSet(lbl_1_bss_1A9C[8]); + for(i=0; i<180; i++) { + if(i == 0) { + lbl_1_bss_1828[0] = Hu3DModelCreateFile(0x6F000C); + } else { + lbl_1_bss_1828[i] = Hu3DModelLink(lbl_1_bss_1828[0]); + } + Hu3DModelScaleSet(lbl_1_bss_1828[i], 0.5f, 0.5f, 0.5f); + Hu3DModelAttrSet(lbl_1_bss_1828[i], 1); + } + fn_1_8658(); + anim = HuSprAnimRead(HuAR_ARAMtoMRAMFileRead(0x120004, MEMORY_DEFAULT_NUM, HEAP_DATA)); + for(i=0; i<4; i++) { + lbl_1_bss_1814[i] = Hu3DParManCreate(anim, 300, &lbl_1_data_780); + Hu3DParManAttrSet(lbl_1_bss_1814[i], 0x65); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_1814[i]), 1); + Hu3DParManRotSet(lbl_1_bss_1814[i], 90, 0, 0); + } + HuDataDirClose(DATADIR_RESULT); + for(i=0; i<4; i++) { + player = lbl_1_bss_19F0[i]; + character = GWPlayerCfg[lbl_1_bss_19F0[i]].character; + char_mdl = CharModelCreate(character, 2); + lbl_1_bss_19B0[player] = char_mdl; + lbl_1_bss_1990[player][0] = CharModelMotionCreate(character, 0x5F0000); + lbl_1_bss_1990[player][1] = CharModelMotionCreate(character, 0x5F0017); + lbl_1_bss_1990[player][2] = CharModelMotionCreate(character, 0x5F0049); + CharModelVoiceEnableSet(character, lbl_1_bss_1990[player][1], 0); + CharModelMotionSet(character, lbl_1_bss_1990[player][0]); + Hu3DModelPosSet(char_mdl, lbl_1_data_7F0[i].x, lbl_1_data_7F0[lbl_1_bss_19E8[i]].y, 0); + Hu3DModelAttrSet(char_mdl, 0x40000001); + Hu3DModelShadowSet(char_mdl); + } + CharModelDataClose(-1); +} + +Vec lbl_1_data_8B8[] = { + { 8, 0, 0 }, + { 0, 8, 0 }, + { 10, 5, 0 }, + { -5, 10, 0 }, + { 0, -8, 0 }, + { 8, 10, 0 }, + { -10, 8, 0 }, + { 15, 0, 0 } +}; + +void fn_1_7544(void) +{ + s16 i; + s16 time; + s16 done_cnt; + float pos_y; + s16 gains[5]; + s16 time_player[4]; + fn_1_423C(gains); + for(time=0; time<=5; time++) { + pos_y = ((5-time)*50)+580; + for(i=0; i<4; i++) { + Hu3DModelPosSet(lbl_1_bss_1A9C[i+4], lbl_1_data_7F0[i].x, pos_y, 0); + } + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + Hu3DModelAttrReset(lbl_1_bss_1A9C[i+4], 0x40000002); + Hu3DMotionSpeedSet(lbl_1_bss_1A9C[i+4], 1.5f); + } + HuPrcSleep(35); + for(i=0; i<4; i++) { + if(gains[lbl_1_bss_19F0[i]] > 0) { + Hu3DParManAttrReset(lbl_1_bss_1814[i], 1); + time_player[i] = frandmod(10); + } else { + time_player[i] = 0; + } + Hu3DParManPosSet(lbl_1_bss_1814[i], lbl_1_data_7F0[i].x, 610.0f, 0.0f); + } + while(1) { + for(i=done_cnt=0; i<4; i++) { + if(time_player[i]) { + time_player[i]--; + continue; + } + if(gains[lbl_1_bss_19F0[i]] <= 0) { + Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); + done_cnt++; + } else { + fn_1_86DC(i); + gains[lbl_1_bss_19F0[i]]--; + if(gains[lbl_1_bss_19F0[i]] <= 10) { + time_player[i] = 4; + } else { + if(gains[lbl_1_bss_19F0[i]] <= 20) { + time_player[i] = 3; + } else { + if(gains[lbl_1_bss_19F0[i]] <= 40) { + time_player[i] = 2; + } else { + time_player[i] = 1; + } + } + } + } + } + if(done_cnt == 4) { + break; + } + HuPrcVSleep(); + } + if(gains[4]) { + HuPrcSleep(20); + Hu3DModelRotSet(lbl_1_bss_1A9C[8], 0, -90, 0); + Hu3DModelScaleSet(lbl_1_bss_1A9C[8], 0.8f, 0.8f, 0.8f); + Hu3DMotionSpeedSet(lbl_1_bss_1A9C[8], 2.0f); + for(i=0; i<=40; i++) { + Hu3DModelPosSet(lbl_1_bss_1A9C[8], 500.0f*(1.0f-(i/40.0f)), 0, 100.0f); + HuPrcVSleep(); + } + HuAudFXPlay(828); + Hu3DModelAttrReset(lbl_1_bss_1A9C[10], 0x40000002); + Hu3DModelPosSet(lbl_1_bss_1A9C[10], 0, 0, 200); + for(i=0; i 10) { + Hu3DModelAttrSet(lbl_1_bss_1A9C[8], 1); + } + Center.x = lbl_1_data_8B8[(i/2) & 0x7].x; + Center.y = 330.0f+lbl_1_data_8B8[(i/2) & 0x7].y; + Center.z = lbl_1_data_8B8[(i/2) & 0x7].z; + espPosSet(lbl_1_bss_1A1A[0], 288.0f+lbl_1_data_8B8[(i/2) & 0x7].x, 240.0f-lbl_1_data_8B8[(i/2) & 0x7].y); + HuPrcVSleep(); + } + espPosSet(lbl_1_bss_1A1A[0], 288.0, 240.0); + Center.x = 0; + Center.y = 330; + Center.z = 0; + time_player[0] = 10; + for(i=0; i<4; i++) { + if(lbl_1_bss_172 == lbl_1_bss_19F0[i]) { + break; + } + } + Hu3DParManAttrReset(lbl_1_bss_1814[i], 1); + while(1) { + if(time_player[0] != 0) { + time_player[0]--; + HuPrcVSleep(); + continue; + } + if(gains[4] <= 0){ + Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); + break; + } + fn_1_86DC(i); + gains[4]--; + time_player[0] = 5; + HuPrcVSleep(); + } + Hu3DParManAttrSet(lbl_1_bss_1814[i], 1); + } + fn_1_423C(gains); + gains[lbl_1_bss_172] += gains[4]; + for(i=0; i<4; i++) { + if(gains[lbl_1_bss_19F0[i]]) { + CharModelMotionShiftSet(GWPlayerCfg[lbl_1_bss_19F0[i]].character, lbl_1_bss_1990[lbl_1_bss_19F0[i]][1], 0, 4, 0); + HuAudPlayerVoicePlay(lbl_1_bss_19F0[i], 293); + } else { + CharModelMotionShiftSet(GWPlayerCfg[lbl_1_bss_19F0[i]].character, lbl_1_bss_1990[lbl_1_bss_19F0[i]][2], 0, 4, 0); + } + } + HuPrcSleep(20); + fn_1_7F98(); + HuPrcSleep(120); +} + +void fn_1_7F98(void) +{ + s16 i; + s16 time; + s16 delay; + s16 gains[5]; + Vec pos_3d; + Vec pos_2d; + fn_1_423C(gains); + gains[lbl_1_bss_172] += gains[4]; + for(i=0; i<4; i++) { + fn_1_8338(lbl_1_bss_19E0[i], gains[lbl_1_bss_19F0[i]]); + pos_3d.x = lbl_1_data_7F0[i].x; + if(gains[lbl_1_bss_19F0[i]]) { + pos_3d.y = lbl_1_data_7F0[lbl_1_bss_19E8[i]].y+lbl_1_data_860[GWPlayerCfg[lbl_1_bss_19F0[i]].character]; + } else { + pos_3d.y = lbl_1_data_7F0[lbl_1_bss_19E8[i]].y+lbl_1_data_880[GWPlayerCfg[lbl_1_bss_19F0[i]].character]; + } + pos_3d.z = 0; + Hu3D3Dto2D(&pos_3d, 1, &pos_2d); + HuSprGrpPosSet(lbl_1_bss_19E0[i], pos_2d.x, pos_2d.y); + } + delay = (lbl_1_bss_174) ? 3 : 10; + for(time=0; time<=delay; time++) { + float scale = sin(M_PI*((90.0/delay)*time)/180.0); + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_19E0[i], scale, scale); + } + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + HuSprGrpScaleSet(lbl_1_bss_19E0[i], 1.0f, 1.0f); + } +} + +void fn_1_8338(s16 group, s16 value) +{ + s16 digit; + s16 digit_value; + + digit = 2; + digit_value = value/100; + if(digit_value != 0) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*100; + digit_value = value/10; + if(digit_value != 0 || digit == 3) { + HuSprBankSet(group, digit, digit_value); + HuSprAttrReset(group, digit, 4); + digit++; + } + value -= digit_value*10; + HuSprBankSet(group, digit, value); + HuSprAttrReset(group, digit, 4); + digit++; + for(digit_value=digit; digit_value<5; digit_value++) { + HuSprAttrSet(group, digit_value, 4); + } +} + +void fn_1_8484(void) +{ + s16 i; + s16 j; + for(i=0; i<4; i++) { + lbl_1_bss_19E8[i] = GWPlayerCoinWinGet(i); + lbl_1_bss_19F0[i] = i; + } + for(j=1; j<4; j++) { + for(i=0; i<4-j; i++) { + if(lbl_1_bss_19E8[i] > lbl_1_bss_19E8[i+1]) { + s16 temp; + temp = lbl_1_bss_19E8[i]; + lbl_1_bss_19E8[i] = lbl_1_bss_19E8[i+1]; + lbl_1_bss_19E8[i+1] = temp; + temp = lbl_1_bss_19F0[i]; + lbl_1_bss_19F0[i] = lbl_1_bss_19F0[i+1]; + lbl_1_bss_19F0[i+1] = temp; + } + } + } +} + +void fn_1_8998(void); + +void fn_1_8658(void) +{ + s16 i; + Process *process = HuPrcCurrentGet(); + for(i=0; i<180; i++) { + lbl_1_bss_194[i].unk0 = -1; + } + HuPrcChildCreate(fn_1_8998, 100, 8192, 0, process); +} + +void fn_1_86DC(s16 player) +{ + s16 i; + for(i=0; i<180; i++) { + if(lbl_1_bss_194[i].unk0 == -1) { + break; + } + } + if(i == 180) { + return; + } + lbl_1_bss_194[i].unk0 = player; + lbl_1_bss_194[i].unk4.x = lbl_1_data_7F0[player].x; + lbl_1_bss_194[i].unk4.y = 610.0f; + lbl_1_bss_194[i].unk4.z = 0.0f; + lbl_1_bss_194[i].unk2 = lbl_1_bss_19E8[player]; + lbl_1_bss_194[i].unk10.x = frandmod(20)-10.0f; + lbl_1_bss_194[i].unk10.y = frandmod(20)-10.0f; + lbl_1_bss_194[i].unk10.z = 0; + lbl_1_bss_194[i].unk1C = 10.0f; + Hu3DModelAttrReset(lbl_1_bss_1828[i], 1); + Hu3DModelPosSet(lbl_1_bss_1828[i], 0, 100, 0); + Hu3DModelRotSet(lbl_1_bss_1828[i], 0, 0, 0); +} + +void fn_1_8998(void) +{ + s16 i; + ModelData *model_ptr; + s16 player; + while(1) { + for(i=0; i<180; i++) { + if(lbl_1_bss_194[i].unk0 == -1) { + continue; + } + player = lbl_1_bss_194[i].unk0; + model_ptr = &Hu3DData[lbl_1_bss_1828[i]]; + model_ptr->pos = lbl_1_bss_194[i].unk4; + model_ptr->rot.x += lbl_1_bss_194[i].unk10.x; + model_ptr->rot.y += lbl_1_bss_194[i].unk10.y; + lbl_1_bss_194[i].unk4.y -= lbl_1_bss_194[i].unk1C; + lbl_1_bss_194[i].unk1C += 0.2f; + if(lbl_1_bss_194[i].unk4.y < ((3-lbl_1_bss_194[i].unk2)*100)+lbl_1_data_840[GWPlayerCfg[lbl_1_bss_19F0[player]].character]) { + Vec pos; + pos.x = lbl_1_data_7F0[player].x; + pos.y = ((3-lbl_1_bss_194[i].unk2)*100)+lbl_1_data_840[GWPlayerCfg[lbl_1_bss_19F0[player]].character]; + pos.z = 0.0f; + CharModelCoinEffectCreate(1, &pos); + lbl_1_bss_194[i].unk0 = -1; + HuAudFXPlay(7); + Hu3DModelAttrSet(lbl_1_bss_1828[i], 1); + } + } + HuPrcVSleep(); + } + +} + +void fn_1_8CB8(struct model_data *model, Mtx matrix) +{ + s32 sp8 = 0; + GXTexObj tex; + Mtx final; + Mtx inv_camera; + Mtx shadow; + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXInitTexObj(&tex, Hu3DShadowData.unk_04, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&tex, 0); + MTXInverse(Hu3DCameraMtx, inv_camera); + MTXConcat(inv_camera, matrix, final); + MTXConcat(Hu3DShadowData.unk_68, Hu3DShadowData.unk_38, shadow); + MTXConcat(shadow, final, final); + GXLoadTexMtxImm(final, GX_TEXMTX9, GX_MTX3x4); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX9); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetNumTexGens(1); + GXSetNumTevStages(1); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_TRUE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + GXLoadPosMtxImm(matrix, GX_PNMTX0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-500.0f, 0, -500.0f); + GXPosition3f32(500.0f, 0, -500.0f); + GXPosition3f32(500.0f, 0, 500.0f); + GXPosition3f32(-500.0f, 0, 500.0f); + GXEnd(); +} \ No newline at end of file diff --git a/src/REL/resultDll/main.c b/src/REL/resultDll/main.c index b7839e9f..644809bb 100644 --- a/src/REL/resultDll/main.c +++ b/src/REL/resultDll/main.c @@ -1,4 +1,3 @@ -// include "REL/resultDll/main.h" #include "dolphin.h" #include "rel_sqrt_consts.h" #include "game/object.h" @@ -14,6 +13,9 @@ #include "game/saveload.h" #include "game/gamework.h" #include "game/board/player.h" +#include "game/frand.h" + +#include "math.h" #include "REL/resultdll.h" @@ -83,8 +85,6 @@ void fn_1_888(void); void fn_1_B78(void); void fn_1_1F4C(void); void fn_1_2ADC(void); -void fn_1_3FD8(void); -void fn_1_40DC(void); void fn_1_461C(void); void fn_1_47FC(void); @@ -320,7 +320,6 @@ void fn_1_3B50(s16 group, s16 value); void fn_1_3CAC(s16 group, s16 value); void fn_1_3E08(void); -void fn_1_423C(s16 *data); void fn_1_B78(void) {