From: VGoncalo Date: Fri, 3 Apr 2026 16:11:29 +0000 (+0100) Subject: game conroller objs X-Git-Url: https://vgcfreebox.myrthtech.pt/gitweb/gm-duelo.git/commitdiff_plain/HEAD?hp=a196cd3a29f894b0d715a3c96a42b2bb9d861e76 game conroller objs --- diff --git a/objects/obj_game/Create_0.gml b/objects/obj_game/Create_0.gml new file mode 100644 index 0000000..0141ee6 --- /dev/null +++ b/objects/obj_game/Create_0.gml @@ -0,0 +1,4 @@ +rollback_define_player(obj_player,"Instances"); +if(not(rollback_join_game())){ + rollback_create_game(2,true); +} \ No newline at end of file diff --git a/objects/obj_game/obj_game.yy b/objects/obj_game/obj_game.yy new file mode 100644 index 0000000..0825e1d --- /dev/null +++ b/objects/obj_game/obj_game.yy @@ -0,0 +1,35 @@ +{ + "$GMObject":"", + "%Name":"obj_game", + "eventList":[ + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + ], + "managed":true, + "name":"obj_game", + "overriddenProperties":[], + "parent":{ + "name":"Objects", + "path":"folders/Objects.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 diff --git a/objects/obj_game_controller/Alarm_0.gml b/objects/obj_game_controller/Alarm_0.gml new file mode 100644 index 0000000..0318bc0 --- /dev/null +++ b/objects/obj_game_controller/Alarm_0.gml @@ -0,0 +1,4 @@ +/// @description players ready, go to char select +_state = GAME_STATES.HERO_SELECTION; +obj_player._game_state = GAME_STATES.HERO_SELECTION; +alarm[0] = -1; \ No newline at end of file diff --git a/objects/obj_game_controller/Alarm_1.gml b/objects/obj_game_controller/Alarm_1.gml new file mode 100644 index 0000000..1b12688 --- /dev/null +++ b/objects/obj_game_controller/Alarm_1.gml @@ -0,0 +1 @@ +alarm[1] = -1; \ No newline at end of file diff --git a/objects/obj_game_controller/Alarm_2.gml b/objects/obj_game_controller/Alarm_2.gml new file mode 100644 index 0000000..0de69f1 --- /dev/null +++ b/objects/obj_game_controller/Alarm_2.gml @@ -0,0 +1,5 @@ +/// @description spawn silver nut +var _nut_xy = choose([125,182],[380,325],[355,36],[920,100],[720,196]); +instance_create_layer(_nut_xy[0], _nut_xy[1],"Instances",obj_silver_nut); +_relics_spawn = 0; +alarm[2] = -1; \ No newline at end of file diff --git a/objects/obj_game_controller/Alarm_3.gml b/objects/obj_game_controller/Alarm_3.gml new file mode 100644 index 0000000..6ad3be3 --- /dev/null +++ b/objects/obj_game_controller/Alarm_3.gml @@ -0,0 +1,8 @@ +/// @description character and scenary selected +if(_p1_selected_char != noone and _p2_selected_char != noone){ + _state = GAME_STATES.FIGHTING; + obj_player._game_state = GAME_STATES.FIGHTING; + + room_goto(_scenary_selected._index); + alarm[3] = -1; +}else{alarm[3] = 180;} diff --git a/objects/obj_game_controller/Create_0.gml b/objects/obj_game_controller/Create_0.gml new file mode 100644 index 0000000..380a331 --- /dev/null +++ b/objects/obj_game_controller/Create_0.gml @@ -0,0 +1,69 @@ +// Game SESSION DATA +_player1_name = ""; +_player1_instid = 0; +_p1_ready = false; +_player1_total_games = 0; +_player1_total_victories = 0; +_player1_total_relics = 0; +_player1_total_egg_relic = 0; +_player1_total_nut_relic = 0; +_player1_total_obsidians = 0; +_player1_total_art = 0; +_player1_score = 0; + +_player2_name = ""; +_player2_instid = 0; +_p2_ready = false; +_player2_total_games = 0; +_player2_total_victories = 0; +_player2_total_relics = 0; +_player2_total_egg_relic = 0; +_player2_total_nut_relic = 0; +_player2_total_obsidians = 0; +_player2_total_art = 0; +_player2_score = 0; + +// current session +_time_in_game = 0; +_amount_of_duels_this_session = 0; +_sync_save_player_data = 0; + +_player1_victories = 0; +_player1_relics = 0; +_player1_egg_relic = 0; +_player1_nut_relic = 0; +_player1_obsidian_relic = 0; +_player1_art_relic = 0; + +_player2_victories = 0; +_player2_relics = 0; +_player2_egg_relic = 0; +_player2_nut_relic = 0; +_player2_obsidian_relic = 0; +_player2_art_relic = 0; +_relics_spawn = 0; + + +_available_chars = global._characters; +_p1_selected_char = noone; +_p2_selected_char = noone; +_p1_hp = 0; +_p2_hp = 0; + + +_scenary_available = global._levels; +_scenary_selected_index = 0; +_scenary_selected_max = array_length(_scenary_available)-1; +_scenary_selected = _scenary_available[_scenary_selected_index]; + +_state = GAME_STATES.WAITING; + +_waiting_msg = " Waiting for Players "; +_waiting_msg2 = " Login to OperaGX for Score Submission "; + + + +alarm[0] = -1; // players gave input +//alarm[1] = -1; // scoreboard rest function :P +alarm[2] = -1; // respawn silver nut delay +alarm[3] = -1; // go fight after character selection diff --git a/objects/obj_game_controller/Draw_64.gml b/objects/obj_game_controller/Draw_64.gml new file mode 100644 index 0000000..07eb57e --- /dev/null +++ b/objects/obj_game_controller/Draw_64.gml @@ -0,0 +1,62 @@ +var _mid_x = room_width/2; +var _mid_y = room_height/3; + +switch(_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); + } + 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, "READY - "+_player2_name); + } + + // 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"); + break;} + + case GAME_STATES.HERO_SELECTION:{ + //Arena Display + draw_set_halign(fa_center); + draw_sprite_stretched(asset_get_index(_scenary_selected._cover), 0, _mid_x-192, _mid_y-88, 384, 288); + draw_text(_mid_x, _mid_y+212,_scenary_selected._title); + var _rm_title_lgh = string_length(_scenary_selected._title); + draw_sprite(spr_menu_arrow_small,1,_mid_x - _rm_title_lgh*6, _mid_y+222); + draw_sprite(spr_menu_arrow_small,3,_mid_x + _rm_title_lgh*6, _mid_y+222); + + // portrait display + draw_set_halign(fa_center); + for(var _i = 0; _i < array_length(global._characters); _i++){ + var _portrait = global._characters[_i]._portrait; + var _pt_icon = asset_get_index(string(_portrait)); + draw_sprite_stretched(_pt_icon,0,room_width/2-96+48*_i,2*room_height/3+64,64,64); + + if _i == 0 draw_sprite(spr_menu_arrow,2,room_width/2-96-24,2*room_height/3+96); + if _i == array_length(global._characters)-1 draw_sprite(spr_menu_arrow,0,room_width/2+48*_i-8,2*room_height/3+96); + } + + // attributes display + draw_rectangle_color(96,192,256,368,c_blue,c_blue,c_blue,c_blue,1); + draw_rectangle_color(room_width-96,192,room_width-256,368,c_orange,c_orange,c_orange,c_orange,1); + + // 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"); + break;} + + case GAME_STATES.FIGHTING:{ + var _top_y = 18; + draw_set_halign(fa_center); + draw_set_alpha(0.5); + draw_rectangle_color(_mid_x-30,4,_mid_x+32,40,c_gray,c_gray,c_gray,c_gray,0); + draw_set_alpha(1); + draw_text(_mid_x, 1, "Round"); + draw_text(_mid_x+4, _top_y, _amount_of_duels_this_session); + break;} +} diff --git a/objects/obj_game_controller/Other_10.gml b/objects/obj_game_controller/Other_10.gml new file mode 100644 index 0000000..ae3e7fb --- /dev/null +++ b/objects/obj_game_controller/Other_10.gml @@ -0,0 +1,8 @@ +/// @description WAITING +if(_player1_instid != 0 and _player2_instid != 0 and _p1_ready and _p2_ready and alarm[0] = -1){ + alarm[0] = 1.5*room_speed; + obj_title._animate = true; +} +if(_player1_instid != 0 and _player2_instid != 0 ){ + _waiting_msg = " Press any key " +} diff --git a/objects/obj_game_controller/Other_11.gml b/objects/obj_game_controller/Other_11.gml new file mode 100644 index 0000000..6903018 --- /dev/null +++ b/objects/obj_game_controller/Other_11.gml @@ -0,0 +1,9 @@ +/// @description HERO SELECTION +if(_p1_selected_char != noone and _p2_selected_char != noone and _scenary_selected != noone and alarm[3] = -1){ + alarm[3] = 2*room_speed; + audio_play_sound(snd_two_bells,10,false); +} + +if _scenary_selected_index > _scenary_selected_max _scenary_selected_index = 0; +if _scenary_selected_index < 0 _scenary_selected_index = _scenary_selected_max; +_scenary_selected = _scenary_available[_scenary_selected_index]; \ No newline at end of file diff --git a/objects/obj_game_controller/Other_12.gml b/objects/obj_game_controller/Other_12.gml new file mode 100644 index 0000000..bd00e9c --- /dev/null +++ b/objects/obj_game_controller/Other_12.gml @@ -0,0 +1,39 @@ +/// @description FIGHTING +if _player1_victories < 0 _player1_victories = 0; +if _player2_victories < 0 _player2_victories = 0; + + + +// spawn relics +var _rm_name = room_get_name(room); +if(_rm_name == "rm_the_mountain" ){ + if(_relics_spawn > 3 and !instance_exists(obj_bird)){ + instance_create_layer(obj_nest.x-256,obj_nest.y-156,"Instances",obj_bird); + _relics_spawn = 0; + } + if _relics_spawn > 2 and instance_exists(obj_bird) _relics_spawn = 0; +} + +if(_rm_name == "rm_the_forest" ){ + if(_relics_spawn > 2 and alarm[2] = -1){ + alarm[2] = room_speed * 3; + } +} + +if(_rm_name == "rm_the_volcano" ){ + if(_relics_spawn > 1){ + obj_lava._create_obsidian = true; + _relics_spawn = 0; + } +} + +if(_rm_name == "rm_mertola" ){ + if(_relics_spawn > 1){ + obj_carriage._drop_chest = true; + _relics_spawn = 0; + } + if(not(audio_is_playing(snd_bck_villa))){ + audio_play_sound(snd_bck_villa,10,false); + } + +} diff --git a/objects/obj_game_controller/Step_0.gml b/objects/obj_game_controller/Step_0.gml new file mode 100644 index 0000000..42e6d72 --- /dev/null +++ b/objects/obj_game_controller/Step_0.gml @@ -0,0 +1,11 @@ +switch(_state){ + case GAME_STATES.WAITING: + event_user(_state); + break; + case GAME_STATES.HERO_SELECTION: + event_user(_state); + break; + case GAME_STATES.FIGHTING: + event_user(_state); + break; +} \ No newline at end of file diff --git a/objects/obj_game_controller/obj_game_controller.yy b/objects/obj_game_controller/obj_game_controller.yy new file mode 100644 index 0000000..23f08c7 --- /dev/null +++ b/objects/obj_game_controller/obj_game_controller.yy @@ -0,0 +1,44 @@ +{ + "$GMObject":"", + "%Name":"obj_game_controller", + "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":64,"eventType":8,"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":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":0,"eventType":2,"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":1,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + {"$GMEvent":"","%Name":"","collisionObjectId":null,"eventNum":2,"eventType":2,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",}, + ], + "managed":true, + "name":"obj_game_controller", + "overriddenProperties":[], + "parent":{ + "name":"Objects", + "path":"folders/Objects.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