To put it bluntly, you're blindly copy pasting and simply changing a bit here and there the code originally from your objPlayer, as in not really understanding what each line of code is meant to do. Your above code is doing what it has been programmed to do as you have coded in the above, and seen while running the game you are making. No where in there says anything "hey if my enemy is spawned off the ground (not touching the ground) make it retain its default animation (sprite), don't assume it is jumping when it is actually falling/being pulled down by grv (gravity)". In fact, I am very very sure this sprite "coolEnemyRun" with the code looking like the above, it is never executed, why? because for it to execute, it needs the hsp to be greater than 0 (go right) or less than 0 (go left). Likewise your enemy when it is touching the ground (again with just the above code) it will never use "coolEnemyJump", because the vsp needs to counteract the grv value otherwise if you try remove "coolObjectWall" from under it, it'd continue to fall off your screen. Your above code doesn't change the value of the vsp to allow it to trigger jump. The reason it works on your objPlayer is because the hsp and vsp are being managed by the player/user input (keyboard/mouse/gamepad), but in the case of your enemy character there's none such external intervention. So either you adjust your code accordingly, or you add another checker (collider/trigger) to make it distinguish between falling, jumping, idle, walking, running, floating, etc.