scoreboards
[carveJwlIkooP6JGAAIwe30JlM.git] / skeleton.h
index dc50fe957dbee4620bca3d5204b9aa521cea840d..78a0b5604d5fd0facb8b903ece0631d5fcf35a15 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Mount0 Software, Harry Godden - All Rights Reserved
+ * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
  */
 
 #ifndef SKELETON_H
@@ -19,6 +19,8 @@ struct skeleton
 
       mdl_keyframe kf;
 
+      u32 orig_node;
+
       int collider;
       boxf hitbox;
 
@@ -59,6 +61,7 @@ static u32 skeleton_bone_id( struct skeleton *skele, const char *name )
       if( !strcmp( skele->bones[i].name, name ))
          return i;
    }
+
    return 0;
 }
 
@@ -413,8 +416,8 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl )
          skele->bone_count = inf->channels;
          skele->ik_count = inf->ik_count;
          skele->collider_count = inf->collider_count;
-         skele->bones = malloc(sizeof(struct skeleton_bone)*skele->bone_count);
-         skele->ik = malloc(sizeof(struct skeleton_ik)*skele->ik_count);
+         skele->bones =vg_alloc(sizeof(struct skeleton_bone)*skele->bone_count);
+         skele->ik = vg_alloc(sizeof(struct skeleton_ik)*skele->ik_count);
          skeleton_root = i;
       }
       else if( skele->bone_count )
@@ -465,6 +468,7 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl )
             }
 
             sb->collider = bone_inf->collider;
+            sb->orig_node = i;
             box_copy( bone_inf->hitbox, sb->hitbox );
 
             if( bone_inf->collider )
@@ -518,9 +522,9 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl )
    skele->bones[0].parent = 0xffffffff;
    skele->bones[0].collider = 0;
    
-   skele->final_mtx = malloc( sizeof(m4x3f) * skele->bone_count );
+   skele->final_mtx = vg_alloc( sizeof(m4x3f) * skele->bone_count );
    skele->anim_count = inf->anim_count;
-   skele->anims = malloc( sizeof(struct skeleton_anim) * inf->anim_count);
+   skele->anims = vg_alloc( sizeof(struct skeleton_anim) * inf->anim_count);
    
    for( int i=0; i<inf->anim_count; i++ )
    {
@@ -529,11 +533,11 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl )
 
       skele->anims[i].rate = anim->rate;
       skele->anims[i].length = anim->length;
-      strncpy( skele->anims[i].name, mdl_pstr(mdl, anim->pstr_name), 32 );
+      strncpy( skele->anims[i].name, mdl_pstr(mdl, anim->pstr_name), 31 );
 
       u32 total_keyframes = (skele->bone_count-1)*anim->length;
       size_t block_size = sizeof(mdl_keyframe) * total_keyframes;
-      mdl_keyframe *dst = malloc( block_size );
+      mdl_keyframe *dst = vg_alloc( block_size );
 
       skele->anims[i].anim_data = dst;
       memcpy( dst, mdl_get_animdata( mdl, anim ), block_size );
@@ -545,8 +549,8 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl )
    return 1;
 
 error_dealloc:
-   free( skele->bones );
-   free( skele->ik );
+   vg_free( skele->bones );
+   vg_free( skele->ik );
    return 0;
 }