Flex works fine in HLMV and SFM but in Gmod it doesn't?

Alright here we go.

In Gmod, my freshly added flexes to the model (eye angry L/R 0-1. eye sad L/R 0-1.) Go into weird directions, for example: backwards and sideways.

This is how the flex is supposed to look in HLMV where it functions normally:

What the hell is going on?

put a blank at the beginning and i think the end of the flexes

Unless it was fixed, you definitely need one at the end of your flexes but you shouldn’t need one at the beginning. Posting your QC never hurts though, especially if that doesn’t fix it.

Yup, Gmod has this weird thing where it breaks the very last flex. Just add an empty one to the end and everything should be fine.

It normally breaks the last flex and I’m aware of that. But what happens here is that her flexes (eye angry L/R 0-1. eye sad L/R 0-1) (4 flexes) completely malfunction in Gmod while the other flexes do what they’re supposed to do. I’ve tried to add a blank as the first flex as well but it didn’t work.

Here is the .QC:


$model "jenny_wakeman" "jenny_body.smd" {

	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_0_L" frame 1
	flexcontroller "phoneme" "eye_angry_0_L" "range" 0 1
	%eye_angry_0_L = eye_angry_0_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_0_R" frame 2
	flexcontroller "phoneme" "eye_angry_0_R" "range" 0 1
	%eye_angry_0_R = eye_angry_0_R

	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_1_L" frame 3
	flexcontroller "phoneme" "eye_angry_1_L" "range" 0 1
	%eye_angry_1_L = eye_angry_1_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_1_R" frame 4
	flexcontroller "phoneme" "eye_angry_1_R" "range" 0 1
	%eye_angry_1_R = eye_angry_1_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_2_L" frame 5
	flexcontroller "phoneme" "eye_angry_2_L" "range" 0 1
	%eye_angry_2_L = eye_angry_2_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_angry_2_R" frame 6
	flexcontroller "phoneme" "eye_angry_2_R" "range" 0 1
	%eye_angry_2_R = eye_angry_2_R



	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_0_L" frame 7
	flexcontroller "phoneme" "eye_sad_0_L" "range" 0 1
	%eye_sad_0_L = eye_sad_0_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_0_R" frame 8
	flexcontroller "phoneme" "eye_sad_0_R" "range" 0 1
	%eye_sad_0_R = eye_sad_0_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_1_L" frame 9
	flexcontroller "phoneme" "eye_sad_1_L" "range" 0 1
	%eye_sad_1_L = eye_sad_1_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_1_R" frame 10
	flexcontroller "phoneme" "eye_sad_1_R" "range" 0 1
	%eye_sad_1_R = eye_sad_1_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_2_L" frame 11
	flexcontroller "phoneme" "eye_sad_2_L" "range" 0 1
	%eye_sad_2_L = eye_sad_2_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_sad_2_R" frame 12
	flexcontroller "phoneme" "eye_sad_2_R" "range" 0 1
	%eye_sad_2_R = eye_sad_2_R
	
	
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_happy_upper_L" frame 13
	flexcontroller "phoneme" "eye_happy_upper_L" "range" 0 1
	%eye_happy_upper_L = eye_happy_upper_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_happy_upper_R" frame 14
	flexcontroller "phoneme" "eye_happy_upper_R" "range" 0 1
	%eye_happy_upper_R = eye_happy_upper_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_happy_lower_L" frame 15
	flexcontroller "phoneme" "eye_happy_lower_L" "range" 0 1
	%eye_happy_lower_L = eye_happy_lower_L
    
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_happy_lower_R" frame 16
	flexcontroller "phoneme" "eye_happy_lower_R" "range" 0 1
	%eye_happy_lower_R = eye_happy_lower_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_0_L" frame 17
	flexcontroller "phoneme" "eye_lower_0_L" "range" 0 1
	%eye_lower_0_L = eye_lower_0_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_0_R" frame 18
	flexcontroller "phoneme" "eye_lower_0_R" "range" 0 1
	%eye_lower_0_R = eye_lower_0_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_0_L" frame 19
	flexcontroller "phoneme" "eye_raiser_0_L" "range" 0 1
	%eye_raiser_0_L = eye_raiser_0_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_0_R" frame 20
	flexcontroller "phoneme" "eye_raiser_0_R" "range" 0 1
	%eye_raiser_0_R = eye_raiser_0_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_1_L" frame 21
	flexcontroller "phoneme" "eye_lower_1_L" "range" 0 1
	%eye_lower_1_L = eye_lower_1_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_1_R" frame 22
	flexcontroller "phoneme" "eye_lower_1_R" "range" 0 1
	%eye_lower_1_R = eye_lower_1_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_1_L" frame 23
	flexcontroller "phoneme" "eye_raiser_1_L" "range" 0 1
	%eye_raiser_1_L = eye_raiser_1_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_1_R" frame 24
	flexcontroller "phoneme" "eye_raiser_1_R" "range" 0 1
	%eye_raiser_1_R = eye_raiser_1_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_2_L" frame 25
	flexcontroller "phoneme" "eye_lower_2_L" "range" 0 1
	%eye_lower_2_L = eye_lower_2_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_2_R" frame 26
	flexcontroller "phoneme" "eye_lower_2_R" "range" 0 1
	%eye_lower_2_R = eye_lower_2_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_2_L" frame 27
	flexcontroller "phoneme" "eye_raiser_2_L" "range" 0 1
	%eye_raiser_2_L = eye_raiser_2_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_2_R" frame 28
	flexcontroller "phoneme" "eye_raiser_2_R" "range" 0 1
	%eye_raiser_2_R = eye_raiser_2_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_3_L" frame 29
	flexcontroller "phoneme" "eye_lower_3_L" "range" 0 1
	%eye_lower_3_L = eye_lower_3_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_lower_3_R" frame 30
	flexcontroller "phoneme" "eye_lower_3_R" "range" 0 1
	%eye_lower_3_R = eye_lower_3_R
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_3_L" frame 31
	flexcontroller "phoneme" "eye_raiser_3_L" "range" 0 1
	%eye_raiser_3_L = eye_raiser_3_L
	
	flexfile "jenny_body_eye_flexes.vta"
	flex "eye_raiser_3_R" frame 32
	flexcontroller "phoneme" "eye_raiser_3_R" "range" 0 1
	%eye_raiser_3_R = eye_raiser_3_R

	flexfile "jenny_body_eye_flexes.vta"
	flex "blank" frame 33
	flexcontroller "phoneme" "blank" "range" 0 1
	%blank = blank

	
	eyeball righteye bip_head -2.28 -3.5 50.52 eyeball_r 10.000  11.00 pupil_r 13.000 
	eyeball lefteye bip_head 2.28 -3.5 50.52 eyeball_l 10.000  -11.00 pupil_l 13.000
	

	
	mouth 0 "mouth"  bip_head 0.00 1.50 6.00

	flexcontroller eyes range -90 90 eyes_updown
	flexcontroller eyes range -90 90 eyes_rightleft
        }

