diff --git a/audio/sounds/bubble.wav b/audio/sounds/bubble.wav new file mode 100644 index 0000000..784f7f0 Binary files /dev/null and b/audio/sounds/bubble.wav differ diff --git a/audio/sounds/bubble.wav.import b/audio/sounds/bubble.wav.import new file mode 100644 index 0000000..b178bd5 --- /dev/null +++ b/audio/sounds/bubble.wav.import @@ -0,0 +1,23 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/bubble.wav-a98a00dfb7436d513676d9e46828bcbe.sample" + +[deps] + +source_file="res://audio/sounds/bubble.wav" +dest_files=[ "res://.import/bubble.wav-a98a00dfb7436d513676d9e46828bcbe.sample" ] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/autoloads/audio.gd b/autoloads/audio.gd index 0baca76..e5b72e0 100644 --- a/autoloads/audio.gd +++ b/autoloads/audio.gd @@ -26,6 +26,7 @@ const a_scrump_die = preload("res://audio/sounds/scrump_die.wav") const a_die_robot = preload("res://audio/sounds/die_robot.wav") const a_gover = preload("res://audio/sounds/gover.wav") const a_boss_hurt = preload("res://audio/sounds/boss_hurt.wav") +const a_bubble = preload("res://audio/sounds/bubble.wav") #Plays a sound diff --git a/graphics/hud/oxygen.png b/graphics/hud/oxygen.png new file mode 100644 index 0000000..a46084f Binary files /dev/null and b/graphics/hud/oxygen.png differ diff --git a/graphics/hud/oxygen.png.import b/graphics/hud/oxygen.png.import new file mode 100644 index 0000000..d48e207 --- /dev/null +++ b/graphics/hud/oxygen.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/oxygen.png-bc27b1760336003353c838235a4cb02c.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/oxygen.png" +dest_files=[ "res://.import/oxygen.png-bc27b1760336003353c838235a4cb02c.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/oxygen_blips.png b/graphics/hud/oxygen_blips.png new file mode 100644 index 0000000..ac4b0f8 Binary files /dev/null and b/graphics/hud/oxygen_blips.png differ diff --git a/graphics/hud/oxygen_blips.png.import b/graphics/hud/oxygen_blips.png.import new file mode 100644 index 0000000..23d038b --- /dev/null +++ b/graphics/hud/oxygen_blips.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/oxygen_blips.png-3f20e6a3a7f5eebc14154a2e2292ed5d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/oxygen_blips.png" +dest_files=[ "res://.import/oxygen_blips.png-3f20e6a3a7f5eebc14154a2e2292ed5d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/oxygen_meter.png b/graphics/hud/oxygen_meter.png new file mode 100644 index 0000000..5357304 Binary files /dev/null and b/graphics/hud/oxygen_meter.png differ diff --git a/graphics/hud/oxygen_meter.png.import b/graphics/hud/oxygen_meter.png.import new file mode 100644 index 0000000..e9aebb3 --- /dev/null +++ b/graphics/hud/oxygen_meter.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/oxygen_meter.png-65332a0e74d166901bfa7ecd6045514f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/oxygen_meter.png" +dest_files=[ "res://.import/oxygen_meter.png-65332a0e74d166901bfa7ecd6045514f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/player/sg_jump.png b/graphics/player/sg_jump.png index 2a0d0dc..c12f10a 100644 Binary files a/graphics/player/sg_jump.png and b/graphics/player/sg_jump.png differ diff --git a/graphics/player/sg_jump_mario.png b/graphics/player/sg_jump_mario.png new file mode 100644 index 0000000..c12f10a Binary files /dev/null and b/graphics/player/sg_jump_mario.png differ diff --git a/graphics/player/sg_jump_mario.png.import b/graphics/player/sg_jump_mario.png.import new file mode 100644 index 0000000..1b1f09c --- /dev/null +++ b/graphics/player/sg_jump_mario.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/sg_jump_mario.png-0ac179e6059bca84ad0a66bbae81613a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/player/sg_jump_mario.png" +dest_files=[ "res://.import/sg_jump_mario.png-0ac179e6059bca84ad0a66bbae81613a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/player/sg_jump_megaman.png b/graphics/player/sg_jump_megaman.png new file mode 100644 index 0000000..b5509c2 Binary files /dev/null and b/graphics/player/sg_jump_megaman.png differ diff --git a/graphics/player/sg_jump_megaman.png.import b/graphics/player/sg_jump_megaman.png.import new file mode 100644 index 0000000..a18a89e --- /dev/null +++ b/graphics/player/sg_jump_megaman.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/sg_jump_megaman.png-088fd02f02cca9a2725c777667c983a2.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/player/sg_jump_megaman.png" +dest_files=[ "res://.import/sg_jump_megaman.png-088fd02f02cca9a2725c777667c983a2.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/player/sg_walk.png b/graphics/player/sg_walk.png index 9c41c6f..6ed1dda 100644 Binary files a/graphics/player/sg_walk.png and b/graphics/player/sg_walk.png differ diff --git a/objects/enemy/turtle.tscn b/objects/enemy/turtle.tscn index 032e842..f65d711 100644 --- a/objects/enemy/turtle.tscn +++ b/objects/enemy/turtle.tscn @@ -1,8 +1,14 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://graphics/enemy/turtle.png" type="Texture" id=1] [ext_resource path="res://objects/enemy/turtle.gd" type="Script" id=2] [ext_resource path="res://objects/enemy/death_particles.tscn" type="PackedScene" id=3] +[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=4] + +[sub_resource type="ShaderMaterial" id=6] +shader = ExtResource( 4 ) +shader_param/border_color = Color( 0, 0, 0, 1 ) +shader_param/border_corners = false [sub_resource type="Animation" id=1] length = 0.001 @@ -53,6 +59,7 @@ position = Vector2( 8.5, 4 ) [node name="Sprite" type="Sprite" parent="ToFlip"] unique_name_in_owner = true +material = SubResource( 6 ) position = Vector2( -9.5, -9 ) texture = ExtResource( 1 ) centered = false diff --git a/objects/environment/bubble/bubble.gd b/objects/environment/bubble/bubble.gd index c027b7d..0f7e20a 100644 --- a/objects/environment/bubble/bubble.gd +++ b/objects/environment/bubble/bubble.gd @@ -15,8 +15,10 @@ func _physics_process(delta): sprite.position.x = sin(lifetime * 4.0) * 4.0 position.y -= speed * delta -func _on_area_entered(area): - if area.is_in_group("player_hitbox") or area.is_in_group("arrow"): - sprite.frame_coords.y = 1 - speed = 0.0 - get_tree().create_timer(0.5, false).connect("timeout", self, "queue_free") +func _on_Bubble_body_entered(body): + sprite.frame_coords.y = 1 + speed = 0.0 + get_tree().create_timer(0.5, false).connect("timeout", self, "queue_free") + if body.is_in_group("player"): + body.oxygen_timer.start() + Audio.play_sound(Audio.a_bubble,Audio.ac_die) diff --git a/objects/environment/bubble/bubble.tscn b/objects/environment/bubble/bubble.tscn index e9ea331..33f41dd 100644 --- a/objects/environment/bubble/bubble.tscn +++ b/objects/environment/bubble/bubble.tscn @@ -4,7 +4,7 @@ [ext_resource path="res://objects/environment/bubble/bubble.gd" type="Script" id=2] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 2, 2 ) +extents = Vector2( 5, 5 ) [node name="Bubble" type="Area2D"] script = ExtResource( 2 ) @@ -18,3 +18,4 @@ vframes = 2 shape = SubResource( 1 ) [connection signal="area_entered" from="." to="." method="_on_area_entered"] +[connection signal="body_entered" from="." to="." method="_on_Bubble_body_entered"] diff --git a/objects/hud/hud.gd b/objects/hud/hud.gd index d983165..4db5f6e 100644 --- a/objects/hud/hud.gd +++ b/objects/hud/hud.gd @@ -12,6 +12,8 @@ onready var arrow_counter = $ArrowCounter onready var lives_counter = $LivesCounter onready var high_counter = $HighCounter onready var time_counter = $TimeCounter +onready var oxygen = $Oxygen +onready var oxygen_meter = $Oxygen/OxygenMeter export var song_name = "♫Music" export (Color) var bonus_color @@ -31,6 +33,9 @@ func _ready(): tween.tween_property(music, "rect_position:x", 254.0 - music.rect_size.x, 1.0) tween.tween_interval(3.0) tween.tween_property(music, "rect_position:x", 256.0, 1.0) + #Show oxygen meter when underwater + var player = get_tree().get_nodes_in_group("player").pop_back() + if player.underwater == true: oxygen.visible = true func shard_popup(shard_number): #Change text to song name @@ -79,3 +84,7 @@ func _physics_process(delta): time_counter.modulate = bonus_color else: time_counter.modulate = Color.white + #Oxygen meter + var player = get_tree().get_nodes_in_group("player").pop_back() + oxygen_meter.scale.x = player.oxygen_timer.time_left + #if oxygen_meter.scale.x > 15: oxygen_meter.scale.x = 15 diff --git a/objects/hud/hud.tscn b/objects/hud/hud.tscn index 244b241..b338003 100644 --- a/objects/hud/hud.tscn +++ b/objects/hud/hud.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=16 format=2] [ext_resource path="res://graphics/hud/stars_hud.png" type="Texture" id=1] [ext_resource path="res://graphics/hud/lives_head.png" type="Texture" id=2] @@ -10,6 +10,8 @@ [ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8] [ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=9] [ext_resource path="res://ui/theme.tres" type="Theme" id=10] +[ext_resource path="res://graphics/hud/oxygen.png" type="Texture" id=11] +[ext_resource path="res://graphics/hud/oxygen_meter.png" type="Texture" id=12] [sub_resource type="ShaderMaterial" id=1] @@ -173,3 +175,15 @@ margin_bottom = 192.0 theme = ExtResource( 10 ) text = "§time bonus" align = 2 + +[node name="Oxygen" type="Sprite" parent="."] +visible = false +position = Vector2( 16, 18 ) +texture = ExtResource( 11 ) + +[node name="OxygenMeter" type="Sprite" parent="Oxygen"] +position = Vector2( -2, -1 ) +rotation = 3.14159 +scale = Vector2( 15, 1 ) +texture = ExtResource( 12 ) +flip_v = true diff --git a/objects/player/player.gd b/objects/player/player.gd index 6e11515..a6460f0 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -28,7 +28,8 @@ export var jump_force: float = 150.0 export var jump_release_force: float = 0.25 ## impulse added when double jumping export var double_jump_force: float = 122.0 - +## if on turn on oxygentimer to kill player +export var underwater = false # velocity var velocity: Vector2 = Vector2.ZERO @@ -50,7 +51,8 @@ onready var airborne_shape: CollisionShape2D = $"%AirborneShape" onready var ladder_detector: RayCast2D = $"%LadderDetector" onready var death_splatter_position: Position2D = $"%DeathSplatterPosition" onready var pushable_detector: RayCast2D = $"%PushableDetector" - +onready var oxygen_timer = $OxygenTimer +onready var oxygen_origin = oxygen_timer.wait_time # OVERRIDES # func _ready() -> void: @@ -238,6 +240,8 @@ func _on_Dead_state_entered() -> void: # fade into the ether graphics.visible = false state_chart.send_event("respawn") + #refill oxygen + oxygen_timer.start() func _on_Respawn_state_entered() -> void: global_position = Game.respawn_point @@ -378,3 +382,7 @@ func _on_Hitbox_body_entered(body: Node) -> void: func _on_Ducking_event_received(event): if event == "jump": position.y -= 1 + + +func _on_OxygenTimer_timeout(): + if underwater: die() diff --git a/objects/player/player.tscn b/objects/player/player.tscn index f05dd95..366af9c 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=44 format=2] +[gd_scene load_steps=47 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] -[ext_resource path="res://graphics/player/sg_duck.png" type="Texture" id=2] +[ext_resource path="res://graphics/player/palettes/default.png" type="Texture" id=2] [ext_resource path="res://shaders/recolor_border.shader" type="Shader" id=3] [ext_resource path="res://graphics/player/sg_idle.png" type="Texture" id=4] [ext_resource path="res://addons/godot_state_charts/parallel_state.gd" type="Script" id=5] @@ -23,11 +23,14 @@ [ext_resource path="res://graphics/player/sg_push.png" type="Texture" id=21] [ext_resource path="res://graphics/player/sg_blink.png" type="Texture" id=22] [ext_resource path="res://graphics/player/sg_stim.png" type="Texture" id=23] +[ext_resource path="res://graphics/player/sg_duck.png" type="Texture" id=24] +[ext_resource path="res://graphics/player/sg_jump_megaman.png" type="Texture" id=25] [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 3 ) shader_param/border_color = Color( 0, 0, 0, 1 ) shader_param/border_corners = true +shader_param/palette = ExtResource( 2 ) [sub_resource type="Curve" id=13] _data = [ Vector2( 0, 1 ), 0.0, -0.0636948, 0, 0, Vector2( 1, 0 ), -3.43886, 0.0, 0, 0 ] @@ -265,7 +268,7 @@ tracks/0/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 1, -"values": [ ExtResource( 2 ) ] +"values": [ ExtResource( 24 ) ] } tracks/1/type = "value" tracks/1/path = NodePath("Graphics/Sprite:hframes") @@ -513,6 +516,58 @@ tracks/3/keys = { "values": [ 0.0 ] } +[sub_resource type="Animation" id=21] +resource_name = "jump2" +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("Graphics/Sprite:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 25 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Graphics/Sprite:hframes") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 1 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Graphics/Sprite:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 0 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + [sub_resource type="Animation" id=17] resource_name = "push" length = 0.8 @@ -908,6 +963,7 @@ anims/fall = SubResource( 15 ) anims/fall_scared = SubResource( 14 ) anims/idle = SubResource( 6 ) anims/jump = SubResource( 8 ) +anims/jump2 = SubResource( 21 ) anims/push = SubResource( 17 ) anims/shoot_airborne = SubResource( 11 ) anims/shoot_grounded = SubResource( 10 ) @@ -1254,6 +1310,10 @@ theme = ExtResource( 7 ) custom_styles/bg = SubResource( 4 ) script = ExtResource( 8 ) +[node name="OxygenTimer" type="Timer" parent="."] +wait_time = 20.0 +autostart = true + [connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] [connection signal="state_physics_processing" from="StateChart/Root/Movement" to="." method="_process_movement"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded" to="." method="_on_Grounded_state_entered"] @@ -1289,3 +1349,4 @@ script = ExtResource( 8 ) [connection signal="state_physics_processing" from="StateChart/Root/Movement/Climbing" to="." method="_process_climbing"] [connection signal="state_entered" from="StateChart/Root/Health/Respawn" to="." method="_on_Respawn_state_entered"] [connection signal="state_entered" from="StateChart/Root/Health/Dead" to="." method="_on_Dead_state_entered"] +[connection signal="timeout" from="OxygenTimer" to="." method="_on_OxygenTimer_timeout"]