From: VGoncalo Date: Thu, 2 Apr 2026 19:01:45 +0000 (+0100) Subject: player object X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/gm-duelo.git/commitdiff_plain/a196cd3a29f894b0d715a3c96a42b2bb9d861e76?ds=sidebyside player object --- a196cd3a29f894b0d715a3c96a42b2bb9d861e76 diff --git a/objects/obj_player/Alarm_0.gml b/objects/obj_player/Alarm_0.gml new file mode 100644 index 0000000..c327e2e --- /dev/null +++ b/objects/obj_player/Alarm_0.gml @@ -0,0 +1,2 @@ +/// @description reset jump +alarm[0] = -1; \ No newline at end of file diff --git a/objects/obj_player/Alarm_1.gml b/objects/obj_player/Alarm_1.gml new file mode 100644 index 0000000..cbf4770 --- /dev/null +++ b/objects/obj_player/Alarm_1.gml @@ -0,0 +1,2 @@ +/// @description melee attack reset +alarm[1] = -1; \ No newline at end of file diff --git a/objects/obj_player/Alarm_2.gml b/objects/obj_player/Alarm_2.gml new file mode 100644 index 0000000..a5ed013 --- /dev/null +++ b/objects/obj_player/Alarm_2.gml @@ -0,0 +1,2 @@ +/// @description roll cooldown +alarm[2] = -1; \ No newline at end of file diff --git a/objects/obj_player/Alarm_3.gml b/objects/obj_player/Alarm_3.gml new file mode 100644 index 0000000..ec3abd7 --- /dev/null +++ b/objects/obj_player/Alarm_3.gml @@ -0,0 +1,4 @@ +/// @description hit available reset +//image_alpha = 1; +_hit_bk_val = 0; +alarm[3] = -1; \ No newline at end of file diff --git a/objects/obj_player/Alarm_4.gml b/objects/obj_player/Alarm_4.gml new file mode 100644 index 0000000..2cbcd1f --- /dev/null +++ b/objects/obj_player/Alarm_4.gml @@ -0,0 +1,12 @@ +/// @description respawn player +var _spawn_pick = choose(obj_p1_spawn,obj_p2_spawn,obj_p3_spawn,obj_p4_spawn,obj_p5_spawn); +x = _spawn_pick.x; +y = _spawn_pick.y; + +_amount_of_bullets = _selected_char._amount_of_bullets;//30; +_health = _selected_char._health; + + +audio_play_sound(snd_copper_bell,10,false); +_state = HERO.IDLE; +alarm[4] = -1; \ No newline at end of file diff --git a/objects/obj_player/Alarm_5.gml b/objects/obj_player/Alarm_5.gml new file mode 100644 index 0000000..1818d5f --- /dev/null +++ b/objects/obj_player/Alarm_5.gml @@ -0,0 +1,2 @@ +/// @description reset special +alarm[5] = -1; \ No newline at end of file diff --git a/objects/obj_player/Collision_obj_lava.gml b/objects/obj_player/Collision_obj_lava.gml new file mode 100644 index 0000000..c889589 --- /dev/null +++ b/objects/obj_player/Collision_obj_lava.gml @@ -0,0 +1,9 @@ +/// @description +_vsp = 0.1; +_hsp = 0; +_health = 0; +_state = HERO.DEAD; + +effect_create_above(ef_smokeup,x,y+8,0,c_red); +if(player_id == 0 and alarm[4] = -1){ obj_game_controller._player1_victories--; alarm[4] = 3*room_speed} +if(player_id == 1 and alarm[4] = -1){ obj_game_controller._player2_victories--; alarm[4] = 3*room_speed} \ No newline at end of file diff --git a/objects/obj_player/Create_0.gml b/objects/obj_player/Create_0.gml new file mode 100644 index 0000000..d2d2e00 --- /dev/null +++ b/objects/obj_player/Create_0.gml @@ -0,0 +1,126 @@ +// player info +_im_player = 0; +_amount_of_games = 0; +_amount_of_victories = 0; +_amount_of_relics = 0; +_amount_of_golden_eggs = 0; +_amount_of_silver_nut = 0 +_amount_of_artpiece = 0; +_amount_of_obsidians = 0; +_my_score = 0; + +// user inputs +_right = 0; +_left = 0; +_up = 0; +_down = 0; +_melee_atk = 0; +_range_atk = 0; +_evasion = 0; +_special = 0; + +_game_state = GAME_STATES.WAITING; + +// character info +_char_select_index = 0; +_selected_char = noone; +_name = ""; +_health = 1; +_speed = 0; +_jump = 0; +_special_cd = 0; +_my_bullet_type = ""; +_amount_of_bullets = 0; +_roll_speed = 0; +_grav = 0; +_wall_drag = 0; +_to_grab = false; +_hsp = 0; +_vsp = 0; + +_jump_timer = 0; +_attack_timer = 0; +_shoot_timer = 0; +_shoot_dir = 0; +_hit_cd = 2*room_speed; +_dead_cd = 3*room_speed; + +_my_spr_idle = ""; +_my_spr_run = ""; +_my_spr_crouch = ""; +_my_spr_jump = ""; +_my_spr_roll = ""; +_my_spr_hang = ""; +_my_spr_shoot = ""; +_my_spr_attack = ""; +_my_spr_special = ""; +_my_spr_hit = ""; +_my_spr_dead = ""; + +_hit_blink = animcurve_get_channel(ac_combat, 0); +_hit_bk_val = 0; +_grounded = false; +_state = HERO.IDLE; + +init_players(); + +function submit_my_data(){ + if(player_name != "unknown"){ + var _p_name = string_replace(player_name," ",""); + var _file =_p_name+"-save.txt"; + if(file_exists(_file)){ + file_delete(_file); + } + + if(player_id==0){ + var _p_vic = obj_game_controller._player1_victories; + var _p_relic = obj_game_controller._player1_total_relics; + var _p_eggs = obj_game_controller._player1_total_egg_relic; + var _p_nuts = obj_game_controller._player1_total_nut_relic; + var _p_obs = obj_game_controller._player1_total_obsidians; + var _p_art = obj_game_controller._player1_total_art; + var _p_score = ceil( (_p_relic + 3 * (obj_game_controller._player1_victories) + 4 *(_p_eggs*_p_nuts*_p_obs*_p_art)) / 1 );//_amount_of_games + 3 * (obj_game_controller._player1_victories) + 4 *(_p_eggs*_p_nuts*_p_obs*_p_art); + obj_game_controller._player1_score = _p_score; + }else if(player_id==1){ + var _p_vic = _amount_of_victories + obj_game_controller._player2_victories; + var _p_relic = _amount_of_relics + obj_game_controller._player2_total_relics; + var _p_eggs = _amount_of_golden_eggs + obj_game_controller._player2_total_egg_relic; + var _p_nuts = _amount_of_silver_nut + obj_game_controller._player2_total_nut_relic; + var _p_obs = _amount_of_obsidians + obj_game_controller._player2_total_obsidians; + var _p_art = _amount_of_artpiece + obj_game_controller._player2_total_art; + var _p_score = ceil( (_p_relic + 3 * (obj_game_controller._player2_victories) + 4 *(_p_eggs*_p_nuts*_p_obs*_p_art)) / 1 );//_amount_of_games + 3 * (obj_game_controller._player2_victories) + 4 *(_p_eggs*_p_nuts*_p_obs*_p_art); + obj_game_controller._player2_score = _p_score; + } + self._my_score = _p_score; + var _player_data = { + player_gx_name : player_name, + games : _amount_of_games + obj_game_controller._amount_of_duels_this_session, + victories : _p_vic, + relics : _p_relic, + golden_eggs : _p_eggs, + silver_nuts : _p_nuts, + obsidians : _p_obs, + artpiece : _p_art, + pscore : _p_score, + } + + var _string_pdata = json_stringify(_player_data); + var _new_file = file_text_open_write(_file); + file_text_write_string(_new_file, _string_pdata); + file_text_close(_new_file); + } +} + +_to_clear_my_data = 0; +function delete_my_data(){ + var _file =player_name+"-save.txt"; + if(file_exists(_file)){ + file_delete(_file); + } + var _p_name = string_replace(player_name," ",""); + var _file =_p_name+"-save.txt"; + if(file_exists(_file)){ + file_delete(_file); + } + game_restart(); +} diff --git a/objects/obj_player/Draw_0.gml b/objects/obj_player/Draw_0.gml new file mode 100644 index 0000000..f355cb9 --- /dev/null +++ b/objects/obj_player/Draw_0.gml @@ -0,0 +1,37 @@ +draw_self(); + +var _rm_name = room_get_name(room); +if(_rm_name == "rm_lounge" and _game_state != GAME_STATES.WAITING){ + if player_id == 0 { + draw_sprite(spr_char_select,0,room_width/2-64+48*_char_select_index,2*room_height/3 +96); + draw_set_halign(fa_center); + draw_rectangle_color(96,192,256,368,c_gray,c_gray,c_gray,c_gray,0); + draw_text_color(176, 200, string(global._characters[_char_select_index]._name),c_blue,c_blue,c_blue,c_blue,1); + draw_text(176, 232, "health: "+string(global._characters[_char_select_index]._health)); + draw_text(176, 264, "speed: "+string(global._characters[_char_select_index]._speed)); + draw_text(176, 296, "bullets: "+string(global._characters[_char_select_index]._amount_of_bullets)); + draw_text(176, 328, "weapon: "+string(global._characters[_char_select_index]._info)); + + } + if player_id == 1 { + draw_sprite(spr_char_select,1,room_width/2-64+48*_char_select_index,2*room_height/3 +96); + draw_rectangle_color(room_width-96,192,room_width-256,368,c_gray,c_gray,c_gray,c_gray,0); + draw_text_colour(room_width-176, 200, string(global._characters[_char_select_index]._name),c_orange,c_orange,c_orange,c_orange,1); + draw_text(room_width-176, 232, "health: "+string(global._characters[_char_select_index]._health)); + draw_text(room_width-176, 264, "speed: "+string(global._characters[_char_select_index]._speed)); + draw_text(room_width-176, 296, "bullets: "+string(global._characters[_char_select_index]._amount_of_bullets)); + draw_text(room_width-176, 328, "weapon: "+string(global._characters[_char_select_index]._info)); + } + + +} + +if(_state == HERO.SHOOT and image_index < 3 and _grounded){ + /**/ + var _x2 = lengthdir_x(32*image_xscale,_shoot_dir); + var _y2 = lengthdir_y(32*image_xscale,_shoot_dir); + + // circle + if(image_xscale == -1){draw_circle_color((x-12)-_x2*image_xscale,y-8-_y2,2,c_red,c_red,0);} + if(image_xscale == 1){draw_circle_color((x+12*image_xscale)+_x2*image_xscale,y-8+_y2,2,c_red,c_red,0);} +} \ No newline at end of file diff --git a/objects/obj_player/Draw_64.gml b/objects/obj_player/Draw_64.gml new file mode 100644 index 0000000..7523a57 --- /dev/null +++ b/objects/obj_player/Draw_64.gml @@ -0,0 +1,95 @@ +var _mid_x = room_width/2; +var _mid_y = room_height/3; + +switch(_game_state){ + /*case GAME_STATES.WAITING:{ + if !_p1_ready or !_p2_ready { + draw_set_halign(fa_center); + draw_text(_mid_x, _mid_y+64, _waiting_msg); + //draw_sprite_stretched(spr_title,0,_mid_x-172, _mid_y-64,356,128); + } + if _p1_ready { + draw_set_halign(fa_left); + draw_text(8, 2, _player1_name+" - READY"); + } + if _p2_ready { + draw_set_halign(fa_right); + draw_text(room_width-8, 2, _player2_name+" - READY"); + } + + // controls + draw_set_halign(fa_center); + draw_text(_mid_x, room_height-32, " Arrows to move, Z for melee attack, X for range attack, C for special"); + + // player info + //draw_player_info(); + break;}*/ + + case GAME_STATES.HERO_SELECTION:{ + if(player_id == 0){ + draw_set_halign(fa_left); + if _selected_char == noone { + draw_text(8, 2, player_name+" - Choosing..."); + }else{; + draw_text(8, 2, player_name+" - "+string(_selected_char._name)); + } + + // player scores + if(player_name != "unknown" ){ + draw_text(24, 32,"DuelsMade: "+string(_amount_of_games)); + draw_text(24, 64,"Victories: "+string(_amount_of_victories)); + draw_text(24, 96,"Relics : "+string(_amount_of_relics)); + draw_text(24, 128,"Score : "+string(_my_score)); + }else{ + draw_text(24, 32, "Login in to OperaGX"); + } + }else if(player_id == 1){ + draw_set_halign(fa_right); + if _selected_char == noone { + draw_text(room_width-8, 2, "...Choosing - "+player_name); + }else{ + draw_text(room_width-8, 2, string(_selected_char._name) +" - "+player_name); + } + + //player scores + if(player_name != "unknown" ){ + draw_text(room_width-42, 32,"DuelsMade: "+string(_amount_of_games)); + draw_text(room_width-42, 64,"Victories: "+string(_amount_of_victories)); + draw_text(room_width-42, 96,"Relics : "+string(_amount_of_relics)); + draw_text(room_width-42, 128,"Score : "+string(_my_score)); + }else{ + draw_text(room_width-32, 32, "Login in to OperaGX"); + } + } + break;} + + case GAME_STATES.FIGHTING:{ + var _top_y = 18; + if(player_id == 0){ + draw_set_alpha(0.5); + draw_rectangle_color(4,4,32+string_length(_selected_char._name)*14+32,42,c_gray,c_gray,c_gray,c_gray,0); + draw_set_alpha(1); + draw_rectangle_color(4,4,32+string_length(_selected_char._name)*14+32,42,c_blue,c_blue,c_blue,c_blue,1); + draw_set_halign(fa_left); + draw_text(8, 2, "P1 - "+_selected_char._name+" ("+string( obj_game_controller._player1_victories)+")"); + + for(var _hp1 = 0; _hp1 < _health; _hp1++){ + draw_sprite(spr_coracao,0,32+_hp1*16,32); + } + } + + if(player_id == 1){ + draw_set_alpha(0.5); + draw_rectangle_color(room_width-8, 4,room_width-(36+string_length(_selected_char._name)*14+32),42,c_gray,c_gray,c_gray,c_gray,0); + draw_set_alpha(1); + draw_rectangle_color(room_width-8, 4,room_width-(36+string_length(_selected_char._name)*14+32),42,c_orange,c_orange,c_orange,c_orange,1); + draw_set_halign(fa_right); + draw_text(room_width-8, 2, "P2 - "+_selected_char._name+" ("+string( obj_game_controller._player2_victories)+")"); + + for(var _hp2 = 0; _hp2 < _health; _hp2++){ + draw_sprite(spr_coracao,0,room_width-32-_hp2*16,32); + } + } + + break;} +} diff --git a/objects/obj_player/Other_10.gml b/objects/obj_player/Other_10.gml new file mode 100644 index 0000000..3bd833a --- /dev/null +++ b/objects/obj_player/Other_10.gml @@ -0,0 +1,53 @@ +/// @description IDLE +sprite_index = asset_get_index(_my_spr_idle); +image_speed = 1; +_hsp = 0; + +if(_grounded){ + if((_right!=0 or _left!=0)){ + _state = HERO.MOVE; + } + + if(_up and alarm[0]=-1 ){ + _state = HERO.JUMP; + _vsp = _jump; + audio_play_sound(snd_jump,10,false); + part_particles_burst(global._ps_jump_ef,x,y+sprite_height/2,ps_jump_ef); + alarm[0] = _jump_timer; + } + + if(_down){ + _state = HERO.CROUCH; + } +}else{ + _hsp = (_right - _left); + if( place_meeting(x+sign(_hsp),y,obj_wall) ){ + _state = HERO.WALL; + } + + // allow jump near wall + if(_up and ( place_meeting(x+sprite_width/2,y,obj_wall) or place_meeting(x-sprite_width/2,y,obj_wall) )){ + _state = HERO.JUMP; + _vsp = _jump; + part_particles_burst(global._ps_jump_ef,x,y+sprite_height/2,ps_jump_ef); + alarm[0] = _jump_timer; + } + +} + +if(_melee_atk and alarm[1] = -1){ + image_index = 0; + alarm[1] = _attack_timer; + _state = HERO.ATTACK; +} + +if(_evasion and alarm[5] = -1){ + image_index = 0; + alarm[5] = _special_cd; + _state = HERO.EVASION; +} + +if(_range_atk and not _melee_atk){ + image_index = 0; + _state = HERO.SHOOT; +} \ No newline at end of file diff --git a/objects/obj_player/Other_11.gml b/objects/obj_player/Other_11.gml new file mode 100644 index 0000000..b7dcaf5 --- /dev/null +++ b/objects/obj_player/Other_11.gml @@ -0,0 +1,33 @@ +/// @description RUN +sprite_index = asset_get_index(string(_my_spr_run)); +image_speed = 1; +_hsp = (_right - _left) * _speed; + +if(_grounded){ + part_particles_burst(global._ps_walk_ef,x,y+sprite_height/2,ps_walk_ef); + if(_right = 0 and _left = 0){ + _state = HERO.IDLE; + } + + if(_up and alarm[0]=-1){ + _state = HERO.JUMP; + _vsp = _jump; + audio_play_sound(snd_jump,10,false); + part_particles_burst(global._ps_jump_ef,x,y+sprite_height/2,ps_jump_ef); + alarm[0] = _jump_timer; + } + + if(_down){ + _state = HERO.CROUCH; + } +}else{ + if( place_meeting(x+sign(_hsp),y,obj_wall) ){ + _state = HERO.WALL; + } +} + +if(_melee_atk and alarm[1] = -1){ + image_index = 0; + alarm[1] = _attack_timer; + _state = HERO.ATTACK; +} \ No newline at end of file diff --git a/objects/obj_player/Other_12.gml b/objects/obj_player/Other_12.gml new file mode 100644 index 0000000..004c08a --- /dev/null +++ b/objects/obj_player/Other_12.gml @@ -0,0 +1,26 @@ +/// @description JUMP +sprite_index = asset_get_index(string(_my_spr_jump)); +_hsp = (_right - _left) * _speed; +if(image_index > 2){ + image_speed = 0; +} + +if(_hsp!=0 and place_meeting(x+_hsp,y,obj_wall)){ + //image_index = 0; + _state = HERO.WALL; +} + +if(_vsp = 0 and place_meeting(x,y+sprite_get_bbox_bottom(sprite_index),obj_wall)){ + _state = HERO.IDLE; +} + +if(_melee_atk and alarm[1] = -1){ + image_index = 0; + alarm[1] = 2 * _attack_timer; + _state = HERO.ATTACK; +} + +if(_range_atk){ + image_index = 0; + _state = HERO.SHOOT; +} \ No newline at end of file diff --git a/objects/obj_player/Other_13.gml b/objects/obj_player/Other_13.gml new file mode 100644 index 0000000..3e72b34 --- /dev/null +++ b/objects/obj_player/Other_13.gml @@ -0,0 +1,78 @@ +/// @description ATTACK +sprite_index = asset_get_index(string(_my_spr_attack)); +image_speed = 1; +_hsp = sign(_hsp); + +if(image_index < 1){ + audio_play_sound(snd_melee_attack,10,false); +} + +// samurai style - model attack 4 +if(sprite_index == spr_samurai_attack or sprite_index == spr_model_attack_4){ + if(image_index > 0 and image_index < 9){ + var _to_hit = collision_point(x+24*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + audio_play_sound(snd_sword_hit_sword,10,false); + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _hsp = -image_xscale * 15; + _vsp = -10; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + } + } + if(image_index > 5 and image_index < 6){audio_play_sound(snd_melee_attack,10,false);} + } + + if(image_index > 8){ + _state = HERO.IDLE; + } + if(image_index > 3 and _melee_atk = 0){ + _state = HERO.IDLE; + } +} + +// sabre style +if(sprite_index == spr_pirate_attack or sprite_index = spr_alentejano_attack){ + if(image_index > 1 and image_index < 4){ + var _to_hit = collision_point(x+16*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + audio_play_sound(snd_sword_hit_sword,10,false); + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _hsp = -image_xscale * 15; + _vsp = -10; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + } + } + } + + if(image_index > 5){ + _state = HERO.IDLE; + } +} + +// jab style +if(sprite_index == spr_model_jab){ + if(image_index > 0 and image_index < 8){ + var _to_hit = collision_point(x+8*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _hsp = -image_xscale * 15; + _vsp = -10; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + //_to_hit._health += 0.5; + } + } + } + + /*if(image_index > 8 and _evasion){ + sprite_index = spr_model_punch; + _state = HERO.ATTACK;*/ + if(image_index > 9){ + _state = HERO.IDLE; + } +} diff --git a/objects/obj_player/Other_14.gml b/objects/obj_player/Other_14.gml new file mode 100644 index 0000000..d8f1e3a --- /dev/null +++ b/objects/obj_player/Other_14.gml @@ -0,0 +1,49 @@ +/// @description WALL HANG / CLIMB +sprite_index = asset_get_index(string(_my_spr_hang)); +image_speed = 0; +_grounded = false; + +if(_right or _left){ + _hsp=0; + + //!place_meeting(x+6*image_xscale,y-14,obj_wall) + var _wall = collision_point(x+12*image_xscale,y-14,obj_wall,false,1); + if( _wall and not(_to_grab)){ + if(_selected_char._name == "Casimiro"){ + _wall_drag = 0; + }else{ + //effect_create_below(ef_smokeup,x+14*image_xscale,y+4,0,c_grey); + part_particles_burst(global._ps_walk_ef,x+14*image_xscale,y-8,ps_walk_ef); + _wall_drag = 0.3; + } + }else if(_wall and _to_grab){ + _wall_drag = 0; + //image_speed = 1; + }else{ + _wall_drag = 2; + _to_grab = true; + } + +}else{ + _to_grab = false; + _state = HERO.IDLE; +} + +if(place_meeting(x,y+_vsp,obj_wall)){ + _to_grab = false; + _state = HERO.IDLE; +} + +if(_up and alarm[0]=-1){ + audio_play_sound(snd_jump,10,false); + _to_grab = false; + _state = HERO.JUMP; + _vsp = _jump;//+_jump/5; + _hsp = 3*image_xscale*_jump; + alarm[0] = _jump_timer; +} + +if(!place_meeting(x+6*image_xscale,y+1,obj_wall)){ + _to_grab = false; + _state = HERO.IDLE; +} \ No newline at end of file diff --git a/objects/obj_player/Other_15.gml b/objects/obj_player/Other_15.gml new file mode 100644 index 0000000..e8e5f71 --- /dev/null +++ b/objects/obj_player/Other_15.gml @@ -0,0 +1,13 @@ +/// @description CROUCH +sprite_index = asset_get_index(string(_my_spr_crouch)); +image_speed = 1; + +if(_down){ + if((_right or _left) and alarm[2] = -1){ + image_index = 0; + _state = HERO.ROLL; + alarm[2] = room_speed/2; + } +}else{ + _state = HERO.IDLE; +} \ No newline at end of file diff --git a/objects/obj_player/Other_16.gml b/objects/obj_player/Other_16.gml new file mode 100644 index 0000000..b27e83a --- /dev/null +++ b/objects/obj_player/Other_16.gml @@ -0,0 +1,72 @@ +/// @description SHOOT +sprite_index = asset_get_index(string(_my_spr_shoot)); +_hsp = 0; + +if(_range_atk and image_index < 1){ + // point direction + image_speed = 0; + if(_grounded){ + if(_up){_shoot_dir+=2;} + else if(_down){_shoot_dir-=2} + else{ + if(_shoot_dir > 0){_shoot_dir-=1;} + if(_shoot_dir < 0){_shoot_dir+=1;} + } + if(_shoot_dir > 90){_shoot_dir=90;} + if(_shoot_dir < -75){_shoot_dir=-75;} + } + + + if(_melee_atk){ + image_speed = 1; + image_index = 5; + } +}else{ + image_speed = 1; + if(image_index < 0.4){ + if(_amount_of_bullets > 0 ){ + if(_my_bullet_type == "obj_bullet"){ + audio_play_sound(snd_glock_shoot,10,false); + }else if(_my_bullet_type == "obj_kunai"){ + audio_play_sound(snd_throw,10,false); + } + + //audio_play_sound_ext(global._pistol_snd); + if(not(_grounded)){ + var _blt_dir; + var _blt_x = 12*image_xscale; + var _blt_y = 8; + if(_up){ + if _right _blt_dir = 45; + else if _left _blt_dir = 135; + else _blt_dir = 90; _blt_x = 0; _blt_y = 14; + }else if(_down){ + if _right _blt_dir = 315; + else if _left _blt_dir = 225; + else _blt_dir = 270; _blt_x = 0; _blt_y = -14; + }else{ + if image_xscale = 1 _blt_dir = 0 + if image_xscale = -1 _blt_dir = 180; + } + + var _my_bullet = instance_create_layer(x + _blt_x, y - _blt_y, "Instances", asset_get_index(string(_my_bullet_type)), {direction : _blt_dir}); + _amount_of_bullets--; + } + // aim shoot + if(_grounded){ + var _blt_x = 12*image_xscale; + var _blt_y = 8; + if(image_xscale == -1){_shoot_dir = 180 - _shoot_dir} + var _my_bullet = instance_create_layer(x + _blt_x, y - _blt_y, "Instances", asset_get_index(string(_my_bullet_type)), {direction : _shoot_dir}); + _amount_of_bullets--; + } + }else{ + //audio_play_sound(snd_empty_gun,10,false); + } + } + if(image_index > 9){ + _state = HERO.IDLE; + _shoot_dir = 0; + } + if(!_grounded){_state = HERO.JUMP;image_index = 1;_shoot_dir = 0;} +} \ No newline at end of file diff --git a/objects/obj_player/Other_17.gml b/objects/obj_player/Other_17.gml new file mode 100644 index 0000000..07ee30d --- /dev/null +++ b/objects/obj_player/Other_17.gml @@ -0,0 +1,19 @@ +/// @description HIT +image_speed = 1; +_shoot_dir = 0; + +if(alarm[3] = -1){ + audio_play_sound(choose(snd_cut_01,snd_cut_02),10,false); + part_particles_burst(global._ps_blood,x,y,ps_blood); + _health--; + alarm[3] = _hit_cd; + + sprite_index = asset_get_index(string(_my_spr_hit)); + image_index = 0; + part_particles_burst(global._ps_blood,x,y,ps_blood); +} +if(image_index > 3){ + if(_health > 0){ + _state = HERO.IDLE; + }else{_state = HERO.DEAD; alarm[3] = -1;} +} \ No newline at end of file diff --git a/objects/obj_player/Other_18.gml b/objects/obj_player/Other_18.gml new file mode 100644 index 0000000..0bbca9f --- /dev/null +++ b/objects/obj_player/Other_18.gml @@ -0,0 +1,19 @@ +/// @description DEAD +sprite_index = asset_get_index(string(_my_spr_dead)); +_hsp = 0; + +if(image_index > 9){ + image_speed = 0; + if(alarm[4] = -1){ + if(player_id == 0){ obj_game_controller._player2_victories++; } + if(player_id == 1){ obj_game_controller._player1_victories++; } + obj_game_controller._amount_of_duels_this_session++; + obj_game_controller._relics_spawn++; + + with(obj_player){ submit_my_data(); } + obj_gmscoreboard._update_scores = true; + alarm[4] = _dead_cd; + } +}else{ + part_particles_burst(global._ps_blood,x,y,ps_blood); +} \ No newline at end of file diff --git a/objects/obj_player/Other_19.gml b/objects/obj_player/Other_19.gml new file mode 100644 index 0000000..b61c6f0 --- /dev/null +++ b/objects/obj_player/Other_19.gml @@ -0,0 +1,9 @@ +/// @description ROLL +sprite_index = asset_get_index(string(_my_spr_roll)); +image_speed = 1; +_hsp = _roll_speed * image_xscale; + +if(image_index > 6){ + _hsp = 0; + _state = HERO.IDLE; +} \ No newline at end of file diff --git a/objects/obj_player/Other_20.gml b/objects/obj_player/Other_20.gml new file mode 100644 index 0000000..17066ca --- /dev/null +++ b/objects/obj_player/Other_20.gml @@ -0,0 +1,79 @@ +/// @description EVASION C +sprite_index = asset_get_index(string(_my_spr_special)); +if sprite_index != "tbd" { + image_speed = 1; + _hsp = sign(_hsp); + + if(image_index < 1){ + audio_play_sound(snd_melee_sword_attack,10,false); + } + + // punch style + if(sprite_index == spr_model_punch or sprite_index == spr_alentejano_punch){ + if(image_index > 4 and image_index < 7){ + var _to_hit = collision_point(x+18*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _to_hit._hsp = -image_xscale * 10; + _to_hit._vsp = -5; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + _to_hit._hsp = -_to_hit.image_xscale * 8; + _to_hit._vsp = -4; + } + } + } + + if(image_index > 7){ + _state = HERO.IDLE; + } + } + + // samurai style - model attack 3 + if(sprite_index == spr_samurai_attack_2){ + if(image_index > 1 and image_index < 10){ + var _to_hit = collision_point(x+30*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + audio_play_sound(snd_sword_w_sword_00,10,false); + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _hsp = -image_xscale * 15; + _vsp = -10; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + _to_hit._health = 0; + part_particles_burst(global._ps_blood,_to_hit.x,_to_hit.y,ps_blood); + } + } + } + + if(image_index > 15){ + _state = HERO.IDLE; + } + } + + // stab style + if(sprite_index == spr_model_attack_2 or sprite_index == spr_pirate_hook_atk){ + if(image_index > 1 and image_index < 5){ + var _to_hit = collision_point(x+20*image_xscale,y,obj_player,true,true); + if(_to_hit){ + if(_to_hit._state == HERO.ATTACK){ + var _efx = choose(effect_create_above(ef_ring,x,y,0,c_white), effect_create_above(ef_ellipse,x,y,0,c_white) ); + _hsp = -image_xscale * 15; + _vsp = -10; + }else if(_to_hit._state != HERO.HIT and _to_hit._state != HERO.DEAD and _to_hit._state != HERO.ROLL){ + _to_hit._state = HERO.HIT; + _to_hit._health--; + } + } + } + + if(image_index > 6){ + _state = HERO.IDLE; + } + } + +}else{ + _state = HERO.IDLE; +} \ No newline at end of file diff --git a/objects/obj_player/Other_4.gml b/objects/obj_player/Other_4.gml new file mode 100644 index 0000000..b242de1 --- /dev/null +++ b/objects/obj_player/Other_4.gml @@ -0,0 +1,5 @@ +/// @description spawn heros +var _rm_name = room_get_name(room); +if(_rm_name != "rm_lounge"){ + init_character_spawn(); +} \ No newline at end of file diff --git a/objects/obj_player/Other_63.gml b/objects/obj_player/Other_63.gml new file mode 100644 index 0000000..5fa1dbc --- /dev/null +++ b/objects/obj_player/Other_63.gml @@ -0,0 +1,8 @@ +var _i_d = ds_map_find_value(async_load, "id"); +if (_i_d == _to_clear_my_data){ + if (ds_map_find_value(async_load, "status")){ + if (ds_map_find_value(async_load, "result") == "YES"){ + delete_my_data(); + } + } +} \ No newline at end of file diff --git a/objects/obj_player/Step_0.gml b/objects/obj_player/Step_0.gml new file mode 100644 index 0000000..088746a --- /dev/null +++ b/objects/obj_player/Step_0.gml @@ -0,0 +1,93 @@ +if(_game_state = GAME_STATES.WAITING){ + if(object_exists(obj_game_controller)){ + if(_up or _down or _left or _right or _melee_atk or _range_atk){ + if player_id == 0 obj_game_controller._p1_ready = true; + if player_id == 1 obj_game_controller._p2_ready = true; + } + } +} + +if(_game_state = GAME_STATES.HERO_SELECTION){ + var _max_char = array_length(global._characters)-1; + if(_right and alarm[0] = -1 and _selected_char == noone){_char_select_index++; alarm[0] = room_speed/4} + if(_left and alarm[0] = -1 and _selected_char == noone){_char_select_index--; alarm[0] = room_speed/4} + if(player_id == 0){ // for debug + if(_up and alarm[0] = -1){obj_game_controller._scenary_selected_index++; alarm[0] = room_speed/4} + if(_down and alarm[0] = -1){obj_game_controller._scenary_selected_index--; alarm[0] = room_speed/4} + } + if _char_select_index < 0 _char_select_index = _max_char; + if _char_select_index > _max_char _char_select_index = 0; + + if _melee_atk and player_id == 0 { + _selected_char = global._characters[_char_select_index]; + obj_game_controller._p1_selected_char = _selected_char; + fetch_my_attr(_selected_char); + }else if _melee_atk and player_id == 1 { + _selected_char = global._characters[_char_select_index]; + obj_game_controller._p2_selected_char = _selected_char; + fetch_my_attr(_selected_char); // to remove + } + if(_range_atk and _selected_char != noone){ + _selected_char = noone; + if player_id == 0 obj_game_controller._p1_selected_char = noone; + if player_id == 1 obj_game_controller._p2_selected_char = noone; + } + if( _special and player_id == 0 ){ + _to_clear_my_data = get_string_async("Writte YES to clear your data","NO"); + } +} + +if(_game_state = GAME_STATES.FIGHTING){ + if _health <= 0 _state = HERO.DEAD; + if player_id == 0 obj_game_controller._p1_hp = _health; + if player_id == 1 obj_game_controller._p2_hp = _health; + + switch(_state){ + case HERO.IDLE: + event_user(_state); + break; + case HERO.MOVE: + event_user(_state); + break; + case HERO.JUMP: + event_user(_state); + break; + case HERO.ATTACK: + event_user(_state); + break; + case HERO.WALL: + event_user(_state); + break; + case HERO.CROUCH: + event_user(_state); + break; + case HERO.SHOOT: + event_user(_state); + break; + case HERO.HIT: + event_user(_state); + break; + case HERO.DEAD: + event_user(_state); + break; + case HERO.ROLL: + event_user(_state); + break; + case HERO.EVASION: + event_user(_state); + break; + } + + if _state != HERO.WALL _vsp += _grav; else _vsp = _wall_drag; + obj_wall_collisions(); + + // hit blink + if(alarm[3] != -1){ + var _val = animcurve_channel_evaluate(_hit_blink, _hit_bk_val); + image_alpha = _val; + if _hit_bk_val > 1 _hit_bk_val = 0;else _hit_bk_val+=0.1; + }else{image_alpha = 1;} + + x += _hsp; + y += _vsp; +} \ No newline at end of file diff --git a/objects/obj_player/Step_1.gml b/objects/obj_player/Step_1.gml new file mode 100644 index 0000000..f9c48e0 --- /dev/null +++ b/objects/obj_player/Step_1.gml @@ -0,0 +1,39 @@ +/// @description check user inputs +var _input = rollback_get_input(); + +//keyboard inputs +// movement +if(_input.right){ + _right = 1; +}else{ _right = 0;} +if(_input.left){ + _left = 1; +}else{ _left = 0;} +if(_input.up){ + _up = 1; +}else{ _up = 0;} +if(_input.down){ + _down = 1; +}else{ _down = 0;} + +// action +if(_input.z and not _input.x){ + _melee_atk = 1; +}else{ _melee_atk = 0;} +if(_input.x and not _input.z){ + _range_atk = 1; +}else{ _range_atk = 0;} +if(_input.c){ + _evasion = 1; +}else{ _evasion = 0;} + +if(_input.space){ + _special = 1; +}else{ _special = 0;} + + +// face direction +if(_state != HERO.DEAD){ + if _left = 1 image_xscale = -1; + if _right = 1 image_xscale = 1; +} \ No newline at end of file diff --git a/objects/obj_player/obj_player.yy b/objects/obj_player/obj_player.yy new file mode 100644 index 0000000..0660edf --- /dev/null +++ b/objects/obj_player/obj_player.yy @@ -0,0 +1,59 @@ +{ + "$GMObject":"", + "%Name":"obj_player", + "eventList":[ + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":10,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":11,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":12,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":13,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":14,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":15,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":16,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":17,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":18,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":19,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":2,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":3,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":4,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":4,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":{"name":"obj_lava","path":"objects/obj_lava/obj_lava.yy",},"eventNum":0,"eventType":4,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":20,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":5,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":63,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + ], + "managed":true, + "name":"obj_player", + "overriddenProperties":[], + "parent":{ + "name":"players", + "path":"folders/Objects/players.yy", + }, + "parentObjectId":null, + "persistent":true, + "physicsAngularDamping":0.1, + "physicsDensity":0.5, + "physicsFriction":0.2, + "physicsGroup":1, + "physicsKinematic":false, + "physicsLinearDamping":0.1, + "physicsObject":false, + "physicsRestitution":0.1, + "physicsSensor":false, + "physicsShape":1, + "physicsShapePoints":[], + "physicsStartAwake":true, + "properties":[], + "resourceType":"GMObject", + "resourceVersion":"2.0", + "solid":false, + "spriteId":null, + "spriteMaskId":null, + "visible":true, +} \ No newline at end of file