Jesus christ why do you have so many VTAs?! That could be part of the problem but I doubt it.

So if that fix didn’t work, maybe try re-exporting the VTAs for those specif flexes?

EDIT: Wait, you only have one. If all the flexes are in the same file why do you have more than one flexfile command?

Try this.


$model jenny_wakeman jenny_body.smd {
	
	flexfile jenny_body_eye_flexes.vta
	{
		flex "eye_angry_0_L" frame 1
		flex "eye_angry_0_R" frame 2
		flex "eye_angry_1_L" frame 3
		flex "eye_angry_1_R" frame 4
		flex "eye_angry_2_L" frame 5
		flex "eye_angry_2_R" frame 6
		flex "eye_sad_0_L" frame 7
		flex "eye_sad_0_R" frame 8
		flex "eye_sad_1_L" frame 9
		flex "eye_sad_1_R" frame 10
		flex "eye_sad_2_L" frame 11
		flex "eye_sad_2_R" frame 12
		flex "eye_happy_upper_L" frame 13
		flex "eye_happy_upper_R" frame 14
		flex "eye_happy_lower_L" frame 15
		flex "eye_happy_lower_R" frame 16
		flex "eye_lower_0_L" frame 17
		flex "eye_lower_0_R" frame 18
		flex "eye_raiser_0_L" frame 19
		flex "eye_raiser_0_R" frame 20
		flex "eye_lower_1_L" frame 21
		flex "eye_lower_1_R" frame 22
		flex "eye_raiser_1_L" frame 23
		flex "eye_raiser_1_R" frame 24
		flex "eye_lower_2_L" frame 25
		flex "eye_lower_2_R" frame 26
		flex "eye_raiser_2_L" frame 27
		flex "eye_raiser_2_R" frame 28
		flex "eye_lower_3_L" frame 29
		flex "eye_lower_3_R" frame 30
		flex "eye_raiser_3_R" frame 32
		flex "eye_raiser_3_L" frame 31
		flex "blank" frame 33
	}
	
	eyeball righteye bip_head -2.28 -3.5 50.52 eyeball_r 10.000  11.00 pupil_r 13.000 
	eyeball lefteye bip_head 2.28 -3.5 50.52 eyeball_l 10.000  -11.00 pupil_l 13.000
	
	mouth 0 "mouth"  bip_head 0.00 1.50 6.00
	
	flexcontroller "phoneme" "eye_angry_0_L" "range" 0 1
	flexcontroller "phoneme" "eye_angry_0_R" "range" 0 1
	flexcontroller "phoneme" "eye_angry_1_L" "range" 0 1
	flexcontroller "phoneme" "eye_angry_1_R" "range" 0 1
	flexcontroller "phoneme" "eye_angry_2_L" "range" 0 1
	flexcontroller "phoneme" "eye_angry_2_R" "range" 0 1
	flexcontroller "phoneme" "eye_sad_0_L" "range" 0 1
	flexcontroller "phoneme" "eye_sad_0_R" "range" 0 1
	flexcontroller "phoneme" "eye_sad_1_L" "range" 0 1
	flexcontroller "phoneme" "eye_sad_1_R" "range" 0 1
	flexcontroller "phoneme" "eye_sad_2_L" "range" 0 1
	flexcontroller "phoneme" "eye_sad_2_R" "range" 0 1
	flexcontroller "phoneme" "eye_happy_upper_L" "range" 0 1
	flexcontroller "phoneme" "eye_happy_upper_R" "range" 0 1
	flexcontroller "phoneme" "eye_happy_lower_L" "range" 0 1
	flexcontroller "phoneme" "eye_happy_lower_R" "range" 0 1
	flexcontroller "phoneme" "eye_lower_0_L" "range" 0 1
	flexcontroller "phoneme" "eye_lower_0_R" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_0_L" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_0_R" "range" 0 1
	flexcontroller "phoneme" "eye_lower_1_L" "range" 0 1
	flexcontroller "phoneme" "eye_lower_1_R" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_1_L" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_1_R" "range" 0 1
	flexcontroller "phoneme" "eye_lower_2_L" "range" 0 1
	flexcontroller "phoneme" "eye_lower_2_R" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_2_L" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_2_R" "range" 0 1
	flexcontroller "phoneme" "eye_lower_3_L" "range" 0 1
	flexcontroller "phoneme" "eye_lower_3_R" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_3_L" "range" 0 1
	flexcontroller "phoneme" "eye_raiser_3_R" "range" 0 1
	flexcontroller "phoneme" "blank" "range" 0 1
	flexcontroller eyes range -90 90 eyes_updown
	flexcontroller eyes range -90 90 eyes_rightleft
	
	%eye_angry_0_L = eye_angry_0_L
	%eye_angry_0_R = eye_angry_0_R
	%eye_angry_1_L = eye_angry_1_L
	%eye_angry_1_R = eye_angry_1_R
	%eye_angry_2_L = eye_angry_2_L
	%eye_angry_2_R = eye_angry_2_R
	%eye_sad_0_L = eye_sad_0_L
	%eye_sad_0_R = eye_sad_0_R
	%eye_sad_1_L = eye_sad_1_L
	%eye_sad_1_R = eye_sad_1_R
	%eye_sad_2_L = eye_sad_2_L
	%eye_sad_2_R = eye_sad_2_R
	%eye_happy_upper_L = eye_happy_upper_L
	%eye_happy_upper_R = eye_happy_upper_R
	%eye_happy_lower_L = eye_happy_lower_L
	%eye_happy_lower_R = eye_happy_lower_R
	%eye_lower_0_L = eye_lower_0_L
	%eye_lower_0_R = eye_lower_0_R
	%eye_raiser_0_L = eye_raiser_0_L
	%eye_raiser_0_R = eye_raiser_0_R
	%eye_lower_1_L = eye_lower_1_L
	%eye_lower_1_R = eye_lower_1_R
	%eye_raiser_1_L = eye_raiser_1_L
	%eye_raiser_1_R = eye_raiser_1_R
	%eye_lower_2_L = eye_lower_2_L
	%eye_lower_2_R = eye_lower_2_R
	%eye_raiser_2_L = eye_raiser_2_L
	%eye_raiser_2_R = eye_raiser_2_R
	%eye_lower_3_L = eye_lower_3_L
	%eye_lower_3_R = eye_lower_3_R
	%eye_raiser_3_L = eye_raiser_3_L
	%eye_raiser_3_R = eye_raiser_3_R
	%blank = blank
}

