2 * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
9 #include "player_ragdoll.h"
10 #include "shaders/viewchar.h"
12 vg_tex2d tex_characters
= { .path
= "textures/ch_gradient.qoi" };
14 static void player_model_init(void)
16 shader_viewchar_register();
17 vg_acquire_thread_sync();
19 vg_tex2d_init( (vg_tex2d
*[]){ &tex_characters
}, 1 );
21 vg_release_thread_sync();
24 static void player_model_free(void *_
)
26 mesh_free( &player
.mdl
.mesh
);
27 vg_tex2d_free( (vg_tex2d
*[]){ &tex_characters
}, 1 );
31 * Load model from file (.mdl)
33 static void player_load_model( const char *name
, int replace_mode
)
37 snprintf( buf
, sizeof(buf
)-1, "models/%s.mdl", name
);
38 mdl_header
*src
= mdl_load( buf
);
42 vg_error( "Could not load model\n" );
46 mesh_free( &player
.mdl
.mesh
);
47 mdl_unpack_glmesh( src
, &player
.mdl
.mesh
);
51 if( !skeleton_setup( &player
.mdl
.sk
, src
) )
53 vg_error( "Model: %s\n", buf
);
54 vg_fatal_exit_loop( "No skeleton" );
63 struct skeleton_anim
**anim
;
66 { "pose_stand", &player
.mdl
.anim_stand
},
67 { "pose_highg", &player
.mdl
.anim_highg
},
68 { "pose_slide", &player
.mdl
.anim_slide
},
69 { "pose_air", &player
.mdl
.anim_air
},
70 { "push", &player
.mdl
.anim_push
},
71 { "push_reverse", &player
.mdl
.anim_push_reverse
},
72 { "ollie", &player
.mdl
.anim_ollie
},
73 { "ollie_reverse",&player
.mdl
.anim_ollie_reverse
},
74 { "grabs", &player
.mdl
.anim_grabs
},
75 { "walk", &player
.mdl
.anim_walk
},
76 { "run", &player
.mdl
.anim_run
},
77 { "idle_cycle", &player
.mdl
.anim_idle
},
78 { "jump", &player
.mdl
.anim_jump
}
81 for( int i
=0; i
<vg_list_size(anims
); i
++ )
83 *anims
[i
].anim
= skeleton_get_anim( &player
.mdl
.sk
, anims
[i
].name
);
85 if( !(*anims
[i
].anim
) )
87 vg_error( "Animation '%s' is missing from character '%s'\n",
88 anims
[i
].name
, name
);
103 { "hips", &player
.mdl
.id_hip
},
104 { "hand.IK.L", &player
.mdl
.id_ik_hand_l
},
105 { "hand.IK.R", &player
.mdl
.id_ik_hand_r
},
106 { "elbow.L", &player
.mdl
.id_ik_elbow_l
},
107 { "elbow.R", &player
.mdl
.id_ik_elbow_r
},
108 { "head", &player
.mdl
.id_head
}
111 for( int i
=0; i
<vg_list_size(bones
); i
++ )
113 *bones
[i
].bone_id
= skeleton_bone_id( &player
.mdl
.sk
, bones
[i
].name
);
115 if( !(*bones
[i
].bone_id
) )
117 vg_error( "Required bone '%s' is missing from character '%s'\n",
118 bones
[i
].name
, name
);
124 player_init_ragdoll( src
);