Compare commits

...
41 Commits
Author SHA1 Message Date
godzilla5hrimp 3a7f3c7ec3 fix: player attack logic; add sfx to the player attack; 2026-09-24 23:20:06 +02:00
godzilla5hrimp 9c294d1394 feat: add flashing on hit both on player and on the slime; 2026-09-24 22:44:00 +02:00
godzilla5hrimp aff5df529e fix: combat animation fix; add the death animation + delay; 2026-09-24 22:33:48 +02:00
godzilla5hrimp 20c127e11d feat: add knockback functionality; add the hp to the slime; 2026-09-24 22:22:42 +02:00
godzilla5hrimp 2aad0915e3 feat: add follow logic to the slime; 2026-09-24 21:52:56 +02:00
godzilla5hrimp 7b30283765 feat: add animation player node; add animation for the animation player node with the sword; 2026-09-24 21:18:24 +02:00
godzilla5hrimp 5120f11bfa feat: add user's attack animation to the player's node; 2026-09-20 20:53:46 +02:00
godzilla5hrimp 1655a9f8cc feat: add the ui display for the user hp; connect it to the scene manager; 2026-09-20 20:16:54 +02:00
godzilla5hrimp a252f9419e feat: add enemy node; add player/enemy collision; add player hp to the scene manager; add hit by enemy logic; 2026-09-20 20:05:22 +02:00
godzilla5hrimp a528943b91 feat: add music to the main scene and sfx for the npcs; 2026-09-20 17:04:57 +02:00
godzilla5hrimp 77214d4723 fix: remove the whitespaces and clean up; 2026-09-20 16:51:17 +02:00
godzilla5hrimp 5d484134e7 feat: add counter of the scrolls to the player node; 2026-09-20 16:45:59 +02:00
godzilla5hrimp 31c34978f2 fix: fixed the sceneEntrance to the dungeoun and back; fixed the opened chest state after switching scenes; 2026-09-20 16:38:08 +02:00
godzilla5hrimp e789ea0717 feat: add persistence to the opened chest via SceneManager opened_chests array; 2026-09-20 16:29:17 +02:00
godzilla5hrimp 8a4a440ad9 fix: fix the issue with overriding the timer signal function; 2026-09-20 16:16:13 +02:00
godzilla5hrimp fc007ca71a feat: add a chest node; add logic for random scroll in the chest; add a timer t hide the scroll after; 2026-09-20 16:06:58 +02:00
godzilla5hrimp d8d342ab56 feat: add a switch for the hidden door; connect it and toggle via signals; 2026-09-20 15:31:24 +02:00
godzilla5hrimp c429e2c461 feat: add a secret wall on a separate layer with toggleable visibility and collision; 2026-09-20 15:28:39 +02:00
godzilla5hrimp 15bac3c653 feat: add switch node; add user interaction logic with signals to the switch node; 2026-09-20 15:18:29 +02:00
godzilla5hrimp 525f6c04db feat: add limit to the camera2d on the main scene based on the node's size; 2026-09-19 17:38:55 +02:00
godzilla5hrimp 23aa21b7b7 feat: add new dialogue boxes; add another green ninja npc; add an array of dialogues variations; 2026-09-19 17:26:04 +02:00
godzilla5hrimp 5c3a533559 feat: add new npc node; add interactable group to the project; add intreactable area to the player; 2026-09-19 16:46:29 +02:00
godzilla5hrimp 5b7c474f32 feat: add ice block variant; add button variant; 2026-09-19 14:06:51 +02:00
godzilla5hrimp 4234167cc1 feat: add closed door node; add 2 new signals to puzzleButton node; connected signals to lockedDoor node; 2026-09-18 20:52:17 +02:00
godzilla5hrimp 0d6bfd6e90 feat: add puzzleButton node; add logic and collisions to it; 2026-09-18 20:33:00 +02:00
godzilla5hrimp 2b4b54612f feat: fix the block pushing; add new groups for walls and pushable objects; 2026-09-18 10:39:03 +02:00
godzilla5hrimp 8ba607d1b0 feat: simple git test; 2026-08-31 11:15:12 +02:00
godzilla5hrimp b2a7fa65ad feat: add a unmovable block as a scene; add it to gameScene; 2026-08-24 08:20:45 +02:00
godzilla5hrimp e87ebd3827 fix: change window scaling to mode; 2026-08-18 16:10:15 +02:00
godzilla5hrimp 6fb32a6cd1 feat: add dungeon floor tiles; 2026-08-18 16:02:45 +02:00
godzilla5hrimp c42e2777ec fix: redraw the connection for the walls corners connections; 2026-08-18 15:44:07 +02:00
godzilla5hrimp 1d15df6085 feat: add new wall terrain for the dungeonScene; change physics in the terrain for the sprites; 2026-08-18 15:36:35 +02:00
godzilla5hrimp a97800846f feat: add sceneManager; add playerSpawnPos to sceneEntrance and sceneManager; update player node to use value from sceneManager; make sceneManager autoloaded; 2026-08-18 15:22:00 +02:00
godzilla5hrimp ac86097b07 feat: move sceneEntrance to a separate node/scene; add new dungeonScene with moving back to the previous scene; add class_name to Player; 2026-08-18 14:27:09 +02:00
godzilla5hrimp 4638954cdc feat: add area2d; connect a bodyEntered and bodyLeft signals to that area2d; 2026-08-18 14:02:19 +02:00
godzilla5hrimp ee8c8837d3 feat: add a bunch of trees as a single tile; change it's collision form; 2026-08-18 13:47:29 +02:00
godzilla5hrimp ca88303f49 feat: added obstacleLayer; added new Tileset for obstacleLayer; added physics layers for tilesetNature; adjusted player's collision shape; 2026-08-18 12:11:11 +02:00
godzilla5hrimp 6bfaa82f34 feat: extend forest terrain with edge cases; 2026-08-18 11:53:02 +02:00
godzilla5hrimp 7ae9c47246 feat: add first terrain; play around with the map with terrain; 2026-08-18 11:44:48 +02:00
godzilla5hrimp cc7d64d0da fix: untrack all of the .DS_Store files 2026-08-18 11:28:27 +02:00
godzilla5hrimp b3873ffd91 feat: add curesd .DS_Store to .gitignore 2026-08-18 11:25:09 +02:00
41 changed files with 2543 additions and 149 deletions
Vendored
BIN
View File
Binary file not shown.
+1
View File
@@ -1,3 +1,4 @@
# Godot 4+ specific ignores
.godot/*
.nomedia
.DS_Store
Binary file not shown.
-1
View File
@@ -15,4 +15,3 @@ even commercial ones. Attribution is not required but appreciated.
Patreon: https://www.patreon.com/pixelarchipel
Itchio Page: https://pixel-boy.itch.io/
Pack Page: https://pixel-boy.itch.io/ninja-adventure-asset-pack
+26
View File
@@ -0,0 +1,26 @@
[gd_scene format=3 uid="uid://orvnsdbeji56"]
[ext_resource type="Texture2D" uid="uid://c0v63n2kjtvvu" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetDungeon.png" id="1_83tkd"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_n5fck"]
bounce = 0.8
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bqpwv"]
size = Vector2(16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_bqpwv"]
atlas = ExtResource("1_83tkd")
region = Rect2(127.859436, 47.936436, 16.21347, 16.062302)
[node name="Block" type="RigidBody2D" unique_id=2096944035 groups=["pushable"]]
collision_layer = 4
collision_mask = 15
physics_material_override = SubResource("PhysicsMaterial_n5fck")
gravity_scale = 0.0
linear_damp = 10.0
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=195703280]
shape = SubResource("RectangleShape2D_bqpwv")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=605230206]
texture = SubResource("AtlasTexture_bqpwv")
+18
View File
@@ -0,0 +1,18 @@
[gd_scene format=3 uid="uid://cet4fk631cjyt"]
[ext_resource type="PackedScene" uid="uid://orvnsdbeji56" path="res://Scenes/Block/block.tscn" id="1_4tccs"]
[ext_resource type="Texture2D" uid="uid://c0v63n2kjtvvu" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetDungeon.png" id="2_8ron8"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_8ron8"]
bounce = 0.1
[sub_resource type="AtlasTexture" id="AtlasTexture_k54aw"]
atlas = ExtResource("2_8ron8")
region = Rect2(16, 32, 16.21347, 16.062302)
[node name="IceBlock" unique_id=2096944035 instance=ExtResource("1_4tccs")]
physics_material_override = SubResource("PhysicsMaterial_8ron8")
linear_damp = 0.2
[node name="Sprite2D" parent="." index="1" unique_id=605230206]
texture = SubResource("AtlasTexture_k54aw")
File diff suppressed because one or more lines are too long
+15
View File
@@ -0,0 +1,15 @@
extends TileMapLayer
func disable_secret_door():
visible = false
collision_enabled = false
func enable_secret_door():
visible = true
collision_enabled = true
func _on_switch_switch_activated() -> void:
disable_secret_door()
func _on_switch_switch_deactivated() -> void:
enable_secret_door()
@@ -0,0 +1 @@
uid://dma58qu1o08h7
+38
View File
@@ -0,0 +1,38 @@
extends CharacterBody2D
@export var speed: int = 300
@export var acceleration: float = 2
@export var HP: int = 2
var target: Node2D
func _physics_process(delta):
if target:
animate_slime()
move_slime()
move_and_slide()
func move_slime():
var distance_to_player: Vector2
distance_to_player = target.global_position - global_position
var direction_normal: Vector2 = distance_to_player.normalized()
#velocity = direction_normal * speed
velocity = velocity.move_toward(direction_normal * speed, acceleration)
func animate_slime():
var normal_velocity: Vector2 = velocity.normalized()
if normal_velocity.x > 0.707:
$AnimatedSprite2D.play("move_right")
elif normal_velocity.x < -0.707:
$AnimatedSprite2D.play("move_left")
if normal_velocity.y > 0.707:
$AnimatedSprite2D.play("move_down")
elif normal_velocity.y < -0.707:
$AnimatedSprite2D.play("move_up")
func take_damage():
pass
func _on_player_detect_area_body_entered(body):
if body is Player:
target = body
+1
View File
@@ -0,0 +1 @@
uid://b38dc40ei5ape
+182
View File
@@ -0,0 +1,182 @@
[gd_scene format=3 uid="uid://c1ehbmaja4lpg"]
[ext_resource type="Script" uid="uid://b38dc40ei5ape" path="res://Scenes/Enemies/slime_enemy.gd" id="1_5uyk1"]
[ext_resource type="Texture2D" uid="uid://cwejyda54idtw" path="res://Ninja Adventure - Asset Pack/Actor/Monsters/Slime/Slime.png" id="1_18say"]
[sub_resource type="CircleShape2D" id="CircleShape2D_3rdvi"]
radius = 6.0827627
[sub_resource type="AtlasTexture" id="AtlasTexture_55qlh"]
atlas = ExtResource("1_18say")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_5uyk1"]
atlas = ExtResource("1_18say")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_sv1en"]
atlas = ExtResource("1_18say")
region = Rect2(0, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_1u7tg"]
atlas = ExtResource("1_18say")
region = Rect2(0, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_jwhlm"]
atlas = ExtResource("1_18say")
region = Rect2(0, 48, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_rh62s"]
atlas = ExtResource("1_18say")
region = Rect2(32, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_n4i4n"]
atlas = ExtResource("1_18say")
region = Rect2(32, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_ld0qu"]
atlas = ExtResource("1_18say")
region = Rect2(32, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_cmhxm"]
atlas = ExtResource("1_18say")
region = Rect2(32, 48, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_2tcdh"]
atlas = ExtResource("1_18say")
region = Rect2(48, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_nqitv"]
atlas = ExtResource("1_18say")
region = Rect2(48, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_gf5l7"]
atlas = ExtResource("1_18say")
region = Rect2(48, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_1xypq"]
atlas = ExtResource("1_18say")
region = Rect2(48, 48, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_n2bhi"]
atlas = ExtResource("1_18say")
region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_33pvu"]
atlas = ExtResource("1_18say")
region = Rect2(16, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_mek6i"]
atlas = ExtResource("1_18say")
region = Rect2(16, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_hiyn6"]
atlas = ExtResource("1_18say")
region = Rect2(16, 48, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_chgu2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_55qlh")
}],
"loop": 1,
"name": &"default",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_5uyk1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_sv1en")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1u7tg")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_jwhlm")
}],
"loop": 1,
"name": &"move_down",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rh62s")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_n4i4n")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ld0qu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_cmhxm")
}],
"loop": 1,
"name": &"move_left",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_2tcdh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nqitv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gf5l7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1xypq")
}],
"loop": 1,
"name": &"move_right",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_n2bhi")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_33pvu")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mek6i")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_hiyn6")
}],
"loop": 1,
"name": &"move_up",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_chgu2"]
radius = 60.0
[node name="SlimeEnemy" type="CharacterBody2D" unique_id=384578683]
collision_layer = 16
motion_mode = 1
script = ExtResource("1_5uyk1")
speed = 50
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=627034710]
position = Vector2(0, 2)
shape = SubResource("CircleShape2D_3rdvi")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1489783052]
sprite_frames = SubResource("SpriteFrames_chgu2")
animation = &"move_up"
autoplay = "default"
[node name="PlayerDetectArea" type="Area2D" parent="." unique_id=2126126428]
collision_layer = 16
collision_mask = 3
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerDetectArea" unique_id=1018550471]
shape = SubResource("CircleShape2D_chgu2")
debug_color = Color(0.19248506, 0.64210063, 0, 0.41960785)
[connection signal="body_entered" from="PlayerDetectArea" to="." method="_on_player_detect_area_body_entered"]
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
extends StaticBody2D
func _on_puzzle_button_pressed() -> void:
visible = false
$CollisionShape2D.set_deferred("disabled", true)
func _on_puzzle_button_unpressed() -> void:
visible = true
$CollisionShape2D.set_deferred("disabled", false)
+1
View File
@@ -0,0 +1 @@
uid://decx4kt8ftrb5
+18
View File
@@ -0,0 +1,18 @@
[gd_scene format=3 uid="uid://dfu6aj67vqwfn"]
[ext_resource type="Texture2D" uid="uid://c3l7w3n700qx3" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetReliefDetail.png" id="1_vst31"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"]
size = Vector2(16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_chgu2"]
atlas = ExtResource("1_vst31")
region = Rect2(32, 48, 15, 15)
[node name="LockedDoor" type="StaticBody2D" unique_id=964088255]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1293530655]
shape = SubResource("RectangleShape2D_chgu2")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1495827892]
texture = SubResource("AtlasTexture_chgu2")
+18
View File
@@ -0,0 +1,18 @@
extends StaticBody2D
@export var buttons_pressed_needed = 2
var currently_pressed = 0
func _on_puzzle_button_pressed() -> void:
currently_pressed = currently_pressed + 1
print("CURRENTLY PRESSED:", currently_pressed)
if currently_pressed == buttons_pressed_needed:
visible = false
$CollisionShape2D.set_deferred("disabled", true)
func _on_puzzle_button_unpressed() -> void:
currently_pressed = currently_pressed - 1
print("CURRENTLY PRESSED:", currently_pressed)
if currently_pressed != buttons_pressed_needed:
visible = true
$CollisionShape2D.set_deferred("disabled", false)
@@ -0,0 +1 @@
uid://ckwgcvlmypvi1
+16
View File
@@ -0,0 +1,16 @@
extends StaticBody2D
@export var dialogue_lines: Array[String] = ["Hello!", "Good day to you!", "Welcome!"]
var can_interact: bool = false
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Interact") and can_interact:
$CanvasLayer/DialogLabel.text = dialogue_lines[randi_range(0, 2)]
if $CanvasLayer.visible == false:
$CanvasLayer.visible = true
get_tree().paused = true
$Greeting.play()
else:
$CanvasLayer.visible = false
get_tree().paused = false
$Goodbye.play()
+1
View File
@@ -0,0 +1 @@
uid://b54jmbhu1hrbt
+76
View File
@@ -0,0 +1,76 @@
[gd_scene format=3 uid="uid://dsb83tlcapw8l"]
[ext_resource type="Texture2D" uid="uid://by4iu18wmj6ui" path="res://Ninja Adventure - Asset Pack/Actor/Characters/NinjaBlue/SpriteSheet.png" id="1_3am0f"]
[ext_resource type="Script" uid="uid://b54jmbhu1hrbt" path="res://Scenes/NPC/npc.gd" id="1_bjna2"]
[ext_resource type="Texture2D" uid="uid://ctpnixa3dpms5" path="res://Ninja Adventure - Asset Pack/Ui/Dialog/DialogBoxFaceset.png" id="3_0s07e"]
[ext_resource type="Texture2D" uid="uid://cn881vxquv6ub" path="res://Ninja Adventure - Asset Pack/Actor/Characters/NinjaBlue/Faceset.png" id="4_aqj1y"]
[ext_resource type="AudioStream" uid="uid://q2f6qp5cd467" path="res://Ninja Adventure - Asset Pack/Sounds/Game/Voice1.wav" id="5_n8r46"]
[ext_resource type="AudioStream" uid="uid://kxkws5kmf3ru" path="res://Ninja Adventure - Asset Pack/Sounds/Game/Voice4.wav" id="6_fqw72"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"]
size = Vector2(14, 13)
[sub_resource type="AtlasTexture" id="AtlasTexture_chgu2"]
atlas = ExtResource("1_3am0f")
region = Rect2(0, 0, 16, 16)
[sub_resource type="LabelSettings" id="LabelSettings_0s07e"]
font_size = 48
font_color = Color(0, 0, 0, 1)
[sub_resource type="LabelSettings" id="LabelSettings_chgu2"]
font_size = 28
[node name="NPC" type="StaticBody2D" unique_id=687608910]
process_mode = 3
script = ExtResource("1_bjna2")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1581401512]
position = Vector2(0, 0.5)
shape = SubResource("RectangleShape2D_chgu2")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=2127209036]
texture = SubResource("AtlasTexture_chgu2")
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1510478417]
visible = false
[node name="DialogBoxTexture" type="TextureRect" parent="CanvasLayer" unique_id=2039853714]
offset_left = 428.0
offset_top = 498.0
offset_right = 728.0
offset_bottom = 556.0
offset_transform_enabled = true
offset_transform_scale = Vector2(3.7, 3.7)
texture = ExtResource("3_0s07e")
[node name="NPCIcon" type="TextureRect" parent="CanvasLayer/DialogBoxTexture" unique_id=1385209557 groups=["interactable"]]
layout_mode = 0
offset_left = 5.0
offset_top = 14.0
offset_right = 45.0
offset_bottom = 54.0
texture = ExtResource("4_aqj1y")
[node name="DialogLabel" type="Label" parent="CanvasLayer" unique_id=439922902]
offset_left = 208.0
offset_top = 472.0
offset_right = 1109.0
offset_bottom = 623.0
text = "Hello World!"
label_settings = SubResource("LabelSettings_0s07e")
autowrap_mode = 3
[node name="NameLabel" type="Label" parent="CanvasLayer" unique_id=1649543931]
offset_left = 58.0
offset_top = 419.0
offset_right = 270.0
offset_bottom = 458.0
text = "Blue Ninja"
label_settings = SubResource("LabelSettings_chgu2")
[node name="Greeting" type="AudioStreamPlayer2D" parent="." unique_id=599558903]
stream = ExtResource("5_n8r46")
[node name="Goodbye" type="AudioStreamPlayer2D" parent="." unique_id=712774027]
stream = ExtResource("6_fqw72")
+130 -4
View File
@@ -1,26 +1,152 @@
extends CharacterBody2D
class_name Player
@export var move_speed: float = 100
@export var hp: int = 10
@export var push_strength: int = 50
@export var move_acceleration: float = 50
var is_attacking: bool = false
var can_interact: bool = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
update_scrolls()
%HealthBar.play("3_hp")
var damage: float = 2
print(damage)
if SceneManager.player_next_scene_spawn_pos != Vector2(0, 0):
position = SceneManager.player_next_scene_spawn_pos
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
func _physics_process(delta: float) -> void:
if SceneManager.player_hp <= 0:
return
if not is_attacking:
move_player()
push_blocks()
update_scrolls()
move_and_slide()
if Input.is_action_just_pressed("Interact") and not can_interact:
attack()
func move_player():
var move_vector: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
velocity = move_vector * move_speed
velocity = velocity.move_toward(move_vector * move_speed, move_acceleration)
if velocity.x > 0:
$AnimatedSprite2D.play("move_right")
$InteractArea2D.position = Vector2(5, 2)
elif velocity.x < 0:
$AnimatedSprite2D.play("move_left")
$InteractArea2D.position = Vector2(-5, 2)
elif velocity.y > 0:
$AnimatedSprite2D.play("move_down")
$InteractArea2D.position = Vector2(0, 8)
elif velocity.y < 0:
$AnimatedSprite2D.play("move_up")
$InteractArea2D.position = Vector2(0, -4)
else:
$AnimatedSprite2D.stop()
move_and_slide()
func push_blocks():
var collision: KinematicCollision2D = get_last_slide_collision()
if collision:
var collisision_node = collision.get_collider()
if collisision_node.is_in_group("pushable"):
var collision_normal: Vector2 = collision.get_normal()
collisision_node.apply_central_force(-collision_normal * push_strength)
func update_scrolls():
$CanvasLayer/Panel/Label.text = str(SceneManager.opened_chests.size())
func _on_area_2d_body_entered(body: Node2D) -> void:
if body.is_in_group("interactable"):
can_interact = true
body.can_interact = true
func _on_area_2d_body_exited(body: Node2D) -> void:
if body.is_in_group("interactable"):
can_interact = false
body.can_interact = false
func _on_hit_box_area_2d_body_entered(body: Node2D) -> void:
SceneManager.player_hp -= 1
%HealthBar.play(str(SceneManager.player_hp) + "_hp")
if SceneManager.player_hp <= 0:
die()
var distance_to_player: Vector2 = global_position - body.global_position
var normalize_knockback: Vector2 = distance_to_player.normalized()
print("distancetoplayer: ", distance_to_player)
velocity += normalize_knockback * 500
var flash_white_color: Color = Color(50, 50, 50)
modulate = flash_white_color
await get_tree().create_timer(0.2).timeout
var original_color: Color = Color(1, 1, 1)
modulate = original_color
func die():
$AnimatedSprite2D.play("death")
$DeathTimer.start()
func _on_sword_area_2d_body_entered(body: Node2D) -> void:
var distance_to_enemy: Vector2 = body.global_position - global_position
var knockback_direction: Vector2 = distance_to_enemy.normalized()
var knockback_strength = 150
body.velocity += knockback_direction * knockback_strength
body.HP -= 1
var flash_red_color: Color = Color(20, 0, 0)
body.modulate = flash_red_color
await get_tree().create_timer(0.2).timeout
var original_color: Color = Color(1, 1, 1)
body.modulate = original_color
if (body.HP <= 0):
body.queue_free()
func attack():
$Sword/SwordSFX.play()
if not $Sword/SwordTimer.is_stopped():
return
var player_animation: String = $AnimatedSprite2D.animation
if player_animation == "move_right":
$AnimatedSprite2D.play("attack_right")
$AnimationPlayer.play("attack_right")
if player_animation == "move_left":
$AnimatedSprite2D.play("attack_left")
$AnimationPlayer.play("attack_left")
if player_animation == "move_up":
$AnimatedSprite2D.play("attack_up")
$AnimationPlayer.play("attack_up")
if player_animation == "move_down":
$AnimatedSprite2D.play("attack_down")
$AnimationPlayer.play("attack_bottom")
is_attacking = true
velocity = Vector2(0,0 )
$Sword.visible = true
$Sword/SwordArea2D.monitoring = true
$Sword/SwordTimer.start()
func _on_sword_timer_timeout() -> void:
is_attacking = false
$Sword.visible = false
$Sword/SwordArea2D.monitoring = false
var player_animation: String = $AnimatedSprite2D.animation
if player_animation == "attack_right":
$AnimatedSprite2D.play("move_right")
if player_animation == "attack_left":
$AnimatedSprite2D.play("move_left")
if player_animation == "attack_up":
$AnimatedSprite2D.play("move_up")
if player_animation == "attack_down":
$AnimatedSprite2D.play("move_down")
func _on_death_timer_timeout() -> void:
get_tree().call_deferred("reload_current_scene")
SceneManager.player_hp = 3
+372 -6
View File
@@ -2,10 +2,32 @@
[ext_resource type="Script" uid="uid://duilaa5lwqeup" path="res://Scenes/Player/player.gd" id="1_a3d8c"]
[ext_resource type="Texture2D" uid="uid://cjbvc07lh4x1b" path="res://Ninja Adventure - Asset Pack/Actor/Characters/KnightGold/SeparateAnim/Walk.png" id="2_a3d8c"]
[ext_resource type="Texture2D" uid="uid://cpuphg0fwkemr" path="res://Ninja Adventure - Asset Pack/Actor/Characters/KnightGold/SeparateAnim/Attack.png" id="2_dd0ac"]
[ext_resource type="Texture2D" uid="uid://cp2qfumar3lu" path="res://Ninja Adventure - Asset Pack/Actor/Characters/KnightGold/SeparateAnim/Dead.png" id="3_0u5uq"]
[ext_resource type="Texture2D" uid="uid://6dmy1j0t5mqy" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollEmpty.png" id="3_xpcdj"]
[ext_resource type="Texture2D" uid="uid://ff3wjwfsais6" path="res://Ninja Adventure - Asset Pack/Ui/LifeReceptacle/heart_2.png" id="4_mtuoh"]
[ext_resource type="Texture2D" uid="uid://38ldil8moinv" path="res://Ninja Adventure - Asset Pack/Items/Weapons/Sword2/SpriteInHand.png" id="5_htcer"]
[ext_resource type="AudioStream" uid="uid://bso7qwqwgjpme" path="res://Ninja Adventure - Asset Pack/Sounds/Game/Sword2.wav" id="8_jlvik"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bqpwv"]
radius = 7.0
height = 16.0
[sub_resource type="AtlasTexture" id="AtlasTexture_eksi1"]
atlas = ExtResource("2_dd0ac")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_jincj"]
atlas = ExtResource("2_dd0ac")
region = Rect2(32, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_rqdc0"]
atlas = ExtResource("2_dd0ac")
region = Rect2(48, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_qr1w5"]
atlas = ExtResource("2_dd0ac")
region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_ythyg"]
atlas = ExtResource("3_0u5uq")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_a3d8c"]
atlas = ExtResource("2_a3d8c")
@@ -75,6 +97,46 @@ region = Rect2(16, 48, 16, 16)
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_eksi1")
}],
"loop": 1,
"name": &"attack_down",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_jincj")
}],
"loop": 1,
"name": &"attack_left",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rqdc0")
}],
"loop": 1,
"name": &"attack_right",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_qr1w5")
}],
"loop": 1,
"name": &"attack_up",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ythyg")
}],
"loop": 1,
"name": &"death",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_a3d8c")
}, {
"duration": 1.0,
@@ -142,13 +204,317 @@ animations = [{
"speed": 6.0
}]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bqpwv"]
radius = 5.0
height = 10.0
[sub_resource type="CircleShape2D" id="CircleShape2D_chgu2"]
radius = 6.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"]
size = Vector2(8, 8)
[sub_resource type="LabelSettings" id="LabelSettings_chgu2"]
font_size = 48
[sub_resource type="AtlasTexture" id="AtlasTexture_hnuln"]
atlas = ExtResource("4_mtuoh")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_aqm4k"]
atlas = ExtResource("4_mtuoh")
region = Rect2(16, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_rcvs5"]
atlas = ExtResource("4_mtuoh")
region = Rect2(32, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_h8ma5"]
atlas = ExtResource("4_mtuoh")
region = Rect2(48, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_chgu2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_hnuln")
}],
"loop": 1,
"name": &"0_hp",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_aqm4k")
}],
"loop": 1,
"name": &"1_hp",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_rcvs5")
}],
"loop": 1,
"name": &"2_hp",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_h8ma5")
}],
"loop": 1,
"name": &"3_hp",
"speed": 5.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3rdvi"]
size = Vector2(8, 13)
[sub_resource type="Animation" id="Animation_gk6dx"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sword:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.5707964]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sword:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-3, -13)]
}
[sub_resource type="Animation" id="Animation_jhyir"]
resource_name = "attack_bottom"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sword:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 13)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sword:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_jlvik"]
resource_name = "attack_left"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sword:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.5707964]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sword:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-13, 4)]
}
[sub_resource type="Animation" id="Animation_dd0ac"]
resource_name = "attack_right"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sword:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(13, 4)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sword:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [4.712389]
}
[sub_resource type="Animation" id="Animation_0u5uq"]
resource_name = "attack_up"
length = 0.2
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sword:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(-3, -13)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sword:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [3.1415927]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_jlvik"]
_data = {
&"RESET": SubResource("Animation_gk6dx"),
&"attack_bottom": SubResource("Animation_jhyir"),
&"attack_left": SubResource("Animation_jlvik"),
&"attack_right": SubResource("Animation_dd0ac"),
&"attack_up": SubResource("Animation_0u5uq")
}
[node name="CharacterBody2D" type="CharacterBody2D" unique_id=1991398375]
collision_mask = 7
motion_mode = 1
script = ExtResource("1_a3d8c")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=129222135]
shape = SubResource("CapsuleShape2D_bqpwv")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=721334358]
sprite_frames = SubResource("SpriteFrames_bqpwv")
animation = &"move_down"
autoplay = "move_down"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=129222135]
visible = false
position = Vector2(0, 3)
shape = SubResource("CapsuleShape2D_bqpwv")
[node name="HitBoxArea2D" type="Area2D" parent="." unique_id=1052547818]
collision_layer = 2
collision_mask = 16
[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBoxArea2D" unique_id=206980179]
position = Vector2(0, 2)
shape = SubResource("CircleShape2D_chgu2")
debug_color = Color(0.99152297, 0, 0.27048782, 0.41960785)
[node name="InteractArea2D" type="Area2D" parent="." unique_id=145023444]
collision_layer = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractArea2D" unique_id=775673729]
shape = SubResource("RectangleShape2D_chgu2")
debug_color = Color(0.9427947, 0.09120729, 0.5535774, 0.41960785)
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1672000946]
[node name="Panel" type="Panel" parent="CanvasLayer" unique_id=1717998937]
offset_left = 198.0
offset_top = 52.0
offset_right = 412.0
offset_bottom = 125.0
[node name="Label" type="Label" parent="CanvasLayer/Panel" unique_id=1669846200]
layout_mode = 0
offset_left = 78.0
offset_top = 2.0
offset_right = 118.0
offset_bottom = 69.0
text = "0"
label_settings = SubResource("LabelSettings_chgu2")
[node name="TextureRect" type="TextureRect" parent="CanvasLayer/Panel" unique_id=1105594124]
layout_mode = 0
offset_left = 9.0
offset_top = 8.0
offset_right = 63.0
offset_bottom = 62.0
texture = ExtResource("3_xpcdj")
[node name="HealthBar" type="AnimatedSprite2D" parent="CanvasLayer" unique_id=102598890]
unique_name_in_owner = true
position = Vector2(114, 88)
scale = Vector2(4.7812505, 4.7812505)
sprite_frames = SubResource("SpriteFrames_chgu2")
animation = &"3_hp"
[node name="Sword" type="Sprite2D" parent="." unique_id=984511662]
visible = false
show_behind_parent = true
position = Vector2(-3, -13)
rotation = 1.5707964
texture = ExtResource("5_htcer")
[node name="SwordArea2D" type="Area2D" parent="Sword" unique_id=479479356]
collision_layer = 2
collision_mask = 16
monitoring = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="Sword/SwordArea2D" unique_id=1964142758]
position = Vector2(0, 0.5)
shape = SubResource("RectangleShape2D_3rdvi")
debug_color = Color(0.6497558, 0.52038795, 0, 0.41960785)
[node name="SwordTimer" type="Timer" parent="Sword" unique_id=639462034]
wait_time = 0.3
one_shot = true
[node name="SwordSFX" type="AudioStreamPlayer" parent="Sword" unique_id=913634626]
stream = ExtResource("8_jlvik")
volume_db = -5.0
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1687360666]
libraries/ = SubResource("AnimationLibrary_jlvik")
[node name="DeathTimer" type="Timer" parent="." unique_id=1301433095]
wait_time = 1.5
one_shot = true
[connection signal="body_entered" from="HitBoxArea2D" to="." method="_on_hit_box_area_2d_body_entered"]
[connection signal="body_entered" from="InteractArea2D" to="." method="_on_area_2d_body_entered"]
[connection signal="body_exited" from="InteractArea2D" to="." method="_on_area_2d_body_exited"]
[connection signal="body_entered" from="Sword/SwordArea2D" to="." method="_on_sword_area_2d_body_entered"]
[connection signal="timeout" from="Sword/SwordTimer" to="." method="_on_sword_timer_timeout"]
[connection signal="timeout" from="DeathTimer" to="." method="_on_death_timer_timeout"]
+19
View File
@@ -0,0 +1,19 @@
extends Area2D
var bodies_on_top = 0
signal pressed
signal unpressed
@export var is_single_use: bool = false
func _on_body_entered(body: Node2D) -> void:
bodies_on_top = bodies_on_top + 1
if (body.is_in_group("pushable") or body is Player) and bodies_on_top == 1:
$AnimatedSprite2D.play("pressed")
pressed.emit()
func _on_body_exited(body: Node2D) -> void:
if is_single_use:
return
bodies_on_top = bodies_on_top - 1
if (body.is_in_group("pushable") or body is Player) and bodies_on_top == 0:
$AnimatedSprite2D.play("unpressed")
unpressed.emit()
+1
View File
@@ -0,0 +1 @@
uid://cdoeb8xo16tpb
+49
View File
@@ -0,0 +1,49 @@
[gd_scene format=3 uid="uid://onpen57mc6i8"]
[ext_resource type="Texture2D" uid="uid://c0v63n2kjtvvu" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetDungeon.png" id="1_4jafl"]
[ext_resource type="Script" uid="uid://cdoeb8xo16tpb" path="res://Scenes/PuzzleButton/puzzle_button.gd" id="1_dls00"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"]
size = Vector2(14, 12)
[sub_resource type="AtlasTexture" id="AtlasTexture_dls00"]
atlas = ExtResource("1_4jafl")
region = Rect2(16, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_lffmm"]
atlas = ExtResource("1_4jafl")
region = Rect2(0, 16, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_chgu2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_dls00")
}],
"loop": 1,
"name": &"pressed",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_lffmm")
}],
"loop": 1,
"name": &"unpressed",
"speed": 5.0
}]
[node name="PuzzleButton" type="Area2D" unique_id=125477561]
collision_layer = 4
collision_mask = 15
script = ExtResource("1_dls00")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=389969783]
shape = SubResource("RectangleShape2D_chgu2")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1705118892]
sprite_frames = SubResource("SpriteFrames_chgu2")
animation = &"unpressed"
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
@@ -0,0 +1,37 @@
[gd_scene format=3 uid="uid://bvdp8m47ia2n3"]
[ext_resource type="PackedScene" uid="uid://onpen57mc6i8" path="res://Scenes/PuzzleButton/puzzle_button.tscn" id="1_8h8a6"]
[ext_resource type="Texture2D" uid="uid://c0v63n2kjtvvu" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetDungeon.png" id="2_spa4x"]
[sub_resource type="AtlasTexture" id="AtlasTexture_5fq82"]
atlas = ExtResource("2_spa4x")
region = Rect2(48, 16, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_5w5pl"]
atlas = ExtResource("2_spa4x")
region = Rect2(32, 16, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_25pb2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_5fq82")
}],
"loop": 1,
"name": &"pressed",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_5w5pl")
}],
"loop": 1,
"name": &"unpressed",
"speed": 5.0
}]
[node name="PuzzleButtonSingleUse" unique_id=125477561 instance=ExtResource("1_8h8a6")]
[node name="AnimatedSprite2D" parent="." index="1" unique_id=1705118892]
sprite_frames = SubResource("SpriteFrames_25pb2")
animation = &"pressed"
+19
View File
@@ -0,0 +1,19 @@
extends Area2D
@export var next_scene: String
@export var player_spawn_pos: Vector2
func _ready() -> void:
pass # Replace with function body.
func _process(delta: float) -> void:
pass
func _on_body_entered(body: Player) -> void:
print("body entered!")
SceneManager.player_next_scene_spawn_pos = player_spawn_pos
get_tree().change_scene_to_file.call_deferred(next_scene)
pass # Replace with function body.
func _on_body_exited(body: Node2D) -> void:
print("player left!")
pass # Replace with function body.
@@ -0,0 +1 @@
uid://0a6yl260cuo3
+17
View File
@@ -0,0 +1,17 @@
[gd_scene format=3 uid="uid://dhvuy8co661xo"]
[ext_resource type="Script" uid="uid://0a6yl260cuo3" path="res://Scenes/SceneEntrance/scene_entrance.gd" id="1_6rkgu"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bqpwv"]
size = Vector2(16, 16)
[node name="SceneEntrance" type="Area2D" unique_id=1734357035]
collision_mask = 2
script = ExtResource("1_6rkgu")
next_scene = "res://Scenes/DungeonScene/dungeon_scene.tscn"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=657294470]
shape = SubResource("RectangleShape2D_bqpwv")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_exited" from="." to="." method="_on_body_exited"]
+5
View File
@@ -0,0 +1,5 @@
extends Node2D
var player_next_scene_spawn_pos: Vector2
var opened_chests: Array[String] = []
var player_hp: int = 3
+1
View File
@@ -0,0 +1 @@
uid://bghfl5hagv6q1
+6
View File
@@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://6txu74mchftj"]
[ext_resource type="Script" uid="uid://bghfl5hagv6q1" path="res://Scenes/SceneManager/scene_manager.gd" id="1_car14"]
[node name="SceneManager" type="Node2D" unique_id=402183888]
script = ExtResource("1_car14")
+21
View File
@@ -0,0 +1,21 @@
extends StaticBody2D
signal switch_activated
signal switch_deactivated
var is_activated: bool = false
var can_interact: bool = false
func _ready() -> void:
$AnimatedSprite2D.play("deactivated")
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Interact") and can_interact:
if !is_activated:
$AnimatedSprite2D.play("activated")
is_activated = true
switch_activated.emit()
else:
$AnimatedSprite2D.play("deactivated")
is_activated = false
switch_deactivated.emit()
+1
View File
@@ -0,0 +1 @@
uid://t4xp5st31yvj
+45
View File
@@ -0,0 +1,45 @@
[gd_scene format=3 uid="uid://bdu180bpjrn5h"]
[ext_resource type="Script" uid="uid://t4xp5st31yvj" path="res://Scenes/Switch/switch.gd" id="1_c5yrt"]
[ext_resource type="Texture2D" uid="uid://c0v63n2kjtvvu" path="res://Ninja Adventure - Asset Pack/Backgrounds/Tilesets/TilesetDungeon.png" id="1_g65jv"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3rdvi"]
size = Vector2(16, 8)
[sub_resource type="AtlasTexture" id="AtlasTexture_c5yrt"]
atlas = ExtResource("1_g65jv")
region = Rect2(64, 32, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_sln40"]
atlas = ExtResource("1_g65jv")
region = Rect2(48, 32, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_chgu2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_c5yrt")
}],
"loop": 1,
"name": &"activated",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_sln40")
}],
"loop": 1,
"name": &"deactivated",
"speed": 5.0
}]
[node name="Switch" type="StaticBody2D" unique_id=78052327 groups=["interactable"]]
script = ExtResource("1_c5yrt")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1474874931]
position = Vector2(0, 4)
shape = SubResource("RectangleShape2D_3rdvi")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=1373433038]
sprite_frames = SubResource("SpriteFrames_chgu2")
animation = &"activated"
+25
View File
@@ -0,0 +1,25 @@
extends StaticBody2D
var can_interact: bool = false
var is_open: bool = false
@export var scrolls: Array[Sprite2D]
var scroll_number = 0
func _ready() -> void:
scroll_number = randi_range(1, 4)
if SceneManager.opened_chests.has(name):
is_open = true
$AnimatedSprite2D.play("open")
func _process(delta: float) -> void:
if Input.is_action_just_pressed("Interact") and can_interact:
if !is_open:
$Timer.start()
$AudioStreamPlayer.play()
$AnimatedSprite2D.play("open")
scrolls[scroll_number].visible = true
is_open = true
SceneManager.opened_chests.append(name)
func _on_timer_timeout() -> void:
scrolls[scroll_number].visible = false
@@ -0,0 +1 @@
uid://h2y2p3dcj4ne
+85
View File
@@ -0,0 +1,85 @@
[gd_scene format=3 uid="uid://bqcsg2t581j7b"]
[ext_resource type="Script" uid="uid://h2y2p3dcj4ne" path="res://Scenes/TreasureChest/treasure_chest.gd" id="1_2tkyh"]
[ext_resource type="Texture2D" uid="uid://crewi6wldd7od" path="res://Ninja Adventure - Asset Pack/Items/Treasure/BigTreasureChest.png" id="1_v1qrq"]
[ext_resource type="AudioStream" uid="uid://ug5n4ca2cc77" path="res://Ninja Adventure - Asset Pack/Sounds/Game/Success3.wav" id="3_sdjdt"]
[ext_resource type="Texture2D" uid="uid://fybqrl1dbdao" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollIce.png" id="4_vnph0"]
[ext_resource type="Texture2D" uid="uid://c1coi2k1hgv5b" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollFire.png" id="5_2b3qj"]
[ext_resource type="Texture2D" uid="uid://d1his3w8n84aa" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollPlant.png" id="6_n2as5"]
[ext_resource type="Texture2D" uid="uid://d1vovcdepn1w5" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollRock.png" id="7_lh1s0"]
[ext_resource type="Texture2D" uid="uid://6dmy1j0t5mqy" path="res://Ninja Adventure - Asset Pack/Items/Scroll/ScrollEmpty.png" id="8_lh1s0"]
[sub_resource type="AtlasTexture" id="AtlasTexture_2tkyh"]
atlas = ExtResource("1_v1qrq")
region = Rect2(0, 0, 16, 14)
[sub_resource type="AtlasTexture" id="AtlasTexture_sdjdt"]
atlas = ExtResource("1_v1qrq")
region = Rect2(16, 0, 16, 14)
[sub_resource type="SpriteFrames" id="SpriteFrames_chgu2"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_2tkyh")
}],
"loop": 1,
"name": &"closed",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_sdjdt")
}],
"loop": 1,
"name": &"open",
"speed": 5.0
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"]
size = Vector2(16, 12)
[node name="TreasureChest" type="StaticBody2D" unique_id=2069908436 node_paths=PackedStringArray("scrolls") groups=["interactable"]]
script = ExtResource("1_2tkyh")
scrolls = [NodePath("EmptyScroll"), NodePath("IceScroll"), NodePath("FireScroll"), NodePath("PlantScroll"), NodePath("RockScroll")]
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="." unique_id=990575183]
sprite_frames = SubResource("SpriteFrames_chgu2")
animation = &"closed"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=104658718]
position = Vector2(0, 1)
shape = SubResource("RectangleShape2D_chgu2")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=1922945704]
stream = ExtResource("3_sdjdt")
[node name="IceScroll" type="Sprite2D" parent="." unique_id=1614825692]
visible = false
position = Vector2(0, -13)
texture = ExtResource("4_vnph0")
[node name="FireScroll" type="Sprite2D" parent="." unique_id=55522702]
visible = false
position = Vector2(0, -13)
texture = ExtResource("5_2b3qj")
[node name="PlantScroll" type="Sprite2D" parent="." unique_id=1806015749]
visible = false
position = Vector2(0, -13)
texture = ExtResource("6_n2as5")
[node name="RockScroll" type="Sprite2D" parent="." unique_id=1276385957]
visible = false
position = Vector2(0, -13)
texture = ExtResource("7_lh1s0")
[node name="Timer" type="Timer" parent="." unique_id=647285700]
one_shot = true
[node name="EmptyScroll" type="Sprite2D" parent="." unique_id=699932407]
visible = false
position = Vector2(0, -13)
texture = ExtResource("8_lh1s0")
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
+27 -1
View File
@@ -15,10 +15,36 @@ run/main_scene="uid://bhjxpugl4fg33"
config/features=PackedStringArray("4.7", "Forward Plus")
config/icon="res://icon.svg"
[autoload]
SceneManager="*uid://6txu74mchftj"
[display]
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[global_group]
wall="A wall tilemap layer"
pushable="A pushuable object"
interactable="An interactable node"
[input]
Interact={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
]
}
[layer_names]
2d_physics/layer_1="Environment"
2d_physics/layer_2="Player"
2d_physics/layer_3="Puzzle Elements"
2d_physics/layer_4="Puzzle Walls"
2d_physics/layer_5="Enemies"
[physics]