various updates

This commit is contained in:
Tabby 2025-05-23 21:36:52 +10:00
parent 8d6da7bf7e
commit 43b52fcea9
17 changed files with 244 additions and 109 deletions

54
bugs.md
View file

@ -1,51 +1,5 @@
# Post jam changes # Post jam changes
- [x] asteroids just kills you - [x] score can change after game end
- [x] start by disabling game overs so we can watch the game loop - [x] press enter not needed on item get popup
- [x] maybe also extend the display of ticks and crosses for testing - [x] make space invaders no movement, just have to press the shoot button and hit the ufo
- [x] issue is also present in bullet hell, likely somehting to do with area detection - [x] simplified bomb defusal code
- [x] bullets are created outside of the game node causing them to persist over games
- [x] if you lose the scene doesnt remove itself (probably removes one of the bullets instead)
- [x] can leave level in bullet hell
# Games
- [x] Finish Platformer
- [-] Finish Space Invaders
- [x] Finish Bullet Hell
- [x] Finish Bomb Defusal
- [x] Finish DDR
- [x] Finish Asteroids
- [x] Finish Crafting
- [x] Game Over
# High Priority
- [x] remote breaking animation not working
- [x] pressing enter causes the platformer channel to restart event after the intiial prompt dismissial
- [x] lasers not appearing
- [x] only 1 lane getting warning
- [x] platformer works once but having trouble getting it to replay
- [x] menu credits
- [x] menu exit? (not visible in web build)
- [x] still need a player!!! (make it the cat from catdash?)
## Publishing
- [x] check if web build works well
- [x] finish itch page
- [x] upload game and possible executable
- [x] submit to jam!
# Minor
- [x] score text is infront of the player
- [x] warning areas are infront of the player
- [x] make score and life only appear when game starts
# Ideas
- [x] Have tick/cross effect appear on a won/failed game
- [-] 1 more game
- [-] 2 more games
- [x] standardized timer display
# Sounds
- [x] win sound
- [x] lose sound
- [x] kanes zoom out sound
- [-] music - electronic msuic?

View file

@ -115,12 +115,14 @@ func rec_channel_lose():
func game_over_gg(): func game_over_gg():
zoom_in() zoom_in()
GameManager.send_game_over() GameManager.send_game_over()
if gameplay:
game_over_score.text = str(score)
gameplay = false gameplay = false
main_channel.end_channel() main_channel.end_channel()
for channel in outer_channels: for channel in outer_channels:
channel.make_offline() channel.make_offline()
game_over_screen.show() game_over_screen.show()
game_over_score.text = str(score)
func _on_play_again_button_pressed() -> void: func _on_play_again_button_pressed() -> void:

View file

@ -69,9 +69,8 @@ channel_scene = ExtResource("3_mj2jn")
[node name="Control9" parent="GridContainer" instance=ExtResource("1_mlf6e")] [node name="Control9" parent="GridContainer" instance=ExtResource("1_mlf6e")]
layout_mode = 2 layout_mode = 2
channel_name = "Asteroids" channel_name = "Invaders"
channel_scene = ExtResource("3_mj2jn") channel_scene = ExtResource("9_miq82")
dead_channel = true
[node name="Control6" parent="GridContainer" instance=ExtResource("1_mlf6e")] [node name="Control6" parent="GridContainer" instance=ExtResource("1_mlf6e")]
layout_mode = 2 layout_mode = 2
@ -196,6 +195,7 @@ fit_content = true
horizontal_alignment = 1 horizontal_alignment = 1
[node name="Label3" type="Label" parent="Popup and Chat/Item Get Popup/MarginContainer/VBoxContainer"] [node name="Label3" type="Label" parent="Popup and Chat/Item Get Popup/MarginContainer/VBoxContainer"]
visible = false
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 8 size_flags_horizontal = 8
size_flags_vertical = 8 size_flags_vertical = 8

View file

