diff --git a/ressources/forest_tileset.tres b/ressources/forest_tileset.tres index 75a41e0..b5c8106 100644 --- a/ressources/forest_tileset.tres +++ b/ressources/forest_tileset.tres @@ -3,6 +3,27 @@ [ext_resource type="Texture2D" uid="uid://ni137ub3dv35" path="res://assets/images/sprites/World/Dungeon/Assets.png" id="1_7egpr"] [ext_resource type="Texture2D" uid="uid://dvmdsdl1iwiib" path="res://assets/images/sprites/World/Forest/Tileset/Tileset_v2.png" id="2_avkvp"] +[sub_resource type="TileMapPattern" id="TileMapPattern_7egpr"] +tile_data = PackedInt32Array(0, 983041, 2, 1, 458753, 3, 2, 1114113, 2) + +[sub_resource type="TileMapPattern" id="TileMapPattern_avkvp"] +tile_data = PackedInt32Array(0, 983041, 2, 1, 458753, 3, 2, 458753, 3, 3, 1114113, 2) + +[sub_resource type="TileMapPattern" id="TileMapPattern_7eyvg"] +tile_data = PackedInt32Array(0, 131073, 6, 65536, 720897, 3, 1, 196609, 1, 65537, 786433, 3) + +[sub_resource type="TileMapPattern" id="TileMapPattern_215sm"] +tile_data = PackedInt32Array(0, 65537, 1, 65536, 393217, 7, 1, 131073, 1, 65537, 458753, 7, 2, 196609, 6, 65538, 851969, 7) + +[sub_resource type="TileMapPattern" id="TileMapPattern_hm3gb"] +tile_data = PackedInt32Array(0, 983041, 2, 1, 458753, 3, 2, 131073, 1, 3, 786433, 6, 4, 458753, 6, 5, 458753, 6, 6, 786433, 6, 7, 786433, 6, 8, 458753, 3, 9, 1114113, 2) + +[sub_resource type="TileMapPattern" id="TileMapPattern_q6nih"] +tile_data = PackedInt32Array(0, 983041, 2, 1, 1114113, 2) + +[sub_resource type="TileMapPattern" id="TileMapPattern_p82ol"] +tile_data = PackedInt32Array(0, 983041, 2, 1, 1114113, 2) + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ymjof"] texture = ExtResource("1_7egpr") @@ -772,3 +793,10 @@ terrain_set_0/terrain_1/name = "Grass" terrain_set_0/terrain_1/color = Color(0.3097404, 0.5082029, 0.09713443, 1) sources/1 = SubResource("TileSetAtlasSource_s11cq") sources/0 = SubResource("TileSetAtlasSource_ymjof") +pattern_0 = SubResource("TileMapPattern_7egpr") +pattern_1 = SubResource("TileMapPattern_avkvp") +pattern_2 = SubResource("TileMapPattern_7eyvg") +pattern_3 = SubResource("TileMapPattern_215sm") +pattern_4 = SubResource("TileMapPattern_hm3gb") +pattern_5 = SubResource("TileMapPattern_q6nih") +pattern_6 = SubResource("TileMapPattern_p82ol") diff --git a/scenes/actors/creeper.gd b/scenes/actors/creeper.gd index c130fe4..85e8fa0 100644 --- a/scenes/actors/creeper.gd +++ b/scenes/actors/creeper.gd @@ -33,6 +33,7 @@ var _facing_direction: float = 1.0 var _patrol_direction: float = 1.0 func _ready() -> void: + add_to_group("enemies") _hurtbox.hit_received.connect(_on_hurtbox_hit_received) _health.health_changed.connect(_on_health_changed) _health.died.connect(_on_died) @@ -161,6 +162,8 @@ func _on_died() -> void: velocity = Vector2.ZERO _hurtbox.set_deferred("monitoring", false) _hitbox_collision.set_deferred("disabled", true) + remove_from_group("enemies") + EventBus.enemy_defeated.emit() func _on_animation_finished() -> void: if _sprite.animation == &"hurt": diff --git a/scenes/actors/player.gd b/scenes/actors/player.gd index 3b13be1..64c5bcc 100644 --- a/scenes/actors/player.gd +++ b/scenes/actors/player.gd @@ -9,10 +9,10 @@ enum State { ATTACK_1, ATTACK_2, ATTACK_3, - HEAVY_ATTACK, + HEAVY_ATTACK, # A rajouter ? DASH, - DASH_ATTACK, - DEFEND, + DASH_ATTACK, # A rajouter + DEFEND, # A rajouter HURT, DEATH, } @@ -217,6 +217,9 @@ func _update_hitbox() -> void: var is_active_hit_frame: bool = _sprite.frame >= hit_frames.x and _sprite.frame <= hit_frames.y _hitbox_collision.disabled = not (is_attacking and is_active_hit_frame) +func kill() -> void: + _health.kill() + func _on_hurtbox_hit_received(hitbox: HitBox) -> void: _health.take_damage(hitbox.damage) diff --git a/scenes/actors/player.tscn b/scenes/actors/player.tscn index 4496ab1..3b874d7 100644 --- a/scenes/actors/player.tscn +++ b/scenes/actors/player.tscn @@ -745,7 +745,7 @@ animations = [{ }] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_gy2im"] -radius = 7.0 +radius = 8.0 height = 34.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_uvqlf"] @@ -772,12 +772,10 @@ autoplay = "idle" frame_progress = 0.9020072 [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=807357149] -visible = false position = Vector2(0, -17) shape = SubResource("CapsuleShape2D_gy2im") [node name="HitBox" type="Area2D" parent="." unique_id=510680537] -visible = false collision_layer = 2 collision_mask = 0 script = ExtResource("14_hitbox") @@ -787,7 +785,6 @@ position = Vector2(25.75, -20.5) shape = SubResource("RectangleShape2D_uvqlf") [node name="HurtBox" type="Area2D" parent="." unique_id=2064020607] -visible = false collision_layer = 4 collision_mask = 2 script = ExtResource("16_0878f") @@ -799,5 +796,6 @@ debug_color = Color(0.9843137, 0, 0, 0.41960785) [node name="Camera2D" type="Camera2D" parent="." unique_id=2010864644] offset = Vector2(0, -40) +enabled = false zoom = Vector2(0.8, 0.8) position_smoothing_enabled = true diff --git a/scenes/components/background.tscn b/scenes/components/background.tscn new file mode 100644 index 0000000..7bd70cf --- /dev/null +++ b/scenes/components/background.tscn @@ -0,0 +1,156 @@ +[gd_scene format=3 uid="uid://j5y1pb8t167t"] + +[ext_resource type="Texture2D" uid="uid://dapligyg1q7vd" path="res://assets/images/sprites/World/Background/Wasteland_Sky.png" id="1_ftg25"] +[ext_resource type="Texture2D" uid="uid://bk41feg0qdi0t" path="res://assets/images/sprites/World/Background/Wasteland_Mountains_1.png" id="2_c6vxt"] +[ext_resource type="Texture2D" uid="uid://cdgo042aie21s" path="res://assets/images/sprites/World/Background/Wasteland_Mountains_2.png" id="3_hxksc"] +[ext_resource type="Texture2D" uid="uid://c6nak38doipjr" path="res://assets/images/sprites/World/Forest/Background/2.png" id="4_7hk2w"] +[ext_resource type="Texture2D" uid="uid://cg3d5ub47f3o1" path="res://assets/images/sprites/World/Forest/Background/1.png" id="5_u651t"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_7vq3v"] +atlas = ExtResource("5_u651t") +region = Rect2(0, 0, 32, 32) + +[node name="Background" type="Node2D" unique_id=105665021] + +[node name="Sky" type="Parallax2D" parent="." unique_id=657886953] +scroll_scale = Vector2(0, 0) +scroll_offset = Vector2(0, 60) + +[node name="Sprite2D" type="Sprite2D" parent="Sky" unique_id=877999229] +position = Vector2(201, 80) +texture = ExtResource("1_ftg25") + +[node name="MountainFarthest" type="Parallax2D" parent="." unique_id=883776816] +scroll_scale = Vector2(0.1, 0.1) +scroll_offset = Vector2(0, 64) +repeat_size = Vector2(512, 0) +repeat_times = 4 + +[node name="Sprite2D" type="Sprite2D" parent="MountainFarthest" unique_id=634603301] +position = Vector2(201, 80) +texture = ExtResource("2_c6vxt") + +[node name="MountainClosest" type="Parallax2D" parent="." unique_id=1167614974] +scroll_scale = Vector2(0.2, 0.2) +scroll_offset = Vector2(0, 55) +repeat_size = Vector2(512, 0) +repeat_times = 4 + +[node name="Sprite2D" type="Sprite2D" parent="MountainClosest" unique_id=166848168] +position = Vector2(291, 80) +texture = ExtResource("3_hxksc") + +[node name="TreesFarthest" type="Parallax2D" parent="." unique_id=119945814] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.4, 0.4) +scroll_offset = Vector2(0, -127) +repeat_size = Vector2(320, 0) +repeat_times = 10 + +[node name="Sprite2D" type="Sprite2D" parent="TreesFarthest" unique_id=1566301259] +position = Vector2(291, 80) +texture = ExtResource("4_7hk2w") + +[node name="TreesClosest" type="Parallax2D" parent="." unique_id=510673686] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -176) +repeat_size = Vector2(320, 0) +repeat_times = 10 + +[node name="Sprite2D" type="Sprite2D" parent="TreesClosest" unique_id=1041505745] +position = Vector2(291, 80) +texture = ExtResource("5_u651t") + +[node name="Bottom" type="Node2D" parent="." unique_id=459555776] + +[node name="TreeColor" type="Parallax2D" parent="Bottom" unique_id=1907225585] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -172) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Bottom/TreeColor" unique_id=623469261] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor2" type="Parallax2D" parent="Bottom" unique_id=407485850] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -114) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Bottom/TreeColor2" unique_id=711993537] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor3" type="Parallax2D" parent="Bottom" unique_id=1435380270] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -57) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Bottom/TreeColor3" unique_id=1910007757] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor4" type="Parallax2D" parent="Bottom" unique_id=1591812674] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, 1) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Bottom/TreeColor4" unique_id=1977769823] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="Top" type="Node2D" parent="." unique_id=685349063] +position = Vector2(0, -563) + +[node name="TreeColor" type="Parallax2D" parent="Top" unique_id=1080823883] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -172) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Top/TreeColor" unique_id=1405529693] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor2" type="Parallax2D" parent="Top" unique_id=2138120073] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -114) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Top/TreeColor2" unique_id=595757712] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor3" type="Parallax2D" parent="Top" unique_id=38076199] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, -57) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Top/TreeColor3" unique_id=1739542178] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") + +[node name="TreeColor4" type="Parallax2D" parent="Top" unique_id=59467353] +scale = Vector2(2, 2) +scroll_scale = Vector2(0.6, 0.6) +scroll_offset = Vector2(0, 1) +repeat_size = Vector2(32, 0) +repeat_times = 50 + +[node name="Sprite2D" type="Sprite2D" parent="Top/TreeColor4" unique_id=578425012] +position = Vector2(291, 171.5) +texture = SubResource("AtlasTexture_7vq3v") diff --git a/scenes/components/death_screen.tscn b/scenes/components/death_screen.tscn index 2d9907b..f7c2f20 100644 --- a/scenes/components/death_screen.tscn +++ b/scenes/components/death_screen.tscn @@ -187,7 +187,7 @@ offset_left = 100.0 offset_top = 57.0 offset_right = 221.0 offset_bottom = 80.0 -text = "Your village is destroyed" +text = "Your world is doomed..." label_settings = SubResource("LabelSettings_uvqlf") [node name="OptionsContainer" type="HBoxContainer" parent="." unique_id=1799996589] diff --git a/scenes/components/death_zone.gd b/scenes/components/death_zone.gd new file mode 100644 index 0000000..e21beb9 --- /dev/null +++ b/scenes/components/death_zone.gd @@ -0,0 +1,11 @@ +class_name DeathZone +extends Area2D + +func _ready() -> void: + body_entered.connect(_on_body_entered) + +func _on_body_entered(body: Node2D) -> void: + if not body.is_in_group("player"): + return + + body.kill() diff --git a/scenes/components/death_zone.gd.uid b/scenes/components/death_zone.gd.uid new file mode 100644 index 0000000..df02a97 --- /dev/null +++ b/scenes/components/death_zone.gd.uid @@ -0,0 +1 @@ +uid://b46yvlpicvroi diff --git a/scenes/components/death_zone.tscn b/scenes/components/death_zone.tscn new file mode 100644 index 0000000..9f965c5 --- /dev/null +++ b/scenes/components/death_zone.tscn @@ -0,0 +1,14 @@ +[gd_scene format=3 uid="uid://1hchobb5w872"] + +[ext_resource type="Script" uid="uid://b46yvlpicvroi" path="res://scenes/components/death_zone.gd" id="1_coors"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uvqlf"] +size = Vector2(20, 2) + +[node name="DeathZone" type="Area2D" unique_id=1427209714] +collision_layer = 0 +collision_mask = 16 +script = ExtResource("1_coors") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1932312666] +shape = SubResource("RectangleShape2D_uvqlf") diff --git a/scenes/components/health_component.gd b/scenes/components/health_component.gd index 74875c1..945032c 100644 --- a/scenes/components/health_component.gd +++ b/scenes/components/health_component.gd @@ -21,6 +21,13 @@ func take_damage(amount: int) -> void: if current_health == 0: died.emit() +func kill() -> void: + if current_health <= 0: + return + current_health = 0 + health_changed.emit(current_health, max_health) + died.emit() + func heal(amount: int) -> void: if current_health <= 0: return diff --git a/scenes/components/intro.gd b/scenes/components/intro.gd index 75b5dd7..b9bd375 100644 --- a/scenes/components/intro.gd +++ b/scenes/components/intro.gd @@ -37,7 +37,7 @@ func _play_sequence() -> void: await tween.finished if OS.get_name() == "Web": JavaScriptBridge.eval("document.querySelector('canvas').focus()") - SceneManager.change_scene("res://scenes/levels/test_map.tscn") + SceneManager.change_scene("res://scenes/levels/act1_section1.tscn") func _type_line(line: String) -> void: for i in line.length(): diff --git a/scenes/components/loading_zone.gd b/scenes/components/loading_zone.gd new file mode 100644 index 0000000..45a9007 --- /dev/null +++ b/scenes/components/loading_zone.gd @@ -0,0 +1,27 @@ +class_name LoadingZone +extends Area2D + +@export var target_scene: String +@export var fade_duration: float = 0.6 + +@onready var fade_rect: ColorRect = $TransitionLayer/FadeRect + +var _transitioning: bool = false + +func _ready() -> void: + fade_rect.modulate.a = 0.0 + body_entered.connect(_on_body_entered) + +func _on_body_entered(body: Node2D) -> void: + if _transitioning: + return + if body.is_in_group("player"): + _transitioning = true + _start_transition() + +func _start_transition() -> void: + var tween: Tween = create_tween() + tween.tween_property(fade_rect, "modulate:a", 1.0, fade_duration) + tween.tween_callback(func(): + SceneManager.change_scene(target_scene) + ) diff --git a/scenes/components/loading_zone.gd.uid b/scenes/components/loading_zone.gd.uid new file mode 100644 index 0000000..df5c7ef --- /dev/null +++ b/scenes/components/loading_zone.gd.uid @@ -0,0 +1 @@ +uid://cos2txuudx46i diff --git a/scenes/components/loading_zone.tscn b/scenes/components/loading_zone.tscn new file mode 100644 index 0000000..d812a49 --- /dev/null +++ b/scenes/components/loading_zone.tscn @@ -0,0 +1,23 @@ +[gd_scene format=3 uid="uid://b1peufx15gr0v"] + +[ext_resource type="Script" uid="uid://cos2txuudx46i" path="res://scenes/components/loading_zone.gd" id="1_o8kyb"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_re8oc"] + +[node name="LoadingZone" type="Area2D" unique_id=2123510357] +collision_layer = 32 +collision_mask = 16 +script = ExtResource("1_o8kyb") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=289173289] +shape = SubResource("RectangleShape2D_re8oc") + +[node name="TransitionLayer" type="CanvasLayer" parent="." unique_id=1179968082] + +[node name="FadeRect" type="ColorRect" parent="TransitionLayer" unique_id=820434324] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) diff --git a/scenes/components/locked_door.gd b/scenes/components/locked_door.gd new file mode 100644 index 0000000..7a0cba8 --- /dev/null +++ b/scenes/components/locked_door.gd @@ -0,0 +1,25 @@ +class_name LockedDoor +extends StaticBody2D + +@onready var sprites: Node2D = $Sprites +@onready var collision: CollisionShape2D = $CollisionShape2D + +var is_locked: bool = true +var _remaining_enemies: int = 0 + +func _ready() -> void: + _remaining_enemies = get_tree().get_nodes_in_group("enemies").size() + if _remaining_enemies <= 0: + unlock() + return + EventBus.enemy_defeated.connect(_on_enemy_defeated) + +func unlock() -> void: + is_locked = false + collision.set_deferred("disabled", true) + sprites.set_deferred("visible", false) + +func _on_enemy_defeated() -> void: + _remaining_enemies -= 1 + if _remaining_enemies <= 0: + unlock() diff --git a/scenes/components/locked_door.gd.uid b/scenes/components/locked_door.gd.uid new file mode 100644 index 0000000..9f4e6a2 --- /dev/null +++ b/scenes/components/locked_door.gd.uid @@ -0,0 +1 @@ +uid://cumhttbwlgl3j diff --git a/scenes/components/locked_door.tscn b/scenes/components/locked_door.tscn new file mode 100644 index 0000000..ffe81c9 --- /dev/null +++ b/scenes/components/locked_door.tscn @@ -0,0 +1,38 @@ +[gd_scene format=3 uid="uid://d4b83qphgfteg"] + +[ext_resource type="Script" uid="uid://cumhttbwlgl3j" path="res://scenes/components/locked_door.gd" id="1_jmpw1"] +[ext_resource type="Texture2D" uid="uid://ni137ub3dv35" path="res://assets/images/sprites/World/Dungeon/Assets.png" id="1_ru2lp"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uvqlf"] +atlas = ExtResource("1_ru2lp") +region = Rect2(144, 80, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gy2im"] +atlas = ExtResource("1_ru2lp") +region = Rect2(144, 80, 16, 16) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_jmpw1"] +size = Vector2(32, 32) + +[node name="LockedDoor" type="StaticBody2D" unique_id=1484919877] +scale = Vector2(2, 2) +script = ExtResource("1_jmpw1") + +[node name="Sprites" type="Node2D" parent="." unique_id=603393104] + +[node name="Sprite2D" type="Sprite2D" parent="Sprites" unique_id=1935008767] +position = Vector2(0, 8) +texture = SubResource("AtlasTexture_uvqlf") + +[node name="Sprite2D2" type="Sprite2D" parent="Sprites" unique_id=40066545] +position = Vector2(-8, -8) +texture = SubResource("AtlasTexture_gy2im") +flip_v = true + +[node name="Sprite2D3" type="Sprite2D" parent="Sprites" unique_id=238618661] +position = Vector2(8, -8) +texture = SubResource("AtlasTexture_gy2im") +flip_v = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1726718467] +shape = SubResource("RectangleShape2D_jmpw1") diff --git a/scenes/components/spikes.gd b/scenes/components/spikes.gd new file mode 100644 index 0000000..8458aca --- /dev/null +++ b/scenes/components/spikes.gd @@ -0,0 +1,69 @@ +class_name Spikes +extends Area2D + +enum OrientationEnum { BOTTOM, TOP, LEFT, RIGHT } +enum State { NORMAL, BLOOD } + +const _COLLISION_OFFSET: float = 3.0 + +@export var orientation: OrientationEnum = OrientationEnum.BOTTOM + +@export var _normal_bottom: Texture2D +@export var _normal_top: Texture2D +@export var _normal_left: Texture2D +@export var _normal_right: Texture2D + +@export var _blood_bottom: Texture2D +@export var _blood_top: Texture2D +@export var _blood_left: Texture2D +@export var _blood_right: Texture2D + +@onready var _sprite: Sprite2D = $Sprite2D +@onready var _collision: CollisionShape2D = $CollisionShape2D + +var _state: State = State.NORMAL + +func _ready() -> void: + body_entered.connect(_on_body_entered) + if global_position in EventBus.triggered_spike_positions: + _state = State.BLOOD + _update_visuals() + +func _on_body_entered(body: Node2D) -> void: + if _state == State.BLOOD or not body.is_in_group("player"): + return + + _state = State.BLOOD + EventBus.triggered_spike_positions.append(global_position) + _update_visuals() + body.kill() + +func _update_visuals() -> void: + if not is_node_ready(): + return + _sprite.texture = _get_texture() + _update_collision_transform() + +func _get_texture() -> Texture2D: + var textures_by_orientation: Dictionary = { + OrientationEnum.BOTTOM: [_normal_bottom, _blood_bottom], + OrientationEnum.TOP: [_normal_top, _blood_top], + OrientationEnum.LEFT: [_normal_left, _blood_left], + OrientationEnum.RIGHT: [_normal_right, _blood_right], + } + return textures_by_orientation[orientation][_state] + +func _update_collision_transform() -> void: + match orientation: + OrientationEnum.BOTTOM: + _collision.rotation_degrees = 0.0 + _collision.position = Vector2(0.0, _COLLISION_OFFSET) + OrientationEnum.TOP: + _collision.rotation_degrees = 0.0 + _collision.position = Vector2(0.0, -_COLLISION_OFFSET) + OrientationEnum.LEFT: + _collision.rotation_degrees = 90.0 + _collision.position = Vector2(_COLLISION_OFFSET, 0.0) + OrientationEnum.RIGHT: + _collision.rotation_degrees = 90.0 + _collision.position = Vector2(-_COLLISION_OFFSET, 0.0) diff --git a/scenes/components/spikes.gd.uid b/scenes/components/spikes.gd.uid new file mode 100644 index 0000000..40f1691 --- /dev/null +++ b/scenes/components/spikes.gd.uid @@ -0,0 +1 @@ +uid://ccfj56uv1gnog diff --git a/scenes/components/spikes.tscn b/scenes/components/spikes.tscn new file mode 100644 index 0000000..5981274 --- /dev/null +++ b/scenes/components/spikes.tscn @@ -0,0 +1,64 @@ +[gd_scene format=3 uid="uid://dero2u4tw7mma"] + +[ext_resource type="Texture2D" uid="uid://ni137ub3dv35" path="res://assets/images/sprites/World/Dungeon/Assets.png" id="1_ee87c"] +[ext_resource type="Script" uid="uid://ccfj56uv1gnog" path="res://scenes/components/spikes.gd" id="1_o3ybu"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_oh8dj"] +atlas = ExtResource("1_ee87c") +region = Rect2(80, 96, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0lj84"] +atlas = ExtResource("1_ee87c") +region = Rect2(80, 128, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qxjwf"] +atlas = ExtResource("1_ee87c") +region = Rect2(64, 112, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y8as3"] +atlas = ExtResource("1_ee87c") +region = Rect2(96, 112, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mvi1o"] +atlas = ExtResource("1_ee87c") +region = Rect2(80, 144, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ub2ag"] +atlas = ExtResource("1_ee87c") +region = Rect2(80, 176, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lrx8b"] +atlas = ExtResource("1_ee87c") +region = Rect2(64, 160, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nenug"] +atlas = ExtResource("1_ee87c") +region = Rect2(96, 160, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uvqlf"] +atlas = ExtResource("1_ee87c") +region = Rect2(80, 96, 16, 16) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_gy2im"] +size = Vector2(16, 10) + +[node name="Spikes" type="Area2D" unique_id=71118229] +scale = Vector2(2, 2) +collision_layer = 0 +collision_mask = 16 +script = ExtResource("1_o3ybu") +_normal_bottom = SubResource("AtlasTexture_oh8dj") +_normal_top = SubResource("AtlasTexture_0lj84") +_normal_left = SubResource("AtlasTexture_qxjwf") +_normal_right = SubResource("AtlasTexture_y8as3") +_blood_bottom = SubResource("AtlasTexture_mvi1o") +_blood_top = SubResource("AtlasTexture_ub2ag") +_blood_left = SubResource("AtlasTexture_lrx8b") +_blood_right = SubResource("AtlasTexture_nenug") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=774749416] +texture = SubResource("AtlasTexture_uvqlf") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=684882153] +position = Vector2(0, 3) +shape = SubResource("RectangleShape2D_gy2im") diff --git a/scenes/levels/act1_section1.tscn b/scenes/levels/act1_section1.tscn new file mode 100644 index 0000000..5de452b --- /dev/null +++ b/scenes/levels/act1_section1.tscn @@ -0,0 +1,244 @@ +[gd_scene format=4 uid="uid://cg5gu0jo5qm8v"] + +[ext_resource type="TileSet" uid="uid://bf70pewkmg5hy" path="res://ressources/dungeon_tileset.tres" id="1_e8gwx"] +[ext_resource type="PackedScene" uid="uid://j5y1pb8t167t" path="res://scenes/components/background.tscn" id="1_ia566"] +[ext_resource type="TileSet" uid="uid://6ltrd6lvydrw" path="res://ressources/forest_tileset.tres" id="2_k7tos"] +[ext_resource type="PackedScene" uid="uid://51vdlyyqiph" path="res://scenes/components/checkpoint.tscn" id="3_joeeb"] +[ext_resource type="PackedScene" uid="uid://kfcguhpc7lvd" path="res://scenes/actors/player.tscn" id="4_ia566"] +[ext_resource type="Texture2D" uid="uid://uxtomds5wl0e" path="res://assets/images/sprites/World/Forest/Props/Props.png" id="4_va773"] +[ext_resource type="PackedScene" uid="uid://dero2u4tw7mma" path="res://scenes/components/spikes.tscn" id="6_x8iln"] +[ext_resource type="PackedScene" uid="uid://cr7ibxkl174o1" path="res://scenes/actors/Creeper.tscn" id="8_fki07"] +[ext_resource type="PackedScene" uid="uid://1hchobb5w872" path="res://scenes/components/death_zone.tscn" id="9_l10gw"] +[ext_resource type="PackedScene" uid="uid://3bhkncvwd7fa" path="res://scenes/ui/player_hud.tscn" id="10_4nly6"] +[ext_resource type="PackedScene" uid="uid://d4b83qphgfteg" path="res://scenes/components/locked_door.tscn" id="11_8fhh5"] +[ext_resource type="PackedScene" uid="uid://c7nx1jvktqxvv" path="res://scenes/ui/enemy_counter_hud.tscn" id="11_koyf0"] +[ext_resource type="PackedScene" uid="uid://b1peufx15gr0v" path="res://scenes/components/loading_zone.tscn" id="13_wmlmk"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uvqlf"] +atlas = ExtResource("4_va773") +region = Rect2(0, 0, 64, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fki07"] +atlas = ExtResource("4_va773") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_va773"] +atlas = ExtResource("4_va773") +region = Rect2(104, 0, 48, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gy2im"] +atlas = ExtResource("4_va773") +region = Rect2(160, 0, 32, 32) + +[node name="Act1Section1" type="Node2D" unique_id=1669300377] + +[node name="DeathZone" parent="." unique_id=1427209714 instance=ExtResource("9_l10gw")] +scale = Vector2(2000, 1) + +[node name="Background" parent="." unique_id=105665021 instance=ExtResource("1_ia566")] +position = Vector2(8, -144) + +[node name="Dungeon" type="TileMapLayer" parent="." unique_id=807967258] +position = Vector2(-12, 0) +scale = Vector2(2, 2) +tile_map_data = PackedByteArray("AAAAAPH/AAAFAAEAAAAAAPL/AAAFAAEAAAAAAPP/AAAFAAEAAAAAAPT/AAAFAAEAAAAAAPX/AAAFAAEAAAAAAPb/AAAFAAEAAAAAAPf/AAAFAAEAAAAAAPj/AAAFAAEAAAAAAPn/AAAFAAEAAAAAAPr/AAAFAAEAAAAAAPv/AAAFAAEAAAAAAPz/AAAFAAEAAAAAAP3/AAAFAAEAAAAAAP7/AAAFAAEAAAAAAP//AAAFAAEAAAAAAPD/AAAEAAAAAAAAAO//AAAEAAAAAAAAAO7/AAAEAAAAAAAAAO3/AAAEAAAAAAAAAOz/AAAEAAAAAAAAAOv/AAAEAAAAAAAAAOr/AAAEAAAAAAAAAOn/AAAEAAAAAAAAAOj/AAAEAAAAAAABAOj/AAAEAAAAAAACAOj/AAAEAAAAAAADAOj/AAAEAAAAAAAEAOj/AAAEAAAAAAAFAOj/AAAEAAAAAAAGAOj/AAAEAAAAAAAHAOj/AAAEAAAAAAAIAOj/AAAEAAAAAAAJAOj/AAAEAAAAAAAKAOj/AAAEAAAAAAALAOj/AAAEAAAAAAAMAOj/AAAEAAAAAAANAOj/AAAEAAAAAAAOAOj/AAAEAAAAAAAPAOj/AAAEAAAAAAAQAOj/AAAEAAAAAAARAOj/AAAEAAAAAAASAOj/AAAEAAAAAAATAOj/AAAEAAAAAAAUAOj/AAAEAAAAAAAVAOj/AAAEAAAAAAAWAOj/AAAEAAAAAAAXAOj/AAAEAAAAAAAYAOj/AAAEAAAAAAAZAOj/AAAEAAAAAAAaAOj/AAAEAAAAAAAbAOj/AAAEAAAAAAAcAOj/AAAEAAAAAAAdAOj/AAAEAAAAAAAeAOj/AAAEAAAAAAAfAOj/AAAEAAAAAAAgAOj/AAAEAAAAAAAhAOj/AAAEAAAAAAAiAOj/AAAEAAAAAAAjAOj/AAAEAAAAAAAkAOj/AAAEAAAAAAAlAOj/AAAEAAAAAAAmAOj/AAAEAAAAAAAnAOj/AAAEAAAAAAAoAOj/AAAEAAAAAAApAOj/AAAEAAAAAAAqAOj/AAAEAAAAAAArAOj/AAAEAAAAAAAsAOj/AAAEAAAAAAAtAOj/AAAEAAAAAAAuAOj/AAAEAAAAAAAuAOn/AAAEAAAAAAAuAOr/AAAEAAAAAAAuAOv/AAAEAAAAAAAuAOz/AAAEAAAAAAAuAO3/AAAEAAAAAAAuAO7/AAAEAAAAAAAuAO//AAAEAAAAAAAuAPD/AAAEAAAAAAAuAPH/AAAEAAAAAAAuAPL/AAAEAAAAAAAuAPP/AAAEAAAAAAAuAPT/AAAEAAAAAAAuAPX/AAAEAAAAAAAuAPb/AAAEAAAAAAAuAPf/AAAEAAAAAAAuAPj/AAAEAAAAAAAuAPn/AAAEAAAAAAA=") +tile_set = ExtResource("1_e8gwx") +rendering_quadrant_size = 32 + +[node name="Dungeon2" type="TileMapLayer" parent="." unique_id=1173418804] +position = Vector2(-25, 0) +scale = Vector2(2, 2) +tile_map_data = PackedByteArray("AAAAAPH/AAAFAAEAAAAAAPL/AAAFAAEAAAAAAPP/AAAFAAEAAAAAAPT/AAAFAAEAAAAAAPX/AAAFAAEAAAAAAPb/AAAFAAEAAAAAAPf/AAAFAAEAAAAAAPj/AAAFAAEAAAAAAPn/AAAFAAEAAAAAAPr/AAAFAAEAAAAAAPv/AAAFAAEAAAAAAPz/AAAFAAEAAAAAAP3/AAAFAAEAAAAAAP7/AAAFAAEAAAAAAP//AAAFAAEAAAAAAPD/AAAEAAAAAAAAAO//AAAEAAAAAAAAAO7/AAAEAAAAAAAAAO3/AAAEAAAAAAAAAOz/AAAEAAAAAAAAAOv/AAAEAAAAAAAAAOr/AAAEAAAAAAAAAOn/AAAEAAAAAAAAAOj/AAAEAAAAAAABAOj/AAAEAAAAAAACAOj/AAAEAAAAAAADAOj/AAAEAAAAAAAEAOj/AAAEAAAAAAAFAOj/AAAEAAAAAAAGAOj/AAAEAAAAAAAHAOj/AAAEAAAAAAAIAOj/AAAEAAAAAAAJAOj/AAAEAAAAAAAKAOj/AAAEAAAAAAALAOj/AAAEAAAAAAAMAOj/AAAEAAAAAAANAOj/AAAEAAAAAAAOAOj/AAAEAAAAAAAPAOj/AAAEAAAAAAAQAOj/AAAEAAAAAAARAOj/AAAEAAAAAAASAOj/AAAEAAAAAAATAOj/AAAEAAAAAAAUAOj/AAAEAAAAAAAVAOj/AAAEAAAAAAAWAOj/AAAEAAAAAAAXAOj/AAAEAAAAAAAYAOj/AAAEAAAAAAAZAOj/AAAEAAAAAAAaAOj/AAAEAAAAAAAbAOj/AAAEAAAAAAAcAOj/AAAEAAAAAAAdAOj/AAAEAAAAAAAeAOj/AAAEAAAAAAAfAOj/AAAEAAAAAAAgAOj/AAAEAAAAAAAhAOj/AAAEAAAAAAAiAOj/AAAEAAAAAAAjAOj/AAAEAAAAAAAkAOj/AAAEAAAAAAAlAOj/AAAEAAAAAAAmAOj/AAAEAAAAAAAnAOj/AAAEAAAAAAAoAOj/AAAEAAAAAAApAOj/AAAEAAAAAAAqAOj/AAAEAAAAAAArAOj/AAAEAAAAAAAsAOj/AAAEAAAAAAAtAOj/AAAEAAAAAAAuAOj/AAAEAAAAAAAuAOn/AAAEAAAAAAAuAOr/AAAEAAAAAAAuAOv/AAAEAAAAAAAuAOz/AAAEAAAAAAAuAO3/AAAEAAAAAAAuAO7/AAAEAAAAAAAuAO//AAAEAAAAAAAuAPD/AAAEAAAAAAAuAPH/AAAEAAAAAAAuAPL/AAAEAAAAAAAuAPP/AAAEAAAAAAAuAPT/AAAEAAAAAAAuAPX/AAAEAAAAAAAuAPb/AAAEAAAAAAAuAPf/AAAEAAAAAAAuAPj/AAAEAAAAAAAuAPn/AAAEAAAAAAA=") +tile_set = ExtResource("1_e8gwx") +rendering_quadrant_size = 32 + +[node name="ForestFix" type="TileMapLayer" parent="." unique_id=2127208467] +tile_map_data = PackedByteArray("AAAAAPz/AQADAAIAAAAAAPv/AQAMAAIAAAAAAPr/AQAGAAIAAAAAAPn/AQADAAIAAAAAAPj/AQANAAcAAAAAAPf/AQADAAIAAAAAAPb/AQAMAAIAAAAAAPX/AQAMAAIAAAAAAPT/AQAIAAcAAAAAAPP/AQAIAAcAAAAAAPL/AQANAAcAAAAAAPH/AQADAAIAAAA=") +tile_set = ExtResource("2_k7tos") + +[node name="Forest" type="TileMapLayer" parent="." unique_id=1468579245] +tile_map_data = PackedByteArray("AAAIAPz/AQACAAEAAAAJAPz/AQAMAAYAAAAKAPz/AQAHAAYAAAARAPz/AQACAAcAAAAAAPz/AQADAAcAAAABAPz/AQAHAAYAAAACAPz/AQAMAAEAAAAGAPz/AQACAAEAAAAHAPz/AQAHAAYAAAALAPz/AQACAAEAAAAMAPz/AQAHAAYAAAANAPz/AQAMAAYAAAAOAPz/AQAMAAYAAAAPAPz/AQAMAAYAAAAQAPz/AQAHAAYAAAARAPv/AQACAAYAAAARAP//AQAHAAcAAAARAP7/AQAMAAcAAAARAP3/AQAMAAcAAAAQAP//AQAMAAcAAAAQAP7/AQAMAAcAAAAQAP3/AQAMAAcAAAAPAP//AQAMAAcAAAAPAP7/AQAHAAcAAAAPAP3/AQAHAAcAAAAOAP//AQACAAIAAAAOAP7/AQACAAIAAAAOAP3/AQAHAAcAAAANAP//AQAHAAcAAAANAP7/AQACAAIAAAANAP3/AQAMAAcAAAAMAP//AQAHAAcAAAAMAP7/AQAMAAcAAAAMAP3/AQACAAIAAAALAP//AQAMAAcAAAALAP7/AQAMAAcAAAALAP3/AQACAAIAAAAKAP//AQACAAIAAAAKAP7/AQACAAIAAAAKAP3/AQAHAAcAAAAJAP//AQAHAAcAAAAJAP7/AQACAAIAAAAJAP3/AQAHAAcAAAAIAP//AQACAAIAAAAIAP7/AQAHAAcAAAAIAP3/AQAMAAcAAAAHAP//AQAMAAcAAAAHAP7/AQACAAIAAAAHAP3/AQAHAAcAAAAGAP//AQACAAIAAAAGAP7/AQACAAIAAAAGAP3/AQACAAIAAAAFAP3/AQAGAAcAAAABAP//AQAMAAcAAAABAP7/AQAHAAcAAAABAP3/AQAMAAcAAAAAAP//AQAMAAcAAAAAAP7/AQACAAIAAAAAAP3/AQAHAAcAAAAAAPv/AQAGAAIAAAAAAPr/AQANAAcAAAAAAPn/AQAGAAYAAAAAAPf/AQARAAcAAAAAAPb/AQAMAAIAAAAAAPX/AQAGAAYAAAAAAPT/AQAIAAcAAAAAAPP/AQAIAAcAAAAAAPL/AQANAAcAAAAAAPH/AQAGAAYAAAABAPn/AQAHAAMAAAACAPn/AQANAAMAAAAFAP7/AQABAAIAAAAFAP//AQALAAIAAAAFAPz/AQALAAEAAAABAPX/AQAHAAMA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") +tile_set = ExtResource("2_k7tos") + +[node name="Props" type="Node2D" parent="." unique_id=1502482168] + +[node name="LotGrassGroup" type="Node2D" parent="Props" unique_id=706732047] + +[node name="LotGrass" type="Sprite2D" parent="Props/LotGrassGroup" unique_id=2123053316] +position = Vector2(272, -141) +texture = SubResource("AtlasTexture_uvqlf") + +[node name="LotGrass2" type="Sprite2D" parent="Props/LotGrassGroup" unique_id=1922119290] +position = Vector2(56, -365) +texture = SubResource("AtlasTexture_uvqlf") + +[node name="Herbs" type="Node2D" parent="Props" unique_id=2044159453] +position = Vector2(352, -138) + +[node name="Herb" type="Sprite2D" parent="Props/Herbs" unique_id=976791417] +position = Vector2(0, -3) +texture = SubResource("AtlasTexture_fki07") + +[node name="Bushes" type="Node2D" parent="Props" unique_id=1175006070] +position = Vector2(352, -135) + +[node name="Bush" type="Sprite2D" parent="Props/Bushes" unique_id=1374018497] +position = Vector2(-112, -166) +texture = SubResource("AtlasTexture_va773") + +[node name="Bush2" type="Sprite2D" parent="Props/Bushes" unique_id=449528719] +position = Vector2(-32, -294) +texture = SubResource("AtlasTexture_va773") + +[node name="Bush3" type="Sprite2D" parent="Props/Bushes" unique_id=1689397593] +position = Vector2(184, -422) +texture = SubResource("AtlasTexture_va773") + +[node name="Rocks" type="Node2D" parent="Props" unique_id=1793866375] + +[node name="Rock" type="Sprite2D" parent="Props/Rocks" unique_id=1035018426] +position = Vector2(664, -557) +texture = SubResource("AtlasTexture_gy2im") + +[node name="Rock2" type="Sprite2D" parent="Props/Rocks" unique_id=939335478] +position = Vector2(456, -141) +texture = SubResource("AtlasTexture_gy2im") + +[node name="Checkpoints" type="Node2D" parent="." unique_id=1445246737] + +[node name="Checkpoint" parent="Checkpoints" unique_id=1489150355 instance=ExtResource("3_joeeb")] +position = Vector2(303, -190) + +[node name="Traps" type="Node2D" parent="." unique_id=1273214309] + +[node name="Spikes" parent="Traps" unique_id=71118229 instance=ExtResource("6_x8iln")] +position = Vector2(112, -48) + +[node name="Spikes2" parent="Traps" unique_id=1200759443 instance=ExtResource("6_x8iln")] +position = Vector2(144, -48) + +[node name="Spikes3" parent="Traps" unique_id=124035967 instance=ExtResource("6_x8iln")] +position = Vector2(592, -48) + +[node name="Spikes4" parent="Traps" unique_id=803934191 instance=ExtResource("6_x8iln")] +position = Vector2(624, -48) + +[node name="Spikes5" parent="Traps" unique_id=590823485 instance=ExtResource("6_x8iln")] +position = Vector2(656, -48) + +[node name="Spikes6" parent="Traps" unique_id=528537291 instance=ExtResource("6_x8iln")] +position = Vector2(688, -48) + +[node name="Spikes7" parent="Traps" unique_id=1947107436 instance=ExtResource("6_x8iln")] +position = Vector2(720, -48) + +[node name="Spikes8" parent="Traps" unique_id=431328983 instance=ExtResource("6_x8iln")] +position = Vector2(752, -48) + +[node name="Spikes9" parent="Traps" unique_id=253751904 instance=ExtResource("6_x8iln")] +position = Vector2(784, -48) + +[node name="Spikes10" parent="Traps" unique_id=954212770 instance=ExtResource("6_x8iln")] +position = Vector2(816, -48) + +[node name="Spikes11" parent="Traps" unique_id=1387445408 instance=ExtResource("6_x8iln")] +position = Vector2(848, -48) + +[node name="Spikes12" parent="Traps" unique_id=480326600 instance=ExtResource("6_x8iln")] +position = Vector2(880, -48) + +[node name="Spikes13" parent="Traps" unique_id=1884187309 instance=ExtResource("6_x8iln")] +position = Vector2(912, -48) + +[node name="Spikes14" parent="Traps" unique_id=1983449457 instance=ExtResource("6_x8iln")] +position = Vector2(944, -48) + +[node name="Spikes15" parent="Traps" unique_id=226511798 instance=ExtResource("6_x8iln")] +position = Vector2(976, -48) + +[node name="Spikes16" parent="Traps" unique_id=229501640 instance=ExtResource("6_x8iln")] +position = Vector2(1008, -48) + +[node name="Spikes17" parent="Traps" unique_id=2000406212 instance=ExtResource("6_x8iln")] +position = Vector2(1040, -48) + +[node name="Spikes18" parent="Traps" unique_id=14783170 instance=ExtResource("6_x8iln")] +position = Vector2(1072, -48) + +[node name="Spikes19" parent="Traps" unique_id=1357982563 instance=ExtResource("6_x8iln")] +position = Vector2(1104, -48) + +[node name="Spikes20" parent="Traps" unique_id=1523633114 instance=ExtResource("6_x8iln")] +position = Vector2(1136, -48) + +[node name="Spikes21" parent="Traps" unique_id=1329228866 instance=ExtResource("6_x8iln")] +position = Vector2(1168, -48) + +[node name="Spikes22" parent="Traps" unique_id=509380839 instance=ExtResource("6_x8iln")] +position = Vector2(1200, -48) + +[node name="Spikes23" parent="Traps" unique_id=1439117920 instance=ExtResource("6_x8iln")] +position = Vector2(1232, -48) + +[node name="Spikes24" parent="Traps" unique_id=1899224609 instance=ExtResource("6_x8iln")] +position = Vector2(1264, -48) + +[node name="Spikes25" parent="Traps" unique_id=1899746625 instance=ExtResource("6_x8iln")] +position = Vector2(1328, -560) + +[node name="Spikes26" parent="Traps" unique_id=996792183 instance=ExtResource("6_x8iln")] +position = Vector2(1360, -560) + +[node name="Spikes27" parent="Traps" unique_id=2063896721 instance=ExtResource("6_x8iln")] +position = Vector2(1392, -560) + +[node name="Spikes28" parent="Traps" unique_id=1513662058 instance=ExtResource("6_x8iln")] +position = Vector2(1424, -560) + +[node name="Enemies" type="Node2D" parent="." unique_id=1196252407] + +[node name="Creeper" parent="Enemies" unique_id=1458442942 instance=ExtResource("8_fki07")] +position = Vector2(520, -128) + +[node name="Creeper3" parent="Enemies" unique_id=1787666164 instance=ExtResource("8_fki07")] +position = Vector2(736, -96) + +[node name="Creeper5" parent="Enemies" unique_id=1441344631 instance=ExtResource("8_fki07")] +position = Vector2(848, -96) + +[node name="Creeper4" parent="Enemies" unique_id=531380718 instance=ExtResource("8_fki07")] +position = Vector2(936, -96) + +[node name="Creeper2" parent="Enemies" unique_id=811948699 instance=ExtResource("8_fki07")] +position = Vector2(728, -544) + +[node name="Creeper6" parent="Enemies" unique_id=768013266 instance=ExtResource("8_fki07")] +position = Vector2(1328, -672) + +[node name="Creeper7" parent="Enemies" unique_id=1643842634 instance=ExtResource("8_fki07")] +position = Vector2(1104, -672) + +[node name="Player" parent="." unique_id=1267310378 instance=ExtResource("4_ia566")] +position = Vector2(301, -189) + +[node name="Camera2D2" type="Camera2D" parent="Player" unique_id=1612936842] +offset = Vector2(0, -40) +zoom = Vector2(0.8, 0.8) +limit_left = 0 +limit_top = -750 +limit_right = 1500 +limit_bottom = 0 +position_smoothing_enabled = true + +[node name="HUD" parent="Player" unique_id=409721474 instance=ExtResource("10_4nly6")] + +[node name="EnemyCounterHUD" parent="Player" unique_id=310432902 instance=ExtResource("11_koyf0")] + +[node name="LockedDoor" parent="." unique_id=1484919877 instance=ExtResource("11_8fhh5")] +position = Vector2(1472, -160) + +[node name="LoadingZone" parent="." unique_id=2123510357 instance=ExtResource("13_wmlmk")] +position = Vector2(1496, -160) +scale = Vector2(1, 3) +collision_mask = 2 +target_scene = "res://scenes/levels/test_map.tscn" diff --git a/scenes/levels/test_map.tscn b/scenes/levels/test_map.tscn index cc83350..8221422 100644 --- a/scenes/levels/test_map.tscn +++ b/scenes/levels/test_map.tscn @@ -1,45 +1,18 @@ [gd_scene format=4 uid="uid://dili4w3og4jtf"] -[ext_resource type="Texture2D" uid="uid://dapligyg1q7vd" path="res://assets/images/sprites/World/Background/Wasteland_Sky.png" id="1_74xmw"] +[ext_resource type="PackedScene" uid="uid://j5y1pb8t167t" path="res://scenes/components/background.tscn" id="1_puiec"] [ext_resource type="TileSet" uid="uid://bf70pewkmg5hy" path="res://ressources/dungeon_tileset.tres" id="1_rp362"] -[ext_resource type="PackedScene" uid="uid://cwq8mu0hub5qd" path="res://scenes/actors/entity.tscn" id="1_yio6f"] [ext_resource type="TileSet" uid="uid://6ltrd6lvydrw" path="res://ressources/forest_tileset.tres" id="1_ymjof"] -[ext_resource type="Texture2D" uid="uid://bk41feg0qdi0t" path="res://assets/images/sprites/World/Background/Wasteland_Mountains_1.png" id="2_ni5vy"] [ext_resource type="PackedScene" uid="uid://kfcguhpc7lvd" path="res://scenes/actors/player.tscn" id="2_s11cq"] -[ext_resource type="Texture2D" uid="uid://c6nak38doipjr" path="res://assets/images/sprites/World/Forest/Background/2.png" id="3_j22gu"] -[ext_resource type="Texture2D" uid="uid://cdgo042aie21s" path="res://assets/images/sprites/World/Background/Wasteland_Mountains_2.png" id="3_ni5vy"] [ext_resource type="PackedScene" uid="uid://51vdlyyqiph" path="res://scenes/components/checkpoint.tscn" id="3_puiec"] [ext_resource type="PackedScene" uid="uid://cr7ibxkl174o1" path="res://scenes/actors/Creeper.tscn" id="3_ymjof"] [ext_resource type="PackedScene" uid="uid://3bhkncvwd7fa" path="res://scenes/ui/player_hud.tscn" id="4_hud"] -[ext_resource type="Texture2D" uid="uid://cg3d5ub47f3o1" path="res://assets/images/sprites/World/Forest/Background/1.png" id="4_sxxxr"] +[ext_resource type="PackedScene" uid="uid://dero2u4tw7mma" path="res://scenes/components/spikes.tscn" id="8_jw8yd"] [node name="TestMap" type="Node2D" unique_id=935270288] -[node name="WastelandSky" type="Sprite2D" parent="." unique_id=1708089825] -position = Vector2(211, -24) -texture = ExtResource("1_74xmw") - -[node name="WastelandMountains1" type="Sprite2D" parent="." unique_id=135741267] -position = Vector2(212, -22) -texture = ExtResource("2_ni5vy") - -[node name="WastelandMountains2" type="Sprite2D" parent="." unique_id=1362158054] -position = Vector2(207, -29) -texture = ExtResource("3_ni5vy") - -[node name="Entity" parent="." unique_id=286688007 instance=ExtResource("1_yio6f")] -position = Vector2(307, 9) -scale = Vector2(0.5, 0.5) - -[node name="2" type="Sprite2D" parent="." unique_id=448894243] -position = Vector2(296, -23) -scale = Vector2(1.59375, 1.4333333) -texture = ExtResource("3_j22gu") - -[node name="1" type="Sprite2D" parent="." unique_id=1480420697] -position = Vector2(206, -20) -scale = Vector2(1.6375, 1.45) -texture = ExtResource("4_sxxxr") +[node name="Background" parent="." unique_id=105665021 instance=ExtResource("1_puiec")] +position = Vector2(-8, -2) [node name="Dungeon" type="TileMapLayer" parent="." unique_id=2143312221] scale = Vector2(2, 2) @@ -69,3 +42,7 @@ scale = Vector2(1.2, 1.2) position = Vector2(228, 34) [node name="PlayerHUD" parent="." unique_id=1690690477 instance=ExtResource("4_hud")] + +[node name="Spikes" parent="." unique_id=71118229 instance=ExtResource("8_jw8yd")] +position = Vector2(655, -80) +orientation = 1 diff --git a/scenes/ui/enemy_counter_hud.gd b/scenes/ui/enemy_counter_hud.gd new file mode 100644 index 0000000..179dbd7 --- /dev/null +++ b/scenes/ui/enemy_counter_hud.gd @@ -0,0 +1,24 @@ +class_name EnemyCounterHUD +extends CanvasLayer + +@onready var _label: Label = $MarginContainer/Label + +var _remaining_enemies: int = 0 + +func _ready() -> void: + EventBus.enemy_defeated.connect(_on_enemy_defeated) + _count_initial_enemies.call_deferred() + +func _count_initial_enemies() -> void: + _remaining_enemies = get_tree().get_nodes_in_group("enemies").size() + _update_label() + +func _on_enemy_defeated() -> void: + _remaining_enemies = maxi(_remaining_enemies - 1, 0) + _update_label() + +func _update_label() -> void: + if _remaining_enemies <= 0: + visible = false + return + _label.text = "Enemies remaining: %d" % _remaining_enemies diff --git a/scenes/ui/enemy_counter_hud.gd.uid b/scenes/ui/enemy_counter_hud.gd.uid new file mode 100644 index 0000000..cdcfcc3 --- /dev/null +++ b/scenes/ui/enemy_counter_hud.gd.uid @@ -0,0 +1 @@ +uid://dl1pajcurr3b1 diff --git a/scenes/ui/enemy_counter_hud.tscn b/scenes/ui/enemy_counter_hud.tscn new file mode 100644 index 0000000..37d65f9 --- /dev/null +++ b/scenes/ui/enemy_counter_hud.tscn @@ -0,0 +1,30 @@ +[gd_scene format=3 uid="uid://c7nx1jvktqxvv"] + +[ext_resource type="Script" uid="uid://dl1pajcurr3b1" path="res://scenes/ui/enemy_counter_hud.gd" id="1_ec0e5"] +[ext_resource type="FontFile" uid="uid://cqrxu8aj7ih08" path="res://assets/fonts/pixel_font.ttf" id="2_3uwus"] + +[sub_resource type="Theme" id="Theme_wmlmk"] +default_font = ExtResource("2_3uwus") +default_font_size = 16 + +[node name="EnemyCounterHUD" type="CanvasLayer" unique_id=1115869931] +script = ExtResource("1_ec0e5") + +[node name="MarginContainer" type="MarginContainer" parent="." unique_id=944431465] +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -160.0 +offset_top = 2.0 +offset_right = -8.0 +offset_bottom = 26.0 +grow_horizontal = 0 +theme_override_constants/margin_right = 4 + +[node name="Label" type="Label" parent="MarginContainer" unique_id=39337159] +layout_mode = 2 +theme = SubResource("Theme_wmlmk") +theme_override_constants/outline_size = 1 +theme_override_constants/shadow_outline_size = 2 +text = "Enemies remaining: 0" +horizontal_alignment = 2 diff --git a/scenes/ui/player_hud.tscn b/scenes/ui/player_hud.tscn index c87f8f2..5382644 100644 --- a/scenes/ui/player_hud.tscn +++ b/scenes/ui/player_hud.tscn @@ -13,3 +13,4 @@ offset_bottom = 3.0 [node name="HeartsContainer" type="HBoxContainer" parent="MarginContainer" unique_id=315711027] layout_mode = 2 +theme_override_constants/separation = 1 diff --git a/scripts/autoloads/event_bus.gd b/scripts/autoloads/event_bus.gd index 1b936a7..06907cd 100644 --- a/scripts/autoloads/event_bus.gd +++ b/scripts/autoloads/event_bus.gd @@ -3,8 +3,10 @@ extends Node signal player_health_changed(new_value: int, max_value: int) signal player_died signal checkpoint_activated(position: Vector2) +signal enemy_defeated var last_level_path: String = "" var has_checkpoint: bool = false var last_checkpoint_position: Vector2 = Vector2.ZERO var last_death_facing_direction: float = 1.0 +var triggered_spike_positions: Array[Vector2] = []