diff --git a/src/game/lv.c b/src/game/lv.c index a298cdbde..339f58239 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -3771,7 +3771,7 @@ Gfx *lvRender(Gfx *gdl) func0f0641f4(); gdl = bgRender(gdl); - func0f028498(var80075d68 == 15 || var8005f020); + func0f028498(var80075d68 == 15 || g_AnimHostEnabled); gdl = propsRenderBeams(gdl); gdl = shardsRender(gdl); gdl = sparksRender(gdl); diff --git a/src/include/data.h b/src/include/data.h index f1e3a885c..2033b5872 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -66,8 +66,7 @@ extern u8 *var8005f010; extern s16 *var8005f014; extern s32 var8005f018; extern s32 var8005f01c; -extern u32 var8005f020; -extern u32 var8005f024; +extern bool g_AnimHostEnabled; extern u32 var8005f030; extern u32 var8005f034; extern u32 var8005f038; diff --git a/src/include/lib/anim.h b/src/include/lib/anim.h index d0977544b..f9d02dd73 100644 --- a/src/include/lib/anim.h +++ b/src/include/lib/anim.h @@ -10,7 +10,7 @@ void anim0002373c(void); s32 animGetNumFrames(s16 anim_id); bool animHasFrames(s16 animnum); s32 animGetNumAnimations(void); -s32 anim000237e8(void *arg0, u8 *data, s32 pos); +u8 *animDma(u8 *dst, u32 segoffset, s32 len); s32 anim0002384c(s16 animnum, s32 frame); u32 anim00023908(void); bool anim000239e0(s16 animnum, s32 frame); diff --git a/src/lib/anim.c b/src/lib/anim.c index 369cff8b4..ebb3dd4bc 100644 --- a/src/lib/anim.c +++ b/src/lib/anim.c @@ -33,8 +33,8 @@ u8 *var8005f010 = NULL; s16 *var8005f014 = NULL; s32 var8005f018 = 176; s32 var8005f01c = 608; -u32 var8005f020 = 0; -u32 var8005f024 = 0; +bool g_AnimHostEnabled = false; +u8 *g_AnimHostSegment = NULL; extern u8 _animationsTableRomStart; extern u8 _animationsTableRomEnd; @@ -81,8 +81,8 @@ void animsInit(void) animsInitTables(); - var8005f024 = 0; - var8005f020 = 0; + g_AnimHostSegment = NULL; + g_AnimHostEnabled = false; } void animsInitTables(void) @@ -110,7 +110,7 @@ void anim0002373c(void) { g_NumAnimations = var8009a894; g_Anims = var8009a898; - var8005f020 = 0; + g_AnimHostEnabled = false; } s32 animGetNumFrames(s16 animnum) @@ -128,36 +128,17 @@ s32 animGetNumAnimations(void) return g_NumAnimations; } -GLOBAL_ASM( -glabel anim000237e8 -/* 237e8: 3c0e8006 */ lui $t6,%hi(var8005f020) -/* 237ec: 8dcef020 */ lw $t6,%lo(var8005f020)($t6) -/* 237f0: 27bdffe8 */ addiu $sp,$sp,-24 -/* 237f4: afbf0014 */ sw $ra,0x14($sp) -/* 237f8: afa5001c */ sw $a1,0x1c($sp) -/* 237fc: 11c00009 */ beqz $t6,.L00023824 -/* 23800: 00803825 */ or $a3,$a0,$zero -/* 23804: 3c0f8006 */ lui $t7,%hi(var8005f024) -/* 23808: 8deff024 */ lw $t7,%lo(var8005f024)($t7) -/* 2380c: afa70018 */ sw $a3,0x18($sp) -/* 23810: 01e52021 */ addu $a0,$t7,$a1 -/* 23814: 0c012c5c */ jal bcopy -/* 23818: 00e02825 */ or $a1,$a3,$zero -/* 2381c: 10000007 */ b .L0002383c -/* 23820: 8fa20018 */ lw $v0,0x18($sp) -.L00023824: -/* 23824: 8fb9001c */ lw $t9,0x1c($sp) -/* 23828: 3c08001a */ lui $t0,%hi(_animationsSegmentRomStart) -/* 2382c: 250815c0 */ addiu $t0,$t0,%lo(_animationsSegmentRomStart) -/* 23830: 00e02025 */ or $a0,$a3,$zero -/* 23834: 0c003522 */ jal dmaExecWithAutoAlign -/* 23838: 03282821 */ addu $a1,$t9,$t0 -.L0002383c: -/* 2383c: 8fbf0014 */ lw $ra,0x14($sp) -/* 23840: 27bd0018 */ addiu $sp,$sp,0x18 -/* 23844: 03e00008 */ jr $ra -/* 23848: 00000000 */ nop -); +extern u8 _animationsSegmentRomStart; + +u8 *animDma(u8 *dst, u32 segoffset, s32 len) +{ + if (g_AnimHostEnabled) { + bcopy(&g_AnimHostSegment[segoffset], dst, len); + return dst; + } + + return dmaExecWithAutoAlign(dst, (u32)&_animationsSegmentRomStart + segoffset, len); +} s32 anim0002384c(s16 animnum, s32 frame) { @@ -396,7 +377,7 @@ glabel anim00023ab0 /* 23c3c: 00ed0019 */ multu $a3,$t5 /* 23c40: 00007012 */ mflo $t6 /* 23c44: 01cf2021 */ addu $a0,$t6,$t7 -/* 23c48: 0c008dfa */ jal anim000237e8 +/* 23c48: 0c008dfa */ jal animDma /* 23c4c: 00000000 */ nop /* 23c50: 8fa7003c */ lw $a3,0x3c($sp) /* 23c54: 3c18800a */ lui $t8,%hi(var8009a874) @@ -557,7 +538,7 @@ glabel anim00023d38 /* 23e90: afa70034 */ sw $a3,0x34($sp) /* 23e94: 00006012 */ mflo $t4 /* 23e98: afa30028 */ sw $v1,0x28($sp) -/* 23e9c: 0c008dfa */ jal anim000237e8 +/* 23e9c: 0c008dfa */ jal animDma /* 23ea0: 01982021 */ addu $a0,$t4,$t8 /* 23ea4: 3c0d800a */ lui $t5,%hi(var8009a888) /* 23ea8: 8dada888 */ lw $t5,%lo(var8009a888)($t5) @@ -636,7 +617,7 @@ glabel anim00023d38 // // tmp = g_Anims[animnum].initialposbytes; // -// var8009a888[index] = anim000237e8(&var8009a884[var8005f01c * index], g_Anims[animnum].data, tmp); +// var8009a888[index] = animDma(&var8009a884[var8005f01c * index], g_Anims[animnum].data, tmp); // var8005f010[animnum] = index; // var8009a88c[index] = animnum; // var8009a890[index] = g_Vars.thisframe240;