@ -44,26 +44,29 @@ func _process(delta: float) -> void:
camera.rotation_degrees = rot_dir * (1-timer/time_limit) * 15 camera.rotation_degrees = rot_dir * (1-timer/time_limit) * 15
#TODO Surely theres a better way #TODO Surely theres a better way
if Input.is_action_just_pressed("bomb_0"): for i : int in range(10):
enter_number(0) if Input.is_action_just_pressed("bomb_" + str(i)):
elif Input.is_action_just_pressed("bomb_1"): enter_number(i)
enter_number(1) #if Input.is_action_just_pressed("bomb_0"):
elif Input.is_action_just_pressed("bomb_2"): #enter_number(0)
enter_number(2) #elif Input.is_action_just_pressed("bomb_1"):
elif Input.is_action_just_pressed("bomb_3"): #enter_number(1)
enter_number(3) #elif Input.is_action_just_pressed("bomb_2"):
elif Input.is_action_just_pressed("bomb_4"): #enter_number(2)
enter_number(4) #elif Input.is_action_just_pressed("bomb_3"):
elif Input.is_action_just_pressed("bomb_5"): #enter_number(3)
enter_number(5) #elif Input.is_action_just_pressed("bomb_4"):
elif Input.is_action_just_pressed("bomb_6"): #enter_number(4)
enter_number(6) #elif Input.is_action_just_pressed("bomb_5"):
elif Input.is_action_just_pressed("bomb_7"): #enter_number(5)
enter_number(7) #elif Input.is_action_just_pressed("bomb_6"):
elif Input.is_action_just_pressed("bomb_8"): #enter_number(6)
enter_number(8) #elif Input.is_action_just_pressed("bomb_7"):
elif Input.is_action_just_pressed("bomb_9"): #enter_number(7)
enter_number(9) #elif Input.is_action_just_pressed("bomb_8"):
#enter_number(8)
#elif Input.is_action_just_pressed("bomb_9"):
#enter_number(9)
func enter_number(number : int): func enter_number(number : int):
if(number == current_number): if(number == current_number):

View file

@ -0,0 +1,18 @@
[gd_scene load_steps=4 format=3 uid="uid://ci31lqth7avk3"]
[ext_resource type="Texture2D" uid="uid://d3gtcjbsp5da1" path="res://sprites/invadersBullet.png" id="1_kq8vf"]
[ext_resource type="Script" uid="uid://bmjqhgclmoohl" path="res://games/space invaders/invaders_bullet.gd" id="1_xysrh"]
[sub_resource type="CircleShape2D" id="CircleShape2D_xysrh"]
radius = 7.07107
[node name="InvadersBullet" type="Area2D"]
script = ExtResource("1_xysrh")
speed = 160.0
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_xysrh")
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(2, 2)
texture = ExtResource("1_kq8vf")

View file

@ -0,0 +1,12 @@
extends Area2D
@export var speed : float = 100
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
position.y -= delta * speed

View file

@ -0,0 +1 @@
uid://bmjqhgclmoohl

View file

@ -4,23 +4,23 @@ extends CharacterBody2D
const SPEED = 300.0 const SPEED = 300.0
const JUMP_VELOCITY = -400.0 const JUMP_VELOCITY = -400.0
@export var time_per_bullet : float = 2 @export var bullet_cooldown : float = 1
var next_bullet : float =2 var cooldown : float = 0
@export var bullet_spawn : Marker2D @export var bullet_spawn : Marker2D
@export var bullet_goal : Marker2D @export var bullet_goal : Marker2D
func _ready() -> void: func _ready() -> void:
next_bullet = time_per_bullet cooldown = 0
func _process(delta: float) -> void: func _process(delta: float) -> void:
next_bullet -= delta cooldown -= delta
if next_bullet <= 0: if cooldown <= 0 and Input.is_action_just_pressed("invaders_shoot"):
shoot() shoot()
func shoot(): func shoot():
next_bullet = time_per_bullet cooldown = bullet_cooldown
var new_bullet : Node2D = load("res://games/asteroids/bullet.tscn").instantiate() as Node2D var new_bullet : Node2D = load("res://games/space invaders/invadersBullet.tscn").instantiate() as Node2D
new_bullet.goal = bullet_goal.global_position #new_bullet.goal = bullet_goal.global_position
new_bullet.position = bullet_spawn.global_position new_bullet.position = bullet_spawn.global_position
get_parent().add_child(new_bullet) get_parent().add_child(new_bullet)
@ -28,10 +28,11 @@ func _physics_process(delta: float) -> void:
# Get the input direction and handle the movement/deceleration. # Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions. # As good practice, you should replace UI actions with custom gameplay actions.
var direction := Input.get_axis("invaders_left", "invaders_right") #var direction := Input.get_axis("invaders_left", "invaders_right")
if direction: #if direction:
velocity.x = direction * SPEED #velocity.x = direction * SPEED
else: #else:
velocity.x = move_toward(velocity.x, 0, SPEED) #velocity.x = move_toward(velocity.x, 0, SPEED)
move_and_slide() move_and_slide()

