projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
DonkeyKong64 grind crash
[carveJwlIkooP6JGAAIwe30JlM.git]
/
player_walk.c
diff --git
a/player_walk.c
b/player_walk.c
index 952db860a638b5d0218d2c7da0f6a392a34f9eb4..7d09f15e7095708b0b9287b651067da4256856fd 100644
(file)
--- a/
player_walk.c
+++ b/
player_walk.c
@@
-228,6
+228,9
@@
static int player_walk_scan_for_drop_in(void){
static struct skeleton_anim *player_walk_outro_anim( enum walk_outro type ){
struct player_walk *w = &player_walk;
static struct skeleton_anim *player_walk_outro_anim( enum walk_outro type ){
struct player_walk *w = &player_walk;
+ if( type >= k_walk_outro_max )
+ return NULL;
+
return (struct skeleton_anim *[]){
[k_walk_outro_none] = NULL,
[k_walk_outro_jump_to_air] = w->anim_jump_to_air,
return (struct skeleton_anim *[]){
[k_walk_outro_none] = NULL,
[k_walk_outro_jump_to_air] = w->anim_jump_to_air,
@@
-911,6
+914,11
@@
static void player__walk_pose( void *_animator, player_pose *pose ){
if( animator->outro_type ){
struct skeleton_anim *anim = player_walk_outro_anim(animator->outro_type);
if( animator->outro_type ){
struct skeleton_anim *anim = player_walk_outro_anim(animator->outro_type);
+
+ if( !anim ){
+ skeleton_copy_pose( sk, apose, pose->keyframes );
+ return;
+ }
f32 outro_length = (f32)anim->length / anim->rate,
outro_time = animator->outro_t*outro_length;
f32 outro_length = (f32)anim->length / anim->rate,
outro_time = animator->outro_t*outro_length;
@@
-1044,9
+1052,6
@@
static void player__walk_animator_exchange( bitpack_ctx *ctx, void *data ){
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->run );
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->walk );
bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->walk_timer );
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->run );
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->walk );
bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->walk_timer );
- bitpack_qf32( ctx, 8, -k_sit_yaw_limit, k_sit_yaw_limit, &animator->yaw );
- bitpack_qf32( ctx, 8, -k_sit_pitch_limit, k_sit_pitch_limit,
- &animator->pitch );
for( int i=0; i<1; i++ ){ /* without this you get a warning from gcc. lol */
bitpack_bytes( ctx, 8, &animator->outro_type );
for( int i=0; i<1; i++ ){ /* without this you get a warning from gcc. lol */
bitpack_bytes( ctx, 8, &animator->outro_type );
@@
-1057,5
+1062,12
@@
static void player__walk_animator_exchange( bitpack_ctx *ctx, void *data ){
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->commit_t );
}
}
bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->commit_t );
}
}
+
+ u32 code = bitpack_qf32( ctx, 8, 0.0f, 1.0f, &animator->sit_t );
+ if( code ){
+ bitpack_qf32( ctx, 8, -k_sit_yaw_limit, k_sit_yaw_limit, &animator->yaw );
+ bitpack_qf32( ctx, 8, -k_sit_pitch_limit, k_sit_pitch_limit,
+ &animator->pitch );
+ }
}
#endif /* PLAYER_DEVICE_WALK_H */
}
#endif /* PLAYER_DEVICE_WALK_H */