From 2709ddeb28a46e978a4fb2edca84bb00b2129f3b Mon Sep 17 00:00:00 2001 From: Henrique Campos Date: Tue, 11 Sep 2018 21:59:22 -0300 Subject: [PATCH] Add JRPGish demo (#267) * Add JRPGish game * Fix typo and signals connection * Add missing last lines * Remove unused files --- 2d/role_playing_game/Game.tscn | 127 +++++++++ 2d/role_playing_game/default_env.tres | 101 ++++++++ .../dialog_player/DialogPlayer.tscn | 11 + .../dialog_player/dialog_player.gd | 38 +++ .../dialog_system/dialogs/npc_01.json | 5 + .../dialog_system/dialogs/object.json | 3 + .../dialog_system/dialogs/player_lose.json | 4 + .../dialog_system/dialogs/player_won.json | 4 + .../dialog_system/interface/DialogUI.tscn | 144 ++++++++++ .../grid_movement/grid/grid.gd | 36 +++ .../grid_movement/pawns/Actor.tscn | 111 ++++++++ .../grid_movement/pawns/actor.gd | 44 ++++ .../grid_movement/pawns/character.png | Bin 0 -> 1219 bytes .../grid_movement/pawns/character.png.import | 29 +++ .../grid_movement/pawns/idle_actor.gd | 7 + .../grid_movement/pawns/pawn.gd | 12 + .../grid_movement/pawns/random_actor.gd | 16 ++ .../tilesets/grid/GridTiles.tscn | 28 ++ .../grid_movement/tilesets/grid/actor.png | Bin 0 -> 1617 bytes .../tilesets/grid/actor.png.import | 29 +++ .../tilesets/grid/grid_tileset.tres | 38 +++ .../grid_movement/tilesets/grid/object.png | Bin 0 -> 1832 bytes .../tilesets/grid/object.png.import | 29 +++ .../grid_movement/tilesets/grid/obstacle.png | Bin 0 -> 595 bytes .../tilesets/grid/obstacle.png.import | 29 +++ .../tilesets/grid_lines/GridLinesTiles.tscn | 13 + .../tilesets/grid_lines/grid_lines.png | Bin 0 -> 656 bytes .../tilesets/grid_lines/grid_lines.png.import | 29 +++ .../grid_lines/grid_lines_tileset.tres | 17 ++ 2d/role_playing_game/icon.png | Bin 0 -> 3498 bytes 2d/role_playing_game/icon.png.import | 29 +++ 2d/role_playing_game/project.godot | 24 ++ .../screens/combat/Combat.tscn | 245 ++++++++++++++++++ .../screens/combat/actors/Actor.tscn | 20 ++ .../screens/combat/actors/Opponent.tscn | 49 ++++ .../screens/combat/actors/Player.tscn | 14 + .../screens/combat/actors/sprites/Sprite.tscn | 61 +++++ .../screens/combat/actors/sprites/blue.png | Bin 0 -> 1967 bytes .../combat/actors/sprites/blue.png.import | 29 +++ .../screens/combat/actors/sprites/green.png | Bin 0 -> 1990 bytes .../combat/actors/sprites/green.png.import | 29 +++ .../screens/combat/actors/sprites/shadow.png | Bin 0 -> 1147 bytes .../combat/actors/sprites/shadow.png.import | 29 +++ .../screens/combat/interface/ActorInfo.tscn | 72 +++++ .../screens/combat/interface/UI.gd | 34 +++ .../screens/exploration/Exploration.tscn | 111 ++++++++ 2d/role_playing_game/theme/Theme.tscn | 234 +++++++++++++++++ .../theme/button/button_rect.png | Bin 0 -> 3349 bytes .../theme/button/button_rect.png.import | 29 +++ .../theme/button/button_rect_pressed.png | Bin 0 -> 2947 bytes .../button/button_rect_pressed.png.import | 29 +++ .../theme/fonts/Montserrat-ExtraBold.otf | Bin 0 -> 71380 bytes .../theme/fonts/montserrat_extra_bold_16.tres | 13 + .../theme/fonts/montserrat_extra_bold_24.tres | 13 + .../theme/fonts/montserrat_extra_bold_32.tres | 13 + .../theme/fonts/montserrat_extra_bold_48.tres | 13 + .../theme/fonts/montserrat_extra_bold_62.tres | 13 + 2d/role_playing_game/theme/labels/Title.tscn | 32 +++ .../theme/panel/panel_rect.png | Bin 0 -> 3934 bytes .../theme/panel/panel_rect.png.import | 29 +++ .../theme/progressbar/background.png | Bin 0 -> 5204 bytes .../theme/progressbar/background.png.import | 29 +++ .../theme/progressbar/foreground_blue.png | Bin 0 -> 5751 bytes .../progressbar/foreground_blue.png.import | 29 +++ .../theme/progressbar/foreground_red.png | Bin 0 -> 5794 bytes .../progressbar/foreground_red.png.import | 29 +++ .../progressbar/foreground_stylebox_blue.tres | 25 ++ .../progressbar/foreground_stylebox_red.tres | 25 ++ 2d/role_playing_game/theme/theme.tres | 152 +++++++++++ .../turn_combat_system/actors/Actor.gd | 31 +++ .../turn_combat_system/actors/Actor.tscn | 14 + .../actors/health/Health.gd | 24 ++ .../actors/health/Health.tscn | 12 + .../turn_queue/TurnQueue.gd | 52 ++++ .../turn_queue/TurnQueue.tscn | 11 + 75 files changed, 2501 insertions(+) create mode 100644 2d/role_playing_game/Game.tscn create mode 100644 2d/role_playing_game/default_env.tres create mode 100755 2d/role_playing_game/dialog_system/dialog_player/DialogPlayer.tscn create mode 100644 2d/role_playing_game/dialog_system/dialog_player/dialog_player.gd create mode 100755 2d/role_playing_game/dialog_system/dialogs/npc_01.json create mode 100755 2d/role_playing_game/dialog_system/dialogs/object.json create mode 100755 2d/role_playing_game/dialog_system/dialogs/player_lose.json create mode 100755 2d/role_playing_game/dialog_system/dialogs/player_won.json create mode 100644 2d/role_playing_game/dialog_system/interface/DialogUI.tscn create mode 100755 2d/role_playing_game/grid_movement/grid/grid.gd create mode 100755 2d/role_playing_game/grid_movement/pawns/Actor.tscn create mode 100644 2d/role_playing_game/grid_movement/pawns/actor.gd create mode 100755 2d/role_playing_game/grid_movement/pawns/character.png create mode 100755 2d/role_playing_game/grid_movement/pawns/character.png.import create mode 100755 2d/role_playing_game/grid_movement/pawns/idle_actor.gd create mode 100644 2d/role_playing_game/grid_movement/pawns/pawn.gd create mode 100755 2d/role_playing_game/grid_movement/pawns/random_actor.gd create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/GridTiles.tscn create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/actor.png create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/actor.png.import create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/grid_tileset.tres create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/object.png create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/object.png.import create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/obstacle.png create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid/obstacle.png.import create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid_lines/GridLinesTiles.tscn create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines.png create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines.png.import create mode 100755 2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines_tileset.tres create mode 100755 2d/role_playing_game/icon.png create mode 100755 2d/role_playing_game/icon.png.import create mode 100755 2d/role_playing_game/project.godot create mode 100644 2d/role_playing_game/screens/combat/Combat.tscn create mode 100755 2d/role_playing_game/screens/combat/actors/Actor.tscn create mode 100755 2d/role_playing_game/screens/combat/actors/Opponent.tscn create mode 100755 2d/role_playing_game/screens/combat/actors/Player.tscn create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/Sprite.tscn create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/blue.png create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/blue.png.import create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/green.png create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/green.png.import create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/shadow.png create mode 100755 2d/role_playing_game/screens/combat/actors/sprites/shadow.png.import create mode 100755 2d/role_playing_game/screens/combat/interface/ActorInfo.tscn create mode 100644 2d/role_playing_game/screens/combat/interface/UI.gd create mode 100644 2d/role_playing_game/screens/exploration/Exploration.tscn create mode 100755 2d/role_playing_game/theme/Theme.tscn create mode 100755 2d/role_playing_game/theme/button/button_rect.png create mode 100755 2d/role_playing_game/theme/button/button_rect.png.import create mode 100755 2d/role_playing_game/theme/button/button_rect_pressed.png create mode 100755 2d/role_playing_game/theme/button/button_rect_pressed.png.import create mode 100755 2d/role_playing_game/theme/fonts/Montserrat-ExtraBold.otf create mode 100755 2d/role_playing_game/theme/fonts/montserrat_extra_bold_16.tres create mode 100755 2d/role_playing_game/theme/fonts/montserrat_extra_bold_24.tres create mode 100755 2d/role_playing_game/theme/fonts/montserrat_extra_bold_32.tres create mode 100755 2d/role_playing_game/theme/fonts/montserrat_extra_bold_48.tres create mode 100755 2d/role_playing_game/theme/fonts/montserrat_extra_bold_62.tres create mode 100755 2d/role_playing_game/theme/labels/Title.tscn create mode 100755 2d/role_playing_game/theme/panel/panel_rect.png create mode 100755 2d/role_playing_game/theme/panel/panel_rect.png.import create mode 100755 2d/role_playing_game/theme/progressbar/background.png create mode 100755 2d/role_playing_game/theme/progressbar/background.png.import create mode 100755 2d/role_playing_game/theme/progressbar/foreground_blue.png create mode 100755 2d/role_playing_game/theme/progressbar/foreground_blue.png.import create mode 100755 2d/role_playing_game/theme/progressbar/foreground_red.png create mode 100755 2d/role_playing_game/theme/progressbar/foreground_red.png.import create mode 100755 2d/role_playing_game/theme/progressbar/foreground_stylebox_blue.tres create mode 100755 2d/role_playing_game/theme/progressbar/foreground_stylebox_red.tres create mode 100644 2d/role_playing_game/theme/theme.tres create mode 100644 2d/role_playing_game/turn_combat_system/actors/Actor.gd create mode 100755 2d/role_playing_game/turn_combat_system/actors/Actor.tscn create mode 100755 2d/role_playing_game/turn_combat_system/actors/health/Health.gd create mode 100755 2d/role_playing_game/turn_combat_system/actors/health/Health.tscn create mode 100755 2d/role_playing_game/turn_combat_system/turn_queue/TurnQueue.gd create mode 100755 2d/role_playing_game/turn_combat_system/turn_queue/TurnQueue.tscn diff --git a/2d/role_playing_game/Game.tscn b/2d/role_playing_game/Game.tscn new file mode 100644 index 00000000..920acdf5 --- /dev/null +++ b/2d/role_playing_game/Game.tscn @@ -0,0 +1,127 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://screens/combat/Combat.tscn" type="PackedScene" id=1] +[ext_resource path="res://screens/exploration/Exploration.tscn" type="PackedScene" id=2] + +[sub_resource type="GDScript" id=1] + +script/source = "extends Node + +export (NodePath) var combat_screen +export (NodePath) var exploration_screen + +const PLAYER_WIN = \"res://dialog_system/dialogs/player_won.json\" +const PLAYER_LOSE = \"res://dialog_system/dialogs/player_lose.json\" + +func _ready(): + exploration_screen = get_node(exploration_screen) + combat_screen = get_node(combat_screen) + combat_screen.connect(\"combat_finished\", self, \"_on_combat_finished\") + for n in $Exploration/Grid.get_children(): + if not n.type == n.ACTOR: + continue + if not n.has_node(\"DialogPlayer\"): + continue + n.get_node(\"DialogPlayer\").connect(\"dialog_finished\", self, + \"_on_opponent_dialog_finished\", [n]) + remove_child(combat_screen) + +func _on_opponent_dialog_finished(opponent): + if opponent.lost: + return + var player = $Exploration/Grid/Player + var combatents = [player.combat_actor, opponent.combat_actor] + start_combat(combatents) + +func start_combat(combat_actors): + remove_child($Exploration) + $AnimationPlayer.play(\"fade\") + yield($AnimationPlayer, \"animation_finished\") + add_child(combat_screen) + combat_screen.show() + combat_screen.initialize(combat_actors) + $AnimationPlayer.play_backwards(\"fade\") + +func _on_combat_finished(winner, loser): + remove_child(combat_screen) + $AnimationPlayer.play_backwards(\"fade\") + add_child(exploration_screen) + var dialog = load(\"res://dialog_system/dialog_player/DialogPlayer.tscn\").instance() + if winner.name == \"Player\": + dialog.dialog_file = PLAYER_WIN + else: + dialog.dialog_file = PLAYER_LOSE + yield($AnimationPlayer, \"animation_finished\") + var player = $Exploration/Grid/Player + exploration_screen.get_node(\"DialogUI\").show_dialog(player, dialog) + combat_screen.clear_combat() + yield(dialog, \"dialog_finished\") + dialog.queue_free() +" + +[sub_resource type="Animation" id=2] + +length = 0.5 +loop = false +step = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Transition/ColorRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 0.0703125, 0.0703125, 0.0703125, 0 ), Color( 0.0703125, 0.0703125, 0.0703125, 1 ) ] +} + +[node name="Game" type="Node"] + +script = SubResource( 1 ) +combat_screen = NodePath("Combat") +exploration_screen = NodePath("Exploration") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="0"] + +root_node = NodePath("..") +autoplay = "" +playback_process_mode = 1 +playback_default_blend_time = 0.0 +playback_speed = 1.0 +anims/fade = SubResource( 2 ) +blend_times = [ ] + +[node name="Transition" type="CanvasLayer" parent="." index="1"] + +layer = 1 +offset = Vector2( 0, 0 ) +rotation = 0.0 +scale = Vector2( 1, 1 ) +transform = Transform2D( 1, 0, 0, 1, 0, 0 ) + +[node name="ColorRect" type="ColorRect" parent="Transition" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 1280.0 +margin_bottom = 720.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +color = Color( 0.0703125, 0.0703125, 0.0703125, 0 ) +_sections_unfolded = [ "Focus", "Mouse", "Visibility" ] + +[node name="Combat" parent="." index="2" instance=ExtResource( 1 )] + +visible = false + +[node name="Exploration" parent="." index="3" instance=ExtResource( 2 )] + + diff --git a/2d/role_playing_game/default_env.tres b/2d/role_playing_game/default_env.tres new file mode 100644 index 00000000..ad86b722 --- /dev/null +++ b/2d/role_playing_game/default_env.tres @@ -0,0 +1,101 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +radiance_size = 4 +sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) +sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) +sky_curve = 0.25 +sky_energy = 1.0 +ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) +ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) +ground_curve = 0.01 +ground_energy = 1.0 +sun_color = Color( 1, 1, 1, 1 ) +sun_latitude = 35.0 +sun_longitude = 0.0 +sun_angle_min = 1.0 +sun_angle_max = 100.0 +sun_curve = 0.05 +sun_energy = 16.0 +texture_size = 2 + +[resource] + +background_mode = 2 +background_sky = SubResource( 1 ) +background_sky_custom_fov = 0.0 +background_color = Color( 0, 0, 0, 1 ) +background_energy = 1.0 +background_canvas_max_layer = 0 +ambient_light_color = Color( 0, 0, 0, 1 ) +ambient_light_energy = 1.0 +ambient_light_sky_contribution = 1.0 +fog_enabled = false +fog_color = Color( 0.5, 0.6, 0.7, 1 ) +fog_sun_color = Color( 1, 0.9, 0.7, 1 ) +fog_sun_amount = 0.0 +fog_depth_enabled = true +fog_depth_begin = 10.0 +fog_depth_curve = 1.0 +fog_transmit_enabled = false +fog_transmit_curve = 1.0 +fog_height_enabled = false +fog_height_min = 0.0 +fog_height_max = 100.0 +fog_height_curve = 1.0 +tonemap_mode = 0 +tonemap_exposure = 1.0 +tonemap_white = 1.0 +auto_exposure_enabled = false +auto_exposure_scale = 0.4 +auto_exposure_min_luma = 0.05 +auto_exposure_max_luma = 8.0 +auto_exposure_speed = 0.5 +ss_reflections_enabled = false +ss_reflections_max_steps = 64 +ss_reflections_fade_in = 0.15 +ss_reflections_fade_out = 2.0 +ss_reflections_depth_tolerance = 0.2 +ss_reflections_roughness = true +ssao_enabled = false +ssao_radius = 1.0 +ssao_intensity = 1.0 +ssao_radius2 = 0.0 +ssao_intensity2 = 1.0 +ssao_bias = 0.01 +ssao_light_affect = 0.0 +ssao_color = Color( 0, 0, 0, 1 ) +ssao_quality = 0 +ssao_blur = 3 +ssao_edge_sharpness = 4.0 +dof_blur_far_enabled = false +dof_blur_far_distance = 10.0 +dof_blur_far_transition = 5.0 +dof_blur_far_amount = 0.1 +dof_blur_far_quality = 1 +dof_blur_near_enabled = false +dof_blur_near_distance = 2.0 +dof_blur_near_transition = 1.0 +dof_blur_near_amount = 0.1 +dof_blur_near_quality = 1 +glow_enabled = false +glow_levels/1 = false +glow_levels/2 = false +glow_levels/3 = true +glow_levels/4 = false +glow_levels/5 = true +glow_levels/6 = false +glow_levels/7 = false +glow_intensity = 0.8 +glow_strength = 1.0 +glow_bloom = 0.0 +glow_blend_mode = 2 +glow_hdr_threshold = 1.0 +glow_hdr_scale = 2.0 +glow_bicubic_upscale = false +adjustment_enabled = false +adjustment_brightness = 1.0 +adjustment_contrast = 1.0 +adjustment_saturation = 1.0 + diff --git a/2d/role_playing_game/dialog_system/dialog_player/DialogPlayer.tscn b/2d/role_playing_game/dialog_system/dialog_player/DialogPlayer.tscn new file mode 100755 index 00000000..40aadccb --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialog_player/DialogPlayer.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://dialog_system/dialog_player/dialog_player.gd" type="Script" id=1] + + +[node name="DialogPlayer" type="Node"] + +script = ExtResource( 1 ) +dialog_file = null + + diff --git a/2d/role_playing_game/dialog_system/dialog_player/dialog_player.gd b/2d/role_playing_game/dialog_system/dialog_player/dialog_player.gd new file mode 100644 index 00000000..51f18e53 --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialog_player/dialog_player.gd @@ -0,0 +1,38 @@ +extends Node + +export (String, FILE, "*.json") var dialog_file +var dialog_keys = [] +var dialog_name = "" +var current = 0 +var dialog_text = "" + +signal dialog_started +signal dialog_finished + +func start_dialog(): + emit_signal("dialog_started") + current = 0 + index_dialog() + dialog_text = dialog_keys[current].text + dialog_name = dialog_keys[current].name + +func next_dialog(): + current += 1 + if current == dialog_keys.size(): + emit_signal("dialog_finished") + return + dialog_text = dialog_keys[current].text + dialog_name = dialog_keys[current].name + +func index_dialog(): + var dialog = load_dialogue(dialog_file) + dialog_keys.clear() + for key in dialog: + dialog_keys.append(dialog[key]) + +func load_dialogue(file_path): + var file = File.new() + if file.file_exists(file_path): + file.open(file_path, file.READ) + var dialog = parse_json(file.get_as_text()) + return dialog diff --git a/2d/role_playing_game/dialog_system/dialogs/npc_01.json b/2d/role_playing_game/dialog_system/dialogs/npc_01.json new file mode 100755 index 00000000..f0f53daa --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialogs/npc_01.json @@ -0,0 +1,5 @@ +{ + "dialog_1" : {"name": "Unknown", "text": "Hey, it's a good time to have a JRPG fight, right?"}, + "dialog_2" : {"name": "Unknown", "text": "Let me present myself, I'm Opponent"}, + "dialog_3" : {"name": "Opponent", "text": "Enough talk, let's fight!"}, +} diff --git a/2d/role_playing_game/dialog_system/dialogs/object.json b/2d/role_playing_game/dialog_system/dialogs/object.json new file mode 100755 index 00000000..fc325888 --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialogs/object.json @@ -0,0 +1,3 @@ +{ + "dialog_1" : {"name":"Player", "text":"Just some object..." } +} diff --git a/2d/role_playing_game/dialog_system/dialogs/player_lose.json b/2d/role_playing_game/dialog_system/dialogs/player_lose.json new file mode 100755 index 00000000..08cb2827 --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialogs/player_lose.json @@ -0,0 +1,4 @@ +{ + "dialog_1" : {"name": "Opponent", "text": "Aha! I won, maybe you can try again next time"}, + "dialog_2" : {"name": "Opponent", "text": "Now let me wonder around again..."}, +} diff --git a/2d/role_playing_game/dialog_system/dialogs/player_won.json b/2d/role_playing_game/dialog_system/dialogs/player_won.json new file mode 100755 index 00000000..48b87896 --- /dev/null +++ b/2d/role_playing_game/dialog_system/dialogs/player_won.json @@ -0,0 +1,4 @@ +{ + "dialog_1" : {"name": "Opponent", "text": "Congratulations, you won!"}, + "dialog_2" : {"name": "Opponent", "text": "Now let me wonder around again..."}, +} diff --git a/2d/role_playing_game/dialog_system/interface/DialogUI.tscn b/2d/role_playing_game/dialog_system/interface/DialogUI.tscn new file mode 100644 index 00000000..c9141627 --- /dev/null +++ b/2d/role_playing_game/dialog_system/interface/DialogUI.tscn @@ -0,0 +1,144 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://theme/theme.tres" type="Theme" id=1] + +[sub_resource type="GDScript" id=1] + +script/source = "extends Control + +var dialog_node = null +func _ready(): + hide() + +func show_dialog(player, dialog): + show() + $Button.grab_focus() + dialog_node = dialog + for c in dialog.get_signal_connection_list(\"dialog_finished\"): + if self == c.target: + dialog_node.start_dialog() + break + return + dialog_node.connect(\"dialog_started\", player, \"set_active\", [false]) + dialog_node.connect(\"dialog_finished\", player, \"set_active\", [true]) + dialog_node.connect(\"dialog_finished\", self, \"hide\") + dialog_node.connect(\"dialog_finished\", self, \"_on_dialog_finished\", [player]) + dialog_node.start_dialog() + $Name.text = dialog_node.dialog_name + $Text.text = dialog_node.dialog_text + + +func _on_Button_button_up(): + dialog_node.next_dialog() + $Name.text = dialog_node.dialog_name + $Text.text = dialog_node.dialog_text + +func _on_dialog_finished(player): + dialog_node.disconnect(\"dialog_started\", player, \"set_active\") + dialog_node.disconnect(\"dialog_finished\", player, \"set_active\") + dialog_node.disconnect(\"dialog_finished\", self, \"hide\") + dialog_node.disconnect(\"dialog_finished\", self, \"_on_dialog_finished\") +" + +[node name="DialogUI" type="Panel" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 544.0 +margin_right = 1280.0 +margin_bottom = 720.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +theme = ExtResource( 1 ) +script = SubResource( 1 ) + +[node name="Name" type="RichTextLabel" parent="." index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 40.0 +margin_top = 16.0 +margin_right = 1072.0 +margin_bottom = 56.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = true +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +bbcode_enabled = false +bbcode_text = "" +visible_characters = -1 +percent_visible = 1.0 +meta_underlined = true +tab_size = 4 +text = "Name" +scroll_active = false +scroll_following = false +selection_enabled = false +override_selected_font_color = false + +[node name="Text" type="RichTextLabel" parent="." index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 40.0 +margin_top = 64.0 +margin_right = 1064.0 +margin_bottom = 152.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = true +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +bbcode_enabled = false +bbcode_text = "" +visible_characters = -1 +percent_visible = 1.0 +meta_underlined = true +tab_size = 4 +text = "Dialog Text" +scroll_active = true +scroll_following = false +selection_enabled = false +override_selected_font_color = false + +[node name="Button" type="Button" parent="." index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 1104.0 +margin_top = 32.0 +margin_right = 1264.0 +margin_bottom = 151.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Next" +flat = false +align = 1 + +[connection signal="button_up" from="Button" to="." method="_on_Button_button_up"] + + diff --git a/2d/role_playing_game/grid_movement/grid/grid.gd b/2d/role_playing_game/grid_movement/grid/grid.gd new file mode 100755 index 00000000..e1f8ad39 --- /dev/null +++ b/2d/role_playing_game/grid_movement/grid/grid.gd @@ -0,0 +1,36 @@ +extends TileMap + +enum CELL_TYPES { ACTOR, OBSTACLE, OBJECT } +export(NodePath) var dialog_ui + +func _ready(): + for child in get_children(): + set_cellv(world_to_map(child.position), child.type) + + +func get_cell_pawn(cell, type = ACTOR): + for node in get_children(): + if node.type != type: + continue + if world_to_map(node.position) == cell: + return(node) + + +func request_move(pawn, direction): + var cell_start = world_to_map(pawn.position) + var cell_target = cell_start + direction + + var cell_tile_id = get_cellv(cell_target) + match cell_tile_id: + -1: + set_cellv(cell_target, ACTOR) + set_cellv(cell_start, -1) + return map_to_world(cell_target) + cell_size / 2 + OBJECT, ACTOR: + var target_pawn = get_cell_pawn(cell_target, cell_tile_id) + print("Cell %s contains %s" % [cell_target, target_pawn.name]) + + if not target_pawn.has_node("DialogPlayer"): + return + get_node(dialog_ui).show_dialog(pawn, target_pawn.get_node("DialogPlayer")) + diff --git a/2d/role_playing_game/grid_movement/pawns/Actor.tscn b/2d/role_playing_game/grid_movement/pawns/Actor.tscn new file mode 100755 index 00000000..ae711ba2 --- /dev/null +++ b/2d/role_playing_game/grid_movement/pawns/Actor.tscn @@ -0,0 +1,111 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://grid_movement/pawns/actor.gd" type="Script" id=1] +[ext_resource path="res://grid_movement/pawns/character.png" type="Texture" id=2] + +[sub_resource type="Animation" id=1] + +resource_name = "bump" +length = 0.1 +loop = false +step = 0.01 +tracks/0/type = "value" +tracks/0/path = NodePath("Pivot/Sprite:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.02, 0.04, 0.06, 0.08, 0.1 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ), Vector2( -1.5, -9 ), Vector2( 6.5, 2.5 ), Vector2( -11.5, 8.5 ), Vector2( 4, -5 ), Vector2( 0, 0 ) ] +} + +[sub_resource type="Animation" id=2] + +resource_name = "walk" +length = 0.25 +loop = false +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("Pivot/Sprite:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = false +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.25 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 0.9375, 0, 1 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Pivot/Sprite:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.1, 0.15, 0.25 ), +"transitions": PoolRealArray( 1, 0.303143, 2.61003, 1 ), +"update": 0, +"values": [ Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 0, -20 ), Vector2( 1.43051e-06, -1.90735e-06 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Pivot/Sprite:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.05, 0.15, 0.25 ), +"transitions": PoolRealArray( 1, 0.354553, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1.20007, 0.917384 ), Vector2( 0.916712, 1.13495 ), Vector2( 1, 1 ) ] +} + +[node name="Actor" type="Node2D" index="0"] + +position = Vector2( 32, 32 ) +z_index = 1 +script = ExtResource( 1 ) +_sections_unfolded = [ "Offset", "Transform", "Z Index" ] +__meta__ = { +"_edit_group_": true +} +type = 0 +combat_actor = null + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="0"] + +root_node = NodePath("..") +autoplay = "" +playback_process_mode = 1 +playback_default_blend_time = 0.0 +playback_speed = 1.0 +anims/bump = SubResource( 1 ) +anims/walk = SubResource( 2 ) +blend_times = [ ] + +[node name="Tween" type="Tween" parent="." index="1"] + +repeat = false +playback_process_mode = 1 +playback_speed = 1.0 +playback/active = false +playback/repeat = false +playback/speed = 1.0 + +[node name="Pivot" type="Position2D" parent="." index="2"] + +_sections_unfolded = [ "Transform" ] + +[node name="Sprite" type="Sprite" parent="Pivot" index="0"] + +texture = ExtResource( 2 ) +centered = false +offset = Vector2( -32, -32 ) +_sections_unfolded = [ "Transform", "Visibility" ] + + diff --git a/2d/role_playing_game/grid_movement/pawns/actor.gd b/2d/role_playing_game/grid_movement/pawns/actor.gd new file mode 100644 index 00000000..1871700b --- /dev/null +++ b/2d/role_playing_game/grid_movement/pawns/actor.gd @@ -0,0 +1,44 @@ +extends 'pawn.gd' + +onready var Grid = get_parent() +var lost = false + +func _ready(): + update_look_direction(Vector2(1, 0)) + +func _process(delta): + var input_direction = get_input_direction() + if not input_direction: + return + update_look_direction(input_direction) + + var target_position = Grid.request_move(self, input_direction) + if target_position: + move_to(target_position) + $Tween.start() + else: + bump() + +func get_input_direction(): + return Vector2( + int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left")), + int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up")) + ) + +func update_look_direction(direction): + $Pivot/Sprite.rotation = direction.angle() + +func move_to(target_position): + set_process(false) + $AnimationPlayer.play("walk") + var move_direction = (position - target_position).normalized() + $Tween.interpolate_property($Pivot, "position", move_direction * 32, Vector2(), $AnimationPlayer.current_animation_length, Tween.TRANS_LINEAR, Tween.EASE_IN) + $Pivot/Sprite.position = position - target_position + position = target_position + + yield($AnimationPlayer, "animation_finished") + + set_process(true) + +func bump(): + $AnimationPlayer.play("bump") diff --git a/2d/role_playing_game/grid_movement/pawns/character.png b/2d/role_playing_game/grid_movement/pawns/character.png new file mode 100755 index 0000000000000000000000000000000000000000..7a24f309c47975fb744187f1cbd031282aa2baff GIT binary patch literal 1219 zcmV;!1U&nRP)%iH%7%>Gpjk(q3?ux-Lu(J(#^4CCt%Y98P` zQ_j!s!^oTH#j@732QBMxdQsLQ+ihn!U_+f6=r5!e-K94EO5RRQes176?e=ZCdtl2ko2p}vLA)WxjA`#*WAWRk^z5v1`5%LHi zjELwx{2IaT)0jM_UCM%1K}1v{G4TF4_`tbZai$4u>FX)vGar#idi17~PXM7Kg8lk_ z6zhK;>rErC0D?rEJloj!H$R{kF24YxXFvGyLFKhVHiC)wF|Dxn5dZ-D4k?<9SAojb z1+9?w67chzqRE*HaC@F=g|v@=%re;gE9JFNB#WuO6|FGcp9$g7+7|@FvwGq33eedQ z@x2EZ(6#%L-Zb(FFtigqGJ|0FjFFw7JOWI577$;6$xnmg3b3diAf5n=D?;K3u&E|! zzW|%7!uAOe)AaoM^oONfIYoCqS~q2~`2yXf7T$H(IlA(O2rXy?twor3!nc 0: + random_x = 0 + else: + random_y = 0 + return Vector2(random_x, random_y) diff --git a/2d/role_playing_game/grid_movement/tilesets/grid/GridTiles.tscn b/2d/role_playing_game/grid_movement/tilesets/grid/GridTiles.tscn new file mode 100755 index 00000000..0c3efa5b --- /dev/null +++ b/2d/role_playing_game/grid_movement/tilesets/grid/GridTiles.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://grid_movement/tilesets/grid/actor.png" type="Texture" id=1] +[ext_resource path="res://grid_movement/tilesets/grid/obstacle.png" type="Texture" id=2] +[ext_resource path="res://grid_movement/tilesets/grid/object.png" type="Texture" id=3] + + +[node name="Node2D" type="Node2D"] + +[node name="Actor" type="Sprite" parent="." index="0"] + +position = Vector2( 32, 32 ) +texture = ExtResource( 1 ) +_sections_unfolded = [ "Visibility" ] + +[node name="Obstacle" type="Sprite" parent="." index="1"] + +position = Vector2( 96, 32 ) +texture = ExtResource( 2 ) +_sections_unfolded = [ "Visibility" ] + +[node name="Object" type="Sprite" parent="." index="2"] + +position = Vector2( 160, 32 ) +texture = ExtResource( 3 ) +_sections_unfolded = [ "Visibility" ] + + diff --git a/2d/role_playing_game/grid_movement/tilesets/grid/actor.png b/2d/role_playing_game/grid_movement/tilesets/grid/actor.png new file mode 100755 index 0000000000000000000000000000000000000000..c3c0f4737586ed1e5c46a89e5d02de00978ec914 GIT binary patch literal 1617 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 literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines.png.import b/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines.png.import new file mode 100755 index 00000000..9b480a46 --- /dev/null +++ b/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines.png.import @@ -0,0 +1,29 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/grid_lines.png-151c8a0e38dd3f92e569d4b4f869a28e.stex" + +[deps] + +source_file="res://grid_movement/tilesets/grid_lines/grid_lines.png" +dest_files=[ "res://.import/grid_lines.png-151c8a0e38dd3f92e569d4b4f869a28e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines_tileset.tres b/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines_tileset.tres new file mode 100755 index 00000000..b795dada --- /dev/null +++ b/2d/role_playing_game/grid_movement/tilesets/grid_lines/grid_lines_tileset.tres @@ -0,0 +1,17 @@ +[gd_resource type="TileSet" load_steps=2 format=2] + +[ext_resource path="res://grid_movement/tilesets/grid_lines/grid_lines.png" type="Texture" id=1] + + +[resource] + +0/name = "Grass" +0/texture = ExtResource( 1 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 0, 0, 64, 64 ) +0/is_autotile = false +0/occluder_offset = Vector2( 32, 32 ) +0/navigation_offset = Vector2( 32, 32 ) +0/shapes = [ ] + diff --git a/2d/role_playing_game/icon.png b/2d/role_playing_game/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..a0b64eee944cb4cfb2aa8dc0d8d78faf6ca44dc1 GIT binary patch literal 3498 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 Y|LV|6es%hBO8@`>07*qoM6N<$f`}~Z-v9sr literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/icon.png.import b/2d/role_playing_game/icon.png.import new file mode 100755 index 00000000..0041ef86 --- /dev/null +++ b/2d/role_playing_game/icon.png.import @@ -0,0 +1,29 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" + +[deps] + +source_file="res://icon.png" +dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/2d/role_playing_game/project.godot b/2d/role_playing_game/project.godot new file mode 100755 index 00000000..c5a6f437 --- /dev/null +++ b/2d/role_playing_game/project.godot @@ -0,0 +1,24 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=3 + +[application] + +config/name="JRPG Demo" +run/main_scene="res://Game.tscn" +config/icon="res://icon.png" + +[display] + +window/size/width=1280 +window/size/height=720 + +[rendering] + +environment/default_environment="res://default_env.tres" diff --git a/2d/role_playing_game/screens/combat/Combat.tscn b/2d/role_playing_game/screens/combat/Combat.tscn new file mode 100644 index 00000000..4f6f67ad --- /dev/null +++ b/2d/role_playing_game/screens/combat/Combat.tscn @@ -0,0 +1,245 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://turn_combat_system/turn_queue/TurnQueue.tscn" type="PackedScene" id=1] +[ext_resource path="res://theme/theme.tres" type="Theme" id=2] +[ext_resource path="res://screens/combat/interface/UI.gd" type="Script" id=3] +[ext_resource path="res://screens/combat/interface/ActorInfo.tscn" type="PackedScene" id=4] + +[sub_resource type="GDScript" id=1] + +script/source = "extends Node + +signal combat_finished(winner, loser) + +func initialize(combat_actors): + for actor in combat_actors: + actor = actor.instance() + if actor is load(\"res://turn_combat_system/actors/Actor.gd\"): + $Actors.add_actor(actor) + actor.get_node(\"Health\").connect(\"dead\", self, \"_on_actor_death\", [actor]) + else: + actor.queue_free() + $UI.initialize() + $TurnQueue.initialize() + $TurnQueue.play_turn() + $UI/Buttons/GridContainer/Attack.grab_focus() + +func _on_actor_death(actor): + var winner + if not actor.name == \"Player\": + winner = $Actors/Player + else: + for n in $Actors.get_children(): + if not n.name == \"Player\": + winner = n + break + emit_signal(\"combat_finished\", winner, actor) + +func clear_combat(): + for n in $Actors.get_children(): + n.queue_free() + for n in $UI/Actors.get_children(): + n.queue_free() +" + +[sub_resource type="GDScript" id=2] + +script/source = "extends Node2D + +func add_actor(actor): + actor.position.x += 200 * get_child_count() + add_child(actor)" + +[node name="Combat" type="Node2D"] + +script = SubResource( 1 ) + +[node name="TurnQueue" parent="." index="0" instance=ExtResource( 1 )] + +actors_node = NodePath("../Actors") + +[node name="Actors" type="Node2D" parent="." index="1"] + +position = Vector2( 539, 275 ) +script = SubResource( 2 ) +_sections_unfolded = [ "Transform" ] + +[node name="UI" type="Control" parent="." index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 1280.0 +margin_bottom = 720.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +theme = ExtResource( 2 ) +script = ExtResource( 3 ) +_sections_unfolded = [ "Theme" ] +actors_node = NodePath("../Actors") +actor_info = ExtResource( 4 ) + +[node name="Actors" type="HBoxContainer" parent="UI" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 77.0 +margin_right = 1280.0 +margin_bottom = 328.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +custom_constants/separation = 360 +alignment = 0 +_sections_unfolded = [ "custom_constants" ] + +[node name="Buttons" type="PanelContainer" parent="UI" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 80.0 +margin_top = 376.0 +margin_right = 1200.0 +margin_bottom = 698.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +_sections_unfolded = [ "Theme" ] + +[node name="GridContainer" type="GridContainer" parent="UI/Buttons" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 90.0 +margin_top = 35.0 +margin_right = 1030.0 +margin_bottom = 277.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 2 +_sections_unfolded = [ "Size Flags" ] + +[node name="Attack" type="Button" parent="UI/Buttons/GridContainer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 468.0 +margin_bottom = 119.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Attack" +flat = false +align = 1 + +[node name="Defend" type="Button" parent="UI/Buttons/GridContainer" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 472.0 +margin_right = 940.0 +margin_bottom = 119.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Defend" +flat = false +align = 1 + +[node name="Inventory" type="Button" parent="UI/Buttons/GridContainer" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 123.0 +margin_right = 468.0 +margin_bottom = 242.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Inventory" +flat = false +align = 1 + +[node name="Flee" type="Button" parent="UI/Buttons/GridContainer" index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 472.0 +margin_top = 123.0 +margin_right = 940.0 +margin_bottom = 242.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Flee" +flat = false +align = 1 + +[connection signal="button_up" from="UI/Buttons/GridContainer/Attack" to="UI" method="_on_Attack_button_up"] + +[connection signal="button_up" from="UI/Buttons/GridContainer/Defend" to="UI" method="_on_Defend_button_up"] + +[connection signal="button_up" from="UI/Buttons/GridContainer/Flee" to="UI" method="_on_Flee_button_up"] + + diff --git a/2d/role_playing_game/screens/combat/actors/Actor.tscn b/2d/role_playing_game/screens/combat/actors/Actor.tscn new file mode 100755 index 00000000..ff62b537 --- /dev/null +++ b/2d/role_playing_game/screens/combat/actors/Actor.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://turn_combat_system/actors/Actor.gd" type="Script" id=1] +[ext_resource path="res://turn_combat_system/actors/health/Health.tscn" type="PackedScene" id=2] +[ext_resource path="res://screens/combat/actors/sprites/Sprite.tscn" type="PackedScene" id=3] + +[node name="Actor" type="Node2D" index="0"] + +script = ExtResource( 1 ) +damage = 2 +defense = 1 + +[node name="Health" parent="." index="0" instance=ExtResource( 2 )] + +life = 10 +armor = 2 + +[node name="Sprite" type="Node2D" parent="." index="1" instance=ExtResource( 3 )] + + diff --git a/2d/role_playing_game/screens/combat/actors/Opponent.tscn b/2d/role_playing_game/screens/combat/actors/Opponent.tscn new file mode 100755 index 00000000..2d9c7bbb --- /dev/null +++ b/2d/role_playing_game/screens/combat/actors/Opponent.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://screens/combat/actors/Actor.tscn" type="PackedScene" id=1] +[ext_resource path="res://screens/combat/actors/sprites/green.png" type="Texture" id=2] + +[sub_resource type="GDScript" id=1] + +script/source = "extends \"res://turn_combat_system/actors/Actor.gd\" + +func set_active(value): + .set_active(value) + if not active: + return + + $Timer.start() + yield($Timer, \"timeout\") + var target + for actor in get_parent().get_children(): + if not actor == self: + target = actor + break + attack(target)" + +[node name="Opponent" instance=ExtResource( 1 )] + +script = SubResource( 1 ) +_sections_unfolded = [ "Transform" ] +damage = 3 +defense = 0 + +[node name="Health" parent="." index="0"] + +life = 7 +max_life = 7 +armor = 1 + +[node name="Body" parent="Sprite/Pivot" index="1"] + +texture = ExtResource( 2 ) + +[node name="Timer" type="Timer" parent="." index="2"] + +process_mode = 1 +wait_time = 0.25 +one_shot = true +autostart = false + + +[editable path="Sprite"] diff --git a/2d/role_playing_game/screens/combat/actors/Player.tscn b/2d/role_playing_game/screens/combat/actors/Player.tscn new file mode 100755 index 00000000..c6c86310 --- /dev/null +++ b/2d/role_playing_game/screens/combat/actors/Player.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://screens/combat/actors/Actor.tscn" type="PackedScene" id=1] + +[node name="Player" instance=ExtResource( 1 )] + +_sections_unfolded = [ "Transform" ] +defense = 2 + +[node name="Health" parent="." index="0"] + +armor = 0 + + diff --git a/2d/role_playing_game/screens/combat/actors/sprites/Sprite.tscn b/2d/role_playing_game/screens/combat/actors/sprites/Sprite.tscn new file mode 100755 index 00000000..575b6aa4 --- /dev/null +++ b/2d/role_playing_game/screens/combat/actors/sprites/Sprite.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://screens/combat/actors/sprites/shadow.png" type="Texture" id=1] +[ext_resource path="res://screens/combat/actors/sprites/blue.png" type="Texture" id=2] + + +[sub_resource type="Animation" id=1] + +resource_name = "take_damage" +length = 0.2 +loop = false +step = 0.05 +tracks/0/type = "value" +tracks/0/path = NodePath("Pivot/Body:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.05, 0.1, 0.15, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 3, 0.253906, 0.253906, 1 ), Color( 1, 1, 1, 1 ), Color( 3, 0.253906, 0.253906, 1 ), Color( 1, 1, 1, 1 ) ] +} + +[node name="Sprite" type="Node2D"] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="0"] + +root_node = NodePath("..") +autoplay = "" +playback_process_mode = 1 +playback_default_blend_time = 0.0 +playback_speed = 1.0 +anims/take_damage = SubResource( 1 ) +blend_times = [ ] + +[node name="Tween" type="Tween" parent="." index="1"] + +repeat = false +playback_process_mode = 1 +playback_speed = 1.0 +playback/active = false +playback/repeat = false +playback/speed = 1.0 + +[node name="Pivot" type="Position2D" parent="." index="2"] + +[node name="Shadow" type="Sprite" parent="Pivot" index="0"] + +position = Vector2( 0, -15 ) +texture = ExtResource( 1 ) +_sections_unfolded = [ "Transform" ] + +[node name="Body" type="Sprite" parent="Pivot" index="1"] + +position = Vector2( 0, -76 ) +texture = ExtResource( 2 ) +_sections_unfolded = [ "Visibility" ] + + diff --git a/2d/role_playing_game/screens/combat/actors/sprites/blue.png b/2d/role_playing_game/screens/combat/actors/sprites/blue.png new file mode 100755 index 0000000000000000000000000000000000000000..b6627765b02ac464260ec625eafd4be083ed4645 GIT binary patch literal 1967 zcmd6o`8(8&8pglYCTohZhOG748bVoz#+oLHtTEn^U1QBMgBgUeoDs5SDcK5>osbY^ zd9%FC7)y*Lyi8-sK5?AC;G7@Nb6ub3zV7FGe!73T@s@BCZVnL+006knOkq}M3Oyqq z#D2EN(h5}1gf+;}%o=ny7?4}ynLqDuY99muyc7R{sq(Larn94Pu#sKx1C)DksB7S3 zAT%^o+3Sf<5YpBEu`(*qBmbw42mqW@G=mvfhrOf~%%a3>g%gT`-1U7m;YecsWXS8u zYA-QarxA0|SRb6t$tIK2oai7Em-gsLkY8CU33dv=DleI{f|L`ji>>HMV=dQAi>2Ox zGskO?@-?)ZCr{hI6LP~_@dcFKDSJ`03lUw|7Cubb+BtF8mC$~7xkoOnVLvujimGN9 z)`x%tCb)CB19wt=>Jly-0ppTz3>$U}_t-Qf(*kV~1G(c{u?q5r3d9)9r4IK&SzbnO zH>K-i&FOd4c07{~>A3l!3!{j6j;-DAVii9Q;`DWSgOcAF%o;qn1vvHwPn)`El?dhGUwtf#x8S0yA z01bSne$DCutF#JF$LQ~4&ss@rQ+5reH=Zh6Eaz}fFKvD`o9FLwQrswI^072?b3%FR z7BS!L@74usiqHpQ=jblsMYp$hfl6ooz#*Q1&019u_x(OxTf?)^=9@gntG^!97@c;A ze-`tBudmKvBe?`sn8);9fu$9*@P%Lf)DoSP;iCUAPRouQ21^m*{W(8?JptUIf`%0@-}9s>PL4BFsge!Z%IRlJ4Y&oVzoeFn7-5) zMv-qZj4b%}V>qxVEUrC^%f1>WNY23=aA2w0(Z9sKd<%iRhsM+5`iARx@ZQA|iB!lo zeRSe6ZmmSgpq^&h_)=~R(=KOxXXOg_m&>KgVL@H5rlH<$Glg}oSBH(|HJZdfMNFKM zRQi(bMR+ByR@ftp8ifiI!J>p4*49<&Z;~Q7jSAlzuO@=`OZRN7-=_2LyBGH)x$Z`~ za>;my9#8xv;mLi;!)~IAmTh%zy2PP-ptqNhKlj22T6f+o@2ZsT@fhjmbu_ol$tVMU zOny$l6!TOI(7@IZz~ss4xyU>M9_eE%Rw_>AggQb+1+h(7jiO_q2}4%nzmm;){x(Qv z23}sbmD1~ADx>%`d7q{!0M%Mlt4~{mYu%F*lx$nN4MR%iZcd&;U&bG?hNv$$+mMDV zlo1&3+}2)omz$FUiBLJww0?GrZ*CRD8xM9UkLnu-T_FW4 z8P9d@p7ZvMta#FcYOE5)N`QKh$%6FuZ|W#LBrw!ZFIeH=mp)YIP06XXV}Jd^ z--~|I9@UbmWCuPNPug^C5E`1Ttgx2d^2p}Ms)k5RU0LH~c|dnb(E_095Cw`fewI8TZ9b0_GNcK;HQ zman}lES!j#c^eL%1SSd&-?8--Z~2uw+{vs}x~iHyR-^xeFzE7_i;W z)PPkN-W82H%}(_fuE3M-N*OQsa}X<|R^poZqP=m9)f;ttuJ;GyT=z!~)lQwRRoyy9 z(buB8KGDsqCrNUNm$k5D%LF{?@cuLHn5D=ViY%j_tvk4Bi67=Hq(%On;90x0JS?qC zkLF#!bH>@Yxc6NJD-O9YTuu@ za10)4S89r|IKNF>kDUEo%1)kr8XM_xA`T*m-sH7jG{X^c^v(y$lYPWB!p^~N9rX-; zLB2Y~gXWkoPM5W)Eph!A#vOPh4C_YjMrCO3@|ms-(#y7^wuKG8A#UPFcs5K_GR5M< r5kgcXXj39BxGL}iHc3K*$_7a4m zt%^D&29r_LzC_iQAa=34?jLZ^xgYO)&hLHB^Pcz9^X2*7+0jN2A_)Ni0D`t~OP4b> zJtLq0+}R#@LWZ6RPo%l6EC1Qx`F+#Qyg)b{83_Og5B&#VC4<~_c9g(cA+UGD{IM|) zF@AuUm>7+q$03oA9)|mAgkb{mIYyEI0H1}erI{=4)hgLDRN7slD{=8}&cX0#)CwZV zM^8811?H%EQ2PfnHZ&}I2CpsZEOK?323jYHZDR(o=|-b;xA3D$ zu)4t}Dfrv9^Hbh2KtWTiP8ZT*fuLVuc606Fj@&VRcV{}l_yvLm{AQUXb)Z`k>G}BzlK!p^Xo57L>|_^BfFWV_bUO9F`< z_5s@@e2q6%JyiKxud(0LRZ_puyVy2#datrQ2lNMd`M|K^3Sra-hOX?RmKxi;JtGZA zug=zh9*K@s+d%JFK`%Y}T@-nq`6+yJAmckx0oau=8YNwofMnmu^3+=S5SBjNr0C{$ zV$)4q@P*1+j4a2V+Fc(U94akCROu%aEe_bX`w$7mChUV;DBI!n41ZKqq|y3@6!u-0 z`}R}>FNfJ2Qxyuc?UbVqCg z5r8+qAW0^zQ$2eKFI->;_uFx+(~bjhDOpB=4f`!`Z7D5sX}vK$L{|RZ{MP=Lk}8u774bf%+_c_E)r*e!VU4bP)!!3Mn~aQI z-&K`=Q*iAoUVC9{y{ITXOx84{H$YBSK~k$7(-<~12$;THJHx{D_7QolgpKvvZ^Qh1 zq@#}0ECmseVKA=@gYRSE$n*@Y56IX84-FZ|8I~(zYE-#V4#~`q`5qj}(@gpSiMI;o z@f7!9zHR%9r9ujs(w&qCW#6LYj?1Yvr6{45JSNORxl^_3D?;M=c>{ieZjMdjJ7v)! zGn`YjMHHG=UDRWXb}+^(PgD@|_9AyuT>?(@ouc$tzXyhEznmyKXML3`4Z^4Jn=sj{(gZAS;M;LesB zxT%s??_c4t=CY=#2zpefxuKVhp;y-)Le*2UY;0^dEI8!PE7TG|h?vE{T3)^wrAGX- z3xU(6SWYVep1n8GXmDLe^JE5Oee2FS<57E+2(HgvU0rb{dQ471YX)hRb6te2YCxH5 zArz9r=LamFP2dTx^~6N41b!3L!Tl@e>(Yh!KK|t!Z2wE`FVL4BH9{+$xx3e$6IG6{GzG6x&CaprGphs|~SXLX`ed=fq@?-TmwNS>dF7 zF1GgKf6eTF4)_23v7bkdT(^Hp#lE+xA|@~1k$R-cG83tyV_LcZ4U+H0s`vI`aUS+R z&Gd=w=$4wb%2k(WmC9LBC2nvSLV?NgdWbyR`JStlpGsWDlF%VTEs`M*&Wk^-l%_wX zJ^OqW&Jd-6s+($A__$Np=Q(^oS8#BUwSFSjx4nIVhN?R^`HuVGq=9ogNqBdpJ-aeL zXfr?X*58YQdgbQILjx0WJSZ?u=|HU_S%P-!0!dM~v(!7w52t@A;jnklnw)$(EkMJv z3oVAnuOw*=ung$*9I<$mH?g1U+Rv_aHsKscGj;eUA^B;B;7lH6B@tvw4HJTbi4oVN zYEY!7aDVgb!HD^tv1H23SNDSDlal^j_1A_7lC?I25v8pynyaU_flKM`MlNh71X`9- zW@nNMXl)F4h^#1XgM0Z4*Q6eO5od(ZqvzPo!^`S#l%`qgc!X7>q&H(N6tW*;wL2*| zB|HO+a7ML;*RRF2`*dskQ800+!)pS3D}G3%zOYeS_#Tw(0)K z{k)U4bvwR|Usx^gs5_Ee*tFzMTn%~RmSbDI^5+BAhok7qb}JKM{lxlH&Fr*ep3y?! zepE(t!kqe%tJMyzGcQ#v0TjOdA>M0Ti`n>G6GYX?cyByMVBVM~8#5!Ri66SFKH{8S zu|j*SzZH8_T8QrgWlV2lTrjU^y-i%#3*2@cP|G86h3tF}7VrdoSHZb@@q!KCS?2<5 MtsE_D%)OKT4V^fxn*aa+ literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/screens/combat/actors/sprites/green.png.import b/2d/role_playing_game/screens/combat/actors/sprites/green.png.import new file mode 100755 index 00000000..861461b1 --- /dev/null +++ b/2d/role_playing_game/screens/combat/actors/sprites/green.png.import @@ -0,0 +1,29 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/green.png-7937ec3931675b5dd0f218cbb8ae006a.stex" + +[deps] + +source_file="res://screens/combat/actors/sprites/green.png" +dest_files=[ "res://.import/green.png-7937ec3931675b5dd0f218cbb8ae006a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/2d/role_playing_game/screens/combat/actors/sprites/shadow.png b/2d/role_playing_game/screens/combat/actors/sprites/shadow.png new file mode 100755 index 0000000000000000000000000000000000000000..3112816c3706b948eba590709a5cc9f9b354cbf5 GIT binary patch literal 1147 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 gOLV)?-0091zE4zr8+ADoFvEdT%j literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/theme/button/button_rect.png.import b/2d/role_playing_game/theme/button/button_rect.png.import new file mode 100755 index 00000000..52cad3e2 --- /dev/null +++ b/2d/role_playing_game/theme/button/button_rect.png.import @@ -0,0 +1,29 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/button_rect.png-50631b7139a07837e9f4856772433e8e.stex" + +[deps] + +source_file="res://theme/button/button_rect.png" +dest_files=[ "res://.import/button_rect.png-50631b7139a07837e9f4856772433e8e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/2d/role_playing_game/theme/button/button_rect_pressed.png b/2d/role_playing_game/theme/button/button_rect_pressed.png new file mode 100755 index 0000000000000000000000000000000000000000..cd54f82587393516ea055ee65310501878c23157 GIT binary patch literal 2947 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
  • yTi=^jjJ)R*}h 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 YDpF@EQd=rgPbyMFDk#~jka_Zd0GK9$b^rhX literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/theme/fonts/montserrat_extra_bold_16.tres b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_16.tres new file mode 100755 index 00000000..02c991bc --- /dev/null +++ b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_16.tres @@ -0,0 +1,13 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/Montserrat-ExtraBold.otf" type="DynamicFontData" id=1] + + +[resource] + +size = 16 +use_mipmaps = true +use_filter = true +font_data = ExtResource( 1 ) +_sections_unfolded = [ "Settings" ] + diff --git a/2d/role_playing_game/theme/fonts/montserrat_extra_bold_24.tres b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_24.tres new file mode 100755 index 00000000..322e1e3a --- /dev/null +++ b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_24.tres @@ -0,0 +1,13 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/Montserrat-ExtraBold.otf" type="DynamicFontData" id=1] + + +[resource] + +size = 32 +use_mipmaps = true +use_filter = true +font_data = ExtResource( 1 ) +_sections_unfolded = [ "Settings" ] + diff --git a/2d/role_playing_game/theme/fonts/montserrat_extra_bold_32.tres b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_32.tres new file mode 100755 index 00000000..322e1e3a --- /dev/null +++ b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_32.tres @@ -0,0 +1,13 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/Montserrat-ExtraBold.otf" type="DynamicFontData" id=1] + + +[resource] + +size = 32 +use_mipmaps = true +use_filter = true +font_data = ExtResource( 1 ) +_sections_unfolded = [ "Settings" ] + diff --git a/2d/role_playing_game/theme/fonts/montserrat_extra_bold_48.tres b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_48.tres new file mode 100755 index 00000000..e4524286 --- /dev/null +++ b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_48.tres @@ -0,0 +1,13 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/Montserrat-ExtraBold.otf" type="DynamicFontData" id=1] + + +[resource] + +size = 48 +use_mipmaps = true +use_filter = true +font_data = ExtResource( 1 ) +_sections_unfolded = [ "Settings" ] + diff --git a/2d/role_playing_game/theme/fonts/montserrat_extra_bold_62.tres b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_62.tres new file mode 100755 index 00000000..6386cad4 --- /dev/null +++ b/2d/role_playing_game/theme/fonts/montserrat_extra_bold_62.tres @@ -0,0 +1,13 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/Montserrat-ExtraBold.otf" type="DynamicFontData" id=1] + + +[resource] + +size = 62 +use_mipmaps = true +use_filter = true +font_data = ExtResource( 1 ) +_sections_unfolded = [ "Settings" ] + diff --git a/2d/role_playing_game/theme/labels/Title.tscn b/2d/role_playing_game/theme/labels/Title.tscn new file mode 100755 index 00000000..1353c6f5 --- /dev/null +++ b/2d/role_playing_game/theme/labels/Title.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://theme/fonts/montserrat_extra_bold_48.tres" type="DynamicFont" id=1] + +[node name="Title" type="Label"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 113.0 +margin_bottom = 60.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +custom_fonts/font = ExtResource( 1 ) +custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_colors/font_color_shadow = Color( 1, 0.596078, 0, 1 ) +custom_constants/shadow_offset_y = 5 +text = "Title" +align = 1 +autowrap = true +clip_text = true +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Rect", "custom_colors", "custom_constants", "custom_fonts" ] + + diff --git a/2d/role_playing_game/theme/panel/panel_rect.png b/2d/role_playing_game/theme/panel/panel_rect.png new file mode 100755 index 0000000000000000000000000000000000000000..b0a363abd1e0b1019b79311d8117814c9f18c15f GIT binary patch literal 3934 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 Tr0rk+!T@b`J++ei)*=4~6#j5E literal 0 HcmV?d00001 diff --git a/2d/role_playing_game/theme/panel/panel_rect.png.import b/2d/role_playing_game/theme/panel/panel_rect.png.import new file mode 100755 index 00000000..6d80336a --- /dev/null +++ b/2d/role_playing_game/theme/panel/panel_rect.png.import @@ -0,0 +1,29 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/panel_rect.png-52b8de43da3f3ba3a0682eb789a33286.stex" + +[deps] + +source_file="res://theme/panel/panel_rect.png" +dest_files=[ "res://.import/panel_rect.png-52b8de43da3f3ba3a0682eb789a33286.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/2d/role_playing_game/theme/progressbar/background.png b/2d/role_playing_game/theme/progressbar/background.png new file mode 100755 index 0000000000000000000000000000000000000000..5bcdb72f416dde3df23fcb47e497fbb1703582b8 GIT binary patch literal 5204 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 O0000 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

    vn&vEuyugeLj4y3zV+#xh?>lo(0;% zTrIQV?ZZe{OdlfBbNL|ka7yt2QV*vf;qnn<+Ctk$NLOqlHa*;pdyp-X^P(xVRwAvP zE|ANBY>}K7ot-W~$YwDRx4&_J)&P+6f@re=A#)C~c@~+utN|eB1zC&~qBMxyObAle z0Fd)SX%HZI#iasJ0jK~}04e|#fC@kbpaM_96R1MC$!YWj+GiZ`#XSSOnSIK*B?`BOu` z3Nx&bUOFkrZ>(25fc(aK04n_ifDm8>>!UkY5ao1A372<}bhGuq9xzrrl>6>iJHUE? zcmNLOUEV>;>68!vfbb;Hh*JWgOQ2xw_YHuoCgn9aRukBp8iQAKp{ZsI ztZzT5h)h6M6RdAPDSud+;Uxa??E7io0=6&e9&z2SGja=?YPLXW_om#2PXR5qn3T!7c~XxBQqWM_48$hiJYqP zwM#zr>5-XnKS*p0q{K@anJKe_vC0AFea|^EGwhu)-hEg~ef3`QnHMu>uhQ{h?{u~d zO(k63Y3A%zdRe4#bGL!(b$b*)HrMBNjc!s=RlB zAFn&OUbkCH@tHq5o8mFo=NV-$^{xKrEc?^-ozWiG9X`Nj+z>GzV1>D!;oD66U(5Q8 zUD3EZ?"@%&Ga&GMnHn0`ZBoSTnmi$O!1U&{Er$i}e5a!Fw(5*7lHF@AQgBhM86 gnL2n-T<%)`1IC*oSJEycqW}N^07*qoM6N<$f 0: + self.active_actor = queue[0] + +func _set_active_actor(new_actor): + active_actor = new_actor + active_actor.active = true + emit_signal("active_actor_changed", active_actor) \ No newline at end of file diff --git a/2d/role_playing_game/turn_combat_system/turn_queue/TurnQueue.tscn b/2d/role_playing_game/turn_combat_system/turn_queue/TurnQueue.tscn new file mode 100755 index 00000000..345499ee --- /dev/null +++ b/2d/role_playing_game/turn_combat_system/turn_queue/TurnQueue.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://turn_combat_system/turn_queue/TurnQueue.gd" type="Script" id=1] + + +[node name="TurnQueue" type="Node"] + +script = ExtResource( 1 ) +actors_node = null + +