I’ve tried to change the .QC to what you pasted. The results are still the same, those 4 flexes still move backwards.

Wait, backwards?

What exactly is going on? Which flexes are doing what?
From your image it seems eye_angry is supposed to move the eyelid down, what is happening instead?

the following flexes: eye_angry_0_L eye_angry_1_L eye_angry_0_R eye_angry_1_R, are the only ones that are messed up. they move in the wrong direction in Gmod. they don’t do that in SFM and HLMV.

The flexes have the following mechanism, they’re separate eyelids inside the head that only move forward on the Y-Axis as they are triggered.

if they’re moving backwards, maybe that means they move father than 8 units

You’re right! they indeed move further than 8 units, this has been the problem all along!

but now I’m going to need an alternative to get those flexes working again. The overall distance on the Y-axis cannot be decreased as it will make them drag each other along :S

Overview picture:

the best option may be to break the full flex into multiple flexes. Apparently this problem is seen frequently in Sonic models due to their large eye size and the solution I saw in place was multiple flexes to either open or close the eye depending on if the default is open or closed. This may mean that the new flexes will be shorter on the y axis, but keep in mind that in Gmod, HLMV, and SFM Flexes can be combined so it will be possible to get the full flex animation.

Thanks a bunch my friend :smiley:
I have just the plan to execute your suggested fix, I’m going to add a flex to move the last eyelids just enough to get them in range for the final position.

just remember, to make them work right, they only need to move as far as they need to to make the full combo work.
Flex Combos can also be previewed before exporting the separate flexes.