summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorNicholas Estelami <NEstelami@users.noreply.github.com>2024-08-05 15:20:40 -0400
committerGitHub <noreply@github.com>2024-08-05 15:20:40 -0400
commitf11f97e84e508dfca79c1232ee39e746cb0afb1c (patch)
treeb959a6897f539b378bccf690f1da9218798193e2 /soh/src/code
parent7a00658be94d7ed9841c3377d166fde2364d88b9 (diff)
Custom Skeleton Fixes for various bosses and enemies (#3436)
* Skeleton Fixes for various bosses and enemies * cleanup * revert breakpart changes --------- Co-authored-by: Adam Bird <archez39@me.com>
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_skelanime.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/soh/src/code/z_skelanime.c b/soh/src/code/z_skelanime.c
index 2123c2d3b..ae59e187b 100644
--- a/soh/src/code/z_skelanime.c
+++ b/soh/src/code/z_skelanime.c
@@ -148,6 +148,8 @@ void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton,
newDList = limbDList = limb->dLists[lod];
+ play->flexLimbOverrideMTX = mtx;
+
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
@@ -220,6 +222,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
newDList = limbDList = rootLimb->dLists[lod];
+ play->flexLimbOverrideMTX = &mtx;
+
if ((overrideLimbDraw == 0) || !overrideLimbDraw(play, 1, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {
@@ -306,6 +310,20 @@ void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLi
}
}
+Gfx* SkelAnime_DrawSkeleton2(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
+ PostLimbDrawOpa postLimbDraw, void* arg, Gfx* gfx)
+{
+ if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_NORMAL) {
+ return SkelAnime_Draw(play, skelAnime->skeleton, skelAnime->jointTable, overrideLimbDraw, postLimbDraw, arg, gfx);
+ } else if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
+ FlexSkeletonHeader* flexHeader = (FlexSkeletonHeader*)skelAnime->skeletonHeader;
+ return SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, flexHeader->dListCount,
+ overrideLimbDraw, postLimbDraw, arg, gfx);
+ }
+
+ return gfx;
+}
+
/**
* Draw all limbs of type `StandardLimb` in a given skeleton to the polyOpa buffer
*/
@@ -383,6 +401,8 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
newDList = limbDList = limb->dList;
+ play->flexLimbOverrideMTX = limbMatricies;
+
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) {