From 08b50242860d542e78d00fe6eb96bf6a89fd32a7 Mon Sep 17 00:00:00 2001 From: EthanWatkins1720 <70484753+EthanWatkins1720@users.noreply.github.com> Date: Mon, 1 Apr 2024 00:01:35 -0400 Subject: [PATCH] Added equip functionality to inventory, minor tidying up Added equip and unequip functionality to inventory and tidied up some minor issues. --- .../objects/obj_inventory/Create_0.gml | 26 ++++++- .../objects/obj_inventory/Draw_64.gml | 37 +++++----- .../objects/obj_inventory/Step_0.gml | 69 +++++++++++++++++-- .../objects/obj_pause_menu/Create_0.gml | 3 +- .../objects/obj_pause_menu/Step_0.gml | 23 ++++--- Turn-Based-RPG/objects/obj_player/Step_0.gml | 2 +- .../rooms/rm_world_map/rm_world_map.yy | 4 -- Turn-Based-RPG/scripts/Battle/Battle.gml | 2 +- 8 files changed, 124 insertions(+), 42 deletions(-) diff --git a/Turn-Based-RPG/objects/obj_inventory/Create_0.gml b/Turn-Based-RPG/objects/obj_inventory/Create_0.gml index ba4c2e7..c0e00e2 100644 --- a/Turn-Based-RPG/objects/obj_inventory/Create_0.gml +++ b/Turn-Based-RPG/objects/obj_inventory/Create_0.gml @@ -4,6 +4,9 @@ global.inventory = new Inventory(); _show_inventory = false; _show_tooltip = false; +_pressed = true; +_equipping = false; +_equippable = false; // values used in drawing inventory slots & border _gui_width = 314; @@ -33,6 +36,8 @@ _y_pos = 0; _x_pos_max = 9; _y_pos_max = 3; +_pos = 0; + // tooltip pop-up dimensions _tooltip_width = 120; _tooltip_height = 60; @@ -42,4 +47,23 @@ _tooltip_margin = 2180; // globals op_border = global.op_border op_space = global.op_space -op_margin = global.op_margin \ No newline at end of file +op_margin = global.op_margin + +global.inventory.add_item(global.weapons.bow); +global.inventory.add_item(global.weapons.greatsword); +global.inventory.add_item(global.weapons.dagger); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.spells.fireball); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.health_potion); +global.inventory.add_item(global.consumables.hot_tea); +global.inventory.add_item(global.prayer_books.book); +global.inventory.add_item(global.prayers.chill); \ No newline at end of file diff --git a/Turn-Based-RPG/objects/obj_inventory/Draw_64.gml b/Turn-Based-RPG/objects/obj_inventory/Draw_64.gml index a06f3d3..0933a4d 100644 --- a/Turn-Based-RPG/objects/obj_inventory/Draw_64.gml +++ b/Turn-Based-RPG/objects/obj_inventory/Draw_64.gml @@ -47,46 +47,47 @@ draw_sprite(spr_coin, 0, x + 15, y + 37); draw_text_transformed(x + 27, y + 34, "Gold: " + string(global.gold), 0.125, 0.125, 0); // draws tooltip description pop-up -if (global.inventory[# _x_pos, _y_pos] != noone) { - _show_tooltip = true; +if (_show_tooltip) { + var _equip = ""; + _item_name = global.inventory[# _x_pos, _y_pos]._name; + _item_desc = global.inventory[# _x_pos, _y_pos]._description; + if (_equippable) { + _equip = "Press 'E' to equip."; + } if (_show_tooltip) { if (_x_pos < 6 && _y_pos < 2) { - _item_name = global.inventory[# _x_pos, _y_pos]._name; - _item_desc = global.inventory[# _x_pos, _y_pos]._description; - var _equip = "Press 'E' to equip item."; - draw_sprite_stretched(spr_menu_background, 1, x + 33 + (_x_pos * 30), y + 75 + (_y_pos * 30), _tooltip_width, _tooltip_height); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 82 + (_y_pos * 30), _item_name, op_space, op_margin, .08, .08, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 82 + (_y_pos * 30) + 10, _item_desc, _tooltip_space, _tooltip_margin, .05, .05, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 82 + (_y_pos * 30) + 40, _equip, op_space, op_margin, .05, .05, 0, c_yellow, c_yellow, c_yellow, c_yellow, 1); } else if (_x_pos >= 6 && _y_pos < 2) { - _item_name = global.inventory[# _x_pos, _y_pos]._name; - _item_desc = global.inventory[# _x_pos, _y_pos]._description; - var _equip = "Press 'E' to equip item."; - draw_sprite_stretched(spr_menu_background, 1, x + 15 + (_x_pos * 30) - _tooltip_width, y + 75 + (_y_pos * 30), _tooltip_width, _tooltip_height); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 82 + (_y_pos * 30), _item_name, op_space, op_margin, .08, .08, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 82 + (_y_pos * 30) + 10, _item_desc, _tooltip_space, _tooltip_margin, .05, .05, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 82 + (_y_pos * 30) + 40, _equip, op_space, op_margin, .05, .05, 0, c_yellow, c_yellow, c_yellow, c_yellow, 1); } else if (_x_pos < 6 && _y_pos >= 2) { - _item_name = global.inventory[# _x_pos, _y_pos]._name; - _item_desc = global.inventory[# _x_pos, _y_pos]._description; - var _equip = "Press 'E' to equip item."; - draw_sprite_stretched(spr_menu_background, 1, x + 33 + (_x_pos * 30), y + 58 + (_y_pos * 30) - _tooltip_height, _tooltip_width, _tooltip_height); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 65 + (_y_pos * 30) - _tooltip_height, _item_name, op_space, op_margin, .08, .08, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 65 + (_y_pos * 30) - _tooltip_height + 10, _item_desc, _tooltip_space, _tooltip_margin, .05, .05, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 40 + (_x_pos * 30), y + 65 + (_y_pos * 30) - _tooltip_height + 40, _equip, op_space, op_margin, .05, .05, 0, c_yellow, c_yellow, c_yellow, c_yellow, 1); } else if (_x_pos >= 6 && _y_pos >= 2) { - _item_name = global.inventory[# _x_pos, _y_pos]._name; - _item_desc = global.inventory[# _x_pos, _y_pos]._description; - var _equip = "Press 'E' to equip item."; - draw_sprite_stretched(spr_menu_background, 1, x + 15 + (_x_pos * 30) - _tooltip_width, y + 58 + (_y_pos * 30) - _tooltip_height, _tooltip_width, _tooltip_height); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 65 + (_y_pos * 30) - _tooltip_height, _item_name, op_space, op_margin, .08, .08, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 65 + (_y_pos * 30) - _tooltip_height + 10, _item_desc, _tooltip_space, _tooltip_margin, .05, .05, 0, c_white, c_white, c_white, c_white, 1); draw_text_ext_transformed_color(x + 22 + (_x_pos * 30) - _tooltip_width, y + 65 + (_y_pos * 30) - _tooltip_height + 40, _equip, op_space, op_margin, .05, .05, 0, c_yellow, c_yellow, c_yellow, c_yellow, 1); } } + + if (_equipping) { + draw_sprite_stretched(spr_menu_background, 1, x + 120, y + 50, 80, 80); + for (_i = 0; _i < ds_list_size(global.party); _i++) { + if (_i = _pos) { + draw_set_color(c_yellow); + } else { + draw_set_color(c_white); + } + draw_text_ext_transformed(x + 127, y + 54 + (_i * 16), ds_list_find_value(global.party, _i)._name, 1000, 1000, .125, .125, 0); + } + } } \ No newline at end of file diff --git a/Turn-Based-RPG/objects/obj_inventory/Step_0.gml b/Turn-Based-RPG/objects/obj_inventory/Step_0.gml index 2334c15..651b04f 100644 --- a/Turn-Based-RPG/objects/obj_inventory/Step_0.gml +++ b/Turn-Based-RPG/objects/obj_inventory/Step_0.gml @@ -4,7 +4,7 @@ if (!_show_inventory) { _y_pos = 0; } else { self.visible = true; -}; +} // move through inventory var _up_key = keyboard_check_pressed(ord("W")); @@ -12,9 +12,10 @@ var _down_key = keyboard_check_pressed(ord("S")); var _left_key = keyboard_check_pressed(ord("A")); var _right_key = keyboard_check_pressed(ord("D")); var _accept_key = keyboard_check_pressed(ord("E")); +var _back_key = keyboard_check_pressed(vk_escape); // navigating through inventory -if (_show_inventory) { +if (_show_inventory && _show_tooltip == false) { _y_pos += _down_key - _up_key; _x_pos += _right_key - _left_key; if (_x_pos > _x_pos_max) { @@ -29,10 +30,68 @@ if (_show_inventory) { } } -if (_show_tooltip) { +if (_show_tooltip == false && _accept_key && _pressed == false) { + show_debug_message("Testing 1"); + _show_tooltip = true; + if (global.inventory[# _x_pos, _y_pos]._item_type == item_type.weapon || + global.inventory[# _x_pos, _y_pos]._item_type == item_type.magic_weapon || + global.inventory[# _x_pos, _y_pos]._item_type == item_type.prayer_book) { + _equippable = true; + } else { + _equippable = false; + } +} else if (_equippable && _accept_key && _equipping != true) { + show_debug_message("Testing 2"); + _equipping = true; +} else if (_equipping) { + _pos += _down_key - _up_key; + if (_pos >= ds_list_size(global.party)) { + _pos = 0; + } + if (_pos < 0) { + _pos = ds_list_size(global.party) - 1; + } + show_debug_message("Testing 3"); if (_accept_key) { - global.inventory.equip_item(_x_pos, _y_pos); + var _member = ds_list_find_value(global.party, _pos); + var _member_equipment = noone; + if (global.inventory[# _x_pos, _y_pos]._item_type == item_type.weapon) { + _member_equipment = _member._weapon; + if (_member_equipment == noone) { + _member._weapon = global.inventory[# _x_pos, _y_pos]; + } else if (_member_equipment != noone) { + _member._weapon = global.inventory[# _x_pos, _y_pos]; + global.inventory.remove_item(global.inventory[# _x_pos, _y_pos]); + global.inventory.add_item(_member_equipment); + } + } else if (global.inventory[# _x_pos, _y_pos]._item_type == item_type.magic_weapon) { + _member_equipment = _member._magic_weapon; + if (_member_equipment == noone) { + _member._magic_weapon = global.inventory[# _x_pos, _y_pos]; + } else if (_member_equipment != noone) { + _member._magic_weapon = global.inventory[# _x_pos, _y_pos]; + global.inventory.remove_item(global.inventory[# _x_pos, _y_pos]); + global.inventory.add_item(_member_equipment); + } + } else if (global.inventory[# _x_pos, _y_pos]._item_type == item_type.prayer_book) { + _member_equipment = _member._prayer_book; + if (_member_equipment == noone) { + _member._prayer_book = global.inventory[# _x_pos, _y_pos]; + } else if (_member_equipment != noone) { + _member._prayer_book = global.inventory[# _x_pos, _y_pos]; + global.inventory.remove_item(global.inventory[# _x_pos, _y_pos]); + global.inventory.add_item(_member_equipment); + } + } } } -// TO-DO: highlight current selected inventory item for equipping +if (_show_tooltip && _back_key) { + _show_tooltip = false; +} + +if (_equipping && _back_key) { + _equipping = false; +} + +_pressed = false; diff --git a/Turn-Based-RPG/objects/obj_pause_menu/Create_0.gml b/Turn-Based-RPG/objects/obj_pause_menu/Create_0.gml index ee496c2..722efad 100644 --- a/Turn-Based-RPG/objects/obj_pause_menu/Create_0.gml +++ b/Turn-Based-RPG/objects/obj_pause_menu/Create_0.gml @@ -5,7 +5,7 @@ draw_set_halign(fa_left); draw_set_valign(fa_top); _options = ["Pause","Inventory","Equip","Stats"]; // Standard inventory options -_pause_options = ["Save", "End game", "Party", "Access"]; // Save menu options +_pause_options = ["Save", "End game"]; // Save menu options _op_length = array_length(_options); // Length of inventory options _pause_length = array_length(_pause_options); // Length of pause menu options _pressed = false; // Switches to true when Pause menu is selected so keystroke doesn't carry over to save menu @@ -15,3 +15,4 @@ _show_pause = false; // Shows pause menu when set to true _inventory = noone; _equip = noone; _stats = noone; +_inventory_disable = false; diff --git a/Turn-Based-RPG/objects/obj_pause_menu/Step_0.gml b/Turn-Based-RPG/objects/obj_pause_menu/Step_0.gml index 652183e..e802f77 100644 --- a/Turn-Based-RPG/objects/obj_pause_menu/Step_0.gml +++ b/Turn-Based-RPG/objects/obj_pause_menu/Step_0.gml @@ -67,31 +67,32 @@ if (_show_pause) { case 1: game_end(); break; - - case 2: - show_debug_message([ds_list_find_value(global.party,2)]); - break; - - case 3: - room_goto(0); - break; } } } if (back_key && _menu_disable) { - _menu_disable = false; _show_pause = false; + //show_debug_message("Inventory 1:" + string(_inventory) +":"+ string(_inventory._show_tooltip)); if (_inventory != noone) { - instance_destroy(_inventory); + if (_inventory._show_tooltip == false) { + instance_destroy(_inventory); + _inventory = noone; + _menu_disable = false; + } } if (_equip != noone) { instance_destroy(_equip); + _equip = noone; + _menu_disable = false; } if (_stats != noone) { instance_destroy(_stats); + _stats = noone; + _menu_disable = false; } } else if (back_key) { + //show_debug_message("Inventory 3:" + string(_inventory)); obj_player._disabled = false; instance_destroy(self); -} \ No newline at end of file +} diff --git a/Turn-Based-RPG/objects/obj_player/Step_0.gml b/Turn-Based-RPG/objects/obj_player/Step_0.gml index b8a31e4..43a8b3c 100644 --- a/Turn-Based-RPG/objects/obj_player/Step_0.gml +++ b/Turn-Based-RPG/objects/obj_player/Step_0.gml @@ -146,7 +146,7 @@ if (_disabled == false) { } } - if (keyboard_check(ord("M"))) { + if (keyboard_check(ord("P"))) { CreatePauseMenu(self); } } diff --git a/Turn-Based-RPG/rooms/rm_world_map/rm_world_map.yy b/Turn-Based-RPG/rooms/rm_world_map/rm_world_map.yy index b431e2d..52bed62 100644 --- a/Turn-Based-RPG/rooms/rm_world_map/rm_world_map.yy +++ b/Turn-Based-RPG/rooms/rm_world_map/rm_world_map.yy @@ -12,17 +12,13 @@ {"name":"inst_706C6185","path":"rooms/rm_world_map/rm_world_map.yy",}, {"name":"inst_3E30F52A","path":"rooms/rm_world_map/rm_world_map.yy",}, {"name":"inst_39CE755D","path":"rooms/rm_world_map/rm_world_map.yy",}, - {"name":"inst_19404F7C","path":"rooms/rm_world_map/rm_world_map.yy",}, {"name":"inst_53CA7ACE","path":"rooms/rm_world_map/rm_world_map.yy",}, - {"name":"inst_7E4B06BB","path":"rooms/rm_world_map/rm_world_map.yy",}, ], "isDnd": false, "layers": [ {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Pointer","depth":0,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_3E30F52A","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_pointer","path":"objects/obj_pointer/obj_pointer.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":50.0,"y":162.0,}, - {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_19404F7C","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_stats_screen","path":"objects/obj_stats_screen/obj_stats_screen.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":0.0,"y":0.0,}, {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_53CA7ACE","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_equip_screen","path":"objects/obj_equip_screen/obj_equip_screen.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":352.0,"y":0.0,}, - {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_7E4B06BB","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_inventory","path":"objects/obj_inventory/obj_inventory.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":0.0,"y":0.0,}, ],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,}, {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Nodes","depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_42F8B788","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"obj_field_node","path":"objects/obj_field_node/obj_field_node.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":96.0,"y":64.0,}, diff --git a/Turn-Based-RPG/scripts/Battle/Battle.gml b/Turn-Based-RPG/scripts/Battle/Battle.gml index 000a3a8..2974f87 100644 --- a/Turn-Based-RPG/scripts/Battle/Battle.gml +++ b/Turn-Based-RPG/scripts/Battle/Battle.gml @@ -76,7 +76,7 @@ function resolve_state_transition(state, p_turn, e_turn, party_units, enemy_unit if(p_select == p_turn) { state = turn.gameover; show_debug_message("Enemy team is victorious. [BATTLE OVER]"); - game_end(); + room_goto(rm_end); break; } }