diff --git a/BGM/Intro_Snow_-_Utsuho.mp3 b/BGM/Intro_Snow_-_Utsuho.mp3 new file mode 100644 index 0000000..a315855 Binary files /dev/null and b/BGM/Intro_Snow_-_Utsuho.mp3 differ diff --git a/BGM/Intro_Snow_-_Utsuho.mp3.import b/BGM/Intro_Snow_-_Utsuho.mp3.import new file mode 100644 index 0000000..d536d42 --- /dev/null +++ b/BGM/Intro_Snow_-_Utsuho.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/Intro_Snow_-_Utsuho.mp3-f719af255c9c746ad5c0d83b1a2b003c.mp3str" + +[deps] + +source_file="res://BGM/Intro_Snow_-_Utsuho.mp3" +dest_files=[ "res://.import/Intro_Snow_-_Utsuho.mp3-f719af255c9c746ad5c0d83b1a2b003c.mp3str" ] + +[params] + +loop=true +loop_offset=0 diff --git a/BGM/Kyouko_Snow_-_Utsuho.mp3 b/BGM/Kyouko_Snow_-_Utsuho.mp3 new file mode 100644 index 0000000..d2c3669 Binary files /dev/null and b/BGM/Kyouko_Snow_-_Utsuho.mp3 differ diff --git a/BGM/Kyouko_Snow_-_Utsuho.mp3.import b/BGM/Kyouko_Snow_-_Utsuho.mp3.import new file mode 100644 index 0000000..e56b805 --- /dev/null +++ b/BGM/Kyouko_Snow_-_Utsuho.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/Kyouko_Snow_-_Utsuho.mp3-739407bb4a286baad94d88f9c881ee47.mp3str" + +[deps] + +source_file="res://BGM/Kyouko_Snow_-_Utsuho.mp3" +dest_files=[ "res://.import/Kyouko_Snow_-_Utsuho.mp3-739407bb4a286baad94d88f9c881ee47.mp3str" ] + +[params] + +loop=true +loop_offset=0 diff --git a/BGM/Letty_Snow_-_Utsuho.mp3 b/BGM/Letty_Snow_-_Utsuho.mp3 new file mode 100644 index 0000000..12ddee4 Binary files /dev/null and b/BGM/Letty_Snow_-_Utsuho.mp3 differ diff --git a/BGM/Letty_Snow_-_Utsuho.mp3.import b/BGM/Letty_Snow_-_Utsuho.mp3.import new file mode 100644 index 0000000..0c30f15 --- /dev/null +++ b/BGM/Letty_Snow_-_Utsuho.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/Letty_Snow_-_Utsuho.mp3-6aa3ce3e75cf8a877a6d642890ee099b.mp3str" + +[deps] + +source_file="res://BGM/Letty_Snow_-_Utsuho.mp3" +dest_files=[ "res://.import/Letty_Snow_-_Utsuho.mp3-6aa3ce3e75cf8a877a6d642890ee099b.mp3str" ] + +[params] + +loop=true +loop_offset=0 diff --git a/BGM/Score_End_-_Utsuho.mp3 b/BGM/Score_End_-_Utsuho.mp3 new file mode 100644 index 0000000..c3ba1b0 Binary files /dev/null and b/BGM/Score_End_-_Utsuho.mp3 differ diff --git a/BGM/Score_End_-_Utsuho.mp3.import b/BGM/Score_End_-_Utsuho.mp3.import new file mode 100644 index 0000000..a9da9f4 --- /dev/null +++ b/BGM/Score_End_-_Utsuho.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/Score_End_-_Utsuho.mp3-377850123232bdb1cd68eb1728dc31dd.mp3str" + +[deps] + +source_file="res://BGM/Score_End_-_Utsuho.mp3" +dest_files=[ "res://.import/Score_End_-_Utsuho.mp3-377850123232bdb1cd68eb1728dc31dd.mp3str" ] + +[params] + +loop=true +loop_offset=0 diff --git a/Graphics/CGs/panel2.png b/Graphics/CGs/panel2.png new file mode 100644 index 0000000..7486da3 Binary files /dev/null and b/Graphics/CGs/panel2.png differ diff --git a/Graphics/CGs/panel2.png.import b/Graphics/CGs/panel2.png.import new file mode 100644 index 0000000..4d7a55e --- /dev/null +++ b/Graphics/CGs/panel2.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/panel2.png-d69bb7f0ebce86dd6b32943e61eed2fb.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Graphics/CGs/panel2.png" +dest_files=[ "res://.import/panel2.png-d69bb7f0ebce86dd6b32943e61eed2fb.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=true +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/CGs/panel3.png b/Graphics/CGs/panel3.png new file mode 100644 index 0000000..35fa6a9 Binary files /dev/null and b/Graphics/CGs/panel3.png differ diff --git a/Graphics/CGs/panel3.png.import b/Graphics/CGs/panel3.png.import new file mode 100644 index 0000000..a402f4c --- /dev/null +++ b/Graphics/CGs/panel3.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/panel3.png-de098c5ce8be90b6089e9c82d2af3a4d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Graphics/CGs/panel3.png" +dest_files=[ "res://.import/panel3.png-de098c5ce8be90b6089e9c82d2af3a4d.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=true +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/Scenes/Autoloads/MusicController.gd b/Scenes/Autoloads/MusicController.gd new file mode 100644 index 0000000..bd0e444 --- /dev/null +++ b/Scenes/Autoloads/MusicController.gd @@ -0,0 +1,36 @@ +extends Node + +var intro_snow = load("res://BGM/Intro_Snow_-_Utsuho.mp3") +var kyouko_snow = load("res://BGM/Kyouko_Snow_-_Utsuho.mp3") +var letty_snow = load("res://BGM/Letty_Snow_-_Utsuho.mp3") +var score_end = load("res://BGM/Score_End_-_Utsuho.mp3") + +var player : AudioStreamPlayer + + +func _ready(): + player = get_node("AudioStreamPlayer") + +func play_intro_snow(): + if not player.playing or not player.stream == intro_snow: + player.stop() + player.stream = intro_snow + player.play() + +func play_kyouko_snow(): + if not player.playing or not player.stream == kyouko_snow: + player.stop() + player.stream = kyouko_snow + player.play() + +func play_letty_snow(): + if not player.playing or not player.stream == letty_snow: + player.stop() + player.stream = letty_snow + player.play() + +func play_score_end(): + if not player.playing or not player.stream == score_end: + player.stop() + player.stream = score_end + player.play() diff --git a/Scenes/Autoloads/MusicController.tscn b/Scenes/Autoloads/MusicController.tscn new file mode 100644 index 0000000..7eaf59d --- /dev/null +++ b/Scenes/Autoloads/MusicController.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Scenes/Autoloads/MusicController.gd" type="Script" id=1] + +[node name="Node" type="Node"] +script = ExtResource( 1 ) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +volume_db = -10.0 diff --git a/Scenes/Cutscene1.tscn b/Scenes/Cutscene1.tscn index 45cfce6..5e7908d 100644 --- a/Scenes/Cutscene1.tscn +++ b/Scenes/Cutscene1.tscn @@ -184,3 +184,4 @@ color = Color( 0, 0, 0, 1 ) [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] stream = ExtResource( 5 ) +volume_db = -10.0 diff --git a/Scenes/Cutscene2.tscn b/Scenes/Cutscene2.tscn new file mode 100644 index 0000000..31845d0 --- /dev/null +++ b/Scenes/Cutscene2.tscn @@ -0,0 +1,184 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://Graphics/UI/DialogueBox.png" type="Texture" id=1] +[ext_resource path="res://Graphics/CGs/panel2.png" type="Texture" id=2] +[ext_resource path="res://Scripts/CutsceneRunner.gd" type="Script" id=3] +[ext_resource path="res://Fonts/luckiest-guy/luckiest-guy.tres" type="DynamicFont" id=4] +[ext_resource path="res://Sounds/Beep.wav" type="AudioStream" id=5] + +[sub_resource type="Animation" id=3] +resource_name = "DialogueFade" +length = 2.0 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.7, 0.701, 1.2, 2 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath("..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.7, 2 ), +"transitions": PoolRealArray( 1, 1 ), +"values": [ { +"args": [ ], +"method": "mid_dialogue_fade" +}, { +"args": [ ], +"method": "dialogue_fade_done" +} ] +} + +[sub_resource type="Animation" id=4] +resource_name = "FinalFade" +length = 1.5 +tracks/0/type = "value" +tracks/0/path = NodePath("../ColorRect:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 1.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath("..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 1.5 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "final_fade_done" +} ] +} + +[sub_resource type="Animation" id=1] +resource_name = "InitialFade" +length = 2.25 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 1.5, 2.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("../ColorRect:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 1.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath("..") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 2.2 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "dialogue_fade_done" +} ] +} + +[sub_resource type="Animation" id=2] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +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": 0, +"values": [ Color( 1, 1, 1, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("../ColorRect:modulate") +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": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 3 ) +cutscene_name = "Cutscene2" +next_scene_to_load = "Cutscene3" + +[node name="CG" type="TextureRect" parent="."] +margin_right = 40.0 +margin_bottom = 40.0 +texture = ExtResource( 2 ) + +[node name="DialogueBox" type="TextureRect" parent="."] +modulate = Color( 1, 1, 1, 0 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -120.0 +texture = ExtResource( 1 ) + +[node name="RichTextLabel" type="RichTextLabel" parent="DialogueBox"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 24.0 +margin_top = 12.0 +margin_right = -24.0 +margin_bottom = -12.0 +custom_colors/default_color = Color( 0.196078, 0.2, 0.32549, 1 ) +custom_fonts/normal_font = ExtResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="DialogueBox"] +anims/DialogueFade = SubResource( 3 ) +anims/FinalFade = SubResource( 4 ) +anims/InitialFade = SubResource( 1 ) +anims/RESET = SubResource( 2 ) + +[node name="ColorRect" type="ColorRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +color = Color( 0, 0, 0, 1 ) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 5 ) +volume_db = -10.0 diff --git a/Scenes/Cutscene3.tscn b/Scenes/Cutscene3.tscn new file mode 100644 index 0000000..cadedce --- /dev/null +++ b/Scenes/Cutscene3.tscn @@ -0,0 +1,184 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://Graphics/UI/DialogueBox.png" type="Texture" id=1] +[ext_resource path="res://Graphics/CGs/panel3.png" type="Texture" id=2] +[ext_resource path="res://Scripts/CutsceneRunner.gd" type="Script" id=3] +[ext_resource path="res://Fonts/luckiest-guy/luckiest-guy.tres" type="DynamicFont" id=4] +[ext_resource path="res://Sounds/Beep.wav" type="AudioStream" id=5] + +[sub_resource type="Animation" id=3] +resource_name = "DialogueFade" +length = 2.0 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.7, 0.701, 1.2, 2 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath("..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.7, 2 ), +"transitions": PoolRealArray( 1, 1 ), +"values": [ { +"args": [ ], +"method": "mid_dialogue_fade" +}, { +"args": [ ], +"method": "dialogue_fade_done" +} ] +} + +[sub_resource type="Animation" id=4] +resource_name = "FinalFade" +length = 1.5 +tracks/0/type = "value" +tracks/0/path = NodePath("../ColorRect:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 1.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "method" +tracks/1/path = NodePath("..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 1.5 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "final_fade_done" +} ] +} + +[sub_resource type="Animation" id=1] +resource_name = "InitialFade" +length = 2.25 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 1.5, 2.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("../ColorRect:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 1.5 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath("..") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 2.2 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "dialogue_fade_done" +} ] +} + +[sub_resource type="Animation" id=2] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +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": 0, +"values": [ Color( 1, 1, 1, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("../ColorRect:modulate") +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": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + +[node name="Control" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 3 ) +cutscene_name = "Cutscene3" +next_scene_to_load = "TitleScreen" + +[node name="CG" type="TextureRect" parent="."] +margin_right = 40.0 +margin_bottom = 40.0 +texture = ExtResource( 2 ) + +[node name="DialogueBox" type="TextureRect" parent="."] +modulate = Color( 1, 1, 1, 0 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = -120.0 +texture = ExtResource( 1 ) + +[node name="RichTextLabel" type="RichTextLabel" parent="DialogueBox"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 24.0 +margin_top = 12.0 +margin_right = -24.0 +margin_bottom = -12.0 +custom_colors/default_color = Color( 0.196078, 0.2, 0.32549, 1 ) +custom_fonts/normal_font = ExtResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="DialogueBox"] +anims/DialogueFade = SubResource( 3 ) +anims/FinalFade = SubResource( 4 ) +anims/InitialFade = SubResource( 1 ) +anims/RESET = SubResource( 2 ) + +[node name="ColorRect" type="ColorRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +color = Color( 0, 0, 0, 1 ) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 5 ) +volume_db = -10.0 diff --git a/Scenes/DownhillAutoscroller.tscn b/Scenes/DownhillAutoscroller.tscn index 2a4086d..6f2c6b4 100644 --- a/Scenes/DownhillAutoscroller.tscn +++ b/Scenes/DownhillAutoscroller.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=15 format=2] [ext_resource path="res://Tile Sets/SnowySlopes.tres" type="TileSet" id=1] [ext_resource path="res://Units/DownhillAutoscrollerPlayer.tscn" type="PackedScene" id=2] @@ -6,6 +6,11 @@ [ext_resource path="res://Graphics/Animations/Background.tres" type="Texture" id=4] [ext_resource path="res://Scripts/GameScene.gd" type="Script" id=5] [ext_resource path="res://Units/DownhillAutoscrollerRivalMystia.tscn" type="PackedScene" id=6] +[ext_resource path="res://Sounds/pichuun.mp3" type="AudioStream" id=7] +[ext_resource path="res://Sounds/whoosh-6316.mp3" type="AudioStream" id=8] +[ext_resource path="res://Sounds/sfx_jump_07-80241.mp3" type="AudioStream" id=9] +[ext_resource path="res://Sounds/land2-43790.mp3" type="AudioStream" id=10] +[ext_resource path="res://Sounds/ski-67717.wav" type="AudioStream" id=11] [sub_resource type="Animation" id=3] resource_name = "InitialFade" @@ -127,3 +132,20 @@ color = Color( 0.12549, 0.231373, 0.2, 1 ) anims/InitialFade = SubResource( 3 ) anims/PitTransition = SubResource( 1 ) anims/RESET = SubResource( 2 ) + +[node name="HitAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 7 ) +volume_db = -4.0 + +[node name="SpinAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 8 ) + +[node name="JumpAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 9 ) + +[node name="LandAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 10 ) +volume_db = 4.0 + +[node name="SnowAudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 11 ) diff --git a/Scenes/TitleScreen.tscn b/Scenes/TitleScreen.tscn index d254238..0b3c3ea 100644 --- a/Scenes/TitleScreen.tscn +++ b/Scenes/TitleScreen.tscn @@ -49,7 +49,7 @@ margin_bottom = 252.0 rect_min_size = Vector2( 360, 60 ) flat = false script = ExtResource( 5 ) -scene_to_load = "res://Scenes/DownhillAutoscroller.tscn" +scene_to_load = "res://Scenes/Cutscene1.tscn" [node name="ManualButton" parent="Menu/CenterRow/Buttons" instance=ExtResource( 2 )] margin_top = 272.0 @@ -58,6 +58,9 @@ margin_bottom = 332.0 rect_min_size = Vector2( 360, 60 ) flat = false script = ExtResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} scene_to_load = "res://Scenes/TitleScreen/Manual.tscn" [node name="CreditsButton" parent="Menu/CenterRow/Buttons" instance=ExtResource( 3 )] @@ -67,6 +70,9 @@ margin_bottom = 412.0 rect_min_size = Vector2( 360, 60 ) flat = false script = ExtResource( 5 ) +__meta__ = { +"_edit_use_anchors_": false +} scene_to_load = "res://Scenes/TitleScreen/Credits.tscn" [node name="CenterContainer" type="CenterContainer" parent="Menu/CenterRow"] diff --git a/Scenes/TitleScreen/StartGame.tscn b/Scenes/TitleScreen/StartGame.tscn index 86dcbc5..81539d8 100644 --- a/Scenes/TitleScreen/StartGame.tscn +++ b/Scenes/TitleScreen/StartGame.tscn @@ -10,9 +10,6 @@ font_data = ExtResource( 1 ) margin_right = 784.0 margin_bottom = 20.0 flat = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="Label" type="Label" parent="."] margin_right = 40.0 diff --git a/Scenes/Title_Screen.gd b/Scenes/Title_Screen.gd index b2f2767..9893e9a 100644 --- a/Scenes/Title_Screen.gd +++ b/Scenes/Title_Screen.gd @@ -8,6 +8,8 @@ extends Control # Called when the node enters the scene tree for the first time. func _ready(): + MusicController.play_intro_snow() + for button in $Menu/CenterRow/Buttons.get_children(): button.connect("pressed", self, "_on_Button_pressed", [button.scene_to_load]) diff --git a/Scripts/CutsceneRunner.gd b/Scripts/CutsceneRunner.gd index 493282c..955d5f7 100644 --- a/Scripts/CutsceneRunner.gd +++ b/Scripts/CutsceneRunner.gd @@ -3,7 +3,7 @@ extends Control export var cutscene_name : String export var next_scene_to_load : String -var text_speed : int = 24 +var text_speed : int = 30 var text_label : RichTextLabel var animation_player : AnimationPlayer @@ -20,11 +20,23 @@ var dialogue_fading_in : bool = true var cutscene_directory = { "Cutscene1": [ - ["Hello.", - "How are you?"], + ["Kyouko: Woooow.", + "Kyouko: I can't believe it's taken this long for them to make a stupid game about me snowboarding."], - ["I'm fine.", - "How about you?"], + ["Reimu: Is the dialogue completed at least?", + "Kyouko: They're still working on it.", + "Reimu: Oh. Wake me up when they're finished."], + + ["Kyouko: Gee, I hope they get the game done soon.", + "Kyouko: I really wanna go snowboarding now."], + + ["Kyouko: Like I reaaally wanna. Really."], + ], + "Cutscene2": [ + ["Kyouko: Ain't got nothing going on in Cutscene 2 huh."], + ], + "Cutscene3": [ + ["Kyouko: Cutscene 3 too."], ], } @@ -61,7 +73,7 @@ func final_fade_done(): func _process(delta): this_text = cutscene_directory[cutscene_name][cutscene_index][cutscene_sub_index] - if Input.is_action_just_released("mouse_click"): + if Input.is_action_just_released("mouse_click") and not dialogue_fading_in: if chars_rendered < this_text.length(): message_time_elapsed = 60 else: diff --git a/Scripts/GameScene.gd b/Scripts/GameScene.gd index 574524c..58d07e0 100644 --- a/Scripts/GameScene.gd +++ b/Scripts/GameScene.gd @@ -55,6 +55,8 @@ var rng = RandomNumberGenerator.new() # Called when the node enters the scene tree for the first time. func _ready(): + MusicController.play_kyouko_snow() + units.append(get_node("Player")) player = units[0] player.init_unit_w_scene(self) diff --git a/Scripts/Units/DownhillAutoscrollerPlayer.gd b/Scripts/Units/DownhillAutoscrollerPlayer.gd index b1139d2..d20e2d9 100644 --- a/Scripts/Units/DownhillAutoscrollerPlayer.gd +++ b/Scripts/Units/DownhillAutoscrollerPlayer.gd @@ -13,6 +13,21 @@ var boost : float = 0 # to movement speed var respawn_pos : Vector2 +var hit_audiostream_player : AudioStreamPlayer +var spin_audiostream_player : AudioStreamPlayer +var jump_audiostream_player : AudioStreamPlayer +var land_audiostream_player : AudioStreamPlayer +var snow_audiostream_player : AudioStreamPlayer + + +func init_unit_w_scene(scene): + .init_unit_w_scene(scene) + hit_audiostream_player = scene.get_node("HitAudioStreamPlayer") + spin_audiostream_player = scene.get_node("SpinAudioStreamPlayer") + jump_audiostream_player = scene.get_node("JumpAudioStreamPlayer") + land_audiostream_player = scene.get_node("LandAudioStreamPlayer") + snow_audiostream_player = scene.get_node("SnowAudioStreamPlayer") + func execute_actions(delta): .execute_actions(delta) for action_num in Constants.UNIT_TYPE_ACTIONS[Constants.UnitType.PLAYER]: @@ -26,6 +41,8 @@ func execute_actions(delta): pass func spin(delta): + if (get_current_action() != Constants.UnitCurrentAction.SPINNING): + spin_audiostream_player.play() set_current_action(Constants.UnitCurrentAction.SPINNING) boost += boost_per_second * delta current_sprite.visible = false @@ -49,6 +66,11 @@ func move(): elif last_contacted_map_elem_type == Constants.MapElemType.SLOPE_LEFT: set_sprite(Constants.SpriteClass.WALK, 4) +func jump(): + if get_current_action() != Constants.UnitCurrentAction.JUMPING: + jump_audiostream_player.play() + .jump() + func reset_current_action(): .reset_current_action() if get_current_action() == Constants.UnitCurrentAction.SPINNING: @@ -58,6 +80,8 @@ func reset_current_action(): get_node("SpinningSprite").rotation = 0 .handle_idle() current_sprite.visible = true + else: + spin_audiostream_player.stop() func custom_inputs(): if scene.input_table[Constants.PlayerInput.GBA_B][scene.I_T_JUST_PRESSED]: @@ -154,6 +178,11 @@ func hit(dir : int): set_action(Constants.ActionType.RECOIL) set_current_action(Constants.UnitCurrentAction.RECOILING) set_unit_condition(Constants.UnitCondition.MOVING_STATUS, Constants.UnitMovingStatus.IDLE) + + get_node("SpinningSprite").visible = false + get_node("SpinningSprite").rotation = 0 + + hit_audiostream_player.play() # override super class's RECOIL_PUSHBACK func handle_recoil(): @@ -166,9 +195,11 @@ func handle_recoil(): func landed(): get_node("SpinningSprite").visible = false get_node("SpinningSprite").rotation = 0 + land_audiostream_player.play() if get_current_action() == Constants.UnitCurrentAction.SPINNING: hit(Constants.Direction.RIGHT) boost = 0 + spin_audiostream_player.stop() return target_move_speed += boost boost = 0 @@ -206,6 +237,11 @@ func react(delta): spectator_cam.make_current() var anim_player : AnimationPlayer = scene.find_node("PitTransitionPlayer") anim_player.play("PitTransition") + if get_condition(Constants.UnitCondition.IS_ON_GROUND, true) and h_speed > 3: + if not snow_audiostream_player.playing: + snow_audiostream_player.play() + else: + snow_audiostream_player.stop() func respawn_from_pit(): pos = respawn_pos diff --git a/Sounds/land2-43790.mp3 b/Sounds/land2-43790.mp3 new file mode 100644 index 0000000..2d574c9 Binary files /dev/null and b/Sounds/land2-43790.mp3 differ diff --git a/Sounds/land2-43790.mp3.import b/Sounds/land2-43790.mp3.import new file mode 100644 index 0000000..1ed447d --- /dev/null +++ b/Sounds/land2-43790.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/land2-43790.mp3-08d329cdc8778c1f01e3c5943f95640e.mp3str" + +[deps] + +source_file="res://Sounds/land2-43790.mp3" +dest_files=[ "res://.import/land2-43790.mp3-08d329cdc8778c1f01e3c5943f95640e.mp3str" ] + +[params] + +loop=false +loop_offset=0 diff --git a/Sounds/pichuun.mp3 b/Sounds/pichuun.mp3 new file mode 100644 index 0000000..e75fe03 Binary files /dev/null and b/Sounds/pichuun.mp3 differ diff --git a/Sounds/pichuun.mp3.import b/Sounds/pichuun.mp3.import new file mode 100644 index 0000000..2ed4e6c --- /dev/null +++ b/Sounds/pichuun.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/pichuun.mp3-597282f5c51b34396ee2c36de78d600b.mp3str" + +[deps] + +source_file="res://Sounds/pichuun.mp3" +dest_files=[ "res://.import/pichuun.mp3-597282f5c51b34396ee2c36de78d600b.mp3str" ] + +[params] + +loop=false +loop_offset=0 diff --git a/Sounds/sfx_jump_07-80241.mp3 b/Sounds/sfx_jump_07-80241.mp3 new file mode 100644 index 0000000..5ac13d6 Binary files /dev/null and b/Sounds/sfx_jump_07-80241.mp3 differ diff --git a/Sounds/sfx_jump_07-80241.mp3.import b/Sounds/sfx_jump_07-80241.mp3.import new file mode 100644 index 0000000..dea5516 --- /dev/null +++ b/Sounds/sfx_jump_07-80241.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/sfx_jump_07-80241.mp3-878187d74ba161ca3d4bbaa6cf06aebc.mp3str" + +[deps] + +source_file="res://Sounds/sfx_jump_07-80241.mp3" +dest_files=[ "res://.import/sfx_jump_07-80241.mp3-878187d74ba161ca3d4bbaa6cf06aebc.mp3str" ] + +[params] + +loop=false +loop_offset=0 diff --git a/Sounds/ski-67717.wav b/Sounds/ski-67717.wav new file mode 100644 index 0000000..66e1d2f Binary files /dev/null and b/Sounds/ski-67717.wav differ diff --git a/Sounds/ski-67717.wav.import b/Sounds/ski-67717.wav.import new file mode 100644 index 0000000..ad207d6 --- /dev/null +++ b/Sounds/ski-67717.wav.import @@ -0,0 +1,23 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/ski-67717.wav-2b20c36d1051f75f3627e6c510169fff.sample" + +[deps] + +source_file="res://Sounds/ski-67717.wav" +dest_files=[ "res://.import/ski-67717.wav-2b20c36d1051f75f3627e6c510169fff.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=2 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Sounds/whoosh-6316.mp3 b/Sounds/whoosh-6316.mp3 new file mode 100644 index 0000000..6f4a71c Binary files /dev/null and b/Sounds/whoosh-6316.mp3 differ diff --git a/Sounds/whoosh-6316.mp3.import b/Sounds/whoosh-6316.mp3.import new file mode 100644 index 0000000..d194d59 --- /dev/null +++ b/Sounds/whoosh-6316.mp3.import @@ -0,0 +1,15 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +path="res://.import/whoosh-6316.mp3-e19872bf94467833a500e7454df7b6b0.mp3str" + +[deps] + +source_file="res://Sounds/whoosh-6316.mp3" +dest_files=[ "res://.import/whoosh-6316.mp3-e19872bf94467833a500e7454df7b6b0.mp3str" ] + +[params] + +loop=true +loop_offset=0 diff --git a/project.godot b/project.godot index 117b137..23cf4e8 100644 --- a/project.godot +++ b/project.godot @@ -54,6 +54,10 @@ config/name="Moriya's Wanton Winter Wager" run/main_scene="res://Scenes/DownhillAutoscroller.tscn" config/icon="res://icon.png" +[autoload] + +MusicController="*res://Scenes/Autoloads/MusicController.tscn" + [display] window/size/height=768