diff --git a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77BF8.s b/asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw.s similarity index 98% rename from asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77BF8.s rename to asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw.s index e0f7a399d4..56a60ec022 100644 --- a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77BF8.s +++ b/asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw.s @@ -1,4 +1,4 @@ -glabel func_80A77BF8 +glabel EnIk_OverrideLimbDraw /* 038E8 80A77BF8 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8 /* 038EC 80A77BFC 24010011 */ addiu $at, $zero, 0x0011 ## $at = 00000011 /* 038F0 80A77C00 AFBF0014 */ sw $ra, 0x0014($sp) diff --git a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77C7C.s b/asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw.s similarity index 99% rename from asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77C7C.s rename to asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw.s index a46bd979b3..8761f6aca3 100644 --- a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77C7C.s +++ b/asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw.s @@ -48,7 +48,7 @@ glabel jtbl_80A78A3C .word 0x00000000 .text -glabel func_80A77C7C +glabel EnIk_PostLimbDraw /* 0396C 80A77C7C 27BDFF98 */ addiu $sp, $sp, 0xFF98 ## $sp = FFFFFF98 /* 03970 80A77C80 AFBF001C */ sw $ra, 0x001C($sp) /* 03974 80A77C84 AFB00018 */ sw $s0, 0x0018($sp) diff --git a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77EDC.s b/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77EDC.s index 334777415c..fb7ac1a0d8 100644 --- a/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77EDC.s +++ b/asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77EDC.s @@ -85,12 +85,12 @@ glabel func_80A77EDC /* 03CF0 80A78000 0C29D86C */ jal func_80A761B0 /* 03CF4 80A78004 AFA20038 */ sw $v0, 0x0038($sp) /* 03CF8 80A78008 8FA30038 */ lw $v1, 0x0038($sp) -/* 03CFC 80A7800C 3C1980A7 */ lui $t9, %hi(func_80A77BF8) ## $t9 = 80A70000 -/* 03D00 80A78010 3C0880A7 */ lui $t0, %hi(func_80A77C7C) ## $t0 = 80A70000 +/* 03CFC 80A7800C 3C1980A7 */ lui $t9, %hi(EnIk_OverrideLimbDraw) ## $t9 = 80A70000 +/* 03D00 80A78010 3C0880A7 */ lui $t0, %hi(EnIk_PostLimbDraw) ## $t0 = 80A70000 /* 03D04 80A78014 AC620004 */ sw $v0, 0x0004($v1) ## 00000004 /* 03D08 80A78018 8FA30068 */ lw $v1, 0x0068($sp) -/* 03D0C 80A7801C 25087C7C */ addiu $t0, $t0, %lo(func_80A77C7C) ## $t0 = 80A77C7C -/* 03D10 80A78020 27397BF8 */ addiu $t9, $t9, %lo(func_80A77BF8) ## $t9 = 80A77BF8 +/* 03D0C 80A7801C 25087C7C */ addiu $t0, $t0, %lo(EnIk_PostLimbDraw) ## $t0 = 80A77C7C +/* 03D10 80A78020 27397BF8 */ addiu $t9, $t9, %lo(EnIk_OverrideLimbDraw) ## $t9 = 80A77BF8 /* 03D14 80A78024 2462014C */ addiu $v0, $v1, 0x014C ## $v0 = 0000014C /* 03D18 80A78028 8C450004 */ lw $a1, 0x0004($v0) ## 00000150 /* 03D1C 80A7802C 8C460020 */ lw $a2, 0x0020($v0) ## 0000016C diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index d583a368fe..29096ea8ca 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -38,6 +38,9 @@ void func_80A76798(Actor* thisx, GlobalContext* globalCtx); void func_80A780D0(EnIk* this, GlobalContext* globalCtx); void func_80A78160(EnIk* this, GlobalContext* globalCtx); +s32 EnIk_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor); +void EnIk_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor); + extern AnimationHeader D_0600C114; extern AnimationHeader D_0600DD50; extern SkeletonHeader D_0601E178; @@ -252,7 +255,20 @@ void func_80A7489C(EnIk* this) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A75FA0.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A761B0.s") +Gfx* func_80A761B0(GraphicsContext* gfxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB) { + Gfx* displayList; + Gfx* displayListHead; + + displayList = Graph_Alloc(gfxCtx, 4 * sizeof(Gfx)); + displayListHead = displayList; + + gDPPipeSync(displayListHead++); + gDPSetPrimColor(displayListHead++, 0, 0, primR, primG, primB, 255); + gDPSetEnvColor(displayListHead++, envR, envG, envB, 255); + gSPEndDisplayList(displayListHead++); + + return displayList; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A7626C.s") @@ -335,13 +351,31 @@ void EnIk_Update(Actor* thisx, GlobalContext* globalCtx) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77BF8.s") +#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77C7C.s") +#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77ED0.s") +void func_80A77ED0(EnIk* this, GlobalContext* globalCtx) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77EDC.s") +void func_80A77EDC(EnIk* this, GlobalContext* globalCtx) { + GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; + SkelAnime* skelAnime = &this->skelAnime; + s32 pad[2]; + + OPEN_DISPS(gfxCtx, "../z_en_ik_inConfrontion.c", 630); + + func_8002EBCC(&this->actor, globalCtx, 0); + func_80093D18(gfxCtx); + func_80093D84(gfxCtx); + gSPSegment(oGfxCtx->polyOpa.p++, 0x08, func_80A761B0(gfxCtx, 245, 225, 155, 30, 30, 0)); + gSPSegment(oGfxCtx->polyOpa.p++, 0x09, func_80A761B0(gfxCtx, 255, 40, 0, 40, 0, 0)); + gSPSegment(oGfxCtx->polyOpa.p++, 0x0A, func_80A761B0(gfxCtx, 255, 255, 255, 20, 40, 30)); + SkelAnime_DrawSV(globalCtx, skelAnime->skeleton, skelAnime->limbDrawTbl, skelAnime->dListCount, + EnIk_OverrideLimbDraw, EnIk_PostLimbDraw, &this->actor); + + CLOSE_DISPS(gfxCtx, "../z_en_ik_inConfrontion.c", 653); +} void EnIk_Draw(Actor* thisx, GlobalContext* globalCtx) { EnIk* this = THIS;