View file

@ -3,6 +3,12 @@ extends Node
signal game_win signal game_win
signal game_lose signal game_lose
@export var ufo_speed : float = 0.1
@export_group("Node References")
@export var ufo_path : PathFollow2D
var ufo_progress : float
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
pass # Replace with function body. pass # Replace with function body.
@ -10,4 +16,13 @@ func _ready() -> void:
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void: func _process(delta: float) -> void:
pass ufo_progress += delta * ufo_speed
ufo_path.progress_ratio = ufo_progress
if ufo_progress >= 1:
print("invaders lose")
game_lose.emit()
func _on_ufo_area_entered(area: Area2D) -> void:
print("invaders win")
game_win.emit()

View file

@ -1,9 +1,9 @@
[gd_scene load_steps=10 format=3 uid="uid://bkabgl6p44c5b"] [gd_scene load_steps=12 format=3 uid="uid://bkabgl6p44c5b"]
[ext_resource type="Texture2D" uid="uid://dqorec3q3h3pp" path="res://sprites/asteroidsShip.png" id="1_8m3yy"]
[ext_resource type="Script" uid="uid://c1e46eu5tbni0" path="res://games/space invaders/ship.gd" id="1_jsxp6"] [ext_resource type="Script" uid="uid://c1e46eu5tbni0" path="res://games/space invaders/ship.gd" id="1_jsxp6"]
[ext_resource type="Script" uid="uid://0v0y62pyhpq4" path="res://games/space invaders/space_invaders.gd" id="1_k5cbn"] [ext_resource type="Script" uid="uid://0v0y62pyhpq4" path="res://games/space invaders/space_invaders.gd" id="1_k5cbn"]
[ext_resource type="Texture2D" uid="uid://by327tfhk6xrs" path="res://sprites/invadersBarrier.png" id="2_jsxp6"] [ext_resource type="Texture2D" uid="uid://d1p5uve4nterl" path="res://sprites/invadersShip.png" id="3_k5cbn"]
[ext_resource type="Texture2D" uid="uid://yff1qo402ihn" path="res://sprites/ufo.png" id="4_k5cbn"]
[sub_resource type="Gradient" id="Gradient_4laqq"] [sub_resource type="Gradient" id="Gradient_4laqq"]
interpolation_mode = 1 interpolation_mode = 1
@ -21,11 +21,21 @@ noise = SubResource("FastNoiseLite_ceqm6")
[sub_resource type="CircleShape2D" id="CircleShape2D_jdxs5"] [sub_resource type="CircleShape2D" id="CircleShape2D_jdxs5"]
radius = 24.1868 radius = 24.1868
[sub_resource type="RectangleShape2D" id="RectangleShape2D_gagve"] [sub_resource type="Curve2D" id="Curve2D_jdxs5"]
size = Vector2(56, 28) _data = {
"points": PackedVector2Array(0, 0, 0, 0, 40, 70, 0, 0, 0, 0, 600, 70, 0, 0, 0, 0, 600, 150, 0, 0, 0, 0, 40, 150, 0, 0, 0, 0, 40, 230, 0, 0, 0, 0, 600, 230)
}
point_count = 6
[node name="SpaceInvaders" type="Node"] [sub_resource type="CircleShape2D" id="CircleShape2D_gagve"]
radius = 32.0
[sub_resource type="LabelSettings" id="LabelSettings_k5cbn"]
font_size = 36
[node name="SpaceInvaders" type="Node" node_paths=PackedStringArray("ufo_path")]
script = ExtResource("1_k5cbn") script = ExtResource("1_k5cbn")
ufo_path = NodePath("UfoPath/PathFollow2D")
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
anchors_preset = 15 anchors_preset = 15
@ -44,7 +54,9 @@ bullet_spawn = NodePath("Spawn")
bullet_goal = NodePath("Goal") bullet_goal = NodePath("Goal")
[node name="Sprite2D" type="Sprite2D" parent="Ship"] [node name="Sprite2D" type="Sprite2D" parent="Ship"]
texture = ExtResource("1_8m3yy") rotation = 1.5708
scale = Vector2(3, 3)
texture = ExtResource("3_k5cbn")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ship"] [node name="CollisionShape2D" type="CollisionShape2D" parent="Ship"]
shape = SubResource("CircleShape2D_jdxs5") shape = SubResource("CircleShape2D_jdxs5")
@ -55,13 +67,33 @@ position = Vector2(34, 1.48619e-06)
[node name="Goal" type="Marker2D" parent="Ship"] [node name="Goal" type="Marker2D" parent="Ship"]
position = Vector2(335, 1.46433e-05) position = Vector2(335, 1.46433e-05)
[node name="Barrier" type="StaticBody2D" parent="."] [node name="UfoPath" type="Path2D" parent="."]
position = Vector2(334, 264) position = Vector2(0, 23)
curve = SubResource("Curve2D_jdxs5")
[node name="Sprite2D" type="Sprite2D" parent="Barrier"] [node name="PathFollow2D" type="PathFollow2D" parent="UfoPath"]
scale = Vector2(2, 2) position = Vector2(40, 70)
texture = ExtResource("2_jsxp6") rotates = false
loop = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="Barrier"] [node name="UFO" type="Area2D" parent="UfoPath/PathFollow2D"]
position = Vector2(0, 2)
shape = SubResource("RectangleShape2D_gagve") [node name="Sprite2D" type="Sprite2D" parent="UfoPath/PathFollow2D/UFO"]
scale = Vector2(3, 3)
texture = ExtResource("4_k5cbn")
[node name="CollisionShape2D" type="CollisionShape2D" parent="UfoPath/PathFollow2D/UFO"]
shape = SubResource("CircleShape2D_gagve")
[node name="Label" type="Label" parent="."]
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -196.0
offset_right = 196.0
offset_bottom = 50.0
grow_horizontal = 2
text = "Shoot The UFO with O!"
label_settings = SubResource("LabelSettings_k5cbn")
[connection signal="area_entered" from="UfoPath/PathFollow2D/UFO" to="." method="_on_ufo_area_entered"]

