@@ -1053,6 +1053,7 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1053
1053
case TR_STATE_LARA_WADE_FORWARD:
1054
1054
ent->character ->rotate_speed_mult = 0 .4f ;
1055
1055
ent->dir_flag = ENT_MOVE_FORWARD;
1056
+ ent->move_type = MOVE_ON_FLOOR;
1056
1057
1057
1058
if (ent->character ->height_info .quicksand )
1058
1059
{
@@ -1076,7 +1077,8 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1076
1077
}
1077
1078
else if (curr_fc->water )
1078
1079
{
1079
- if ((curr_fc->transition_level - curr_fc->floor_hit .point [2 ] <= ent->character ->wade_depth ))
1080
+ float depth = curr_fc->transition_level - curr_fc->floor_hit .point [2 ];
1081
+ if (depth <= ent->character ->wade_depth )
1080
1082
{
1081
1083
// run / walk case
1082
1084
if ((cmd->move [0 ] == 1 ) && (!state->wall_collide ))
@@ -1088,27 +1090,20 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1088
1090
ss_anim->next_state = TR_STATE_LARA_STOP;
1089
1091
}
1090
1092
}
1091
- else if (curr_fc->transition_level - curr_fc->floor_hit .point [2 ] > (ent->character ->height - ent->character ->swim_depth ))
1092
- {
1093
- // swim case
1094
- if (curr_fc->transition_level - curr_fc->floor_hit .point [2 ] > ent->character ->height + ent->character ->max_step_up_height )
1095
- {
1096
- Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_START_FREE_FALL, 0 ); // swim underwater
1097
- }
1098
- else
1099
- {
1100
- Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_ONWATER_IDLE, 0 ); // swim onwater
1101
- ent->move_type = MOVE_ON_WATER;
1102
- pos[2 ] = curr_fc->transition_level ;
1103
- }
1104
- }
1105
- else if (curr_fc->transition_level - curr_fc->floor_hit .point [2 ] > ent->character ->wade_depth ) // wade case
1093
+ else if (depth <= ent->character ->height - ent->character ->swim_depth )
1106
1094
{
1095
+ // wade case
1107
1096
if ((cmd->move [0 ] != 1 ) || (state->wall_collide ))
1108
1097
{
1109
1098
ss_anim->next_state = TR_STATE_LARA_STOP;
1110
1099
}
1111
1100
}
1101
+ else
1102
+ {
1103
+ Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_ONWATER_SWIM_FORWARD, 0 );
1104
+ ss_anim->next_state = TR_STATE_LARA_ONWATER_FORWARD;
1105
+ ent->move_type = MOVE_ON_WATER;
1106
+ }
1112
1107
}
1113
1108
else // no water, stay or run / walk
1114
1109
{
@@ -1138,16 +1133,16 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1138
1133
vec3_mul_scalar (global_offset, ent->transform + 4 , -WALK_BACK_OFFSET);
1139
1134
global_offset[2 ] += ent->bf ->bb_max [2 ];
1140
1135
i = Character_CheckNextStep (ent, global_offset, &next_fc);
1141
- if (ent->move_type == MOVE_FREE_FALLING)
1142
- {
1143
- Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_START_FREE_FALL, 0 );
1144
- }
1145
- else if (curr_fc->water && (curr_fc->floor_hit .point [2 ] + ent->character ->height < curr_fc->transition_level ))
1136
+ if (curr_fc->water && (!curr_fc->floor_hit .hit || (curr_fc->floor_hit .point [2 ] + ent->character ->height - ent->character ->swim_depth < curr_fc->transition_level )))
1146
1137
{
1147
1138
Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_ONWATER_SWIM_BACK, 0 );
1148
1139
ss_anim->next_state = TR_STATE_LARA_ONWATER_BACK;
1149
1140
ent->move_type = MOVE_ON_WATER;
1150
1141
}
1142
+ else if (ent->move_type == MOVE_FREE_FALLING)
1143
+ {
1144
+ Entity_SetAnimation (ent, ANIM_TYPE_BASE, TR_ANIMATION_LARA_START_FREE_FALL, 0 );
1145
+ }
1151
1146
else if ((i < CHARACTER_STEP_DOWN_BIG) || (i > CHARACTER_STEP_UP_BIG))
1152
1147
{
1153
1148
ent->dir_flag = ENT_STAY;
@@ -1197,11 +1192,7 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1197
1192
if (next_fc.floor_hit .hit && (next_fc.floor_hit .point [2 ] > pos[2 ] - ent->character ->max_step_up_height ) && (next_fc.floor_hit .point [2 ] <= pos[2 ] + ent->character ->max_step_up_height ))
1198
1193
// if(curr_fc->leg_l_floor.hit && (curr_fc->leg_l_floor.point[2] > pos[2] - ent->character->max_step_up_height) && (curr_fc->leg_l_floor.point[2] <= pos[2] + ent->character->max_step_up_height))
1199
1194
{
1200
- if (!curr_fc->water || (curr_fc->floor_hit .point [2 ] + ent->character ->height > curr_fc->transition_level )) // if (floor_hit.hit == 0) then we went to MOVE_FREE_FALLING.
1201
- {
1202
- // continue walking
1203
- }
1204
- else
1195
+ if (curr_fc->water && (!curr_fc->floor_hit .hit || (curr_fc->floor_hit .point [2 ] - curr_fc->transition_level > ent->character ->height - ent->character ->swim_depth )))
1205
1196
{
1206
1197
ss_anim->next_state = TR_STATE_LARA_ONWATER_LEFT;
1207
1198
ss_anim->onEndFrame = ent_to_on_water;
@@ -1235,11 +1226,7 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
1235
1226
if (next_fc.floor_hit .hit && (next_fc.floor_hit .point [2 ] > pos[2 ] - ent->character ->max_step_up_height ) && (next_fc.floor_hit .point [2 ] <= pos[2 ] + ent->character ->max_step_up_height ))
1236
1227
// if(curr_fc->leg_r_floor.hit && (curr_fc->leg_r_floor.point[2] > pos[2] - ent->character->max_step_up_height) && (curr_fc->leg_r_floor.point[2] <= pos[2] + ent->character->max_step_up_height))
1237
1228
{
1238
- if (!curr_fc->water || (curr_fc->floor_hit .point [2 ] + ent->character ->height > curr_fc->transition_level )) // if (floor_hit.hit == 0) then we went to MOVE_FREE_FALLING.
1239
- {
1240
- // continue walking
1241
- }
1242
- else
1229
+ if (curr_fc->water && (!curr_fc->floor_hit .hit || (curr_fc->floor_hit .point [2 ] - curr_fc->transition_level > ent->character ->height - ent->character ->swim_depth )))
1243
1230
{
1244
1231
ss_anim->next_state = TR_STATE_LARA_ONWATER_RIGHT;
1245
1232
ss_anim->onEndFrame = ent_to_on_water;
@@ -2644,17 +2631,14 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
2644
2631
ss_anim->next_state = TR_STATE_LARA_UNDERWATER_FORWARD;
2645
2632
ss_anim->onEndFrame = ent_set_underwater; // dive
2646
2633
}
2634
+ else if (curr_fc->floor_hit .hit && (curr_fc->transition_level - curr_fc->floor_hit .point [2 ] < ent->character ->height - ent->character ->swim_depth ))
2635
+ {
2636
+ ss_anim->next_state = TR_STATE_LARA_WADE_FORWARD;
2637
+ ss_anim->onEndFrame = ent_set_on_floor; // to wade
2638
+ }
2647
2639
else if ((cmd->move [0 ] == 1 ) && !clean_action)
2648
2640
{
2649
- if (!curr_fc->floor_hit .hit || (pos[2 ] - ent->character ->height > curr_fc->floor_hit .point [2 ]- ent->character ->swim_depth ))
2650
- {
2651
- // ent->current_state = ent->current_state; // swim forward
2652
- }
2653
- else
2654
- {
2655
- ss_anim->next_state = TR_STATE_LARA_WADE_FORWARD;
2656
- ss_anim->onEndFrame = ent_set_on_floor; // to wade
2657
- }
2641
+ ss_anim->next_state = current_state;
2658
2642
}
2659
2643
else
2660
2644
{
@@ -3147,9 +3131,10 @@ int StateControl_Lara(struct entity_s *ent, struct ss_animation_s *ss_anim)
3147
3131
switch (ss_anim->current_animation )
3148
3132
{
3149
3133
case TR_ANIMATION_LARA_STAY_JUMP_SIDES:
3150
- ent->no_fix_skeletal_parts = BODY_PART_HANDS_2 | BODY_PART_HANDS_3 | BODY_PART_LEGS_3 | BODY_PART_HEAD;
3134
+ ent->no_fix_skeletal_parts = BODY_PART_HANDS | BODY_PART_LEGS | BODY_PART_HEAD;
3151
3135
break ;
3152
3136
3137
+ case TR_ANIMATION_LARA_LANDING_HARD:
3153
3138
case TR_ANIMATION_LARA_CROUCH_TO_STAND:
3154
3139
ent->no_fix_skeletal_parts = BODY_PART_HANDS | BODY_PART_LEGS;
3155
3140
break ;
0 commit comments