Z
Zynpex
Guest
I'm sure this is a quick fix, but I have been up all night trying to find a solution for this aggravating problem.
Okay so basically, I want to have the player stop moving completely while in the attack state"(ATTACK_HAMMER)", if he is not grounded, i have a script i can call to check if he is on the ground. Its called on_ground. I have found one solution to stop the player completely, but another issue arose, I know what the issue is but not how to resolve it and i have tried everything i can think of. The issue has to do with the characters facing direction. When attacking, the player stops, but rapidly flick left and right at the same time while the animation is playing.
Player Create Event
///description Variables
hsp = 0;
vsp = 0;
max_hsp = 64
walk_spd = 11.0;
vsp_decimal = 0;
hsp_decimal = 0;
jump_spd = -38;
//friction
drag = .35;
//facing
facing = 1;
//movement
left = 0;
right = 0;
up = 0;
down = 0;
attack = 0;
jump = 0;
block = 0;
//sates
enum states {
IDLE,
WALK,
JUMP,
ATTACK_HAMMER,
ATTACK_SHOOT,
ATTACK_ROCK,
ATTACK_ARROW,
CROUCH,
BLOCK,
CROUCH_BLOCK,
FALL_ROLL
}
state = states.IDLE;
//create states array
states_array[states.IDLE] = player_idle_state;
states_array[states.WALK] = player_walk_state;
states_array[states.JUMP] = player_jump_state;
states_array[states.ATTACK_HAMMER] = player_attack_hammer_state;
states_array[states.ATTACK_ROCK] = player_attack_rock_state;
states_array[states.ATTACK_ARROW] = player_attack_arrow_state;
states_array[states.ATTACK_SHOOT] = player_attack_shoot_state;
states_array[states.CROUCH] = player_crouch_state;
states_array[states.FALL_ROLL] = player_fall_roll_state;
states_array[states.BLOCK] = player_block_state;
// create sprites array
sprites_array[states.IDLE] = s_player_idle;
sprites_array[states.WALK] = s_player_walk;
sprites_array[states.JUMP] = s_player_jump;
sprites_array[states.ATTACK_HAMMER] = s_player_attack_hammer;
sprites_array[states.ATTACK_ROCK] = s_player_attack_rock;
sprites_array[states.ATTACK_ARROW] = s_player_attack_arrow;
sprites_array[states.ATTACK_SHOOT] = s_player_attack_shoot;
sprites_array[states.CROUCH] = s_player_crouch;
sprites_array[states.FALL_ROLL] = s_player_fall;
sprites_array[states.BLOCK] = s_player_block;
animation script;
Im using a switch statement here.
///anim();
sprite_index = sprites_array[state];
image_xscale = facing;
switch(state) {
case states.JUMP:
if vsp < 0 state = states.JUMP else state = states.FALL_ROLL
break;
case states.ATTACK_HAMMER:
if hsp != 0 {
if on_ground()
hsp = lerp(hsp, 0, drag*10) ;
if hsp != 0 facing = sign(hsp);
}
break;
}
Okay so basically, I want to have the player stop moving completely while in the attack state"(ATTACK_HAMMER)", if he is not grounded, i have a script i can call to check if he is on the ground. Its called on_ground. I have found one solution to stop the player completely, but another issue arose, I know what the issue is but not how to resolve it and i have tried everything i can think of. The issue has to do with the characters facing direction. When attacking, the player stops, but rapidly flick left and right at the same time while the animation is playing.
Player Create Event
///description Variables
hsp = 0;
vsp = 0;
max_hsp = 64
walk_spd = 11.0;
vsp_decimal = 0;
hsp_decimal = 0;
jump_spd = -38;
//friction
drag = .35;
//facing
facing = 1;
//movement
left = 0;
right = 0;
up = 0;
down = 0;
attack = 0;
jump = 0;
block = 0;
//sates
enum states {
IDLE,
WALK,
JUMP,
ATTACK_HAMMER,
ATTACK_SHOOT,
ATTACK_ROCK,
ATTACK_ARROW,
CROUCH,
BLOCK,
CROUCH_BLOCK,
FALL_ROLL
}
state = states.IDLE;
//create states array
states_array[states.IDLE] = player_idle_state;
states_array[states.WALK] = player_walk_state;
states_array[states.JUMP] = player_jump_state;
states_array[states.ATTACK_HAMMER] = player_attack_hammer_state;
states_array[states.ATTACK_ROCK] = player_attack_rock_state;
states_array[states.ATTACK_ARROW] = player_attack_arrow_state;
states_array[states.ATTACK_SHOOT] = player_attack_shoot_state;
states_array[states.CROUCH] = player_crouch_state;
states_array[states.FALL_ROLL] = player_fall_roll_state;
states_array[states.BLOCK] = player_block_state;
// create sprites array
sprites_array[states.IDLE] = s_player_idle;
sprites_array[states.WALK] = s_player_walk;
sprites_array[states.JUMP] = s_player_jump;
sprites_array[states.ATTACK_HAMMER] = s_player_attack_hammer;
sprites_array[states.ATTACK_ROCK] = s_player_attack_rock;
sprites_array[states.ATTACK_ARROW] = s_player_attack_arrow;
sprites_array[states.ATTACK_SHOOT] = s_player_attack_shoot;
sprites_array[states.CROUCH] = s_player_crouch;
sprites_array[states.FALL_ROLL] = s_player_fall;
sprites_array[states.BLOCK] = s_player_block;
animation script;
Im using a switch statement here.
///anim();
sprite_index = sprites_array[state];
image_xscale = facing;
switch(state) {
case states.JUMP:
if vsp < 0 state = states.JUMP else state = states.FALL_ROLL
break;
case states.ATTACK_HAMMER:
if hsp != 0 {
if on_ground()
hsp = lerp(hsp, 0, drag*10) ;
if hsp != 0 facing = sign(hsp);
}
break;
}