diff --git a/config/GALE01/splits.txt b/config/GALE01/splits.txt index c300ba46ee..53473bd680 100644 --- a/config/GALE01/splits.txt +++ b/config/GALE01/splits.txt @@ -2342,13 +2342,29 @@ melee/gm/gmregclear.c: .sdata2 start:0x804DA428 end:0x804DA538 melee/gm/gm_1832.c: - .text start:0x8018325C end:0x80188454 + .text start:0x8018325C end:0x80186EFC .rodata start:0x803B7C28 end:0x803B7C68 - .data start:0x803D9248 end:0x803D9828 - .bss start:0x804735A8 end:0x80473700 - .sdata start:0x804D4090 end:0x804D4140 - .sbss start:0x804D65F0 end:0x804D6628 - .sdata2 start:0x804DA538 end:0x804DA600 + .data start:0x803D9248 end:0x803D9498 + .bss start:0x804735A8 end:0x804736B0 + .sdata start:0x804D4090 end:0x804D40C0 + .sbss start:0x804D65F0 end:0x804D6610 + .sdata2 start:0x804DA538 end:0x804DA5C8 + +melee/gm/gm_186E.c: + .text start:0x80186EFC end:0x80187910 + .data start:0x803D9498 end:0x803D9750 + .bss start:0x804736B0 end:0x804736C0 + .sdata start:0x804D40C0 end:0x804D40D8 + .sbss start:0x804D6610 end:0x804D6620 + .sdata2 start:0x804DA5C8 end:0x804DA5E8 + +melee/gm/gm_1879.c: + .text start:0x80187910 end:0x80188454 + .data start:0x803D9750 end:0x803D9828 + .bss start:0x804736C0 end:0x80473700 + .sdata start:0x804D40D8 end:0x804D4140 + .sbss start:0x804D6620 end:0x804D6628 + .sdata2 start:0x804DA5E8 end:0x804DA5F8 melee/gm/gm_1884.c: .text start:0x80188454 end:0x8018A514 @@ -2357,7 +2373,7 @@ melee/gm/gm_1884.c: .bss start:0x80473700 end:0x80473AB8 .sdata start:0x804D4140 end:0x804D4158 .sbss start:0x804D6628 end:0x804D6630 - .sdata2 start:0x804DA600 end:0x804DA650 + .sdata2 start:0x804DA5F8 end:0x804DA650 melee/gm/gmtoulib.c: .text start:0x8018A514 end:0x80190ABC diff --git a/config/GALE01/symbols.txt b/config/GALE01/symbols.txt index f20e54213c..7671c1ecd1 100644 --- a/config/GALE01/symbols.txt +++ b/config/GALE01/symbols.txt @@ -22199,19 +22199,26 @@ lbl_803D8D08 = .data:0x803D8D08; // type:object size:0x480 @1966 = .data:0x803D91EC; // type:object size:0x19 scope:local data:string @1967 = .data:0x803D9208; // type:object size:0x1B scope:local data:string @1968 = .data:0x803D9224; // type:object size:0x1F scope:local data:string -lbl_803D9248 = .data:0x803D9248; // type:object size:0x1CC +gm_1832_CharScale = .data:0x803D9248; // type:object size:0x70 scope:local +...data.0 = .data:0x803D9248; // type:label scope:local +gm_1832_CharOffset = .data:0x803D92B8; // type:object size:0x150 scope:local +gm_1832_SamusOffset = .data:0x803D9408; // type:object size:0xC scope:local lbl_803D9414 = .data:0x803D9414; // type:object size:0xC data:byte -lbl_803D9420 = .data:0x803D9420; // type:object size:0x9 data:string -lbl_803D942C = .data:0x803D942C; // type:object size:0x9 data:string -lbl_803D9438 = .data:0x803D9438; // type:object size:0xC data:string +@755 = .data:0x803D9420; // type:object size:0x9 scope:local data:string +@756 = .data:0x803D942C; // type:object size:0x9 scope:local data:string +@757 = .data:0x803D9438; // type:object size:0x9 scope:local data:string lbl_803D9444 = .data:0x803D9444; // type:object size:0x18 data:string -lbl_803D945C = .data:0x803D945C; // type:object size:0xC data:string -lbl_803D9468 = .data:0x803D9468; // type:object size:0xE data:string -lbl_803D9478 = .data:0x803D9478; // type:object size:0xC data:string -lbl_803D9484 = .data:0x803D9484; // type:object size:0x11 data:string +@1074 = .data:0x803D945C; // type:object size:0xC scope:local data:string +@1075 = .data:0x803D9468; // type:object size:0xE scope:local data:string +@1198 = .data:0x803D9478; // type:object size:0xC scope:local data:string +@1199 = .data:0x803D9484; // type:object size:0x11 scope:local data:string lbl_803D9498 = .data:0x803D9498; // type:object size:0x2A0 -lbl_803D9738 = .data:0x803D9738; // type:object size:0x18 data:string -lbl_803D9750 = .data:0x803D9750; // type:object size:0xD8 +@369 = .data:0x803D9738; // type:object size:0x18 scope:local data:string +gm_1832_NormalArchiveNames = .data:0x803D9750; // type:object size:0x30 scope:local +...data.0 = .data:0x803D9750; // type:label scope:local +gm_1832_NormalBgmIds = .data:0x803D9780; // type:object size:0x30 scope:local +gm_1832_NormalAudioMasks = .data:0x803D97B0; // type:object size:0x60 scope:local +gm_1832_NormalSceneDataName = .data:0x803D9810; // type:object size:0x17 scope:local data:string lbl_803D9828 = .data:0x803D9828; // type:object size:0x7C scope:local data:short jumptable_803D98A4 = .data:0x803D98A4; // type:object size:0x24 scope:local lbl_803D98C8 = .data:0x803D98C8; // type:object size:0x1B data:string @@ -26160,10 +26167,12 @@ lbl_80472EC8 = .bss:0x80472EC8; // type:object size:0x10 data:4byte lbl_80472ED8 = .bss:0x80472ED8; // type:object size:0x6BC data:4byte lbl_80473594 = .bss:0x80473594; // type:object size:0x14 data:byte lbl_804735A8 = .bss:0x804735A8; // type:object size:0x40 data:4byte +...bss.0 = .bss:0x804735A8; // type:label scope:local lbl_804735E8 = .bss:0x804735E8; // type:object size:0xA4 data:4byte lbl_8047368C = .bss:0x8047368C; // type:object size:0x24 data:4byte lbl_804736B0 = .bss:0x804736B0; // type:object size:0x10 data:4byte lbl_804736C0 = .bss:0x804736C0; // type:object size:0x40 data:4byte +...bss.0 = .bss:0x804736C0; // type:label scope:local lbl_80473700 = .bss:0x80473700; // type:object size:0x114 data:4byte gm_80473814 = .bss:0x80473814; // type:object size:0x204 scope:global data:byte gm_80473A18 = .bss:0x80473A18; // type:object size:0xA0 scope:global data:byte @@ -26992,28 +27001,28 @@ lbl_804D4078 = .sdata:0x804D4078; // type:object size:0x5 data:string lbl_804D4080 = .sdata:0x804D4080; // type:object size:0x6 data:string lbl_804D4088 = .sdata:0x804D4088; // type:object size:0x3 data:sjis lbl_804D408C = .sdata:0x804D408C; // type:object size:0x1 data:string -lbl_804D4090 = .sdata:0x804D4090; // type:object size:0x7 data:string -lbl_804D4098 = .sdata:0x804D4098; // type:object size:0x5 data:string +@558 = .sdata:0x804D4090; // type:object size:0x7 scope:local data:string +@559 = .sdata:0x804D4098; // type:object size:0x5 scope:local data:string lbl_804D40A0 = .sdata:0x804D40A0; // type:object size:0x5 data:string -lbl_804D40A8 = .sdata:0x804D40A8; // type:object size:0x6 data:string +@754 = .sdata:0x804D40A8; // type:object size:0x6 scope:local data:string lbl_804D40B0 = .sdata:0x804D40B0; // type:object size:0x8 data:string -lbl_804D40B8 = .sdata:0x804D40B8; // type:object size:0x2 data:string -lbl_804D40C0 = .sdata:0x804D40C0; // type:object size:0x7 data:string -lbl_804D40C8 = .sdata:0x804D40C8; // type:object size:0x5 data:string -lbl_804D40D0 = .sdata:0x804D40D0; // type:object size:0x6 data:string -lbl_804D40D8 = .sdata:0x804D40D8; // type:object size:0x5 data:string -lbl_804D40E0 = .sdata:0x804D40E0; // type:object size:0x5 data:string -lbl_804D40E8 = .sdata:0x804D40E8; // type:object size:0x5 data:string -lbl_804D40F0 = .sdata:0x804D40F0; // type:object size:0x5 data:string -lbl_804D40F8 = .sdata:0x804D40F8; // type:object size:0x5 data:string -lbl_804D4100 = .sdata:0x804D4100; // type:object size:0x5 data:string -lbl_804D4108 = .sdata:0x804D4108; // type:object size:0x5 data:string -lbl_804D4110 = .sdata:0x804D4110; // type:object size:0x5 data:string -lbl_804D4118 = .sdata:0x804D4118; // type:object size:0x5 data:string -lbl_804D4120 = .sdata:0x804D4120; // type:object size:0x5 data:string -lbl_804D4128 = .sdata:0x804D4128; // type:object size:0x5 data:string -lbl_804D4130 = .sdata:0x804D4130; // type:object size:0x5 data:string -lbl_804D4138 = .sdata:0x804D4138; // type:object size:0x6 data:string +@1109 = .sdata:0x804D40B8; // type:object size:0x2 scope:local data:string +@318 = .sdata:0x804D40C0; // type:object size:0x7 scope:local data:string +@319 = .sdata:0x804D40C8; // type:object size:0x5 scope:local data:string +@368 = .sdata:0x804D40D0; // type:object size:0x6 scope:local data:string +@319 = .sdata:0x804D40D8; // type:object size:0x5 scope:local data:string +@320 = .sdata:0x804D40E0; // type:object size:0x5 scope:local data:string +@321 = .sdata:0x804D40E8; // type:object size:0x5 scope:local data:string +@322 = .sdata:0x804D40F0; // type:object size:0x5 scope:local data:string +@323 = .sdata:0x804D40F8; // type:object size:0x5 scope:local data:string +@324 = .sdata:0x804D4100; // type:object size:0x5 scope:local data:string +@325 = .sdata:0x804D4108; // type:object size:0x5 scope:local data:string +@326 = .sdata:0x804D4110; // type:object size:0x5 scope:local data:string +@327 = .sdata:0x804D4118; // type:object size:0x5 scope:local data:string +@328 = .sdata:0x804D4120; // type:object size:0x5 scope:local data:string +@329 = .sdata:0x804D4128; // type:object size:0x5 scope:local data:string +@330 = .sdata:0x804D4130; // type:object size:0x5 scope:local data:string +@380 = .sdata:0x804D4138; // type:object size:0x6 scope:local data:string lbl_804D4140 = .sdata:0x804D4140; // type:object size:0x7 data:string lbl_804D4148 = .sdata:0x804D4148; // type:object size:0x5 data:string lbl_804D4150 = .sdata:0x804D4150; // type:object size:0x8 data:string @@ -31610,44 +31619,44 @@ lbl_804DA520 = .sdata2:0x804DA520; // type:object size:0x4 align:4 data:float lbl_804DA524 = .sdata2:0x804DA524; // type:object size:0x4 align:4 data:float lbl_804DA528 = .sdata2:0x804DA528; // type:object size:0x4 align:4 data:float lbl_804DA530 = .sdata2:0x804DA530; // type:object size:0x8 align:8 data:double -lbl_804DA538 = .sdata2:0x804DA538; // type:object size:0x4 align:4 data:float -lbl_804DA53C = .sdata2:0x804DA53C; // type:object size:0x4 align:4 data:float -lbl_804DA540 = .sdata2:0x804DA540; // type:object size:0x4 align:4 data:float -lbl_804DA544 = .sdata2:0x804DA544; // type:object size:0x4 align:4 data:float -lbl_804DA548 = .sdata2:0x804DA548; // type:object size:0x4 align:4 data:float -lbl_804DA54C = .sdata2:0x804DA54C; // type:object size:0x4 align:4 data:float -lbl_804DA550 = .sdata2:0x804DA550; // type:object size:0x4 align:4 data:float -lbl_804DA554 = .sdata2:0x804DA554; // type:object size:0x4 align:4 data:float -lbl_804DA558 = .sdata2:0x804DA558; // type:object size:0x4 align:4 data:float -lbl_804DA55C = .sdata2:0x804DA55C; // type:object size:0x4 align:4 data:float -lbl_804DA560 = .sdata2:0x804DA560; // type:object size:0x8 align:8 data:double -lbl_804DA568 = .sdata2:0x804DA568; // type:object size:0x4 align:4 data:float -lbl_804DA56C = .sdata2:0x804DA56C; // type:object size:0x4 align:4 data:float -lbl_804DA570 = .sdata2:0x804DA570; // type:object size:0x4 align:4 data:float -lbl_804DA574 = .sdata2:0x804DA574; // type:object size:0x4 align:4 data:float -lbl_804DA578 = .sdata2:0x804DA578; // type:object size:0x4 align:4 data:float -lbl_804DA57C = .sdata2:0x804DA57C; // type:object size:0x4 align:4 data:float -lbl_804DA580 = .sdata2:0x804DA580; // type:object size:0x4 align:4 data:float -lbl_804DA584 = .sdata2:0x804DA584; // type:object size:0x4 align:4 data:float -lbl_804DA588 = .sdata2:0x804DA588; // type:object size:0x4 align:4 data:float -lbl_804DA58C = .sdata2:0x804DA58C; // type:object size:0x4 align:4 data:float -lbl_804DA590 = .sdata2:0x804DA590; // type:object size:0x4 align:4 data:float -lbl_804DA598 = .sdata2:0x804DA598; // type:object size:0x8 align:8 data:double -lbl_804DA5A0 = .sdata2:0x804DA5A0; // type:object size:0x8 align:8 data:double -lbl_804DA5A8 = .sdata2:0x804DA5A8; // type:object size:0x8 align:8 data:double -lbl_804DA5B0 = .sdata2:0x804DA5B0; // type:object size:0x8 align:8 data:double -lbl_804DA5B8 = .sdata2:0x804DA5B8; // type:object size:0x4 align:4 data:float -lbl_804DA5BC = .sdata2:0x804DA5BC; // type:object size:0x4 align:4 data:float -lbl_804DA5C0 = .sdata2:0x804DA5C0; // type:object size:0x4 align:4 data:float -lbl_804DA5C8 = .sdata2:0x804DA5C8; // type:object size:0x4 align:4 data:float -lbl_804DA5CC = .sdata2:0x804DA5CC; // type:object size:0x4 align:4 data:float -lbl_804DA5D0 = .sdata2:0x804DA5D0; // type:object size:0x4 align:4 data:float -lbl_804DA5D4 = .sdata2:0x804DA5D4; // type:object size:0x4 align:4 data:float -lbl_804DA5D8 = .sdata2:0x804DA5D8; // type:object size:0x4 align:4 data:float -lbl_804DA5DC = .sdata2:0x804DA5DC; // type:object size:0x4 align:4 data:float -lbl_804DA5E0 = .sdata2:0x804DA5E0; // type:object size:0x4 align:4 data:float -lbl_804DA5E8 = .sdata2:0x804DA5E8; // type:object size:0x4 align:4 data:float -lbl_804DA5F0 = .sdata2:0x804DA5F0; // type:object size:0x8 align:8 data:double +@560 = .sdata2:0x804DA538; // type:object size:0x4 scope:local align:4 data:float +@561 = .sdata2:0x804DA53C; // type:object size:0x4 scope:local align:4 data:float +@562 = .sdata2:0x804DA540; // type:object size:0x4 scope:local align:4 data:float +@563 = .sdata2:0x804DA544; // type:object size:0x4 scope:local align:4 data:float +@564 = .sdata2:0x804DA548; // type:object size:0x4 scope:local align:4 data:float +@565 = .sdata2:0x804DA54C; // type:object size:0x4 scope:local align:4 data:float +@566 = .sdata2:0x804DA550; // type:object size:0x4 scope:local align:4 data:float +@567 = .sdata2:0x804DA554; // type:object size:0x4 scope:local align:4 data:float +@568 = .sdata2:0x804DA558; // type:object size:0x4 scope:local align:4 data:float +@745 = .sdata2:0x804DA55C; // type:object size:0x4 scope:local align:4 data:float +@747 = .sdata2:0x804DA560; // type:object size:0x8 scope:local align:8 data:double +@844 = .sdata2:0x804DA568; // type:object size:0x4 scope:local align:4 data:float +@845 = .sdata2:0x804DA56C; // type:object size:0x4 scope:local align:4 data:float +@909 = .sdata2:0x804DA570; // type:object size:0x4 scope:local align:4 data:float +@910 = .sdata2:0x804DA574; // type:object size:0x4 scope:local align:4 data:float +@911 = .sdata2:0x804DA578; // type:object size:0x4 scope:local align:4 data:float +@912 = .sdata2:0x804DA57C; // type:object size:0x4 scope:local align:4 data:float +@913 = .sdata2:0x804DA580; // type:object size:0x4 scope:local align:4 data:float +@914 = .sdata2:0x804DA584; // type:object size:0x4 scope:local align:4 data:float +@915 = .sdata2:0x804DA588; // type:object size:0x4 scope:local align:4 data:float +@916 = .sdata2:0x804DA58C; // type:object size:0x4 scope:local align:4 data:float +@917 = .sdata2:0x804DA590; // type:object size:0x4 scope:local align:4 data:float +@918 = .sdata2:0x804DA598; // type:object size:0x8 scope:local align:8 data:double +@919 = .sdata2:0x804DA5A0; // type:object size:0x8 scope:local align:8 data:double +@920 = .sdata2:0x804DA5A8; // type:object size:0x8 scope:local align:8 data:double +@921 = .sdata2:0x804DA5B0; // type:object size:0x8 scope:local align:8 data:double +@922 = .sdata2:0x804DA5B8; // type:object size:0x4 scope:local align:4 data:float +@923 = .sdata2:0x804DA5BC; // type:object size:0x4 scope:local align:4 data:float +@924 = .sdata2:0x804DA5C0; // type:object size:0x4 scope:local align:4 data:float +@234 = .sdata2:0x804DA5C8; // type:object size:0x4 scope:local align:4 data:float +@320 = .sdata2:0x804DA5CC; // type:object size:0x4 scope:local align:4 data:float +@321 = .sdata2:0x804DA5D0; // type:object size:0x4 scope:local align:4 data:float +@322 = .sdata2:0x804DA5D4; // type:object size:0x4 scope:local align:4 data:float +@323 = .sdata2:0x804DA5D8; // type:object size:0x4 scope:local align:4 data:float +@325 = .sdata2:0x804DA5DC; // type:object size:0x4 scope:local align:4 data:float +@358 = .sdata2:0x804DA5E0; // type:object size:0x4 scope:local align:4 data:float +@240 = .sdata2:0x804DA5E8; // type:object size:0x4 scope:local align:4 data:float +@242 = .sdata2:0x804DA5F0; // type:object size:0x8 scope:local align:8 data:double lbl_804DA5F8 = .sdata2:0x804DA5F8; // type:object size:0x4 align:4 data:float lbl_804DA600 = .sdata2:0x804DA600; // type:object size:0x8 align:8 data:double lbl_804DA608 = .sdata2:0x804DA608; // type:object size:0x4 align:4 data:float diff --git a/configure.py b/configure.py index a5ae54ba3d..dbe2a6e30d 100755 --- a/configure.py +++ b/configure.py @@ -1156,7 +1156,9 @@ def MatchingFor(*versions): Object(Matching, "melee/gm/gm_17BA.c"), Object(Matching, "melee/gm/gmregcommon.c"), Object(Linkable, "melee/gm/gmregclear.c"), - Object(Linkable, "melee/gm/gm_1832.c"), + Object(Matching, "melee/gm/gm_1832.c"), + Object(Matching, "melee/gm/gm_186E.c"), + Object(Matching, "melee/gm/gm_1879.c"), Object(Linkable, "melee/gm/gm_1884.c"), Object(Linkable, "melee/gm/gmtoulib.c"), Object(Matching, "melee/gm/gmtou_0.c"), diff --git a/src/melee/gm/gm_1832.c b/src/melee/gm/gm_1832.c index d66f4801f1..66de49f315 100644 --- a/src/melee/gm/gm_1832.c +++ b/src/melee/gm/gm_1832.c @@ -3,26 +3,19 @@ #include "gm_unsplit.h" #include "cm/camera.h" -#include "dolphin/pad.h" #include "ef/efasync.h" #include "ef/eflib.h" #include "ft/ftdemo.h" #include "gm/gm_1601.h" -#include "gm/gm_1A36.h" -#include "gm/gm_1A3F.h" #include "gm/gm_1A45.h" -#include "gm/types.h" #include "gr/ground.h" #include "gr/stage.h" #include "it/item.h" -#include "lb/lb_00B0.h" #include "lb/lb_00F9.h" #include "lb/lbarchive.h" #include "lb/lbaudio_ax.h" -#include "lb/lbbgflash.h" #include "lb/lblanguage.h" #include "lb/lbspdisplay.h" -#include "mn/inlines.h" #include "mn/mnname.h" #include "mp/mpcoll.h" #include "pl/player.h" @@ -84,13 +77,12 @@ static struct gm_1832_8047368C_t { } lbl_8047368C; ASSERT_SIZE(struct gm_1832_8047368C_t, 0x24); +static HSD_GObj* lbl_804D65F0; static HSD_Archive* lbl_804D65F4; static HSD_Archive* lbl_804D65F8; -static HSD_GObj* lbl_804D65F0; +static SceneDesc* lbl_804D65FC; static SceneDesc* lbl_804D6600; -static int lbl_804D6608; - typedef struct { HSD_GObjEvent v[6]; } ClassicProcArray; @@ -149,6 +141,8 @@ static struct { /* 0x6A8 */ ClassicCharLayout x6A8[28]; }* lbl_804D6604; +static int lbl_804D6608; + void fn_8018325C(HSD_GObj* arg0, int arg1) { Vec3 pos; @@ -347,21 +341,27 @@ void fn_80184A94(HSD_GObj* gobj) fn_80184138(gobj, 2); } -static f32 lbl_803D9248[] = { - 0.6f, 0.35f, 0.6f, 0.5f, 0.6f, 0.35f, 0.6f, 0.6f, 0.7f, 0.6f, - 0.5f, 0.6f, 0.6f, 0.6f, 0.5f, 0.5f, 0.6f, 0.5f, 0.6f, 0.6f, - 0.5f, 0.6f, 0.6f, 0.6f, 0.6f, 0.5f, 0.5f, 0.5f, 0.0f, -6.0f, - 0.0f, 0.0f, -3.5f, 0.0f, -1.0f, -3.5f, 0.0f, 0.0f, -3.5f, 0.0f, - 0.0f, -1.0f, 0.0f, 0.0f, -3.0f, 0.0f, 0.0f, -5.0f, 0.0f, 0.0f, - -3.5f, 0.0f, 0.0f, -3.5f, 0.0f, 0.0f, -3.5f, 0.0f, 0.0f, -3.0f, - 0.0f, -0.5f, -3.5f, 0.0f, -2.0f, -6.0f, 0.0f, 0.0f, -2.5f, 0.0f, - 0.0f, -2.5f, 0.0f, -1.0f, -1.0f, 0.0f, 0.0f, -5.0f, 0.0f, 0.0f, - -3.0f, 0.0f, -1.0f, -6.0f, 0.0f, -1.0f, -2.5f, 0.0f, -1.0f, -3.5f, - 0.0f, 0.0f, -3.5f, 0.0f, 0.0f, -4.0f, 0.0f, -1.0f, -3.5f, 0.0f, - 0.0f, -1.5f, 0.0f, 0.0f, -4.5f, 0.0f, 0.0f, -3.5f, 0.0f, 0.0f, - -3.5f, 0.0f, 3.0f, 4.0f, -5.0f, +static f32 gm_1832_CharScale[28] = { 0.6f, 0.35f, 0.6f, 0.5f, 0.6f, 0.35f, + 0.6f, 0.6f, 0.7f, 0.6f, 0.5f, 0.6f, + 0.6f, 0.6f, 0.5f, 0.5f, 0.6f, 0.5f, + 0.6f, 0.6f, 0.5f, 0.6f, 0.6f, 0.6f, + 0.6f, 0.5f, 0.5f, 0.5f }; + +static Vec3 gm_1832_CharOffset[28] = { + { 0.0f, -6.0f, 0.0f }, { 0.0f, -3.5f, 0.0f }, { -1.0f, -3.5f, 0.0f }, + { 0.0f, -3.5f, 0.0f }, { 0.0f, -1.0f, 0.0f }, { 0.0f, -3.0f, 0.0f }, + { 0.0f, -5.0f, 0.0f }, { 0.0f, -3.5f, 0.0f }, { 0.0f, -3.5f, 0.0f }, + { 0.0f, -3.5f, 0.0f }, { 0.0f, -3.0f, 0.0f }, { -0.5f, -3.5f, 0.0f }, + { -2.0f, -6.0f, 0.0f }, { 0.0f, -2.5f, 0.0f }, { 0.0f, -2.5f, 0.0f }, + { -1.0f, -1.0f, 0.0f }, { 0.0f, -5.0f, 0.0f }, { 0.0f, -3.0f, 0.0f }, + { -1.0f, -6.0f, 0.0f }, { -1.0f, -2.5f, 0.0f }, { -1.0f, -3.5f, 0.0f }, + { 0.0f, -3.5f, 0.0f }, { 0.0f, -4.0f, 0.0f }, { -1.0f, -3.5f, 0.0f }, + { 0.0f, -1.5f, 0.0f }, { 0.0f, -4.5f, 0.0f }, { 0.0f, -3.5f, 0.0f }, + { 0.0f, -3.5f, 0.0f } }; +static Vec3 gm_1832_SamusOffset = { 3.0f, 4.0f, -5.0f }; + static char lbl_803D9414[] = { 0x82, 0x73, 0x82, 0x85, 0x82, 0x81, 0x82, 0x8D, 0, 0, 0, 0 }; @@ -538,12 +538,6 @@ void fn_8018504C(void) } } -typedef struct ClassicCharData { - f32 scale[28]; - Vec3 offset[28]; - Vec3 samus_extra; -} ClassicCharData; - s32 fn_801851C0(void) { u8 pad_stack[8]; @@ -552,22 +546,21 @@ s32 fn_801851C0(void) s32 result; for (i = 0; i < (s32) lbl_804735E8.xE0; i++) { - ClassicCharData* data = (ClassicCharData*) lbl_803D9248; result = i + 1; Player_SetPlayerCharacter(result, (CharacterKind) lbl_8047368C.xF4[0]); Player_SetPlayerId(result, 0); Player_SetSlottype(result, Gm_PKind_Demo); Player_SetFacingDirection(result, 0.0f); Player_SetCostumeId(result, i); - pos = data->offset[lbl_8047368C.xF4[0]]; + pos = gm_1832_CharOffset[lbl_8047368C.xF4[0]]; Player_80032768(result, &pos); if (lbl_8047368C.xF4[0] == 0xE) { - pos.x += data->samus_extra.x; - pos.y += data->samus_extra.y; - pos.z += data->samus_extra.z; + pos.x += gm_1832_SamusOffset.x; + pos.y += gm_1832_SamusOffset.y; + pos.z += gm_1832_SamusOffset.z; Player_80032828(result, 1, &pos); } - Player_SetModelScale(result, data->scale[lbl_8047368C.xF4[0]]); + Player_SetModelScale(result, gm_1832_CharScale[lbl_8047368C.xF4[0]]); Player_SetFlagsBit5(result, lbl_8047368C.x100[0]); Player_80037054(result, 6); } @@ -974,6 +967,8 @@ void fn_80186080(void) } } +static char lbl_804D40B0[] = "IrRdMap"; + void fn_801861B8(void) { HSD_Text* text; @@ -1026,8 +1021,6 @@ void fn_801861B8(void) } } -static SceneDesc* lbl_804D65FC; - void fn_80186400(void) { HSD_GObj* gobj = GObj_Create(0xE, 0xF, 0); @@ -1048,8 +1041,6 @@ void fn_80186400(void) } } -static char lbl_804D40B0[] = "IrRdMap"; - typedef struct ClassicArchiveNameArray { const char* v[4]; } ClassicArchiveNameArray; @@ -1194,19 +1185,6 @@ void gm_Scene_IntroEasy_OnFrame(void) gm_801A4B60(); } } - -static struct enterdata { - int x0, x4; -} lbl_804D6618; - -typedef struct gm_804736B0_t { - int x0, x4; - HSD_JObj* x8; - HSD_JObj* xC; -} gm_804736B0_t; - -gm_804736B0_t lbl_804736B0; - /// Classic Mode intro scene enter data (0x20 bytes) typedef struct ClassicModeEnterData { /* 0x00 */ int x0; @@ -1244,715 +1222,3 @@ void gm_Scene_IntroEasy_OnEnter(void* arg0_) gm_80167858((int) (s8) lbl_8047368C.xEC, lbl_8047368C.xED, 0xB, 0x2D); gm_80168F88(); } - -static inline void gm_1832_sdata2_order_tail1(int unused) -{ - (void) unused; - (void) 7.0f; -} - -#ifdef MUST_MATCH -static const f32 gm_1832_sdata2_tail0[1] ATTRIBUTE_ALIGN(8) = { 0.0f }; -#endif - -void fn_80186EFC(HSD_GObj* gobj) -{ - HSD_JObj* jobj = GET_JOBJ(gobj); - gm_804736B0_t* state = &lbl_804736B0; - int* counter; - PAD_STACK(8); - gm_1832_sdata2_order_tail1(0); - HSD_JObjReqAnimAll(state->xC, 0.0f); - HSD_JObjAnimAll(jobj); - counter = &state->x4; - if (*counter < 0x8C) { - (*counter)++; - } else { - state->x0 = 1; - } -} - -#ifdef MUST_MATCH -static const f32 gm_1832_sdata2_tail2[1] = { 3.0f }; -static const f32 gm_1832_sdata2_tail3[1] = { 5.0f }; -#endif - -typedef struct gm_80186F6C_Entry { - /* 0x00 */ f32 x0; - /* 0x04 */ f32 x4; - /* 0x08 */ f32 x8; - /* 0x0C */ f32 xC; - /* 0x10 */ f32 x10; - /* 0x14 */ f32 x14; -} gm_80186F6C_Entry; - -static gm_80186F6C_Entry lbl_803D9498[] = { - { 0.0f, -4.5f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, 1.5f, 0.0f, 0.6f, 0.6f, 0.6f }, - { 0.0f, -5.3f, 0.0f, 1.3f, 1.3f, 1.3f }, - { 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, 5.5f, 0.0f, 0.75f, 0.75f, 0.75f }, - { -1.1f, -2.0f, 0.0f, 0.5f, 0.5f, 0.5f }, - { -1.0f, -3.5f, 0.0f, 1.3f, 1.3f, 1.3f }, - { -1.0f, -0.5f, 0.0f, 1.35f, 1.35f, 1.35f }, - { -1.0f, -2.0f, 0.0f, 1.4f, 1.4f, 1.4f }, - { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, -6.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { -1.0f, -0.5f, 0.0f, 1.1f, 1.1f, 1.1f }, - { -2.0f, -6.5f, 0.0f, 1.3f, 1.3f, 1.3f }, - { -0.5f, 2.5f, 0.0f, 1.0f, 1.0f, 1.0f }, - { -0.8f, 5.0f, 0.0f, 0.7f, 0.7f, 0.7f }, - { -1.0f, 4.0f, 0.0f, 0.8f, 0.8f, 0.8f }, - { 0.0f, -5.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, 2.0f, 0.0f, 0.9f, 0.9f, 0.9f }, - { -1.0f, -12.5f, 0.0f, 1.8f, 1.8f, 1.8f }, - { -3.5f, 0.0f, 0.0f, 1.8f, 1.8f, 1.8f }, - { 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, -2.5f, 0.0f, 1.1f, 1.1f, 1.1f }, - { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { 0.0f, 5.5f, 0.0f, 0.4f, 0.4f, 0.4f }, - { 1.0f, -11.0f, 0.0f, 1.3f, 1.3f, 1.3f }, - { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, - { -1.1f, 2.5f, 0.0f, 0.4f, 0.4f, 0.4f }, -}; - -/// Duplicate literals owned by the original All-Star intro split. -static char gm_80186F6C_JObjFile[7] ATTRIBUTE_ALIGN(8) = "jobj.h"; -static char gm_80186F6C_JObjCondition[5] = "jobj"; -static char gm_Scene_IntroAllstar_ArchiveName[] = "IrAls"; - -void fn_80186F6C(HSD_GObj* arg0) -{ - Vec3 pos; - HSD_JObj* jobj = arg0->hsd_obj; - HSD_JObj* child = lbl_804736B0.x8; - gm_80186F6C_Entry* entry = lbl_803D9498; - PAD_STACK(4); - - HSD_JObjGetTranslation(child, &pos); - - pos.x -= 7.0f; - pos.x += entry[lbl_804D6618.x0].x0; - pos.y += entry[lbl_804D6618.x0].x4; - pos.z += entry[lbl_804D6618.x0].x8; - - HSD_JObjSetTranslate(jobj, &pos); - - HSD_JObjSetScaleX(jobj, entry[lbl_804D6618.x0].xC); - HSD_JObjSetScaleY(jobj, entry[lbl_804D6618.x0].x10); - HSD_JObjSetScaleZ(jobj, entry[lbl_804D6618.x0].x14); - - { - HSD_GObj* entity2 = Player_GetEntityAtIndex(0, 1); - if (entity2 != NULL) { - HSD_JObj* jobj2 = entity2->hsd_obj; - - HSD_JObjGetTranslation(jobj, &pos); - pos.x += 3.0f; - pos.z -= 5.0f; - pos.y += 4.0f; - HSD_JObjSetTranslate(jobj2, &pos); - - HSD_JObjGetScale(jobj, &pos); - HSD_JObjSetScale(jobj2, &pos); - } - } -} - -static HSD_Archive* lbl_804D6610; - -#ifdef MUST_MATCH -static const f32 gm_1832_sdata2_tail5[1] = { 1.0f }; - -#pragma push -#pragma dont_inline on -#endif -HSD_GObjProc* fn_801873F0(void) -{ - ftDemo_ObjAllocInit(); - Player_InitAllPlayers(); - Player_80036E20(lbl_804D6618.x0, lbl_804D6610, 1); - Player_SetPlayerCharacter(0, lbl_804D6618.x0); - Player_SetCostumeId(0, lbl_804D6618.x4); - Player_SetPlayerId(0, 0); - Player_SetSlottype(0, Gm_PKind_Demo); - Player_SetFacingDirection(0, 0.0f); - Player_SetModelScale(0, 1.0f); - Player_80036F34(0, 6); - return HSD_GObj_SetupProc(Player_GetEntity(0), fn_80186F6C, 0x16U); -} -#ifdef MUST_MATCH -#pragma pop -#endif - -void fn_80187494(HSD_GObj* gobj, int arg1) -{ - int temp_ret = HSD_CObjSetCurrent(gobj->hsd_obj); - PAD_STACK(4); - if (temp_ret != 0) { - Camera_800313E0(gobj, 1); - gobj->gxlink_prios = 0x801; - HSD_GObj_80390ED0(gobj, 7); - HSD_CObjEndCurrent(); - } -} - -static SceneDesc* lbl_804D6614; - -#ifdef MUST_MATCH -static const f32 gm_1832_sdata2_tail6[1] = { 10000.0f }; -#endif - -void fn_801874FC(void) -{ - HSD_JObj* sp8; - HSD_GObj* gobj; - HSD_JObj* jobj; - - gobj = GObj_Create(0xE, 0xF, 0); - jobj = HSD_JObjLoadJoint(lbl_804D6614->models[0]->joint); - HSD_GObjObject_80390A70(gobj, HSD_GObj_JObjKind, jobj); - GObj_SetupGXLink(gobj, HSD_GObj_JObjCallback, 0xB, 0); - HSD_GObj_SetupProc(gobj, fn_80186EFC, 0); - gm_8016895C(jobj, lbl_804D6614->models[0], 0); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - lb_80011E24(jobj, &sp8, 0x3A, -1); - HSD_JObjSetTranslateZ(sp8, 10000.0F); - lb_80011E24(jobj, &sp8, 0x3B, -1); - HSD_JObjSetTranslateZ(sp8, 10000.0F); - lb_80011E24(jobj, &lbl_804736B0.x8, 5, -1); - lb_80011E24(jobj, &lbl_804736B0.xC, 6, -1); -} - -/// #fn_801874FC - -#ifdef MUST_MATCH -#pragma push -#pragma dont_inline on -#endif -void fn_80187714(void) -{ - Camera_80028B9C(6); - lb_8000FCDC(); - mpColl_80041C78(); - Ground_801C0378(64); - Stage_802251E8(St_Kind_Dummy, NULL); - Stage_8022524C(); - Item_80266FA8(); - Item_80266FCC(); - efLib_Init(); - efAsync_LoadSync(0); -} -#ifdef MUST_MATCH -#pragma pop -#endif - -void gm_Scene_IntroAllstar_OnFrame(void) -{ - if (lbl_804736B0.x0 != 0) { - lbArchive_80016EFC(lbl_804D6610); - lbAudioAx_800236DC(); - gm_801A4B60(); - } -} - -#ifdef MUST_MATCH -#pragma push -#pragma dont_inline on -#endif -void gm_Scene_IntroAllstar_OnEnter(void* arg0_) -{ - struct enterdata* arg0 = arg0_; - HSD_GObj* temp_r30; - HSD_GObj* temp_r30_2; - HSD_GObj* temp_r30_3; - HSD_LObj* lobj; - HSD_CObj* cobj; - HSD_Fog* fog; - PAD_STACK(8); - - lbl_804736B0.x0 = 0; - lbl_804736B0.x4 = 0; - - lbl_804D6618 = *arg0; - fn_80187714(); - lbl_804D6610 = lbArchive_80016DBC("IrAls", &lbl_804D6614, - "ScItrAllstar_scene_data", 0); - - temp_r30 = GObj_Create(0x13, 0x14, 0); - cobj = HSD_CObjLoadDesc(lbl_804D6614->cameras[0].desc); - HSD_GObjObject_80390A70(temp_r30, HSD_GObj_CameraKind, cobj); - GObj_SetupGXLinkMax(temp_r30, fn_80187494, 8); - temp_r30->gxlink_prios = 0x801; - - temp_r30_2 = GObj_Create(0xB, 3, 0); - lobj = lb_80011AC4(lbl_804D6614->lights); - HSD_GObjObject_80390A70(temp_r30_2, HSD_GObj_LightKind, lobj); - GObj_SetupGXLink(temp_r30_2, HSD_GObj_LObjCallback, 0, 0); - fn_801874FC(); - - temp_r30_3 = GObj_Create(0xE, 0xF, 0); - fog = HSD_FogLoadDesc(lbl_804D6614->fogs[0].desc); - HSD_GObjObject_80390A70(temp_r30_3, HSD_GObj_FogKind, fog); - GObj_SetupGXLink(temp_r30_3, HSD_GObj_FogCallback, 0xB, 0); - fn_801873F0(); - lbAudioAx_80023F28(0x2D); -} -#ifdef MUST_MATCH -#pragma pop -#endif - -typedef struct gm_1832_StageState { - u8 stage_index : 5; - u8 done : 1; - u8 flash : 1; - u8 active : 1; -} gm_1832_StageState; - -static struct gm_1832_804736C0_t { - DynamicModelDesc*** x0; - HSD_CameraAnim** x4; - HSD_GObj* x8; - u8 pad_C[0x28]; - u16 x34; - gm_1832_StageState x36; - struct { - u8 frame_counter : 4; - u8 anim_state : 2; - u8 state2 : 2; - } x37; - u8 x38; - u8 pad_39[7]; -} lbl_804736C0; -ASSERT_SIZE(struct gm_1832_804736C0_t, 0x40); -typedef struct gm_1832_804736C0_t gm_1832_804736C0_t; - -#ifdef MUST_MATCH -static const f32 gm_1832_sdata2_tail7[1] ATTRIBUTE_ALIGN(8) = { 0.0f }; -static const f64 gm_1832_sdata2_tail8[1] = { S32_TO_F32 }; -#endif - -static inline void gm_1832_sdata2_order_tail9(int unused) -{ - (void) unused; - (void) 0.0166666675f; -} - -void fn_80187910(HSD_GObj* arg0) -{ - Vec3 sp10; - gm_1832_804736C0_t* data; - HSD_CObj* cobj; - s32 frame; - f32 scale; - - PAD_STACK(4); - data = &lbl_804736C0; - cobj = arg0->hsd_obj; - if (gm_GetButtonsTriggered(data->x38) & PAD_BUTTON_A) { - data->x37.frame_counter = (s32) cobj->eyepos->aobj->curr_frame / 300; - if (++data->x37.frame_counter >= 8U) { - data->x37.frame_counter = 0; - } - frame = data->x37.frame_counter * 0x12C; - HSD_CObjRemoveAnim(cobj); - HSD_CObjAddAnim(cobj, *(HSD_CameraAnim**) data->x4[1]); - HSD_CObjReqAnim(cobj, (f32) frame); - } - HSD_CObjAnim(cobj); - HSD_CObjGetInterest(cobj, &sp10); - scale = Ground_801C0498(); - sp10.x *= scale; - sp10.y *= scale; - sp10.z *= scale; - HSD_CObjSetInterest(cobj, &sp10); - HSD_CObjGetEyePosition(cobj, &sp10); - scale = Ground_801C0498(); - sp10.x *= scale; - sp10.y *= scale; - sp10.z *= scale; - HSD_CObjSetEyePosition(cobj, &sp10); - gm_1832_sdata2_order_tail9(0); -} - -typedef struct { - u8 pad_hi : 4; - u8 state : 2; - u8 pad_lo : 2; -} x37_state_bits; - -static inline void fn_80187AB4_LoadAnim(HSD_JObj* jobj, - gm_1832_804736C0_t* data) -{ - DynamicModelDesc* desc = (*data->x0)[11 - data->x36.stage_index]; - int anim_state; - - if (desc->anims != NULL) { - anim_state = data->x37.anim_state; - if (desc->anims[anim_state] != NULL) { - lb_8000C0E8(jobj, anim_state, desc); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - } - } -} - -void fn_80187AB4(HSD_GObj* gobj) -{ - gm_1832_804736C0_t* data = &lbl_804736C0; - HSD_JObj* jobj = GET_JOBJ(gobj); - int state = data->x37.anim_state; - PAD_STACK(16); - - switch (state) { - case 0: - if (lb_8000B09C(jobj) == 0) { - data->x37.anim_state = 1; - fn_80187AB4_LoadAnim(jobj, data); - data->x34 = 0x960; - } - break; - case 1: - if ((u32) data->x36.active == 1U) { - data->x36.flash = 1; - } - if (data->x36.flash) { - data->x37.anim_state = 2; - data->x36.done = 1; - lbBgFlash_8002063C(1); - } - if (lb_8000B09C(jobj) == 0) { - fn_80187AB4_LoadAnim(jobj, data); - } - break; - case 2: - if (lb_8000B09C(jobj) == 0) { - data->x36.done = 1; - HSD_GObjPLink_80390228(gobj); - } - break; - } - HSD_JObjAnimAll(GET_JOBJ(gobj)); -} - -void fn_80187C9C(HSD_GObj* gobj, int arg1) -{ - GXSetZMode(0, GX_NEVER, 0); - HSD_GObj_JObjCallback(gobj, arg1); - HSD_StateInvalidate(0x40); -} - -void fn_80187CF4(HSD_GObj* gobj) -{ - gm_1832_804736C0_t* data = &lbl_804736C0; - HSD_JObj* jobj = gobj->hsd_obj; - int state = data->x37.state2; - DynamicModelDesc* desc; - int anim_state; - - switch (state) { - case 0: - if (lb_8000B09C(jobj) == 0) { - data->x37.state2 = 1; - anim_state = data->x37.state2; - desc = (*data->x0)[12]; - if (desc->anims[anim_state] != NULL) { - lb_8000C0E8(jobj, anim_state, desc); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - } - } - break; - case 1: - if (lb_8000B09C(jobj) == 0) { - data->x37.state2 = 2; - anim_state = data->x37.state2; - desc = (*data->x0)[12]; - if (desc->anims[anim_state] != NULL) { - lb_8000C0E8(jobj, anim_state, desc); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - } - } - break; - case 2: - if (gm_GetButtonsTriggered(data->x38) & PAD_BUTTON_START) { - sfxForward(); - data->x36.active = 1; - data->x37.state2 = 3; - anim_state = data->x37.state2; - desc = (*data->x0)[12]; - if (desc->anims[anim_state] != NULL) { - lb_8000C0E8(jobj, anim_state, desc); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - } - } else if (lb_8000B09C(jobj) == 0) { - anim_state = data->x37.state2; - desc = (*data->x0)[12]; - if (desc->anims[anim_state] != NULL) { - lb_8000C0E8(jobj, anim_state, desc); - HSD_JObjReqAnimAll(jobj, 0.0f); - HSD_JObjAnimAll(jobj); - } - } - break; - case 3: - if (lb_8000B09C(jobj) == 0) { - HSD_GObjPLink_80390228(gobj); - } - break; - } - HSD_JObjAnimAll(gobj->hsd_obj); -} - -static char gm_Scene_IntroAllstar_SceneDataName[] = "ScItrAllstar_scene_data"; - -static char* lbl_803D9750[] = { - "mc01", - "mc02", - "mc03", - "mc04", - "mc05", - "mc06", - "mc07", - "mc08", - "mc09", - "mc10", - "mc11", - "mc12", - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x1C, - (char*) 0x14, - (char*) 0x14, - (char*) 0x1C, - (char*) 0x20000, - (char*) 0x10000000, - (char*) 0x20, - (char*) 0x100, - (char*) 0x20000, - (char*) 0x10000, - (char*) 0x100, - (char*) 0x04000000, - (char*) 0x802, - (char*) 0x4000, - (char*) 8, - (char*) 0xC00, - (char*) 0x10000, - (char*) 0x01000000, - (char*) 0x20000, - (char*) 0x40, - (char*) 0x80, - (char*) 0x200000, - NULL, - (char*) 0x2000, - NULL, - (char*) 0x60000, - (char*) 0x200000, - (char*) 0x9000, - (char*) 0x53634974, - (char*) 0x724E6F72, - (char*) 0x6D616C5F, - (char*) 0x7363656E, - (char*) 0x655F6461, - (char*) 0x74610000, -}; - -static HSD_Archive* lbl_804D6620; - -typedef struct gm_80187F48_EnterData { - u8 x0; - u8 stage_index; - u16 stkind; -} gm_80187F48_EnterData; - -static inline StKind gm_GetStKind(gm_80187F48_EnterData* data) -{ - return data->stkind; -} - -static inline u64 gm_80187F48_GetAudioConfig(u8 stage_index, char** table) -{ - return lbAudioAx_80026E84(Player_GetPlayerCharacter(0)) | - ((u64*) &table[24])[stage_index]; -} - -static inline void gm_80187F48_SetupCamera(HSD_GObj* gobj, - gm_1832_804736C0_t* data, - HSD_CObj* cobj) -{ - HSD_GObj_SetupProc(gobj, fn_80187910, 0); - HSD_CObjAddAnim(cobj, *(HSD_CameraAnim**) data->x4[1]); - HSD_CObjReqAnim(cobj, 0.0f); -} - -static inline void gm_80187F48_OnEnter_inline(gm_80187F48_EnterData* arg0) -{ - gm_1832_804736C0_t* data; - char** table = lbl_803D9750; - HSD_CObj* cobj; - HSD_GObj* gobj; - u8 stage_index; - - data = &lbl_804736C0; - data->x38 = arg0->x0; - lb_8000FCDC(); - mpColl_80041C78(); - Ground_801C0378(0x40); - Stage_802251E8(gm_GetStKind(arg0), NULL); - Item_80266F70(); - Item_80266FCC(); - efLib_Init(); - efAsync_LoadSync(0); - efAsync_LoadSync(0x1F); - Stage_8022524C(); - Player_InitAllPlayers(); - lbBgFlash_800209F4(); - - stage_index = arg0->stage_index; - data->x37.anim_state = 0; - data->x37.frame_counter = 0; - data->x34 = 0; - data->x36.done = 0; - data->x36.flash = 0; - data->x36.stage_index = stage_index; - data->x37.state2 = 0; - data->x36.active = 0; - - stage_index = arg0->stage_index; - lbl_804D6620 = lbArchive_80016DBC("IrNml", &data->x0, &table[48], - &data->x4, table[stage_index], NULL); - - lbAudioAx_80026F2C((s32) table[stage_index + 12]); - lbAudioAx_8002702C((s32) table[stage_index + 12], - gm_80187F48_GetAudioConfig(stage_index, table)); - lbAudioAx_80027168(); - lbAudioAx_80027648(); - - gobj = GObj_Create(0x13, 0x14, 0); - data->x8 = gobj; - cobj = HSD_CObjLoadDesc((HSD_CObjDesc*) *data->x4); - HSD_GObjObject_80390A70(gobj, HSD_GObj_CameraKind, cobj); - GObj_SetupGXLinkMax(gobj, (GObj_RenderFunc) (Event) Camera_800304E0, 8); - gm_80187F48_SetupCamera(gobj, data, cobj); - - { - HSD_GObj* scene_gobj = GObj_Create(0x13, 0x14, 0); - HSD_CObj* scene_cobj = - HSD_CObjLoadDesc(((SceneDesc*) data->x0)->cameras[0].desc); - HSD_GObjObject_80390A70(scene_gobj, HSD_GObj_CameraKind, scene_cobj); - GObj_SetupGXLinkMax(scene_gobj, HSD_GObj_803910D8, 8); - scene_gobj->gxlink_prios = 0xC00; - } - - { - HSD_GObj* light_gobj = GObj_Create(0xB, 3, 0); - HSD_LObj* lobj = lb_80011AC4(((SceneDesc*) data->x0)->lights); - HSD_GObjObject_80390A70(light_gobj, HSD_GObj_LightKind, lobj); - GObj_SetupGXLink(light_gobj, HSD_GObj_LObjCallback, 0xA, 0); - } - - { - HSD_JObj* model_jobj; - HSD_GObj* model_gobj; - model_gobj = GObj_Create(0xE, 0xF, 0); - model_jobj = - HSD_JObjLoadJoint((*data->x0)[11 - data->x36.stage_index]->joint); - lb_80011C18(model_jobj, 0x08000000); - HSD_GObjObject_80390A70(model_gobj, HSD_GObj_JObjKind, model_jobj); - GObj_SetupGXLink(model_gobj, fn_80187C9C, 0xB, 0xB); - - fn_80187AB4_LoadAnim(model_jobj, data); - HSD_GObj_SetupProc(model_gobj, fn_80187AB4, 0); - } - - { - HSD_GObj* model_gobj = GObj_Create(0xE, 0xF, 0); - HSD_JObj* model_jobj = HSD_JObjLoadJoint((*data->x0)[12]->joint); - int model_anim_idx; - DynamicModelDesc* model_desc; - lb_80011C18(model_jobj, 0x08000000); - HSD_GObjObject_80390A70(model_gobj, HSD_GObj_JObjKind, model_jobj); - GObj_SetupGXLink(model_gobj, fn_80187C9C, 0xB, 0xB); - - model_anim_idx = data->x37.state2; - model_desc = (*data->x0)[12]; - if (model_desc->anims[model_anim_idx] != NULL) { - lb_8000C0E8(model_jobj, model_anim_idx, model_desc); - HSD_JObjReqAnimAll(model_jobj, 0.0f); - HSD_JObjAnimAll(model_jobj); - } - - HSD_JObjReqAnimAll(model_jobj, 0.0f); - HSD_JObjAnimAll(model_jobj); - HSD_GObj_SetupProc(model_gobj, fn_80187CF4, 0); - } - lbAudioAx_80023F28(0x2E); -} - -void gm_Scene_IntroNormal_OnEnter(void* arg0) -{ - PAD_STACK(16); - gm_80187F48_OnEnter_inline(arg0); -} - -void gm_Scene_IntroNormal_OnLeave(void* arg0) -{ - HSD_Archive** var = &lbl_804D6620; - lbArchive_80016EFC(*var); -} - -void gm_Scene_IntroNormal_OnFrame(void) -{ - if (lbl_804736C0.x36.done) { - gm_801A4B60(); - } -} - -f32 gm_801883C0(void) -{ - HSD_GObj* gobj; - HSD_CObj* cobj; - HSD_AObj* aobj; - - gobj = lbl_804736C0.x8; - if (gobj == NULL) { - goto return_default; - } - - cobj = gobj->hsd_obj; - goto check_cobj; - -return_default: - return 0.0f; - -check_cobj: - aobj = cobj->eyepos->aobj; - if (aobj != NULL) { - return aobj->curr_frame; - } - - aobj = cobj->interest->aobj; - if (aobj != NULL) { - return aobj->curr_frame; - } - - return 0.0f; -} - -bool gm_8018841C(void) -{ - if (gm_GetCurrentGameMode() == GM_TRAINING) { - return true; - } - return false; -} diff --git a/src/melee/gm/gm_1832.h b/src/melee/gm/gm_1832.h index b64a8fe9f5..a1a691930d 100644 --- a/src/melee/gm/gm_1832.h +++ b/src/melee/gm/gm_1832.h @@ -32,22 +32,5 @@ /* 186634 */ void fn_80186634(void*); /* 186DFC */ void gm_Scene_IntroEasy_OnFrame(void); /* 186E30 */ void gm_Scene_IntroEasy_OnEnter(void*); -/* 186EFC */ void fn_80186EFC(HSD_GObj*); -/* 186F6C */ void fn_80186F6C(HSD_GObj*); -/* 1873F0 */ HSD_GObjProc* fn_801873F0(void); -/* 187494 */ void fn_80187494(HSD_GObj*, int); -/* 1874FC */ UNK_RET fn_801874FC(UNK_PARAMS); -/* 187714 */ UNK_RET fn_80187714(UNK_PARAMS); -/* 18776C */ void gm_Scene_IntroAllstar_OnFrame(void); -/* 1877A8 */ void gm_Scene_IntroAllstar_OnEnter(UNK_T); -/* 187910 */ void fn_80187910(HSD_GObj*); -/* 187AB4 */ void fn_80187AB4(HSD_GObj*); -/* 187C9C */ void fn_80187C9C(HSD_GObj*, int); -/* 187CF4 */ void fn_80187CF4(HSD_GObj*); -/* 187F48 */ void gm_Scene_IntroNormal_OnEnter(UNK_T); -/* 188364 */ void gm_Scene_IntroNormal_OnLeave(UNK_T); -/* 18838C */ void gm_Scene_IntroNormal_OnFrame(void); -/* 1883C0 */ f32 gm_801883C0(void); -/* 18841C */ bool gm_8018841C(void); #endif diff --git a/src/melee/gm/gm_186E.c b/src/melee/gm/gm_186E.c new file mode 100644 index 0000000000..03360ebc96 --- /dev/null +++ b/src/melee/gm/gm_186E.c @@ -0,0 +1,272 @@ +#include "gm_186E.h" + +#include "gm_unsplit.h" + +#include "cm/camera.h" +#include "ef/efasync.h" +#include "ef/eflib.h" +#include "ft/ftdemo.h" +#include "gm/gm_1601.h" +#include "gm/gm_1A45.h" +#include "gr/ground.h" +#include "gr/stage.h" +#include "it/item.h" +#include "lb/lb_00F9.h" +#include "lb/lbarchive.h" +#include "lb/lbaudio_ax.h" +#include "lb/lbspdisplay.h" +#include "mp/mpcoll.h" +#include "pl/player.h" +#include "sc/types.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +static HSD_Archive* lbl_804D6610; +static SceneDesc* lbl_804D6614; + +static struct enterdata { + int x0, x4; +} lbl_804D6618; + +typedef struct gm_804736B0_t { + int x0, x4; + HSD_JObj* x8; + HSD_JObj* xC; +} gm_804736B0_t; + +gm_804736B0_t lbl_804736B0; +void fn_80186EFC(HSD_GObj* gobj) +{ + HSD_JObj* jobj = GET_JOBJ(gobj); + gm_804736B0_t* state = &lbl_804736B0; + int* counter; + PAD_STACK(8); + HSD_JObjReqAnimAll(state->xC, 0.0f); + HSD_JObjAnimAll(jobj); + counter = &state->x4; + if (*counter < 0x8C) { + (*counter)++; + } else { + state->x0 = 1; + } +} + +typedef struct gm_80186F6C_Entry { + /* 0x00 */ f32 x0; + /* 0x04 */ f32 x4; + /* 0x08 */ f32 x8; + /* 0x0C */ f32 xC; + /* 0x10 */ f32 x10; + /* 0x14 */ f32 x14; +} gm_80186F6C_Entry; + +static gm_80186F6C_Entry lbl_803D9498[] = { + { 0.0f, -4.5f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, 1.5f, 0.0f, 0.6f, 0.6f, 0.6f }, + { 0.0f, -5.3f, 0.0f, 1.3f, 1.3f, 1.3f }, + { 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, 5.5f, 0.0f, 0.75f, 0.75f, 0.75f }, + { -1.1f, -2.0f, 0.0f, 0.5f, 0.5f, 0.5f }, + { -1.0f, -3.5f, 0.0f, 1.3f, 1.3f, 1.3f }, + { -1.0f, -0.5f, 0.0f, 1.35f, 1.35f, 1.35f }, + { -1.0f, -2.0f, 0.0f, 1.4f, 1.4f, 1.4f }, + { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, -6.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { -1.0f, -0.5f, 0.0f, 1.1f, 1.1f, 1.1f }, + { -2.0f, -6.5f, 0.0f, 1.3f, 1.3f, 1.3f }, + { -0.5f, 2.5f, 0.0f, 1.0f, 1.0f, 1.0f }, + { -0.8f, 5.0f, 0.0f, 0.7f, 0.7f, 0.7f }, + { -1.0f, 4.0f, 0.0f, 0.8f, 0.8f, 0.8f }, + { 0.0f, -5.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, 2.0f, 0.0f, 0.9f, 0.9f, 0.9f }, + { -1.0f, -12.5f, 0.0f, 1.8f, 1.8f, 1.8f }, + { -3.5f, 0.0f, 0.0f, 1.8f, 1.8f, 1.8f }, + { 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, -2.5f, 0.0f, 1.1f, 1.1f, 1.1f }, + { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { 0.0f, 5.5f, 0.0f, 0.4f, 0.4f, 0.4f }, + { 1.0f, -11.0f, 0.0f, 1.3f, 1.3f, 1.3f }, + { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }, + { -1.1f, 2.5f, 0.0f, 0.4f, 0.4f, 0.4f }, +}; + +void fn_80186F6C(HSD_GObj* arg0) +{ + Vec3 pos; + HSD_JObj* jobj = arg0->hsd_obj; + HSD_JObj* child = lbl_804736B0.x8; + gm_80186F6C_Entry* entry = lbl_803D9498; + PAD_STACK(4); + + HSD_JObjGetTranslation(child, &pos); + + pos.x -= 7.0f; + pos.x += entry[lbl_804D6618.x0].x0; + pos.y += entry[lbl_804D6618.x0].x4; + pos.z += entry[lbl_804D6618.x0].x8; + + HSD_JObjSetTranslate(jobj, &pos); + + HSD_JObjSetScaleX(jobj, entry[lbl_804D6618.x0].xC); + HSD_JObjSetScaleY(jobj, entry[lbl_804D6618.x0].x10); + HSD_JObjSetScaleZ(jobj, entry[lbl_804D6618.x0].x14); + + { + HSD_GObj* entity2 = Player_GetEntityAtIndex(0, 1); + if (entity2 != NULL) { + HSD_JObj* jobj2 = entity2->hsd_obj; + + HSD_JObjGetTranslation(jobj, &pos); + pos.x += 3.0f; + pos.z -= 5.0f; + pos.y += 4.0f; + HSD_JObjSetTranslate(jobj2, &pos); + + HSD_JObjGetScale(jobj, &pos); + HSD_JObjSetScale(jobj2, &pos); + } + } +} + +#ifdef MUST_MATCH +#pragma push +#pragma dont_inline on +#endif +HSD_GObjProc* fn_801873F0(void) +{ + ftDemo_ObjAllocInit(); + Player_InitAllPlayers(); + Player_80036E20(lbl_804D6618.x0, lbl_804D6610, 1); + Player_SetPlayerCharacter(0, lbl_804D6618.x0); + Player_SetCostumeId(0, lbl_804D6618.x4); + Player_SetPlayerId(0, 0); + Player_SetSlottype(0, Gm_PKind_Demo); + Player_SetFacingDirection(0, 0.0f); + Player_SetModelScale(0, 1.0f); + Player_80036F34(0, 6); + return HSD_GObj_SetupProc(Player_GetEntity(0), fn_80186F6C, 0x16U); +} +#ifdef MUST_MATCH +#pragma pop +#endif + +void fn_80187494(HSD_GObj* gobj, int arg1) +{ + int temp_ret = HSD_CObjSetCurrent(gobj->hsd_obj); + PAD_STACK(4); + if (temp_ret != 0) { + Camera_800313E0(gobj, 1); + gobj->gxlink_prios = 0x801; + HSD_GObj_80390ED0(gobj, 7); + HSD_CObjEndCurrent(); + } +} + +void fn_801874FC(void) +{ + HSD_JObj* sp8; + HSD_GObj* gobj; + HSD_JObj* jobj; + + gobj = GObj_Create(0xE, 0xF, 0); + jobj = HSD_JObjLoadJoint(lbl_804D6614->models[0]->joint); + HSD_GObjObject_80390A70(gobj, HSD_GObj_JObjKind, jobj); + GObj_SetupGXLink(gobj, HSD_GObj_JObjCallback, 0xB, 0); + HSD_GObj_SetupProc(gobj, fn_80186EFC, 0); + gm_8016895C(jobj, lbl_804D6614->models[0], 0); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + lb_80011E24(jobj, &sp8, 0x3A, -1); + HSD_JObjSetTranslateZ(sp8, 10000.0F); + lb_80011E24(jobj, &sp8, 0x3B, -1); + HSD_JObjSetTranslateZ(sp8, 10000.0F); + lb_80011E24(jobj, &lbl_804736B0.x8, 5, -1); + lb_80011E24(jobj, &lbl_804736B0.xC, 6, -1); +} + +/// #fn_801874FC + +#ifdef MUST_MATCH +#pragma push +#pragma dont_inline on +#endif +void fn_80187714(void) +{ + Camera_80028B9C(6); + lb_8000FCDC(); + mpColl_80041C78(); + Ground_801C0378(64); + Stage_802251E8(St_Kind_Dummy, NULL); + Stage_8022524C(); + Item_80266FA8(); + Item_80266FCC(); + efLib_Init(); + efAsync_LoadSync(0); +} +#ifdef MUST_MATCH +#pragma pop +#endif + +void gm_Scene_IntroAllstar_OnFrame(void) +{ + if (lbl_804736B0.x0 != 0) { + lbArchive_80016EFC(lbl_804D6610); + lbAudioAx_800236DC(); + gm_801A4B60(); + } +} + +#ifdef MUST_MATCH +#pragma push +#pragma dont_inline on +#endif +void gm_Scene_IntroAllstar_OnEnter(void* arg0_) +{ + struct enterdata* arg0 = arg0_; + HSD_GObj* temp_r30; + HSD_GObj* temp_r30_2; + HSD_GObj* temp_r30_3; + HSD_LObj* lobj; + HSD_CObj* cobj; + HSD_Fog* fog; + PAD_STACK(8); + + lbl_804736B0.x0 = 0; + lbl_804736B0.x4 = 0; + + lbl_804D6618 = *arg0; + fn_80187714(); + lbl_804D6610 = lbArchive_80016DBC("IrAls", &lbl_804D6614, + "ScItrAllstar_scene_data", 0); + + temp_r30 = GObj_Create(0x13, 0x14, 0); + cobj = HSD_CObjLoadDesc(lbl_804D6614->cameras[0].desc); + HSD_GObjObject_80390A70(temp_r30, HSD_GObj_CameraKind, cobj); + GObj_SetupGXLinkMax(temp_r30, fn_80187494, 8); + temp_r30->gxlink_prios = 0x801; + + temp_r30_2 = GObj_Create(0xB, 3, 0); + lobj = lb_80011AC4(lbl_804D6614->lights); + HSD_GObjObject_80390A70(temp_r30_2, HSD_GObj_LightKind, lobj); + GObj_SetupGXLink(temp_r30_2, HSD_GObj_LObjCallback, 0, 0); + fn_801874FC(); + + temp_r30_3 = GObj_Create(0xE, 0xF, 0); + fog = HSD_FogLoadDesc(lbl_804D6614->fogs[0].desc); + HSD_GObjObject_80390A70(temp_r30_3, HSD_GObj_FogKind, fog); + GObj_SetupGXLink(temp_r30_3, HSD_GObj_FogCallback, 0xB, 0); + fn_801873F0(); + lbAudioAx_80023F28(0x2D); +} +#ifdef MUST_MATCH +#pragma pop +#endif diff --git a/src/melee/gm/gm_186E.h b/src/melee/gm/gm_186E.h new file mode 100644 index 0000000000..719debf6b2 --- /dev/null +++ b/src/melee/gm/gm_186E.h @@ -0,0 +1,17 @@ +#ifndef MELEE_GM_186E_H +#define MELEE_GM_186E_H + +#include + +#include + +/* 186EFC */ void fn_80186EFC(HSD_GObj*); +/* 186F6C */ void fn_80186F6C(HSD_GObj*); +/* 1873F0 */ HSD_GObjProc* fn_801873F0(void); +/* 187494 */ void fn_80187494(HSD_GObj*, int); +/* 1874FC */ UNK_RET fn_801874FC(UNK_PARAMS); +/* 187714 */ UNK_RET fn_80187714(UNK_PARAMS); +/* 18776C */ void gm_Scene_IntroAllstar_OnFrame(void); +/* 1877A8 */ void gm_Scene_IntroAllstar_OnEnter(UNK_T); + +#endif diff --git a/src/melee/gm/gm_1879.c b/src/melee/gm/gm_1879.c new file mode 100644 index 0000000000..1ec11d9293 --- /dev/null +++ b/src/melee/gm/gm_1879.c @@ -0,0 +1,448 @@ +#include "gm_1879.h" + +#include "gm_unsplit.h" + +#include "cm/camera.h" +#include "dolphin/pad.h" +#include "ef/efasync.h" +#include "ef/eflib.h" +#include "gm/gm_1A36.h" +#include "gm/gm_1A3F.h" +#include "gm/gm_1A45.h" +#include "gm/types.h" +#include "gr/ground.h" +#include "gr/stage.h" +#include "it/item.h" +#include "lb/lb_00B0.h" +#include "lb/lb_00F9.h" +#include "lb/lbarchive.h" +#include "lb/lbaudio_ax.h" +#include "lb/lbbgflash.h" +#include "lb/lbspdisplay.h" +#include "mn/inlines.h" +#include "mp/mpcoll.h" +#include "pl/player.h" +#include "sc/types.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +typedef struct gm_1832_StageState { + u8 stage_index : 5; + u8 done : 1; + u8 flash : 1; + u8 active : 1; +} gm_1832_StageState; + +static struct gm_1832_804736C0_t { + SceneDesc* x0; + struct SceneCameraDesc* x4; + HSD_GObj* x8; + u8 pad_C[0x28]; + u16 x34; + gm_1832_StageState x36; + struct { + u8 frame_counter : 4; + u8 anim_state : 2; + u8 state2 : 2; + } x37; + u8 x38; + u8 pad_39[7]; +} lbl_804736C0; +ASSERT_SIZE(struct gm_1832_804736C0_t, 0x40); +typedef struct gm_1832_804736C0_t gm_1832_804736C0_t; + +static inline void fn_80187AB4_LoadAnim(HSD_JObj* jobj, + gm_1832_804736C0_t* data) +{ + DynamicModelDesc* desc = data->x0->models[11 - data->x36.stage_index]; + int anim_state; + + if (desc->anims != NULL) { + anim_state = data->x37.anim_state; + if (desc->anims[anim_state] != NULL) { + lb_8000C0E8(jobj, anim_state, desc); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + } + } +} + +void fn_80187910(HSD_GObj* arg0) +{ + Vec3 sp10; + gm_1832_804736C0_t* data; + HSD_CObj* cobj; + s32 frame; + f32 scale; + + PAD_STACK(4); + (void) 0.0f; + data = &lbl_804736C0; + cobj = arg0->hsd_obj; + if (gm_GetButtonsTriggered(data->x38) & PAD_BUTTON_A) { + data->x37.frame_counter = (s32) cobj->eyepos->aobj->curr_frame / 300; + if (++data->x37.frame_counter >= 8U) { + data->x37.frame_counter = 0; + } + frame = data->x37.frame_counter * 0x12C; + HSD_CObjRemoveAnim(cobj); + HSD_CObjAddAnim(cobj, *data->x4->anims); + HSD_CObjReqAnim(cobj, (f32) frame); + } + HSD_CObjAnim(cobj); + HSD_CObjGetInterest(cobj, &sp10); + scale = Ground_801C0498(); + sp10.x *= scale; + sp10.y *= scale; + sp10.z *= scale; + HSD_CObjSetInterest(cobj, &sp10); + HSD_CObjGetEyePosition(cobj, &sp10); + scale = Ground_801C0498(); + sp10.x *= scale; + sp10.y *= scale; + sp10.z *= scale; + HSD_CObjSetEyePosition(cobj, &sp10); +} + +typedef struct { + u8 pad_hi : 4; + u8 state : 2; + u8 pad_lo : 2; +} x37_state_bits; + +void fn_80187AB4(HSD_GObj* gobj) +{ + gm_1832_804736C0_t* data = &lbl_804736C0; + HSD_JObj* jobj = GET_JOBJ(gobj); + int state = data->x37.anim_state; + PAD_STACK(16); + + switch (state) { + case 0: + if (lb_8000B09C(jobj) == 0) { + data->x37.anim_state = 1; + fn_80187AB4_LoadAnim(jobj, data); + data->x34 = 0x960; + } + break; + case 1: + if ((u32) data->x36.active == 1U) { + data->x36.flash = 1; + } + if (data->x36.flash) { + data->x37.anim_state = 2; + data->x36.done = 1; + lbBgFlash_8002063C(1); + } + if (lb_8000B09C(jobj) == 0) { + fn_80187AB4_LoadAnim(jobj, data); + } + break; + case 2: + if (lb_8000B09C(jobj) == 0) { + data->x36.done = 1; + HSD_GObjPLink_80390228(gobj); + } + break; + } + HSD_JObjAnimAll(GET_JOBJ(gobj)); +} + +void fn_80187C9C(HSD_GObj* gobj, int arg1) +{ + GXSetZMode(0, GX_NEVER, 0); + HSD_GObj_JObjCallback(gobj, arg1); + HSD_StateInvalidate(0x40); +} + +void fn_80187CF4(HSD_GObj* gobj) +{ + gm_1832_804736C0_t* data = &lbl_804736C0; + HSD_JObj* jobj = gobj->hsd_obj; + int state = data->x37.state2; + DynamicModelDesc* desc; + int anim_state; + + switch (state) { + case 0: + if (lb_8000B09C(jobj) == 0) { + data->x37.state2 = 1; + anim_state = data->x37.state2; + desc = data->x0->models[12]; + if (desc->anims[anim_state] != NULL) { + lb_8000C0E8(jobj, anim_state, desc); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + } + } + break; + case 1: + if (lb_8000B09C(jobj) == 0) { + data->x37.state2 = 2; + anim_state = data->x37.state2; + desc = data->x0->models[12]; + if (desc->anims[anim_state] != NULL) { + lb_8000C0E8(jobj, anim_state, desc); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + } + } + break; + case 2: + if (gm_GetButtonsTriggered(data->x38) & PAD_BUTTON_START) { + sfxForward(); + data->x36.active = 1; + data->x37.state2 = 3; + anim_state = data->x37.state2; + desc = data->x0->models[12]; + if (desc->anims[anim_state] != NULL) { + lb_8000C0E8(jobj, anim_state, desc); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + } + } else if (lb_8000B09C(jobj) == 0) { + anim_state = data->x37.state2; + desc = data->x0->models[12]; + if (desc->anims[anim_state] != NULL) { + lb_8000C0E8(jobj, anim_state, desc); + HSD_JObjReqAnimAll(jobj, 0.0f); + HSD_JObjAnimAll(jobj); + } + } + break; + case 3: + if (lb_8000B09C(jobj) == 0) { + HSD_GObjPLink_80390228(gobj); + } + break; + } + HSD_JObjAnimAll(gobj->hsd_obj); +} + +static char* gm_1832_NormalArchiveNames[12] = { + "mc01", "mc02", "mc03", "mc04", "mc05", "mc06", + "mc07", "mc08", "mc09", "mc10", "mc11", "mc12", +}; + +static s32 gm_1832_NormalBgmIds[12] = { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, + 0x1C, 0x1C, 0x1C, 0x14, 0x14, 0x1C }; + +static u64 gm_1832_NormalAudioMasks[12] = { + 0x0002000010000000, 0x0000002000000100, 0x0002000000010000, + 0x0000010004000000, 0x0000080200004000, 0x0000000800000C00, + 0x0001000001000000, 0x0002000000000040, 0x0000008000200000, + 0x0000000000002000, 0x0000000000060000, 0x0020000000009000, +}; + +static char gm_1832_NormalSceneDataName[] = "ScItrNormal_scene_data"; + +static HSD_Archive* lbl_804D6620; + +typedef struct gm_80187F48_EnterData { + u8 x0; + u8 stage_index; + u16 stkind; +} gm_80187F48_EnterData; + +static inline StKind gm_GetStKind(gm_80187F48_EnterData* data) +{ + return data->stkind; +} + +static inline u64 gm_80187F48_GetAudioConfig(u8 stage_index) +{ + return lbAudioAx_80026E84(Player_GetPlayerCharacter(0)) | + gm_1832_NormalAudioMasks[stage_index]; +} + +static inline void gm_80187F48_OnEnter_inline(gm_80187F48_EnterData* arg0) +{ + gm_1832_804736C0_t* data; + HSD_GObj* gobj; + HSD_CObj* cobj; + u8 stage_index; + + data = &lbl_804736C0; + data->x38 = arg0->x0; + lb_8000FCDC(); + mpColl_80041C78(); + Ground_801C0378(0x40); + Stage_802251E8(gm_GetStKind(arg0), NULL); + Item_80266F70(); + Item_80266FCC(); + efLib_Init(); + efAsync_LoadSync(0); + efAsync_LoadSync(0x1F); + Stage_8022524C(); + Player_InitAllPlayers(); + lbBgFlash_800209F4(); + + stage_index = arg0->stage_index; + data->x37.anim_state = 0; + data->x37.frame_counter = 0; + data->x34 = 0; + data->x36.done = 0; + data->x36.flash = 0; + data->x36.stage_index = stage_index; + data->x37.state2 = 0; + data->x36.active = 0; + + { + u8 si = arg0->stage_index; + lbl_804D6620 = lbArchive_80016DBC( + "IrNml", &data->x0, gm_1832_NormalSceneDataName, &data->x4, + gm_1832_NormalArchiveNames[si], NULL); + + lbAudioAx_80026F2C(gm_1832_NormalBgmIds[si]); + lbAudioAx_8002702C(gm_1832_NormalBgmIds[si], + gm_80187F48_GetAudioConfig(si)); + } + lbAudioAx_80027168(); + lbAudioAx_80027648(); + + gobj = GObj_Create(0x13, 0x14, 0); + data->x8 = gobj; + cobj = HSD_CObjLoadDesc(data->x4->desc); + HSD_GObjObject_80390A70(gobj, HSD_GObj_CameraKind, cobj); + GObj_SetupGXLinkMax(gobj, (GObj_RenderFunc) (Event) Camera_800304E0, 8); + HSD_GObj_SetupProc(gobj, fn_80187910, 0); + HSD_CObjAddAnim(cobj, *data->x4->anims); + HSD_CObjReqAnim(cobj, 0.0f); + + { + HSD_GObj* scene_gobj = GObj_Create(0x13, 0x14, 0); + HSD_CObj* scene_cobj = HSD_CObjLoadDesc(data->x0->cameras[0].desc); + HSD_GObjObject_80390A70(scene_gobj, HSD_GObj_CameraKind, scene_cobj); + GObj_SetupGXLinkMax(scene_gobj, HSD_GObj_803910D8, 8); + scene_gobj->gxlink_prios = 0xC00; + } + + { + HSD_GObj* light_gobj = GObj_Create(0xB, 3, 0); + HSD_LObj* lobj = lb_80011AC4(data->x0->lights); + HSD_GObjObject_80390A70(light_gobj, HSD_GObj_LightKind, lobj); + GObj_SetupGXLink(light_gobj, HSD_GObj_LObjCallback, 0xA, 0); + } + + { + HSD_JObj* model_jobj; + HSD_GObj* model_gobj; + gm_1832_StageState* state = &data->x36; + DynamicModelDesc* model_desc; + HSD_AnimJoint** anims; + int model_stage; + int model_anim_idx; + + model_gobj = GObj_Create(0xE, 0xF, 0); + model_jobj = HSD_JObjLoadJoint( + data->x0->models[11 - state->stage_index]->joint); + lb_80011C18(model_jobj, 0x08000000); + HSD_GObjObject_80390A70(model_gobj, HSD_GObj_JObjKind, model_jobj); + GObj_SetupGXLink(model_gobj, fn_80187C9C, 0xB, 0xB); + + model_stage = state->stage_index; + (void) model_stage; + model_desc = data->x0->models[11 - model_stage]; + anims = model_desc->anims; + if (anims != NULL) { + model_anim_idx = data->x37.anim_state; + if (anims[model_anim_idx] != NULL) { + lb_8000C0E8(model_jobj, model_anim_idx, model_desc); + HSD_JObjReqAnimAll(model_jobj, 0.0f); + HSD_JObjAnimAll(model_jobj); + } + } + HSD_GObj_SetupProc(model_gobj, fn_80187AB4, 0); + } + + { + HSD_GObj* model_gobj = GObj_Create(0xE, 0xF, 0); + HSD_JObj* model_jobj = HSD_JObjLoadJoint(data->x0->models[12]->joint); + int model_anim_idx; + DynamicModelDesc* model_desc; + lb_80011C18(model_jobj, 0x08000000); + HSD_GObjObject_80390A70(model_gobj, HSD_GObj_JObjKind, model_jobj); + GObj_SetupGXLink(model_gobj, fn_80187C9C, 0xB, 0xB); + + model_anim_idx = data->x37.state2; + model_desc = data->x0->models[12]; + if (model_desc->anims[model_anim_idx] != NULL) { + lb_8000C0E8(model_jobj, model_anim_idx, model_desc); + HSD_JObjReqAnimAll(model_jobj, 0.0f); + HSD_JObjAnimAll(model_jobj); + } + + HSD_JObjReqAnimAll(model_jobj, 0.0f); + HSD_JObjAnimAll(model_jobj); + HSD_GObj_SetupProc(model_gobj, fn_80187CF4, 0); + } + lbAudioAx_80023F28(0x2E); +} + +void gm_Scene_IntroNormal_OnEnter(void* arg0) +{ + PAD_STACK(32); + gm_80187F48_OnEnter_inline(arg0); +} + +void gm_Scene_IntroNormal_OnLeave(void* arg0) +{ + HSD_Archive** var = &lbl_804D6620; + lbArchive_80016EFC(*var); +} + +void gm_Scene_IntroNormal_OnFrame(void) +{ + if (lbl_804736C0.x36.done) { + gm_801A4B60(); + } +} + +f32 gm_801883C0(void) +{ + HSD_GObj* gobj; + HSD_CObj* cobj; + HSD_AObj* aobj; + + gobj = lbl_804736C0.x8; + if (gobj == NULL) { + goto return_default; + } + + cobj = gobj->hsd_obj; + goto check_cobj; + +return_default: + return 0.0f; + +check_cobj: + aobj = cobj->eyepos->aobj; + if (aobj != NULL) { + return aobj->curr_frame; + } + + aobj = cobj->interest->aobj; + if (aobj != NULL) { + return aobj->curr_frame; + } + + return 0.0f; +} + +bool gm_8018841C(void) +{ + if (gm_GetCurrentGameMode() == GM_TRAINING) { + return true; + } + return false; +} diff --git a/src/melee/gm/gm_1879.h b/src/melee/gm/gm_1879.h new file mode 100644 index 0000000000..a4d94b22fc --- /dev/null +++ b/src/melee/gm/gm_1879.h @@ -0,0 +1,18 @@ +#ifndef MELEE_GM_1879_H +#define MELEE_GM_1879_H + +#include + +#include + +/* 187910 */ void fn_80187910(HSD_GObj*); +/* 187AB4 */ void fn_80187AB4(HSD_GObj*); +/* 187C9C */ void fn_80187C9C(HSD_GObj*, int); +/* 187CF4 */ void fn_80187CF4(HSD_GObj*); +/* 187F48 */ void gm_Scene_IntroNormal_OnEnter(UNK_T); +/* 188364 */ void gm_Scene_IntroNormal_OnLeave(UNK_T); +/* 18838C */ void gm_Scene_IntroNormal_OnFrame(void); +/* 1883C0 */ f32 gm_801883C0(void); +/* 18841C */ bool gm_8018841C(void); + +#endif diff --git a/src/melee/gm/gm_unsplit.h b/src/melee/gm/gm_unsplit.h index 8855ebc5d1..d4d140d112 100644 --- a/src/melee/gm/gm_unsplit.h +++ b/src/melee/gm/gm_unsplit.h @@ -18,6 +18,8 @@ #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export +#include // IWYU pragma: export +#include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export #include // IWYU pragma: export diff --git a/src/melee/gr/grcorneria.c b/src/melee/gr/grcorneria.c index ee2605aa8c..ddc3fec3ed 100644 --- a/src/melee/gr/grcorneria.c +++ b/src/melee/gr/grcorneria.c @@ -16,7 +16,7 @@ #include "cm/camera.h" #include "ft/ftlib.h" -#include "gm/gm_1832.h" +#include "gm/gm_1879.h" #include "gm/gm_1A45.h" #include "gm/gmregclear.h" #include "if/ifcoget.h"