M README.md => README.md +8 -0
@@ 2,3 2,11 @@
a short dungeon adventure game that uses only the nyx8 palette.
+[get the game](https://stormkmd.itch.io/dungeonyx)
+
+credits:
+
+this game was made using the Godot game engine, licensed as MIT.
+
+some of the sound effects used were done by [artisticdude on OGA](https://opengameart.org/content/inventory-sound-effects).
+
M src/Game.tscn => src/Game.tscn +6 -0
@@ 31,6 31,7 @@ pause_mode = 2
layer = 2
[node name="MainMenuContainer" type="MarginContainer" parent="MainScreen"]
+visible = false
anchor_right = 1.0
anchor_bottom = 1.0
__meta__ = {
@@ 118,6 119,7 @@ size_flags_vertical = 3
[node name="GUI" type="CanvasLayer" parent="."]
[node name="TextContainerBackground" type="TextureRect" parent="GUI"]
+visible = false
show_behind_parent = true
anchor_top = 0.75
anchor_right = 1.0
@@ 130,6 132,7 @@ __meta__ = {
[node name="TextContainer" type="MarginContainer" parent="GUI"]
pause_mode = 2
+visible = false
anchor_left = 0.016
anchor_top = 0.766
anchor_right = 0.984
@@ 189,6 192,7 @@ margin_bottom = 4.0
text = "test2"
[node name="ItemsContainer" type="MarginContainer" parent="GUI"]
+visible = false
anchor_left = 0.75
anchor_right = 1.0
anchor_bottom = 0.75
@@ 233,6 237,7 @@ margin_bottom = 48.0
texture = ExtResource( 12 )
[node name="GameContainer" type="CenterContainer" parent="GUI"]
+visible = false
anchor_right = 0.75
anchor_bottom = 0.75
margin_right = -3.8147e-06
@@ 247,6 252,7 @@ margin_bottom = 48.0
texture = ExtResource( 10 )
[node name="CompassContainer" type="CenterContainer" parent="GUI"]
+visible = false
anchor_top = 0.125
anchor_right = 0.125
anchor_bottom = 0.25
M src/Player/Player.gd => src/Player/Player.gd +3 -0
@@ 4,6 4,7 @@ onready var game: Game = get_tree().root.get_node("Game")
onready var text_container: TextContainer = get_tree().root.get_node("Game/GUI/TextContainer")
onready var items_container: ItemsContainer = get_tree().root.get_node("Game/GUI/ItemsContainer")
onready var compass_texture: TextureRect = get_tree().root.get_node("Game/GUI/CompassContainer/Compass")
+onready var sfx_player: AudioStreamPlayer = get_tree().root.get_node("Game/SFXPlayer")
var compass = [
"north",
@@ 47,6 48,7 @@ func take(item: String):
Map.replace_space("4", "W")
"game":
Map.replace_space("5", "T")
+ sfx_player.get_item(item)
func kill():
yield(get_tree().create_timer(2), "timeout")
@@ 55,6 57,7 @@ func kill():
text_container.display_text("You don't have anything to kill him with.")
get_tree().paused = false
return
+ sfx_player.kill()
text_container.display_text("You kill the guard. His blood is all over you.")
yield(get_tree().create_timer(3), "timeout")
game.end("kill")
M src/ThreeInARow.gd => src/ThreeInARow.gd +16 -12
@@ 19,6 19,9 @@ var winnable_conditions = [
]
var current_turn = "player"
+func _ready():
+ start()
+
func start():
show()
@@ 34,34 37,35 @@ func end(player: String):
game.end("lost")
func next_turn():
- check_won()
+ if check_won():
+ return
match current_turn:
"player":
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
current_turn = "guard"
+ yield(get_tree().create_timer(2), "timeout")
play_guard_turn()
"guard":
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
current_turn = "player"
func play_guard_turn():
- yield(get_tree().create_timer(2), "timeout")
var random_number = randi() % 8
- print(random_number)
- # Select a random position that is not already taken by the player.
- for position in piece_positions.get_children():
- if random_number >= 0:
- random_number -= 1
- continue
- if position.played():
- continue
- position.play_piece()
+
+ var position = piece_positions.get_child(random_number)
+ if position.played():
+ play_guard_turn()
return
+ position.play_piece()
-func check_won():
+func check_won() -> bool:
for condition in winnable_conditions:
if ArrayHelper.array_has_subarray(condition, player_pieces):
end("player")
+ return true
if ArrayHelper.array_has_subarray(condition, guard_pieces):
end("guard")
+ return true
+
+ return false
M src/UI/ThreeInARowArea.gd => src/UI/ThreeInARowArea.gd +4 -1
@@ 3,6 3,7 @@ extends Area2D
onready var three_in_a_row: ThreeInARow = get_parent().get_parent()
onready var player_piece = ResourceLoader.load("res://assets/art/three-in-a-row/player-circle.png")
onready var guard_piece = ResourceLoader.load("res://assets/art/three-in-a-row/guard-circle.png")
+onready var sfx_player: AudioStreamPlayer = get_tree().root.get_node("Game/SFXPlayer")
onready var sprite: Sprite = $Sprite
func _ready():
@@ 16,8 17,9 @@ func play_piece():
sprite.show()
three_in_a_row.guard_pieces.append(get_index())
three_in_a_row.next_turn()
+ sfx_player.place_piece("guard")
-func _on_ThreeInARowArea_input_event(viewport, event, shape_idx):
+func _on_ThreeInARowArea_input_event(_viewport, event, _shape_idx):
if three_in_a_row.current_turn != "player":
return
@@ 26,3 28,4 @@ func _on_ThreeInARowArea_input_event(viewport, event, shape_idx):
sprite.show()
three_in_a_row.player_pieces.append(get_index())
three_in_a_row.next_turn()
+ sfx_player.place_piece("player")
M src/Utilities/Map.gd => src/Utilities/Map.gd +3 -0
@@ 46,6 46,9 @@ func init_player_position():
return
func replace_space(space_to_replace: String, replacer: String):
+ if space_to_replace == "C":
+ sfx_player.open_chest()
+
for line in map:
var space_index = line.find(space_to_replace)
if space_index == -1:
M src/Utilities/SFXPlayer.gd => src/Utilities/SFXPlayer.gd +25 -0
@@ 2,6 2,10 @@ extends AudioStreamPlayer
onready var door_open = ResourceLoader.load("res://assets/sfx/door-open.wav")
onready var door_close = ResourceLoader.load("res://assets/sfx/door-close.wav")
+onready var chest_open = ResourceLoader.load("res://assets/sfx/chest.wav")
+onready var kill_sound = ResourceLoader.load("res://assets/sfx/kill.wav")
+onready var player_piece = ResourceLoader.load("res://assets/sfx/three-in-a-row/player-piece.wav")
+onready var guard_piece = ResourceLoader.load("res://assets/sfx/three-in-a-row/guard-piece.wav")
func open_door():
stream = door_open
@@ 10,3 14,24 @@ func open_door():
func close_door():
stream = door_close
play()
+
+func open_chest():
+ stream = chest_open
+ play()
+
+func kill():
+ stream = kill_sound
+ play()
+
+func place_piece(player: String):
+ match player:
+ "player":
+ stream = player_piece
+ play()
+ "guard":
+ stream = guard_piece
+ play()
+
+func get_item(item: String):
+ stream = ResourceLoader.load("res://assets/sfx/items/" + item + ".wav")
+ play()