Compare commits
41
Commits
3c257a341b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a7f3c7ec3 | ||
|
|
9c294d1394 | ||
|
|
aff5df529e | ||
|
|
20c127e11d | ||
|
|
2aad0915e3 | ||
|
|
7b30283765 | ||
|
|
5120f11bfa | ||
|
|
1655a9f8cc | ||
|
|
a252f9419e | ||
|
|
a528943b91 | ||
|
|
77214d4723 | ||
|
|
5d484134e7 | ||
|
|
31c34978f2 | ||
|
|
e789ea0717 | ||
|
|
8a4a440ad9 | ||
|
|
fc007ca71a | ||
|
|
d8d342ab56 | ||
|
|
c429e2c461 | ||
|
|
15bac3c653 | ||
|
|
525f6c04db | ||
|
|
23aa21b7b7 | ||
|
|
5c3a533559 | ||
|
|
5b7c474f32 | ||
|
|
4234167cc1 | ||
|
|
0d6bfd6e90 | ||
|
|
2b4b54612f | ||
|
|
8ba607d1b0 | ||
|
|
b2a7fa65ad | ||
|
|
e87ebd3827 | ||
|
|
6fb32a6cd1 | ||
|
|
c42e2777ec | ||
|
|
1d15df6085 | ||
|
|
a97800846f | ||
|
|
ac86097b07 | ||
|
|
4638954cdc | ||
|
|
ee8c8837d3 | ||
|
|
ca88303f49 | ||
|
|
6bfaa82f34 | ||
|
|
7ae9c47246 | ||
|
|
cc7d64d0da | ||
|
|
b3873ffd91 |
@@ -1,3 +1,4 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/*
|
||||
.nomedia
|
||||
.DS_Store
|
||||
|
||||
BIN
Binary file not shown.
@@ -1,117 +1,117 @@
|
||||
CC0 1.0 Universal
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator and
|
||||
subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for the
|
||||
purpose of contributing to a commons of creative, cultural and scientific
|
||||
works ("Commons") that the public can reliably and without fear of later
|
||||
claims of infringement build upon, modify, incorporate in other works, reuse
|
||||
and redistribute as freely as possible in any form whatsoever and for any
|
||||
purposes, including without limitation commercial purposes. These owners may
|
||||
contribute to the Commons to promote the ideal of a free culture and the
|
||||
further production of creative, cultural and scientific works, or to gain
|
||||
reputation or greater distribution for their Work in part through the use and
|
||||
efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any expectation
|
||||
of additional consideration or compensation, the person associating CC0 with a
|
||||
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
||||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
||||
and publicly distribute the Work under its terms, with knowledge of his or her
|
||||
Copyright and Related Rights in the Work and the meaning and intended legal
|
||||
effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not limited
|
||||
to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
||||
and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or likeness
|
||||
depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data in
|
||||
a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation thereof,
|
||||
including any amended or successor version of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the world
|
||||
based on applicable law or treaty, and any national implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
||||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
||||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
||||
and Related Rights and associated claims and causes of action, whether now
|
||||
known or unknown (including existing as well as future claims and causes of
|
||||
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time
|
||||
extensions), (iii) in any current or future medium and for any number of
|
||||
copies, and (iv) for any purpose whatsoever, including without limitation
|
||||
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
|
||||
the Waiver for the benefit of each member of the public at large and to the
|
||||
detriment of Affirmer's heirs and successors, fully intending that such Waiver
|
||||
shall not be subject to revocation, rescission, cancellation, termination, or
|
||||
any other legal or equitable action to disrupt the quiet enjoyment of the Work
|
||||
by the public as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason be
|
||||
judged legally invalid or ineffective under applicable law, then the Waiver
|
||||
shall be preserved to the maximum extent permitted taking into account
|
||||
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
|
||||
is so judged Affirmer hereby grants to each affected person a royalty-free,
|
||||
non transferable, non sublicensable, non exclusive, irrevocable and
|
||||
unconditional license to exercise Affirmer's Copyright and Related Rights in
|
||||
the Work (i) in all territories worldwide, (ii) for the maximum duration
|
||||
provided by applicable law or treaty (including future time extensions), (iii)
|
||||
in any current or future medium and for any number of copies, and (iv) for any
|
||||
purpose whatsoever, including without limitation commercial, advertising or
|
||||
promotional purposes (the "License"). The License shall be deemed effective as
|
||||
of the date CC0 was applied by Affirmer to the Work. Should any part of the
|
||||
License for any reason be judged legally invalid or ineffective under
|
||||
applicable law, such partial invalidity or ineffectiveness shall not
|
||||
invalidate the remainder of the License, and in such case Affirmer hereby
|
||||
affirms that he or she will not (i) exercise any of his or her remaining
|
||||
Copyright and Related Rights in the Work or (ii) assert any associated claims
|
||||
and causes of action with respect to the Work, in either case contrary to
|
||||
Affirmer's express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or warranties
|
||||
of any kind concerning the Work, express, implied, statutory or otherwise,
|
||||
including without limitation warranties of title, merchantability, fitness
|
||||
for a particular purpose, non infringement, or the absence of latent or
|
||||
other defects, accuracy, or the present or absence of errors, whether or not
|
||||
discoverable, all to the greatest extent permissible under applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without limitation
|
||||
any person's Copyright and Related Rights in the Work. Further, Affirmer
|
||||
disclaims responsibility for obtaining any necessary consents, permissions
|
||||
or other rights required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to this
|
||||
CC0 or use of the Work.
|
||||
|
||||
For more information, please see
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
||||
CC0 1.0 Universal
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator and
|
||||
subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for the
|
||||
purpose of contributing to a commons of creative, cultural and scientific
|
||||
works ("Commons") that the public can reliably and without fear of later
|
||||
claims of infringement build upon, modify, incorporate in other works, reuse
|
||||
and redistribute as freely as possible in any form whatsoever and for any
|
||||
purposes, including without limitation commercial purposes. These owners may
|
||||
contribute to the Commons to promote the ideal of a free culture and the
|
||||
further production of creative, cultural and scientific works, or to gain
|
||||
reputation or greater distribution for their Work in part through the use and
|
||||
efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any expectation
|
||||
of additional consideration or compensation, the person associating CC0 with a
|
||||
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
||||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
||||
and publicly distribute the Work under its terms, with knowledge of his or her
|
||||
Copyright and Related Rights in the Work and the meaning and intended legal
|
||||
effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not limited
|
||||
to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
||||
and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or likeness
|
||||
depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data in
|
||||
a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation thereof,
|
||||
including any amended or successor version of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the world
|
||||
based on applicable law or treaty, and any national implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
||||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
||||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
||||
and Related Rights and associated claims and causes of action, whether now
|
||||
known or unknown (including existing as well as future claims and causes of
|
||||
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time
|
||||
extensions), (iii) in any current or future medium and for any number of
|
||||
copies, and (iv) for any purpose whatsoever, including without limitation
|
||||
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
|
||||
the Waiver for the benefit of each member of the public at large and to the
|
||||
detriment of Affirmer's heirs and successors, fully intending that such Waiver
|
||||
shall not be subject to revocation, rescission, cancellation, termination, or
|
||||
any other legal or equitable action to disrupt the quiet enjoyment of the Work
|
||||
by the public as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason be
|
||||
judged legally invalid or ineffective under applicable law, then the Waiver
|
||||
shall be preserved to the maximum extent permitted taking into account
|
||||
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
|
||||
is so judged Affirmer hereby grants to each affected person a royalty-free,
|
||||
non transferable, non sublicensable, non exclusive, irrevocable and
|
||||
unconditional license to exercise Affirmer's Copyright and Related Rights in
|
||||
the Work (i) in all territories worldwide, (ii) for the maximum duration
|
||||
provided by applicable law or treaty (including future time extensions), (iii)
|
||||
in any current or future medium and for any number of copies, and (iv) for any
|
||||
purpose whatsoever, including without limitation commercial, advertising or
|
||||
promotional purposes (the "License"). The License shall be deemed effective as
|
||||
of the date CC0 was applied by Affirmer to the Work. Should any part of the
|
||||
License for any reason be judged legally invalid or ineffective under
|
||||
applicable law, such partial invalidity or ineffectiveness shall not
|
||||
invalidate the remainder of the License, and in such case Affirmer hereby
|
||||
affirms that he or she will not (i) exercise any of his or her remaining
|
||||
Copyright and Related Rights in the Work or (ii) assert any associated claims
|
||||
and causes of action with respect to the Work, in either case contrary to
|
||||
Affirmer's express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or warranties
|
||||
of any kind concerning the Work, express, implied, statutory or otherwise,
|
||||
including without limitation warranties of title, merchantability, fitness
|
||||
for a particular purpose, non infringement, or the absence of latent or
|
||||
other defects, accuracy, or the present or absence of errors, whether or not
|
||||
discoverable, all to the greatest extent permissible under applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without limitation
|
||||
any person's Copyright and Related Rights in the Work. Further, Affirmer
|
||||
disclaims responsibility for obtaining any necessary consents, permissions
|
||||
or other rights required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to this
|
||||
CC0 or use of the Work.
|
||||
|
||||
For more information, please see
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
# Ninja Adventure Asset Pack
|
||||
|
||||
Assets created by:
|
||||
[Pixel-boy](https://pixel-boy.itch.io/)
|
||||
[AAA](https://www.instagram.com/challenger.aaa/?hl=fr)
|
||||
|
||||
# License
|
||||
|
||||
They are released under the Creative Commons Zero (CC0) license.
|
||||
|
||||
You can use any and all of the assets found in this package in your own games,
|
||||
even commercial ones. Attribution is not required but appreciated.
|
||||
|
||||
# Placing one of these links somewhere would be awesome :)
|
||||
Patreon: https://www.patreon.com/pixelarchipel
|
||||
Itchio Page: https://pixel-boy.itch.io/
|
||||
Pack Page: https://pixel-boy.itch.io/ninja-adventure-asset-pack
|
||||
|
||||
# Ninja Adventure Asset Pack
|
||||
|
||||
Assets created by:
|
||||
[Pixel-boy](https://pixel-boy.itch.io/)
|
||||
[AAA](https://www.instagram.com/challenger.aaa/?hl=fr)
|
||||
|
||||
# License
|
||||
|
||||
They are released under the Creative Commons Zero (CC0) license.
|
||||
|
||||
You can use any and all of the assets found in this package in your own games,
|
||||
even commercial ones. Attribution is not required but appreciated.
|
||||
|
||||
# Placing one of these links somewhere would be awesome :)
|
||||
Patreon: https://www.patreon.com/pixelarchipel
|
||||
Itchio Page: https://pixel-boy.itch.io/
|
||||
Pack Page: https://pixel-boy.itch.io/ninja-adventure-asset-pack
|
||||
|
||||
@@ -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")
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://b38dc40ei5ape
|
||||
@@ -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
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://decx4kt8ftrb5
|
||||
@@ -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")
|
||||
@@ -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
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://b54jmbhu1hrbt
|
||||
@@ -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
@@ -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
@@ -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"]
|
||||
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://cdoeb8xo16tpb
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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"]
|
||||
@@ -0,0 +1,5 @@
|
||||
extends Node2D
|
||||
|
||||
var player_next_scene_spawn_pos: Vector2
|
||||
var opened_chests: Array[String] = []
|
||||
var player_hp: int = 3
|
||||
@@ -0,0 +1 @@
|
||||
uid://bghfl5hagv6q1
|
||||
@@ -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")
|
||||
@@ -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()
|
||||
@@ -0,0 +1 @@
|
||||
uid://t4xp5st31yvj
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user