Stuff behaves differently for humans, e.g. immediately vaulting over a window ledge or ledge railing no jumping or mid-air checks, where ogryn has more hurdles to jump (sorry); the human skips virtually all the checks. The vaultable stuff’s heights seem tailor-made for human who do the grab animation and vault over, ogryn doesn’t have these animations.
I think some of the Ogryn values may be wrong or at least ill-thought out in relation to their size.
Humans vs Ogryns (renamed vars for clarity)
local ledge_vault_tweak_values_human_orig = {
allowed_flat_distance_to_ledge = 1.5,
allowed_height_distance_max = 1.3,
allowed_height_distance_min = 0.31,
inair_allowed_height_distance_max = 0.65,
inair_allowed_height_distance_min = 0.31,
}
local ledge_vault_tweak_values_ogryn_orig = {
allowed_flat_distance_to_ledge = 1.5,
allowed_height_distance_max = 0.8,
allowed_height_distance_min = 0.5,
always_step_up = true,
inair_allowed_height_distance_max = 0.65,
inair_allowed_height_distance_min = 0.5,
}
The values seem to cause issues in LedgeVaulting.can_enter(…) ?
local height_distance = ledge.height_distance_from_player_unit
if height_distance <= allowed_height_distance_max and allowed_height_distance_min <= height_distance then
That famous little fence ledge on Consignment Yard for instance, the ogryn’s first attempt to vault on ground, then jumping in_air seems to exceed the maximum allowed height in the match calculations (other spots it’s min!?):
Holding jump is checked for vaulting pre-check.
LedgeVaulting.can_enter()
NOT in_air
height_distance FAIL 1.0948877334594727 min 0.5 max 0.80000000000000004
****PlayerCharacterStateWalking _check_transition
***** JUMPING ***** PlayerCharacterStateJumping on_enter walking 5187.1153846154
jump_held walking 5187.1346153846152 5187.1346153846152
LedgeVaulting.can_enter()
in_air
height_distance FAIL 1.0179834365844727 min 0.5 max 0.65000000000000002
jump_held walking 5187.1538461538466 5187.1538461538466
LedgeVaulting.can_enter()
in_air
height_distance FAIL 0.94530773162841797 min 0.5 max 0.65000000000000002
jump_held walking 5187.1730769230771 5187.1730769230771
LedgeVaulting.can_enter()
in_air
height_distance FAIL 0.87702465057373047 min 0.5 max 0.65000000000000002
jump_held walking 5187.1923076923076 5187.1923076923076
LedgeVaulting.can_enter()
in_air
height_distance FAIL 0.81315135955810547 min 0.5 max 0.65000000000000002
jump_held walking 5187.211538461539 5187.211538461539
LedgeVaulting.can_enter()
in_air
height_distance FAIL 0.75367641448974609 min 0.5 max 0.65000000000000002
NO jump_held walking 5187.2307692307695 5187.211538461539
There’s only a few frames where jump is considered held if you press but not held.
So the for the initial checks (there’s more) where jump_held==true , the distance check to see if it fall is in [min…max] fails most of time?.
Edit: Some checks pass but the actual vaulting over fails?is it because of the pipe railing behind the sheet metal? This section at least doesn’t seem to be tagged as a ledge for vaulting on its own, all of it ?
***** JUMPING ***** PlayerCharacterStateJumping on_enter walking 1785.6923076923
jump_held walking 1785.7115384615386 1785.7115384615386
LedgeVaulting.can_enter()
NO ledges found
First vault attempt fails, not in air, doesn’t fall in range.
The last check where jump is considered held after pressing spacebar fails because it’s in_air height of 0.81 > max of 0.65.
And in this window the set range check failing ?
Fails if you press jump, often, but if you hold it, it finds an interval to pass.
There’s more to it that just that I think, but some of it at least seems to come down to these values and how/when the jump is being “held”.
If you hold jump it usually finds a frame to go through, held when moving forward. Basically skipping the initial gatepeeking checks:
if input_source:get("jump_held") and not dodge_jumping then
local can_vault, ledge = LedgeVaulting.can_enter(self._ledge_finder_extension, self._ledge_vault_tweak_values, self._unit_data_extension, self._input_extension, self._visual_loadout_extension)
So in the pictured window above, Humans are not in the air so they use the ground values allowed_height_distance_max = 1.3 and
allowed_height_distance_min = 0.31 and
,
NOT in_air
distance_flat_sq 0.31989318132400513
height_distance PASS 0.52335071563720703 min 0.31 max 1.3 true distance_flat_sq 0.31989318132400513
ledge_forward Vector3(-1, 4.76799e-05, 0) Vector3(-0.986227, -0.0126924, -0.16491) dot 0.98622649908065796
PlayerCharacterStateLedgeVaulting on_enter walking 6957
They walk up to ledge, check for jump input and transition from walk (sprint) to vault.
BUT playing with the ogryn values:
local ledge_vault_tweak_values_ogryn = {
allowed_flat_distance_to_ledge = 1.5,
allowed_height_distance_max = 0.8 * 2,
allowed_height_distance_min = 0.5 / 2,
always_step_up = true,
inair_allowed_height_distance_max = 0.65 * 2,
inair_allowed_height_distance_min = 0.5 / 2,
}
Seems to at least make it easier to pass the checks ? halving the min and doubling the max.
I haven’t looked at the other parts of the equation much, PlayerCharacterStateLedgeVaulting.* as the initial roadblocks seemed worse, but it seems a combination of things at play.
Even when the initial checks pass it doesn’t actually follow through with vaulting here, so are certain in-word object like railing cancelling?
P.S. Quite possible my somewhat perfunctory analysis is wrong and not getting the whole pic(most done when I should have been sleeping), so take with a grain of salt (which btw Ogryn can’t vault over, the grain).
Again, the humans simply grab on and vault over skipping all these jump checks. I’m tired of looking at this crap.