diff --git a/config/GALE01/symbols.txt b/config/GALE01/symbols.txt index 7533ecf3cb..666b772c90 100644 --- a/config/GALE01/symbols.txt +++ b/config/GALE01/symbols.txt @@ -1374,7 +1374,7 @@ efLib_8005FAB8 = .text:0x8005FAB8; // type:function size:0x12C scope:global fn_8005FBE4 = .text:0x8005FBE4; // type:function size:0xF4 efLib_8005FCD8 = .text:0x8005FCD8; // type:function size:0x104 scope:global efSync_Spawn = .text:0x8005FDDC; // type:function size:0x1F94 scope:global -ef_80061D70 = .text:0x80061D70; // type:function size:0x1BC0 scope:global +efSync_SpawnSpecial = .text:0x80061D70; // type:function size:0x1BC0 scope:global efAsync_80063930 = .text:0x80063930; // type:function size:0x396C scope:global efAsync_8006729C = .text:0x8006729C; // type:function size:0x70 scope:global efAsync_8006730C = .text:0x8006730C; // type:function size:0x70 scope:global @@ -20730,9 +20730,9 @@ lbl_803BF810 = .data:0x803BF810; // type:object size:0xC scope:global align:4 @1118 = .data:0x803BF81C; // type:object size:0x25 scope:local data:string efSync_803BF848 = .data:0x803BF848; // type:object size:0x25 scope:global data:string jumptable_803BF870 = .data:0x803BF870; // type:object size:0x160 scope:local -@697 = .data:0x803BF9D0; // type:object size:0x25 scope:local data:string +ef_803BF9D0 = .data:0x803BF9D0; // type:object size:0x25 scope:local data:string ...data.0 = .data:0x803BF9D0; // type:label scope:local -@701 = .data:0x803BF9F8; // type:object size:0x104 scope:local +@737 = .data:0x803BF9F8; // type:object size:0x104 scope:local efAsync_803BFB00 = .data:0x803BFB00; // type:object size:0x25 scope:global data:string jumptable_803BFB28 = .data:0x803BFB28; // type:object size:0x240 scope:local efAsync_803BFD68 = .data:0x803BFD68; // type:object size:0xD scope:global data:string @@ -26066,8 +26066,8 @@ mpIsland_804D3998 = .sdata:0x804D3998; // type:object size:0x6 scope:global data @1008 = .sdata:0x804D39BC; // type:object size:0x6 scope:local align:4 data:string efSync_804D39C8 = .sdata:0x804D39C8; // type:object size:0x7 scope:global data:string efSync_804D39D0 = .sdata:0x804D39D0; // type:object size:0x5 scope:global data:string -@695 = .sdata:0x804D39D8; // type:object size:0x7 scope:local data:string -@696 = .sdata:0x804D39E0; // type:object size:0x5 scope:local data:string +ef_804D39D8 = .sdata:0x804D39D8; // type:object size:0x7 scope:local data:string +ef_804D39E0 = .sdata:0x804D39E0; // type:object size:0x5 scope:local data:string efAsync_804D39E8 = .sdata:0x804D39E8; // type:object size:0x7 scope:global data:string efAsync_804D39F0 = .sdata:0x804D39F0; // type:object size:0x5 scope:global data:string efAsync_804D39F8 = .sdata:0x804D39F8; // type:object size:0x2 scope:global data:string @@ -29194,12 +29194,12 @@ efSync_804D81BC = .sdata2:0x804D81BC; // type:object size:0x4 scope:global align efSync_804D81C0 = .sdata2:0x804D81C0; // type:object size:0x8 scope:global align:8 data:double efSync_804D81C8 = .sdata2:0x804D81C8; // type:object size:0x4 scope:global align:4 data:float efSync_804D81CC = .sdata2:0x804D81CC; // type:object size:0x4 scope:global align:4 data:float -@692 = .sdata2:0x804D81D0; // type:object size:0x4 scope:local align:4 data:float -@693 = .sdata2:0x804D81D8; // type:object size:0x8 scope:local align:8 data:double -@694 = .sdata2:0x804D81E0; // type:object size:0x8 scope:local align:8 data:double -@698 = .sdata2:0x804D81E8; // type:object size:0x4 scope:local align:4 data:float -@699 = .sdata2:0x804D81EC; // type:object size:0x4 scope:local align:4 data:float -@700 = .sdata2:0x804D81F0; // type:object size:0x4 scope:local align:4 data:float +ef_804D81D0 = .sdata2:0x804D81D0; // type:object size:0x4 scope:local align:4 data:float +ef_804D81D8 = .sdata2:0x804D81D8; // type:object size:0x8 scope:local align:8 data:double +ef_804D81E0 = .sdata2:0x804D81E0; // type:object size:0x8 scope:local align:8 data:double +ef_804D81E8 = .sdata2:0x804D81E8; // type:object size:0x4 scope:local align:4 data:float +ef_804D81EC = .sdata2:0x804D81EC; // type:object size:0x4 scope:local align:4 data:float +ef_804D81F0 = .sdata2:0x804D81F0; // type:object size:0x4 scope:local align:4 data:float efAsync_804D81F8 = .sdata2:0x804D81F8; // type:object size:0x4 scope:global align:4 data:float efAsync_804D81FC = .sdata2:0x804D81FC; // type:object size:0x4 scope:global align:4 data:float efAsync_804D8200 = .sdata2:0x804D8200; // type:object size:0x4 scope:global align:4 data:float diff --git a/src/melee/ef/ef_061D.c b/src/melee/ef/ef_061D.c index 887e900398..950e115fd5 100644 --- a/src/melee/ef/ef_061D.c +++ b/src/melee/ef/ef_061D.c @@ -1,521 +1,508 @@ #include "ef_061D.h" #include "eflib.h" +#include "math.h" #include "types.h" +#include "baselib/class.h" +#include "baselib/debug.h" + #include "baselib/forward.h" #include "baselib/gobj.h" +#include "baselib/list.h" +#include "baselib/object.h" +#include "baselib/pobj.h" + +#include + +extern char ef_803BF9D0[]; +extern char ef_804D39D8[]; +extern char ef_804D39E0[]; + +#define efSpecial_HSD_ASSERT_MSG(line) \ + (((line) == 619) ? "rotate" \ + : ((line) == 640 || (line) == 661 || (line) == 682) ? ef_803BF9D0 \ + : ((line) == 761 || (line) == 824) ? "scale" \ + : ((line) == 917 || (line) == 980) ? "translate" \ + : ((line) == 1171) ? "mtx" \ + : ef_804D39E0) + +#undef HSD_ASSERT +#define HSD_ASSERT(line, cond) \ + ((cond) ? ((void) 0) \ + : __assert(ef_804D39D8, line, efSpecial_HSD_ASSERT_MSG(line))) + #include "baselib/jobj.h" -#include "baselib/particle.h" -// WIP CLEAN THIS UP AND SYNC +#undef HSD_ASSERT +#define HSD_ASSERT(line, cond) \ + ((cond) ? ((void) 0) : __assert(__FILE__, line, #cond)) -#define EF061D_VA_ARG(t) (*((t*) __va_arg(vlist_arg, _var_arg_typeof(t)))) +#include "baselib/particle.h" +#include "ft/inlines.h" -extern volatile u32 efLib_804D64E8; -extern volatile s32 efLib_804D64F0; +/* 4D64E8 */ extern s32 efLib_804D64E8; +/* 4D64F0 */ extern s32 efLib_804D64F0; +/* 3BF9D0 */ char ef_803BF9D0[] = "!(jobj->flags & JOBJ_USE_QUATERNION)"; +/* 4D39D8 */ SDATA char ef_804D39D8[] = "jobj.h"; +/* 4D39E0 */ SDATA char ef_804D39E0[] = "jobj"; +/* 4D81D0 */ extern const f32 ef_804D81D0; +/* 4D81D8 */ extern const f64 ef_804D81D8; +/* 4D81E0 */ extern const f64 ef_804D81E0; +/* 4D81E8 */ extern const f32 ef_804D81E8; +/* 4D81EC */ extern const f32 ef_804D81EC; +/* 4D81F0 */ extern const f32 ef_804D81F0; -void* ef_80061D70(s32 gfx_id, HSD_GObj* gobj, va_list vlist) +void* efSync_SpawnSpecial(s32 gfx_id, HSD_GObj* arg_gobj, void* vlist) { - Effect* effect; - HSD_JObj* jobj; - f32 rotate_y; - Vec3 scale; - f32* value_ptr; void* ret_obj; - void* vlist_arg; + u8 sp_pad128[0x8]; + Vec3 sp130; + u8 sp_pad130[0x4]; + Effect* eff_2; + Effect* eff_1; + Fighter* fighter_1; + FighterBone* fighter_bone_1; + f64 f64_1; + f32 f32_1; + HSD_JObj* jobj_1; + HSD_JObj* jobj_2; + s32 cnt; + PAD_STACK(0x98); - vlist_arg = vlist; - ret_obj = NULL; efLib_804D64E8 = 1; - PAD_STACK(80); + ret_obj = NULL; switch (gfx_id) { case 0x479: - ret_obj = efLib_8005C9FC(0x3F2, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x3F2, va_arg(vlist, Vec3*)); break; - case 0x47A: { - f64 temp_d; - f32 rotate_y_2; - - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = efLib_8005C1B4(0x3E8U, gobj, jobj); + case 0x47A: + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = efLib_8005C1B4(0x3E8, arg_gobj, jobj_1); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } - hsd_8039EFAC(0, 1, 0x3E9, jobj); + hsd_8039EFAC(0, 1, 0x3E9, jobj_1); break; - } case 0x47B: - ret_obj = efLib_8005C9FC(0x3EB, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x3EB, va_arg(vlist, Vec3*)); break; case 0x47C: - ret_obj = efLib_8005C3DC(0x3E9U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C3DC(0x3E9, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x10 = efLib_8005F08C; + eff_1 = ret_obj; + eff_1->x10 = efLib_8005F08C; } break; case 0x47D: - ret_obj = hsd_8039EFAC(0, 1, 0x3F0, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 1, 0x3F0, va_arg(vlist, HSD_JObj*)); break; case 0x47E: - ret_obj = hsd_8039EFAC(0, 1, 0x3F1, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 1, 0x3F1, va_arg(vlist, HSD_JObj*)); break; case 0x47F: - ret_obj = hsd_8039EFAC(0, 2, 0x7D4, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 2, 0x7D4, va_arg(vlist, HSD_JObj*)); break; case 0x480: - ret_obj = hsd_8039EFAC(0, 2, 0x7D2, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 2, 0x7D2, va_arg(vlist, HSD_JObj*)); break; case 0x481: - ret_obj = hsd_8039EFAC(0, 2, 0x7D3, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 2, 0x7D3, va_arg(vlist, HSD_JObj*)); break; case 0x482: - ret_obj = efLib_8005C1B4(0x7D0U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0x7D0, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x10 = efLib_8005EBC8; + eff_1 = ret_obj; + eff_1->x10 = efLib_8005EBC8; } break; case 0x483: - ret_obj = efLib_8005C9FC(0x7D7, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x7D7, va_arg(vlist, Vec3*)); break; case 0x484: - ret_obj = hsd_8039EFAC(0, 2, 0x7DB, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 2, 0x7DB, va_arg(vlist, HSD_JObj*)); break; case 0x485: - ret_obj = hsd_8039EFAC(0, 2, 0x7DE, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 2, 0x7DE, va_arg(vlist, HSD_JObj*)); break; - case 0x486: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C814(0x7D1U, gobj, EF061D_VA_ARG(Vec3*)); + case 0x486: + ret_obj = efLib_8005C814(0x7D1, arg_gobj, va_arg(vlist, Vec3*)); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } break; - } case 0x487: - ret_obj = efLib_8005C5C4(0x7D2U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C5C4(0x7D2, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x488: - ret_obj = efLib_8005C3DC(0xBB8U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C3DC(0xBB8, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x489: - ret_obj = efLib_8005C3DC(0xBB9U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C3DC(0xBB9, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x48A: - ret_obj = efLib_8005C3DC(0xBBAU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C3DC(0xBBA, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x48B: - ret_obj = efLib_8005C1B4(0xBBBU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0xBBB, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x48C: - ret_obj = efLib_8005C1B4(0xBBCU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0xBBC, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x10 = efLib_8005E3A0; + eff_1 = ret_obj; + eff_1->x10 = efLib_8005E3A0; } break; case 0x48D: - ret_obj = efLib_8005CF40(0xBC0, vlist_arg); + ret_obj = efLib_8005CF40(0xBC0, vlist); break; - case 0x48E: { - ret_obj = efLib_8005C814(0xBBDU, gobj, EF061D_VA_ARG(Vec3*)); + case 0x48E: + ret_obj = efLib_8005C814(0xBBD, arg_gobj, va_arg(vlist, Vec3*)); if (ret_obj != NULL) { - effect = ret_obj; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), 1.5707964f); - HSD_JObjSetRotationZ(GET_JOBJ(effect->gobj), *EF061D_VA_ARG(f32*)); + eff_1 = ret_obj; + HSD_JObjSetRotationY(eff_1->gobj->hsd_obj, ef_804D81E8); + HSD_JObjSetRotationZ(eff_1->gobj->hsd_obj, *va_arg(vlist, f32*)); } break; - } - case 0x48F: { - ret_obj = efLib_8005C6F4(0xFA0U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x48F: + ret_obj = efLib_8005C6F4(0xFA0, arg_gobj, va_arg(vlist, void*)); if (ret_obj != NULL) { ((Effect*) ret_obj)->x0 = - (void*) efLib_8005C6F4(0xFA1U, gobj, EF061D_VA_ARG(HSD_JObj*)); + (void*) efLib_8005C6F4(0xFA1, arg_gobj, va_arg(vlist, void*)); } break; - } - case 0x490: { - ret_obj = efLib_8005C1B4(0xFA2U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x490: + ret_obj = efLib_8005C1B4(0xFA2, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->translate.z = *EF061D_VA_ARG(f32*); - ((Effect*) ret_obj)->x10 = efLib_8005EDDC; + eff_1 = ret_obj; + eff_1->translate.z = *va_arg(vlist, f32*); + eff_1->x10 = efLib_8005EDDC; } break; - } case 0x491: - ret_obj = efLib_8005C1B4(0xFA4U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0xFA4, arg_gobj, va_arg(vlist, HSD_JObj*)); break; - case 0x492: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C3DC(0xFA3U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x492: + ret_obj = efLib_8005C3DC(0xFA3, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } break; - } - case 0x493: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C3DC(0xFA5U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x493: + ret_obj = efLib_8005C3DC(0xFA5, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } break; - } - case 0x494: { - void* user_data; - HSD_JObj** jobj_ptr; - HSD_JObj* jobj; - HSD_JObj* jobj_2; - Effect* effect_1; - Effect* effect_2; - ef_UnkStruct2* next_eff; - u16 effect_flags; - - effect_flags = 0x41; - user_data = gobj->user_data; - jobj_ptr = *(HSD_JObj***) ((u8*) user_data + 0x5E8); - jobj = jobj_ptr[0xB0]; - jobj_2 = jobj_ptr[4]; - ret_obj = efLib_8005C2BC(0x1388U, gobj, jobj); + case 0x494: + fighter_1 = GET_FIGHTER(arg_gobj); + fighter_bone_1 = fighter_1->parts; + jobj_1 = fighter_bone_1[44].joint; + jobj_2 = fighter_bone_1[1].joint; + ret_obj = efLib_8005C2BC(0x1388, arg_gobj, jobj_1); if (ret_obj != NULL) { - effect_1 = ret_obj; - effect_1->x10 = efLib_8005E090; - effect_1->x24 = effect_flags; - effect_1->x14 = NULL; - next_eff = (void*) efLib_8005C1B4(0x1389U, gobj, jobj); - effect_1->x0 = next_eff; - if (next_eff != NULL) { - effect_2 = (void*) effect_1->x0; - effect_2->x10 = efLib_8005E090; - effect_2->x24 = effect_flags; - effect_2->x14 = user_data; - next_eff = (void*) efLib_8005C1B4(0x138AU, gobj, jobj_2); - effect_2->x0 = next_eff; - if (next_eff != NULL) { - effect_1 = (void*) effect_2->x0; - effect_1->x10 = efLib_8005E090; - effect_1->x24 = effect_flags; - effect_1->x14 = user_data; + ((Effect*) ret_obj)->x10 = efLib_8005E090; + ((Effect*) ret_obj)->x24 = 0x41; + ((Effect*) ret_obj)->x14 = NULL; + eff_1 = efLib_8005C1B4(0x1389, arg_gobj, jobj_1); + ((Effect*) ret_obj)->x0 = (void*) eff_1; + if (eff_1 != NULL) { + eff_1 = (Effect*) ((Effect*) ret_obj)->x0; + eff_1->x10 = efLib_8005E090; + eff_1->x24 = 0x41; + eff_1->x14 = fighter_1; + eff_2 = efLib_8005C1B4(0x138A, arg_gobj, jobj_2); + eff_1->x0 = (void*) eff_2; + if (eff_2 != NULL) { + eff_2 = (Effect*) eff_1->x0; + eff_2->x10 = efLib_8005E090; + eff_2->x24 = 0x41; + eff_2->x14 = fighter_1; } } } break; - } - case 0x495: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C3DC(0x138BU, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x495: + ret_obj = efLib_8005C3DC(0x138B, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } break; - } case 0x496: - ret_obj = efLib_8005C1B4(0x138CU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0x138C, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x497: - ret_obj = efLib_8005C1B4(0x138DU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C1B4(0x138D, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x10 = efLib_8005E2B4; + eff_1 = ret_obj; + eff_1->x10 = efLib_8005E2B4; } break; case 0x498: - ret_obj = efLib_8005C2BC(0x138EU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C2BC(0x138E, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x499: - ret_obj = efLib_8005C2BC(0x138FU, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C2BC(0x138F, arg_gobj, va_arg(vlist, HSD_JObj*)); break; case 0x49A: - ret_obj = efLib_8005CF40(0x138B, vlist_arg); + ret_obj = efLib_8005CF40(0x138B, vlist); break; case 0x49B: - ret_obj = hsd_8039EFAC(0, 5, 0x138F, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 5, 0x138F, va_arg(vlist, HSD_JObj*)); break; case 0x49C: - ret_obj = hsd_8039EFAC(0, 5, 0x1395, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = hsd_8039EFAC(0, 5, 0x1395, va_arg(vlist, HSD_JObj*)); break; - case 0x49D: { - HSD_JObj* jobj; - - ret_obj = efLib_8005C814(0x1390U, gobj, EF061D_VA_ARG(Vec3*)); + case 0x49D: + ret_obj = efLib_8005C814(0x1390, arg_gobj, va_arg(vlist, Vec3*)); if (ret_obj != NULL) { - HSD_JObj* gobj_jobj = GET_JOBJ(gobj); - - jobj = GET_JOBJ(((Effect*) ret_obj)->gobj); - HSD_JObjSetScaleX(jobj, HSD_JObjGetScaleY(gobj_jobj)); - HSD_JObjSetScaleY(jobj, HSD_JObjGetScaleY(gobj_jobj)); - HSD_JObjSetScaleZ(jobj, HSD_JObjGetScaleY(gobj_jobj)); - HSD_JObjSetTranslateZ(HSD_JObjGetChild(jobj), - HSD_JObjGetTranslationZ(jobj) - 6.0f); - if (*EF061D_VA_ARG(f32*) < 0.0f) { - HSD_JObjSetRotationY(jobj, -1.5707964f); - HSD_JObjSetRotationZ(jobj, -*EF061D_VA_ARG(f32*)); + eff_1 = ret_obj; + jobj_2 = arg_gobj->hsd_obj; + jobj_1 = GET_JOBJ(eff_1->gobj); + HSD_JObjSetScaleX(jobj_1, HSD_JObjGetScaleY(jobj_2)); + HSD_JObjSetScaleY(jobj_1, HSD_JObjGetScaleY(jobj_2)); + HSD_JObjSetScaleZ(jobj_1, HSD_JObjGetScaleY(jobj_2)); + HSD_JObjSetTranslateZ(HSD_JObjGetChild(jobj_1), + HSD_JObjGetTranslationZ(jobj_1) - + ef_804D81EC); + if (*va_arg(vlist, f32*) < ef_804D81D0) { + HSD_JObjSetRotationY(jobj_1, ef_804D81F0); + HSD_JObjSetRotationZ(jobj_1, -*va_arg(vlist, f32*)); } else { - HSD_JObjSetRotationY(jobj, 1.5707964f); - HSD_JObjSetRotationZ(jobj, *EF061D_VA_ARG(f32*)); + HSD_JObjSetRotationY(jobj_1, ef_804D81E8); + HSD_JObjSetRotationZ(jobj_1, *va_arg(vlist, f32*)); } - ((Effect*) ret_obj)->x10 = efLib_8005E1D8; + eff_1->x10 = efLib_8005E1D8; } break; - } case 0x49E: - ret_obj = efLib_8005C9FC(0x206, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x206, va_arg(vlist, Vec3*)); break; case 0x49F: { - f64 temp_d; - f32 rotate_y_2; - HSD_JObj* jobj_2; + HSD_JObj* attach_jobj; - jobj_2 = EF061D_VA_ARG(HSD_JObj*); - ret_obj = efLib_8005C1B4(0x7D00U, gobj, jobj_2); + attach_jobj = va_arg(vlist, HSD_JObj*); + ret_obj = efLib_8005C1B4(0x7D00, arg_gobj, attach_jobj); if (ret_obj != NULL) { - effect = ret_obj; - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + eff_1 = ret_obj; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), rotate_y_2); + f32_1 = f64_1; + HSD_JObjSetRotationY(GET_JOBJ(eff_1->gobj), f32_1); } - hsd_8039EFAC(0, 0x20, 0x7D00, jobj_2); + hsd_8039EFAC(0, 0x20, 0x7D00, attach_jobj); break; } case 0x4A0: - ret_obj = efLib_8005C9FC(0x7D02, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x7D02, va_arg(vlist, Vec3*)); break; case 0x4A5: - ret_obj = efLib_8005CD2C(0xA028, vlist_arg, gobj); + ret_obj = efLib_8005CD2C(0xA028, vlist, arg_gobj); break; case 0x4A6: - ret_obj = efLib_8005CD2C(0xA029, vlist_arg, gobj); + ret_obj = efLib_8005CD2C(0xA029, vlist, arg_gobj); break; case 0x4A7: - ret_obj = efLib_8005CD2C(0xA02A, vlist_arg, gobj); + ret_obj = efLib_8005CD2C(0xA02A, vlist, arg_gobj); break; case 0x4A8: - ret_obj = efLib_8005CD2C(0xA02B, vlist_arg, gobj); + ret_obj = efLib_8005CD2C(0xA02B, vlist, arg_gobj); break; case 0x4A1: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x22, 0x84D4, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x22, 0x84D4, jobj_1); break; case 0x4A2: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x22, 0x84D2, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x22, 0x84D2, jobj_1); break; case 0x4A3: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x22, 0x84D3, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x22, 0x84D3, jobj_1); break; - case 0x4A4: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C814(0x84D0U, gobj, EF061D_VA_ARG(Vec3*)); + case 0x4A4: + ret_obj = efLib_8005C814(0x84D0, arg_gobj, va_arg(vlist, Vec3*)); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(((Effect*) ret_obj)->gobj), - rotate_y_2); + jobj_1 = GET_JOBJ(((Effect*) ret_obj)->gobj); + f32_1 = f64_1; + HSD_JObjSetRotationY(jobj_1, f32_1); } break; - } - case 0x4A9: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C3DC(0x9858U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x4A9: + ret_obj = efLib_8005C3DC(0x9858, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - effect = ret_obj; - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), rotate_y_2); - HSD_JObjAnimAll(GET_JOBJ(effect->gobj)); + jobj_1 = GET_JOBJ(((Effect*) ret_obj)->gobj); + f32_1 = f64_1; + HSD_JObjSetRotationY(jobj_1, f32_1); + eff_1 = ret_obj; + HSD_JObjAnimAll(eff_1->gobj->hsd_obj); } break; - } - case 0x4AA: { - f64 temp_d; - f32 rotate_y_2; - - ret_obj = efLib_8005C3DC(0x9859U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x4AA: + ret_obj = efLib_8005C3DC(0x9859, arg_gobj, va_arg(vlist, HSD_JObj*)); if (ret_obj != NULL) { - effect = ret_obj; - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), rotate_y_2); - HSD_JObjAnimAll(GET_JOBJ(effect->gobj)); + eff_1 = ret_obj; + f32_1 = f64_1; + HSD_JObjSetRotationY(eff_1->gobj->hsd_obj, f32_1); + HSD_JObjAnimAll(eff_1->gobj->hsd_obj); } break; - } - case 0x4AB: { - ret_obj = efLib_8005C6F4(0x9471U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x4AB: + ret_obj = efLib_8005C6F4(0x9471, arg_gobj, va_arg(vlist, void*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x0 = (void*) efLib_8005C6F4( - 0x9470U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ((Effect*) ret_obj)->x0 = + (void*) efLib_8005C6F4(0x9470, arg_gobj, va_arg(vlist, void*)); } break; - } - case 0x4AC: { - ret_obj = efLib_8005C814(0x80E8U, gobj, EF061D_VA_ARG(Vec3*)); + case 0x4AC: + ret_obj = efLib_8005C814(0x80E8, arg_gobj, va_arg(vlist, Vec3*)); if (ret_obj != NULL) { - effect = ret_obj; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), 1.5707964f); - HSD_JObjSetRotationZ(GET_JOBJ(effect->gobj), *EF061D_VA_ARG(f32*)); + eff_1 = ret_obj; + HSD_JObjSetRotationY(eff_1->gobj->hsd_obj, ef_804D81E8); + HSD_JObjSetRotationZ(eff_1->gobj->hsd_obj, *va_arg(vlist, f32*)); } break; - } case 0x4AD: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x24, 0x8CA0, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x24, 0x8CA0, jobj_1); break; case 0x4AE: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x2E, 0xB3B0, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x2E, 0xB3B0, jobj_1); break; case 0x4AF: - jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = hsd_8039EFAC(0, 0x2E, 0xB3B1, jobj); + jobj_1 = va_arg(vlist, HSD_JObj*); + ret_obj = hsd_8039EFAC(0, 0x2E, 0xB3B1, jobj_1); break; case 0x4B0: - ret_obj = efLib_8005CF40(0xB3B6, vlist_arg); + ret_obj = efLib_8005CF40(0xB3B6, vlist); break; case 0x4B1: { - HSD_JObj* input_jobj; - f64 temp_d; - f32 rotate_y_2; + HSD_JObj* attach_jobj; - input_jobj = EF061D_VA_ARG(HSD_JObj*); - ret_obj = efLib_8005C1B4(0x9088U, gobj, input_jobj); + attach_jobj = va_arg(vlist, HSD_JObj*); + ret_obj = efLib_8005C1B4(0x9088, arg_gobj, attach_jobj); if (ret_obj != NULL) { - value_ptr = EF061D_VA_ARG(f32*); - if (*value_ptr < 0.0f) { - temp_d = -1.5707963267948966; + if (*va_arg(vlist, f32*) < ef_804D81D0) { + f64_1 = ef_804D81D8; } else { - temp_d = 1.5707963267948966; + f64_1 = ef_804D81E0; } - effect = ret_obj; - rotate_y_2 = temp_d; - HSD_JObjSetRotationY(GET_JOBJ(effect->gobj), rotate_y_2); + jobj_1 = GET_JOBJ(((Effect*) ret_obj)->gobj); + f32_1 = f64_1; + HSD_JObjSetRotationY(jobj_1, f32_1); } - hsd_8039EFAC(0, 0x25, 0x9088, input_jobj); + hsd_8039EFAC(0, 0x25, 0x9088, attach_jobj); break; } case 0x4B2: - ret_obj = efLib_8005C9FC(0x908A, EF061D_VA_ARG(Vec3*)); + ret_obj = efLib_8005C9FC(0x908A, va_arg(vlist, Vec3*)); break; - case 0x4B3: { - ret_obj = efLib_8005C6F4(0xB799U, gobj, EF061D_VA_ARG(HSD_JObj*)); + case 0x4B3: + ret_obj = efLib_8005C6F4(0xB799, arg_gobj, va_arg(vlist, void*)); if (ret_obj != NULL) { - ((Effect*) ret_obj)->x0 = (void*) efLib_8005C6F4( - 0xB798U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ((Effect*) ret_obj)->x0 = + (void*) efLib_8005C6F4(0xB798, arg_gobj, va_arg(vlist, void*)); } break; - } case 0x4B4: - ret_obj = efLib_8005C6F4(0x4E20U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C6F4(0x4E20, arg_gobj, va_arg(vlist, void*)); break; case 0x4B5: - ret_obj = efLib_8005C6F4(0x4E21U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C6F4(0x4E21, arg_gobj, va_arg(vlist, void*)); break; case 0x4B6: - ret_obj = efLib_8005C2BC(0x5208U, gobj, EF061D_VA_ARG(HSD_JObj*)); - goto lbl_4B6_4B7_shared; + ret_obj = efLib_8005C2BC(0x5208, arg_gobj, va_arg(vlist, HSD_JObj*)); + goto efSync_SpawnSpecial_case_4B6_4B7; case 0x4B7: - ret_obj = efLib_8005C2BC(0x5209U, gobj, EF061D_VA_ARG(HSD_JObj*)); - lbl_4B6_4B7_shared: + ret_obj = efLib_8005C2BC(0x5209, arg_gobj, va_arg(vlist, HSD_JObj*)); + efSync_SpawnSpecial_case_4B6_4B7: if (ret_obj != NULL) { - effect = ret_obj; - HSD_JObjGetScale(GET_JOBJ(gobj), &scale); - if (GET_JOBJ(effect->gobj) == NULL) { - __assert("jobj.h", 823, "jobj"); - } - HSD_JObjSetScale(GET_JOBJ(effect->gobj), &scale); + HSD_JObj* jobj; + + jobj_1 = GET_JOBJ(arg_gobj); + HSD_JObjGetScale(jobj_1, &sp130); + eff_1 = ret_obj; + jobj = eff_1->gobj->hsd_obj; + ((jobj) ? ((void) 0) : __assert(ef_804D39D8, 823, ef_804D39E0)); + HSD_JObjSetScale(eff_1->gobj->hsd_obj, &sp130); } break; case 0x4B8: - ret_obj = efLib_8005C6F4(0xBB80U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C6F4(0xBB80, arg_gobj, va_arg(vlist, void*)); break; case 0x4B9: - ret_obj = efLib_8005C6F4(0xBB81U, gobj, EF061D_VA_ARG(HSD_JObj*)); + ret_obj = efLib_8005C6F4(0xBB81, arg_gobj, va_arg(vlist, void*)); break; } while (efLib_804D64F0 != 0) { - s32 cnt; - cnt = efLib_804D64F0 - 1; efLib_804D64F0 = cnt; - // horrible. its actually just efLib_80458EE0[cnt] - HSD_JObjAnimAll( - ((_struct_efLib_80458EE0*) (((u32*) efLib_80458EE0) + cnt)) - ->x0_gobj); + HSD_JObjAnimAll(((HSD_JObj**) &efLib_80458EE0)[cnt]); } return ret_obj; } + +/* 4D81D0 */ const f32 ef_804D81D0 = 0.0f; +/* 4D81D8 */ const f64 ef_804D81D8 = -M_PI_2; +/* 4D81E0 */ const f64 ef_804D81E0 = M_PI_2; +/* 4D81E8 */ const f32 ef_804D81E8 = M_PI_2; +/* 4D81EC */ const f32 ef_804D81EC = 6.0f; +/* 4D81F0 */ const f32 ef_804D81F0 = -M_PI_2; diff --git a/src/melee/ef/ef_061D.h b/src/melee/ef/ef_061D.h index 8d24d17675..dd78dc8b60 100644 --- a/src/melee/ef/ef_061D.h +++ b/src/melee/ef/ef_061D.h @@ -1,8 +1,11 @@ -#ifndef MELEE_EF_EF061D70_H -#define MELEE_EF_EF061D70_H +#ifndef MELEE_EF_EFSPECIAL_H +#define MELEE_EF_EFSPECIAL_H -#include +#include -void* ef_80061D70(s32, HSD_GObj*, va_list); +#include "baselib/forward.h" + +/* 061D70 */ void* efSync_SpawnSpecial(s32 gfx_id, HSD_GObj* arg_gobj, + void* vlist); #endif diff --git a/src/melee/ef/efasync.c b/src/melee/ef/efasync.c index c6029ad25f..94e74d5ac4 100644 --- a/src/melee/ef/efasync.c +++ b/src/melee/ef/efasync.c @@ -1254,7 +1254,7 @@ void* efAsync_80063930(s32 gfx_id, HSD_GObj* arg_gobj, va_list vlist) cnt = efLib_804D64F0 - 1; efLib_804D64F0 = cnt; // efLib_804D64F0--; - HSD_JObjAnimAll((efLib_80458EE0[cnt].x0_gobj)); + HSD_JObjAnimAll(((HSD_JObj**) &efLib_80458EE0)[cnt]); // HSD_JObjAnimAll((efLib_80458EE0[efLib_804D64F0].unk0)); } #if 1 diff --git a/src/melee/ef/efsync.c b/src/melee/ef/efsync.c index c75d822ae1..519d82dd92 100644 --- a/src/melee/ef/efsync.c +++ b/src/melee/ef/efsync.c @@ -1,5 +1,6 @@ #include "efsync.h" +#include "ef_061D.h" #include "efasync.h" #include "eflib.h" #include "efsync.h" @@ -19,9 +20,7 @@ #include "ft/inlines.h" -extern ef_Symbols efAsync_803C025C[51]; -extern Effect* ef_80061D70(s32, HSD_GObj*, va_list); - +extern struct ef_Symbols efAsync_803C025C[51]; extern s32 efLib_804D64E8; extern s32 efLib_804D64F0; @@ -106,8 +105,8 @@ void* efSync_Spawn(s32 arg_gfx_id, HSD_GObj* arg_gobj, ...) return efAsync_80063930(gfx_id, arg_gobj, vlist); } if (gfx_id < 0x4BA) { - // return ef_80061D70(gfx_id, arg_gobj, va_arg(vlist, void*)); - return ef_80061D70(gfx_id, arg_gobj, vlist); + // return efSync_SpawnSpecial(gfx_id, arg_gobj, va_arg(vlist, void*)); + return efSync_SpawnSpecial(gfx_id, arg_gobj, vlist); } efLib_804D64E8 = 1; switch (gfx_id) { @@ -656,7 +655,7 @@ void* efSync_Spawn(s32 arg_gfx_id, HSD_GObj* arg_gobj, ...) cnt = efLib_804D64F0 - 1; efLib_804D64F0 = cnt; // efLib_804D64F0--; - HSD_JObjAnimAll((efLib_80458EE0[cnt].x0_gobj)); + HSD_JObjAnimAll(((HSD_JObj**) &efLib_80458EE0)[cnt]); // HSD_JObjAnimAll((efLib_80458EE0[efLib_804D64F0].unk0)); }