diff --git a/audio/music/rumble_revolution.ogg b/audio/music/rumble_revolution.ogg new file mode 100644 index 0000000..a1aa951 Binary files /dev/null and b/audio/music/rumble_revolution.ogg differ diff --git a/audio/music/rumble_revolution.ogg.import b/audio/music/rumble_revolution.ogg.import new file mode 100644 index 0000000..5cea268 --- /dev/null +++ b/audio/music/rumble_revolution.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/rumble_revolution.ogg-f4caaf13c218d7e4e59d5ae9bc9b9d8a.oggstr" + +[deps] + +source_file="res://audio/music/rumble_revolution.ogg" +dest_files=[ "res://.import/rumble_revolution.ogg-f4caaf13c218d7e4e59d5ae9bc9b9d8a.oggstr" ] + +[params] + +loop=false +loop_offset=0 diff --git a/audio/sounds/cop_splat.ogg b/audio/sounds/cop_splat.ogg new file mode 100644 index 0000000..20d6aaa Binary files /dev/null and b/audio/sounds/cop_splat.ogg differ diff --git a/audio/sounds/cop_splat.ogg.import b/audio/sounds/cop_splat.ogg.import new file mode 100644 index 0000000..71550bd --- /dev/null +++ b/audio/sounds/cop_splat.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/cop_splat.ogg-5903ad8999d95a4ef126279b8e808331.oggstr" + +[deps] + +source_file="res://audio/sounds/cop_splat.ogg" +dest_files=[ "res://.import/cop_splat.ogg-5903ad8999d95a4ef126279b8e808331.oggstr" ] + +[params] + +loop=false +loop_offset=0 diff --git a/audio/sounds/fami_grumble.ogg b/audio/sounds/fami_grumble.ogg new file mode 100644 index 0000000..ff70c8a Binary files /dev/null and b/audio/sounds/fami_grumble.ogg differ diff --git a/audio/sounds/fami_grumble.ogg.import b/audio/sounds/fami_grumble.ogg.import new file mode 100644 index 0000000..6894907 --- /dev/null +++ b/audio/sounds/fami_grumble.ogg.import @@ -0,0 +1,15 @@ +[remap] + +importer="ogg_vorbis" +type="AudioStreamOGGVorbis" +path="res://.import/fami_grumble.ogg-cabbe16ca489c6f315bf9a64fc367c42.oggstr" + +[deps] + +source_file="res://audio/sounds/fami_grumble.ogg" +dest_files=[ "res://.import/fami_grumble.ogg-cabbe16ca489c6f315bf9a64fc367c42.oggstr" ] + +[params] + +loop=false +loop_offset=0 diff --git a/audio/sounds/fami_voice.ogg b/audio/sounds/fami_voice.ogg index 1744803..b0e3991 100644 Binary files a/audio/sounds/fami_voice.ogg and b/audio/sounds/fami_voice.ogg differ diff --git a/audio/sounds/se_g2.wav b/audio/sounds/se_g2.wav new file mode 100644 index 0000000..55ad44b Binary files /dev/null and b/audio/sounds/se_g2.wav differ diff --git a/audio/sounds/se_g2.wav.import b/audio/sounds/se_g2.wav.import new file mode 100644 index 0000000..16491e1 --- /dev/null +++ b/audio/sounds/se_g2.wav.import @@ -0,0 +1,23 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/se_g2.wav-2200ac432f464093b1975ff4500900fb.sample" + +[deps] + +source_file="res://audio/sounds/se_g2.wav" +dest_files=[ "res://.import/se_g2.wav-2200ac432f464093b1975ff4500900fb.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 b4e57d9..4eb9421 100644 --- a/autoloads/audio.gd +++ b/autoloads/audio.gd @@ -54,6 +54,8 @@ const a_teleport = preload("res://audio/sounds/teleport.ogg") const a_mkey = preload("res://audio/sounds/mkey.ogg") const a_msx_die = preload("res://audio/sounds/msx_die.ogg") const a_famira = preload("res://audio/sounds/famira.ogg") +const a_vulcan = preload("res://audio/sounds/se_g2.wav") +const a_grumble = preload("res://audio/sounds/fami_grumble.ogg") var loop_section = null var has_looped = false diff --git a/cutscenes/fami_cutscene.gd b/cutscenes/fami_cutscene.gd index bb18e87..39e46a6 100644 --- a/cutscenes/fami_cutscene.gd +++ b/cutscenes/fami_cutscene.gd @@ -4,7 +4,7 @@ signal cutscene_finished const DeathParticles = preload("res://objects/enemy/death_particles.tscn") -export var cutscene_skip: float = 92.0 +export var cutscene_skip: float = 78.5 onready var animation_player: AnimationPlayer = $AnimationPlayer diff --git a/cutscenes/fami_cutscene.tscn b/cutscenes/fami_cutscene.tscn index 34d5fb0..d12e423 100644 --- a/cutscenes/fami_cutscene.tscn +++ b/cutscenes/fami_cutscene.tscn @@ -192,11 +192,11 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 4.95088, 14.1874, 20.9397, 30.797, 40.2982, 49.7601, 59.7868, 64.7672, 71.5391, 72.2, 92 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"times": PoolRealArray( 0, 4.95088, 13, 19, 28.5, 37, 46.5, 51.5, 58, 59, 78.5 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 2, -"values": [ "Aha so you've made it this far, however your efforts are all in vain.", "You see, SG, -I plan to use the shards to power my spaceship, its exhaust will be so powerful, you peasants will all be vaporized. ", "Me and all of the wonderful billionaires of the world will head to planet X, the newly discovered planet beyond pluto.", "I've heard you want to start a revolution. Well, I'll have you know I kicked off my own revolution in 2068, and to be honest I don't quite see why you want my revolution to end.", "You know what they say, the freer the market, the freer the people, and ever since then I've never felt so free! I think your revolution is a foolish pipe dream! ", "Adam Smith once said \"Nobody but a beggar chooses to depend chiefly upon the benevolence of his fellow citizens\", your commie society could never work!", "I will defend my status quo as fiercly as possible! It was not by my hand that our society was erected, but it will be by mine that it is upheld!", "Oh? How will i reconstruct the Zircon Ultima? You're just the perfect tool for that. ", "While you've been on your gay little adventure collecting shards I've been waiting for this very moment to take them all from you!", "Have at you!", "", "" ] +"values": [ "Aha! so you've made it this far, however your efforts are all in vain.", "You see, SG, +I plan to use the shards to power my spaceship, its exhaust will be so powerful, you peasants will all be vaporized. ", "Me and all of the wonderful billionaires of the world will head to planet X, the newly discovered planet beyond pluto.", "I've heard you want to start a revolution. Well, I'll have you know I kicked off my own revolution in 2068, and to be honest I don't quite see why you want my revolution to end.", "You know what they say, the freer the market, the freer the people, ever since then I've never felt so free! I think your revolution is a foolish pipe dream! ", "Adam Smith once said \"Nobody but a beggar chooses to depend chiefly upon the benevolence of his fellow citizens\", your commie society would never work!", "Oh? How will i reconstruct the Zircon Ultima? You're just the perfect tool for that. ", "While you've been on your gay little adventure collecting shards I've been waiting for this very moment to take them all from you!", "Have at you!", "", "" ] } tracks/1/type = "value" tracks/1/path = NodePath("FamiVoice:playing") @@ -205,10 +205,10 @@ tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PoolRealArray( 0, 0.01, 92 ), -"transitions": PoolRealArray( 1, 1, 1 ), +"times": PoolRealArray( 0, 78.5 ), +"transitions": PoolRealArray( 1, 1 ), "update": 1, -"values": [ false, true, false ] +"values": [ true, false ] } tracks/2/type = "value" tracks/2/path = NodePath("Cop:position") @@ -217,7 +217,7 @@ tracks/2/loop_wrap = true tracks/2/imported = false tracks/2/enabled = true tracks/2/keys = { -"times": PoolRealArray( 0, 72.3, 74 ), +"times": PoolRealArray( 0, 59, 60.5 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 0, "values": [ Vector2( -8, 169 ), Vector2( -8, 169 ), Vector2( 72, 169 ) ] @@ -229,7 +229,7 @@ tracks/3/loop_wrap = true tracks/3/imported = false tracks/3/enabled = true tracks/3/keys = { -"times": PoolRealArray( 72.3, 74 ), +"times": PoolRealArray( 59, 60.5 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ "walk", "gun" ] @@ -241,7 +241,7 @@ tracks/4/loop_wrap = true tracks/4/imported = false tracks/4/enabled = true tracks/4/keys = { -"times": PoolRealArray( 0, 75, 77, 77.4, 83, 85, 89, 89.375 ), +"times": PoolRealArray( 0, 61.5, 63.5, 64, 69.5, 71.5, 75.5, 76 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 1, "values": [ "idle", "walk", "idle", "punch", "walk", "idle", "shrink", "orb" ] @@ -253,7 +253,7 @@ tracks/5/loop_wrap = true tracks/5/imported = false tracks/5/enabled = true tracks/5/keys = { -"times": PoolRealArray( 0, 75, 77, 83, 85, 89, 91, 92 ), +"times": PoolRealArray( 0, 61.5, 63.5, 69.5, 71.5, 75.5, 77.5, 78.5 ), "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), "update": 0, "values": [ Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 105, 167 ), Vector2( 105, 167 ), Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 160, 167 ), Vector2( 160, 83 ) ] @@ -265,7 +265,7 @@ tracks/6/loop_wrap = true tracks/6/imported = false tracks/6/enabled = true tracks/6/keys = { -"times": PoolRealArray( 0.1, 78, 83 ), +"times": PoolRealArray( 0.1, 64.5, 69.5 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 1, "values": [ false, true, false ] @@ -277,7 +277,7 @@ tracks/7/loop_wrap = true tracks/7/imported = false tracks/7/enabled = true tracks/7/keys = { -"times": PoolRealArray( 0, 86, 89 ), +"times": PoolRealArray( 0, 72.5, 75.5 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 1, "values": [ false, true, false ] @@ -289,7 +289,7 @@ tracks/8/loop_wrap = true tracks/8/imported = false tracks/8/enabled = true tracks/8/keys = { -"times": PoolRealArray( 0, 88, 89 ), +"times": PoolRealArray( 0, 74.5, 75.5 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 0, "values": [ Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 1 ) ] @@ -301,7 +301,7 @@ tracks/9/loop_wrap = true tracks/9/imported = false tracks/9/enabled = true tracks/9/keys = { -"times": PoolRealArray( 0, 88, 89 ), +"times": PoolRealArray( 0, 74.5, 75.5 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 0, "values": [ Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 1 ) ] @@ -313,7 +313,7 @@ tracks/10/loop_wrap = true tracks/10/imported = false tracks/10/enabled = true tracks/10/keys = { -"times": PoolRealArray( 92 ), +"times": PoolRealArray( 78.5 ), "transitions": PoolRealArray( 1 ), "values": [ { "args": [ "cutscene_finished" ], @@ -403,7 +403,7 @@ material = ExtResource( 19 ) position = Vector2( 160, 167 ) scale = Vector2( -1, 1 ) frames = SubResource( 7 ) -animation = "idle" +animation = "orb" playing = true [node name="FamiVoice" type="AudioStreamPlayer" parent="."] @@ -417,7 +417,7 @@ anims/cutscene = SubResource( 2 ) [node name="Cop" type="AnimatedSprite" parent="."] material = SubResource( 8 ) -position = Vector2( -8, 169 ) +position = Vector2( 72, 169 ) frames = SubResource( 13 ) animation = "gun" playing = true diff --git a/graphics/npc/msx_future.png b/graphics/npc/msx_future.png index 8f66309..b101777 100644 Binary files a/graphics/npc/msx_future.png and b/graphics/npc/msx_future.png differ diff --git a/maps/boss/boss3_arena.gd b/maps/boss/boss3_arena.gd index 7148877..51164d7 100644 --- a/maps/boss/boss3_arena.gd +++ b/maps/boss/boss3_arena.gd @@ -28,6 +28,7 @@ func _on_cutscene_finished() -> void: famira.visible = true famira.animation_player.play("grow") $AnimationPlayer.play("drop-stg") + Audio.play_music(load("res://audio/music/rumble_revolution.ogg")) yield(get_tree().create_timer(0.5), "timeout") $FamiCutscene/FamiHuman.visible = false diff --git a/objects/enemy/2083_bullet.gd b/objects/enemy/2083_bullet.gd index fe5404a..91fc179 100644 --- a/objects/enemy/2083_bullet.gd +++ b/objects/enemy/2083_bullet.gd @@ -5,9 +5,16 @@ const SmallExplosion = preload("res://objects/enemy/boss/2600_small_explosion.ts export var direction: Vector2 = Vector2.LEFT export var speed: float = 50.0 export var damage: float = 0.0 +onready var sprite = $AnimatedSprite +var lifetime = 0 func _physics_process(delta: float) -> void: position += direction * speed * delta + lifetime += 1 + if lifetime < 10: + var r = rand_range(0,5) + sprite.position.y += sin(Game.time * 20) + print(lifetime) func _exit_tree() -> void: var explosion = SmallExplosion.instance() diff --git a/objects/enemy/boss/famira.gd b/objects/enemy/boss/famira.gd index 32ef37d..caa705e 100644 --- a/objects/enemy/boss/famira.gd +++ b/objects/enemy/boss/famira.gd @@ -5,16 +5,17 @@ signal died() signal health_changed(amount) -export var push_speed: float = 60.0 -export var chase_speed: float = 40.0 -export var breath_dps: float = 50.0 +export var push_speed: float = 30.0 +export var chase_speed: float = 50.0 +export var breath_dps: float = 20.0 export var breath_knockback: float = 16.0 -export var punch_damage: float = 10.0 -export var punch_knockback: float = 8.0 +export var punch_damage: float = 8.0 +export var punch_knockback: float = 40.0 export var hurting: bool = false export var hp: float = 100.0 export var sg2083_beam_dps: float = 10.0 export var sg2083_path: NodePath +export var defense: float = 0.6 onready var animation_player: AnimationPlayer = $"%AnimationPlayer" @@ -22,7 +23,7 @@ onready var state_chart: StateChart = $StateChart onready var in_range_cast: RayCast2D = $InRangeCast onready var out_range_cast: RayCast2D = $OutRangeCast onready var shoot_range_cast: RayCast2D = $ShootRangeCast - +onready var grumble = $Grumble func _physics_process(delta: float) -> void: var sg2083 := get_node(sg2083_path) @@ -35,6 +36,8 @@ func _physics_process(delta: float) -> void: state_chart.send_event("out_of_range") elif in_range_cast.is_colliding(): state_chart.send_event("in_range") + if fmod(Game.time, 15.0) == 0.0: + Audio.play_sound(Audio.a_grumble,Audio.ac_boss) func start_push() -> void: @@ -48,7 +51,7 @@ func stop_push() -> void: func hurt(amount: float) -> void: if hp <= 0.0: return - hp -= amount + hp -= amount * defense hp = max(hp, 0.0) emit_signal("health_changed", hp) if hp <= 0.0: @@ -64,6 +67,7 @@ func _attack() -> void: func _on_Roar_state_entered() -> void: + animation_player.play("roar", 0.25) diff --git a/objects/enemy/boss/famira.tscn b/objects/enemy/boss/famira.tscn index a0eacbb..882b6f8 100644 --- a/objects/enemy/boss/famira.tscn +++ b/objects/enemy/boss/famira.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=53 format=2] +[gd_scene load_steps=54 format=2] [ext_resource path="res://objects/enemy/boss/famira.gd" type="Script" id=1] [ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=2] @@ -26,6 +26,7 @@ [ext_resource path="res://graphics/enemy/boss/fami_parts/head_lower.png" type="Texture" id=24] [ext_resource path="res://graphics/enemy/boss/fami_parts/head_upper.png" type="Texture" id=25] [ext_resource path="res://graphics/enemy/boss/fami_parts/eye.png" type="Texture" id=26] +[ext_resource path="res://audio/sounds/fami_grumble.ogg" type="AudioStream" id=27] [sub_resource type="RectangleShape2D" id=11] extents = Vector2( 28, 64 ) @@ -3999,25 +4000,25 @@ collision_mask = 128 monitorable = false [node name="Body" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 0.00461769, -23.9291 ) -rotation = -0.0114693 +position = Vector2( 0.00459766, -23.9291 ) +rotation = -0.0114701 shape = SubResource( 13 ) [node name="Brain" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 11.5072, -96.7914 ) +position = Vector2( 11.5069, -96.7914 ) rotation = 2.48158 z_index = 100 shape = SubResource( 14 ) [node name="LowerJaw" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( -21.3082, -76.1166 ) -rotation = 1.66396 +position = Vector2( -21.3083, -76.1164 ) +rotation = 1.66395 z_index = 100 shape = SubResource( 15 ) [node name="UpperJaw" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( -21.8181, -103.259 ) -rotation = -1.66238 +position = Vector2( -21.8184, -103.259 ) +rotation = -1.66239 z_index = 100 shape = SubResource( 16 ) @@ -4132,6 +4133,9 @@ collision_mask = 4 collide_with_areas = true collide_with_bodies = false +[node name="Grumble" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 27 ) + [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] [connection signal="state_entered" from="StateChart/Root/Roar" to="." method="_on_Roar_state_entered" flags=3] diff --git a/objects/enemy/boss/sg2083.gd b/objects/enemy/boss/sg2083.gd index ab61634..2e64284 100644 --- a/objects/enemy/boss/sg2083.gd +++ b/objects/enemy/boss/sg2083.gd @@ -19,10 +19,10 @@ export var shot_speed: float = 50.0 export var move_speed: float = 30.0 export var safe_from_breath: bool = false export var make_explosions: bool = false -export var bullet_damage: float = 1.0 -export var bullet_energy: float = 5.0 -export var beam_energy: float = 50.0 -export var duck_energy: float = 10.0 +export var bullet_damage: float = 0.2 +export var bullet_energy: float = 0.0 +export var beam_energy: float = 75.0 +export var duck_energy: float = 0.15 export var explosion_rect: Rect2 export var famira_path: NodePath @@ -43,7 +43,6 @@ func _physics_process(delta: float) -> void: return State.STAND: if Input.is_action_pressed("move_down") and energy >= duck_energy: - set_energy(energy - duck_energy) state = State.DUCK anims.play("Duck") elif Input.is_action_pressed("move_right"): @@ -55,6 +54,8 @@ func _physics_process(delta: float) -> void: State.DUCK: if not Input.is_action_pressed("move_down") and anims.current_animation.empty(): anims.play("UnDuck") + energy -= duck_energy + State.FORWARD: move_and_slide(Vector2(move_speed, 0.0)) State.BACK: @@ -87,7 +88,7 @@ func land(duck: bool) -> void: func shoot() -> void: set_energy(energy - bullet_energy) - Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_collectible) + Audio.play_sound(Audio.a_vulcan,Audio.ac_menu) for pos in bullet_positions.get_children(): var bullet = Bullet.instance() bullet.global_position = pos.global_position diff --git a/objects/enemy/boss/sg2083.tscn b/objects/enemy/boss/sg2083.tscn index f58bef7..0890316 100644 --- a/objects/enemy/boss/sg2083.tscn +++ b/objects/enemy/boss/sg2083.tscn @@ -1610,7 +1610,7 @@ update_scale = false [node name="KneeBack" type="Sprite" parent="Axle"] modulate = Color( 0.74902, 0.74902, 0.74902, 1 ) -position = Vector2( 6.25088, 28.1233 ) +position = Vector2( 6.25089, 28.1233 ) scale = Vector2( 1, -1 ) z_index = -1 texture = ExtResource( 8 )