diff --git a/bugs.md b/bugs.md new file mode 100644 index 0000000..4e4bad5 --- /dev/null +++ b/bugs.md @@ -0,0 +1,10 @@ +# High Priority +- [ ] remote breaking animation not working +- [x] pressing enter causes the platformer channel to restart event after the intiial prompt dismissial +- [ ] lasers not appearing +- [ ] only 1 lane getting warning + + +# Minor +- [ ] score text is infront of the player +- [ ] warning areas are infront of the player diff --git a/game_logic.gd b/game_logic.gd index 0ea937d..028e4ec 100644 --- a/game_logic.gd +++ b/game_logic.gd @@ -61,6 +61,7 @@ func get_ready(): func start_game(): gameplay = true + main_channel.start_channel() func game_loop(delta : float): target_channels += channel_growth_per_min * (delta/60) @@ -82,7 +83,10 @@ func game_loop(delta : float): var random_channel_number = randi_range(0, offline_channels.size()-1) var random_game = randi_range(0, games.size()-1) #offline_channels[random_channel_number].start_channel() - offline_channels[random_channel_number].start_specific_channel(games[random_game]) + if(offline_channels[random_channel_number] != main_channel): + offline_channels[random_channel_number].start_specific_channel(games[random_game]) + else: + main_channel.start_channel() func rec_channel_win(): score += 1 diff --git a/game_manager.gd b/game_manager.gd index df1fc42..9f90057 100644 --- a/game_manager.gd +++ b/game_manager.gd @@ -12,6 +12,8 @@ signal channel_win signal channel_lose signal update_data(score : int, lives : int) signal skip_intro +signal start_platformer +signal end_platformer @export var broken_tv_remote : Texture var are_we_skipping_intro : bool = false @@ -47,6 +49,7 @@ func prepare_for_gaming(): func actually_gaming(): gaming.emit() + start_platformer.emit() func send_update_data(score : int, lives: int): update_data.emit(score, lives) diff --git a/games/platformer/flasher.gd b/games/platformer/flasher.gd new file mode 100644 index 0000000..da61838 --- /dev/null +++ b/games/platformer/flasher.gd @@ -0,0 +1,16 @@ +extends Sprite2D + +var flash_delay : float = 0.3 +var timer :float = 1 + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + timer = flash_delay + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + timer -= delta + if(timer <= 0): + visible = !visible + timer = flash_delay diff --git a/games/platformer/flasher.gd.uid b/games/platformer/flasher.gd.uid new file mode 100644 index 0000000..8aaf9fe --- /dev/null +++ b/games/platformer/flasher.gd.uid @@ -0,0 +1 @@ +uid://bvldm4nv0g3 diff --git a/games/platformer/platformer.gd b/games/platformer/platformer.gd index f4dc65e..a3579c1 100644 --- a/games/platformer/platformer.gd +++ b/games/platformer/platformer.gd @@ -3,21 +3,45 @@ extends Node signal game_win signal game_lose +enum GameStage{ + Warning, # big red highlights (flashing?) show the player where to avoid + Lasers, # the lasers actively firing + None # the starting and ending (offline) state where nothing is happening +} + + +@export var warning_duration = 5 +@export var laser_duration = 2 @export_group("Node References") @export var score_label : Label @export var player : CharacterBody2D @export var skip_location : Marker2D +@export var timer : Timer +@export var warning_areas : Array[Node2D] +@export var laser_areas : Array[Area2D] + +var game_active : bool = false +var stage : GameStage = GameStage.None +var safe_lane : int # 0,1 or 2 - the others will be hit by lasers # Called when the node enters the scene tree for the first time. func _ready() -> void: GameManager.skip_intro.connect(rec_skip_intro) GameManager.update_data.connect(update_ui) + GameManager.start_platformer.connect(start_game) + GameManager.end_platformer.connect(end_game) pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - pass + for i in range(2): + #warning_areas[i].visible = stage == GameStage.Warning and safe_lane!=i + #laser_areas[i].visible = stage == GameStage.Lasers and safe_lane!=i + pass + warning_areas[0].visible = stage == GameStage.Warning + laser_areas[0].visible = stage == GameStage.Lasers + #todo make sure lasers dont trigger the door/remote/event hitboxes func update_ui(score : int, lives :int): score_label.text = str(score) @@ -27,3 +51,22 @@ func rec_skip_intro(): player.global_position = skip_location.global_position #maybe bring up an invis wall behind them but it doesnt matter pass + +func start_game(): + game_active = true + timer.start(warning_duration) + safe_lane = randi_range(0,2) + stage = GameStage.Warning + pass + +func end_game(): + game_active = false + pass + + +func _on_timer_timeout() -> void: + if(stage == GameStage.Warning): + stage = GameStage.Lasers + timer.start(laser_duration) + if(stage == GameStage.Lasers): + stage = GameStage.None diff --git a/games/platformer/platformer.tscn b/games/platformer/platformer.tscn index f46d734..90df04d 100644 --- a/games/platformer/platformer.tscn +++ b/games/platformer/platformer.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=32 format=4 uid="uid://ckbyiwy0dxbsd"] +[gd_scene load_steps=36 format=4 uid="uid://ckbyiwy0dxbsd"] [ext_resource type="Script" uid="uid://dqyddqx8xm0gw" path="res://games/platformer/player.gd" id="1_1wj3w"] [ext_resource type="Script" uid="uid://bs4keltwfbrrn" path="res://games/platformer/platformer.gd" id="1_mauky"] @@ -15,6 +15,9 @@ [ext_resource type="Texture2D" uid="uid://r71wb0u4bsxw" path="res://sprites/broken_tv_remote.png" id="11_vuxiy"] [ext_resource type="Script" uid="uid://bl7sx7fl7ye4a" path="res://games/platformer/tv_remote.gd" id="13_7gl5q"] [ext_resource type="PackedScene" uid="uid://dv4ex5tshavff" path="res://games/platformer/door.tscn" id="14_yphhh"] +[ext_resource type="Texture2D" uid="uid://bvnudttaiaab5" path="res://sprites/platformer_lab_laser.png" id="16_wtveo"] +[ext_resource type="Texture2D" uid="uid://dyfubdnvunea2" path="res://sprites/whiteSqaure.png" id="17_x1jr7"] +[ext_resource type="Script" uid="uid://bvldm4nv0g3" path="res://games/platformer/flasher.gd" id="18_x1jr7"] [sub_resource type="Gradient" id="Gradient_1wj3w"] offsets = PackedFloat32Array(0.0209205, 1) @@ -185,11 +188,17 @@ animations = [{ font_size = 86 font_color = Color(1, 1, 1, 0.439216) -[node name="Platformer" type="Node" node_paths=PackedStringArray("score_label", "player", "skip_location")] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_gyyvr"] +size = Vector2(576, 64) + +[node name="Platformer" type="Node" node_paths=PackedStringArray("score_label", "player", "skip_location", "timer", "warning_areas", "laser_areas")] script = ExtResource("1_mauky") score_label = NodePath("Score") player = NodePath("Player") skip_location = NodePath("IntroSkipLocation") +timer = NodePath("Timer") +warning_areas = [NodePath("Warnings/WarningNode"), NodePath("Warnings/WarningNode2"), NodePath("Warnings/WarningNode3")] +laser_areas = [NodePath("Lasers/LaserSet"), NodePath("Lasers/LaserSet2"), NodePath("Lasers/LaserSet3")] [node name="Parallax2D" type="Parallax2D" parent="."] scroll_scale = Vector2(0, 0) @@ -330,6 +339,106 @@ horizontal_alignment = 1 [node name="IntroSkipLocation" type="Marker2D" parent="."] position = Vector2(-40, 256) +[node name="Timer" type="Timer" parent="."] + +[node name="Lasers" type="Node2D" parent="."] + +[node name="LaserSet" type="Area2D" parent="Lasers"] +visible = false +position = Vector2(40, 40) + +[node name="Sprite2D" type="Sprite2D" parent="Lasers/LaserSet"] +position = Vector2(280, 8) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="Sprite2D2" type="Sprite2D" parent="Lasers/LaserSet"] +position = Vector2(280, 40) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Lasers/LaserSet"] +position = Vector2(280, 24) +shape = SubResource("RectangleShape2D_gyyvr") +debug_color = Color(0.977603, 0, 0.402823, 0.42) + +[node name="LaserSet2" type="Area2D" parent="Lasers"] +visible = false +position = Vector2(40, 136) + +[node name="Sprite2D" type="Sprite2D" parent="Lasers/LaserSet2"] +position = Vector2(280, 8) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="Sprite2D2" type="Sprite2D" parent="Lasers/LaserSet2"] +position = Vector2(280, 40) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Lasers/LaserSet2"] +position = Vector2(280, 24) +shape = SubResource("RectangleShape2D_gyyvr") +debug_color = Color(0.977603, 0, 0.402823, 0.42) + +[node name="LaserSet3" type="Area2D" parent="Lasers"] +visible = false +position = Vector2(40, 232) + +[node name="Sprite2D" type="Sprite2D" parent="Lasers/LaserSet3"] +position = Vector2(280, 8) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="Sprite2D2" type="Sprite2D" parent="Lasers/LaserSet3"] +position = Vector2(280, 40) +rotation = 1.57079 +scale = Vector2(2.003, 36) +texture = ExtResource("16_wtveo") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Lasers/LaserSet3"] +position = Vector2(280, 24) +shape = SubResource("RectangleShape2D_gyyvr") +debug_color = Color(0.977603, 0, 0.402823, 0.42) + +[node name="Warnings" type="Node2D" parent="."] + +[node name="WarningNode" type="Node2D" parent="Warnings"] +visible = false +position = Vector2(320, 64) + +[node name="Sprite2D" type="Sprite2D" parent="Warnings/WarningNode"] +modulate = Color(1, 0, 0, 0.482353) +scale = Vector2(18, 2) +texture = ExtResource("17_x1jr7") +script = ExtResource("18_x1jr7") + +[node name="WarningNode2" type="Node2D" parent="Warnings"] +visible = false +position = Vector2(320, 160) + +[node name="Sprite2D" type="Sprite2D" parent="Warnings/WarningNode2"] +modulate = Color(1, 0, 0, 0.482353) +scale = Vector2(18, 2) +texture = ExtResource("17_x1jr7") +script = ExtResource("18_x1jr7") + +[node name="WarningNode3" type="Node2D" parent="Warnings"] +visible = false +position = Vector2(320, 256) + +[node name="Sprite2D" type="Sprite2D" parent="Warnings/WarningNode3"] +modulate = Color(1, 0, 0, 0.482353) +scale = Vector2(18, 2) +texture = ExtResource("17_x1jr7") +script = ExtResource("18_x1jr7") + [connection signal="area_entered" from="Player/hitbox" to="Player" method="_on_hitbox_area_entered"] [connection signal="area_entered" from="TheBitWhereYouTrip" to="TripAnimation" method="_on_the_bit_where_you_trip_area_entered"] [connection signal="area_entered" from="BrokenRemote" to="AnimationProps/TVRemote" method="_on_broken_remote_area_entered"] +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/games/platformer/platformer_channel.gd b/games/platformer/platformer_channel.gd index 2028ac2..1ee1e26 100644 --- a/games/platformer/platformer_channel.gd +++ b/games/platformer/platformer_channel.gd @@ -1,8 +1,18 @@ extends Channel +var platformer_online : bool = true + +func _ready() -> void: + #GameManager.end_platformer.connect(end_channel) #maybe? + pass + func _process(delta: float) -> void: offline_channel_cover.visible = channel_mode == Mode.Offline static_channel_cover.visible = channel_mode == Mode.Static + if platformer_online : + modulate = Color.WHITE + else: + modulate = Color.DIM_GRAY func start_specific_channel(scene : PackedScene): var new_scene = scene.instantiate() @@ -12,11 +22,16 @@ func start_specific_channel(scene : PackedScene): channel_mode = Mode.Online func start_channel(): - start_specific_channel(channel_scene) + #start_specific_channel(channel_scene) + print("we do a bit of ovveridng") + platformer_online = true + GameManager.start_platformer.emit() + func end_channel(): - channel_mode = Mode.Static - modulate = Color.DIM_GRAY + #channel_mode = Mode.Static + #modulate = Color.DIM_GRAY + platformer_online = false # TODO: a bunch of stuff here ## bro what did you mean when you meant this T_T #game_viewport.get_child(0).queue_free() diff --git a/itemPopup.gd b/itemPopup.gd index 32c1458..62fe192 100644 --- a/itemPopup.gd +++ b/itemPopup.gd @@ -15,6 +15,8 @@ func _process(delta: float) -> void: if(Input.is_action_just_pressed("advance_prompt")): hidePopup() if(label.text == "Broken TV Remote"): + label.text = "" + print("meow") GameManager.actually_gaming() func showPopup(item_name : String, item_texture : Texture): diff --git a/sprites/whiteSqaure.png b/sprites/whiteSqaure.png new file mode 100644 index 0000000..b517b03 Binary files /dev/null and b/sprites/whiteSqaure.png differ diff --git a/sprites/whiteSqaure.png.import b/sprites/whiteSqaure.png.import new file mode 100644 index 0000000..7905aef --- /dev/null +++ b/sprites/whiteSqaure.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dyfubdnvunea2" +path="res://.godot/imported/whiteSqaure.png-2e11be57a2236d893a3450f853de9c71.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/whiteSqaure.png" +dest_files=["res://.godot/imported/whiteSqaure.png-2e11be57a2236d893a3450f853de9c71.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1