View file

@ -182,16 +182,11 @@ crafting_m={
"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":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) "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":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null)
] ]
} }
invaders_left={ invaders_shoot={
"deadzone": 0.2, "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":79,"key_label":0,"unicode":111,"location":0,"echo":false,"script":null) "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":79,"key_label":0,"unicode":111,"location":0,"echo":false,"script":null)
] ]
} }
invaders_right={
"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":80,"key_label":0,"unicode":112,"location":0,"echo":false,"script":null)
]
}
ddr_up={ ddr_up={
"deadzone": 0.2, "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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) "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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)

BIN
sprites/invadersBullet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3gtcjbsp5da1"
path="res://.godot/imported/invadersBullet.png-5c6ca626291ba8772f908719ba0580c4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/invadersBullet.png"
dest_files=["res://.godot/imported/invadersBullet.png-5c6ca626291ba8772f908719ba0580c4.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

BIN
sprites/invadersShip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1p5uve4nterl"
path="res://.godot/imported/invadersShip.png-1d152b13cf308ec7080f2e751e00d236.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/invadersShip.png"
dest_files=["res://.godot/imported/invadersShip.png-1d152b13cf308ec7080f2e751e00d236.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

BIN
sprites/ufo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

34
sprites/ufo.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://yff1qo402ihn"
path="res://.godot/imported/ufo.png-e2aa7aa747dae874681794e9d6674c7d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://sprites/ufo.png"
dest_files=["res://.godot/imported/ufo.png-e2aa7aa747dae874681794e9d6674c7d.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