From 174bd2575ca46d4d62df3135a2e804ec85206662 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Sun, 14 Apr 2024 17:24:30 +0900 Subject: [PATCH] Work Some more work towards implementing battle. Added summoning mini-game for summoning. --- MainLogic.gd | 168 ++++++++++++++++++++++++++- audio/LD55_sfx_cancel.mp3 | Bin 0 -> 56050 bytes audio/LD55_sfx_cancel.mp3.import | 19 +++ audio/LD55_sfx_confirm.mp3 | Bin 0 -> 56050 bytes audio/LD55_sfx_confirm.mp3.import | 19 +++ audio/LD55_sfx_hammer_hit.mp3 | Bin 0 -> 56050 bytes audio/LD55_sfx_hammer_hit.mp3.import | 19 +++ audio/LD55_sfx_select.mp3 | Bin 0 -> 56050 bytes audio/LD55_sfx_select.mp3.import | 19 +++ audio/LD55_sfx_sword_hit.mp3 | Bin 0 -> 56050 bytes audio/LD55_sfx_sword_hit.mp3.import | 19 +++ gander_schwartz.gd | 11 ++ gimp/summon_arrow.png | Bin 0 -> 910 bytes gimp/summon_arrow.png.import | 34 ++++++ main_scene.tscn | 7 +- summoning.gd | 123 ++++++++++++++++++++ summoning.tscn | 54 +++++++++ 17 files changed, 484 insertions(+), 8 deletions(-) create mode 100644 audio/LD55_sfx_cancel.mp3 create mode 100644 audio/LD55_sfx_cancel.mp3.import create mode 100644 audio/LD55_sfx_confirm.mp3 create mode 100644 audio/LD55_sfx_confirm.mp3.import create mode 100644 audio/LD55_sfx_hammer_hit.mp3 create mode 100644 audio/LD55_sfx_hammer_hit.mp3.import create mode 100644 audio/LD55_sfx_select.mp3 create mode 100644 audio/LD55_sfx_select.mp3.import create mode 100644 audio/LD55_sfx_sword_hit.mp3 create mode 100644 audio/LD55_sfx_sword_hit.mp3.import create mode 100644 gimp/summon_arrow.png create mode 100644 gimp/summon_arrow.png.import create mode 100644 summoning.gd create mode 100644 summoning.tscn diff --git a/MainLogic.gd b/MainLogic.gd index bd6155c..d05ab49 100644 --- a/MainLogic.gd +++ b/MainLogic.gd @@ -9,6 +9,10 @@ extends Node2D @onready var earth_diamond = $EarthDiamond @onready var music_player = $MusicPlayer +@onready var sfx_player = $SFXPlayer +var sfx_select +var sfx_confirm +var sfx_cancel @onready var camera = $Camera2D @@ -56,8 +60,12 @@ enum StateT { Dungeon_Entrance_Battle, } -enum BattleMenu { +enum BattleState { MainMenu, + SummonMenu, + SummonSword, + SummonHammer, + EnemyAttack, } static var state_dict = {} @@ -93,6 +101,9 @@ func _ready(): viewport_size = get_viewport().size state_dict["battle_refresh_gui"] = true ) + sfx_select = load("res://audio/LD55_sfx_select.mp3") + sfx_confirm = load("res://audio/LD55_sfx_confirm.mp3") + sfx_cancel = load("res://audio/LD55_sfx_cancel.mp3") func update_text(text, next_state): if state_dict["timer"] > text_speed: @@ -216,10 +227,24 @@ func _process(delta): tween_scene.tween_callback(func(): gander.auto_control_action = "facing_left" state_dict["state"] = StateT.Dungeon_Entrance_Battle - state_dict["battle_state"] = BattleMenu.MainMenu + state_dict["battle_state"] = BattleState.MainMenu state_dict["battle_menu_setup"] = false state_dict["battle_refresh_gui"] = false state_dict["battle_item"] = null + var indicator_arrow = Sprite2D.new() + indicator_arrow.texture = load("res://gimp/arrow.png") + indicator_arrow.position.x = (indicator_arrow.get_rect().size.x - viewport_size.x) / 2.0 + indicator_arrow.position.y = (viewport_size.y - indicator_arrow.get_rect().size.y) / 2.0 + camera.add_child(indicator_arrow) + indicator_arrow.set_owner(camera) + tween_text = get_tree().create_tween() + tween_text.set_parallel() + tween_text.tween_property(indicator_arrow, "scale", Vector2(20.0, 20.0), 1.5) + tween_text.tween_property(indicator_arrow, "self_modulate", Color(1, 1, 1, 0), 1.5) + tween_text.set_parallel(false) + tween_text.tween_callback(func(): + camera.remove_child(indicator_arrow) + ) ) StateT.Dungeon_Entrance_Battle: camera_to_target(delta, level_cached_pos + Vector2(0.0, 500.0)) @@ -381,7 +406,7 @@ func camera_to_target(delta, vec2): func setup_battle_menu(): match state_dict["battle_state"]: - BattleMenu.MainMenu: + BattleState.MainMenu: if not state_dict["battle_menu_setup"] or state_dict["battle_refresh_gui"]: state_dict["battle_menu_setup"] = true state_dict["battle_refresh_gui"] = false @@ -392,6 +417,7 @@ func setup_battle_menu(): battle_arrow.texture = load("res://gimp/arrow.png") camera.add_child(battle_arrow, true) battle_arrow.set_owner(camera) + battle_arrow.self_modulate = Color(1, 1, 1, 1) var battle_menu_item_0 = camera.find_child("BattleMenuItem0") if battle_menu_item_0 == null: battle_menu_item_0 = Label.new() @@ -426,8 +452,76 @@ func setup_battle_menu(): battle_menu_item_1.position.y = battle_arrow.position.y + arrow_rect.size.y state_dict["battle_selection"] = 0 state_dict["battle_options"] = ["attack", "summon"] + BattleState.SummonMenu: + if not state_dict["battle_menu_setup"] or state_dict["battle_refresh_gui"]: + state_dict["battle_menu_setup"] = true + state_dict["battle_refresh_gui"] = false + var battle_arrow = camera.find_child("BattleArrow") + var battle_menu_item_0 = camera.find_child("BattleMenuItem0") + var battle_menu_item_1 = camera.find_child("BattleMenuItem1") + battle_arrow.self_modulate = Color(1, 1, 1, 1) + battle_menu_item_0.text = "Summon Sword" + battle_menu_item_1.text = "Summon Hammer" + var arrow_rect = battle_arrow.get_rect() + battle_arrow.position.x = (arrow_rect.size.x - viewport_size.x) / 2.0 + battle_arrow.position.y = (viewport_size.y - arrow_rect.size.y * 3.0) / 2.0 + battle_menu_item_0.position.x = arrow_rect.size.x - viewport_size.x / 2.0 + battle_menu_item_0.position.y = battle_arrow.position.y + battle_menu_item_1.position.x = arrow_rect.size.x - viewport_size.x / 2.0 + battle_menu_item_1.position.y = battle_arrow.position.y + arrow_rect.size.y + state_dict["battle_selection"] = 0 + state_dict["battle_options"] = ["summon_sword", "summon_hammer"] + BattleState.SummonSword: + var summon_node = find_child("SummonAttempt") + if summon_node.success_count >= summon_node.MAX_SUCCESS: + camera.remove_child(summon_node) + var summon_item = find_child("SummonItem") + if summon_item == null: + summon_item = Sprite2D.new() + summon_item.texture = load("res://gimp/sword.png") + summon_item.set_name(&"SummonItem") + gander.add_child(summon_item, true) + summon_item.set_owner(gander) + else: + summon_item.texture = load("res://gimp/sword.png") + gander.summon_item = summon_item + state_dict["battle_state"] = BattleState.EnemyAttack + elif summon_node.error_count >= summon_node.MAX_ERRORS: + tween_scene = get_tree().create_tween() + tween_scene.tween_method(func(c): for i in range(8): summon_node.summon_arrows_arr[i].self_modulate = c, Color(1.0, 0.0, 0.0), Color(1.0, 0.0, 0.0, 0.0), 1.0) + tween_scene.tween_callback(func(): camera.remove_child(summon_node)) + state_dict["battle_state"] = BattleState.EnemyAttack + BattleState.SummonHammer: + var summon_node = find_child("SummonAttempt") + if summon_node.success_count >= summon_node.MAX_SUCCESS: + camera.remove_child(summon_node) + var summon_item = find_child("SummonItem") + if summon_item == null: + summon_item = Sprite2D.new() + summon_item.texture = load("res://gimp/hammer.png") + summon_item.set_name(&"SummonItem") + gander.add_child(summon_item, true) + summon_item.set_owner(gander) + else: + summon_item.texture = load("res://gimp/hammer.png") + gander.summon_item = summon_item + state_dict["battle_state"] = BattleState.EnemyAttack + elif summon_node.error_count >= summon_node.MAX_ERRORS: + tween_scene = get_tree().create_tween() + tween_scene.tween_method(func(c): for i in range(8): summon_node.summon_arrows_arr[i].self_modulate = c, Color(1.0, 0.0, 0.0), Color(1.0, 0.0, 0.0, 0.0), 1.0) + tween_scene.tween_callback(func(): camera.remove_child(summon_node)) + state_dict["battle_state"] = BattleState.EnemyAttack + BattleState.EnemyAttack: + var battle_arrow = camera.find_child("BattleArrow") + var battle_menu_item_0 = camera.find_child("BattleMenuItem0") + var battle_menu_item_1 = camera.find_child("BattleMenuItem1") + battle_arrow.self_modulate = Color(1, 1, 1, 0) + battle_menu_item_0.text = "" + battle_menu_item_1.text = "" func handle_battle_input(event: InputEvent): + if state_dict["battle_state"] == BattleState.SummonSword or state_dict["battle_state"] == BattleState.SummonHammer: + return if event.is_pressed(): if event.is_action("Down"): state_dict["battle_selection"] += 1 @@ -439,9 +533,77 @@ func handle_battle_input(event: InputEvent): if state_dict["battle_selection"] < 0: state_dict["battle_selection"] = state_dict["battle_options"].size() - 1 battle_arrow_positioning() + elif event.is_action("Confirm"): + handle_battle_action(state_dict["battle_options"][state_dict["battle_selection"]]) + elif event.is_action("Cancel"): + handle_battle_action("cancel") + +func handle_battle_action(action): + match action: + "attack": + sfx_player.stream = sfx_confirm + sfx_player.play() + "summon": + state_dict["battle_state"] = BattleState.SummonMenu + state_dict["battle_menu_setup"] = false + sfx_player.stream = sfx_confirm + sfx_player.play() + "summon_sword": + #var summon_item = find_child("SummonItem") + #if summon_item == null: + #summon_item = Sprite2D.new() + #summon_item.texture = load("res://gimp/sword.png") + #summon_item.set_name(&"SummonItem") + #gander.add_child(summon_item, true) + #summon_item.set_owner(gander) + #else: + #summon_item.texture = load("res://gimp/sword.png") + #gander.summon_item = summon_item + #state_dict["battle_state"] = BattleState.EnemyAttack + #state_dict["battle_menu_setup"] = false + state_dict["battle_state"] = BattleState.SummonSword + state_dict["battle_menu_setup"] = false + var summon_scene = load("res://summoning.tscn") + var summon_node = summon_scene.instantiate() + summon_node.set_name(&"SummonAttempt") + camera.add_child(summon_node, true) + summon_node.set_owner(camera) + sfx_player.stream = sfx_confirm + sfx_player.play() + "summon_hammer": + #var summon_item = find_child("SummonItem") + #if summon_item == null: + #summon_item = Sprite2D.new() + #summon_item.texture = load("res://gimp/hammer.png") + #summon_item.set_name(&"SummonItem") + #gander.add_child(summon_item, true) + #summon_item.set_owner(gander) + #else: + #summon_item.texture = load("res://gimp/hammer.png") + #gander.summon_item = summon_item + #state_dict["battle_state"] = BattleState.EnemyAttack + #state_dict["battle_menu_setup"] = false + state_dict["battle_state"] = BattleState.SummonHammer + state_dict["battle_menu_setup"] = false + var summon_scene = load("res://summoning.tscn") + var summon_node = summon_scene.instantiate() + summon_node.set_name(&"SummonAttempt") + camera.add_child(summon_node, true) + summon_node.set_owner(camera) + sfx_player.stream = sfx_confirm + sfx_player.play() + "cancel": + state_dict["battle_state"] = BattleState.MainMenu + state_dict["battle_menu_setup"] = false + sfx_player.stream = sfx_cancel + sfx_player.play() + _: + pass func battle_arrow_positioning(): var battle_arrow: Sprite2D = camera.find_child("BattleArrow") if battle_arrow != null: var arrow_rect = battle_arrow.get_rect() battle_arrow.position.y = (viewport_size.y + arrow_rect.size.y) / 2.0 - (arrow_rect.size.y * (state_dict["battle_options"].size() - state_dict["battle_selection"])) + sfx_player.stream = sfx_select + sfx_player.play() diff --git a/audio/LD55_sfx_cancel.mp3 b/audio/LD55_sfx_cancel.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ee5ddbef565db9f774c6bd34661b70b88bf4baff GIT binary patch literal 56050 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 Q#~_5A08s#h5CcK{Zx^woUjP6A literal 0 HcmV?d00001 diff --git a/audio/LD55_sfx_confirm.mp3.import b/audio/LD55_sfx_confirm.mp3.import new file mode 100644 index 0000000..2dc4b51 --- /dev/null +++ b/audio/LD55_sfx_confirm.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://d0ekb3bk74p26" +path="res://.godot/imported/LD55_sfx_confirm.mp3-f5943f8e9f465983820ed67c99df309e.mp3str" + +[deps] + +source_file="res://audio/LD55_sfx_confirm.mp3" +dest_files=["res://.godot/imported/LD55_sfx_confirm.mp3-f5943f8e9f465983820ed67c99df309e.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/audio/LD55_sfx_hammer_hit.mp3 b/audio/LD55_sfx_hammer_hit.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d86a79f8f7c270625f17efdb3fd2be87f9fac7df GIT binary patch literal 56050 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
D-g2o0qBf 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 literal 0 HcmV?d00001 diff --git a/audio/LD55_sfx_select.mp3.import b/audio/LD55_sfx_select.mp3.import new file mode 100644 index 0000000..696d771 --- /dev/null +++ b/audio/LD55_sfx_select.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://d1q1gfvi1i8po" +path="res://.godot/imported/LD55_sfx_select.mp3-fd7a087b2218aec4761b872fc6130921.mp3str" + +[deps] + +source_file="res://audio/LD55_sfx_select.mp3" +dest_files=["res://.godot/imported/LD55_sfx_select.mp3-fd7a087b2218aec4761b872fc6130921.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/audio/LD55_sfx_sword_hit.mp3 b/audio/LD55_sfx_sword_hit.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d34925ba9bc6f06cc49e2fa9e1663792c1c57bc6 GIT binary patch literal 56050 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

