]> vgcfreebox.myrthtech.pt Git - gm-duelo.git/commitdiff
game conroller objs main
authorVGoncalo <vitor.goncalo.costa@gmail.com>
Fri, 3 Apr 2026 16:11:29 +0000 (17:11 +0100)
committerVGoncalo <vitor.goncalo.costa@gmail.com>
Fri, 3 Apr 2026 16:11:29 +0000 (17:11 +0100)
13 files changed:
objects/obj_game/Create_0.gml [new file with mode: 0644]
objects/obj_game/obj_game.yy [new file with mode: 0644]
objects/obj_game_controller/Alarm_0.gml [new file with mode: 0644]
objects/obj_game_controller/Alarm_1.gml [new file with mode: 0644]
objects/obj_game_controller/Alarm_2.gml [new file with mode: 0644]
objects/obj_game_controller/Alarm_3.gml [new file with mode: 0644]
objects/obj_game_controller/Create_0.gml [new file with mode: 0644]
objects/obj_game_controller/Draw_64.gml [new file with mode: 0644]
objects/obj_game_controller/Other_10.gml [new file with mode: 0644]
objects/obj_game_controller/Other_11.gml [new file with mode: 0644]
objects/obj_game_controller/Other_12.gml [new file with mode: 0644]
objects/obj_game_controller/Step_0.gml [new file with mode: 0644]
objects/obj_game_controller/obj_game_controller.yy [new file with mode: 0644]

diff --git a/objects/obj_game/Create_0.gml b/objects/obj_game/Create_0.gml
new file mode 100644 (file)
index 0000000..0141ee6
--- /dev/null
@@ -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 (file)
index 0000000..0825e1d
--- /dev/null
@@ -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 (file)
index 0000000..0318bc0
--- /dev/null
@@ -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 (file)
index 0000000..1b12688
--- /dev/null
@@ -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 (file)
index 0000000..0de69f1
--- /dev/null
@@ -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 (file)
index 0000000..6ad3be3
--- /dev/null
@@ -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 (file)
index 0000000..380a331
--- /dev/null
@@ -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 (file)
index 0000000..07eb57e
--- /dev/null
@@ -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 (file)
index 0000000..ae3e7fb
--- /dev/null
@@ -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 (file)
index 0000000..6903018
--- /dev/null
@@ -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 (file)
index 0000000..bd00e9c
--- /dev/null
@@ -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 (file)
index 0000000..42e6d72
--- /dev/null
@@ -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 (file)
index 0000000..23f08c7
--- /dev/null
@@ -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