RtqOr~}; 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 EFLQR9L;wH) literal 0 HcmV?d00001 diff --git a/audio/LD55_sfx_sword_hit.mp3.import b/audio/LD55_sfx_sword_hit.mp3.import new file mode 100644 index 0000000..21d4051 --- /dev/null +++ b/audio/LD55_sfx_sword_hit.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://c2tvj7l0latop" +path="res://.godot/imported/LD55_sfx_sword_hit.mp3-d10764d82f6cd1f6e91970f219d44ea5.mp3str" + +[deps] + +source_file="res://audio/LD55_sfx_sword_hit.mp3" +dest_files=["res://.godot/imported/LD55_sfx_sword_hit.mp3-d10764d82f6cd1f6e91970f219d44ea5.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/gander_schwartz.gd b/gander_schwartz.gd index 9e557fd..55a22c1 100644 --- a/gander_schwartz.gd +++ b/gander_schwartz.gd @@ -15,8 +15,19 @@ var last_collided_id = null @onready var animated = $AnimatedSprite2D +var summon_item = null +var summon_item_angle = 0.0 + const SPEED = 150.0 const ANIM_DEADZONE = 0.3 +const SUMMON_ITEM_DIST = 100.0 +const SUMMON_ITEM_Y_OFFSET = -30.0 + +func _process(delta): + summon_item_angle += delta + if summon_item != null: + summon_item.position.x = cos(summon_item_angle) * SUMMON_ITEM_DIST + summon_item.position.y = sin(summon_item_angle) * SUMMON_ITEM_DIST + SUMMON_ITEM_Y_OFFSET func _physics_process(delta): var vec2 = Vector2() diff --git a/gimp/summon_arrow.png b/gimp/summon_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..b13be2dd40634cebd595c4769c4fe897e2d64921 GIT binary patch literal 910 zcmV;919AL`P)EX>4Tx04R}tkv&MmKpe$i)0T=jaO0_aB&g9yvaGUg;H1<&zy4Klt6PRhXJ=C500}@WpXH#(>Z+(5ySo_p#$NPXPZjaHV(r)dn#8NqW7b zMUQ}iZQ$a%qbYm9K2Z-P^xs+Wq|iAGvacoXM8800006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=mZW2A`WKRpB?}J02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00Cx6L_t(|+U?vy62dSD1yGXlHogB*dY-y+=`fglN~}|-S<+#(!|(qD k`Ya(=R0^Dk75)#mzFKC6Buje-=>Px#07*qoM6N<$g7I{WhX4Qo literal 0 HcmV?d00001 diff --git a/gimp/summon_arrow.png.import b/gimp/summon_arrow.png.import new file mode 100644 index 0000000..922d7bb --- /dev/null +++ b/gimp/summon_arrow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvyxj067n812g" +path="res://.godot/imported/summon_arrow.png-8be3d4d199ac77e639f7001be6b20b00.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://gimp/summon_arrow.png" +dest_files=["res://.godot/imported/summon_arrow.png-8be3d4d199ac77e639f7001be6b20b00.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/main_scene.tscn b/main_scene.tscn index 5408bf4..a7f00f4 100644 --- a/main_scene.tscn +++ b/main_scene.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://ch52ervf073wd"] +[gd_scene load_steps=7 format=3 uid="uid://ch52ervf073wd"] [ext_resource type="Script" path="res://MainLogic.gd" id="1_43no1"] [ext_resource type="Texture2D" uid="uid://varqu7luxowf" path="res://gimp/earth_diamond.png" id="2_hlcsm"] @@ -6,7 +6,6 @@ [ext_resource type="Texture2D" uid="uid://djwgnisoid4co" path="res://gimp/water_diamond.png" id="4_u6w6s"] [ext_resource type="Texture2D" uid="uid://d2mxjcl50laoa" path="res://gimp/wind_diamond.png" id="5_3irym"] [ext_resource type="AudioStream" uid="uid://2epey2fmmtb2" path="res://audio/LD55_0.mp3" id="6_3kpot"] -[ext_resource type="Texture2D" uid="uid://bemf77dxebgw1" path="res://gimp/sword.png" id="7_v3xw4"] [node name="Node2D" type="Node2D"] script = ExtResource("1_43no1") @@ -46,6 +45,4 @@ texture = ExtResource("5_3irym") [node name="MusicPlayer" type="AudioStreamPlayer" parent="."] stream = ExtResource("6_3kpot") -[node name="Sword" type="Sprite2D" parent="."] -position = Vector2(-669, 382) -texture = ExtResource("7_v3xw4") +[node name="SFXPlayer" type="AudioStreamPlayer" parent="."] diff --git a/summoning.gd b/summoning.gd new file mode 100644 index 0000000..8f43e2b --- /dev/null +++ b/summoning.gd @@ -0,0 +1,123 @@ +extends Node2D + +enum Direction { + LEFT, + RIGHT, + UP, + DOWN, +} + +@onready var ar_one = $SummonArrow +@onready var ar_two = $SummonArrow2 +@onready var ar_three = $SummonArrow3 +@onready var ar_four = $SummonArrow4 +@onready var ar_five = $SummonArrow5 +@onready var ar_six = $SummonArrow6 +@onready var ar_seven = $SummonArrow7 +@onready var ar_eight = $SummonArrow8 + +@onready var timer_box = $TimerBox +const TIMER_BOX_WIDTH = 380.0 + +var summon_arrows_arr = [] + +var arrow_directions = [] + +const MAX_ERRORS = 3 +const MAX_SUCCESS = 8 +var error_count = 0 +var success_count = 0 + +const TIMER_AMOUNT = 5.0 +var timer = 0.0 + +func int_to_dir(i): + match i: + 0: + return Direction.LEFT + 1: + return Direction.RIGHT + 2: + return Direction.UP + 3: + return Direction.DOWN + _: + return Direction.DOWN + +func dir_to_angle(d: Direction): + match d: + Direction.LEFT: + return 0.0 + Direction.RIGHT: + return PI + Direction.UP: + return PI / 2.0 + Direction.DOWN: + return PI * 3.0 / 2.0 + +func _ready(): + summon_arrows_arr.append(ar_one) + summon_arrows_arr.append(ar_two) + summon_arrows_arr.append(ar_three) + summon_arrows_arr.append(ar_four) + summon_arrows_arr.append(ar_five) + summon_arrows_arr.append(ar_six) + summon_arrows_arr.append(ar_seven) + summon_arrows_arr.append(ar_eight) + var rng = RandomNumberGenerator.new() + for i in range(8): + arrow_directions.append(int_to_dir(rng.randi_range(0, 3))) + summon_arrows_arr[i].rotation = dir_to_angle(arrow_directions[i]) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + timer += delta + if timer >= TIMER_AMOUNT: + timer = 0.0 + if success_count < MAX_SUCCESS and error_count < MAX_ERRORS: + on_summon_error() + if success_count < MAX_SUCCESS and error_count < MAX_ERRORS: + var interp_amount = (TIMER_AMOUNT - timer) / TIMER_AMOUNT + timer_box.scale.x = interp_amount * TIMER_BOX_WIDTH + timer_box.self_modulate = Color((1.0 - interp_amount), interp_amount, 0.0) + +func _unhandled_input(event): + if error_count >= MAX_ERRORS or success_count >= MAX_SUCCESS: + return + if event.is_pressed(): + if event.is_action("Left"): + if arrow_directions[success_count] == Direction.LEFT: + on_summon_success(success_count) + else: + on_summon_error() + elif event.is_action("Right"): + if arrow_directions[success_count] == Direction.RIGHT: + on_summon_success(success_count) + else: + on_summon_error() + elif event.is_action("Up"): + if arrow_directions[success_count] == Direction.UP: + on_summon_success(success_count) + else: + on_summon_error() + elif event.is_action("Down"): + if arrow_directions[success_count] == Direction.DOWN: + on_summon_success(success_count) + else: + on_summon_error() + +func on_summon_success(idx): + summon_arrows_arr[idx].self_modulate = Color(0.0, 1.0, 0.0) + success_count += 1 + +func on_summon_error(): + timer = 0.0 + success_count = 0 + error_count += 1 + if error_count >= MAX_ERRORS: + for i in range(8): + summon_arrows_arr[i].self_modulate = Color(1.0, 0.0, 0.0) + else: + for i in range(8): + summon_arrows_arr[i].self_modulate = Color(1.0, 1.0, 1.0) diff --git a/summoning.tscn b/summoning.tscn new file mode 100644 index 0000000..b99bb48 --- /dev/null +++ b/summoning.tscn @@ -0,0 +1,54 @@ +[gd_scene load_steps=4 format=3 uid="uid://b7tummdg08cfc"] + +[ext_resource type="Script" path="res://summoning.gd" id="1_qh1sn"] +[ext_resource type="Texture2D" uid="uid://dvyxj067n812g" path="res://gimp/summon_arrow.png" id="2_io4qw"] + +[sub_resource type="CanvasTexture" id="CanvasTexture_oraey"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_qh1sn") + +[node name="SummonArrow" type="Sprite2D" parent="."] +position = Vector2(-136, -56) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow2" type="Sprite2D" parent="."] +position = Vector2(-46, -56) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow3" type="Sprite2D" parent="."] +position = Vector2(47, -55) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow4" type="Sprite2D" parent="."] +position = Vector2(143, -56) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow5" type="Sprite2D" parent="."] +position = Vector2(-144, 57) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow6" type="Sprite2D" parent="."] +position = Vector2(-49, 56) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow7" type="Sprite2D" parent="."] +position = Vector2(47, 57) +texture = ExtResource("2_io4qw") + +[node name="SummonArrow8" type="Sprite2D" parent="."] +position = Vector2(136, 58) +texture = ExtResource("2_io4qw") + +[node name="Label" type="Label" parent="."] +offset_left = -187.0 +offset_top = -140.0 +offset_right = 188.0 +offset_bottom = -100.0 +theme_override_font_sizes/font_size = 24 +text = "Press the directions to summon!" + +[node name="TimerBox" type="Sprite2D" parent="."] +position = Vector2(0, 135) +scale = Vector2(380, 50) +texture = SubResource("CanvasTexture_oraey") -- 2.49.0